summaryrefslogtreecommitdiffstats
path: root/codebase
diff options
context:
space:
mode:
authorAlexKlimenkov <shurick.klimenkov@gmail.com>2014-06-10 20:50:30 +0300
committerAlexKlimenkov <shurick.klimenkov@gmail.com>2014-06-10 20:50:30 +0300
commitb5a0589955460a44c5428c4cb5429fcfce265d23 (patch)
tree87db58400a3e036de646fb630cbb358beeac3bc1 /codebase
parente2aaaef8540fabd0b5200a4959c269d6f1ae352e (diff)
downloadscheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.zip
scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.tar.gz
scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.tar.bz2
[update] version 4.1.0
Diffstat (limited to 'codebase')
-rw-r--r--codebase/connector/base_connector.php32
-rw-r--r--codebase/connector/combo_connector.php2
-rw-r--r--codebase/connector/data_connector.php38
-rw-r--r--codebase/connector/dataprocessor.php26
-rw-r--r--codebase/connector/dataview_connector.php1
-rw-r--r--codebase/connector/db_common.php84
-rw-r--r--codebase/connector/db_oracle.php4
-rw-r--r--codebase/connector/gantt_connector.php364
-rw-r--r--codebase/connector/grid_connector.php2
-rw-r--r--codebase/connector/strategy.php18
-rw-r--r--codebase/connector/tree_connector.php3
-rw-r--r--codebase/connector/treegrid_connector.php2
-rw-r--r--codebase/connector/treegridmultitable_connector.php2
-rw-r--r--codebase/dhtmlxscheduler.css10
-rw-r--r--codebase/dhtmlxscheduler.js453
-rw-r--r--codebase/dhtmlxscheduler_classic.css10
-rw-r--r--codebase/dhtmlxscheduler_flat.css8
-rw-r--r--codebase/dhtmlxscheduler_glossy.css10
-rw-r--r--codebase/ext/dhtmlxscheduler_active_links.js13
-rw-r--r--codebase/ext/dhtmlxscheduler_agenda_view.js21
-rw-r--r--codebase/ext/dhtmlxscheduler_all_timed.js17
-rw-r--r--codebase/ext/dhtmlxscheduler_collision.js16
-rw-r--r--codebase/ext/dhtmlxscheduler_container_autoresize.js21
-rw-r--r--codebase/ext/dhtmlxscheduler_cookie.js12
-rw-r--r--codebase/ext/dhtmlxscheduler_editors.js21
-rw-r--r--codebase/ext/dhtmlxscheduler_expand.js15
-rw-r--r--codebase/ext/dhtmlxscheduler_grid_view.js49
-rw-r--r--codebase/ext/dhtmlxscheduler_html_templates.js10
-rw-r--r--codebase/ext/dhtmlxscheduler_key_nav.js15
-rw-r--r--codebase/ext/dhtmlxscheduler_layer.js26
-rw-r--r--codebase/ext/dhtmlxscheduler_limit.js63
-rw-r--r--codebase/ext/dhtmlxscheduler_map_view.js53
-rw-r--r--codebase/ext/dhtmlxscheduler_minical.js50
-rw-r--r--codebase/ext/dhtmlxscheduler_monthheight.js10
-rw-r--r--codebase/ext/dhtmlxscheduler_multisection.js16
-rw-r--r--codebase/ext/dhtmlxscheduler_multiselect.js14
-rw-r--r--codebase/ext/dhtmlxscheduler_multisource.js10
-rw-r--r--codebase/ext/dhtmlxscheduler_mvc.js15
-rw-r--r--codebase/ext/dhtmlxscheduler_offline.js16
-rw-r--r--codebase/ext/dhtmlxscheduler_outerdrag.js14
-rw-r--r--codebase/ext/dhtmlxscheduler_pdf.js38
-rw-r--r--codebase/ext/dhtmlxscheduler_quick_info.js27
-rw-r--r--codebase/ext/dhtmlxscheduler_readonly.js19
-rw-r--r--codebase/ext/dhtmlxscheduler_recurring.js73
-rw-r--r--codebase/ext/dhtmlxscheduler_serialize.js17
-rw-r--r--codebase/ext/dhtmlxscheduler_timeline.js100
-rw-r--r--codebase/ext/dhtmlxscheduler_tooltip.js24
-rw-r--r--codebase/ext/dhtmlxscheduler_treetimeline.js34
-rw-r--r--codebase/ext/dhtmlxscheduler_units.js30
-rw-r--r--codebase/ext/dhtmlxscheduler_url.js12
-rw-r--r--codebase/ext/dhtmlxscheduler_week_agenda.js34
-rw-r--r--codebase/ext/dhtmlxscheduler_wp.js9
-rw-r--r--codebase/ext/dhtmlxscheduler_year_view.js40
-rw-r--r--codebase/imgs_flat/arrow_left.pngbin0 -> 1119 bytes
-rw-r--r--codebase/imgs_flat/arrow_right.pngbin0 -> 1114 bytes
-rw-r--r--codebase/imgs_flat/but_repeat.gifbin0 -> 1472 bytes
-rw-r--r--codebase/imgs_flat/calendar.gifbin0 -> 1018 bytes
-rw-r--r--codebase/imgs_flat/clock.pngbin0 -> 1290 bytes
-rw-r--r--codebase/imgs_flat/clock_big.gifbin0 -> 1958 bytes
-rw-r--r--codebase/imgs_flat/clock_small.gifbin0 -> 588 bytes
-rw-r--r--codebase/imgs_flat/close_icon.pngbin0 -> 162 bytes
-rw-r--r--codebase/imgs_flat/collapse_expand_icon.gifbin0 -> 1192 bytes
-rw-r--r--codebase/imgs_flat/controls.pngbin0 -> 761 bytes
-rw-r--r--codebase/imgs_flat/databg.pngbin0 -> 103 bytes
-rw-r--r--codebase/imgs_flat/databg_now.pngbin0 -> 103 bytes
-rw-r--r--codebase/imgs_flat/export_ical.pngbin0 -> 1793 bytes
-rw-r--r--codebase/imgs_flat/export_pdf.pngbin0 -> 1667 bytes
-rw-r--r--codebase/imgs_flat/resize_dots.pngbin0 -> 110 bytes
-rw-r--r--codebase/imgs_flat/resizing.pngbin0 -> 935 bytes
-rw-r--r--codebase/locale/locale_ar.js52
-rw-r--r--codebase/locale/locale_be.js64
-rw-r--r--codebase/locale/locale_ca.js64
-rw-r--r--codebase/locale/locale_cn.js69
-rw-r--r--codebase/locale/locale_cs.js63
-rw-r--r--codebase/locale/locale_da.js62
-rw-r--r--codebase/locale/locale_de.js62
-rw-r--r--codebase/locale/locale_el.js63
-rw-r--r--codebase/locale/locale_en.js63
-rw-r--r--codebase/locale/locale_es.js64
-rw-r--r--codebase/locale/locale_fi.js63
-rw-r--r--codebase/locale/locale_fr.js61
-rw-r--r--codebase/locale/locale_he.js63
-rw-r--r--codebase/locale/locale_hu.js57
-rw-r--r--codebase/locale/locale_id.js8
-rw-r--r--codebase/locale/locale_it.js61
-rw-r--r--codebase/locale/locale_jp.js65
-rw-r--r--codebase/locale/locale_nb.js61
-rw-r--r--codebase/locale/locale_nl.js63
-rw-r--r--codebase/locale/locale_no.js63
-rw-r--r--codebase/locale/locale_pl.js63
-rw-r--r--codebase/locale/locale_pt.js73
-rw-r--r--codebase/locale/locale_ro.js67
-rw-r--r--codebase/locale/locale_ru.js61
-rw-r--r--codebase/locale/locale_si.js63
-rw-r--r--codebase/locale/locale_sk.js63
-rw-r--r--codebase/locale/locale_sv.js62
-rw-r--r--codebase/locale/locale_tr.js62
-rw-r--r--codebase/locale/locale_ua.js62
-rw-r--r--codebase/sources/dhtmlxscheduler.js6148
-rw-r--r--codebase/sources/dhtmlxscheduler.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_active_links.js43
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_active_links.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_agenda_view.js123
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_all_timed.js148
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_all_timed.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_collision.js131
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_collision.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_container_autoresize.js164
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_cookie.js73
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_cookie.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_editors.js161
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_editors.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_expand.js76
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_expand.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_grid_view.js483
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_grid_view.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_html_templates.js22
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_html_templates.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_key_nav.js115
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_key_nav.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_layer.js407
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_layer.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_limit.js965
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_limit.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_map_view.js492
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_map_view.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_minical.js472
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_minical.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_monthheight.js34
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_monthheight.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_multisection.js254
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_multisection.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_multiselect.js69
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_multiselect.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_multisource.js29
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_multisource.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_mvc.js147
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_mvc.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_offline.js83
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_offline.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_outerdrag.js60
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_pdf.js363
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_pdf.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_quick_info.js199
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_quick_info.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_readonly.js160
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_readonly.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_recurring.js818
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_recurring.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_serialize.js110
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_serialize.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_timeline.js1277
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_timeline.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_tooltip.js223
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_tooltip.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_treetimeline.js313
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_units.js259
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_units.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_url.js37
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_url.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_week_agenda.js261
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_wp.js20
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_wp.js.map1
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_year_view.js391
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_year_view.js.map1
-rw-r--r--codebase/sources/skins/dhtmlxscheduler.css2238
-rw-r--r--codebase/sources/skins/dhtmlxscheduler_classic.css1560
-rw-r--r--codebase/sources/skins/dhtmlxscheduler_flat.css2343
-rw-r--r--codebase/sources/skins/dhtmlxscheduler_glossy.css1882
174 files changed, 26271 insertions, 708 deletions
diff --git a/codebase/connector/base_connector.php b/codebase/connector/base_connector.php
index ac25b00..26f1f8b 100644
--- a/codebase/connector/base_connector.php
+++ b/codebase/connector/base_connector.php
@@ -290,6 +290,7 @@ class Connector {
public static $filter_var="dhx_filter";
public static $sort_var="dhx_sort";
+ public static $kids_var="dhx_kids";
public $model=false;
@@ -312,7 +313,8 @@ class Connector {
protected $filters;
protected $sorts;
protected $mix;
-
+ protected $order = false;
+
/*! constructor
Here initilization of all Masters occurs, execution timer initialized
@@ -599,16 +601,20 @@ class Connector {
$this->request->set_sort($this->resolve_parameter($k),$v);
}
- if (isset($_GET[Connector::$sort_var]))
+ if (isset($_GET[Connector::$filter_var]))
foreach($_GET[Connector::$filter_var] as $k => $v){
$k = $this->safe_field_name($k);
- $this->request->set_filter($this->resolve_parameter($k),$v);
+ if ($v !== "")
+ $this->request->set_filter($this->resolve_parameter($k),$v);
}
+ $this->check_csrf();
+ }
+
+ protected function check_csrf(){
$key = ConnectorSecurity::checkCSRF($this->editing);
if ($key !== "")
$this->add_top_attribute(ConnectorSecurity::$security_var, $key);
-
}
/*! convert incoming request name to the actual DB name
@@ -704,7 +710,23 @@ class Connector {
*/
public function dynamic_loading($count){
$this->dload=$count;
- }
+ }
+
+ /*! enable or disable data reordering
+
+ @param name
+ name of field, which will be used for order storing, optional
+ by default 'sortorder' field will be used
+ */
+ public function enable_order($name = true){
+ if ($name === true)
+ $name = "sortorder";
+
+ $this->sort($name);
+ $this->access->allow("order");
+ $this->request->set_order($name);
+ $this->order = $name;
+ }
/*! enable logging
diff --git a/codebase/connector/combo_connector.php b/codebase/connector/combo_connector.php
index 35c66e9..ad28017 100644
--- a/codebase/connector/combo_connector.php
+++ b/codebase/connector/combo_connector.php
@@ -25,7 +25,7 @@ class ComboDataItem extends DataItem{
function to_xml_start(){
if ($this->skip) return "";
- return "<option ".($this->selected?"selected='true'":"")."value='".$this->get_id()."'><![CDATA[".$this->data[$this->config->text[0]["name"]]."]]>";
+ return "<option ".($this->selected?"selected='true' ":"")."value='".$this->get_id()."'><![CDATA[".$this->data[$this->config->text[0]["name"]]."]]>";
}
/*! return self as XML string, ending part
*/
diff --git a/codebase/connector/data_connector.php b/codebase/connector/data_connector.php
index caa5369..7c9251d 100644
--- a/codebase/connector/data_connector.php
+++ b/codebase/connector/data_connector.php
@@ -113,6 +113,12 @@ class DataConnector extends Connector{
$this->sections[$name] = $string;
}
+ protected function parse_request_mode(){
+ if (isset($_GET['action']) && $_GET["action"] != "get")
+ $this->editing = true;
+ else
+ parent::parse_request_mode();
+ }
//parse GET scoope, all operations with incoming request must be done here
protected function parse_request(){
@@ -131,10 +137,10 @@ class DataConnector extends Connector{
//data saving
$this->editing = true;
}
+ parent::check_csrf();
} else {
if (isset($_GET['editing']) && isset($_POST['ids']))
$this->editing = true;
-
parent::parse_request();
}
@@ -146,7 +152,10 @@ class DataConnector extends Connector{
/*! renders self as xml, starting part
*/
protected function xml_start(){
- $start = parent::xml_start();
+ $start = "<data";
+ foreach($this->attributes as $k=>$v)
+ $start .= " ".$k."='".$v."'";
+ $start.= ">";
foreach($this->sections as $k=>$v)
$start .= "<".$k.">".$v."</".$k.">\n";
@@ -192,7 +201,7 @@ class JSONDataConnector extends DataConnector{
$name = $k;
$option="\"{$name}\":[";
if (!is_string($this->options[$name]))
- $option.=substr($this->options[$name]->render(),0,-2);
+ $option.=substr(json_encode($this->options[$name]->render()),1,-1);
else
$option.=$this->options[$name];
$option.="]";
@@ -260,7 +269,7 @@ class JSONCommonDataItem extends DataItem{
/*! return self as XML string
*/
function to_xml(){
- if ($this->skip) return "";
+ if ($this->skip) return false;
$data = array(
'id' => $this->get_id()
@@ -271,8 +280,11 @@ class JSONCommonDataItem extends DataItem{
}
if ($this->userdata !== false)
- foreach ($this->userdata as $key => $value)
+ foreach ($this->userdata as $key => $value){
+ if ($value === null)
+ $data[$key]="";
$data[$key]=$value;
+ }
return $data;
}
@@ -337,7 +349,7 @@ class TreeCommonDataItem extends CommonDataItem{
$str.=" ".$key."='".$this->xmlentities($value)."'";
if ($this->kids === true)
- $str .=" dhx_kids='1'";
+ $str .=" ".Connector::$kids_var."='1'";
return $str.">";
}
@@ -391,7 +403,11 @@ class TreeDataConnector extends DataConnector{
/*! renders self as xml, starting part
*/
protected function xml_start(){
- return "<data parent='".$this->request->get_relation()."'>";
+ $attributes = " parent='".$this->request->get_relation()."' ";
+ foreach($this->attributes as $k=>$v)
+ $attributes .= " ".$k."='".$v."'";
+
+ return "<data".$attributes.">";
}
}
@@ -417,6 +433,10 @@ class JSONTreeDataConnector extends TreeDataConnector{
if (!empty($this->options))
$data["collections"] = $this->options;
+
+ foreach($this->attributes as $k=>$v)
+ $data[$k] = $v;
+
$data = json_encode($data);
// return as string
@@ -472,7 +492,7 @@ class JSONTreeCommonDataItem extends TreeCommonDataItem{
/*! return self as XML string
*/
function to_xml_start(){
- if ($this->skip) return "";
+ if ($this->skip) return false;
$data = array( "id" => $this->get_id() );
for ($i=0; $i<sizeof($this->config->text); $i++){
@@ -486,7 +506,7 @@ class JSONTreeCommonDataItem extends TreeCommonDataItem{
$data[$key]=$value;
if ($this->kids === true)
- $data["dhx_kids"] = 1;
+ $data[Connector::$kids_var] = 1;
return $data;
}
diff --git a/codebase/connector/dataprocessor.php b/codebase/connector/dataprocessor.php
index e75fc85..26f778b 100644
--- a/codebase/connector/dataprocessor.php
+++ b/codebase/connector/dataprocessor.php
@@ -160,12 +160,15 @@ class DataProcessor{
$mode = $this->status_to_mode($action->get_status());
if (!$this->connector->access->check($mode)){
- LogMaster::log("Access control: {$operation} operation blocked");
+ LogMaster::log("Access control: {$mode} operation blocked");
$action->error();
} else {
$check = $this->connector->event->trigger("beforeProcessing",$action);
if (!$action->is_ready())
$this->check_exts($action,$mode);
+ if ($mode == "insert" && $action->get_status() != "error" && $action->get_status() != "invalid")
+ $this->connector->sql->new_record_order($action, $this->request);
+
$check = $this->connector->event->trigger("afterProcessing",$action);
}
@@ -178,13 +181,14 @@ class DataProcessor{
if ($this->connector->sql->is_record_transaction()){
if ($action->get_status()=="error" || $action->get_status()=="invalid")
- $this->connector->sql->rollback_transaction();
+ $this->connector->sql->rollback_transaction();
else
- $this->connector->sql->commit_transaction();
+ $this->connector->sql->commit_transaction();
}
-
+
return $action;
}
+
/*! check if some event intercepts processing, send data to DataWrapper in other case
@param action
@@ -484,11 +488,23 @@ class DataAction{
function to_xml(){
$str="<action type='{$this->status}' sid='{$this->id}' tid='{$this->nid}' ";
foreach ($this->attrs as $k => $v) {
- $str.=$k."='".$v."' ";
+ $str.=$k."='".$this->xmlentities($v)."' ";
}
$str.=">{$this->output}</action>";
return $str;
}
+
+ /*! replace xml unsafe characters
+
+ @param string
+ string to be escaped
+ @return
+ escaped string
+ */
+ public function xmlentities($string) {
+ return str_replace( array( '&', '"', "'", '<', '>', '’' ), array( '&amp;' , '&quot;', '&apos;' , '&lt;' , '&gt;', '&apos;' ), $string);
+ }
+
/*! convert self to string ( for logs )
@return
diff --git a/codebase/connector/dataview_connector.php b/codebase/connector/dataview_connector.php
index 41b7387..fe2c9fd 100644
--- a/codebase/connector/dataview_connector.php
+++ b/codebase/connector/dataview_connector.php
@@ -60,7 +60,6 @@ class DataViewConnector extends Connector{
foreach($this->attributes as $k=>$v)
$attributes .= " ".$k."='".$v."'";
- $start.= ">";
if ($this->dload){
if ($pos=$this->request->get_start())
return "<data pos='".$pos."'".$attributes.">";
diff --git a/codebase/connector/db_common.php b/codebase/connector/db_common.php
index 76748e7..e2f521e 100644
--- a/codebase/connector/db_common.php
+++ b/codebase/connector/db_common.php
@@ -14,6 +14,7 @@ class DataRequestConfig{
private $start; //!< start of requested data
private $count; //!< length of requested data
+ private $order = false;
private $user;
private $version;
@@ -83,6 +84,12 @@ class DataRequestConfig{
}
+ public function get_order(){
+ return $this->order;
+ }
+ public function set_order($order){
+ $this->order = $order;
+ }
public function get_user(){
return $this->user;
}
@@ -642,6 +649,73 @@ abstract class DBDataWrapper extends DataWrapper{
return $str;
}
+ public function new_record_order($action, $source){
+ $order = $source->get_order();
+ if ($order){
+ $table = $source->get_source();
+ $id = $this->config->id["db_name"];
+ $idvalue = $action->get_new_id();
+
+ $max = $this->queryOne("SELECT MAX($order) as dhx_maxvalue FROM $table");
+ $dhx_maxvalue = $max["dhx_maxvalue"] + 1;
+
+ $this->query("UPDATE $table SET $order = $dhx_maxvalue WHERE $id = $idvalue");
+ }
+ }
+
+ public function order($data, $source){
+ //id of moved item
+ $id1 = $this->escape($data->get_value("id"));
+ //id of target item
+ $target = $data->get_value("target");
+ if (strpos($target, "next:") !== false){
+ $dropnext = true;
+ $id2 = str_replace("next:", "", $target);
+ } else {
+ $id2 = $target;
+ }
+ $id2 = $this->escape($id2);
+
+
+ //for tree like components we need to limit out queries to the affected branch only
+ $relation_select = $relation_update = $relation_sql_out = $relation_sql = "";
+ if ($this->config->relation_id["name"]){
+ $relation = $data->get_value($this->config->relation_id["name"]);
+ if ($relation !== false && $relation !== ""){
+ $relation_sql = " ".$this->config->relation_id["db_name"]." = '".$this->escape($relation)."' AND ";
+ $relation_select = $this->config->relation_id["db_name"]." as dhx_parent, ";
+ $relation_update = " ".$this->config->relation_id["db_name"]." = '".$this->escape($relation)."', ";
+ }
+ }
+
+
+ $name = $source->get_order();
+ $table = $source->get_source();
+ $idkey = $this->config->id["db_name"];
+
+ $source = $this->queryOne("select $relation_select $name as dhx_index from $table where $idkey = '$id1'");
+ $source_index = $source["dhx_index"] ? $source["dhx_index"] : 0;
+ if ($relation_sql)
+ $relation_sql_out = " ".$this->config->relation_id["db_name"]." = '".$this->escape($source["dhx_parent"])."' AND ";
+
+ $this->query("update $table set $name = $name - 1 where $relation_sql_out $name >= $source_index");
+
+ if ($id2 !== ""){
+ $target = $this->queryOne("select $name as dhx_index from $table where $idkey = '$id2'");
+ $target_index = $target["dhx_index"];
+ if (!$target_index)
+ $target_index = 0;
+ if ($dropnext)
+ $target_index += 1;
+ $this->query("update $table set $name = $name + 1 where $relation_sql $name >= $target_index");
+ } else {
+ $target = $this->queryOne("select max($name) as dhx_index from $table");
+ $target_index = ($target["dhx_index"] ? $target["dhx_index"] : 0)+1;
+ }
+
+ $this->query("update $table set $relation_update $name = $target_index where $idkey = '$id1'");
+ }
+
public function insert($data,$source){
$sql=$this->insert_query($data,$source);
$this->query($sql);
@@ -726,8 +800,14 @@ abstract class DBDataWrapper extends DataWrapper{
else
array_push($sql,$this->escape_name($rules[$i]["name"])." ".$rules[$i]["operation"]." '".$this->escape($rules[$i]["value"])."'");
}
- if ($relation!==false)
- array_push($sql,$this->escape_name($this->config->relation_id["db_name"])." = '".$this->escape($relation)."'");
+
+ if ($relation !== false && $relation !== ""){
+ $relsql = $this->escape_name($this->config->relation_id["db_name"])." = '".$this->escape($relation)."'";
+ if ($relation == "0")
+ $relsql = "( ".$relsql." OR ".$this->escape_name($this->config->relation_id["db_name"])." IS NULL )";
+
+ array_push($sql,$relsql);
+ }
return implode(" AND ",$sql);
}
/*! convert sorting rules to sql string
diff --git a/codebase/connector/db_oracle.php b/codebase/connector/db_oracle.php
index 064d55a..703d3a4 100644
--- a/codebase/connector/db_oracle.php
+++ b/codebase/connector/db_oracle.php
@@ -23,8 +23,8 @@ class OracleDBDataWrapper extends DBDataWrapper{
$mode = ($this->is_record_transaction() || $this->is_global_transaction())?OCI_DEFAULT:OCI_COMMIT_ON_SUCCESS;
- $res=oci_execute($stm,$mode);
- if ($res===false) throw new Exception("Oracle - sql execution failed\n".oci_error($this->connection));
+ $res = @oci_execute($stm,$mode);
+ if ($res===false) throw new Exception(oci_error($this->connection));
$this->last_id=$out[0];
diff --git a/codebase/connector/gantt_connector.php b/codebase/connector/gantt_connector.php
new file mode 100644
index 0000000..74b8636
--- /dev/null
+++ b/codebase/connector/gantt_connector.php
@@ -0,0 +1,364 @@
+<?php
+/*
+ @author dhtmlx.com
+ @license GPL, see license.txt
+*/
+require_once("base_connector.php");
+require_once("data_connector.php");
+
+/*! DataItem class for Gantt component
+**/
+class GanttDataItem extends DataItem{
+
+ /*! return self as XML string
+ */
+ function to_xml(){
+ if ($this->skip) return "";
+
+ $str="<task id='".$this->get_id()."' >";
+ $str.="<start_date><![CDATA[".$this->data[$this->config->text[0]["name"]]."]]></start_date>";
+ $str.="<".$this->config->text[1]["name"]."><![CDATA[".$this->data[$this->config->text[1]["name"]]."]]></".$this->config->text[1]["name"].">";
+ $str.="<text><![CDATA[".$this->data[$this->config->text[2]["name"]]."]]></text>";
+ for ($i=3; $i<sizeof($this->config->text); $i++){
+ $extra = $this->config->text[$i]["name"];
+ $str.="<".$extra."><![CDATA[".$this->data[$extra]."]]></".$extra.">";
+ }
+ if ($this->userdata !== false)
+ foreach ($this->userdata as $key => $value)
+ $str.="<".$key."><![CDATA[".$value."]]></".$key.">";
+
+ return $str."</task>";
+ }
+}
+
+
+/*! Connector class for dhtmlxGantt
+**/
+class GanttConnector extends Connector{
+
+ protected $extra_output="";//!< extra info which need to be sent to client side
+ protected $options=array();//!< hash of OptionsConnector
+ protected $links_mode = false;
+
+
+ /*! assign options collection to the column
+
+ @param name
+ name of the column
+ @param options
+ array or connector object
+ */
+ public function set_options($name,$options){
+ if (is_array($options)){
+ $str="";
+ foreach($options as $k => $v)
+ $str.="<item value='".$this->xmlentities($k)."' label='".$this->xmlentities($v)."' />";
+ $options=$str;
+ }
+ $this->options[$name]=$options;
+ }
+
+
+ /*! constructor
+
+ Here initilization of all Masters occurs, execution timer initialized
+ @param res
+ db connection resource
+ @param type
+ string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided
+ @param item_type
+ name of class, which will be used for item rendering, optional, DataItem will be used by default
+ @param data_type
+ name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default.
+ * @param render_type
+ name of class which will be used for rendering.
+ */
+ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){
+ if (!$item_type) $item_type="GanttDataItem";
+ if (!$data_type) $data_type="GanttDataProcessor";
+ if (!$render_type) $render_type="RenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
+
+ $this->event->attach("afterDelete", array($this, "delete_related_links"));
+ $this->event->attach("afterOrder", array($this, "order_set_parent"));
+ }
+
+ //parse GET scoope, all operations with incoming request must be done here
+ function parse_request(){
+ parent::parse_request();
+
+ if (isset($_GET["gantt_mode"]) && $_GET["gantt_mode"] == "links")
+ $this->links_mode = true;
+
+ if (count($this->config->text)){
+ if (isset($_GET["to"]))
+ $this->request->set_filter($this->config->text[0]["name"],$_GET["to"],"<");
+ if (isset($_GET["from"]))
+ $this->request->set_filter($this->config->text[1]["name"],$_GET["from"],">");
+ }
+ }
+
+ function order_set_parent($action){
+ $value = $action->get_id();
+ $parent = $action->get_value("parent");
+
+ $table = $this->request->get_source();
+ $id = $this->config->id["db_name"];
+
+ $this->sql->query("UPDATE $table SET parent = $parent WHERE $id = $value");
+ }
+
+ function delete_related_links($action){
+ if (isset($this->options["links"])){
+ $links = $this->options["links"];
+ $value = $this->sql->escape($action->get_new_id());
+ $table = $links->get_request()->get_source();
+
+ $this->sql->query("DELETE FROM $table WHERE source = '$value'");
+ $this->sql->query("DELETE FROM $table WHERE target = '$value'");
+ }
+ }
+
+ public function render_links($table,$id="",$fields=false,$extra=false,$relation_id=false) {
+ $links = new GanttLinksConnector($this->get_connection(),$this->names["db_class"]);
+ $links->render_table($table,$id,$fields,$extra);
+ $this->set_options("links", $links);
+ }
+}
+
+/*! DataProcessor class for Gantt component
+**/
+class GanttDataProcessor extends DataProcessor{
+ function name_data($data){
+ if ($data=="start_date")
+ return $this->config->text[0]["db_name"];
+ if ($data=="id")
+ return $this->config->id["db_name"];
+ if ($data=="duration" && $this->config->text[1]["name"] == "duration")
+ return $this->config->text[1]["db_name"];
+ if ($data=="end_date" && $this->config->text[1]["name"] == "end_date")
+ return $this->config->text[1]["db_name"];
+ if ($data=="text")
+ return $this->config->text[2]["db_name"];
+
+ return $data;
+ }
+}
+
+
+class JSONGanttDataItem extends GanttDataItem{
+ /*! return self as XML string
+ */
+ function to_xml(){
+ if ($this->skip) return "";
+
+ $obj = array();
+ $obj['id'] = $this->get_id();
+ $obj['start_date'] = $this->data[$this->config->text[0]["name"]];
+ $obj[$this->config->text[1]["name"]] = $this->data[$this->config->text[1]["name"]];
+ $obj['text'] = $this->data[$this->config->text[2]["name"]];
+ for ($i=3; $i<sizeof($this->config->text); $i++){
+ $extra = $this->config->text[$i]["name"];
+ $obj[$extra]=$this->data[$extra];
+ }
+
+ if ($this->userdata !== false)
+ foreach ($this->userdata as $key => $value)
+ $obj[$key]=$value;
+
+ return $obj;
+ }
+}
+
+
+class JSONGanttConnector extends GanttConnector {
+
+ protected $data_separator = ",";
+
+ /*! constructor
+
+ Here initilization of all Masters occurs, execution timer initialized
+ @param res
+ db connection resource
+ @param type
+ string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided
+ @param item_type
+ name of class, which will be used for item rendering, optional, DataItem will be used by default
+ @param data_type
+ name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default.
+ */
+ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){
+ if (!$item_type) $item_type="JSONGanttDataItem";
+ if (!$data_type) $data_type="GanttDataProcessor";
+ if (!$render_type) $render_type="JSONRenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
+ }
+
+ protected function xml_start() {
+ return '{ "data":';
+ }
+
+ protected function xml_end() {
+ $this->fill_collections();
+ $end = (!empty($this->extra_output)) ? ', "collections": {'.$this->extra_output.'}' : '';
+ foreach ($this->attributes as $k => $v)
+ $end.=", \"".$k."\":\"".$v."\"";
+ $end .= '}';
+ return $end;
+ }
+
+ /*! assign options collection to the column
+
+ @param name
+ name of the column
+ @param options
+ array or connector object
+ */
+ public function set_options($name,$options){
+ if (is_array($options)){
+ $str=array();
+ foreach($options as $k => $v)
+ $str[]='{"id":"'.$this->xmlentities($k).'", "value":"'.$this->xmlentities($v).'"}';
+ $options=implode(",",$str);
+ }
+ $this->options[$name]=$options;
+ }
+
+
+ /*! generates xml description for options collections
+
+ @param list
+ comma separated list of column names, for which options need to be generated
+ */
+ protected function fill_collections($list=""){
+ $options = array();
+ foreach ($this->options as $k=>$v) {
+ $name = $k;
+ $option="\"{$name}\":[";
+ if (!is_string($this->options[$name])){
+ $data = json_encode($this->options[$name]->render());
+ $option.=substr($data,1,-1);
+ } else
+ $option.=$this->options[$name];
+ $option.="]";
+ $options[] = $option;
+ }
+ $this->extra_output .= implode($this->data_separator, $options);
+ }
+
+
+ /*! output fetched data as XML
+ @param res
+ DB resultset
+ */
+ protected function output_as_xml($res){
+ $result = $this->render_set($res);
+ if ($this->simple) return $result;
+
+ $data=$this->xml_start().json_encode($result).$this->xml_end();
+
+ if ($this->as_string) return $data;
+
+ $out = new OutputWriter($data, "");
+ $out->set_type("json");
+ $this->event->trigger("beforeOutput", $this, $out);
+ $out->output("", true, $this->encoding);
+ }
+
+ public function render_links($table,$id="",$fields=false,$extra=false,$relation_id=false) {
+ $links = new JSONGanttLinksConnector($this->get_connection(),$this->names["db_class"]);
+ $links->render_table($table,$id,$fields,$extra);
+ $this->set_options("links", $links);
+ }
+
+
+ /*! render self
+ process commands, output requested data as XML
+ */
+ public function render(){
+ $this->event->trigger("onInit", $this);
+ EventMaster::trigger_static("connectorInit",$this);
+
+ if (!$this->as_string)
+ $this->parse_request();
+ $this->set_relation();
+
+ if ($this->live_update !== false && $this->updating!==false) {
+ $this->live_update->get_updates();
+ } else {
+ if ($this->editing){
+ if ($this->links_mode && isset($this->options["links"])) {
+ $this->options["links"]->save();
+ } else {
+ $dp = new $this->names["data_class"]($this,$this->config,$this->request);
+ $dp->process($this->config,$this->request);
+ }
+ } else {
+ if (!$this->access->check("read")){
+ LogMaster::log("Access control: read operation blocked");
+ echo "Access denied";
+ die();
+ }
+ $wrap = new SortInterface($this->request);
+ $this->apply_sorts($wrap);
+ $this->event->trigger("beforeSort",$wrap);
+ $wrap->store();
+
+ $wrap = new FilterInterface($this->request);
+ $this->apply_filters($wrap);
+ $this->event->trigger("beforeFilter",$wrap);
+ $wrap->store();
+
+ if ($this->model && method_exists($this->model, "get")){
+ $this->sql = new ArrayDBDataWrapper();
+ $result = new ArrayQueryWrapper(call_user_func(array($this->model, "get"), $this->request));
+ $out = $this->output_as_xml($result);
+ } else {
+ $out = $this->output_as_xml($this->get_resource());
+
+ if ($out !== null) return $out;
+ }
+
+ }
+ }
+ $this->end_run();
+ }
+}
+
+
+class GanttLinksConnector extends OptionsConnector {
+ public function render(){
+ if (!$this->init_flag){
+ $this->init_flag=true;
+ return "";
+ }
+
+ $res = $this->sql->select($this->request);
+ return $this->render_set($res);
+ }
+
+ public function save() {
+ $dp = new $this->names["data_class"]($this,$this->config,$this->request);
+ $dp->process($this->config,$this->request);
+ }
+}
+
+
+class JSONGanttLinksConnector extends JSONOptionsConnector {
+ public function render(){
+ if (!$this->init_flag){
+ $this->init_flag=true;
+ return "";
+ }
+
+ $res = $this->sql->select($this->request);
+ return $this->render_set($res);
+ }
+
+ public function save() {
+ $dp = new $this->names["data_class"]($this,$this->config,$this->request);
+ $dp->process($this->config,$this->request);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/codebase/connector/grid_connector.php b/codebase/connector/grid_connector.php
index 9748dee..10a98bd 100644
--- a/codebase/connector/grid_connector.php
+++ b/codebase/connector/grid_connector.php
@@ -87,7 +87,7 @@ class GridDataItem extends DataItem{
public function to_xml_start(){
if ($this->skip) return "";
- $str="<row id='".$this->get_id()."'";
+ $str="<row id='".$this->xmlentities($this->get_id())."'";
foreach ($this->row_attrs as $k=>$v)
$str.=" ".$k."='".$v."'";
$str.=">";
diff --git a/codebase/connector/strategy.php b/codebase/connector/strategy.php
index eb579b8..f9a106f 100644
--- a/codebase/connector/strategy.php
+++ b/codebase/connector/strategy.php
@@ -46,7 +46,7 @@ class RenderStrategy {
protected function simple_mix($mix, $data) {
// get mix details
for ($i = 0; $i < count($mix); $i++)
- $data[$mix[$i]["name"]] = is_string($mix[$i]["value"]) ? $mix[$i]["value"] : "";
+ $data[$mix[$i]["name"]] = is_object($mix[$i]["value"]) ? "" : $mix[$i]["value"];
return $data;
}
@@ -130,7 +130,9 @@ class JSONRenderStrategy extends RenderStrategy {
if ($data->get_id()===false)
$data->set_id($conn->uuid());
$conn->event->trigger("beforeRender",$data);
- $output[]=$data->to_xml();
+ $item = $data->to_xml();
+ if ($item !== false)
+ $output[]=$item;
$index++;
}
$this->unmix($config, $mix);
@@ -153,6 +155,7 @@ class TreeRenderStrategy extends RenderStrategy {
$output="";
$index=0;
$conn = $this->conn;
+ $config_copy = new DataConfig($config);
$this->mix($config, $mix);
while ($data=$conn->sql->get_next($res)){
$data = $this->simple_mix($mix, $data);
@@ -166,8 +169,9 @@ class TreeRenderStrategy extends RenderStrategy {
$output.=$data->to_xml_start();
if ($data->has_kids()===-1 || ( $data->has_kids()==true && !$dload)){
$sub_request = new DataRequestConfig($conn->get_request());
+ //$sub_request->set_fieldset(implode(",",$config_copy->db_names_list($conn->sql)));
$sub_request->set_relation($data->get_id());
- $output.=$this->render_set($conn->sql->select($sub_request), $name, $dload, $sep, $config);
+ $output.=$this->render_set($conn->sql->select($sub_request), $name, $dload, $sep, $config_copy, $mix);
}
$output.=$data->to_xml_end();
$index++;
@@ -205,6 +209,7 @@ class JSONTreeRenderStrategy extends TreeRenderStrategy {
$output=array();
$index=0;
$conn = $this->conn;
+ $config_copy = new DataConfig($config);
$this->mix($config, $mix);
while ($data=$conn->sql->get_next($res)){
$data = $this->complex_mix($mix, $data);
@@ -218,12 +223,15 @@ class JSONTreeRenderStrategy extends TreeRenderStrategy {
$record = $data->to_xml_start();
if ($data->has_kids()===-1 || ( $data->has_kids()==true && !$dload)){
$sub_request = new DataRequestConfig($conn->get_request());
+ //$sub_request->set_fieldset(implode(",",$config_copy->db_names_list($conn->sql)));
$sub_request->set_relation($data->get_id());
- $temp = $this->render_set($conn->sql->select($sub_request), $name, $dload, $sep, $config, $mix);
+ //$sub_request->set_filters(array());
+ $temp = $this->render_set($conn->sql->select($sub_request), $name, $dload, $sep, $config_copy, $mix);
if (sizeof($temp))
$record["data"] = $temp;
}
- $output[] = $record;
+ if ($record !== false)
+ $output[] = $record;
$index++;
}
$this->unmix($config, $mix);
diff --git a/codebase/connector/tree_connector.php b/codebase/connector/tree_connector.php
index 6383ff7..154f02a 100644
--- a/codebase/connector/tree_connector.php
+++ b/codebase/connector/tree_connector.php
@@ -198,7 +198,8 @@ class TreeConnector extends Connector{
/*! renders self as xml, ending part
*/
public function xml_end(){
- return "</tree>";
+ $this->fill_collections();
+ return $this->extra_output."</tree>";
}
}
diff --git a/codebase/connector/treegrid_connector.php b/codebase/connector/treegrid_connector.php
index f074879..0bb19ea 100644
--- a/codebase/connector/treegrid_connector.php
+++ b/codebase/connector/treegrid_connector.php
@@ -90,7 +90,7 @@ class TreeGridConnector extends GridConnector{
/*! renders self as xml, starting part
*/
protected function xml_start(){
- return "<rows parent='".$this->request->get_relation()."'>";
+ return "<rows parent='".$this->xmlentities( $this->request->get_relation() )."'>";
}
}
diff --git a/codebase/connector/treegridmultitable_connector.php b/codebase/connector/treegridmultitable_connector.php
index c380ef6..3f4bbd9 100644
--- a/codebase/connector/treegridmultitable_connector.php
+++ b/codebase/connector/treegridmultitable_connector.php
@@ -27,7 +27,7 @@ class TreeGridMultitableConnector extends TreeGridConnector{
public function xml_start(){
if (isset($_GET['id'])) {
- return "<rows parent='".$this->render->level_id($_GET['id'], $this->get_level() - 1)."'>";
+ return "<rows parent='".$this->xmlentities($this->render->level_id($_GET['id'], $this->get_level() - 1))."'>";
} else {
return "<rows parent='0'>";
}
diff --git a/codebase/dhtmlxscheduler.css b/codebase/dhtmlxscheduler.css
index e8b4a88..8371347 100644
--- a/codebase/dhtmlxscheduler.css
+++ b/codebase/dhtmlxscheduler.css
@@ -1,6 +1,8 @@
-@charset "UTF-8";
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-.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:300px;width:300px;text-align:center;position:fixed;background-color:#fff;background:-webkit-linear-gradient(top,#fff 1%,#d0d0d0 99%);background:-moz-linear-gradient(top,#fff 1%,#d0d0d0 99%);box-shadow:0 0 14px #888;font-family:Tahoma;z-index:20000;border-radius:6px;border:1px solid #fff;}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);}.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:5px;}.dhtmlx_popup_button,.dhtmlx_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF;}.dhtmlx_popup_button{min-width:120px;}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:none;zoom:1;}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px;}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid #f00;}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383;}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:normal;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px;}.dhtmlx_button input:focus,.dhtmlx_button input:active,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%);}.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:0 0 10px #888;padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff;}.dhtmlx-info div{padding:5px 10px 5px 10px;background-color:#fff;border-radius:3px;border:1px solid #B8B8B8;}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000;}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF;}.dhx_cal_container{background-color:#C2D5FC;font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden;}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none;}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48;}.dhx_cal_navline div{position:absolute;top:2px;white-space:nowrap;}.dhx_cal_navline .dhx_cal_date{font-weight:600;left:210px;padding-top:1px;}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0;}.dhx_cal_prev_button{background-image:url(imgs/buttons.png);background-position:0 0;width:29px;height:17px;left:50px;cursor:pointer;}.dhx_cal_next_button{background-image:url(imgs/buttons.png);background-position:-30px 0;width:29px;height:17px;left:80px;cursor:pointer;}.dhx_cal_today_button{background-image:url(imgs/buttons.png);background-position:-60px 0;width:75px;height:17px;left:112px;cursor:pointer;text-align:center;text-decoration:underline;}.dhx_cal_tab{width:59px;height:19px;text-align:center;text-decoration:underline;padding-top:2px;cursor:pointer;background-color:#D8E1EA;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:bold;border:1px dotted #586A7E;border-bottom:0;background-color:#C2D5FC;}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;border-top:1px dotted #8894A3;border-right:1px dotted #8894A3;z-index:2;overflow:hidden;color:#2F3A48;}.dhx_cal_data{-webkit-tap-highlight-color:transparent;border-top:1px dotted #8894A3;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;}.dhx_cal_data{-ms-touch-action:pan-y;}.dhx_cal_event,.dhx_cal_event_line,.dhx_cal_event_clear{-ms-touch-action:none;}.dhx_scale_bar{position:absolute;text-align:center;background-color:#C2D5FC;padding-top:3px;border-left:1px dotted #586A7E;}.dhx_scale_holder{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg.png);}.dhx_scale_holder_now{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg_now.png);}.dhx_scale_hour{height:41px;width:50px;border-bottom:1px dotted #8894A3;background-color:#C2D5FC;text-align:center;line-height:40px;color:#586A7E;overflow:hidden;}.dhx_month_head{background-color:#EBEFF4;color:#2F3A48;height:18px;padding-right:5px;padding-top:3px;text-align:right;border-right:1px dotted #586A7E;}.dhx_month_body{border-right:1px dotted #586A7E;border-bottom:1px dotted #586A7E;background-color:#FFF;}.dhx_now .dhx_month_body{background-color:#E2EDFF;}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#ECECEC;}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#E2E3E6;color:#94A6BB;}.dhx_now .dhx_month_head{background-color:#D1DEF4;font-weight:bold;}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50);}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999;}.dhx_multi_day_icon,.dhx_multi_day{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3;}.dhx_multi_day{position:absolute;border-top:1px dotted #8894A3;}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-color:#E1E6FF;background-repeat:no-repeat;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_multi_day_icon{background-image:url(imgs/clock_big.gif);}.dhx_multi_day_icon_small{background-image:url(imgs/clock_small.gif);}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff;}.dhx_scale_hour_border,.dhx_month_body_border,.dhx_scale_bar_border,.dhx_month_head_border{border-left:1px dotted #8894A3;}.dhx_cal_navline .dhx_cal_export{width:18px;height:18px;margin:2px;cursor:pointer;top:0;}.dhx_cal_navline .dhx_cal_export.pdf{left:2px;background-image:url('imgs/export_pdf.png');}.dhx_cal_navline .dhx_cal_export.ical{left:24px;background-image:url('imgs/export_ical.png');}.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title,.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt;}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default;}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0 1px;cursor:pointer;}.dhx_cal_event .dhx_title{height:12px;border-width:0 1px 1px 1px;border-bottom-style:dotted;font-size:7pt;font-weight:bold;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer;}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px 1px;padding:5px;}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important;}.dhx_cal_event .dhx_event_resize{cursor:s-resize;}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px 1px;position:relative;}.dhx_cal_event_line{background-color:#FFE763;border:1px solid #B7A543;border-radius:3px;font-family:Tahoma;font-size:8pt;height:13px;padding-left:10px;color:#887A2E;cursor:pointer;overflow:hidden;}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;color:#887A2E;white-space:nowrap;overflow:hidden;cursor:pointer;}.dhx_in_move{background-color:#FFFF80;}div.dhx_cal_editor{background-color:#FFE763;border:1px solid #B7A543;border-top-style:dotted;z-index:999;position:absolute;overflow:hidden;}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid black;margin:0;padding:0;overflow:auto;}div.dhx_menu_head{background-image:url(imgs/controls.gif);background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default;}div.dhx_menu_icon{background-image:url(imgs/controls.gif);width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer;}div.icon_details{background-position:0 0;}div.icon_edit{background-position:-22px 0;}div.icon_save{background-position:-84px -1px;}div.icon_cancel{background-position:-62px 0;}div.icon_delete{background-position:-42px 0;}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px;}.dhx_month_link a{color:blue;}.dhx_month_link a:hover{text-decoration:underline;}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,0.7);color:#000;z-index:10000;padding:20px 30px;width:190px;}.dhx_global_tip div{font-size:30px;}@media(-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none;}}.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:#FFE763;border-radius:5px;font-family:Tahoma;font-size:8pt;border:1px solid #B7A64B;color:#887A2E;position:absolute;z-index:10001;width:580px;height:300px;box-shadow:5px 5px 5px #888;}.dhx_cal_light_wide{width:650px;}.dhx_mark{position:relative;top:3px;background-image:url('./imgs/controls.gif');background-position:0 -43px;padding-left:10px;}.dhx_ie6 .dhx_mark{background-position:6px -41px;}.dhx_cal_light select{font-family:Tahoma;font-size:8pt;color:#887A2E;padding:2px;margin:0;}.dhx_cal_ltitle{padding:2px 0 2px 5px;overflow:hidden;white-space:nowrap;}.dhx_cal_ltitle span{white-space:nowrap;}.dhx_cal_lsection{background-color:#DBCF8C;color:#FFF4B5;font-weight:bold;padding:5px 0 3px 10px;}.dhx_section_time{background-color:#DBCF8C;white-space:nowrap;}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;color:#887A2E;font-size:12px;font-weight:normal;line-height:20px;vertical-align:top;cursor:pointer;}.dhx_cal_lsection{font-size:18px;font-family:Arial;}.dhx_cal_ltext{padding:2px 0 2px 10px;overflow:hidden;}.dhx_cal_ltext textarea{background-color:#FFF4B5;overflow:auto;border:none;color:#887A2E;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 #DCC43E;background-color:#FFF4B5;overflow:hidden;margin-left:3px;width:572px;height:1px;}.dhx_btn_set{padding:5px 10px 0 10px;float:left;}.dhx_btn_set div{float:left;height:21px;line-height:21px;vertical-align:middle;cursor:pointer;}.dhx_save_btn{background-image:url('./imgs/controls.gif');background-position:-84px 0;width:21px;}.dhx_cancel_btn{background-image:url('./imgs/controls.gif');background-position:-63px 0;width:20px;}.dhx_delete_btn{background-image:url('./imgs/controls.gif');background-position:-42px 0;width:20px;}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:black;opacity:.1;filter:alpha(opacity=10);}.dhx_custom_button{padding:0 3px 0 3px;color:#887A2E;font-family:Tahoma;font-size:8pt;background-color:#FFE763;font-weight:normal;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 .dhx_cal_larea{border-top-width:0;}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;font-size:16px;padding:5px 0 0 10px;}.dhx_cal_light_wide .dhx_wrap_section{border-top:1px solid #DBCF8C;position:relative;background-color:#DBCF8C;overflow:hidden;}.dhx_cal_light_wide .dhx_section_time{padding-top:2px!important;height:20px!important;}.dhx_section_time{text-align:center;}.dhx_cal_light_wide .dhx_cal_larea{width:730px;}.dhx_cal_light_wide{width:738px;}.dhx_cal_light_wide .dhx_section_time{background:transparent;}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0;}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px;}.dhx_cal_light input{font-family:Tahoma;font-size:8pt;color:#887A2E;}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;color:#FFF4B5;font-weight:bold;font-size:16px;font-family:Arial;cursor:pointer;}.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_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_minical_popup{position:absolute;z-index:10100;width:251px;height:175px;}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%;}.dhx_expand_icon{position:absolute;top:0;right:0;background-image:url(./imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16;}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(./imgs/databg.png);}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(./imgs/databg.png);}.dhx_agenda_line{height:21px;clear:both;overflow:hidden;}.dhx_agenda_line div{float:left;width:188px;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3;}.dhx_v_border{position:absolute;left:187px;top:0;border-right:1px dotted #8894A3;width:1px;height:100%;}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_agenda_line span{padding-left:5px;line-height:21px;}.dhx_year_body{border-left:1px dotted #586A7E;}.dhx_year_week{position:relative;}.dhx_scale_bar_last{border-right:1px dotted #586A7E;}.dhx_year_month{height:18px;padding-top:3px;border:1px dotted #586A7E;text-align:center;vertical-align:middle;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a,.dhx_year_body .dhx_after .dhx_month_head a{color:#E2E3E6!important;}.dhx_year_body .dhx_month_body{height:0;overflow:hidden;}.dhx_month_head.dhx_year_event{background-color:#FFE763;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head{cursor:default;}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(./imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden;}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden;}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center;}.dhx_text_disabled{color:#887A2E;font-family:Tahoma;font-size:8pt;}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none;}.dhx_mini_calendar .dhx_month_head{cursor:pointer;}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC;}.dhx_cal_navline div.dhx_minical_icon{width:18px;height:18px;left:190px;top:1px;cursor:pointer;background-image:url(./imgs/calendar.gif);}.dhx_matrix_scell{height:100%;}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_matrix_cell{background-color:white;}.dhx_matrix_line{overflow:hidden;}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto;}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E;}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;background:url(./imgs/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;}.dhx_event_resize_start{left:0;}.dhx_event_resize_end{right:0;}.dhx_matrix_scell.folder,.dhx_data_table.folder .dhx_matrix_cell{background-color:#969394;cursor:pointer;}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px;}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px;}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px;}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px;}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px;}.dhx_matrix_scell.folder{font-weight:bold;text-align:left;}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px;}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto;}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left;}.dhx_data_table.folder .dhx_matrix_cell{border-right:0;}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px;}.dhx_section_timeline select{width:552px;}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(./imgs/databg.png);}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_map_line{height:21px;clear:both;overflow:hidden;}.dhx_map{position:absolute;}.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_description{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border-left:0;}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden;}.dhx_map_line.highlight{background-color:#C4C5CC;}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3;}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888',Direction=135,Strength=5);background-color:white;border-left:1px dotted #887A2E;border-top:1px dotted #887A2E;color:#887A2E;cursor:default;padding:10px;position:absolute;z-index:500;font-family:Tahoma;font-size:8pt;}.dhx_cal_checkbox label{padding-left:5px;}.dhx_cal_light .radio{padding:2px 0 2px 10px;}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px;}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0;}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px;}.dhx_cal_light .combo{padding:4px;}.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px;}.dhx_wa_column{float:left;}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px dotted #8894A3;}.dhx_wa_scale_bar{font-family:Tahoma;padding-left:10px;font-size:11px;border-top:1px dotted #8894A3;border-bottom:1px dotted #8894A3;}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto;}.dhx_wa_ev_body{border-bottom:1px dotted #789;font-size:12px;padding:5px 0 5px 7px;}.dhx_wa_dnd{font-family:Tahoma;position:absolute;padding-right:7px;color:#887AE2!important;background-color:#FFE763!important;border:1px solid #B7A543;}.dhx_cal_event_selected{background-color:#9cc1db;color:white;}.dhx_second_scale_bar{border-bottom:1px dotted #586A7E;padding-top:2px;}.dhx_cal_header div div{border-left:1px dotted #8894A3;}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC;}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed;}.dhx_grid_area td{table-layout:fixed;text-align:center;}.dhx_grid_line{height:21px;clear:both;overflow:hidden;}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden;}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px;}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px 0;}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td{border-bottom-width:0;border-bottom-style:none;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4;;}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important;}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%;}.dhx_grid_event_selected{background-color:#9cc1db!important;color:white!important;}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px;}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px;}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(./imgs/images.png);}.dhx_marked_timespan{position:absolute;width:100%;}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1;}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100);}.dhx_scheduler_month .dhx_marked_timespan{display:none;}.dhx_mini_calendar .dhx_marked_timespan{display:none;}.dhx_now_time{width:100%;border-bottom:2px dotted red;z-index:1;}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px dotted red;}.dhx_matrix_now_time{border-left:2px dotted red;z-index:1;}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:300;background-color:#8e99ae;background-color:rgba(98,107,127,0.5);padding-left:7px;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{padding:5px 0 10px 5px;color:#FFF;letter-spacing:1px;}.dhx_cal_qi_tdate{font-size:14px;}.dhx_cal_qi_tcontent{font-size:18px;font-weight:bold;}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden;}.dhx_qi_big_icon{border-radius:3px;color:#444;margin:5px 9px 5px 0;min-width:60px;line-height:20px;vertical-align:middle;padding:5px 10px 5px 5px;cursor:pointer;background-color:#fefefe;border-bottom:1px solid #666;border-right:1px solid #666;float:left;}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px;}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0;}div.dhx_form_repeat input.radio{margin:-4px 0 0 -4px!ie;}div.dhx_form_repeat input.checkbox{margin:0 0 0 -4px!ie;}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px;}.dhx_form_repeat{overflow:hidden;height:0;background-color:#FFF4B5;}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent;}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left;}.dhx_repeat_left{width:95px;}.dhx_repeat_center{width:335px;margin-top:12px;}.dhx_repeat_divider{float:left;height:115px;border-left:1px dotted #DCC43E;width:1px;}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px;}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px 0 4px;line-height:18px;padding:0 0 0 2px;}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px 0 4px;}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px 0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px;}input.dhx_repeat_radio{margin-right:4px;}input.dhx_repeat_checkbox{margin:4px 4px 0 0;}.dhx_repeat_days td{padding-right:5px;}.dhx_repeat_days label{font-size:10px;}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;}.dhx_custom_button_recurring{background-image:url(./imgs/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px;}.dhx_cal_light_rec{width:640px;}.dhx_cal_light_rec .dhx_cal_larea{width:632px;}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px;}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px;}.dhx_cal_event .dhx_title{border-width:1px 1px 0 1px;padding-top:1px;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;font-family:arial;font-weight:bold;font-size:12px;}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{padding-bottom:8px;-webkit-border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;}.dhx_cal_event .dhx_header,.dhx_cal_event.dhx_cal_select_menu .dhx_footer{display:none;}.dhx_cal_event .dhx_footer{height:5px;border:0;margin-top:-6px;background:url(imgs_dhx_terrace/resizing.png) no-repeat center center;}.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_title{background-color:#1796b0;border-color:transparent;color:white;}div.dhx_cal_editor{border:1px solid transparent;background-color:#1796b0;}.dhx_cal_editor{font-size:12px;font-family:Arial,sans-serif;}div.dhx_menu_head,div.dhx_menu_icon{background-image:url(imgs_dhx_terrace/controls.png);}.dhx_cal_event_line{border:1px solid transparent;background-color:#1796b0;color:white;height:17px;line-height:17px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;}.dhx_cal_event_line_start{-webkit-border-top-left-radius:9px;-webkit-border-bottom-left-radius:9px;-moz-border-radius-topleft:9px;-moz-border-radius-bottomleft:9px;border-top-left-radius:9px;border-bottom-left-radius:9px;}.dhx_cal_event_line_end{-webkit-border-top-right-radius:9px;-webkit-border-bottom-right-radius:9px;-moz-border-radius-topright:9px;-moz-border-radius-bottomright:9px;border-top-right-radius:9px;border-bottom-right-radius:9px;}.dhx_cal_event .dhx_body,.dhx_cal_event_line{font-size:12px;font-family:Arial,sans-serif;}.dhx_cal_container{background-color:white;}.dhx_cal_data{border-top:1px solid #CECECE;}.dhx_scale_holder{background-image:url(imgs_dhx_terrace/databg.png);border-right:1px solid #CECECE;}.dhx_scale_holder_now{background-image:url(imgs_dhx_terrace/databg_now.png);border-right:1px solid #CECECE;}.dhx_scale_hour{border-bottom:1px solid #CECECE;background-color:white;font:11px/44px Arial;color:#767676;}.dhx_cal_header{border:1px solid #CECECE;border-left:0;border-bottom:0;}.dhx_scale_bar{border-left:1px solid #CECECE;}.dhx_scale_bar{font:11px/16px Arial;color:#767676;padding-top:2px;background-color:white;}.dhx_cal_navline div{top:14px;}.dhx_cal_tab,.dhx_cal_date,.dhx_cal_today_button,.dhx_cal_prev_button,.dhx_cal_next_button{color:#454544;height:30px;line-height:30px;background:none;border:1px solid #CECECE;}.dhx_cal_navline .dhx_cal_date{border:0;font-size:18px;font-weight:normal;font-family:arial;width:100%;top:14px;text-align:center;position:absolute;left:0;z-index:-1;}.dhx_cal_today_button{color:#747473;left:auto;right:123px;background:none;text-decoration:none;width:80px;font-size:12px;font-weight:bold;font-family:arial;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}.dhx_cal_prev_button,.dhx_cal_next_button{left:auto;width:46px;}.dhx_cal_prev_button{right:61px;background:url(imgs_dhx_terrace/arrow_left.png) no-repeat center center;-webkit-border-top-left-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-bottomleft:5px;border-top-left-radius:5px;border-bottom-left-radius:5px;}.dhx_cal_next_button{right:14px;background:url(imgs_dhx_terrace/arrow_right.png) no-repeat center center;-webkit-border-top-right-radius:5px;-webkit-border-bottom-right-radius:5px;-moz-border-radius-topright:5px;-moz-border-radius-bottomright:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;}.dhx_cal_tab{color:#747473;width:60px;padding-top:0;text-decoration:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-weight:bold;font-family:arial;font-size:12px;}.dhx_cal_tab.active{background-color:#F0EDE7;color:#454544;border:1px solid #CECECE;text-shadow:0 1px 0 white;}.dhx_cal_tab_first{-webkit-border-top-left-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-bottomleft:5px;border-top-left-radius:5px;border-bottom-left-radius:5px;}.dhx_cal_tab_last{-webkit-border-top-right-radius:5px;-webkit-border-bottom-right-radius:5px;-moz-border-radius-topright:5px;-moz-border-radius-bottomright:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;}.dhx_cal_tab_standalone{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:0 5px;}.dhx_multi_day,.dhx_multi_day_icon_small,.dhx_multi_day_icon{background-color:white;}.dhx_multi_day{border-top:1px solid #CECECE;}.dhx_multi_day_icon,.dhx_multi_day_icon_small{border-bottom:1px solid #CECECE;border-right:1px solid #CECECE;}.dhx_multi_day_icon_small{background-image:url(imgs_dhx_terrace/clock_small.gif);}.dhx_multi_day_icon{background-image:url(imgs_dhx_terrace/clock_big.gif);}.dhx_month_head,.dhx_after .dhx_month_head,.dhx_before .dhx_month_head,.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:white;}.dhx_month_head{height:21px;padding-top:0;font:12px/21px Arial;color:#362d26;border-right:1px solid #CECECE;}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head,.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{color:#bbb;}.dhx_month_body{border-right:1px solid #CECECE;border-bottom:1px solid #CECECE;}.dhx_now .dhx_month_head,.dhx_now .dhx_month_body{background-color:#FFF3A1;font-weight:normal;}.dhx_cal_event_clear{color:#0E64A0;}.dhx_cal_larea{margin-left:0;}.dhx_cal_light_wide .dhx_cal_larea{margin-left:3px;}.dhx_cal_light_wide .dhx_wrap_section{padding:5px 0;}.dhx_cal_light,.dhx_cal_larea,.dhx_cal_lsection,.dhx_wrap_section,.dhx_cal_light_wide .dhx_wrap_section,.dhx_cal_ltext textarea{background-color:white;}.dhx_cal_lsection,.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,.dhx_cal_lsection .dhx_fullday,.dhx_cal_light input{color:#747473;}.dhx_cal_light_wide .dhx_wrap_section{border-top:0;border-bottom:1px solid #CECECE;}.dhx_cal_larea{border:1px solid transparent;}.dhx_cal_ltext textarea,.dhx_cal_light select,.dhx_cal_light{color:#2E2E2E;}.dhx_cal_light{border:1px solid #CECECE;}.dhx_cal_light_wide .dhx_cal_lsection,.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{font-size:13px;}.dhx_section_time{background-color:transparent;}.dhx_save_btn,.dhx_cancel_btn,.dhx_delete_btn,.dhx_btn_set div:first-child{display:none;}.dhx_btn_set,.dhx_btn_set div{height:30px;padding:0 20px;line-height:30px;}.dhx_btn_set{margin:12px 0 0 0;padding:0;font-size:12px;color:#454544;font-weight:bold;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}.dhx_left_btn_set{margin-left:20px;}.dhx_right_btn_set{margin-right:20px;}.dhx_save_btn_set{border:1px solid #22A1BC;color:white;text-shadow:0 -1px 0 #6F6F6F;background-color:#22A1BC;}.dhx_btn_set,.dhx_cancel_btn_set{border:1px solid #CECECE;}.dhx_delete_btn_set{border:1px solid #FF8831;background-color:#FF8831;color:white;text-shadow:0 -1px 0 #93755F;}.dhx_cal_ltitle{height:30px;line-height:30px;border-bottom:1px solid #CECECE;}.dhx_cal_ltitle span{float:left;}.dhx_cal_light .dhx_title{padding-left:13px;}.dhx_mark{display:none;}.dhx_time{padding-left:10px;}.dhx_close_icon{float:right;width:9px;height:9px;background:url(imgs_dhx_terrace/close_icon.png) no-repeat center center;padding:10px;margin-top:1px;}.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template{line-height:22px;}.dhx_cal_ltext textarea{line-height:20px;box-sizing:border-box;-moz-box-sizing:border-box;border:1px solid #CECECE;background-color:#F9F9F9;}.dhtmlx_modal_box{background:white;width:330px;}.dhtmlx_popup_controls{padding-bottom:9px;}.dhtmlx_popup_button,.dhtmlx_popup_button:active,.dhtmlx_popup_button div,.dhtmlx_popup_button div:active{color:#444;background:white;box-shadow:none;}.dhtmlx_popup_button.dhtmlx_ok_button{border:1px solid #22A1BC;background-color:#22A1BC;}.dhtmlx_popup_button.dhtmlx_ok_button div{background:#22A1BC;border:1px solid #22A1BC;color:white;text-shadow:0 -1px 0 #6F6F6F;}.dhx_cal_container.dhx_mini_calendar{box-sizing:border-box;border:1px solid #CECECE;box-shadow:2px 2px 5px #CCC;border-radius:3px;}.dhx_mini_calendar .dhx_year_month{border:1px solid #CECECE;font-family:Arial;}.dhx_mini_calendar .dhx_month_head,.dhx_mini_calendar .dhx_year_month,.dhx_mini_calendar .dhx_month_body,.dhx_mini_calendar .dhx_scale_bar,.dhx_mini_calendar .dhx_year_body{border-color:transparent;}.dhx_mini_calendar .dhx_year_body{padding-top:1px;}.dhx_mini_calendar .dhx_scale_bar{border-width:0;}.dhx_mini_calendar .dhx_year_week{border-bottom:1px solid #CECECE;padding-top:1px;}.dhx_mini_calendar .dhx_month_head{padding-right:0;margin-right:1px;text-align:center;}.dhx_mini_calendar .dhx_cal_prev_button,.dhx_mini_calendar .dhx_cal_next_button{border:0;height:20px;}.dhx_cal_navline div.dhx_minical_icon{left:210px;top:14px;width:30px;height:30px;background:url(./imgs_dhx_terrace/calendar.gif) no-repeat;background-position:3px 5px;}.dhx_cal_event_line .dhx_event_resize{background:url(./imgs_dhx_terrace/resize_dots.png) repeat-y;}.dhx_matrix_scell,.dhx_matrix_cell{border-bottom:1px solid #CECECE;border-right:1px solid #CECECE;}.dhx_cal_header div div{border-left:1px solid #CECECE;}.dhx_matrix_scell.folder{border-right:0;}.dhx_second_scale_bar{border-bottom:1px solid #CECECE;}.dhx_repeat_divider{border-left:1px solid #CECECE;}.dhx_custom_button{background-color:white;border:1px solid #CECECE;color:#747473;}.dhx_cal_light_wide .dhx_custom_button{margin-top:6px;}.dhx_custom_button_recurring{background-image:url(./imgs_dhx_terrace/but_repeat.gif);}.dhx_v_border,.dhx_agenda_line div{border-right:1px solid #CECECE;}.dhx_year_month{border:1px solid #CECECE;}.dhx_scale_bar_last{border-right:1px solid #CECECE;}.dhx_year_body{border-left:1px solid #CECECE;}.dhx_expand_icon{top:-3px;}.dhx_scale_bar .dhx_cal_next_button,.dhx_scale_bar .dhx_cal_prev_button{width:20px;height:20px;top:0!important;border:0;}.dhx_scale_bar .dhx_cal_next_button{right:1px!important;border-left:1px solid #CECECE;}.dhx_scale_bar .dhx_cal_prev_button{left:1px!important;border-right:1px solid #CECECE;}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border:0;}.dhx_map_line .headline_date{border-right:1px solid #CECECE;}.dhtmlXTooltip.tooltip{border-left:1px solid #CECECE;border-top:1px solid #CECECE;color:#747473;font-size:12px;line-height:16px;}.dhx_wa_scale_bar{border-top:1px solid #CECECE;border-bottom:1px solid #CECECE;}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px solid #CECECE;}.dhx_wa_ev_body{border-bottom:1px solid #CECECE;}.dhx_wa_scale_bar{background-color:#f0ede7;}.dhx_wa_ev_body.dhx_cal_event_selected{background-color:#fff3a1;color:#362d26;}.dhx_wa_dnd{background-color:#fddb93!important;color:#747473!important;border:1px solid #ccb177;}.dhx_text_disabled{color:#2E2E2E;}.dhx_cal_ltext .dhx_text_disabled{line-height:22px;}.dhx_grid_v_border{border-right-color:#CECECE;}.dhx_scale_hour_border,.dhx_month_body_border,.dhx_scale_bar_border,.dhx_month_head_border{border-left:1px solid #CECECE;}.dhx_cal_quick_info{background:rgba(50,50,50,0.5);}.dhx_qi_big_icon{background:#1796b0;color:white;}.dhx_cal_navline .dhx_cal_export{width:32px;height:32px;margin:2px;cursor:pointer;top:12px;}.dhx_cal_navline .dhx_cal_export.pdf{left:auto;right:249px;background-image:url('imgs_dhx_terrace/export_pdf.png');}.dhx_cal_navline .dhx_cal_export.ical{left:auto;right:210px;background-image:url('imgs_dhx_terrace/export_ical.png');}.dhx_mini_calendar{padding:5px;}.dhx_mini_calendar .dhx_year_event,.dhx_mini_calendar .dhx_calendar_click{border-radius:7px;}.dhx_mini_calendar .dhx_month_head{margin:2px 2px;}.dhx_mini_calendar .dhx_year_month{line-height:20px;height:25px;font-size:14px;}.dhx_mini_calendar .dhx_cal_prev_button{top:8px!important;}.dhx_mini_calendar .dhx_cal_next_button{top:8px!important;} \ No newline at end of file
+.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;font-family:Tahoma;z-index:10000;overflow:hidden;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:300px;text-align:center;position:fixed;box-shadow:0 0 14px #888;font-family:Tahoma;z-index:20000;border-radius:6px;border:1px solid #fff}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%)}.dhtmlx-info,.dhtmlx_button,.dhtmlx_popup_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:5px}.dhtmlx_button,.dhtmlx_popup_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF}.dhtmlx_popup_button{min-width:120px}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:none;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC)}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:400;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px}.dhtmlx_button input:active,.dhtmlx_button input:focus,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%)}.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-error,.dhtmlx-info{font-size:14px;color:#000;box-shadow:0 0 10px #888;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 #B8B8B8}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{border:1px solid #B7A543;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0;cursor:pointer}.dhx_cal_event .dhx_title{height:12px;border-bottom-style:dotted;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px;padding:5px}.dhx_cal_event.dhx_cal_select_menu{-webkit-box-shadow:0 0 1px #FFF;-moz-box-shadow:0 0 1px #FFF;box-shadow:0 0 1px #FFF}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important}.dhx_cal_event .dhx_event_resize{cursor:s-resize}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px;position:relative}.dhx_cal_event_line{padding-left:10px;cursor:pointer;overflow:hidden}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;white-space:nowrap;overflow:hidden;cursor:pointer}.dhx_in_move{background-color:#FFFF80}.dhx_cal_event.dhx_cal_editor{z-index:999;position:absolute;overflow:hidden}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid #000;margin:0;padding:0;overflow:auto}div.dhx_menu_head{background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default}div.dhx_menu_icon{width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer}div.icon_details{background-position:0 0}div.icon_edit{background-position:-22px 0}div.icon_save{background-position:-84px -1px}div.icon_cancel{background-position:-62px 0}div.icon_delete{background-position:-42px 0}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px}.dhx_month_link a{color:#00f}.dhx_month_link a:hover{text-decoration:underline}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,.7);color:#000;z-index:10000;padding:20px 30px;width:190px}.dhx_global_tip div{font-size:30px}@media (-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none}}.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:5px;font-family:Tahoma;font-size:8pt;position:absolute;z-index:10001;width:580px;height:300px;box-shadow:5px 5px 5px #888}.dhx_mark{position:relative;top:3px;background-image:url(imgs/controls.gif);background-position:0 -43px;padding-left:10px}.dhx_ie6 .dhx_mark{background-position:6px -41px}.dhx_cal_light select{font-family:Tahoma;font-size:8pt;padding:2px;margin:0}.dhx_cal_ltitle{padding:2px 0 2px 5px;overflow:hidden;white-space:nowrap}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{font-weight:700;padding:5px 0 3px 10px}.dhx_section_time{white-space:nowrap}.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:18px;font-family:Arial}.dhx_cal_ltext{padding:2px 0 2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;height:100%;width:100%;outline:0!important;resize:none}.dhx_time{font-weight:700}.dhx_cal_larea{overflow:hidden;width:572px;height:1px}.dhx_btn_set{float:left}.dhx_btn_set div{float:left;vertical-align:middle;cursor:pointer}.dhx_save_btn{background-image:url(imgs/controls.gif);background-position:-84px 0;width:21px}.dhx_cancel_btn{background-image:url(imgs/controls.gif);background-position:-63px 0;width:20px}.dhx_delete_btn{background-image:url(imgs/controls.gif);background-position:-42px 0;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:8pt;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 .dhx_cal_larea{border-top-width:0}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;padding:5px 0 0 10px}.dhx_cal_light_wide .dhx_wrap_section{position:relative;overflow:hidden}.dhx_cal_light_wide .dhx_section_time{padding-top:2px!important;height:20px!important}.dhx_section_time{text-align:center}.dhx_cal_light_wide .dhx_cal_larea{width:730px}.dhx_cal_light_wide{width:738px}.dhx_cal_light_wide .dhx_section_time{background:0 0}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-family:Tahoma;font-size:8pt}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;font-weight:700;font-family:Arial;cursor:pointer}.dhx_custom_button{float:right;height:21px}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_minical_popup{position:absolute;z-index:10100;width:251px;height:175px}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%}.dhx_expand_icon{position:absolute;right:0;background-image:url(imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(imgs/databg.png)}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(imgs/databg.png)}.dhx_agenda_line{height:21px;clear:both;overflow:hidden}.dhx_agenda_line div{float:left;width:188px;text-align:center;line-height:21px;overflow:hidden}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3}.dhx_v_border{position:absolute;left:187px;top:0;width:1px;height:100%}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_agenda_line span{padding-left:5px;line-height:21px}.dhx_year_week{position:relative}.dhx_year_month{height:18px;padding-top:3px;text-align:center;vertical-align:middle}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head a,.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a{color:#E2E3E6!important}.dhx_year_body .dhx_month_body{height:0;overflow:hidden}.dhx_month_head.dhx_year_event{background-color:#FFE763}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head{cursor:default}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center}.dhx_text_disabled{font-family:Tahoma;font-size:8pt}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.dhx_mini_calendar .dhx_month_head{cursor:pointer}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC}.dhx_cal_navline div.dhx_minical_icon{cursor:pointer}.dhx_matrix_scell{height:100%}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle}.dhx_matrix_cell{background-color:#fff}.dhx_matrix_line{overflow:hidden}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;position:absolute;top:0;width:4px;height:100%}.dhx_event_resize_start{left:0}.dhx_event_resize_end{right:0}.dhx_data_table.folder .dhx_matrix_cell,.dhx_matrix_scell.folder{background-color:#969394;cursor:pointer}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px}.dhx_matrix_scell.folder{font-weight:700;text-align:left}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left}.dhx_data_table.folder .dhx_matrix_cell{border-right:0}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px}.dhx_section_timeline select{width:552px}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(imgs/databg.png)}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_map_line{height:21px;clear:both;overflow:hidden}.dhx_map{position:absolute}.dhx_map_line .headline_description,.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden}.dhx_map_line.highlight{background-color:#C4C5CC}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);background-color:#fff;cursor:default;padding:10px;position:absolute;z-index:500;font-family:Tahoma;opacity:1}.dhx_cal_checkbox label{padding-left:5px}.dhx_cal_light .radio{padding:2px 0 2px 10px}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px}.dhx_cal_light .combo{padding:4px}.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px}.dhx_wa_column{float:left}.dhx_wa_scale_bar{font-family:Tahoma;padding-left:10px;font-size:11px}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto}.dhx_wa_ev_body{font-size:12px;padding:5px 0 5px 7px}.dhx_wa_dnd{font-family:Tahoma;position:absolute;padding-right:7px}.dhx_cal_event_selected{background-color:#9cc1db;color:#fff}.dhx_second_scale_bar{padding-top:2px}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed}.dhx_grid_area td{table-layout:fixed;text-align:center}.dhx_grid_line{height:21px;clear:both;overflow:hidden}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4}.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td{border-bottom-width:0;border-bottom-style:none}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%}.dhx_grid_event_selected{background-color:#9cc1db!important;color:#fff!important}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(imgs/images.png)}.dhx_marked_timespan{position:absolute;width:100%}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100)}.dhx_mini_calendar .dhx_marked_timespan,.dhx_scheduler_month .dhx_marked_timespan{display:none}.dhx_now_time{width:100%;border-bottom:2px solid red;z-index:1}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px solid red}.dhx_matrix_now_time{border-left:2px solid red;z-index:1}.dhx_matrix_now_time,.dhx_now_time{opacity:.5}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:300;padding-left:7px;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{padding:5px 0 10px 5px;color:#FFF;letter-spacing:1px}.dhx_cal_qi_tdate{font-size:14px}.dhx_cal_qi_tcontent{font-size:18px;font-weight:700}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden}.dhx_qi_big_icon{border-radius:3px;margin:5px 9px 5px 0;min-width:60px;line-height:20px;vertical-align:middle;padding:5px 10px 5px 5px;cursor:pointer;border-bottom:1px solid #666;border-right:1px solid #666;float:left}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0}.dhx_drag_marker{width:100%;filter:alpha(Opacity=50);opacity:.5;background-color:#FFE763;position:absolute;box-sizing:border-box!important;border-top:1px solid #B6B6B6;border-bottom:1px solid #b6b6b6}.dhx_cal_data div,.dhx_cal_header,.dhx_cal_header div,.dhx_cal_light,.dhx_cal_light div,.dhx_cal_navline div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dhx_cal_light .dhx_cal_radio label{margin-bottom:0}.dhx_cal_container{font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48}.dhx_cal_navline div{position:absolute;white-space:nowrap}.dhx_cal_navline .dhx_cal_date{padding-top:1px}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0}.dhx_cal_next_button,.dhx_cal_prev_button{cursor:pointer}.dhx_cal_today_button{cursor:pointer;text-align:center}.dhx_cal_tab{text-align:center;cursor:pointer;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:700}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;z-index:2;overflow:hidden;color:#2F3A48}.dhx_cal_data{-webkit-tap-highlight-color:transparent;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;-ms-touch-action:pan-y}.dhx_cal_event,.dhx_cal_event_clear,.dhx_cal_event_line{-ms-touch-action:none}.dhx_scale_bar{position:absolute;text-align:center}.dhx_scale_holder,.dhx_scale_holder_now{position:absolute}.dhx_scale_hour{height:41px;width:50px;text-align:center;line-height:40px;overflow:hidden}.dhx_month_head{padding-right:5px;text-align:right}.dhx_month_body{background-color:#FFF}.dhx_scale_ignore{display:none}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50)}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999}.dhx_multi_day,.dhx_multi_day_icon{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3}.dhx_multi_day{position:absolute}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-repeat:no-repeat}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px}.dhx_form_repeat{overflow:hidden;height:0;background-color:#FFF4B5}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left}.dhx_repeat_left{width:95px}.dhx_repeat_center{width:335px;margin-top:12px}.dhx_repeat_divider{float:left;height:115px;width:1px}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px;line-height:18px;padding:0 0 0 2px}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px}input.dhx_repeat_radio{margin-right:4px}input.dhx_repeat_checkbox{margin:4px 4px 0 0}.dhx_repeat_days td{padding-right:5px}.dhx_repeat_days label{font-size:10px}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_custom_button_recurring{background-position:-5px 20px;width:20px;margin-right:10px}.dhx_cal_light_rec{width:640px}.dhx_cal_light_rec .dhx_cal_larea{width:632px}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px}.dhx_cal_data div,.dhx_cal_header,.dhx_cal_header div,.dhx_cal_navline div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dhx_cal_event div{line-height:normal}.dhx_cal_event .dhx_title{border-width:1px 1px 0;padding-top:1px;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;font-family:arial;font-weight:700;font-size:12px;line-height:12px}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{padding-bottom:8px;-webkit-border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.dhx_cal_event .dhx_header,.dhx_cal_event.dhx_cal_select_menu .dhx_footer{display:none}.dhx_cal_event .dhx_footer{height:5px;border:0;margin-top:-6px;background:url(imgs_dhx_terrace/resizing.png) no-repeat center center}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{background-color:#1796b0;border-color:transparent;color:#fff}.dhx_cal_event.dhx_cal_editor{border:1px solid transparent}.dhx_cal_editor{font-size:12px;font-family:Arial,sans-serif}div.dhx_menu_head,div.dhx_menu_icon{background-image:url(imgs_dhx_terrace/controls.png)}.dhx_cal_event_line{border:1px solid transparent;background-color:#1796b0;color:#fff;height:17px;line-height:17px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.dhx_cal_event_line_start{-webkit-border-top-left-radius:9px;-webkit-border-bottom-left-radius:9px;-moz-border-radius-topleft:9px;-moz-border-radius-bottomleft:9px;border-top-left-radius:9px;border-bottom-left-radius:9px}.dhx_cal_event_line_end{-webkit-border-top-right-radius:9px;-webkit-border-bottom-right-radius:9px;-moz-border-radius-topright:9px;-moz-border-radius-bottomright:9px;border-top-right-radius:9px;border-bottom-right-radius:9px}.dhx_cal_event .dhx_body,.dhx_cal_event_line{font-size:12px;font-family:Arial,sans-serif}.dhx_cal_container{background-color:#fff}.dhx_cal_data{border-top:1px solid #CECECE}.dhx_scale_holder{background-image:url(imgs_dhx_terrace/databg.png);border-right:1px solid #CECECE}.dhx_scale_holder_now{background-image:url(imgs_dhx_terrace/databg_now.png);border-right:1px solid #CECECE}.dhx_scale_hour{border-bottom:1px solid #CECECE;background-color:#fff;font:11px/44px Arial;color:#767676}.dhx_cal_header{border:1px solid #CECECE;border-left:0;border-bottom:0}.dhx_scale_bar{border-left:1px solid #CECECE;font:11px/16px Arial;color:#767676;padding-top:2px;background-color:#fff}.dhx_cal_navline div{top:14px}.dhx_cal_date,.dhx_cal_next_button,.dhx_cal_prev_button,.dhx_cal_tab,.dhx_cal_today_button{color:#454544;height:30px;line-height:30px;background:0 0;border:1px solid #CECECE}.dhx_cal_navline .dhx_cal_date{border:0;font-size:18px;font-weight:400;font-family:arial;width:100%;top:14px;text-align:center;position:absolute;left:0;z-index:-1}.dhx_cal_today_button{color:#747473;left:auto;right:123px;background:0 0;text-decoration:none;width:80px;font-size:12px;font-weight:700;font-family:arial;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.dhx_cal_next_button,.dhx_cal_prev_button{left:auto;width:46px}.dhx_cal_prev_button{right:61px;background:url(imgs_dhx_terrace/arrow_left.png) no-repeat center center;-webkit-border-top-left-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-bottomleft:5px;border-top-left-radius:5px;border-bottom-left-radius:5px}.dhx_cal_next_button{right:14px;background:url(imgs_dhx_terrace/arrow_right.png) no-repeat center center;-webkit-border-top-right-radius:5px;-webkit-border-bottom-right-radius:5px;-moz-border-radius-topright:5px;-moz-border-radius-bottomright:5px;border-top-right-radius:5px;border-bottom-right-radius:5px}.dhx_cal_tab{color:#747473;width:60px;padding-top:0;text-decoration:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-weight:700;font-family:arial;font-size:12px}.dhx_cal_tab.active{background-color:#F0EDE7;color:#454544;border:1px solid #CECECE;text-shadow:0 1px 0 #fff}.dhx_cal_tab_first{-webkit-border-top-left-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-bottomleft:5px;border-top-left-radius:5px;border-bottom-left-radius:5px}.dhx_cal_tab_last{-webkit-border-top-right-radius:5px;-webkit-border-bottom-right-radius:5px;-moz-border-radius-topright:5px;-moz-border-radius-bottomright:5px;border-top-right-radius:5px;border-bottom-right-radius:5px}.dhx_cal_tab_standalone{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:0 5px}.dhx_multi_day,.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-color:#fff}.dhx_multi_day{border-top:1px solid #CECECE}.dhx_multi_day_icon,.dhx_multi_day_icon_small{border-bottom:1px solid #CECECE;border-right:1px solid #CECECE}.dhx_multi_day_icon_small{background-image:url(imgs_dhx_terrace/clock_small.gif)}.dhx_multi_day_icon{background-image:url(imgs_dhx_terrace/clock_big.gif)}.dhx_after .dhx_month_body,.dhx_after .dhx_month_head,.dhx_before .dhx_month_body,.dhx_before .dhx_month_head,.dhx_month_head{background-color:#fff}.dhx_month_head{height:21px;padding-top:0;font:12px/21px Arial;color:#362d26;border-right:1px solid #CECECE}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{color:#bbb}.dhx_month_body{border-right:1px solid #CECECE;border-bottom:1px solid #CECECE}.dhx_now .dhx_month_body,.dhx_now .dhx_month_head{background-color:#FFF3A1;font-weight:400}.dhx_cal_event_clear{color:#0E64A0}.dhx_cal_larea{margin-left:0}.dhx_cal_light_wide .dhx_cal_larea{margin-left:3px}.dhx_cal_light_wide .dhx_wrap_section{padding:5px 0}.dhx_cal_larea,.dhx_cal_light,.dhx_cal_light_wide .dhx_wrap_section,.dhx_cal_lsection,.dhx_cal_ltext textarea,.dhx_wrap_section{background-color:#fff}.dhx_cal_light input,.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,.dhx_cal_lsection,.dhx_cal_lsection .dhx_fullday{color:#747473}.dhx_cal_light_wide .dhx_wrap_section{border-top:0;border-bottom:1px solid #CECECE}.dhx_cal_larea{border:1px solid transparent}.dhx_cal_light,.dhx_cal_light select,.dhx_cal_ltext textarea{color:#2E2E2E}.dhx_cal_light{border:1px solid #CECECE}.dhx_cal_light_wide .dhx_cal_lsection,.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{font-size:13px}.dhx_section_time{background-color:transparent}.dhx_btn_set div:first-child,.dhx_cancel_btn,.dhx_delete_btn,.dhx_save_btn{display:none}.dhx_btn_set,.dhx_btn_set div{height:30px;padding:0 20px;line-height:30px}.dhx_btn_set{margin:12px 0 0;padding:0;font-size:12px;color:#454544;font-weight:700;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.dhx_left_btn_set{margin-left:20px}.dhx_right_btn_set{margin-right:20px}.dhx_save_btn_set{border:1px solid #22A1BC;color:#fff;text-shadow:0 -1px 0 #6f6f6f;background-color:#22A1BC}.dhx_btn_set,.dhx_cancel_btn_set{border:1px solid #CECECE}.dhx_delete_btn_set{border:1px solid #FF8831;background-color:#FF8831;color:#fff;text-shadow:0 -1px 0 #93755f}.dhx_cal_ltitle{height:30px;line-height:30px;border-bottom:1px solid #CECECE}.dhx_cal_ltitle span{float:left}.dhx_cal_light .dhx_title{padding-left:13px}.dhx_mark{display:none}.dhx_time{padding-left:10px}.dhx_close_icon{float:right;width:9px;height:9px;background:url(imgs_dhx_terrace/close_icon.png) no-repeat center center;padding:10px;margin-top:1px}.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template{line-height:22px}.dhx_cal_ltext textarea{line-height:20px;box-sizing:border-box;-moz-box-sizing:border-box;border:1px solid #CECECE;background-color:#F9F9F9}.dhtmlx_modal_box{background:#fff;width:330px}.dhtmlx_popup_controls{padding-bottom:9px}.dhtmlx_popup_button,.dhtmlx_popup_button div,.dhtmlx_popup_button div:active,.dhtmlx_popup_button:active{color:#444;background:#fff;box-shadow:none}.dhtmlx_popup_button.dhtmlx_ok_button{border:1px solid #22A1BC;background-color:#22A1BC}.dhtmlx_popup_button.dhtmlx_ok_button div{background:#22A1BC;border:1px solid #22A1BC;color:#fff;text-shadow:0 -1px 0 #6f6f6f}.dhx_cal_container.dhx_mini_calendar{box-sizing:border-box;border:1px solid #CECECE;box-shadow:2px 2px 5px #CCC;border-radius:3px}.dhx_mini_calendar .dhx_year_month{border:1px solid #CECECE;font-family:Arial}.dhx_mini_calendar .dhx_month_body,.dhx_mini_calendar .dhx_month_head,.dhx_mini_calendar .dhx_scale_bar,.dhx_mini_calendar .dhx_year_body,.dhx_mini_calendar .dhx_year_month{border-color:transparent}.dhx_mini_calendar .dhx_year_body{padding-top:1px}.dhx_mini_calendar .dhx_scale_bar{border-width:0}.dhx_mini_calendar .dhx_year_week{border-bottom:1px solid #CECECE;padding-top:1px}.dhx_mini_calendar .dhx_month_head{padding-right:0;text-align:center}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{border:0;height:20px}.dhx_cal_navline div.dhx_minical_icon{left:210px;top:14px;width:30px;height:30px;background:url(imgs_dhx_terrace/calendar.gif) no-repeat;background-position:3px 5px}.dhx_cal_event_line .dhx_event_resize{background:url(imgs_dhx_terrace/resize_dots.png) repeat-y}.dhx_matrix_cell,.dhx_matrix_scell{border-bottom:1px solid #CECECE;border-right:1px solid #CECECE}.dhx_cal_header div div{border-left:1px solid #CECECE}.dhx_matrix_scell.folder{border-right:0}.dhx_second_scale_bar{border-bottom:1px solid #CECECE}.dhx_repeat_divider{border-left:1px solid #CECECE}.dhx_custom_button{background-color:#fff;border:1px solid #CECECE;color:#747473}.dhx_cal_light_wide .dhx_custom_button{margin-top:6px}.dhx_custom_button_recurring{background-image:url(imgs_dhx_terrace/but_repeat.gif)}.dhx_agenda_line div,.dhx_v_border{border-right:1px solid #CECECE}.dhx_year_month{border:1px solid #CECECE}.dhx_scale_bar_last{border-right:1px solid #CECECE}.dhx_year_body{border-left:1px solid #CECECE}.dhx_expand_icon{top:-3px}.dhx_scale_bar .dhx_cal_next_button,.dhx_scale_bar .dhx_cal_prev_button{width:20px;height:20px;top:0!important;border:0}.dhx_scale_bar .dhx_cal_next_button{right:1px!important;border-left:1px solid #CECECE}.dhx_scale_bar .dhx_cal_prev_button{left:1px!important;border-right:1px solid #CECECE}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border:0}.dhx_map_line .headline_date{border-right:1px solid #CECECE}.dhtmlXTooltip.tooltip{border-left:1px solid #CECECE;border-top:1px solid #CECECE;color:#747473;font-size:12px;line-height:16px}.dhx_wa_scale_bar{border-top:1px solid #CECECE;border-bottom:1px solid #CECECE}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px solid #CECECE}.dhx_wa_ev_body{border-bottom:1px solid #CECECE}.dhx_wa_scale_bar{background-color:#f0ede7}.dhx_wa_ev_body.dhx_cal_event_selected{background-color:#fff3a1;color:#362d26}.dhx_wa_dnd{background-color:#fddb93!important;color:#747473!important;border:1px solid #ccb177}.dhx_text_disabled{color:#2E2E2E}.dhx_cal_ltext .dhx_text_disabled{line-height:22px}.dhx_grid_v_border{border-right-color:#CECECE}.dhx_month_body_border,.dhx_month_head_border,.dhx_scale_bar_border,.dhx_scale_hour_border{border-left:1px solid #CECECE}.dhx_cal_quick_info{background:rgba(50,50,50,.5)}.dhx_qi_big_icon{background:#1796b0;color:#fff}.dhx_cal_navline .dhx_cal_export{width:32px;height:32px;margin:2px;cursor:pointer;top:12px}.dhx_cal_navline .dhx_cal_export.pdf{left:auto;right:249px;background-image:url(imgs_dhx_terrace/export_pdf.png)}.dhx_cal_navline .dhx_cal_export.ical{left:auto;right:210px;background-image:url(imgs_dhx_terrace/export_ical.png)}.dhx_mini_calendar{padding:5px}.dhx_mini_calendar .dhx_calendar_click,.dhx_mini_calendar .dhx_year_event{border-radius:7px}.dhx_mini_calendar .dhx_month_head{margin:2px}.dhx_mini_calendar .dhx_year_month{line-height:20px;height:25px;font-size:14px}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{top:8px!important} \ No newline at end of file
diff --git a/codebase/dhtmlxscheduler.js b/codebase/dhtmlxscheduler.js
index 132552f..8ea4df2 100644
--- a/codebase/dhtmlxscheduler.js
+++ b/codebase/dhtmlxscheduler.js
@@ -1,255 +1,202 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-window.dhtmlx||(dhtmlx=function(a){for(var b in a)dhtmlx[b]=a[b];return dhtmlx});
-dhtmlx.extend_api=function(a,b,c){var d=window[a];if(d)window[a]=function(a){if(a&&typeof a=="object"&&!a.tagName){var c=d.apply(this,b._init?b._init(a):arguments),g;for(g in dhtmlx)if(b[g])this[b[g]](dhtmlx[g]);for(g in a)if(b[g])this[b[g]](a[g]);else g.indexOf("on")==0&&this.attachEvent(g,a[g])}else c=d.apply(this,arguments);b._patch&&b._patch(this);return c||this},window[a].prototype=d.prototype,c&&dhtmlXHeir(window[a].prototype,c)};
-dhtmlxAjax={get:function(a,b){var c=new dtmlXMLLoaderObject(!0);c.async=arguments.length<3;c.waitCall=b;c.loadXML(a);return c},post:function(a,b,c){var d=new dtmlXMLLoaderObject(!0);d.async=arguments.length<4;d.waitCall=c;d.loadXML(a,!0,b);return d},getSync:function(a){return this.get(a,null,!0)},postSync:function(a,b){return this.post(a,b,null,!0)}};
-function dtmlXMLLoaderObject(a,b,c,d){this.xmlDoc="";this.async=typeof c!="undefined"?c:!0;this.onloadAction=a||null;this.mainObject=b||null;this.waitCall=null;this.rSeed=d||!1;return this}dtmlXMLLoaderObject.count=0;
-dtmlXMLLoaderObject.prototype.waitLoadFunction=function(a){var b=!0;return this.check=function(){if(a&&a.onloadAction!=null&&(!a.xmlDoc.readyState||a.xmlDoc.readyState==4)&&b){b=!1;dtmlXMLLoaderObject.count++;if(typeof a.onloadAction=="function")a.onloadAction(a.mainObject,null,null,null,a);if(a.waitCall)a.waitCall.call(this,a),a.waitCall=null}}};
-dtmlXMLLoaderObject.prototype.getXMLTopNode=function(a,b){if(this.xmlDoc.responseXML){var c=this.xmlDoc.responseXML.getElementsByTagName(a);c.length==0&&a.indexOf(":")!=-1&&(c=this.xmlDoc.responseXML.getElementsByTagName(a.split(":")[1]));var d=c[0]}else d=this.xmlDoc.documentElement;if(d)return this._retry=!1,d;if(!this._retry)return this._retry=!0,b=this.xmlDoc,this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""),!0),this.getXMLTopNode(a,b);dhtmlxError.throwError("LoadXML","Incorrect XML",
-[b||this.xmlDoc,this.mainObject]);return document.createElement("DIV")};dtmlXMLLoaderObject.prototype.loadXMLString=function(a,b){if(_isIE)this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.onreadystatechange=function(){},this.xmlDoc.loadXML(a);else{var c=new DOMParser;this.xmlDoc=c.parseFromString(a,"text/xml")}if(!b){if(this.onloadAction)this.onloadAction(this.mainObject,null,null,null,this);if(this.waitCall)this.waitCall(),this.waitCall=null}};
-dtmlXMLLoaderObject.prototype.loadXML=function(a,b,c,d){this.rSeed&&(a+=(a.indexOf("?")!=-1?"&":"?")+"a_dhx_rSeed="+(new Date).valueOf());this.filePath=a;this.xmlDoc=!_isIE&&window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");if(this.async)this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);this.xmlDoc.open(b?"POST":"GET",a,this.async);d?(this.xmlDoc.setRequestHeader("User-Agent","dhtmlxRPC v0.1 ("+navigator.userAgent+")"),this.xmlDoc.setRequestHeader("Content-type",
-"text/xml")):b&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded");this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest");this.xmlDoc.send(c);this.async||(new this.waitLoadFunction(this))()};
-dtmlXMLLoaderObject.prototype.destructor=function(){return this.setXSLParamValue=this.getXMLTopNode=this.xmlNodeToJSON=this.doSerialization=this.loadXMLString=this.loadXML=this.doXSLTransToString=this.doXSLTransToObject=this.doXPathOpera=this.doXPath=this.xmlDoc=this.mainObject=this.onloadAction=this.filePath=this.rSeed=this.async=this._retry=this._getAllNamedChilds=this._filterXPath=null};
-dtmlXMLLoaderObject.prototype.xmlNodeToJSON=function(a){for(var b={},c=0;c<a.attributes.length;c++)b[a.attributes[c].name]=a.attributes[c].value;b._tagvalue=a.firstChild?a.firstChild.nodeValue:"";for(c=0;c<a.childNodes.length;c++){var d=a.childNodes[c].tagName;d&&(b[d]||(b[d]=[]),b[d].push(this.xmlNodeToJSON(a.childNodes[c])))}return b};function callerFunction(a,b){return this.handler=function(c){if(!c)c=window.event;a(c,b);return!0}}function getAbsoluteLeft(a){return getOffset(a).left}
-function getAbsoluteTop(a){return getOffset(a).top}function getOffsetSum(a){for(var b=0,c=0;a;)b+=parseInt(a.offsetTop),c+=parseInt(a.offsetLeft),a=a.offsetParent;return{top:b,left:c}}
-function getOffsetRect(a){var b=a.getBoundingClientRect(),c=document.body,d=document.documentElement,e=window.pageYOffset||d.scrollTop||c.scrollTop,f=window.pageXOffset||d.scrollLeft||c.scrollLeft,g=d.clientTop||c.clientTop||0,h=d.clientLeft||c.clientLeft||0,k=b.top+e-g,i=b.left+f-h;return{top:Math.round(k),left:Math.round(i)}}function getOffset(a){return a.getBoundingClientRect?getOffsetRect(a):getOffsetSum(a)}
-function convertStringToBoolean(a){typeof a=="string"&&(a=a.toLowerCase());switch(a){case "1":case "true":case "yes":case "y":case 1:case !0:return!0;default:return!1}}function getUrlSymbol(a){return a.indexOf("?")!=-1?"&":"?"}function dhtmlDragAndDropObject(){if(window.dhtmlDragAndDrop)return window.dhtmlDragAndDrop;this.dragStartObject=this.dragStartNode=this.dragNode=this.lastLanding=0;this.tempDOMM=this.tempDOMU=null;this.waitDrag=0;window.dhtmlDragAndDrop=this;return this}
-dhtmlDragAndDropObject.prototype.removeDraggableItem=function(a){a.onmousedown=null;a.dragStarter=null;a.dragLanding=null};dhtmlDragAndDropObject.prototype.addDraggableItem=function(a,b){a.onmousedown=this.preCreateDragCopy;a.dragStarter=b;this.addDragLanding(a,b)};dhtmlDragAndDropObject.prototype.addDragLanding=function(a,b){a.dragLanding=b};
-dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(a){if(!((a||window.event)&&(a||event).button==2)){if(window.dhtmlDragAndDrop.waitDrag)return window.dhtmlDragAndDrop.waitDrag=0,document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU,document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM,!1;window.dhtmlDragAndDrop.dragNode&&window.dhtmlDragAndDrop.stopDrag(a);window.dhtmlDragAndDrop.waitDrag=1;window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup;window.dhtmlDragAndDrop.tempDOMM=
-document.body.onmousemove;window.dhtmlDragAndDrop.dragStartNode=this;window.dhtmlDragAndDrop.dragStartObject=this.dragStarter;document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy;document.body.onmousemove=window.dhtmlDragAndDrop.callDrag;window.dhtmlDragAndDrop.downtime=(new Date).valueOf();a&&a.preventDefault&&a.preventDefault();return!1}};
-dhtmlDragAndDropObject.prototype.callDrag=function(a){if(!a)a=window.event;dragger=window.dhtmlDragAndDrop;if(!((new Date).valueOf()-dragger.downtime<100)){if(!dragger.dragNode)if(dragger.waitDrag){dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode,a);if(!dragger.dragNode)return dragger.stopDrag();dragger.dragNode.onselectstart=function(){return!1};dragger.gldragNode=dragger.dragNode;document.body.appendChild(dragger.dragNode);document.body.onmouseup=dragger.stopDrag;dragger.waitDrag=
-0;dragger.dragNode.pWindow=window;dragger.initFrameRoute()}else return dragger.stopDrag(a,!0);if(dragger.dragNode.parentNode!=window.document.body&&dragger.gldragNode){var b=dragger.gldragNode;if(dragger.gldragNode.old)b=dragger.gldragNode.old;b.parentNode.removeChild(b);var c=dragger.dragNode.pWindow;b.pWindow&&b.pWindow.dhtmlDragAndDrop.lastLanding&&b.pWindow.dhtmlDragAndDrop.lastLanding.dragLanding._dragOut(b.pWindow.dhtmlDragAndDrop.lastLanding);if(_isIE){var d=document.createElement("Div");d.innerHTML=
-dragger.dragNode.outerHTML;dragger.dragNode=d.childNodes[0]}else dragger.dragNode=dragger.dragNode.cloneNode(!0);dragger.dragNode.pWindow=window;dragger.gldragNode.old=dragger.dragNode;document.body.appendChild(dragger.dragNode);c.dhtmlDragAndDrop.dragNode=dragger.dragNode}dragger.dragNode.style.left=a.clientX+15+(dragger.fx?dragger.fx*-1:0)+(document.body.scrollLeft||document.documentElement.scrollLeft)+"px";dragger.dragNode.style.top=a.clientY+3+(dragger.fy?dragger.fy*-1:0)+(document.body.scrollTop||
-document.documentElement.scrollTop)+"px";var e=a.srcElement?a.srcElement:a.target;dragger.checkLanding(e,a)}};dhtmlDragAndDropObject.prototype.calculateFramePosition=function(a){if(window.name){for(var b=parent.frames[window.name].frameElement.offsetParent,c=0,d=0;b;)c+=b.offsetLeft,d+=b.offsetTop,b=b.offsetParent;if(parent.dhtmlDragAndDrop){var e=parent.dhtmlDragAndDrop.calculateFramePosition(1);c+=e.split("_")[0]*1;d+=e.split("_")[1]*1}if(a)return c+"_"+d;else this.fx=c;this.fy=d}return"0_0"};
-dhtmlDragAndDropObject.prototype.checkLanding=function(a,b){a&&a.dragLanding?(this.lastLanding&&this.lastLanding.dragLanding._dragOut(this.lastLanding),this.lastLanding=a,this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode,b.clientX,b.clientY,b),this.lastLanding_scr=_isIE?b.srcElement:b.target):a&&a.tagName!="BODY"?this.checkLanding(a.parentNode,b):(this.lastLanding&&this.lastLanding.dragLanding._dragOut(this.lastLanding,b.clientX,b.clientY,b),this.lastLanding=
-0,this._onNotFound&&this._onNotFound())};
-dhtmlDragAndDropObject.prototype.stopDrag=function(a,b){dragger=window.dhtmlDragAndDrop;if(!b){dragger.stopFrameRoute();var c=dragger.lastLanding;dragger.lastLanding=null;c&&c.dragLanding._drag(dragger.dragStartNode,dragger.dragStartObject,c,_isIE?event.srcElement:a.target)}dragger.lastLanding=null;dragger.dragNode&&dragger.dragNode.parentNode==document.body&&dragger.dragNode.parentNode.removeChild(dragger.dragNode);dragger.dragNode=0;dragger.gldragNode=0;dragger.fx=0;dragger.fy=0;dragger.dragStartNode=
-0;dragger.dragStartObject=0;document.body.onmouseup=dragger.tempDOMU;document.body.onmousemove=dragger.tempDOMM;dragger.tempDOMU=null;dragger.tempDOMM=null;dragger.waitDrag=0};dhtmlDragAndDropObject.prototype.stopFrameRoute=function(a){a&&window.dhtmlDragAndDrop.stopDrag(1,1);for(var b=0;b<window.frames.length;b++)try{window.frames[b]!=a&&window.frames[b].dhtmlDragAndDrop&&window.frames[b].dhtmlDragAndDrop.stopFrameRoute(window)}catch(c){}try{parent.dhtmlDragAndDrop&&parent!=window&&parent!=a&&parent.dhtmlDragAndDrop.stopFrameRoute(window)}catch(d){}};
-dhtmlDragAndDropObject.prototype.initFrameRoute=function(a,b){if(a)window.dhtmlDragAndDrop.preCreateDragCopy(),window.dhtmlDragAndDrop.dragStartNode=a.dhtmlDragAndDrop.dragStartNode,window.dhtmlDragAndDrop.dragStartObject=a.dhtmlDragAndDrop.dragStartObject,window.dhtmlDragAndDrop.dragNode=a.dhtmlDragAndDrop.dragNode,window.dhtmlDragAndDrop.gldragNode=a.dhtmlDragAndDrop.dragNode,window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag,window.waitDrag=0,!_isIE&&b&&(!_isFF||_FFrv<1.8)&&window.dhtmlDragAndDrop.calculateFramePosition();
-try{parent.dhtmlDragAndDrop&&parent!=window&&parent!=a&&parent.dhtmlDragAndDrop.initFrameRoute(window)}catch(c){}for(var d=0;d<window.frames.length;d++)try{window.frames[d]!=a&&window.frames[d].dhtmlDragAndDrop&&window.frames[d].dhtmlDragAndDrop.initFrameRoute(window,!a||b?1:0)}catch(e){}};_OperaRv=_KHTMLrv=_FFrv=_isChrome=_isMacOS=_isKHTML=_isOpera=_isIE=_isFF=!1;navigator.userAgent.indexOf("Macintosh")!=-1&&(_isMacOS=!0);navigator.userAgent.toLowerCase().indexOf("chrome")>-1&&(_isChrome=!0);
-if(navigator.userAgent.indexOf("Safari")!=-1||navigator.userAgent.indexOf("Konqueror")!=-1)_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5)),_KHTMLrv>525?(_isFF=!0,_FFrv=1.9):_isKHTML=!0;else if(navigator.userAgent.indexOf("Opera")!=-1)_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3));else if(navigator.appName.indexOf("Microsoft")!=-1){if(_isIE=!0,(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=!0,_FFrv=parseFloat(navigator.userAgent.split("rv:")[1]);
-dtmlXMLLoaderObject.prototype.doXPath=function(a,b,c,d){if(_isKHTML||!_isIE&&!window.XPathResult)return this.doXPathOpera(a,b);if(_isIE)return b||(b=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),b||dhtmlxError.throwError("LoadXML","Incorrect XML",[b||this.xmlDoc,this.mainObject]),c!=null&&b.setProperty("SelectionNamespaces","xmlns:xsl='"+c+"'"),d=="single"?b.selectSingleNode(a):b.selectNodes(a)||[];else{var e=b;b||(b=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML);b||dhtmlxError.throwError("LoadXML",
-"Incorrect XML",[b||this.xmlDoc,this.mainObject]);b.nodeName.indexOf("document")!=-1?e=b:(e=b,b=b.ownerDocument);var f=XPathResult.ANY_TYPE;if(d=="single")f=XPathResult.FIRST_ORDERED_NODE_TYPE;var g=[],h=b.evaluate(a,e,function(){return c},f,null);if(f==XPathResult.FIRST_ORDERED_NODE_TYPE)return h.singleNodeValue;for(var k=h.iterateNext();k;)g[g.length]=k,k=h.iterateNext();return g}};function w(){if(!this.catches)this.catches=[];return this}w.prototype.catchError=function(a,b){this.catches[a]=b};
-w.prototype.throwError=function(a,b,c){if(this.catches[a])return this.catches[a](a,b,c);if(this.catches.ALL)return this.catches.ALL(a,b,c);alert("Error type: "+a+"\nDescription: "+b);return null};window.dhtmlxError=new w;
-dtmlXMLLoaderObject.prototype.doXPathOpera=function(a,b){var c=a.replace(/[\/]+/gi,"/").split("/"),d=null,e=1;if(!c.length)return[];if(c[0]==".")d=[b];else if(c[0]=="")d=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(c[e].replace(/\[[^\]]*\]/g,"")),e++;else return[];for(;e<c.length;e++)d=this._getAllNamedChilds(d,c[e]);c[e-1].indexOf("[")!=-1&&(d=this._filterXPath(d,c[e-1]));return d};
-dtmlXMLLoaderObject.prototype._filterXPath=function(a,b){for(var c=[],b=b.replace(/[^\[]*\[\@/g,"").replace(/[\[\]\@]*/g,""),d=0;d<a.length;d++)a[d].getAttribute(b)&&(c[c.length]=a[d]);return c};
-dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a,b){var c=[];_isKHTML&&(b=b.toUpperCase());for(var d=0;d<a.length;d++)for(var e=0;e<a[d].childNodes.length;e++)_isKHTML?a[d].childNodes[e].tagName&&a[d].childNodes[e].tagName.toUpperCase()==b&&(c[c.length]=a[d].childNodes[e]):a[d].childNodes[e].tagName==b&&(c[c.length]=a[d].childNodes[e]);return c};function dhtmlXHeir(a,b){for(var c in b)typeof b[c]=="function"&&(a[c]=b[c]);return a}
-function dhtmlxEvent(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c)}dtmlXMLLoaderObject.prototype.xslDoc=null;dtmlXMLLoaderObject.prototype.setXSLParamValue=function(a,b,c){if(!c)c=this.xslDoc;if(c.responseXML)c=c.responseXML;var d=this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+a+"']",c,"http://www.w3.org/1999/XSL/Transform","single");if(d!=null)d.firstChild.nodeValue=b};
-dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(a,b){if(!a)a=this.xslDoc;if(a.responseXML)a=a.responseXML;if(!b)b=this.xmlDoc;if(b.responseXML)b=b.responseXML;if(_isIE){d=new ActiveXObject("Msxml2.DOMDocument.3.0");try{b.transformNodeToObject(a,d)}catch(c){d=b.transformNode(a)}}else{if(!this.XSLProcessor)this.XSLProcessor=new XSLTProcessor,this.XSLProcessor.importStylesheet(a);var d=this.XSLProcessor.transformToDocument(b)}return d};
-dtmlXMLLoaderObject.prototype.doXSLTransToString=function(a,b){var c=this.doXSLTransToObject(a,b);return typeof c=="string"?c:this.doSerialization(c)};dtmlXMLLoaderObject.prototype.doSerialization=function(a){if(!a)a=this.xmlDoc;if(a.responseXML)a=a.responseXML;if(_isIE)return a.xml;else{var b=new XMLSerializer;return b.serializeToString(a)}};
-dhtmlxEventable=function(a){a.attachEvent=function(a,c,d){a="ev_"+a.toLowerCase();this[a]||(this[a]=new this.eventCatcher(d||this));return a+":"+this[a].addEvent(c)};a.callEvent=function(a,c){a="ev_"+a.toLowerCase();return this[a]?this[a].apply(this,c):!0};a.checkEvent=function(a){return!!this["ev_"+a.toLowerCase()]};a.eventCatcher=function(a){var c=[],d=function(){for(var d=!0,f=0;f<c.length;f++)if(c[f]!=null)var g=c[f].apply(a,arguments),d=d&&g;return d};d.addEvent=function(a){typeof a!="function"&&
-(a=eval(a));return a?c.push(a)-1:!1};d.removeEvent=function(a){c[a]=null};return d};a.detachEvent=function(a){if(a!=!1){var c=a.split(":");this[c[0]].removeEvent(c[1])}};a.detachAllEvents=function(){for(var a in this)a.indexOf("ev_")==0&&delete this[a]};a=null};if(!window.dhtmlx)window.dhtmlx={};
-(function(){function a(a,b){var d=a.callback;c(!1);a.box.parentNode.removeChild(a.box);n=a.box=null;d&&d(b)}function b(b){if(n){var b=b||event,c=b.which||event.keyCode;dhtmlx.message.keyboard&&((c==13||c==32)&&a(n,!0),c==27&&a(n,!1));b.preventDefault&&b.preventDefault();return!(b.cancelBubble=!0)}}function c(a){if(!c.cover)c.cover=document.createElement("DIV"),c.cover.onkeydown=b,c.cover.className="dhx_modal_cover",document.body.appendChild(c.cover);var d=document.body.scrollHeight;c.cover.style.display=
-a?"inline-block":"none"}function d(a,b){var c="dhtmlx_"+a.toLowerCase().replace(/ /g,"_")+"_button";return"<div class='dhtmlx_popup_button "+c+"' result='"+b+"' ><div>"+a+"</div></div>"}function e(a){if(!m.area)m.area=document.createElement("DIV"),m.area.className="dhtmlx_message_area",m.area.style[m.position]="5px",document.body.appendChild(m.area);m.hide(a.id);var b=document.createElement("DIV");b.innerHTML="<div>"+a.text+"</div>";b.className="dhtmlx-info dhtmlx-"+a.type;b.onclick=function(){m.hide(a.id);
-a=null};m.position=="bottom"&&m.area.firstChild?m.area.insertBefore(b,m.area.firstChild):m.area.appendChild(b);a.expire>0&&(m.timers[a.id]=window.setTimeout(function(){m.hide(a.id)},a.expire));m.pull[a.id]=b;b=null;return a.id}function f(b,c,e){var f=document.createElement("DIV");f.className=" dhtmlx_modal_box dhtmlx-"+b.type;f.setAttribute("dhxbox",1);var g="";if(b.width)f.style.width=b.width;if(b.height)f.style.height=b.height;b.title&&(g+='<div class="dhtmlx_popup_title">'+b.title+"</div>");g+=
-'<div class="dhtmlx_popup_text"><span>'+(b.content?"":b.text)+'</span></div><div class="dhtmlx_popup_controls">';c&&(g+=d(b.ok||"OK",!0));e&&(g+=d(b.cancel||"Cancel",!1));if(b.buttons)for(var h=0;h<b.buttons.length;h++)g+=d(b.buttons[h],h);g+="</div>";f.innerHTML=g;if(b.content){var i=b.content;typeof i=="string"&&(i=document.getElementById(i));if(i.style.display=="none")i.style.display="";f.childNodes[b.title?1:0].appendChild(i)}f.onclick=function(c){var c=c||event,d=c.target||c.srcElement;if(!d.className)d=
-d.parentNode;d.className.split(" ")[0]=="dhtmlx_popup_button"&&(result=d.getAttribute("result"),result=result=="true"||(result=="false"?!1:result),a(b,result))};b.box=f;if(c||e)n=b;return f}function g(a,d,e){var g=a.tagName?a:f(a,d,e);a.hidden||c(!0);document.body.appendChild(g);var h=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-g.offsetWidth)/2)),i=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-g.offsetHeight)/2));g.style.top=a.position==
-"top"?"-3px":i+"px";g.style.left=h+"px";g.onkeydown=b;g.focus();a.hidden&&dhtmlx.modalbox.hide(g);return g}function h(a){return g(a,!0,!1)}function k(a){return g(a,!0,!0)}function i(a){return g(a)}function j(a,b,c){typeof a!="object"&&(typeof b=="function"&&(c=b,b=""),a={text:a,type:b,callback:c});return a}function l(a,b,c,d){typeof a!="object"&&(a={text:a,type:b,expire:c,id:d});a.id=a.id||m.uid();a.expire=a.expire||m.expire;return a}var n=null;document.attachEvent?document.attachEvent("onkeydown",
-b):document.addEventListener("keydown",b,!0);dhtmlx.alert=function(){text=j.apply(this,arguments);text.type=text.type||"confirm";return h(text)};dhtmlx.confirm=function(){text=j.apply(this,arguments);text.type=text.type||"alert";return k(text)};dhtmlx.modalbox=function(){text=j.apply(this,arguments);text.type=text.type||"alert";return i(text)};dhtmlx.modalbox.hide=function(a){for(;a&&a.getAttribute&&!a.getAttribute("dhxbox");)a=a.parentNode;a&&(a.parentNode.removeChild(a),c(!1))};var m=dhtmlx.message=
-function(a,b,c,d){a=l.apply(this,arguments);a.type=a.type||"info";var f=a.type.split("-")[0];switch(f){case "alert":return h(a);case "confirm":return k(a);case "modalbox":return i(a);default:return e(a)}};m.seed=(new Date).valueOf();m.uid=function(){return m.seed++};m.expire=4E3;m.keyboard=!0;m.position="top";m.pull={};m.timers={};m.hideAll=function(){for(var a in m.pull)m.hide(a)};m.hide=function(a){var b=m.pull[a];b&&b.parentNode&&(window.setTimeout(function(){b.parentNode.removeChild(b);b=null},
-2E3),b.className+=" hidden",m.timers[a]&&window.clearTimeout(m.timers[a]),delete m.pull[a])}})();
-function dataProcessor(a){this.serverProcessor=a;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);return this}
-dataProcessor.prototype={setTransactionMode:function(a,b){this._tMode=a;this._tSend=b},escape:function(a){return this._utf?encodeURIComponent(a):escape(a)},enableUTFencoding:function(a){this._utf=convertStringToBoolean(a)},setDataColumns:function(a){this._columns=typeof a=="string"?a.split(","):a},getSyncState:function(){return!this.updatedRows.length},enableDataNames:function(a){this._endnm=convertStringToBoolean(a)},enablePartialDataSend:function(a){this._changed=convertStringToBoolean(a)},setUpdateMode:function(a,
-b){this.autoUpdate=a=="cell";this.updateMode=a;this.dnd=b},ignore:function(a,b){this._silent_mode=!0;a.call(b||window);this._silent_mode=!1},setUpdated:function(a,b,c){if(!this._silent_mode){var d=this.findRow(a),c=c||"updated",e=this.obj.getUserData(a,this.action_param);e&&c=="updated"&&(c=e);b?(this.set_invalid(a,!1),this.updatedRows[d]=a,this.obj.setUserData(a,this.action_param,c),this._in_progress[a]&&(this._in_progress[a]="wait")):this.is_invalid(a)||(this.updatedRows.splice(d,1),this.obj.setUserData(a,
-this.action_param,""));b||this._clearUpdateFlag(a);this.markRow(a,b,c);b&&this.autoUpdate&&this.sendData(a)}},_clearUpdateFlag:function(){},markRow:function(a,b,c){var d="",e=this.is_invalid(a);e&&(d=this.styles[e],b=!0);if(this.callEvent("onRowMark",[a,b,c,e])&&(d=this.styles[b?c:"clear"]+d,this.obj[this._methods[0]](a,d),e&&e.details)){d+=this.styles[e+"_cell"];for(var f=0;f<e.details.length;f++)if(e.details[f])this.obj[this._methods[1]](a,f,d)}},getState:function(a){return this.obj.getUserData(a,
-this.action_param)},is_invalid:function(a){return this._invalid[a]},set_invalid:function(a,b,c){c&&(b={value:b,details:c,toString:function(){return this.value.toString()}});this._invalid[a]=b},checkBeforeUpdate:function(){return!0},sendData:function(a){if(!this._waitMode||!(this.obj.mytype=="tree"||this.obj._h2)){this.obj.editStop&&this.obj.editStop();if(typeof a=="undefined"||this._tSend)return this.sendAllData();if(this._in_progress[a])return!1;this.messages=[];if(!this.checkBeforeUpdate(a)&&this.callEvent("onValidatationError",
-[a,this.messages]))return!1;this._beforeSendData(this._getRowData(a),a)}},_beforeSendData:function(a,b){if(!this.callEvent("onBeforeUpdate",[b,this.getState(b),a]))return!1;this._sendData(a,b)},serialize:function(a,b){if(typeof a=="string")return a;if(typeof b!="undefined")return this.serialize_one(a,"");else{var c=[],d=[],e;for(e in a)a.hasOwnProperty(e)&&(c.push(this.serialize_one(a[e],e+this.post_delim)),d.push(e));c.push("ids="+this.escape(d.join(",")));dhtmlx.security_key&&c.push("dhx_security="+
-dhtmlx.security_key);return c.join("&")}},serialize_one:function(a,b){if(typeof a=="string")return a;var c=[],d;for(d in a)a.hasOwnProperty(d)&&c.push(this.escape((b||"")+d)+"="+this.escape(a[d]));return c.join("&")},_sendData:function(a,b){if(a){if(!this.callEvent("onBeforeDataSending",b?[b,this.getState(b),a]:[null,null,a]))return!1;b&&(this._in_progress[b]=(new Date).valueOf());var c=new dtmlXMLLoaderObject(this.afterUpdate,this,!0),d=this.serverProcessor+(this._user?getUrlSymbol(this.serverProcessor)+
-["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&"):"");this._tMode!="POST"?c.loadXML(d+(d.indexOf("?")!=-1?"&":"?")+this.serialize(a,b)):c.loadXML(d,!0,this.serialize(a,b));this._waitMode++}},sendAllData:function(){if(this.updatedRows.length){this.messages=[];for(var a=!0,b=0;b<this.updatedRows.length;b++)a&=this.checkBeforeUpdate(this.updatedRows[b]);if(!a&&!this.callEvent("onValidatationError",["",this.messages]))return!1;if(this._tSend)this._sendData(this._getAllData());
-else for(b=0;b<this.updatedRows.length;b++)if(!this._in_progress[this.updatedRows[b]]&&!this.is_invalid(this.updatedRows[b])&&(this._beforeSendData(this._getRowData(this.updatedRows[b]),this.updatedRows[b]),this._waitMode&&(this.obj.mytype=="tree"||this.obj._h2)))break}},_getAllData:function(){for(var a={},b=!1,c=0;c<this.updatedRows.length;c++){var d=this.updatedRows[c];!this._in_progress[d]&&!this.is_invalid(d)&&this.callEvent("onBeforeUpdate",[d,this.getState(d)])&&(a[d]=this._getRowData(d,d+this.post_delim),
-b=!0,this._in_progress[d]=(new Date).valueOf())}return b?a:null},setVerificator:function(a,b){this.mandatoryFields[a]=b||function(a){return a!=""}},clearVerificator:function(a){this.mandatoryFields[a]=!1},findRow:function(a){for(var b=0,b=0;b<this.updatedRows.length;b++)if(a==this.updatedRows[b])break;return b},defineAction:function(a,b){if(!this._uActions)this._uActions=[];this._uActions[a]=b},afterUpdateCallback:function(a,b,c,d){var e=a,f=c!="error"&&c!="invalid";f||this.set_invalid(a,c);if(this._uActions&&
-this._uActions[c]&&!this._uActions[c](d))return delete this._in_progress[e];this._in_progress[e]!="wait"&&this.setUpdated(a,!1);var g=a;switch(c){case "update":case "updated":case "inserted":case "insert":b!=a&&(this.obj[this._methods[2]](a,b),a=b);break;case "delete":case "deleted":return this.obj.setUserData(a,this.action_param,"true_deleted"),this.obj[this._methods[3]](a),delete this._in_progress[e],this.callEvent("onAfterUpdate",[a,c,b,d])}this._in_progress[e]!="wait"?(f&&this.obj.setUserData(a,
-this.action_param,""),delete this._in_progress[e]):(delete this._in_progress[e],this.setUpdated(b,!0,this.obj.getUserData(a,this.action_param)));this.callEvent("onAfterUpdate",[a,c,b,d])},afterUpdate:function(a,b,c,d,e){e.getXMLTopNode("data");if(e.xmlDoc.responseXML){for(var f=e.doXPath("//data/action"),g=0;g<f.length;g++){var h=f[g],k=h.getAttribute("type"),i=h.getAttribute("sid"),j=h.getAttribute("tid");a.afterUpdateCallback(i,j,k,h)}a.finalizeUpdate()}},finalizeUpdate:function(){this._waitMode&&
-this._waitMode--;(this.obj.mytype=="tree"||this.obj._h2)&&this.updatedRows.length&&this.sendData();this.callEvent("onAfterUpdateFinish",[]);this.updatedRows.length||this.callEvent("onFullSync",[])},init:function(a){this.obj=a;this.obj._dp_init&&this.obj._dp_init(this)},setOnAfterUpdate:function(a){this.attachEvent("onAfterUpdate",a)},enableDebug:function(){},setOnBeforeUpdateHandler:function(a){this.attachEvent("onBeforeDataSending",a)},setAutoUpdate:function(a,b){a=a||2E3;this._user=b||(new Date).valueOf();
-this._need_update=!1;this._loader=null;this._update_busy=!1;this.attachEvent("onAfterUpdate",function(a,b,c,g){this.afterAutoUpdate(a,b,c,g)});this.attachEvent("onFullSync",function(){this.fullSync()});var c=this;window.setInterval(function(){c.loadUpdate()},a)},afterAutoUpdate:function(a,b){return b=="collision"?(this._need_update=!0,!1):!0},fullSync:function(){if(this._need_update==!0)this._need_update=!1,this.loadUpdate();return!0},getUpdates:function(a,b){if(this._update_busy)return!1;else this._update_busy=
-!0;this._loader=this._loader||new dtmlXMLLoaderObject(!0);this._loader.async=!0;this._loader.waitCall=b;this._loader.loadXML(a)},_v:function(a){return a.firstChild?a.firstChild.nodeValue:""},_a:function(a){for(var b=[],c=0;c<a.length;c++)b[c]=this._v(a[c]);return b},loadUpdate:function(){var a=this,b=this.obj.getUserData(0,"version"),c=this.serverProcessor+getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+b].join("&"),c=c.replace("editing=true&","");this.getUpdates(c,function(){var b=
-a._loader.doXPath("//userdata");a.obj.setUserData(0,"version",a._v(b[0]));var c=a._loader.doXPath("//update");if(c.length){a._silent_mode=!0;for(var f=0;f<c.length;f++){var g=c[f].getAttribute("status"),h=c[f].getAttribute("id"),k=c[f].getAttribute("parent");switch(g){case "inserted":a.callEvent("insertCallback",[c[f],h,k]);break;case "updated":a.callEvent("updateCallback",[c[f],h,k]);break;case "deleted":a.callEvent("deleteCallback",[c[f],h,k])}}a._silent_mode=!1}a._update_busy=!1;a=null})}};
-if(window.dhtmlXGridObject)dhtmlXGridObject.prototype._init_point_connector=dhtmlXGridObject.prototype._init_point,dhtmlXGridObject.prototype._init_point=function(){var a=function(a){a=a.replace(/(\?|\&)connector[^\f]*/g,"");return a+(a.indexOf("?")!=-1?"&":"?")+"connector=true"+(this.hdr.rows.length>0?"&dhx_no_header=1":"")},b=function(b){return a.call(this,b)+(this._connector_sorting||"")+(this._connector_filter||"")},c=function(a,c,d){this._connector_sorting="&dhx_sort["+c+"]="+d;return b.call(this,
-a)},d=function(a,c,d){for(var h=0;h<c.length;h++)c[h]="dhx_filter["+c[h]+"]="+encodeURIComponent(d[h]);this._connector_filter="&"+c.join("&");return b.call(this,a)};this.attachEvent("onCollectValues",function(a){return this._con_f_used[a]?typeof this._con_f_used[a]=="object"?this._con_f_used[a]:!1:!0});this.attachEvent("onDynXLS",function(){this.xmlFileUrl=b.call(this,this.xmlFileUrl);return!0});this.attachEvent("onBeforeSorting",function(a,b,d){if(b=="connector"){var h=this;this.clearAndLoad(c.call(this,
-this.xmlFileUrl,a,d),function(){h.setSortImgState(!0,a,d)});return!1}return!0});this.attachEvent("onFilterStart",function(a,b){return this._con_f_used.length?(this.clearAndLoad(d.call(this,this.xmlFileUrl,a,b)),!1):!0});this.attachEvent("onXLE",function(){});this._init_point_connector&&this._init_point_connector()},dhtmlXGridObject.prototype._con_f_used=[],dhtmlXGridObject.prototype._in_header_connector_text_filter=function(a,b){this._con_f_used[b]||(this._con_f_used[b]=1);return this._in_header_text_filter(a,
-b)},dhtmlXGridObject.prototype._in_header_connector_select_filter=function(a,b){this._con_f_used[b]||(this._con_f_used[b]=2);return this._in_header_select_filter(a,b)},dhtmlXGridObject.prototype.load_connector=dhtmlXGridObject.prototype.load,dhtmlXGridObject.prototype.load=function(a,b,c){if(!this._colls_loaded&&this.cellType){for(var d=[],e=0;e<this.cellType.length;e++)(this.cellType[e].indexOf("co")==0||this._con_f_used[e]==2)&&d.push(e);d.length&&(arguments[0]+=(arguments[0].indexOf("?")!=-1?"&":
-"?")+"connector=true&dhx_colls="+d.join(","))}return this.load_connector.apply(this,arguments)},dhtmlXGridObject.prototype._parseHead_connector=dhtmlXGridObject.prototype._parseHead,dhtmlXGridObject.prototype._parseHead=function(a,b,c){this._parseHead_connector.apply(this,arguments);if(!this._colls_loaded){for(var d=this.xmlLoader.doXPath("./coll_options",arguments[0]),e=0;e<d.length;e++){var f=d[e].getAttribute("for"),g=[],h=null;this.cellType[f]=="combo"&&(h=this.getColumnCombo(f));this.cellType[f].indexOf("co")==
-0&&(h=this.getCombo(f));for(var k=this.xmlLoader.doXPath("./item",d[e]),i=0;i<k.length;i++){var j=k[i].getAttribute("value");if(h){var l=k[i].getAttribute("label")||j;h.addOption?h.addOption([[j,l]]):h.put(j,l);g[g.length]=l}else g[g.length]=j}this._con_f_used[f*1]&&(this._con_f_used[f*1]=g)}this._colls_loaded=!0}};
-if(window.dataProcessor)dataProcessor.prototype.init_original=dataProcessor.prototype.init,dataProcessor.prototype.init=function(a){this.init_original(a);a._dataprocessor=this;this.setTransactionMode("POST",!0);this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true"};dhtmlxError.catchError("LoadXML",function(a,b,c){c[0].status!=0&&alert(c[0].responseText)});window.dhtmlXScheduler=window.scheduler={version:"4.0.1"};dhtmlxEventable(scheduler);
-scheduler.init=function(a,b,c){b=b||scheduler._currentDate();c=c||"week";this._skin_init&&scheduler._skin_init();scheduler.date.init();this._obj=typeof a=="string"?document.getElementById(a):a;this._els=[];this._scroll=!0;this._quirks=_isIE&&document.compatMode=="BackCompat";this._quirks7=_isIE&&navigator.appVersion.indexOf("MSIE 8")==-1;this.get_elements();this.init_templates();this.set_actions();(function(){function a(){return{w:window.innerWidth||document.documentElement.clientWidth,h:window.innerHeight||
-document.documentElement.clientHeight}}function b(a,c){return a.w==c.w&&a.h==c.h}var c=a();dhtmlxEvent(window,"resize",function(){var g=a();if(!b(c,g))window.clearTimeout(scheduler._resize_timer),scheduler._resize_timer=window.setTimeout(function(){scheduler.callEvent("onSchedulerResize",[])&&(scheduler.update_view(),scheduler.callEvent("onAfterSchedulerResize",[]))},100);c=g})})();this._init_touch_events();this.set_sizes();scheduler.callEvent("onSchedulerReady",[]);this.setCurrentView(b,c)};
-scheduler.xy={min_event_height:40,scale_width:50,scroll_width:18,scale_height:20,month_scale_height:20,menu_width:25,margin_top:0,margin_left:0,editor_width:140};scheduler.keys={edit_save:13,edit_cancel:27};
-scheduler.set_sizes=function(){var a=this._x=this._obj.clientWidth-this.xy.margin_left,b=this._y=this._obj.clientHeight-this.xy.margin_top,c=this._table_view?0:this.xy.scale_width+this.xy.scroll_width,d=this._table_view?-1:this.xy.scale_width;this.set_xy(this._els.dhx_cal_navline[0],a,this.xy.nav_height,0,0);this.set_xy(this._els.dhx_cal_header[0],a-c,this.xy.scale_height,d,this.xy.nav_height+(this._quirks?-1:1));var e=this._els.dhx_cal_navline[0].offsetHeight;if(e>0)this.xy.nav_height=e;var f=this.xy.scale_height+
-this.xy.nav_height+(this._quirks?-2:0);this.set_xy(this._els.dhx_cal_data[0],a,b-(f+2),0,f+2)};scheduler.set_xy=function(a,b,c,d,e){a.style.width=Math.max(0,b)+"px";a.style.height=Math.max(0,c)+"px";if(arguments.length>3)a.style.left=d+"px",a.style.top=e+"px"};
-scheduler.get_elements=function(){for(var a=this._obj.getElementsByTagName("DIV"),b=0;b<a.length;b++){var c=a[b].className;c&&(c=c.split(" ")[0]);this._els[c]||(this._els[c]=[]);this._els[c].push(a[b]);var d=scheduler.locale.labels[a[b].getAttribute("name")||c];if(d)a[b].innerHTML=d}};
-scheduler.set_actions=function(){for(var a in this._els)if(this._click[a])for(var b=0;b<this._els[a].length;b++)this._els[a][b].onclick=scheduler._click[a];this._obj.onselectstart=function(){return!1};this._obj.onmousemove=function(a){scheduler._temp_touch_block||scheduler._on_mouse_move(a||event)};this._obj.onmousedown=function(a){scheduler._ignore_next_click||scheduler._on_mouse_down(a||event)};this._obj.onmouseup=function(a){scheduler._ignore_next_click||scheduler._on_mouse_up(a||event)};this._obj.ondblclick=
-function(a){scheduler._on_dbl_click(a||event)};this._obj.oncontextmenu=function(a){var b=a||event,e=b.target||b.srcElement,f=scheduler.callEvent("onContextMenu",[scheduler._locate_event(e),b]);return f}};scheduler.select=function(a){if(this._select_id!=a)this.editStop(!1),this.unselect(),this._select_id=a,this.updateEvent(a)};scheduler.unselect=function(a){if(!(a&&a!=this._select_id)){var b=this._select_id;this._select_id=null;b&&this.updateEvent(b)}};
-scheduler.getState=function(){return{mode:this._mode,date:this._date,min_date:this._min_date,max_date:this._max_date,editor_id:this._edit_id,lightbox_id:this._lightbox_id,new_event:this._new_event,select_id:this._select_id,expanded:this.expanded,drag_id:this._drag_id,drag_mode:this._drag_mode}};
-scheduler._click={dhx_cal_data:function(a){if(scheduler._ignore_next_click)return a.preventDefault&&a.preventDefault(),a.cancelBubble=!0,scheduler._ignore_next_click=!1;var b=a?a.target:event.srcElement,c=scheduler._locate_event(b),a=a||event;if(c){if(!scheduler.callEvent("onClick",[c,a])||scheduler.config.readonly)return}else scheduler.callEvent("onEmptyClick",[scheduler.getActionData(a).date,a]);if(c&&scheduler.config.select){scheduler.select(c);var d=b.className;if(d.indexOf("_icon")!=-1)scheduler._click.buttons[d.split(" ")[1].replace("icon_",
-"")](c)}else scheduler._close_not_saved()},dhx_cal_prev_button:function(){scheduler._click.dhx_cal_next_button(0,-1)},dhx_cal_next_button:function(a,b){scheduler.setCurrentView(scheduler.date.add(scheduler.date[scheduler._mode+"_start"](scheduler._date),b||1,scheduler._mode))},dhx_cal_today_button:function(){scheduler.callEvent("onBeforeTodayDisplayed",[])&&scheduler.setCurrentView(scheduler._currentDate())},dhx_cal_tab:function(){var a=this.getAttribute("name"),b=a.substring(0,a.search("_tab"));
-scheduler.setCurrentView(scheduler._date,b)},buttons:{"delete":function(a){var b=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(b,scheduler.locale.labels.title_confirm_deleting,function(){scheduler.deleteEvent(a)})},edit:function(a){scheduler.edit(a)},save:function(){scheduler.editStop(!0)},details:function(a){scheduler.showLightbox(a)},cancel:function(){scheduler.editStop(!1)}}};
-scheduler._dhtmlx_confirm=function(a,b,c){if(!a)return c();var d={text:a};if(b)d.title=b;if(c)d.callback=function(a){a&&c()};dhtmlx.confirm(d)};
-scheduler.addEventNow=function(a,b,c){var d={};a&&a.constructor.toString().match(/object/i)!==null&&(d=a,a=null);var e=(this.config.event_duration||this.config.time_step)*6E4;a||(a=d.start_date||Math.round(scheduler._currentDate().valueOf()/e)*e);var f=new Date(a);if(!b){var g=this.config.first_hour;g>f.getHours()&&(f.setHours(g),a=f.valueOf());b=a.valueOf()+e}var h=new Date(b);f.valueOf()==h.valueOf()&&h.setTime(h.valueOf()+e);d.start_date=d.start_date||f;d.end_date=d.end_date||h;d.text=d.text||
-this.locale.labels.new_event;d.id=this._drag_id=this.uid();this._drag_mode="new-size";this._loading=!0;this.addEvent(d);this.callEvent("onEventCreated",[this._drag_id,c]);this._loading=!1;this._drag_event={};this._on_mouse_up(c)};
-scheduler._on_dbl_click=function(a,b){b=b||a.target||a.srcElement;if(!this.config.readonly&&b.className){var c=b.className.split(" ")[0];switch(c){case "dhx_scale_holder":case "dhx_scale_holder_now":case "dhx_month_body":case "dhx_wa_day_data":case "dhx_marked_timespan":if(!scheduler.config.dblclick_create)break;this.addEventNow(this.getActionData(a).date,null,a);break;case "dhx_cal_event":case "dhx_wa_ev_body":case "dhx_agenda_line":case "dhx_grid_event":case "dhx_cal_event_line":case "dhx_cal_event_clear":var d=
-this._locate_event(b);if(!this.callEvent("onDblClick",[d,a]))break;this.config.details_on_dblclick||this._table_view||!this.getEvent(d)._timed||!this.config.select?this.showLightbox(d):this.edit(d);break;case "dhx_time_block":case "dhx_cal_container":break;default:var e=this["dblclick_"+c];if(e)e.call(this,a);else if(b.parentNode&&b!=this)return scheduler._on_dbl_click(a,b.parentNode)}}};
-scheduler._mouse_coords=function(a){var b,c=document.body,d=document.documentElement;b=!_isIE&&(a.pageX||a.pageY)?{x:a.pageX,y:a.pageY}:{x:a.clientX+(c.scrollLeft||d.scrollLeft||0)-c.clientLeft,y:a.clientY+(c.scrollTop||d.scrollTop||0)-c.clientTop};b.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);b.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els.dhx_cal_data[0].scrollTop;b.ev=a;var e=this["mouse_"+this._mode];if(e)return e.call(this,
-b);if(this._cols){var f=b.x/this._cols[0];if(this._ignores)for(var g=0;g<=f;g++)this._ignores[g]&&f++}if(this._table_view){if(!this._cols||!this._colsS)return b;for(var h=0,h=1;h<this._colsS.heights.length;h++)if(this._colsS.heights[h]>b.y)break;b.y=Math.ceil((Math.max(0,f)+Math.max(0,h-1)*7)*1440/this.config.time_step);if(scheduler._drag_mode||this._mode=="month")b.y=(Math.max(0,Math.ceil(f)-1)+Math.max(0,h-1)*7)*1440/this.config.time_step;if(this._drag_mode=="move"&&scheduler._ignores_detected&&
-scheduler.config.preserve_length&&(b._ignores=!0,!this._drag_event._event_length))this._drag_event._event_length=this._get_real_event_length(this._drag_event.start_date,this._drag_event.end_date,{x_step:1,x_unit:"day"});b.x=0}else{if(!this._cols)return b;b.x=Math.min(this._cols.length-1,Math.max(0,Math.ceil(f)-1));b.y=Math.max(0,Math.ceil(b.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step)}return b};
-scheduler._close_not_saved=function(){if((new Date).valueOf()-(scheduler._new_event||0)>500&&scheduler._edit_id){var a=scheduler.locale.labels.confirm_closing;scheduler._dhtmlx_confirm(a,scheduler.locale.labels.title_confirm_closing,function(){scheduler.editStop(scheduler.config.positive_closing)})}};scheduler._correct_shift=function(a,b){return a-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(a)).getTimezoneOffset())*6E4*(b?-1:1)};
-scheduler._on_mouse_move=function(a){if(this._drag_mode){var b=this._mouse_coords(a);if(!this._drag_pos||b.force_redraw||this._drag_pos.x!=b.x||this._drag_pos.y!=b.y){var c,d;this._edit_id!=this._drag_id&&this._close_not_saved();this._drag_pos=b;if(this._drag_mode=="create"){this._close_not_saved();this._loading=!0;c=this._get_date_from_pos(b).valueOf();if(!this._drag_start){var e=this.callEvent("onBeforeEventCreated",[a,this._drag_id]);if(!e)return;this._drag_start=c;return}d=c;var f=new Date(this._drag_start),
-g=new Date(d);if((this._mode=="day"||this._mode=="week")&&f.getHours()==g.getHours()&&f.getMinutes()==g.getMinutes())g=new Date(this._drag_start+1E3);this._drag_id=this.uid();this.addEvent(f,g,this.locale.labels.new_event,this._drag_id,b.fields);this.callEvent("onEventCreated",[this._drag_id,a]);this._loading=!1;this._drag_mode="new-size"}var h=this.getEvent(this._drag_id);if(this._drag_mode=="move")if(c=this._min_date.valueOf()+(b.y*this.config.time_step+b.x*1440-(scheduler._move_pos_shift||0))*
-6E4,!b.custom&&this._table_view&&(c+=this.date.time_part(h.start_date)*1E3),c=this._correct_shift(c),b._ignores&&this.config.preserve_length&&this._table_view){if(this.matrix)var k=this.matrix[this._mode];k=k||{x_step:1,x_unit:"day"};d=c*1+this._get_fictional_event_length(c,this._drag_event._event_length,k)}else d=h.end_date.valueOf()-(h.start_date.valueOf()-c);else{c=h.start_date.valueOf();d=h.end_date.valueOf();if(this._table_view){var i=this._min_date.valueOf()+b.y*this.config.time_step*6E4+(b.custom?
-0:864E5);this._mode=="month"&&(i=this._correct_shift(i,!1));b.resize_from_start?c=i:d=i}else if(d=this.date.date_part(new Date(h.end_date)).valueOf()+b.y*this.config.time_step*6E4,this._els.dhx_cal_data[0].style.cursor="s-resize",this._mode=="week"||this._mode=="day")d=this._correct_shift(d);if(this._drag_mode=="new-size")if(d<=this._drag_start){var j=b.shift||(this._table_view&&!b.custom?864E5:0);c=d-(b.shift?0:j);d=this._drag_start+(j||this.config.time_step*6E4)}else c=this._drag_start;else d<=
-c&&(d=c+this.config.time_step*6E4)}var l=new Date(d-1),n=new Date(c);if(this._table_view||l.getDate()==n.getDate()&&l.getHours()<this.config.last_hour||scheduler._allow_dnd)if(h.start_date=n,h.end_date=new Date(d),this.config.update_render){var m=scheduler._els.dhx_cal_data[0].scrollTop;this.update_view();scheduler._els.dhx_cal_data[0].scrollTop=m}else this.updateEvent(this._drag_id);this._table_view&&this.for_rendered(this._drag_id,function(a){a.className+=" dhx_in_move"})}}else if(scheduler.checkEvent("onMouseMove")){var o=
-this._locate_event(a.target||a.srcElement);this.callEvent("onMouseMove",[o,a])}};
-scheduler._on_mouse_down=function(a,b){if(a.button!=2&&!this.config.readonly&&!this._drag_mode){var b=b||a.target||a.srcElement,c=b.className&&b.className.split(" ")[0];switch(c){case "dhx_cal_event_line":case "dhx_cal_event_clear":if(this._table_view)this._drag_mode="move";break;case "dhx_event_move":case "dhx_wa_ev_body":this._drag_mode="move";break;case "dhx_event_resize":this._drag_mode="resize";break;case "dhx_scale_holder":case "dhx_scale_holder_now":case "dhx_month_body":case "dhx_matrix_cell":case "dhx_marked_timespan":this._drag_mode="create";
-this.unselect(this._select_id);break;case "":if(b.parentNode)return scheduler._on_mouse_down(a,b.parentNode);default:if(scheduler.checkEvent("onMouseDown")&&scheduler.callEvent("onMouseDown",[c])&&b.parentNode&&b!=this)return scheduler._on_mouse_down(a,b.parentNode);this._drag_id=this._drag_mode=null}if(this._drag_mode){var d=this._locate_event(b);!this.config["drag_"+this._drag_mode]||!this.callEvent("onBeforeDrag",[d,this._drag_mode,a])?this._drag_mode=this._drag_id=0:(this._drag_id=d,this._drag_event=
-scheduler._lame_clone(this.getEvent(this._drag_id)||{}))}this._drag_start=null}};
-scheduler._on_mouse_up=function(a){if(!a||!(a.button==2&&scheduler.config.touch)){if(this._drag_mode&&this._drag_id){this._els.dhx_cal_data[0].style.cursor="default";var b=this.getEvent(this._drag_id);if(this._drag_event._dhx_changed||!this._drag_event.start_date||b.start_date.valueOf()!=this._drag_event.start_date.valueOf()||b.end_date.valueOf()!=this._drag_event.end_date.valueOf()){var c=this._drag_mode=="new-size";if(this.callEvent("onBeforeEventChanged",[b,a,c,this._drag_event])){var d=this._drag_id;
-this._drag_id=this._drag_mode=null;if(c&&this.config.edit_on_create){this.unselect();this._new_event=new Date;if(this._table_view||this.config.details_on_create||!this.config.select)return this.showLightbox(d);this._drag_pos=!0;this._select_id=this._edit_id=d}else this._new_event||this.callEvent(c?"onEventAdded":"onEventChanged",[d,this.getEvent(d)])}else c?this.deleteEvent(b.id,!0):(this._drag_event._dhx_changed=!1,scheduler._lame_copy(b,this._drag_event),this.updateEvent(b.id))}this._drag_pos&&
-this.render_view_data()}this._drag_pos=this._drag_mode=this._drag_id=null}};scheduler.update_view=function(){this._reset_scale();if(this._load_mode&&this._load())return this._render_wait=!0;this.render_view_data()};scheduler.isViewExists=function(a){return!!(scheduler[a+"_view"]||scheduler.date[a+"_start"]&&scheduler.templates[a+"_date"]&&scheduler.templates[a+"_scale_date"])};
-scheduler.updateView=function(a,b){var a=a||this._date,b=b||this._mode,c="dhx_cal_data";this._mode?this._obj.className=this._obj.className.replace("dhx_scheduler_"+this._mode,"dhx_scheduler_"+b):this._obj.className+=" dhx_scheduler_"+b;var d=this._mode==b&&this.config.preserve_scroll?this._els[c][0].scrollTop:!1;if(this[this._mode+"_view"]&&b&&this._mode!=b)this[this._mode+"_view"](!1);this._close_not_saved();var e="dhx_multi_day";this._els[e]&&(this._els[e][0].parentNode.removeChild(this._els[e][0]),
-this._els[e]=null);this._mode=b;this._date=a;this._table_view=this._mode=="month";var f=this._els.dhx_cal_tab;if(f)for(var g=0;g<f.length;g++){var h=f[g].className,h=h.replace(/ active/g,"");f[g].getAttribute("name")==this._mode+"_tab"&&(h+=" active");f[g].className=h}var k=this[this._mode+"_view"];k?k(!0):this.update_view();if(typeof d=="number")this._els[c][0].scrollTop=d};
-scheduler.setCurrentView=function(a,b){if(this.callEvent("onBeforeViewChange",[this._mode,this._date,b||this._mode,a||this._date]))this.updateView(a,b),this.callEvent("onViewChange",[this._mode,this._date])};
-scheduler._render_x_header=function(a,b,c,d){var e=document.createElement("DIV");e.className="dhx_scale_bar";this.templates[this._mode+"_scalex_class"]&&(e.className+=" "+this.templates[this._mode+"_scalex_class"](c));var f=this._cols[a]-1;this._mode=="month"&&a===0&&this.config.left_border&&(e.className+=" dhx_scale_bar_border",b+=1);this.set_xy(e,f,this.xy.scale_height-2,b,0);e.innerHTML=this.templates[this._mode+"_scale_date"](c,this._mode);d.appendChild(e)};
-scheduler._reset_scale=function(){if(this.templates[this._mode+"_date"]){var a=this._els.dhx_cal_header[0],b=this._els.dhx_cal_data[0],c=this.config;a.innerHTML="";b.scrollTop=0;b.innerHTML="";var d=(c.readonly||!c.drag_resize?" dhx_resize_denied":"")+(c.readonly||!c.drag_move?" dhx_move_denied":"");if(d)b.className="dhx_cal_data"+d;this._scales={};this._cols=[];this._colsS={height:0};this._dy_shift=0;this.set_sizes();var e=parseInt(a.style.width,10),f=0,g,h,k,i;h=this.date[this._mode+"_start"](new Date(this._date.valueOf()));
-g=k=this._table_view?scheduler.date.week_start(h):h;i=this.date.date_part(scheduler._currentDate());var j=scheduler.date.add(h,1,this._mode),l=7;if(!this._table_view){var n=this.date["get_"+this._mode+"_end"];n&&(j=n(h));l=Math.round((j.valueOf()-h.valueOf())/864E5)}this._min_date=g;this._els.dhx_cal_date[0].innerHTML=this.templates[this._mode+"_date"](h,j,this._mode);this._process_ignores(k,l,"day",1);for(var m=l-this._ignores_detected,o=0;o<l;o++){this._ignores[o]?(this._cols[o]=0,m++):(this._cols[o]=
-Math.floor(e/(m-o)),this._render_x_header(o,f,g,a));if(!this._table_view){var p=document.createElement("DIV"),q="dhx_scale_holder";g.valueOf()==i.valueOf()&&(q="dhx_scale_holder_now");p.className=q+" "+this.templates.week_date_class(g,i);this.set_xy(p,this._cols[o]-1,c.hour_size_px*(c.last_hour-c.first_hour),f+this.xy.scale_width+1,0);b.appendChild(p);this.callEvent("onScaleAdd",[p,g])}g=this.date.add(g,1,"day");e-=this._cols[o];f+=this._cols[o];this._colsS[o]=(this._cols[o-1]||0)+(this._colsS[o-
-1]||(this._table_view?0:this.xy.scale_width+2));this._colsS.col_length=l+1}this._max_date=g;this._colsS[l]=this._cols[l-1]+this._colsS[l-1];if(this._table_view)this._reset_month_scale(b,h,k);else if(this._reset_hours_scale(b,h,k),c.multi_day){var r="dhx_multi_day";this._els[r]&&(this._els[r][0].parentNode.removeChild(this._els[r][0]),this._els[r]=null);var s=this._els.dhx_cal_navline[0],u=s.offsetHeight+this._els.dhx_cal_header[0].offsetHeight+1,t=document.createElement("DIV");t.className=r;t.style.visibility=
-"hidden";this.set_xy(t,this._colsS[this._colsS.col_length-1]+this.xy.scroll_width,0,0,u);b.parentNode.insertBefore(t,b);var v=t.cloneNode(!0);v.className=r+"_icon";v.style.visibility="hidden";this.set_xy(v,this.xy.scale_width,0,0,u);t.appendChild(v);this._els[r]=[t,v];this._els[r][0].onclick=this._click.dhx_cal_data}}};
-scheduler._reset_hours_scale=function(a){var b=document.createElement("DIV");b.className="dhx_scale_holder";for(var c=new Date(1980,1,1,this.config.first_hour,0,0),d=this.config.first_hour*1;d<this.config.last_hour;d++){var e=document.createElement("DIV");e.className="dhx_scale_hour";e.style.height=this.config.hour_size_px-(this._quirks?0:1)+"px";var f=this.xy.scale_width;this.config.left_border&&(f-=1,e.className+=" dhx_scale_hour_border");e.style.width=f+"px";e.innerHTML=scheduler.templates.hour_scale(c);
-b.appendChild(e);c=this.date.add(c,1,"hour")}a.appendChild(b);if(this.config.scroll_hour)a.scrollTop=this.config.hour_size_px*(this.config.scroll_hour-this.config.first_hour)};scheduler._currentDate=function(){return scheduler.config.now_date?new Date(scheduler.config.now_date):new Date};
-scheduler._process_ignores=function(a,b,c,d,e){this._ignores=[];this._ignores_detected=0;var f=scheduler["ignore_"+this._mode];if(f)for(var g=new Date(a),h=0;h<b;h++)f(g)&&(this._ignores_detected+=1,this._ignores[h]=!0,e&&b++),g=scheduler.date.add(g,d,c)};
-scheduler._reset_month_scale=function(a,b,c){var d=scheduler.date.add(b,1,"month"),e=scheduler._currentDate();this.date.date_part(e);this.date.date_part(c);var f=Math.ceil(Math.round((d.valueOf()-c.valueOf())/864E5)/7),g=[],h=Math.floor(a.clientHeight/f)-22;this._colsS.height=h+22;for(var k=this._colsS.heights=[],i=0;i<=7;i++){var j=(this._cols[i]||0)-1;i===0&&this.config.left_border&&(j-=1);g[i]=" style='height:"+h+"px; width:"+j+"px;' "}var l=0;this._min_date=c;for(var n="<table cellpadding='0' cellspacing='0'>",
-m=[],i=0;i<f;i++){n+="<tr>";for(var o=0;o<7;o++){n+="<td";var p="";c<b?p="dhx_before":c>=d?p="dhx_after":c.valueOf()==e.valueOf()&&(p="dhx_now");n+=" class='"+p+" "+this.templates.month_date_class(c,e)+"' >";var q="dhx_month_body",r="dhx_month_head";o===0&&this.config.left_border&&(q+=" dhx_month_body_border",r+=" dhx_month_head_border");!this._ignores_detected||!this._ignores[o]?(n+="<div class='"+r+"'>"+this.templates.month_day(c)+"</div>",n+="<div class='"+q+"' "+g[o]+"></div></td>"):n+="<div></div><div></div>";
-m.push(c);c=this.date.add(c,1,"day")}n+="</tr>";k[i]=l;l+=this._colsS.height}n+="</table>";this._max_date=c;a.innerHTML=n;this._scales={};for(var s=a.getElementsByTagName("div"),i=0;i<m.length;i++){var u=s[i*2+1],t=m[i];this._scales[+t]=u}for(i=0;i<m.length;i++)t=m[i],this.callEvent("onScaleAdd",[this._scales[+t],t]);return c};
-scheduler.getLabel=function(a,b){for(var c=this.config.lightbox.sections,d=0;d<c.length;d++)if(c[d].map_to==a)for(var e=c[d].options,f=0;f<e.length;f++)if(e[f].key==b)return e[f].label;return""};scheduler.updateCollection=function(a,b){var c=scheduler.serverList(a);if(!c)return!1;c.splice(0,c.length);c.push.apply(c,b||[]);scheduler.callEvent("onOptionsLoad",[]);scheduler.resetLightbox();return!0};
-scheduler._lame_clone=function(a,b){var c,d,e,b=b||[];for(c=0;c<b.length;c+=2)if(a===b[c])return b[c+1];if(a&&typeof a=="object"){e={};d=[Array,Date,Number,String,Boolean];for(c=0;c<d.length;c++)a instanceof d[c]&&(e=c?new d[c](a):new d[c]);b.push(a,e);for(c in a)Object.prototype.hasOwnProperty.apply(a,[c])&&(e[c]=scheduler._lame_clone(a[c],b))}return e||a};scheduler._lame_copy=function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a};
-scheduler._get_date_from_pos=function(a){var b=this._min_date.valueOf()+(a.y*this.config.time_step+(this._table_view?0:a.x)*1440)*6E4;return new Date(this._correct_shift(b))};scheduler.getActionData=function(a){var b=this._mouse_coords(a);return{date:this._get_date_from_pos(b),section:b.section}};scheduler._focus=function(a,b){a&&a.focus&&(this.config.touch?window.setTimeout(function(){a.focus()},100):(b&&a.select&&a.select(),a.focus()))};
-scheduler._get_real_event_length=function(a,b,c){var d=b-a,e=c._start_correction+c._end_correction||0,f=this["ignore_"+this._mode],g=0;if(c.render)var g=this._get_date_index(c,a),h=this._get_date_index(c,b);else h=Math.round(d/60/60/1E3/24);for(;g<h;){var k=scheduler.date.add(b,-c.x_step,c.x_unit);d-=f&&f(b)?b-k:e;b=k;h--}return d};
-scheduler._get_fictional_event_length=function(a,b,c,d){var e=new Date(a),f=d?-1:1;if(c._start_correction||c._end_correction){var g=d?e.getHours()*60+e.getMinutes()-(c.first_hour||0)*60:(c.last_hour||0)*60-(e.getHours()*60+e.getMinutes()),h=(c.last_hour-c.first_hour)*60,k=Math.ceil((b/6E4-g)/h);b+=k*(1440-h)*6E4}var i=new Date(a*1+b*f),j=this["ignore_"+this._mode],l=0;if(c.render)var l=this._get_date_index(c,e),n=this._get_date_index(c,i);else n=Math.round(b/60/60/1E3/24);for(;l*f<=n*f;){var m=scheduler.date.add(e,
-c.x_step*f,c.x_unit);j&&j(e)&&(b+=(m-e)*f,n+=f);e=m;l+=f}return b};
-scheduler.date={init:function(){for(var a=scheduler.locale.date.month_short,b=scheduler.locale.date.month_short_hash={},c=0;c<a.length;c++)b[a[c]]=c;a=scheduler.locale.date.month_full;b=scheduler.locale.date.month_full_hash={};for(c=0;c<a.length;c++)b[a[c]]=c},date_part:function(a){a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);a.getHours()!=0&&a.setTime(a.getTime()+36E5*(24-a.getHours()));return a},time_part:function(a){return(a.valueOf()/1E3-a.getTimezoneOffset()*60)%86400},
-week_start:function(a){var b=a.getDay();scheduler.config.start_on_monday&&(b===0?b=6:b--);return this.date_part(this.add(a,-1*b,"day"))},month_start:function(a){a.setDate(1);return this.date_part(a)},year_start:function(a){a.setMonth(0);return this.month_start(a)},day_start:function(a){return this.date_part(a)},add:function(a,b,c){var d=new Date(a.valueOf());switch(c){case "week":b*=7;case "day":d.setDate(d.getDate()+b);!a.getHours()&&d.getHours()&&d.setTime(d.getTime()+36E5*(24-d.getHours()));break;
-case "month":d.setMonth(d.getMonth()+b);break;case "year":d.setYear(d.getFullYear()+b);break;case "hour":d.setHours(d.getHours()+b);break;case "minute":d.setMinutes(d.getMinutes()+b);break;default:return scheduler.date["add_"+c](a,b,c)}return d},to_fixed:function(a){return a<10?"0"+a:a},copy:function(a){return new Date(a.valueOf())},date_to_str:function(a,b){a=a.replace(/%[a-zA-Z]/g,function(a){switch(a){case "%d":return'"+scheduler.date.to_fixed(date.getDate())+"';case "%m":return'"+scheduler.date.to_fixed((date.getMonth()+1))+"';
-case "%j":return'"+date.getDate()+"';case "%n":return'"+(date.getMonth()+1)+"';case "%y":return'"+scheduler.date.to_fixed(date.getFullYear()%100)+"';case "%Y":return'"+date.getFullYear()+"';case "%D":return'"+scheduler.locale.date.day_short[date.getDay()]+"';case "%l":return'"+scheduler.locale.date.day_full[date.getDay()]+"';case "%M":return'"+scheduler.locale.date.month_short[date.getMonth()]+"';case "%F":return'"+scheduler.locale.date.month_full[date.getMonth()]+"';case "%h":return'"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+"';
-case "%g":return'"+((date.getHours()+11)%12+1)+"';case "%G":return'"+date.getHours()+"';case "%H":return'"+scheduler.date.to_fixed(date.getHours())+"';case "%i":return'"+scheduler.date.to_fixed(date.getMinutes())+"';case "%a":return'"+(date.getHours()>11?"pm":"am")+"';case "%A":return'"+(date.getHours()>11?"PM":"AM")+"';case "%s":return'"+scheduler.date.to_fixed(date.getSeconds())+"';case "%W":return'"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"';default:return a}});b&&(a=a.replace(/date\.get/g,
-"date.getUTC"));return new Function("date",'return "'+a+'";')},str_to_date:function(a,b){for(var c="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",d=a.match(/%[a-zA-Z]/g),e=0;e<d.length;e++)switch(d[e]){case "%j":case "%d":c+="set[2]=temp["+e+"]||1;";break;case "%n":case "%m":c+="set[1]=(temp["+e+"]||1)-1;";break;case "%y":c+="set[0]=temp["+e+"]*1+(temp["+e+"]>50?1900:2000);";break;case "%g":case "%G":case "%h":case "%H":c+="set[3]=temp["+e+"]||0;";break;case "%i":c+="set[4]=temp["+e+"]||0;";break;case "%Y":c+=
-"set[0]=temp["+e+"]||0;";break;case "%a":case "%A":c+="set[3]=set[3]%12+((temp["+e+"]||'').toLowerCase()=='am'?0:12);";break;case "%s":c+="set[5]=temp["+e+"]||0;";break;case "%M":c+="set[1]=scheduler.locale.date.month_short_hash[temp["+e+"]]||0;";break;case "%F":c+="set[1]=scheduler.locale.date.month_full_hash[temp["+e+"]]||0;"}var f="set[0],set[1],set[2],set[3],set[4],set[5]";b&&(f=" Date.UTC("+f+")");return new Function("date","var set=[0,0,1,0,0,0]; "+c+" return new Date("+f+");")},getISOWeek:function(a){if(!a)return!1;
-var b=a.getDay();b===0&&(b=7);var c=new Date(a.valueOf());c.setDate(a.getDate()+(4-b));var d=c.getFullYear(),e=Math.round((c.getTime()-(new Date(d,0,1)).getTime())/864E5),f=1+Math.floor(e/7);return f},getUTCISOWeek:function(a){return this.getISOWeek(this.convert_to_utc(a))},convert_to_utc:function(a){return new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds())}};
-scheduler.locale={date:{month_full:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),month_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),day_full:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(",")},labels:{dhx_cal_today_button:"Today",day_tab:"Day",week_tab:"Week",month_tab:"Month",new_event:"New event",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details",
-icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Event will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",full_day:"Full day",confirm_recurring:"Do you want to edit the whole set of repeated events?",section_recurring:"Repeat event",button_recurring:"Disabled",button_recurring_open:"Enabled",button_edit_series:"Edit series",button_edit_occurrence:"Edit occurrence",agenda_tab:"Agenda",date:"Date",description:"Description",
-year_tab:"Year",week_agenda_tab:"Agenda",grid_tab:"Grid",drag_to_create:"Drag to create",drag_to_move:"Drag to move"}};
-scheduler.config={default_date:"%j %M %Y",month_date:"%F %Y",load_date:"%Y-%m-%d",week_date:"%l",day_date:"%D, %F %j",hour_date:"%H:%i",month_day:"%d",xml_date:"%m/%d/%Y %H:%i",api_date:"%d-%m-%Y %H:%i",preserve_length:!0,time_step:5,start_on_monday:1,first_hour:0,last_hour:24,readonly:!1,drag_resize:1,drag_move:1,drag_create:1,dblclick_create:1,edit_on_create:1,details_on_create:0,cascade_event_display:!1,cascade_event_count:4,cascade_event_margin:30,multi_day:!0,multi_day_height_limit:0,drag_lightbox:!0,
-preserve_scroll:!0,select:!0,server_utc:!1,touch:!0,touch_tip:!0,touch_drag:500,quick_info_detached:!0,positive_closing:!1,icons_edit:["icon_save","icon_cancel"],icons_select:["icon_details","icon_edit","icon_delete"],buttons_left:["dhx_save_btn","dhx_cancel_btn"],buttons_right:["dhx_delete_btn"],lightbox:{sections:[{name:"description",height:200,map_to:"text",type:"textarea",focus:!0},{name:"time",height:72,type:"time",map_to:"auto"}]},highlight_displayed_event:!0,left_border:!1};
-scheduler.templates={};
-scheduler.init_templates=function(){var a=scheduler.locale.labels;a.dhx_save_btn=a.icon_save;a.dhx_cancel_btn=a.icon_cancel;a.dhx_delete_btn=a.icon_delete;var b=scheduler.date.date_to_str,c=scheduler.config,d=function(a,b){for(var c in b)a[c]||(a[c]=b[c])};d(scheduler.templates,{day_date:b(c.default_date),month_date:b(c.month_date),week_date:function(a,b){return scheduler.templates.day_date(a)+" &ndash; "+scheduler.templates.day_date(scheduler.date.add(b,-1,"day"))},day_scale_date:b(c.default_date),month_scale_date:b(c.week_date),
-week_scale_date:b(c.day_date),hour_scale:b(c.hour_date),time_picker:b(c.hour_date),event_date:b(c.hour_date),month_day:b(c.month_day),xml_date:scheduler.date.str_to_date(c.xml_date,c.server_utc),load_format:b(c.load_date,c.server_utc),xml_format:b(c.xml_date,c.server_utc),api_date:scheduler.date.str_to_date(c.api_date),event_header:function(a,b){return scheduler.templates.event_date(a)+" - "+scheduler.templates.event_date(b)},event_text:function(a,b,c){return c.text},event_class:function(){return""},
-month_date_class:function(){return""},week_date_class:function(){return""},event_bar_date:function(a){return scheduler.templates.event_date(a)+" "},event_bar_text:function(a,b,c){return c.text},month_events_link:function(a,b){return"<a>View more("+b+" events)</a>"}});this.callEvent("onTemplatesReady",[])};scheduler.uid=function(){if(!this._seed)this._seed=(new Date).valueOf();return this._seed++};scheduler._events={};
-scheduler.clearAll=function(){this._events={};this._loaded={};this.clear_view();this.callEvent("onClearAll",[])};
-scheduler.addEvent=function(a,b,c,d,e){if(!arguments.length)return this.addEventNow();var f=a;if(arguments.length!=1)f=e||{},f.start_date=a,f.end_date=b,f.text=c,f.id=d;f.id=f.id||scheduler.uid();f.text=f.text||"";if(typeof f.start_date=="string")f.start_date=this.templates.api_date(f.start_date);if(typeof f.end_date=="string")f.end_date=this.templates.api_date(f.end_date);var g=(this.config.event_duration||this.config.time_step)*6E4;f.start_date.valueOf()==f.end_date.valueOf()&&f.end_date.setTime(f.end_date.valueOf()+
-g);f._timed=this.isOneDayEvent(f);var h=!this._events[f.id];this._events[f.id]=f;this.event_updated(f);this._loading||this.callEvent(h?"onEventAdded":"onEventChanged",[f.id,f]);return f.id};scheduler.deleteEvent=function(a,b){var c=this._events[a];if(b||this.callEvent("onBeforeEventDelete",[a,c])&&this.callEvent("onConfirmedBeforeEventDelete",[a,c]))c&&(delete this._events[a],this.unselect(a),this.event_updated(c)),this.callEvent("onEventDeleted",[a,c])};scheduler.getEvent=function(a){return this._events[a]};
-scheduler.setEvent=function(a,b){if(!b.id)b.id=a;this._events[a]=b};scheduler.for_rendered=function(a,b){for(var c=this._rendered.length-1;c>=0;c--)this._rendered[c].getAttribute("event_id")==a&&b(this._rendered[c],c)};
-scheduler.changeEventId=function(a,b){if(a!=b){var c=this._events[a];if(c)c.id=b,this._events[b]=c,delete this._events[a];this.for_rendered(a,function(a){a.setAttribute("event_id",b)});if(this._select_id==a)this._select_id=b;if(this._edit_id==a)this._edit_id=b;this.callEvent("onEventIdChange",[a,b])}};
-(function(){for(var a="text,Text,start_date,StartDate,end_date,EndDate".split(","),b=function(a){return function(b){return scheduler.getEvent(b)[a]}},c=function(a){return function(b,c){var d=scheduler.getEvent(b);d[a]=c;d._changed=!0;d._timed=this.isOneDayEvent(d);scheduler.event_updated(d,!0)}},d=0;d<a.length;d+=2)scheduler["getEvent"+a[d+1]]=b(a[d]),scheduler["setEvent"+a[d+1]]=c(a[d])})();scheduler.event_updated=function(a){this.is_visible_events(a)?this.render_view_data():this.clear_event(a.id)};
-scheduler.is_visible_events=function(a){return a.start_date<this._max_date&&this._min_date<a.end_date};scheduler.isOneDayEvent=function(a){var b=a.end_date.getDate()-a.start_date.getDate();return b?(b<0&&(b=Math.ceil((a.end_date.valueOf()-a.start_date.valueOf())/864E5)),b==1&&!a.end_date.getHours()&&!a.end_date.getMinutes()&&(a.start_date.getHours()||a.start_date.getMinutes())):a.start_date.getMonth()==a.end_date.getMonth()&&a.start_date.getFullYear()==a.end_date.getFullYear()};
-scheduler.get_visible_events=function(a){var b=[],c;for(c in this._events)this.is_visible_events(this._events[c])&&(!a||this._events[c]._timed)&&this.filter_event(c,this._events[c])&&b.push(this._events[c]);return b};scheduler.filter_event=function(a,b){var c=this["filter_"+this._mode];return c?c(a,b):!0};scheduler._is_main_area_event=function(a){return!!a._timed};
-scheduler.render_view_data=function(a,b){if(!a){if(this._not_render){this._render_wait=!0;return}this._render_wait=!1;this.clear_view();a=this.get_visible_events(!(this._table_view||this.config.multi_day))}for(var c=0,d=a.length;c<d;c++)this._recalculate_timed(a[c]);if(this.config.multi_day&&!this._table_view){for(var e=[],f=[],c=0;c<a.length;c++)this._is_main_area_event(a[c])?e.push(a[c]):f.push(a[c]);this._rendered_location=this._els.dhx_multi_day[0];this._table_view=!0;this.render_data(f,b);this._table_view=
-!1;this._rendered_location=this._els.dhx_cal_data[0];this._table_view=!1;this.render_data(e,b)}else this._rendered_location=this._els.dhx_cal_data[0],this.render_data(a,b)};scheduler._view_month_day=function(a){var b=scheduler.getActionData(a).date;scheduler.callEvent("onViewMoreClick",[b])&&scheduler.setCurrentView(b,"day")};
-scheduler._render_month_link=function(a){for(var b=this._rendered_location,c=this._lame_clone(a),d=a._sday;d<a._eday;d++){c._sday=d;c._eday=d+1;var e=scheduler.date,f=scheduler._min_date,f=e.add(f,c._sweek,"week"),f=e.add(f,c._sday,"day"),g=scheduler.getEvents(f,e.add(f,1,"day")).length,h=this._get_event_bar_pos(c),k=h.x2-h.x,i=document.createElement("div");i.onclick=function(a){scheduler._view_month_day(a||event)};i.className="dhx_month_link";i.style.top=h.y+"px";i.style.left=h.x+"px";i.style.width=
-k+"px";i.innerHTML=scheduler.templates.month_events_link(f,g);this._rendered.push(i);b.appendChild(i)}};scheduler._recalculate_timed=function(a){if(a){var b=typeof a!="object"?this._events[a]:a;if(b)b._timed=scheduler.isOneDayEvent(b)}};scheduler.attachEvent("onEventChanged",scheduler._recalculate_timed);scheduler.attachEvent("onEventAdded",scheduler._recalculate_timed);
-scheduler.render_data=function(a,b){for(var a=this._pre_render_events(a,b),c=0;c<a.length;c++)if(this._table_view)if(scheduler._mode!="month")this.render_event_bar(a[c]);else{var d=scheduler.config.max_month_events;d!==d*1||a[c]._sorder<d?this.render_event_bar(a[c]):d!==void 0&&a[c]._sorder==d&&scheduler._render_month_link(a[c])}else this.render_event(a[c])};
-scheduler._pre_render_events=function(a,b){var c=this.xy.bar_height,d=this._colsS.heights,e=this._colsS.heights=[0,0,0,0,0,0,0],f=this._els.dhx_cal_data[0],a=this._table_view?this._pre_render_events_table(a,b):this._pre_render_events_line(a,b);if(this._table_view)if(b)this._colsS.heights=d;else{var g=f.firstChild;if(g.rows){for(var h=0;h<g.rows.length;h++){e[h]++;if(e[h]*c>this._colsS.height-22){var k=g.rows[h].cells,i=this._colsS.height-22;this.config.max_month_events*1!==this.config.max_month_events||
-e[h]<=this.config.max_month_events?i=e[h]*c:(this.config.max_month_events+1)*c>this._colsS.height-22&&(i=(this.config.max_month_events+1)*c);for(var j=0;j<k.length;j++)k[j].childNodes[1].style.height=i+"px";e[h]=(e[h-1]||0)+k[0].offsetHeight}e[h]=(e[h-1]||0)+g.rows[h].cells[0].offsetHeight}e.unshift(0);if(g.parentNode.offsetHeight<g.parentNode.scrollHeight&&!g._h_fix&&scheduler.xy.scroll_width){for(h=0;h<g.rows.length;h++){for(var l=6;this._ignores[l];)l--;var n=g.rows[h].cells[l].childNodes[0],m=
-n.offsetWidth-scheduler.xy.scroll_width+"px";n.style.width=m;n.nextSibling.style.width=m}g._h_fix=!0}}else if(!a.length&&this._els.dhx_multi_day[0].style.visibility=="visible"&&(e[0]=-1),a.length||e[0]==-1){var o=g.parentNode.childNodes,p=(e[0]+1)*c+1,q=p,r=p+"px";this.config.multi_day_height_limit&&(q=Math.min(p,this.config.multi_day_height_limit),r=q+"px");f.style.top=this._els.dhx_cal_navline[0].offsetHeight+this._els.dhx_cal_header[0].offsetHeight+q+"px";f.style.height=this._obj.offsetHeight-
-parseInt(f.style.top,10)-(this.xy.margin_top||0)+"px";var s=this._els.dhx_multi_day[0];s.style.height=r;s.style.visibility=e[0]==-1?"hidden":"visible";var u=this._els.dhx_multi_day[1];u.style.height=r;u.style.visibility=e[0]==-1?"hidden":"visible";u.className=e[0]?"dhx_multi_day_icon":"dhx_multi_day_icon_small";this._dy_shift=(e[0]+1)*c;e[0]=0;if(q!=p)f.style.top=parseInt(f.style.top)+2+"px",s.style.overflowY="auto",s.style.width=parseInt(s.style.width)-2+"px",u.style.position="fixed",u.style.top=
-"",u.style.left=""}}return a};scheduler._get_event_sday=function(a){return Math.floor((a.start_date.valueOf()-this._min_date.valueOf())/864E5)};scheduler._get_event_mapped_end_date=function(a){var b=a.end_date;if(this.config.separate_short_events){var c=(a.end_date-a.start_date)/6E4;c<this._min_mapped_duration&&(b=this.date.add(b,this._min_mapped_duration-c,"minute"))}return b};
-scheduler._pre_render_events_line=function(a,b){a.sort(function(a,b){return a.start_date.valueOf()==b.start_date.valueOf()?a.id>b.id?1:-1:a.start_date>b.start_date?1:-1});var c=[],d=[];this._min_mapped_duration=Math.ceil(this.xy.min_event_height*60/this.config.hour_size_px);for(var e=0;e<a.length;e++){var f=a[e],g=f.start_date,h=f.end_date,k=g.getHours(),i=h.getHours();f._sday=this._get_event_sday(f);if(this._ignores[f._sday])a.splice(e,1),e--;else{c[f._sday]||(c[f._sday]=[]);if(!b){f._inner=!1;for(var j=
-c[f._sday];j.length;){var l=j[j.length-1],n=this._get_event_mapped_end_date(l);if(n.valueOf()<=f.start_date.valueOf())j.splice(j.length-1,1);else break}for(var m=!1,o=0;o<j.length;o++)if(l=j[o],n=this._get_event_mapped_end_date(l),n.valueOf()<=f.start_date.valueOf()){m=!0;f._sorder=l._sorder;j.splice(o,1);f._inner=!0;break}if(j.length)j[j.length-1]._inner=!0;if(!m)if(j.length)if(j.length<=j[j.length-1]._sorder){if(j[j.length-1]._sorder)for(o=0;o<j.length;o++){for(var p=!1,q=0;q<j.length;q++)if(j[q]._sorder==
-o){p=!0;break}if(!p){f._sorder=o;break}}else f._sorder=0;f._inner=!0}else{p=j[0]._sorder;for(o=1;o<j.length;o++)if(j[o]._sorder>p)p=j[o]._sorder;f._sorder=p+1;f._inner=!1}else f._sorder=0;j.push(f);j.length>(j.max_count||0)?(j.max_count=j.length,f._count=j.length):f._count=f._count?f._count:1}if(k<this.config.first_hour||i>=this.config.last_hour)if(d.push(f),a[e]=f=this._copy_event(f),k<this.config.first_hour&&(f.start_date.setHours(this.config.first_hour),f.start_date.setMinutes(0)),i>=this.config.last_hour&&
-(f.end_date.setMinutes(0),f.end_date.setHours(this.config.last_hour)),f.start_date>f.end_date||k==this.config.last_hour)a.splice(e,1),e--}}if(!b){for(e=0;e<a.length;e++)a[e]._count=c[a[e]._sday].max_count;for(e=0;e<d.length;e++)d[e]._count=c[d[e]._sday].max_count}return a};scheduler._time_order=function(a){a.sort(function(a,c){return a.start_date.valueOf()==c.start_date.valueOf()?a._timed&&!c._timed?1:!a._timed&&c._timed?-1:a.id>c.id?1:-1:a.start_date>c.start_date?1:-1})};
-scheduler._pre_render_events_table=function(a,b){this._time_order(a);for(var c=[],d=[[],[],[],[],[],[],[]],e=this._colsS.heights,f,g=this._cols.length,h={},k=0;k<a.length;k++){var i=a[k],j=i.id;h[j]||(h[j]={first_chunk:!0,last_chunk:!0});var l=h[j],n=f||i.start_date,m=i.end_date;if(n<this._min_date)l.first_chunk=!1,n=this._min_date;if(m>this._max_date)l.last_chunk=!1,m=this._max_date;var o=this.locate_holder_day(n,!1,i);i._sday=o%g;if(!this._ignores[i._sday]||!i._timed){var p=this.locate_holder_day(m,
-!0,i)||g;i._eday=p%g||g;i._length=p-o;i._sweek=Math.floor((this._correct_shift(n.valueOf(),1)-this._min_date.valueOf())/(864E5*g));var q=d[i._sweek],r;for(r=0;r<q.length;r++)if(q[r]._eday<=i._sday)break;if(!i._sorder||!b)i._sorder=r;if(i._sday+i._length<=g)f=null,c.push(i),q[r]=i,e[i._sweek]=q.length-1,i._first_chunk=l.first_chunk,i._last_chunk=l.last_chunk;else{var s=this._copy_event(i);s.id=i.id;s._length=g-i._sday;s._eday=g;s._sday=i._sday;s._sweek=i._sweek;s._sorder=i._sorder;s.end_date=this.date.add(n,
-s._length,"day");if(s._first_chunk=l.first_chunk)l.first_chunk=!1;c.push(s);q[r]=s;f=s.end_date;e[i._sweek]=q.length-1;k--}}}return c};scheduler._copy_dummy=function(){var a=new Date(this.start_date),b=new Date(this.end_date);this.start_date=a;this.end_date=b};scheduler._copy_event=function(a){this._copy_dummy.prototype=a;return new this._copy_dummy};scheduler._rendered=[];
-scheduler.clear_view=function(){for(var a=0;a<this._rendered.length;a++){var b=this._rendered[a];b.parentNode&&b.parentNode.removeChild(b)}this._rendered=[]};scheduler.updateEvent=function(a){var b=this.getEvent(a);this.clear_event(a);if(b&&this.is_visible_events(b)&&this.filter_event(a,b)&&(this._table_view||this.config.multi_day||b._timed))this.config.update_render?this.render_view_data():this.render_view_data([b],!0)};
-scheduler.clear_event=function(a){this.for_rendered(a,function(a,c){a.parentNode&&a.parentNode.removeChild(a);scheduler._rendered.splice(c,1)})};
-scheduler.render_event=function(a){var b=scheduler.xy.menu_width,c=this.config.use_select_menu_space?0:b;if(!(a._sday<0)){var d=scheduler.locate_holder(a._sday);if(d){var e=a.start_date.getHours()*60+a.start_date.getMinutes(),f=a.end_date.getHours()*60+a.end_date.getMinutes()||scheduler.config.last_hour*60,g=a._count||1,h=a._sorder||0,k=Math.round((e*6E4-this.config.first_hour*36E5)*this.config.hour_size_px/36E5)%(this.config.hour_size_px*24),i=Math.max(scheduler.xy.min_event_height,(f-e)*this.config.hour_size_px/
-60),j=Math.floor((d.clientWidth-c)/g),l=h*j+1;a._inner||(j*=g-h);if(this.config.cascade_event_display)var n=this.config.cascade_event_count,m=this.config.cascade_event_margin,l=h%n*m,o=a._inner?(g-h-1)%n*m/2:0,j=Math.floor(d.clientWidth-c-l-o);var p=this._render_v_bar(a.id,c+l,k,j,i,a._text_style,scheduler.templates.event_header(a.start_date,a.end_date,a),scheduler.templates.event_text(a.start_date,a.end_date,a));this._rendered.push(p);d.appendChild(p);l=l+parseInt(d.style.left,10)+c;if(this._edit_id==
-a.id){p.style.zIndex=1;j=Math.max(j-4,scheduler.xy.editor_width);p=document.createElement("DIV");p.setAttribute("event_id",a.id);this.set_xy(p,j,i-20,l,k+14);p.className="dhx_cal_editor";var q=document.createElement("DIV");this.set_xy(q,j-6,i-26);q.style.cssText+=";margin:2px 2px 2px 2px;overflow:hidden;";p.appendChild(q);this._els.dhx_cal_data[0].appendChild(p);this._rendered.push(p);q.innerHTML="<textarea class='dhx_cal_editor'>"+a.text+"</textarea>";if(this._quirks7)q.firstChild.style.height=i-
-12+"px";this._editor=q.firstChild;this._editor.onkeydown=function(a){if((a||event).shiftKey)return!0;var b=(a||event).keyCode;b==scheduler.keys.edit_save&&scheduler.editStop(!0);b==scheduler.keys.edit_cancel&&scheduler.editStop(!1)};this._editor.onselectstart=function(a){return(a||event).cancelBubble=!0};scheduler._focus(q.firstChild,!0);this._els.dhx_cal_data[0].scrollLeft=0}if(this.xy.menu_width!==0&&this._select_id==a.id){if(this.config.cascade_event_display&&this._drag_mode)p.style.zIndex=1;for(var r=
-this.config["icons_"+(this._edit_id==a.id?"edit":"select")],s="",u=a.color?"background-color: "+a.color+";":"",t=a.textColor?"color: "+a.textColor+";":"",v=0;v<r.length;v++)s+="<div class='dhx_menu_icon "+r[v]+"' style='"+u+""+t+"' title='"+this.locale.labels[r[v]]+"'></div>";var x=this._render_v_bar(a.id,l-b+1,k,b,r.length*20+26-2,"","<div style='"+u+""+t+"' class='dhx_menu_head'></div>",s,!0);x.style.left=l-b+1;this._els.dhx_cal_data[0].appendChild(x);this._rendered.push(x)}}}};
-scheduler._render_v_bar=function(a,b,c,d,e,f,g,h,k){var i=document.createElement("DIV"),j=this.getEvent(a),l=k?"dhx_cal_event dhx_cal_select_menu":"dhx_cal_event",n=scheduler.templates.event_class(j.start_date,j.end_date,j);n&&(l=l+" "+n);var m=j.color?"background:"+j.color+";":"",o=j.textColor?"color:"+j.textColor+";":"",p='<div event_id="'+a+'" class="'+l+'" style="position:absolute; top:'+c+"px; left:"+b+"px; width:"+(d-4)+"px; height:"+e+"px;"+(f||"")+'"></div>';i.innerHTML=p;var q=i.cloneNode(!0).firstChild;
-if(k||!scheduler.renderEvent(q,j)){var q=i.firstChild,r='<div class="dhx_event_move dhx_header" style=" width:'+(d-6)+"px;"+m+'" >&nbsp;</div>';r+='<div class="dhx_event_move dhx_title" style="'+m+""+o+'">'+g+"</div>";r+='<div class="dhx_body" style=" width:'+(d-(this._quirks?4:14))+"px; height:"+(e-(this._quirks?20:30)+1)+"px;"+m+""+o+'">'+h+"</div>";var s="dhx_event_resize dhx_footer";k&&(s="dhx_resize_denied "+s);r+='<div class="'+s+'" style=" width:'+(d-8)+"px;"+(k?" margin-top:-1px;":"")+""+
-m+""+o+'" ></div>';q.innerHTML=r}return q};scheduler.renderEvent=function(){return!1};scheduler.locate_holder=function(a){return this._mode=="day"?this._els.dhx_cal_data[0].firstChild:this._els.dhx_cal_data[0].childNodes[a]};scheduler.locate_holder_day=function(a,b){var c=Math.floor((this._correct_shift(a,1)-this._min_date)/864E5);b&&this.date.time_part(a)&&c++;return c};
-scheduler._get_dnd_order=function(a,b,c){if(!this._drag_event)return a;this._drag_event._orig_sorder?a=this._drag_event._orig_sorder:this._drag_event._orig_sorder=a;for(var d=b*a;d+b>c;)a--,d-=b;return a};
-scheduler._get_event_bar_pos=function(a){var b=this._colsS[a._sday],c=this._colsS[a._eday];c==b&&(c=this._colsS[a._eday+1]);var d=this.xy.bar_height,e=a._sorder;if(a.id==this._drag_id)var f=this._colsS.heights[a._sweek+1]-this._colsS.heights[a._sweek]-22,e=scheduler._get_dnd_order(e,d,f);var g=e*d,h=this._colsS.heights[a._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+g;return{x:b,x2:c,y:h}};
-scheduler.render_event_bar=function(a){var b=this._rendered_location,c=this._get_event_bar_pos(a),d=c.y,e=c.x,f=c.x2;if(f){var g=document.createElement("DIV"),h="dhx_cal_event_clear";a._timed||(h="dhx_cal_event_line",a.hasOwnProperty("_first_chunk")&&a._first_chunk&&(h+=" dhx_cal_event_line_start"),a.hasOwnProperty("_last_chunk")&&a._last_chunk&&(h+=" dhx_cal_event_line_end"));var k=scheduler.templates.event_class(a.start_date,a.end_date,a);k&&(h=h+" "+k);var i=a.color?"background:"+a.color+";":"",
-j=a.textColor?"color:"+a.textColor+";":"",l='<div event_id="'+a.id+'" class="'+h+'" style="position:absolute; top:'+d+"px; left:"+e+"px; width:"+(f-e-15)+"px;"+j+""+i+""+(a._text_style||"")+'">',a=scheduler.getEvent(a.id);a._timed&&(l+=scheduler.templates.event_bar_date(a.start_date,a.end_date,a));l+=scheduler.templates.event_bar_text(a.start_date,a.end_date,a)+"</div>";l+="</div>";g.innerHTML=l;this._rendered.push(g.firstChild);b.appendChild(g.firstChild)}};
-scheduler._locate_event=function(a){for(var b=null;a&&!b&&a.getAttribute;)b=a.getAttribute("event_id"),a=a.parentNode;return b};scheduler.edit=function(a){if(this._edit_id!=a)this.editStop(!1,a),this._edit_id=a,this.updateEvent(a)};scheduler.editStop=function(a,b){if(!(b&&this._edit_id==b)){var c=this.getEvent(this._edit_id);if(c){if(a)c.text=this._editor.value;this._editor=this._edit_id=null;this.updateEvent(c.id);this._edit_stop_event(c,a)}}};
-scheduler._edit_stop_event=function(a,b){this._new_event?(b?this.callEvent("onEventAdded",[a.id,a]):a&&this.deleteEvent(a.id,!0),this._new_event=null):b&&this.callEvent("onEventChanged",[a.id,a])};scheduler.getEvents=function(a,b){var c=[],d;for(d in this._events){var e=this._events[d];e&&(!a&&!b||e.start_date<b&&e.end_date>a)&&c.push(e)}return c};scheduler.getRenderedEvent=function(a){if(a){for(var b=scheduler._rendered,c=0;c<b.length;c++){var d=b[c];if(d.getAttribute("event_id")==a)return d}return null}};
-scheduler.showEvent=function(a,b){var c=typeof a=="number"||typeof a=="string"?scheduler.getEvent(a):a,b=b||scheduler._mode;if(c&&(!this.checkEvent("onBeforeEventDisplay")||this.callEvent("onBeforeEventDisplay",[c,b]))){var d=scheduler.config.scroll_hour;scheduler.config.scroll_hour=c.start_date.getHours();var e=scheduler.config.preserve_scroll;scheduler.config.preserve_scroll=!1;var f=c.color,g=c.textColor;if(scheduler.config.highlight_displayed_event)c.color=scheduler.config.displayed_event_color,
-c.textColor=scheduler.config.displayed_event_text_color;scheduler.setCurrentView(new Date(c.start_date),b);c.color=f;c.textColor=g;scheduler.config.scroll_hour=d;scheduler.config.preserve_scroll=e;if(scheduler.matrix&&scheduler.matrix[b])scheduler._els.dhx_cal_data[0].scrollTop=getAbsoluteTop(scheduler.getRenderedEvent(c.id))-getAbsoluteTop(scheduler._els.dhx_cal_data[0])-20;scheduler.callEvent("onAfterEventDisplay",[c,b])}};scheduler._loaded={};
-scheduler._load=function(a,b){if(a=a||this._load_url){a+=(a.indexOf("?")==-1?"?":"&")+"timeshift="+(new Date).getTimezoneOffset();this.config.prevent_cache&&(a+="&uid="+this.uid());var c,b=b||this._date;if(this._load_mode){for(var d=this.templates.load_format,b=this.date[this._load_mode+"_start"](new Date(b.valueOf()));b>this._min_date;)b=this.date.add(b,-1,this._load_mode);c=b;for(var e=!0;c<this._max_date;)c=this.date.add(c,1,this._load_mode),this._loaded[d(b)]&&e?b=this.date.add(b,1,this._load_mode):
-e=!1;var f=c;do c=f,f=this.date.add(c,-1,this._load_mode);while(f>b&&this._loaded[d(f)]);if(c<=b)return!1;for(dhtmlxAjax.get(a+"&from="+d(b)+"&to="+d(c),function(a){scheduler.on_load(a)});b<c;)this._loaded[d(b)]=!0,b=this.date.add(b,1,this._load_mode)}else dhtmlxAjax.get(a,function(a){scheduler.on_load(a)});this.callEvent("onXLS",[]);return!0}};
-scheduler.on_load=function(a){var b;b=this._process&&this._process!="xml"?this[this._process].parse(a.xmlDoc.responseText):this._magic_parser(a);scheduler._process_loading(b);this.callEvent("onXLE",[])};scheduler._process_loading=function(a){this._not_render=this._loading=!0;for(var b=0;b<a.length;b++)this.callEvent("onEventLoading",[a[b]])&&this.addEvent(a[b]);this._not_render=!1;this._render_wait&&this.render_view_data();this._loading=!1;this._after_call&&this._after_call();this._after_call=null};
-scheduler._init_event=function(a){a.text=a.text||a._tagvalue||"";a.start_date=scheduler._init_date(a.start_date);a.end_date=scheduler._init_date(a.end_date)};scheduler._init_date=function(a){return!a?null:typeof a=="string"?scheduler.templates.xml_date(a):new Date(a)};scheduler.json={};
-scheduler.json.parse=function(a){if(typeof a=="string")scheduler._temp=eval("("+a+")"),a=scheduler._temp?scheduler._temp.data||scheduler._temp.d||scheduler._temp:[];if(a.dhx_security)dhtmlx.security_key=a.dhx_security;var b=scheduler._temp&&scheduler._temp.collections?scheduler._temp.collections:{},c=!1,d;for(d in b)if(b.hasOwnProperty(d)){var c=!0,e=b[d],f=scheduler.serverList[d];if(f){f.splice(0,f.length);for(var g=0;g<e.length;g++){var h=e[g],k={key:h.value,label:h.label},i;for(i in h)if(h.hasOwnProperty(i)&&
-!(i=="value"||i=="label"))k[i]=h[i];f.push(k)}}}c&&scheduler.callEvent("onOptionsLoad",[]);for(var j=[],l=0;l<a.length;l++){var n=a[l];scheduler._init_event(n);j.push(n)}return j};scheduler.parse=function(a,b){this._process=b;this.on_load({xmlDoc:{responseText:a}})};scheduler.load=function(a,b,c){if(typeof b=="string")this._process=b,b=c;this._load_url=a;this._after_call=b;this._load(a,this._date)};scheduler.setLoadMode=function(a){a=="all"&&(a="");this._load_mode=a};
-scheduler.serverList=function(a,b){return b?this.serverList[a]=b.slice(0):this.serverList[a]=this.serverList[a]||[]};scheduler._userdata={};
-scheduler._magic_parser=function(a){var b;if(!a.getXMLTopNode){var c=a.xmlDoc.responseText,a=new dtmlXMLLoaderObject(function(){});a.loadXMLString(c)}b=a.getXMLTopNode("data");if(b.tagName!="data")return[];var d=b.getAttribute("dhx_security");if(d)dhtmlx.security_key=d;for(var e=a.doXPath("//coll_options"),f=0;f<e.length;f++){var g=e[f].getAttribute("for"),h=this.serverList[g];if(h){h.splice(0,h.length);for(var k=a.doXPath(".//item",e[f]),i=0;i<k.length;i++){for(var j=k[i],l=j.attributes,n={key:k[i].getAttribute("value"),
-label:k[i].getAttribute("label")},m=0;m<l.length;m++){var o=l[m];if(!(o.nodeName=="value"||o.nodeName=="label"))n[o.nodeName]=o.nodeValue}h.push(n)}}}e.length&&scheduler.callEvent("onOptionsLoad",[]);for(var p=a.doXPath("//userdata"),f=0;f<p.length;f++){var q=this._xmlNodeToJSON(p[f]);this._userdata[q.name]=q.text}var r=[];b=a.doXPath("//event");for(f=0;f<b.length;f++){var s=r[f]=this._xmlNodeToJSON(b[f]);scheduler._init_event(s)}return r};
-scheduler._xmlNodeToJSON=function(a){for(var b={},c=0;c<a.attributes.length;c++)b[a.attributes[c].name]=a.attributes[c].value;for(c=0;c<a.childNodes.length;c++){var d=a.childNodes[c];d.nodeType==1&&(b[d.tagName]=d.firstChild?d.firstChild.nodeValue:"")}if(!b.text)b.text=a.firstChild?a.firstChild.nodeValue:"";return b};
-scheduler.attachEvent("onXLS",function(){if(this.config.show_loading===!0){var a;a=this.config.show_loading=document.createElement("DIV");a.className="dhx_loading";a.style.left=Math.round((this._x-128)/2)+"px";a.style.top=Math.round((this._y-15)/2)+"px";this._obj.appendChild(a)}});scheduler.attachEvent("onXLE",function(){var a=this.config.show_loading;if(a&&typeof a=="object")this._obj.removeChild(a),this.config.show_loading=!0});
-scheduler.ical={parse:function(a){var b=a.match(RegExp(this.c_start+"[^\u000c]*"+this.c_end,""));if(b.length){b[0]=b[0].replace(/[\r\n]+(?=[a-z \t])/g," ");b[0]=b[0].replace(/\;[^:\r\n]*:/g,":");for(var c=[],d,e=RegExp("(?:"+this.e_start+")([^\u000c]*?)(?:"+this.e_end+")","g");d=e.exec(b);){for(var f={},g,h=/[^\r\n]+[\r\n]+/g;g=h.exec(d[1]);)this.parse_param(g.toString(),f);if(f.uid&&!f.id)f.id=f.uid;c.push(f)}return c}},parse_param:function(a,b){var c=a.indexOf(":");if(c!=-1){var d=a.substr(0,c).toLowerCase(),
-e=a.substr(c+1).replace(/\\\,/g,",").replace(/[\r\n]+$/,"");d=="summary"?d="text":d=="dtstart"?(d="start_date",e=this.parse_date(e,0,0)):d=="dtend"&&(d="end_date",e=this.parse_date(e,0,0));b[d]=e}},parse_date:function(a,b,c){var d=a.split("T");d[1]&&(b=d[1].substr(0,2),c=d[1].substr(2,2));var e=d[0].substr(0,4),f=parseInt(d[0].substr(4,2),10)-1,g=d[0].substr(6,2);return scheduler.config.server_utc&&!d[1]?new Date(Date.UTC(e,f,g,b,c)):new Date(e,f,g,b,c)},c_start:"BEGIN:VCALENDAR",e_start:"BEGIN:VEVENT",
-e_end:"END:VEVENT",c_end:"END:VCALENDAR"};scheduler._lightbox_controls={};
-scheduler.formSection=function(a){for(var b=this.config.lightbox.sections,c=0;c<b.length;c++)if(b[c].name==a)break;var d=b[c];scheduler._lightbox||scheduler.getLightbox();var e=document.getElementById(d.id),f=e.nextSibling,g={section:d,header:e,node:f,getValue:function(a){return scheduler.form_blocks[d.type].get_value(f,a||{},d)},setValue:function(a,b){return scheduler.form_blocks[d.type].set_value(f,a,b||{},d)}},h=scheduler._lightbox_controls["get_"+d.type+"_control"];return h?h(g):g};
-scheduler._lightbox_controls.get_template_control=function(a){a.control=a.node;return a};scheduler._lightbox_controls.get_select_control=function(a){a.control=a.node.getElementsByTagName("select")[0];return a};scheduler._lightbox_controls.get_textarea_control=function(a){a.control=a.node.getElementsByTagName("textarea")[0];return a};scheduler._lightbox_controls.get_time_control=function(a){a.control=a.node.getElementsByTagName("select");return a};
-scheduler.form_blocks={template:{render:function(a){var b=(a.height||"30")+"px";return"<div class='dhx_cal_ltext dhx_cal_template' style='height:"+b+";'></div>"},set_value:function(a,b){a.innerHTML=b||""},get_value:function(a){return a.innerHTML||""},focus:function(){}},textarea:{render:function(a){var b=(a.height||"130")+"px";return"<div class='dhx_cal_ltext' style='height:"+b+";'><textarea></textarea></div>"},set_value:function(a,b){a.firstChild.value=b||""},get_value:function(a){return a.firstChild.value},
-focus:function(a){var b=a.firstChild;scheduler._focus(b,!0)}},select:{render:function(a){for(var b=(a.height||"23")+"px",c="<div class='dhx_cal_ltext' style='height:"+b+";'><select style='width:100%;'>",d=0;d<a.options.length;d++)c+="<option value='"+a.options[d].key+"'>"+a.options[d].label+"</option>";c+="</select></div>";return c},set_value:function(a,b,c,d){var e=a.firstChild;if(!e._dhx_onchange&&d.onchange)e.onchange=d.onchange,e._dhx_onchange=!0;if(typeof b=="undefined")b=(e.options[0]||{}).value;
-e.value=b||""},get_value:function(a){return a.firstChild.value},focus:function(a){var b=a.firstChild;scheduler._focus(b,!0)}},time:{render:function(a){if(!a.time_format)a.time_format=["%H:%i","%d","%m","%Y"];a._time_format_order={};var b=a.time_format,c=scheduler.config,d=this.date.date_part(scheduler._currentDate()),e=1440,f=0;scheduler.config.limit_time_select&&(e=60*c.last_hour+1,f=60*c.first_hour,d.setHours(c.first_hour));for(var g="",h=0;h<b.length;h++){var k=b[h];h>0&&(g+=" ");switch(k){case "%Y":a._time_format_order[3]=
-h;g+="<select>";for(var i=d.getFullYear()-5,j=0;j<10;j++)g+="<option value='"+(i+j)+"'>"+(i+j)+"</option>";g+="</select> ";break;case "%m":a._time_format_order[2]=h;g+="<select>";for(j=0;j<12;j++)g+="<option value='"+j+"'>"+this.locale.date.month_full[j]+"</option>";g+="</select>";break;case "%d":a._time_format_order[1]=h;g+="<select>";for(j=1;j<32;j++)g+="<option value='"+j+"'>"+j+"</option>";g+="</select>";break;case "%H:%i":a._time_format_order[0]=h;g+="<select>";var j=f,l=d.getDate();for(a._time_values=
-[];j<e;){var n=this.templates.time_picker(d);g+="<option value='"+j+"'>"+n+"</option>";a._time_values.push(j);d.setTime(d.valueOf()+this.config.time_step*6E4);var m=d.getDate()!=l?1:0,j=m*1440+d.getHours()*60+d.getMinutes()}g+="</select>"}}return"<div style='height:30px;padding-top:0px;font-size:inherit;' class='dhx_section_time'>"+g+"<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>"+g+"</div>"},set_value:function(a,b,c,d){function e(a,b,c){for(var e=d._time_values,f=
-c.getHours()*60+c.getMinutes(),g=f,i=!1,j=0;j<e.length;j++){var k=e[j];if(k===f){i=!0;break}k<f&&(g=k)}a[b+h[0]].value=i?f:g;if(!i&&!g)a[b+h[0]].selectedIndex=-1;a[b+h[1]].value=c.getDate();a[b+h[2]].value=c.getMonth();a[b+h[3]].value=c.getFullYear()}var f=scheduler.config,g=a.getElementsByTagName("select"),h=d._time_format_order;if(f.full_day){if(!a._full_day){var k="<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> "+scheduler.locale.labels.full_day+"&nbsp;</label></input>";
-scheduler.config.wide_form||(k=a.previousSibling.innerHTML+k);a.previousSibling.innerHTML=k;a._full_day=!0}var i=a.previousSibling.getElementsByTagName("input")[0];i.checked=scheduler.date.time_part(c.start_date)===0&&scheduler.date.time_part(c.end_date)===0;g[h[0]].disabled=i.checked;g[h[0]+g.length/2].disabled=i.checked;i.onclick=function(){if(i.checked){var b={};scheduler.form_blocks.time.get_value(a,b,d);var f=scheduler.date.date_part(b.start_date),j=scheduler.date.date_part(b.end_date);if(+j==
-+f||+j>=+f&&(c.end_date.getHours()!=0||c.end_date.getMinutes()!=0))j=scheduler.date.add(j,1,"day")}g[h[0]].disabled=i.checked;g[h[0]+g.length/2].disabled=i.checked;e(g,0,f||c.start_date);e(g,4,j||c.end_date)}}if(f.auto_end_date&&f.event_duration)for(var j=function(){var a=new Date(g[h[3]].value,g[h[2]].value,g[h[1]].value,0,g[h[0]].value),b=new Date(a.getTime()+scheduler.config.event_duration*6E4);e(g,4,b)},l=0;l<4;l++)g[l].onchange=j;e(g,0,c.start_date);e(g,4,c.end_date)},get_value:function(a,b,
-c){s=a.getElementsByTagName("select");var d=c._time_format_order;b.start_date=new Date(s[d[3]].value,s[d[2]].value,s[d[1]].value,0,s[d[0]].value);b.end_date=new Date(s[d[3]+4].value,s[d[2]+4].value,s[d[1]+4].value,0,s[d[0]+4].value);if(b.end_date<=b.start_date)b.end_date=scheduler.date.add(b.start_date,scheduler.config.time_step,"minute");return{start_date:new Date(b.start_date),end_date:new Date(b.end_date)}},focus:function(a){scheduler._focus(a.getElementsByTagName("select")[0])}}};
-scheduler.showCover=function(a){if(a){a.style.display="block";var b=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop,c=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft,d=window.innerHeight||document.documentElement.clientHeight;a.style.top=b?Math.round(b+Math.max((d-a.offsetHeight)/2,0))+"px":Math.round(Math.max((d-a.offsetHeight)/2,0)+9)+"px";a.style.left=document.documentElement.scrollWidth>document.body.offsetWidth?Math.round(c+(document.body.offsetWidth-
-a.offsetWidth)/2)+"px":Math.round((document.body.offsetWidth-a.offsetWidth)/2)+"px"}this.show_cover()};scheduler.showLightbox=function(a){if(a)if(this.callEvent("onBeforeLightbox",[a])){var b=this.getLightbox();this.showCover(b);this._fill_lightbox(a,b);this.callEvent("onLightbox",[a])}else if(this._new_event)this._new_event=null};
-scheduler._fill_lightbox=function(a,b){var c=this.getEvent(a),d=b.getElementsByTagName("span");scheduler.templates.lightbox_header?(d[1].innerHTML="",d[2].innerHTML=scheduler.templates.lightbox_header(c.start_date,c.end_date,c)):(d[1].innerHTML=this.templates.event_header(c.start_date,c.end_date,c),d[2].innerHTML=(this.templates.event_bar_text(c.start_date,c.end_date,c)||"").substr(0,70));for(var e=this.config.lightbox.sections,f=0;f<e.length;f++){var g=e[f],h=document.getElementById(g.id).nextSibling,
-k=this.form_blocks[g.type],i=c[g.map_to]!==void 0?c[g.map_to]:g.default_value;k.set_value.call(this,h,i,c,g);e[f].focus&&k.focus.call(this,h)}scheduler._lightbox_id=a};scheduler._lightbox_out=function(a){for(var b=this.config.lightbox.sections,c=0;c<b.length;c++){var d=document.getElementById(b[c].id),d=d?d.nextSibling:d,e=this.form_blocks[b[c].type],f=e.get_value.call(this,d,a,b[c]);b[c].map_to!="auto"&&(a[b[c].map_to]=f)}return a};
-scheduler._empty_lightbox=function(a){var b=scheduler._lightbox_id,c=this.getEvent(b),d=this.getLightbox();this._lame_copy(c,a);this.setEvent(c.id,c);this._edit_stop_event(c,!0);this.render_view_data()};scheduler.hide_lightbox=function(){this.hideCover(this.getLightbox());this._lightbox_id=null;this.callEvent("onAfterLightbox",[])};scheduler.hideCover=function(a){if(a)a.style.display="none";this.hide_cover()};
-scheduler.hide_cover=function(){this._cover&&this._cover.parentNode.removeChild(this._cover);this._cover=null};scheduler.show_cover=function(){this._cover=document.createElement("DIV");this._cover.className="dhx_cal_cover";var a=document.height!==void 0?document.height:document.body.offsetHeight,b=document.documentElement?document.documentElement.scrollHeight:0;this._cover.style.height=Math.max(a,b)+"px";document.body.appendChild(this._cover)};
-scheduler.save_lightbox=function(){var a=this._lightbox_out({},this._lame_copy(this.getEvent(this._lightbox_id)));if(!this.checkEvent("onEventSave")||this.callEvent("onEventSave",[this._lightbox_id,a,this._new_event]))this._empty_lightbox(a),this.hide_lightbox()};scheduler.startLightbox=function(a,b){this._lightbox_id=a;this._custom_lightbox=!0;this._temp_lightbox=this._lightbox;this._lightbox=b;this.showCover(b)};
-scheduler.endLightbox=function(a,b){this._edit_stop_event(scheduler.getEvent(this._lightbox_id),a);a&&scheduler.render_view_data();this.hideCover(b);if(this._custom_lightbox)this._lightbox=this._temp_lightbox,this._custom_lightbox=!1;this._temp_lightbox=this._lightbox_id=null};scheduler.resetLightbox=function(){scheduler._lightbox&&!scheduler._custom_lightbox&&scheduler._lightbox.parentNode.removeChild(scheduler._lightbox);scheduler._lightbox=null};
-scheduler.cancel_lightbox=function(){this.callEvent("onEventCancel",[this._lightbox_id,this._new_event]);this.endLightbox(!1);this.hide_lightbox()};
-scheduler._init_lightbox_events=function(){this.getLightbox().onclick=function(a){var b=a?a.target:event.srcElement;if(!b.className)b=b.previousSibling;if(b&&b.className)switch(b.className){case "dhx_save_btn":scheduler.save_lightbox();break;case "dhx_delete_btn":var c=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(c,scheduler.locale.labels.title_confirm_deleting,function(){scheduler.deleteEvent(scheduler._lightbox_id);scheduler._new_event=null;scheduler.hide_lightbox()});break;
-case "dhx_cancel_btn":scheduler.cancel_lightbox();break;default:if(b.getAttribute("dhx_button"))scheduler.callEvent("onLightboxButton",[b.className,b,a]);else{var d,e,f;if(b.className.indexOf("dhx_custom_button")!=-1)b.className.indexOf("dhx_custom_button_")!=-1?(d=b.parentNode.getAttribute("index"),f=b.parentNode.parentNode):(d=b.getAttribute("index"),f=b.parentNode,b=b.firstChild);d&&(e=scheduler.form_blocks[scheduler.config.lightbox.sections[d].type],e.button_click(d,b,f,f.nextSibling))}}};this.getLightbox().onkeydown=
-function(a){switch((a||event).keyCode){case scheduler.keys.edit_save:if((a||event).shiftKey)break;scheduler.save_lightbox();break;case scheduler.keys.edit_cancel:scheduler.cancel_lightbox()}}};scheduler.setLightboxSize=function(){var a=this._lightbox;if(a){var b=a.childNodes[1];b.style.height="0px";b.style.height=b.scrollHeight+"px";a.style.height=b.scrollHeight+scheduler.xy.lightbox_additional_height+"px";b.style.height=b.scrollHeight+"px"}};
-scheduler._init_dnd_events=function(){dhtmlxEvent(document.body,"mousemove",scheduler._move_while_dnd);dhtmlxEvent(document.body,"mouseup",scheduler._finish_dnd);scheduler._init_dnd_events=function(){}};
-scheduler._move_while_dnd=function(a){if(scheduler._dnd_start_lb){if(!document.dhx_unselectable)document.body.className+=" dhx_unselectable",document.dhx_unselectable=!0;var b=scheduler.getLightbox(),c=a&&a.target?[a.pageX,a.pageY]:[event.clientX,event.clientY];b.style.top=scheduler._lb_start[1]+c[1]-scheduler._dnd_start_lb[1]+"px";b.style.left=scheduler._lb_start[0]+c[0]-scheduler._dnd_start_lb[0]+"px"}};
-scheduler._ready_to_dnd=function(a){var b=scheduler.getLightbox();scheduler._lb_start=[parseInt(b.style.left,10),parseInt(b.style.top,10)];scheduler._dnd_start_lb=a&&a.target?[a.pageX,a.pageY]:[event.clientX,event.clientY]};scheduler._finish_dnd=function(){if(scheduler._lb_start)scheduler._lb_start=scheduler._dnd_start_lb=!1,document.body.className=document.body.className.replace(" dhx_unselectable",""),document.dhx_unselectable=!1};
-scheduler.getLightbox=function(){if(!this._lightbox){var a=document.createElement("DIV");a.className="dhx_cal_light";scheduler.config.wide_form&&(a.className+=" dhx_cal_light_wide");scheduler.form_blocks.recurring&&(a.className+=" dhx_cal_light_rec");/msie|MSIE 6/.test(navigator.userAgent)&&(a.className+=" dhx_ie6");a.style.visibility="hidden";for(var b=this._lightbox_template,c=this.config.buttons_left,d=0;d<c.length;d++)b+="<div class='dhx_btn_set dhx_left_btn_set "+c[d]+"_set'><div dhx_button='1' class='"+
-c[d]+"'></div><div>"+scheduler.locale.labels[c[d]]+"</div></div>";c=this.config.buttons_right;for(d=0;d<c.length;d++)b+="<div class='dhx_btn_set dhx_right_btn_set "+c[d]+"_set' style='float:right;'><div dhx_button='1' class='"+c[d]+"'></div><div>"+scheduler.locale.labels[c[d]]+"</div></div>";b+="</div>";a.innerHTML=b;if(scheduler.config.drag_lightbox)a.firstChild.onmousedown=scheduler._ready_to_dnd,a.firstChild.onselectstart=function(){return!1},a.firstChild.style.cursor="pointer",scheduler._init_dnd_events();
-document.body.insertBefore(a,document.body.firstChild);this._lightbox=a;for(var e=this.config.lightbox.sections,b="",d=0;d<e.length;d++){var f=this.form_blocks[e[d].type];if(f){e[d].id="area_"+this.uid();var g="";e[d].button&&(g="<div class='dhx_custom_button' index='"+d+"'><div class='dhx_custom_button_"+e[d].button+"'></div><div>"+this.locale.labels["button_"+e[d].button]+"</div></div>");this.config.wide_form&&(b+="<div class='dhx_wrap_section'>");b+="<div id='"+e[d].id+"' class='dhx_cal_lsection'>"+
-g+this.locale.labels["section_"+e[d].name]+"</div>"+f.render.call(this,e[d]);b+="</div>"}}for(var h=a.getElementsByTagName("div"),d=0;d<h.length;d++){var k=h[d];if(k.className=="dhx_cal_larea"){k.innerHTML=b;break}}this.setLightboxSize();this._init_lightbox_events(this);a.style.display="none";a.style.visibility="visible"}return this._lightbox};scheduler._lightbox_template="<div class='dhx_cal_ltitle'><span class='dhx_mark'>&nbsp;</span><span class='dhx_time'></span><span class='dhx_title'></span></div><div class='dhx_cal_larea'></div>";
-scheduler._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)this.xy.scroll_width=0,window.navigator.msPointerEnabled?this._touch_events(["MSPointerMove","MSPointerDown","MSPointerUp"],function(a){return a.pointerType==a.MSPOINTER_TYPE_MOUSE?null:a},function(a){return!a||
-a.pointerType==a.MSPOINTER_TYPE_MOUSE}):this._touch_events(["touchmove","touchstart","touchend"],function(a){return a.touches&&a.touches.length>1?null:a.touches[0]?{target:a.target,pageX:a.touches[0].pageX,pageY:a.touches[0].pageY}:a},function(){return!1})};
-scheduler._touch_events=function(a,b,c){function d(a,b,c){if(a&&b){var d=Math.abs(a.pageY-b.pageY),e=Math.abs(a.pageX-b.pageX);if(e>c&&(!d||e/d>3))a.pageX>b.pageX?scheduler._click.dhx_cal_next_button():scheduler._click.dhx_cal_prev_button()}}function e(a){scheduler._hide_global_tip();if(i)scheduler._on_mouse_up(b(a||event)),scheduler._temp_touch_block=!1;scheduler._drag_id=null;scheduler._drag_mode=null;scheduler._drag_pos=null;clearTimeout(k);i=l=!1;j=!0}var f=navigator.userAgent.indexOf("Android")!=
--1&&navigator.userAgent.indexOf("WebKit")!=-1,g,h,k,i,j,l,n=0;dhtmlxEvent(document.body,a[0],function(a){if(!c(a)){if(i)return scheduler._on_mouse_move(b(a)),scheduler._update_global_tip(),a.preventDefault&&a.preventDefault(),a.cancelBubble=!0,!1;h&&f&&d(h,b(a),0);h=b(a);if(l)if(h){if(g.target!=h.target||Math.abs(g.pageX-h.pageX)>5||Math.abs(g.pageY-h.pageY)>5)j=!0,clearTimeout(k)}else j=!0}});dhtmlxEvent(this._els.dhx_cal_data[0],"scroll",e);dhtmlxEvent(this._els.dhx_cal_data[0],"touchcancel",e);
-dhtmlxEvent(this._els.dhx_cal_data[0],"contextmenu",function(a){if(l)return a&&a.preventDefault&&a.preventDefault(),(a||event).cancelBubble=!0,!1});dhtmlxEvent(this._els.dhx_cal_data[0],a[1],function(a){if(!c(a)){i=j=h=!1;l=!0;scheduler._temp_touch_block=!0;var d=h=b(a);if(d){var e=new Date;if(!j&&!i&&e-n<250)return scheduler._click.dhx_cal_data(d),window.setTimeout(function(){scheduler._on_dbl_click(d)},50),a.preventDefault&&a.preventDefault(),a.cancelBubble=!0,scheduler._block_next_stop=!0,!1;n=
-e;!j&&!i&&scheduler.config.touch_drag&&(k=setTimeout(function(){i=!0;var a=g.target;if(a&&a.className&&a.className.indexOf("dhx_body")!=-1)a=a.previousSibling;scheduler._on_mouse_down(g,a);if(scheduler._drag_mode&&scheduler._drag_mode!="create"){var b=-1;scheduler.for_rendered(scheduler._drag_id,function(a,c){b=a.getBoundingClientRect().top;a.style.display="none";scheduler._rendered.splice(c,1)});if(b>=0){var c=scheduler.config.time_step;scheduler._move_pos_shift=c*Math.round((d.pageY-b)*60/(scheduler.config.hour_size_px*
-c))}}scheduler.config.touch_tip&&scheduler._show_global_tip();scheduler._on_mouse_move(g)},scheduler.config.touch_drag),g=d)}else j=!0}});dhtmlxEvent(this._els.dhx_cal_data[0],a[2],function(a){if(!c(a)){i||d(g,h,200);if(i)scheduler._ignore_next_click=!0;e(a);if(scheduler._block_next_stop)return scheduler._block_next_stop=!1,a.preventDefault&&a.preventDefault(),a.cancelBubble=!0,!1}});dhtmlxEvent(document.body,a[2],e)};
-scheduler._show_global_tip=function(){scheduler._hide_global_tip();var a=scheduler._global_tip=document.createElement("DIV");a.className="dhx_global_tip";scheduler._update_global_tip(1);document.body.appendChild(a)};
-scheduler._update_global_tip=function(a){var b=scheduler._global_tip;if(b){var c="";if(scheduler._drag_id&&!a){var d=scheduler.getEvent(scheduler._drag_id);d&&(c="<div>"+(d._timed?scheduler.templates.event_header(d.start_date,d.end_date,d):scheduler.templates.day_date(d.start_date,d.end_date,d))+"</div>")}b.innerHTML=scheduler._drag_mode=="create"||scheduler._drag_mode=="new-size"?(scheduler.locale.drag_to_create||"Drag to create")+c:(scheduler.locale.drag_to_move||"Drag to move")+c}};
-scheduler._hide_global_tip=function(){var a=scheduler._global_tip;if(a&&a.parentNode)a.parentNode.removeChild(a),scheduler._global_tip=0};
-scheduler._dp_init=function(a){a._methods=["_set_event_text_style","","changeEventId","deleteEvent"];this.attachEvent("onEventAdded",function(b){!this._loading&&this._validId(b)&&a.setUpdated(b,!0,"inserted")});this.attachEvent("onConfirmedBeforeEventDelete",function(b){if(this._validId(b)){var c=a.getState(b);if(c=="inserted"||this._new_event)return a.setUpdated(b,!1),!0;if(c=="deleted")return!1;if(c=="true_deleted")return!0;a.setUpdated(b,!0,"deleted");return!1}});this.attachEvent("onEventChanged",
-function(b){!this._loading&&this._validId(b)&&a.setUpdated(b,!0,"updated")});a._getRowData=function(a){var c=this.obj.getEvent(a),d={},e;for(e in c)e.indexOf("_")!=0&&(d[e]=c[e]&&c[e].getUTCFullYear?this.obj.templates.xml_format(c[e]):c[e]);return d};a._clearUpdateFlag=function(){};a.attachEvent("insertCallback",scheduler._update_callback);a.attachEvent("updateCallback",scheduler._update_callback);a.attachEvent("deleteCallback",function(a,c){this.obj.setUserData(c,this.action_param,"true_deleted");
-this.obj.deleteEvent(c)})};scheduler._validId=function(){return!0};scheduler.setUserData=function(a,b,c){a?this.getEvent(a)[b]=c:this._userdata[b]=c};scheduler.getUserData=function(a,b){return a?this.getEvent(a)[b]:this._userdata[b]};scheduler._set_event_text_style=function(a,b){this.for_rendered(a,function(a){a.style.cssText+=";"+b});var c=this.getEvent(a);c._text_style=b;this.event_updated(c)};
-scheduler._update_callback=function(a){var b=scheduler._xmlNodeToJSON(a.firstChild);b.text=b.text||b._tagvalue;b.start_date=scheduler.templates.xml_date(b.start_date);b.end_date=scheduler.templates.xml_date(b.end_date);scheduler.addEvent(b)};scheduler._skin_settings={fix_tab_position:[1,0],use_select_menu_space:[1,0],wide_form:[1,0],hour_size_px:[44,42],displayed_event_color:["#ff4a4a","ffc5ab"],displayed_event_text_color:["#ffef80","7e2727"]};
-scheduler._skin_xy={lightbox_additional_height:[90,50],nav_height:[59,22],bar_height:[24,20]};scheduler._configure=function(a,b,c){for(var d in b)typeof a[d]=="undefined"&&(a[d]=b[d][c])};
-scheduler._skin_init=function(){if(!scheduler.skin)for(var a=document.getElementsByTagName("link"),b=0;b<a.length;b++){var c=a[b].href.match("dhtmlxscheduler_([a-z]+).css");if(c){scheduler.skin=c[1];break}}var d=0;scheduler.skin&&scheduler.skin!="terrace"&&(d=1);this._configure(scheduler.config,scheduler._skin_settings,d);this._configure(scheduler.xy,scheduler._skin_xy,d);if(!d){var e=scheduler.config.minicalendar;if(e)e.padding=14;scheduler.templates.event_bar_date=function(a){return"\u2022 <b>"+
-scheduler.templates.event_date(a)+"</b> "};scheduler.attachEvent("onTemplatesReady",function(){var a=scheduler.date.date_to_str("%d"),b=scheduler.templates.month_day;scheduler.templates.month_day=function(c){if(this._mode=="month"){var d=a(c);c.getDate()==1&&(d=scheduler.locale.date.month_full[c.getMonth()]+" "+d);+c==+scheduler.date.date_part(new Date)&&(d=scheduler.locale.labels.dhx_cal_today_button+" "+d);return d}else return b.call(this,c)};if(scheduler.config.fix_tab_position)for(var c=scheduler._els.dhx_cal_navline[0].getElementsByTagName("div"),
-d=[],e=211,j=0;j<c.length;j++){var l=c[j],n=l.getAttribute("name");if(n)switch(l.style.right="auto",n){case "day_tab":l.style.left="14px";l.className+=" dhx_cal_tab_first";break;case "week_tab":l.style.left="75px";break;case "month_tab":l.style.left="136px";l.className+=" dhx_cal_tab_last";break;default:l.style.left=e+"px",l.className+=" dhx_cal_tab_standalone",e=e+14+l.offsetWidth}}});scheduler._skin_init=function(){}}};
-window.jQuery&&function(a){var b=[];a.fn.dhx_scheduler=function(c){if(typeof c==="string")if(b[c])return b[c].apply(this,[]);else a.error("Method "+c+" does not exist on jQuery.dhx_scheduler");else{var d=[];this.each(function(){if(this&&this.getAttribute&&!this.getAttribute("dhxscheduler")){for(var a in c)a!="data"&&(scheduler.config[a]=c[a]);if(!this.getElementsByTagName("div").length)this.innerHTML='<div class="dhx_cal_navline"><div class="dhx_cal_prev_button">&nbsp;</div><div class="dhx_cal_next_button">&nbsp;</div><div class="dhx_cal_today_button"></div><div class="dhx_cal_date"></div><div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div><div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div><div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div></div><div class="dhx_cal_header"></div><div class="dhx_cal_data"></div>',
-this.className+=" dhx_cal_container";scheduler.init(this,scheduler.config.date,scheduler.config.mode);c.data&&scheduler.parse(c.data);d.push(scheduler)}});return d.length===1?d[0]:d}}}(jQuery);
+function dtmlXMLLoaderObject(e,t,s,i){return this.xmlDoc="",this.async="undefined"!=typeof s?s:!0,this.onloadAction=e||null,this.mainObject=t||null,this.waitCall=null,this.rSeed=i||!1,this}function callerFunction(e,t){return this.handler=function(s){return s||(s=window.event),e(s,t),!0},this.handler}function getAbsoluteLeft(e){return getOffset(e).left}function getAbsoluteTop(e){return getOffset(e).top}function getOffsetSum(e){for(var t=0,s=0;e;)t+=parseInt(e.offsetTop),s+=parseInt(e.offsetLeft),e=e.offsetParent;
+return{top:t,left:s}}function getOffsetRect(e){var t=e.getBoundingClientRect(),s=document.body,i=document.documentElement,n=window.pageYOffset||i.scrollTop||s.scrollTop,a=window.pageXOffset||i.scrollLeft||s.scrollLeft,r=i.clientTop||s.clientTop||0,d=i.clientLeft||s.clientLeft||0,o=t.top+n-r,l=t.left+a-d;return{top:Math.round(o),left:Math.round(l)}}function getOffset(e){return e.getBoundingClientRect?getOffsetRect(e):getOffsetSum(e)}function convertStringToBoolean(e){switch("string"==typeof e&&(e=e.toLowerCase()),e){case"1":case"true":case"yes":case"y":case 1:case!0:return!0;
+default:return!1}}function getUrlSymbol(e){return-1!=e.indexOf("?")?"&":"?"}function dhtmlDragAndDropObject(){return window.dhtmlDragAndDrop?window.dhtmlDragAndDrop:(this.lastLanding=0,this.dragNode=0,this.dragStartNode=0,this.dragStartObject=0,this.tempDOMU=null,this.tempDOMM=null,this.waitDrag=0,window.dhtmlDragAndDrop=this,this)}function _dhtmlxError(){return this.catches||(this.catches=[]),this}function dhtmlXHeir(e,t){for(var s in t)"function"==typeof t[s]&&(e[s]=t[s]);return e}function dhtmlxEvent(e,t,s){e.addEventListener?e.addEventListener(t,s,!1):e.attachEvent&&e.attachEvent("on"+t,s)
+}function dataProcessor(e){return this.serverProcessor=e,this.action_param="!nativeeditor_status",this.object=null,this.updatedRows=[],this.autoUpdate=!0,this.updateMode="cell",this._tMode="GET",this.post_delim="_",this._waitMode=0,this._in_progress={},this._invalid={},this.mandatoryFields=[],this.messages=[],this.styles={updated:"font-weight:bold;",inserted:"font-weight:bold;",deleted:"text-decoration : line-through;",invalid:"background-color:FFE0E0;",invalid_cell:"border-bottom:2px solid red;",error:"color:red;",clear:"font-weight:normal;text-decoration:none;"},this.enableUTFencoding(!0),dhtmlxEventable(this),this
+}window.dhtmlXScheduler=window.scheduler={version:"4.1.0"},window.dhtmlx||(dhtmlx=function(e){for(var t in e)dhtmlx[t]=e[t];return dhtmlx}),dhtmlx.extend_api=function(e,t,s){var i=window[e];i&&(window[e]=function(e){var s;if(e&&"object"==typeof e&&!e.tagName){s=i.apply(this,t._init?t._init(e):arguments);for(var n in dhtmlx)t[n]&&this[t[n]](dhtmlx[n]);for(var n in e)t[n]?this[t[n]](e[n]):0===n.indexOf("on")&&this.attachEvent(n,e[n])}else s=i.apply(this,arguments);return t._patch&&t._patch(this),s||this
+},window[e].prototype=i.prototype,s&&dhtmlXHeir(window[e].prototype,s))},dhtmlxAjax={get:function(e,t){var s=new dtmlXMLLoaderObject(!0);return s.async=arguments.length<3,s.waitCall=t,s.loadXML(e),s},post:function(e,t,s){var i=new dtmlXMLLoaderObject(!0);return i.async=arguments.length<4,i.waitCall=s,i.loadXML(e,!0,t),i},getSync:function(e){return this.get(e,null,!0)},postSync:function(e,t){return this.post(e,t,null,!0)}},dtmlXMLLoaderObject.count=0,dtmlXMLLoaderObject.prototype.waitLoadFunction=function(e){var t=!0;
+return this.check=function(){if(e&&e.onloadAction&&(!e.xmlDoc.readyState||4==e.xmlDoc.readyState)){if(!t)return;t=!1,dtmlXMLLoaderObject.count++,"function"==typeof e.onloadAction&&e.onloadAction(e.mainObject,null,null,null,e),e.waitCall&&(e.waitCall.call(this,e),e.waitCall=null)}},this.check},dtmlXMLLoaderObject.prototype.getXMLTopNode=function(e,t){var s;if(this.xmlDoc.responseXML){var i=this.xmlDoc.responseXML.getElementsByTagName(e);if(0===i.length&&-1!=e.indexOf(":"))var i=this.xmlDoc.responseXML.getElementsByTagName(e.split(":")[1]);
+s=i[0]}else s=this.xmlDoc.documentElement;if(s)return this._retry=!1,s;if(!this._retry&&_isIE){this._retry=!0;var t=this.xmlDoc;return this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""),!0),this.getXMLTopNode(e,t)}return dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),document.createElement("DIV")},dtmlXMLLoaderObject.prototype.loadXMLString=function(e,t){if(_isIE)this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.onreadystatechange=function(){},this.xmlDoc.loadXML(e);
+else{var s=new DOMParser;this.xmlDoc=s.parseFromString(e,"text/xml")}t||(this.onloadAction&&this.onloadAction(this.mainObject,null,null,null,this),this.waitCall&&(this.waitCall(),this.waitCall=null))},dtmlXMLLoaderObject.prototype.loadXML=function(e,t,s,i){this.rSeed&&(e+=(-1!=e.indexOf("?")?"&":"?")+"a_dhx_rSeed="+(new Date).valueOf()),this.filePath=e,this.xmlDoc=!_isIE&&window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),this.async&&(this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this)),this.xmlDoc.open(t?"POST":"GET",e,this.async),i?(this.xmlDoc.setRequestHeader("User-Agent","dhtmlxRPC v0.1 ("+navigator.userAgent+")"),this.xmlDoc.setRequestHeader("Content-type","text/xml")):t&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded"),this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"),this.xmlDoc.send(null||s),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(e){for(var t={},s=0;s<e.attributes.length;s++)t[e.attributes[s].name]=e.attributes[s].value;
+t._tagvalue=e.firstChild?e.firstChild.nodeValue:"";for(var s=0;s<e.childNodes.length;s++){var i=e.childNodes[s].tagName;i&&(t[i]||(t[i]=[]),t[i].push(this.xmlNodeToJSON(e.childNodes[s])))}return t},dhtmlDragAndDropObject.prototype.removeDraggableItem=function(e){e.onmousedown=null,e.dragStarter=null,e.dragLanding=null},dhtmlDragAndDropObject.prototype.addDraggableItem=function(e,t){e.onmousedown=this.preCreateDragCopy,e.dragStarter=t,this.addDragLanding(e,t)},dhtmlDragAndDropObject.prototype.addDragLanding=function(e,t){e.dragLanding=t
+},dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e){return!e&&!window.event||2!=(e||event).button?window.dhtmlDragAndDrop.waitDrag?(window.dhtmlDragAndDrop.waitDrag=0,document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU,document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM,!1):(window.dhtmlDragAndDrop.dragNode&&window.dhtmlDragAndDrop.stopDrag(e),window.dhtmlDragAndDrop.waitDrag=1,window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup,window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove,window.dhtmlDragAndDrop.dragStartNode=this,window.dhtmlDragAndDrop.dragStartObject=this.dragStarter,document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy,document.body.onmousemove=window.dhtmlDragAndDrop.callDrag,window.dhtmlDragAndDrop.downtime=(new Date).valueOf(),e&&e.preventDefault?(e.preventDefault(),!1):!1):void 0
+},dhtmlDragAndDropObject.prototype.callDrag=function(e){e||(e=window.event);var t=window.dhtmlDragAndDrop;if(!((new Date).valueOf()-t.downtime<100)){if(!t.dragNode){if(!t.waitDrag)return t.stopDrag(e,!0);if(t.dragNode=t.dragStartObject._createDragNode(t.dragStartNode,e),!t.dragNode)return t.stopDrag();t.dragNode.onselectstart=function(){return!1},t.gldragNode=t.dragNode,document.body.appendChild(t.dragNode),document.body.onmouseup=t.stopDrag,t.waitDrag=0,t.dragNode.pWindow=window,t.initFrameRoute()
+}if(t.dragNode.parentNode!=window.document.body&&t.gldragNode){var s=t.gldragNode;t.gldragNode.old&&(s=t.gldragNode.old),s.parentNode.removeChild(s);var i=t.dragNode.pWindow;if(s.pWindow&&s.pWindow.dhtmlDragAndDrop.lastLanding&&s.pWindow.dhtmlDragAndDrop.lastLanding.dragLanding._dragOut(s.pWindow.dhtmlDragAndDrop.lastLanding),_isIE){var n=document.createElement("Div");n.innerHTML=t.dragNode.outerHTML,t.dragNode=n.childNodes[0]}else t.dragNode=t.dragNode.cloneNode(!0);t.dragNode.pWindow=window,t.gldragNode.old=t.dragNode,document.body.appendChild(t.dragNode),i.dhtmlDragAndDrop.dragNode=t.dragNode
+}t.dragNode.style.left=e.clientX+15+(t.fx?-1*t.fx:0)+(document.body.scrollLeft||document.documentElement.scrollLeft)+"px",t.dragNode.style.top=e.clientY+3+(t.fy?-1*t.fy:0)+(document.body.scrollTop||document.documentElement.scrollTop)+"px";var a;a=e.srcElement?e.srcElement:e.target,t.checkLanding(a,e)}},dhtmlDragAndDropObject.prototype.calculateFramePosition=function(e){if(window.name){for(var t=parent.frames[window.name].frameElement.offsetParent,s=0,i=0;t;)s+=t.offsetLeft,i+=t.offsetTop,t=t.offsetParent;
+if(parent.dhtmlDragAndDrop){var n=parent.dhtmlDragAndDrop.calculateFramePosition(1);s+=1*n.split("_")[0],i+=1*n.split("_")[1]}if(e)return s+"_"+i;this.fx=s,this.fy=i}return"0_0"},dhtmlDragAndDropObject.prototype.checkLanding=function(e,t){e&&e.dragLanding?(this.lastLanding&&this.lastLanding.dragLanding._dragOut(this.lastLanding),this.lastLanding=e,this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode,t.clientX,t.clientY,t),this.lastLanding_scr=_isIE?t.srcElement:t.target):e&&"BODY"!=e.tagName?this.checkLanding(e.parentNode,t):(this.lastLanding&&this.lastLanding.dragLanding._dragOut(this.lastLanding,t.clientX,t.clientY,t),this.lastLanding=0,this._onNotFound&&this._onNotFound())
+},dhtmlDragAndDropObject.prototype.stopDrag=function(e,t){var s=window.dhtmlDragAndDrop;if(!t){s.stopFrameRoute();var i=s.lastLanding;s.lastLanding=null,i&&i.dragLanding._drag(s.dragStartNode,s.dragStartObject,i,_isIE?event.srcElement:e.target)}s.lastLanding=null,s.dragNode&&s.dragNode.parentNode==document.body&&s.dragNode.parentNode.removeChild(s.dragNode),s.dragNode=0,s.gldragNode=0,s.fx=0,s.fy=0,s.dragStartNode=0,s.dragStartObject=0,document.body.onmouseup=s.tempDOMU,document.body.onmousemove=s.tempDOMM,s.tempDOMU=null,s.tempDOMM=null,s.waitDrag=0
+},dhtmlDragAndDropObject.prototype.stopFrameRoute=function(e){e&&window.dhtmlDragAndDrop.stopDrag(1,1);for(var t=0;t<window.frames.length;t++)try{window.frames[t]!=e&&window.frames[t].dhtmlDragAndDrop&&window.frames[t].dhtmlDragAndDrop.stopFrameRoute(window)}catch(s){}try{parent.dhtmlDragAndDrop&&parent!=window&&parent!=e&&parent.dhtmlDragAndDrop.stopFrameRoute(window)}catch(s){}},dhtmlDragAndDropObject.prototype.initFrameRoute=function(e,t){e&&(window.dhtmlDragAndDrop.preCreateDragCopy(),window.dhtmlDragAndDrop.dragStartNode=e.dhtmlDragAndDrop.dragStartNode,window.dhtmlDragAndDrop.dragStartObject=e.dhtmlDragAndDrop.dragStartObject,window.dhtmlDragAndDrop.dragNode=e.dhtmlDragAndDrop.dragNode,window.dhtmlDragAndDrop.gldragNode=e.dhtmlDragAndDrop.dragNode,window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag,window.waitDrag=0,!_isIE&&t&&(!_isFF||1.8>_FFrv)&&window.dhtmlDragAndDrop.calculateFramePosition());
+try{parent.dhtmlDragAndDrop&&parent!=window&&parent!=e&&parent.dhtmlDragAndDrop.initFrameRoute(window)}catch(s){}for(var i=0;i<window.frames.length;i++)try{window.frames[i]!=e&&window.frames[i].dhtmlDragAndDrop&&window.frames[i].dhtmlDragAndDrop.initFrameRoute(window,!e||t?1:0)}catch(s){}},_isFF=!1,_isIE=!1,_isOpera=!1,_isKHTML=!1,_isMacOS=!1,_isChrome=!1,_FFrv=!1,_KHTMLrv=!1,_OperaRv=!1,-1!=navigator.userAgent.indexOf("Macintosh")&&(_isMacOS=!0),navigator.userAgent.toLowerCase().indexOf("chrome")>-1&&(_isChrome=!0),-1!=navigator.userAgent.indexOf("Safari")||-1!=navigator.userAgent.indexOf("Konqueror")?(_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5)),_KHTMLrv>525?(_isFF=!0,_FFrv=1.9):_isKHTML=!0):-1!=navigator.userAgent.indexOf("Opera")?(_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3))):-1!=navigator.appName.indexOf("Microsoft")?(_isIE=!0,-1==navigator.appVersion.indexOf("MSIE 8.0")&&-1==navigator.appVersion.indexOf("MSIE 9.0")&&-1==navigator.appVersion.indexOf("MSIE 10.0")||"BackCompat"==document.compatMode||(_isIE=8)):"Netscape"==navigator.appName&&-1!=navigator.userAgent.indexOf("Trident")?_isIE=8:(_isFF=!0,_FFrv=parseFloat(navigator.userAgent.split("rv:")[1])),dtmlXMLLoaderObject.prototype.doXPath=function(e,t,s,i){if(_isKHTML||!_isIE&&!window.XPathResult)return this.doXPathOpera(e,t);
+if(_isIE)return t||(t=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),t||dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),s&&t.setProperty("SelectionNamespaces","xmlns:xsl='"+s+"'"),"single"==i?t.selectSingleNode(e):t.selectNodes(e)||new Array(0);var n=t;t||(t=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),t||dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),-1!=t.nodeName.indexOf("document")?n=t:(n=t,t=t.ownerDocument);
+var a=XPathResult.ANY_TYPE;"single"==i&&(a=XPathResult.FIRST_ORDERED_NODE_TYPE);var r=[],d=t.evaluate(e,n,function(){return s},a,null);if(a==XPathResult.FIRST_ORDERED_NODE_TYPE)return d.singleNodeValue;for(var o=d.iterateNext();o;)r[r.length]=o,o=d.iterateNext();return r},_dhtmlxError.prototype.catchError=function(e,t){this.catches[e]=t},_dhtmlxError.prototype.throwError=function(e,t,s){return this.catches[e]?this.catches[e](e,t,s):this.catches.ALL?this.catches.ALL(e,t,s):(window.alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]),null)
+},window.dhtmlxError=new _dhtmlxError,dtmlXMLLoaderObject.prototype.doXPathOpera=function(e,t){var s=e.replace(/[\/]+/gi,"/").split("/"),i=null,n=1;if(!s.length)return[];if("."==s[0])i=[t];else{if(""!==s[0])return[];i=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(s[n].replace(/\[[^\]]*\]/g,"")),n++}for(n;n<s.length;n++)i=this._getAllNamedChilds(i,s[n]);return-1!=s[n-1].indexOf("[")&&(i=this._filterXPath(i,s[n-1])),i},dtmlXMLLoaderObject.prototype._filterXPath=function(e,t){for(var s=[],t=t.replace(/[^\[]*\[\@/g,"").replace(/[\[\]\@]*/g,""),i=0;i<e.length;i++)e[i].getAttribute(t)&&(s[s.length]=e[i]);
+return s},dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(e,t){var s=[];_isKHTML&&(t=t.toUpperCase());for(var i=0;i<e.length;i++)for(var n=0;n<e[i].childNodes.length;n++)_isKHTML?e[i].childNodes[n].tagName&&e[i].childNodes[n].tagName.toUpperCase()==t&&(s[s.length]=e[i].childNodes[n]):e[i].childNodes[n].tagName==t&&(s[s.length]=e[i].childNodes[n]);return s},dtmlXMLLoaderObject.prototype.xslDoc=null,dtmlXMLLoaderObject.prototype.setXSLParamValue=function(e,t,s){s||(s=this.xslDoc),s.responseXML&&(s=s.responseXML);
+var i=this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+e+"']",s,"http://www.w3.org/1999/XSL/Transform","single");i&&(i.firstChild.nodeValue=t)},dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(e,t){e||(e=this.xslDoc),e.responseXML&&(e=e.responseXML),t||(t=this.xmlDoc),t.responseXML&&(t=t.responseXML);var s;if(_isIE){s=new ActiveXObject("Msxml2.DOMDocument.3.0");try{t.transformNodeToObject(e,s)}catch(i){s=t.transformNode(e)}}else this.XSLProcessor||(this.XSLProcessor=new XSLTProcessor,this.XSLProcessor.importStylesheet(e)),s=this.XSLProcessor.transformToDocument(t);
+return s},dtmlXMLLoaderObject.prototype.doXSLTransToString=function(e,t){var s=this.doXSLTransToObject(e,t);return"string"==typeof s?s:this.doSerialization(s)},dtmlXMLLoaderObject.prototype.doSerialization=function(e){if(e||(e=this.xmlDoc),e.responseXML&&(e=e.responseXML),_isIE)return e.xml;var t=new XMLSerializer;return t.serializeToString(e)},dhtmlxEventable=function(obj){obj.attachEvent=function(e,t,s){return e="ev_"+e.toLowerCase(),this[e]||(this[e]=new this.eventCatcher(s||this)),e+":"+this[e].addEvent(t)
+},obj.callEvent=function(e,t){return e="ev_"+e.toLowerCase(),this[e]?this[e].apply(this,t):!0},obj.checkEvent=function(e){return!!this["ev_"+e.toLowerCase()]},obj.eventCatcher=function(obj){var dhx_catch=[],z=function(){for(var e=!0,t=0;t<dhx_catch.length;t++)if(dhx_catch[t]){var s=dhx_catch[t].apply(obj,arguments);e=e&&s}return e};return z.addEvent=function(ev){return"function"!=typeof ev&&(ev=eval(ev)),ev?dhx_catch.push(ev)-1:!1},z.removeEvent=function(e){dhx_catch[e]=null},z},obj.detachEvent=function(e){if(e){var t=e.split(":");
+this[t[0]].removeEvent(t[1])}},obj.detachAllEvents=function(){for(var e in this)0===e.indexOf("ev_")&&(this.detachEvent(e),this[e]=null)},obj=null},window.dhtmlx||(window.dhtmlx={}),function(){function e(e,t){var i=e.callback;s(!1),e.box.parentNode.removeChild(e.box),c=e.box=null,i&&i(t)}function t(t){if(c){t=t||event;var s=t.which||event.keyCode;return dhtmlx.message.keyboard&&((13==s||32==s)&&e(c,!0),27==s&&e(c,!1)),t.preventDefault&&t.preventDefault(),!(t.cancelBubble=!0)}}function s(e){s.cover||(s.cover=document.createElement("DIV"),s.cover.onkeydown=t,s.cover.className="dhx_modal_cover",document.body.appendChild(s.cover));
+document.body.scrollHeight;s.cover.style.display=e?"inline-block":"none"}function i(e,t,s){var i=s?s:e||"",n="dhtmlx_"+i.toLowerCase().replace(/ /g,"_")+"_button";return"<div class='dhtmlx_popup_button "+n+"' result='"+t+"' ><div>"+e+"</div></div>"}function n(e){u.area||(u.area=document.createElement("DIV"),u.area.className="dhtmlx_message_area",u.area.style[u.position]="5px",document.body.appendChild(u.area)),u.hide(e.id);var t=document.createElement("DIV");return t.innerHTML="<div>"+e.text+"</div>",t.className="dhtmlx-info dhtmlx-"+e.type,t.onclick=function(){u.hide(e.id),e=null
+},"bottom"==u.position&&u.area.firstChild?u.area.insertBefore(t,u.area.firstChild):u.area.appendChild(t),e.expire>0&&(u.timers[e.id]=window.setTimeout(function(){u.hide(e.id)},e.expire)),u.pull[e.id]=t,t=null,e.id}function a(t,s,n){var a=document.createElement("DIV");a.className=" dhtmlx_modal_box dhtmlx-"+t.type,a.setAttribute("dhxbox",1);var r="";if(t.width&&(a.style.width=t.width),t.height&&(a.style.height=t.height),t.title&&(r+='<div class="dhtmlx_popup_title">'+t.title+"</div>"),r+='<div class="dhtmlx_popup_text"><span>'+(t.content?"":t.text)+'</span></div><div class="dhtmlx_popup_controls">',s){var d=t.ok||scheduler.locale.labels.message_ok;
+void 0===d&&(d="OK"),r+=i(d,!0,"ok")}if(n){var o=t.cancel||scheduler.locale.labels.message_cancel;void 0===o&&(o="Cancel"),r+=i(o,!1,"cancel")}if(t.buttons)for(var l=0;l<t.buttons.length;l++)r+=i(t.buttons[l],l);if(r+="</div>",a.innerHTML=r,t.content){var h=t.content;"string"==typeof h&&(h=document.getElementById(h)),"none"==h.style.display&&(h.style.display=""),a.childNodes[t.title?1:0].appendChild(h)}return a.onclick=function(s){s=s||event;var i=s.target||s.srcElement;if(i.className||(i=i.parentNode),"dhtmlx_popup_button"==i.className.split(" ")[0]){var n=i.getAttribute("result");
+n="true"==n||("false"==n?!1:n),e(t,n)}},t.box=a,(s||n)&&(c=t),a}function r(e,i,n){var r=e.tagName?e:a(e,i,n);e.hidden||s(!0),document.body.appendChild(r);var d=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-r.offsetWidth)/2)),o=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-r.offsetHeight)/2));return r.style.top="top"==e.position?"-3px":o+"px",r.style.left=d+"px",r.onkeydown=t,r.focus(),e.hidden&&dhtmlx.modalbox.hide(r),r}function d(e){return r(e,!0,!1)
+}function o(e){return r(e,!0,!0)}function l(e){return r(e)}function h(e,t,s){return"object"!=typeof e&&("function"==typeof t&&(s=t,t=""),e={text:e,type:t,callback:s}),e}function _(e,t,s,i){return"object"!=typeof e&&(e={text:e,type:t,expire:s,id:i}),e.id=e.id||u.uid(),e.expire=e.expire||u.expire,e}var c=null;document.attachEvent?document.attachEvent("onkeydown",t):document.addEventListener("keydown",t,!0),dhtmlx.alert=function(){var e=h.apply(this,arguments);return e.type=e.type||"confirm",d(e)},dhtmlx.confirm=function(){var e=h.apply(this,arguments);
+return e.type=e.type||"alert",o(e)},dhtmlx.modalbox=function(){var e=h.apply(this,arguments);return e.type=e.type||"alert",l(e)},dhtmlx.modalbox.hide=function(e){for(;e&&e.getAttribute&&!e.getAttribute("dhxbox");)e=e.parentNode;e&&(e.parentNode.removeChild(e),s(!1))};var u=dhtmlx.message=function(e){e=_.apply(this,arguments),e.type=e.type||"info";var t=e.type.split("-")[0];switch(t){case"alert":return d(e);case"confirm":return o(e);case"modalbox":return l(e);default:return n(e)}};u.seed=(new Date).valueOf(),u.uid=function(){return u.seed++
+},u.expire=4e3,u.keyboard=!0,u.position="top",u.pull={},u.timers={},u.hideAll=function(){for(var e in u.pull)u.hide(e)},u.hide=function(e){var t=u.pull[e];t&&t.parentNode&&(window.setTimeout(function(){t.parentNode.removeChild(t),t=null},2e3),t.className+=" hidden",u.timers[e]&&window.clearTimeout(u.timers[e]),delete u.pull[e])}}(),dataProcessor.prototype={setTransactionMode:function(e,t){this._tMode=e,this._tSend=t},escape:function(e){return this._utf?encodeURIComponent(e):escape(e)},enableUTFencoding:function(e){this._utf=convertStringToBoolean(e)
+},setDataColumns:function(e){this._columns="string"==typeof e?e.split(","):e},getSyncState:function(){return!this.updatedRows.length},enableDataNames:function(e){this._endnm=convertStringToBoolean(e)},enablePartialDataSend:function(e){this._changed=convertStringToBoolean(e)},setUpdateMode:function(e,t){this.autoUpdate="cell"==e,this.updateMode=e,this.dnd=t},ignore:function(e,t){this._silent_mode=!0,e.call(t||window),this._silent_mode=!1},setUpdated:function(e,t,s){if(!this._silent_mode){var i=this.findRow(e);
+s=s||"updated";var n=this.obj.getUserData(e,this.action_param);n&&"updated"==s&&(s=n),t?(this.set_invalid(e,!1),this.updatedRows[i]=e,this.obj.setUserData(e,this.action_param,s),this._in_progress[e]&&(this._in_progress[e]="wait")):this.is_invalid(e)||(this.updatedRows.splice(i,1),this.obj.setUserData(e,this.action_param,"")),t||this._clearUpdateFlag(e),this.markRow(e,t,s),t&&this.autoUpdate&&this.sendData(e)}},_clearUpdateFlag:function(){},markRow:function(e,t,s){var i="",n=this.is_invalid(e);if(n&&(i=this.styles[n],t=!0),this.callEvent("onRowMark",[e,t,s,n])&&(i=this.styles[t?s:"clear"]+i,this.obj[this._methods[0]](e,i),n&&n.details)){i+=this.styles[n+"_cell"];
+for(var a=0;a<n.details.length;a++)n.details[a]&&this.obj[this._methods[1]](e,a,i)}},getState:function(e){return this.obj.getUserData(e,this.action_param)},is_invalid:function(e){return this._invalid[e]},set_invalid:function(e,t,s){s&&(t={value:t,details:s,toString:function(){return this.value.toString()}}),this._invalid[e]=t},checkBeforeUpdate:function(){return!0},sendData:function(e){return!this._waitMode||"tree"!=this.obj.mytype&&!this.obj._h2?(this.obj.editStop&&this.obj.editStop(),"undefined"==typeof e||this._tSend?this.sendAllData():this._in_progress[e]?!1:(this.messages=[],!this.checkBeforeUpdate(e)&&this.callEvent("onValidationError",[e,this.messages])?!1:void this._beforeSendData(this._getRowData(e),e))):void 0
+},_beforeSendData:function(e,t){return this.callEvent("onBeforeUpdate",[t,this.getState(t),e])?void this._sendData(e,t):!1},serialize:function(e,t){if("string"==typeof e)return e;if("undefined"!=typeof t)return this.serialize_one(e,"");var s=[],i=[];for(var n in e)e.hasOwnProperty(n)&&(s.push(this.serialize_one(e[n],n+this.post_delim)),i.push(n));return s.push("ids="+this.escape(i.join(","))),dhtmlx.security_key&&s.push("dhx_security="+dhtmlx.security_key),s.join("&")},serialize_one:function(e,t){if("string"==typeof e)return e;
+var s=[];for(var i in e)e.hasOwnProperty(i)&&s.push(this.escape((t||"")+i)+"="+this.escape(e[i]));return s.join("&")},_sendData:function(e,t){if(e){if(!this.callEvent("onBeforeDataSending",t?[t,this.getState(t),e]:[null,null,e]))return!1;t&&(this._in_progress[t]=(new Date).valueOf());var s=new dtmlXMLLoaderObject(this.afterUpdate,this,!0),i=this.serverProcessor+(this._user?getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&"):"");"POST"!=this._tMode?s.loadXML(i+(-1!=i.indexOf("?")?"&":"?")+this.serialize(e,t)):s.loadXML(i,!0,this.serialize(e,t)),this._waitMode++
+}},sendAllData:function(){if(this.updatedRows.length){this.messages=[];for(var e=!0,t=0;t<this.updatedRows.length;t++)e&=this.checkBeforeUpdate(this.updatedRows[t]);if(!e&&!this.callEvent("onValidationError",["",this.messages]))return!1;if(this._tSend)this._sendData(this._getAllData());else for(var t=0;t<this.updatedRows.length;t++)if(!this._in_progress[this.updatedRows[t]]){if(this.is_invalid(this.updatedRows[t]))continue;if(this._beforeSendData(this._getRowData(this.updatedRows[t]),this.updatedRows[t]),this._waitMode&&("tree"==this.obj.mytype||this.obj._h2))return
+}}},_getAllData:function(){for(var e={},t=!1,s=0;s<this.updatedRows.length;s++){var i=this.updatedRows[s];this._in_progress[i]||this.is_invalid(i)||this.callEvent("onBeforeUpdate",[i,this.getState(i)])&&(e[i]=this._getRowData(i,i+this.post_delim),t=!0,this._in_progress[i]=(new Date).valueOf())}return t?e:null},setVerificator:function(e,t){this.mandatoryFields[e]=t||function(e){return""!==e}},clearVerificator:function(e){this.mandatoryFields[e]=!1},findRow:function(e){var t=0;for(t=0;t<this.updatedRows.length&&e!=this.updatedRows[t];t++);return t
+},defineAction:function(e,t){this._uActions||(this._uActions=[]),this._uActions[e]=t},afterUpdateCallback:function(e,t,s,i){var n=e,a="error"!=s&&"invalid"!=s;if(a||this.set_invalid(e,s),this._uActions&&this._uActions[s]&&!this._uActions[s](i))return delete this._in_progress[n];"wait"!=this._in_progress[n]&&this.setUpdated(e,!1);var r=e;switch(s){case"inserted":case"insert":t!=e&&(this.obj[this._methods[2]](e,t),e=t);break;case"delete":case"deleted":return this.obj.setUserData(e,this.action_param,"true_deleted"),this.obj[this._methods[3]](e),delete this._in_progress[n],this.callEvent("onAfterUpdate",[e,s,t,i])
+}"wait"!=this._in_progress[n]?(a&&this.obj.setUserData(e,this.action_param,""),delete this._in_progress[n]):(delete this._in_progress[n],this.setUpdated(t,!0,this.obj.getUserData(e,this.action_param))),this.callEvent("onAfterUpdate",[r,s,t,i])},afterUpdate:function(e,t,s,i,n){if(n.getXMLTopNode("data"),n.xmlDoc.responseXML){for(var a=n.doXPath("//data/action"),r=0;r<a.length;r++){var d=a[r],o=d.getAttribute("type"),l=d.getAttribute("sid"),h=d.getAttribute("tid");e.afterUpdateCallback(l,h,o,d)}e.finalizeUpdate()
+}},finalizeUpdate:function(){this._waitMode&&this._waitMode--,("tree"==this.obj.mytype||this.obj._h2)&&this.updatedRows.length&&this.sendData(),this.callEvent("onAfterUpdateFinish",[]),this.updatedRows.length||this.callEvent("onFullSync",[])},init:function(e){this.obj=e,this.obj._dp_init&&this.obj._dp_init(this)},setOnAfterUpdate:function(e){this.attachEvent("onAfterUpdate",e)},enableDebug:function(){},setOnBeforeUpdateHandler:function(e){this.attachEvent("onBeforeDataSending",e)},setAutoUpdate:function(e,t){e=e||2e3,this._user=t||(new Date).valueOf(),this._need_update=!1,this._loader=null,this._update_busy=!1,this.attachEvent("onAfterUpdate",function(e,t,s,i){this.afterAutoUpdate(e,t,s,i)
+}),this.attachEvent("onFullSync",function(){this.fullSync()});var s=this;window.setInterval(function(){s.loadUpdate()},e)},afterAutoUpdate:function(e,t){return"collision"==t?(this._need_update=!0,!1):!0},fullSync:function(){return this._need_update===!0&&(this._need_update=!1,this.loadUpdate()),!0},getUpdates:function(e,t){return this._update_busy?!1:(this._update_busy=!0,this._loader=this._loader||new dtmlXMLLoaderObject(!0),this._loader.async=!0,this._loader.waitCall=t,void this._loader.loadXML(e))
+},_v:function(e){return e.firstChild?e.firstChild.nodeValue:""},_a:function(e){for(var t=[],s=0;s<e.length;s++)t[s]=this._v(e[s]);return t},loadUpdate:function(){var e=this,t=this.obj.getUserData(0,"version"),s=this.serverProcessor+getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+t].join("&");s=s.replace("editing=true&",""),this.getUpdates(s,function(){var t=e._loader.doXPath("//userdata");e.obj.setUserData(0,"version",e._v(t[0]));var s=e._loader.doXPath("//update");if(s.length){e._silent_mode=!0;
+for(var i=0;i<s.length;i++){var n=s[i].getAttribute("status"),a=s[i].getAttribute("id"),r=s[i].getAttribute("parent");switch(n){case"inserted":e.callEvent("insertCallback",[s[i],a,r]);break;case"updated":e.callEvent("updateCallback",[s[i],a,r]);break;case"deleted":e.callEvent("deleteCallback",[s[i],a,r])}}e._silent_mode=!1}e._update_busy=!1,e=null})}},window.dhtmlXGridObject&&(dhtmlXGridObject.prototype._init_point_connector=dhtmlXGridObject.prototype._init_point,dhtmlXGridObject.prototype._init_point=function(){var e=function(e){return e=e.replace(/(\?|\&)connector[^\f]*/g,""),e+(-1!=e.indexOf("?")?"&":"?")+"connector=true"+(this.hdr.rows.length>0?"&dhx_no_header=1":"")
+},t=function(t){return e.call(this,t)+(this._connector_sorting||"")+(this._connector_filter||"")},s=function(e,s,i){return this._connector_sorting="&dhx_sort["+s+"]="+i,t.call(this,e)},i=function(e,s,i){for(var n=0;n<s.length;n++)s[n]="dhx_filter["+s[n]+"]="+encodeURIComponent(i[n]);return this._connector_filter="&"+s.join("&"),t.call(this,e)};this.attachEvent("onCollectValues",function(e){return this._con_f_used[e]?"object"==typeof this._con_f_used[e]?this._con_f_used[e]:!1:!0}),this.attachEvent("onDynXLS",function(){return this.xmlFileUrl=t.call(this,this.xmlFileUrl),!0
+}),this.attachEvent("onBeforeSorting",function(e,t,i){if("connector"==t){var n=this;return this.clearAndLoad(s.call(this,this.xmlFileUrl,e,i),function(){n.setSortImgState(!0,e,i)}),!1}return!0}),this.attachEvent("onFilterStart",function(e,t){return this._con_f_used.length?(this.clearAndLoad(i.call(this,this.xmlFileUrl,e,t)),!1):!0}),this.attachEvent("onXLE",function(e,t,s,i){}),this._init_point_connector&&this._init_point_connector()},dhtmlXGridObject.prototype._con_f_used=[],dhtmlXGridObject.prototype._in_header_connector_text_filter=function(e,t){return this._con_f_used[t]||(this._con_f_used[t]=1),this._in_header_text_filter(e,t)
+},dhtmlXGridObject.prototype._in_header_connector_select_filter=function(e,t){return this._con_f_used[t]||(this._con_f_used[t]=2),this._in_header_select_filter(e,t)},dhtmlXGridObject.prototype.load_connector=dhtmlXGridObject.prototype.load,dhtmlXGridObject.prototype.load=function(){var e=[].concat(arguments);if(!this._colls_loaded&&this.cellType){for(var t=[],s=0;s<this.cellType.length;s++)(0===this.cellType[s].indexOf("co")||2==this._con_f_used[s])&&t.push(s);t.length&&(e[0]+=(-1!=e[0].indexOf("?")?"&":"?")+"connector=true&dhx_colls="+t.join(","))
+}return this.load_connector.apply(this,e)},dhtmlXGridObject.prototype._parseHead_connector=dhtmlXGridObject.prototype._parseHead,dhtmlXGridObject.prototype._parseHead=function(){if(this._parseHead_connector.apply(this,arguments),!this._colls_loaded){for(var e=this.xmlLoader.doXPath("./coll_options",arguments[0]),t=0;t<e.length;t++){var s=e[t].getAttribute("for"),i=[],n=null;"combo"==this.cellType[s]&&(n=this.getColumnCombo(s)),0===this.cellType[s].indexOf("co")&&(n=this.getCombo(s));for(var a=this.xmlLoader.doXPath("./item",e[t]),r=0;r<a.length;r++){var d=a[r].getAttribute("value");
+if(n){var o=a[r].getAttribute("label")||d;n.addOption?n.addOption([[d,o]]):n.put(d,o),i[i.length]=o}else i[i.length]=d}this._con_f_used[1*s]&&(this._con_f_used[1*s]=i)}this._colls_loaded=!0}}),window.dataProcessor&&(dataProcessor.prototype.init_original=dataProcessor.prototype.init,dataProcessor.prototype.init=function(e){this.init_original(e),e._dataprocessor=this,this.setTransactionMode("POST",!0),this.serverProcessor+=(-1!=this.serverProcessor.indexOf("?")?"&":"?")+"editing=true"}),dhtmlxError.catchError("LoadXML",function(e,t,s){s[0].status&&window.alert(s[0].responseText)
+}),dhtmlxEventable(scheduler),scheduler._detachDomEvent=function(e,t,s){e.removeEventListener?e.removeEventListener(t,s,!1):e.detachEvent&&e.detachEvent("on"+t,s)},scheduler._init_once=function(){function e(){return{w:window.innerWidth||document.documentElement.clientWidth,h:window.innerHeight||document.documentElement.clientHeight}}function t(e,t){return e.w==t.w&&e.h==t.h}var s=e();dhtmlxEvent(window,"resize",function(){var i=e();t(s,i)||(window.clearTimeout(scheduler._resize_timer),scheduler._resize_timer=window.setTimeout(function(){scheduler.callEvent("onSchedulerResize",[])&&(scheduler.update_view(),scheduler.callEvent("onAfterSchedulerResize",[]))
+},100)),s=i}),scheduler._init_once=function(){}},scheduler.init=function(e,t,s){t=t||scheduler._currentDate(),s=s||"week",this._obj&&(this.unset_actions(),this._obj.innerHTML=""),this._obj="string"==typeof e?document.getElementById(e):e,this._skin_init&&scheduler._skin_init(),scheduler.date.init(),this._els=[],this._scroll=!0,this._quirks=_isIE&&"BackCompat"==document.compatMode,this._quirks7=_isIE&&-1==navigator.appVersion.indexOf("MSIE 8"),this.get_elements(),this.init_templates(),this.set_actions(),this._init_once(),this._init_touch_events(),this.set_sizes(),scheduler.callEvent("onSchedulerReady",[]),this.setCurrentView(t,s)
+},scheduler.xy={min_event_height:40,scale_width:50,scroll_width:18,scale_height:20,month_scale_height:20,menu_width:25,margin_top:0,margin_left:0,editor_width:140,month_head_height:22},scheduler.keys={edit_save:13,edit_cancel:27},scheduler.set_sizes=function(){var e=this._x=this._obj.clientWidth-this.xy.margin_left,t=this._y=this._obj.clientHeight-this.xy.margin_top,s=this._table_view?0:this.xy.scale_width+this.xy.scroll_width,i=this._table_view?-1:this.xy.scale_width;this.set_xy(this._els.dhx_cal_navline[0],e,this.xy.nav_height,0,0),this.set_xy(this._els.dhx_cal_header[0],e-s,this.xy.scale_height,i,this.xy.nav_height+(this._quirks?-1:1));
+var n=this._els.dhx_cal_navline[0].offsetHeight;n>0&&(this.xy.nav_height=n);var a=this.xy.scale_height+this.xy.nav_height+(this._quirks?-2:0);this.set_xy(this._els.dhx_cal_data[0],e,t-(a+2),0,a+2)},scheduler.set_xy=function(e,t,s,i,n){e.style.width=Math.max(0,t)+"px",e.style.height=Math.max(0,s)+"px",arguments.length>3&&(e.style.left=i+"px",e.style.top=n+"px")},scheduler.get_elements=function(){for(var e=this._obj.getElementsByTagName("DIV"),t=0;t<e.length;t++){var s=e[t].className||"",i=e[t].getAttribute("name")||"";
+s&&(s=s.split(" ")[0]),this._els[s]||(this._els[s]=[]),this._els[s].push(e[t]);var n=scheduler.locale.labels[i||s];"string"!=typeof n&&i&&!e[t].innerHTML&&(n=i.split("_")[0]),n&&(e[t].innerHTML=n)}},scheduler.unset_actions=function(){for(var e in this._els)if(this._click[e])for(var t=0;t<this._els[e].length;t++)this._els[e][t].onclick=null;this._obj.onselectstart=null,this._obj.onmousemove=null,this._obj.onmousedown=null,this._obj.onmouseup=null,this._obj.ondblclick=null,this._obj.oncontextmenu=null
+},scheduler.set_actions=function(){for(var e in this._els)if(this._click[e])for(var t=0;t<this._els[e].length;t++)this._els[e][t].onclick=scheduler._click[e];this._obj.onselectstart=function(){return!1},this._obj.onmousemove=function(e){scheduler._temp_touch_block||scheduler._on_mouse_move(e||event)},this._obj.onmousedown=function(e){scheduler._ignore_next_click||scheduler._on_mouse_down(e||event)},this._obj.onmouseup=function(e){scheduler._ignore_next_click||scheduler._on_mouse_up(e||event)},this._obj.ondblclick=function(e){scheduler._on_dbl_click(e||event)
+},this._obj.oncontextmenu=function(e){var t=e||event,s=t.target||t.srcElement,i=scheduler.callEvent("onContextMenu",[scheduler._locate_event(s),t]);return i}},scheduler.select=function(e){this._select_id!=e&&(this.editStop(!1),this.unselect(),this._select_id=e,this.updateEvent(e))},scheduler.unselect=function(e){if(!e||e==this._select_id){var t=this._select_id;this._select_id=null,t&&this.getEvent(t)&&this.updateEvent(t)}},scheduler.getState=function(){return{mode:this._mode,date:new Date(this._date),min_date:new Date(this._min_date),max_date:new Date(this._max_date),editor_id:this._edit_id,lightbox_id:this._lightbox_id,new_event:this._new_event,select_id:this._select_id,expanded:this.expanded,drag_id:this._drag_id,drag_mode:this._drag_mode}
+},scheduler._click={dhx_cal_data:function(e){if(scheduler._ignore_next_click)return e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,scheduler._ignore_next_click=!1,!1;var t=e?e.target:event.srcElement,s=scheduler._locate_event(t);if(e=e||event,s){if(!scheduler.callEvent("onClick",[s,e])||scheduler.config.readonly)return}else scheduler.callEvent("onEmptyClick",[scheduler.getActionData(e).date,e]);if(s&&scheduler.config.select){scheduler.select(s);var i=t.className;-1!=i.indexOf("_icon")&&scheduler._click.buttons[i.split(" ")[1].replace("icon_","")](s)
+}else scheduler._close_not_saved(),scheduler.unselect()},dhx_cal_prev_button:function(){scheduler._click.dhx_cal_next_button(0,-1)},dhx_cal_next_button:function(e,t){scheduler.setCurrentView(scheduler.date.add(scheduler.date[scheduler._mode+"_start"](scheduler._date),t||1,scheduler._mode))},dhx_cal_today_button:function(){scheduler.callEvent("onBeforeTodayDisplayed",[])&&scheduler.setCurrentView(scheduler._currentDate())},dhx_cal_tab:function(){var e=this.getAttribute("name"),t=e.substring(0,e.search("_tab"));
+scheduler.setCurrentView(scheduler._date,t)},buttons:{"delete":function(e){var t=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(t,scheduler.locale.labels.title_confirm_deleting,function(){scheduler.deleteEvent(e)})},edit:function(e){scheduler.edit(e)},save:function(){scheduler.editStop(!0)},details:function(e){scheduler.showLightbox(e)},cancel:function(){scheduler.editStop(!1)}}},scheduler._dhtmlx_confirm=function(e,t,s){if(!e)return s();var i={text:e};t&&(i.title=t),s&&(i.callback=function(e){e&&s()
+}),dhtmlx.confirm(i)},scheduler.addEventNow=function(e,t,s){var i={};e&&null!==e.constructor.toString().match(/object/i)&&(i=e,e=null);var n=6e4*(this.config.event_duration||this.config.time_step);e||(e=i.start_date||Math.round(scheduler._currentDate().valueOf()/n)*n);var a=new Date(e);if(!t){var r=this.config.first_hour;r>a.getHours()&&(a.setHours(r),e=a.valueOf()),t=e.valueOf()+n}var d=new Date(t);a.valueOf()==d.valueOf()&&d.setTime(d.valueOf()+n),i.start_date=i.start_date||a,i.end_date=i.end_date||d,i.text=i.text||this.locale.labels.new_event,i.id=this._drag_id=this.uid(),this._drag_mode="new-size",this._loading=!0,this.addEvent(i),this.callEvent("onEventCreated",[this._drag_id,s]),this._loading=!1,this._drag_event={},this._on_mouse_up(s)
+},scheduler._on_dbl_click=function(e,t){if(t=t||e.target||e.srcElement,!this.config.readonly){var s=(t.className||"").split(" ")[0];switch(s){case"dhx_scale_holder":case"dhx_scale_holder_now":case"dhx_month_body":case"dhx_wa_day_data":if(!scheduler.config.dblclick_create)break;this.addEventNow(this.getActionData(e).date,null,e);break;case"dhx_cal_event":case"dhx_wa_ev_body":case"dhx_agenda_line":case"dhx_grid_event":case"dhx_cal_event_line":case"dhx_cal_event_clear":var i=this._locate_event(t);if(!this.callEvent("onDblClick",[i,e]))return;
+this.config.details_on_dblclick||this._table_view||!this.getEvent(i)._timed||!this.config.select?this.showLightbox(i):this.edit(i);break;case"dhx_time_block":case"dhx_cal_container":return;default:var n=this["dblclick_"+s];if(n)n.call(this,e);else if(t.parentNode&&t!=this)return scheduler._on_dbl_click(e,t.parentNode)}}},scheduler._get_column_index=function(e){var t=0;if(this._cols){for(var s=0,i=0;i<this._cols.length&&!s;i++)s=this._cols[i];if(t=s?e/s:0,this._ignores)for(var i=0;t>=i;i++)this._ignores[i]&&t++
+}return t},scheduler._week_indexes_from_pos=function(e){if(this._cols){var t=this._get_column_index(e.x);return e.x=Math.min(this._cols.length-1,Math.max(0,Math.ceil(t)-1)),e.y=Math.max(0,Math.ceil(60*e.y/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step),e}return e},scheduler._mouse_coords=function(e){var t,s=document.body,i=document.documentElement;t=_isIE||!e.pageX&&!e.pageY?{x:e.clientX+(s.scrollLeft||i.scrollLeft||0)-s.clientLeft,y:e.clientY+(s.scrollTop||i.scrollTop||0)-s.clientTop}:{x:e.pageX,y:e.pageY},t.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width),t.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els.dhx_cal_data[0].scrollTop,t.ev=e;
+var n=this["mouse_"+this._mode];if(n)return n.call(this,t);if(this._table_view){var a=this._get_column_index(t.x);if(!this._cols||!this._colsS)return t;var r=0;for(r=1;r<this._colsS.heights.length&&!(this._colsS.heights[r]>t.y);r++);t.y=Math.ceil(24*(Math.max(0,a)+7*Math.max(0,r-1))*60/this.config.time_step),(scheduler._drag_mode||"month"==this._mode)&&(t.y=24*(Math.max(0,Math.ceil(a)-1)+7*Math.max(0,r-1))*60/this.config.time_step),"move"==this._drag_mode&&scheduler._ignores_detected&&scheduler.config.preserve_length&&(t._ignores=!0,this._drag_event._event_length||(this._drag_event._event_length=this._get_real_event_length(this._drag_event.start_date,this._drag_event.end_date,{x_step:1,x_unit:"day"}))),t.x=0
+}else t=this._week_indexes_from_pos(t);return t},scheduler._close_not_saved=function(){if((new Date).valueOf()-(scheduler._new_event||0)>500&&scheduler._edit_id){var e=scheduler.locale.labels.confirm_closing;scheduler._dhtmlx_confirm(e,scheduler.locale.labels.title_confirm_closing,function(){scheduler.editStop(scheduler.config.positive_closing)})}},scheduler._correct_shift=function(e,t){return e-=6e4*(new Date(scheduler._min_date).getTimezoneOffset()-new Date(e).getTimezoneOffset())*(t?-1:1)},scheduler._on_mouse_move=function(e){if(this._drag_mode){var t=this._mouse_coords(e);
+if(!this._drag_pos||t.force_redraw||this._drag_pos.x!=t.x||this._drag_pos.y!=t.y){var s,i;if(this._edit_id!=this._drag_id&&this._close_not_saved(),this._drag_pos=t,"create"==this._drag_mode){if(this._close_not_saved(),this.unselect(this._select_id),this._loading=!0,s=this._get_date_from_pos(t).valueOf(),!this._drag_start){var n=this.callEvent("onBeforeEventCreated",[e,this._drag_id]);if(!n)return;return void(this._drag_start=s)}i=s,i==this._drag_start;var a=new Date(this._drag_start),r=new Date(i);
+"day"!=this._mode&&"week"!=this._mode||a.getHours()!=r.getHours()||a.getMinutes()!=r.getMinutes()||(r=new Date(this._drag_start+1e3)),this._drag_id=this.uid(),this.addEvent(a,r,this.locale.labels.new_event,this._drag_id,t.fields),this.callEvent("onEventCreated",[this._drag_id,e]),this._loading=!1,this._drag_mode="new-size"}var d,o=this.getEvent(this._drag_id);if("move"==this._drag_mode)s=this._min_date.valueOf()+6e4*(t.y*this.config.time_step+24*t.x*60-(scheduler._move_pos_shift||0)),!t.custom&&this._table_view&&(s+=1e3*this.date.time_part(o.start_date)),s=this._correct_shift(s),t._ignores&&this.config.preserve_length&&this._table_view?(this.matrix&&(d=this.matrix[this._mode]),d=d||{x_step:1,x_unit:"day"},i=1*s+this._get_fictional_event_length(s,this._drag_event._event_length,d)):i=o.end_date.valueOf()-(o.start_date.valueOf()-s);
+else{if(s=o.start_date.valueOf(),i=o.end_date.valueOf(),this._table_view){var l=this._min_date.valueOf()+t.y*this.config.time_step*6e4+(t.custom?0:864e5);if("month"==this._mode)if(l=this._correct_shift(l,!1),this._drag_from_start){var h=864e5;l<=scheduler.date.date_part(new Date(i+h-1)).valueOf()&&(s=l-h)}else i=l;else t.resize_from_start?s=l:i=l}else i=this.date.date_part(new Date(o.end_date.valueOf()-1)).valueOf()+t.y*this.config.time_step*6e4,this._els.dhx_cal_data[0].style.cursor="s-resize",("week"==this._mode||"day"==this._mode)&&(i=this._correct_shift(i));
+if("new-size"==this._drag_mode)if(i<=this._drag_start){var _=t.shift||(this._table_view&&!t.custom?864e5:0);s=i-(t.shift?0:_),i=this._drag_start+(_||6e4*this.config.time_step)}else s=this._drag_start;else s>=i&&(i=s+6e4*this.config.time_step)}var c=new Date(i-1),u=new Date(s);if(scheduler.config.limit_drag_out&&(+u<+scheduler._min_date||+i>+scheduler._max_date)){var f=i-u;+u<+scheduler._min_date?(u=new Date(scheduler._min_date),i=new Date(+u+f)):(i=new Date(scheduler._max_date),u=new Date(+i-f));
+var c=new Date(i-1)}if(!this._table_view&&(t.x!=this._get_event_sday({start_date:new Date(i),end_date:new Date(i)})||new Date(i).getHours()>=this.config.last_hour)){var f=i-u,h=this._min_date.valueOf()+24*t.x*60*6e4;i=scheduler.date.date_part(new Date(h)),i.setHours(this.config.last_hour),c=new Date(i-1),"move"==this._drag_mode&&(u=new Date(+i-f))}if(this._table_view||c.getDate()==u.getDate()&&c.getHours()<this.config.last_hour||scheduler._allow_dnd)if(o.start_date=u,o.end_date=new Date(i),this.config.update_render){var g=scheduler._els.dhx_cal_data[0].scrollTop;
+this.update_view(),scheduler._els.dhx_cal_data[0].scrollTop=g}else this.updateEvent(this._drag_id);this._table_view&&this.for_rendered(this._drag_id,function(e){e.className+=" dhx_in_move"}),this.callEvent("onEventDrag",[this._drag_id,this._drag_mode,e])}}else if(scheduler.checkEvent("onMouseMove")){var v=this._locate_event(e.target||e.srcElement);this.callEvent("onMouseMove",[v,e])}},scheduler._on_mouse_down=function(e,t){if(2!=e.button&&!this.config.readonly&&!this._drag_mode){t=t||e.target||e.srcElement;
+var s=t.className&&t.className.split(" ")[0];switch(s){case"dhx_cal_event_line":case"dhx_cal_event_clear":this._table_view&&(this._drag_mode="move");break;case"dhx_event_move":case"dhx_wa_ev_body":this._drag_mode="move";break;case"dhx_event_resize":this._drag_mode="resize",scheduler._drag_from_start=(t.className||"").indexOf("dhx_event_resize_end")<0?!0:!1;break;case"dhx_scale_holder":case"dhx_scale_holder_now":case"dhx_month_body":case"dhx_matrix_cell":case"dhx_marked_timespan":this._drag_mode="create";
+break;case"":if(t.parentNode)return scheduler._on_mouse_down(e,t.parentNode);break;default:if((!scheduler.checkEvent("onMouseDown")||scheduler.callEvent("onMouseDown",[s]))&&t.parentNode&&t!=this&&"dhx_body"!=s)return scheduler._on_mouse_down(e,t.parentNode);this._drag_mode=null,this._drag_id=null}if(this._drag_mode){var i=this._locate_event(t);this.config["drag_"+this._drag_mode]&&this.callEvent("onBeforeDrag",[i,this._drag_mode,e])?(this._drag_id=i,this._drag_event=scheduler._lame_clone(this.getEvent(this._drag_id)||{})):this._drag_mode=this._drag_id=0
+}this._drag_start=null}},scheduler._get_private_properties=function(e){var t={};for(var s in e)0===s.indexOf("_")&&(t[s]=!0);return t},scheduler._clear_temporary_properties=function(e,t){var s=this._get_private_properties(e),i=this._get_private_properties(t);for(var n in i)s[n]||delete t[n]},scheduler._on_mouse_up=function(e){if(!e||2!=e.button||!scheduler.config.touch){if(this._drag_mode&&this._drag_id){this._els.dhx_cal_data[0].style.cursor="default";var t=this.getEvent(this._drag_id);if(this._drag_event._dhx_changed||!this._drag_event.start_date||t.start_date.valueOf()!=this._drag_event.start_date.valueOf()||t.end_date.valueOf()!=this._drag_event.end_date.valueOf()){var s="new-size"==this._drag_mode;
+if(this.callEvent("onBeforeEventChanged",[t,e,s,this._drag_event])){var i=this._drag_id,n=this._drag_mode;if(this._drag_id=this._drag_mode=null,s&&this.config.edit_on_create){if(this.unselect(),this._new_event=new Date,this._table_view||this.config.details_on_create||!this.config.select)return scheduler.callEvent("onDragEnd",[i,n,e]),this.showLightbox(i);this._drag_pos=!0,this._select_id=this._edit_id=i}else this._new_event||this.callEvent(s?"onEventAdded":"onEventChanged",[i,this.getEvent(i)])}else s?this.deleteEvent(t.id,!0):(this._drag_event._dhx_changed=!1,this._clear_temporary_properties(t,this._drag_event),scheduler._lame_copy(t,this._drag_event),this.updateEvent(t.id))
+}this._drag_pos&&this.render_view_data(),scheduler.callEvent("onDragEnd",[this._drag_id,this._drag_mode,e])}this._drag_id=null,this._drag_mode=null,this._drag_pos=null}},scheduler._trigger_dyn_loading=function(){return this._load_mode&&this._load()?(this._render_wait=!0,!0):!1},scheduler.update_view=function(){var e=this[this._mode+"_view"];return e?e(!0):this._reset_scale(),this._trigger_dyn_loading()?!0:void this.render_view_data()},scheduler.isViewExists=function(e){return!!(scheduler[e+"_view"]||scheduler.date[e+"_start"]&&scheduler.templates[e+"_date"]&&scheduler.templates[e+"_scale_date"])
+},scheduler.updateView=function(e,t){e=e||this._date,t=t||this._mode;var s="dhx_cal_data";this._mode?this._obj.className=this._obj.className.replace("dhx_scheduler_"+this._mode,"dhx_scheduler_"+t):this._obj.className+=" dhx_scheduler_"+t;var i=this._mode==t&&this.config.preserve_scroll?this._els[s][0].scrollTop:!1;this[this._mode+"_view"]&&t&&this._mode!=t&&this[this._mode+"_view"](!1),this._close_not_saved();var n="dhx_multi_day";this._els[n]&&(this._els[n][0].parentNode.removeChild(this._els[n][0]),this._els[n]=null),this._mode=t,this._date=e,this._table_view="month"==this._mode,this._dy_shift=0;
+var a=this._els.dhx_cal_tab;if(a)for(var r=0;r<a.length;r++){var d=a[r].className;d=d.replace(/ active/g,""),a[r].getAttribute("name")==this._mode+"_tab"&&(d+=" active"),a[r].className=d}this.update_view(),"number"==typeof i&&(this._els[s][0].scrollTop=i)},scheduler.setCurrentView=function(e,t){this.callEvent("onBeforeViewChange",[this._mode,this._date,t||this._mode,e||this._date])&&(this.updateView(e,t),this.callEvent("onViewChange",[this._mode,this._date]))},scheduler._render_x_header=function(e,t,s,i){var n=document.createElement("DIV");
+n.className="dhx_scale_bar",this.templates[this._mode+"_scalex_class"]&&(n.className+=" "+this.templates[this._mode+"_scalex_class"](s));var a=this._cols[e]-1;"month"==this._mode&&0===e&&this.config.left_border&&(n.className+=" dhx_scale_bar_border",t+=1),this.set_xy(n,a,this.xy.scale_height-2,t,0),n.innerHTML=this.templates[this._mode+"_scale_date"](s,this._mode),i.appendChild(n)},scheduler._get_columns_num=function(e,t){var s=7;if(!scheduler._table_view){var i=scheduler.date["get_"+scheduler._mode+"_end"];
+i&&(t=i(e)),s=Math.round((t.valueOf()-e.valueOf())/864e5)}return s},scheduler._get_timeunit_start=function(){return this.date[this._mode+"_start"](new Date(this._date.valueOf()))},scheduler._get_view_end=function(){var e=this._get_timeunit_start(),t=scheduler.date.add(e,1,this._mode);if(!scheduler._table_view){var s=scheduler.date["get_"+scheduler._mode+"_end"];s&&(t=s(e))}return t},scheduler._calc_scale_sizes=function(e,t,s){var i=e,n=this._get_columns_num(t,s);this._process_ignores(t,n,"day",1);
+for(var a=n-this._ignores_detected,r=0;n>r;r++)this._ignores[r]?(this._cols[r]=0,a++):this._cols[r]=Math.floor(i/(a-r)),i-=this._cols[r],this._colsS[r]=(this._cols[r-1]||0)+(this._colsS[r-1]||(this._table_view?0:this.xy.scale_width+2)),this._colsS.col_length=n;this._colsS[n]=this._cols[n-1]+this._colsS[n-1]},scheduler._set_scale_col_size=function(e,t,s){var i=this.config;this.set_xy(e,t-1,i.hour_size_px*(i.last_hour-i.first_hour),s+this.xy.scale_width+1,0)},scheduler._render_scales=function(e,t){var s=new Date(scheduler._min_date),i=new Date(scheduler._max_date),n=this.date.date_part(scheduler._currentDate()),a=parseInt(e.style.width,10),r=new Date(this._min_date),d=this._get_columns_num(s,i);
+this._calc_scale_sizes(a,s,i);var o=0;e.innerHTML="";for(var l=0;d>l;l++){if(this._ignores[l]||this._render_x_header(l,o,r,e),!this._table_view){var h=document.createElement("DIV"),_="dhx_scale_holder";r.valueOf()==n.valueOf()&&(_="dhx_scale_holder_now"),this._ignores_detected&&this._ignores[l]&&(_+=" dhx_scale_ignore"),h.className=_+" "+this.templates.week_date_class(r,n),this._set_scale_col_size(h,this._cols[l],o),t.appendChild(h),this.callEvent("onScaleAdd",[h,r])}o+=this._cols[l],r=this.date.add(r,1,"day")
+}},scheduler._reset_scale=function(){if(this.templates[this._mode+"_date"]){var e=this._els.dhx_cal_header[0],t=this._els.dhx_cal_data[0],s=this.config;e.innerHTML="",t.innerHTML="";var i=(s.readonly||!s.drag_resize?" dhx_resize_denied":"")+(s.readonly||!s.drag_move?" dhx_move_denied":"");i&&(t.className="dhx_cal_data"+i),this._scales={},this._cols=[],this._colsS={height:0},this._dy_shift=0,this.set_sizes();var n,a,r=this._get_timeunit_start(),d=scheduler._get_view_end();if(n=a=this._table_view?scheduler.date.week_start(r):r,this._min_date=n,this._els.dhx_cal_date[0].innerHTML=this.templates[this._mode+"_date"](r,d,this._mode),this._max_date=d,scheduler._render_scales(e,t),this._table_view)this._reset_month_scale(t,r,a);
+else if(this._reset_hours_scale(t,r,a),s.multi_day){var o="dhx_multi_day";this._els[o]&&(this._els[o][0].parentNode.removeChild(this._els[o][0]),this._els[o]=null);var l=this._els.dhx_cal_navline[0],h=l.offsetHeight+this._els.dhx_cal_header[0].offsetHeight+1,_=document.createElement("DIV");_.className=o,_.style.visibility="hidden",this.set_xy(_,this._colsS[this._colsS.col_length]+this.xy.scroll_width,0,0,h),t.parentNode.insertBefore(_,t);var c=_.cloneNode(!0);c.className=o+"_icon",c.style.visibility="hidden",this.set_xy(c,this.xy.scale_width,0,0,h),_.appendChild(c),this._els[o]=[_,c],this._els[o][0].onclick=this._click.dhx_cal_data
+}}},scheduler._reset_hours_scale=function(e){var t=document.createElement("DIV");t.className="dhx_scale_holder";for(var s=new Date(1980,1,1,this.config.first_hour,0,0),i=1*this.config.first_hour;i<this.config.last_hour;i++){var n=document.createElement("DIV");n.className="dhx_scale_hour",n.style.height=this.config.hour_size_px-(this._quirks?0:1)+"px";var a=this.xy.scale_width;this.config.left_border&&(a-=1,n.className+=" dhx_scale_hour_border"),n.style.width=a+"px",n.innerHTML=scheduler.templates.hour_scale(s),t.appendChild(n),s=this.date.add(s,1,"hour")
+}e.appendChild(t),this.config.scroll_hour&&(e.scrollTop=this.config.hour_size_px*(this.config.scroll_hour-this.config.first_hour))},scheduler._currentDate=function(){return scheduler.config.now_date?new Date(scheduler.config.now_date):new Date},scheduler._process_ignores=function(e,t,s,i,n){this._ignores={},this._ignores_detected=0;var a=scheduler["ignore_"+this._mode];if(a)for(var r=new Date(e),d=0;t>d;d++)a(r)&&(this._ignores_detected+=1,this._ignores[d]=!0,n&&t++),r=scheduler.date.add(r,i,s)},scheduler._render_month_scale=function(e,t,s){function i(e){var t=scheduler._colsS.height;
+return void 0!==scheduler._colsS.heights[e+1]&&(t=scheduler._colsS.heights[e+1]-(scheduler._colsS.heights[e]||0)),t}var n=scheduler.date.add(t,1,"month"),a=new Date(s),r=scheduler._currentDate();this.date.date_part(r),this.date.date_part(s);for(var d=Math.ceil(Math.round((n.valueOf()-s.valueOf())/864e5)/7),o=[],l=0;7>=l;l++){var h=(this._cols[l]||0)-1;0===l&&this.config.left_border&&(h-=1),o[l]=" style='width:"+h+"px;"}for(var _=0,c="<table cellpadding='0' cellspacing='0'>",u=[],l=0;d>l;l++){c+="<tr>";
+for(var f=Math.max(i(l)-scheduler.xy.month_head_height,0),g=0;7>g;g++){c+="<td";var v="";t>s?v="dhx_before":s>=n?v="dhx_after":s.valueOf()==r.valueOf()&&(v="dhx_now"),this._ignores_detected&&this._ignores[g]&&(v+=" dhx_scale_ignore"),c+=" class='"+v+" "+this.templates.month_date_class(s,r)+"' >";var m="dhx_month_body",p="dhx_month_head";0===g&&this.config.left_border&&(m+=" dhx_month_body_border",p+=" dhx_month_head_border"),this._ignores_detected&&this._ignores[g]?c+="<div></div><div></div>":(c+="<div class='"+p+"'>"+this.templates.month_day(s)+"</div>",c+="<div class='"+m+"' "+o[g]+";height:"+f+"px;'></div></td>"),u.push(s);
+var x=s.getDate();s=this.date.add(s,1,"day"),s.getDate()-x>1&&(s=new Date(s.getFullYear(),s.getMonth(),x+1,12,0))}c+="</tr>",scheduler._colsS.heights[l]=_,_+=i(l)}c+="</table>",this._min_date=a,this._max_date=s,e.innerHTML=c,this._scales={};for(var b=e.getElementsByTagName("div"),l=0;l<u.length;l++){var e=b[2*l+1],y=u[l];this._scales[+y]=e}for(var l=0;l<u.length;l++){var y=u[l];this.callEvent("onScaleAdd",[this._scales[+y],y])}return this._max_date},scheduler._reset_month_scale=function(e,t,s){var i=scheduler.date.add(t,1,"month"),n=scheduler._currentDate();
+this.date.date_part(n),this.date.date_part(s);var a=Math.ceil(Math.round((i.valueOf()-s.valueOf())/864e5)/7),r=Math.floor(e.clientHeight/a)-this.xy.month_head_height;return this._colsS.height=r+this.xy.month_head_height,this._colsS.heights=[],scheduler._render_month_scale(e,t,s)},scheduler.getLabel=function(e,t){for(var s=this.config.lightbox.sections,i=0;i<s.length;i++)if(s[i].map_to==e)for(var n=s[i].options,a=0;a<n.length;a++)if(n[a].key==t)return n[a].label;return""},scheduler.updateCollection=function(e,t){var s=scheduler.serverList(e);
+return s?(s.splice(0,s.length),s.push.apply(s,t||[]),scheduler.callEvent("onOptionsLoad",[]),scheduler.resetLightbox(),!0):!1},scheduler._lame_clone=function(e,t){var s,i,n;for(t=t||[],s=0;s<t.length;s+=2)if(e===t[s])return t[s+1];if(e&&"object"==typeof e){for(n={},i=[Array,Date,Number,String,Boolean],s=0;s<i.length;s++)e instanceof i[s]&&(n=s?new i[s](e):new i[s]);t.push(e,n);for(s in e)Object.prototype.hasOwnProperty.apply(e,[s])&&(n[s]=scheduler._lame_clone(e[s],t))}return n||e},scheduler._lame_copy=function(e,t){for(var s in t)t.hasOwnProperty(s)&&(e[s]=t[s]);
+return e},scheduler._get_date_from_pos=function(e){var t=this._min_date.valueOf()+6e4*(e.y*this.config.time_step+24*(this._table_view?0:e.x)*60);return new Date(this._correct_shift(t))},scheduler.getActionData=function(e){var t=this._mouse_coords(e);return{date:this._get_date_from_pos(t),section:t.section}},scheduler._focus=function(e,t){e&&e.focus&&(this.config.touch?window.setTimeout(function(){e.focus()},100):(t&&e.select&&e.select(),e.focus()))},scheduler._get_real_event_length=function(e,t,s){var i,n=t-e,a=s._start_correction+s._end_correction||0,r=this["ignore_"+this._mode],d=0;
+for(s.render?(d=this._get_date_index(s,e),i=this._get_date_index(s,t)):i=Math.round(n/60/60/1e3/24);i>d;){var o=scheduler.date.add(t,-s.x_step,s.x_unit);n-=r&&r(t)?t-o:a,t=o,i--}return n},scheduler._get_fictional_event_length=function(e,t,s,i){var n=new Date(e),a=i?-1:1;if(s._start_correction||s._end_correction){var r;r=i?60*n.getHours()+n.getMinutes()-60*(s.first_hour||0):60*(s.last_hour||0)-(60*n.getHours()+n.getMinutes());var d=60*(s.last_hour-s.first_hour),o=Math.ceil((t/6e4-r)/d);t+=o*(1440-d)*60*1e3
+}var l,h=new Date(1*e+t*a),_=this["ignore_"+this._mode],c=0;for(s.render?(c=this._get_date_index(s,n),l=this._get_date_index(s,h)):l=Math.round(t/60/60/1e3/24);l*a>=c*a;){var u=scheduler.date.add(n,s.x_step*a,s.x_unit);_&&_(n)&&(t+=(u-n)*a,l+=a),n=u,c+=a}return t},scheduler._get_section_view=function(){return this.matrix&&this.matrix[this._mode]?this.matrix[this._mode]:this._props&&this._props[this._mode]?this._props[this._mode]:null},scheduler._get_section_property=function(){return this.matrix&&this.matrix[this._mode]?this.matrix[this._mode].y_property:this._props&&this._props[this._mode]?this._props[this._mode].map_to:null
+},scheduler._is_initialized=function(){var e=this.getState();return this._obj&&e.date&&e.mode},scheduler._is_lightbox_open=function(){var e=this.getState();return null!==e.lightbox_id&&void 0!==e.lightbox_id},scheduler.date={init:function(){for(var e=scheduler.locale.date.month_short,t=scheduler.locale.date.month_short_hash={},s=0;s<e.length;s++)t[e[s]]=s;for(var e=scheduler.locale.date.month_full,t=scheduler.locale.date.month_full_hash={},s=0;s<e.length;s++)t[e[s]]=s},date_part:function(e){return e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),0!==e.getHours()&&e.setTime(e.getTime()+36e5*(24-e.getHours())),e
+},time_part:function(e){return(e.valueOf()/1e3-60*e.getTimezoneOffset())%86400},week_start:function(e){var t=e.getDay();return scheduler.config.start_on_monday&&(0===t?t=6:t--),this.date_part(this.add(e,-1*t,"day"))},month_start:function(e){return e.setDate(1),this.date_part(e)},year_start:function(e){return e.setMonth(0),this.month_start(e)},day_start:function(e){return this.date_part(e)},_add_days:function(e,t){var s=new Date(e.valueOf());return s.setDate(s.getDate()+t),!e.getHours()&&s.getHours()&&s.setTime(s.getTime()+36e5*(24-s.getHours())),s
+},add:function(e,t,s){var i=new Date(e.valueOf());switch(s){case"day":i=scheduler.date._add_days(i,t);break;case"week":i=scheduler.date._add_days(i,7*t);break;case"month":i.setMonth(i.getMonth()+t);break;case"year":i.setYear(i.getFullYear()+t);break;case"hour":i.setHours(i.getHours()+t);break;case"minute":i.setMinutes(i.getMinutes()+t);break;default:return scheduler.date["add_"+s](e,t,s)}return i},to_fixed:function(e){return 10>e?"0"+e:e},copy:function(e){return new Date(e.valueOf())},date_to_str:function(e,t){return e=e.replace(/%[a-zA-Z]/g,function(e){switch(e){case"%d":return'"+scheduler.date.to_fixed(date.getDate())+"';
+case"%m":return'"+scheduler.date.to_fixed((date.getMonth()+1))+"';case"%j":return'"+date.getDate()+"';case"%n":return'"+(date.getMonth()+1)+"';case"%y":return'"+scheduler.date.to_fixed(date.getFullYear()%100)+"';case"%Y":return'"+date.getFullYear()+"';case"%D":return'"+scheduler.locale.date.day_short[date.getDay()]+"';case"%l":return'"+scheduler.locale.date.day_full[date.getDay()]+"';case"%M":return'"+scheduler.locale.date.month_short[date.getMonth()]+"';case"%F":return'"+scheduler.locale.date.month_full[date.getMonth()]+"';
+case"%h":return'"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+"';case"%g":return'"+((date.getHours()+11)%12+1)+"';case"%G":return'"+date.getHours()+"';case"%H":return'"+scheduler.date.to_fixed(date.getHours())+"';case"%i":return'"+scheduler.date.to_fixed(date.getMinutes())+"';case"%a":return'"+(date.getHours()>11?"pm":"am")+"';case"%A":return'"+(date.getHours()>11?"PM":"AM")+"';case"%s":return'"+scheduler.date.to_fixed(date.getSeconds())+"';case"%W":return'"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"';
+default:return e}}),t&&(e=e.replace(/date\.get/g,"date.getUTC")),new Function("date",'return "'+e+'";')},str_to_date:function(e,t){for(var s="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",i=e.match(/%[a-zA-Z]/g),n=0;n<i.length;n++)switch(i[n]){case"%j":case"%d":s+="set[2]=temp["+n+"]||1;";break;case"%n":case"%m":s+="set[1]=(temp["+n+"]||1)-1;";break;case"%y":s+="set[0]=temp["+n+"]*1+(temp["+n+"]>50?1900:2000);";break;case"%g":case"%G":case"%h":case"%H":s+="set[3]=temp["+n+"]||0;";break;case"%i":s+="set[4]=temp["+n+"]||0;";
+break;case"%Y":s+="set[0]=temp["+n+"]||0;";break;case"%a":case"%A":s+="set[3]=set[3]%12+((temp["+n+"]||'').toLowerCase()=='am'?0:12);";break;case"%s":s+="set[5]=temp["+n+"]||0;";break;case"%M":s+="set[1]=scheduler.locale.date.month_short_hash[temp["+n+"]]||0;";break;case"%F":s+="set[1]=scheduler.locale.date.month_full_hash[temp["+n+"]]||0;"}var a="set[0],set[1],set[2],set[3],set[4],set[5]";return t&&(a=" Date.UTC("+a+")"),new Function("date","var set=[0,0,1,0,0,0]; "+s+" return new Date("+a+");")
+},getISOWeek:function(e){if(!e)return!1;var t=e.getDay();0===t&&(t=7);var s=new Date(e.valueOf());s.setDate(e.getDate()+(4-t));var i=s.getFullYear(),n=Math.round((s.getTime()-new Date(i,0,1).getTime())/864e5),a=1+Math.floor(n/7);return a},getUTCISOWeek:function(e){return this.getISOWeek(this.convert_to_utc(e))},convert_to_utc:function(e){return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds())}},scheduler.locale={date:{month_full:["January","February","March","April","May","June","July","August","September","October","November","December"],month_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_full:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],day_short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},labels:{dhx_cal_today_button:"Today",day_tab:"Day",week_tab:"Week",month_tab:"Month",new_event:"New event",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Event will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",full_day:"Full day",confirm_recurring:"Do you want to edit the whole set of repeated events?",section_recurring:"Repeat event",button_recurring:"Disabled",button_recurring_open:"Enabled",button_edit_series:"Edit series",button_edit_occurrence:"Edit occurrence",agenda_tab:"Agenda",date:"Date",description:"Description",year_tab:"Year",week_agenda_tab:"Agenda",grid_tab:"Grid",drag_to_create:"Drag to create",drag_to_move:"Drag to move",message_ok:"OK",message_cancel:"Cancel"}},scheduler.config={default_date:"%j %M %Y",month_date:"%F %Y",load_date:"%Y-%m-%d",week_date:"%l",day_date:"%D, %F %j",hour_date:"%H:%i",month_day:"%d",xml_date:"%m/%d/%Y %H:%i",api_date:"%d-%m-%Y %H:%i",preserve_length:!0,time_step:5,start_on_monday:1,first_hour:0,last_hour:24,readonly:!1,drag_resize:1,drag_move:1,drag_create:1,dblclick_create:1,edit_on_create:1,details_on_create:0,resize_month_events:!1,resize_month_timed:!1,cascade_event_display:!1,cascade_event_count:4,cascade_event_margin:30,multi_day:!0,multi_day_height_limit:0,drag_lightbox:!0,preserve_scroll:!0,select:!0,server_utc:!1,touch:!0,touch_tip:!0,touch_drag:500,quick_info_detached:!0,positive_closing:!1,drag_highlight:!0,limit_drag_out:!1,icons_edit:["icon_save","icon_cancel"],icons_select:["icon_details","icon_edit","icon_delete"],buttons_left:["dhx_save_btn","dhx_cancel_btn"],buttons_right:["dhx_delete_btn"],lightbox:{sections:[{name:"description",height:200,map_to:"text",type:"textarea",focus:!0},{name:"time",height:72,type:"time",map_to:"auto"}]},highlight_displayed_event:!0,left_border:!1},scheduler.templates={},scheduler.init_templates=function(){var e=scheduler.locale.labels;
+e.dhx_save_btn=e.icon_save,e.dhx_cancel_btn=e.icon_cancel,e.dhx_delete_btn=e.icon_delete;var t=scheduler.date.date_to_str,s=scheduler.config,i=function(e,t){for(var s in t)e[s]||(e[s]=t[s])};i(scheduler.templates,{day_date:t(s.default_date),month_date:t(s.month_date),week_date:function(e,t){return scheduler.templates.day_date(e)+" &ndash; "+scheduler.templates.day_date(scheduler.date.add(t,-1,"day"))},day_scale_date:t(s.default_date),month_scale_date:t(s.week_date),week_scale_date:t(s.day_date),hour_scale:t(s.hour_date),time_picker:t(s.hour_date),event_date:t(s.hour_date),month_day:t(s.month_day),xml_date:scheduler.date.str_to_date(s.xml_date,s.server_utc),load_format:t(s.load_date,s.server_utc),xml_format:t(s.xml_date,s.server_utc),api_date:scheduler.date.str_to_date(s.api_date),event_header:function(e,t){return scheduler.templates.event_date(e)+" - "+scheduler.templates.event_date(t)
+},event_text:function(e,t,s){return s.text},event_class:function(){return""},month_date_class:function(){return""},week_date_class:function(){return""},event_bar_date:function(e){return scheduler.templates.event_date(e)+" "},event_bar_text:function(e,t,s){return s.text},month_events_link:function(e,t){return"<a>View more("+t+" events)</a>"},drag_marker_class:function(){return""},drag_marker_content:function(){return""}}),this.callEvent("onTemplatesReady",[])},scheduler.uid=function(){return this._seed||(this._seed=(new Date).valueOf()),this._seed++
+},scheduler._events={},scheduler.clearAll=function(){this._events={},this._loaded={},this.clear_view(),this.callEvent("onClearAll",[])},scheduler.addEvent=function(e,t,s,i,n){if(!arguments.length)return this.addEventNow();var a=e;1!=arguments.length&&(a=n||{},a.start_date=e,a.end_date=t,a.text=s,a.id=i),a.id=a.id||scheduler.uid(),a.text=a.text||"","string"==typeof a.start_date&&(a.start_date=this.templates.api_date(a.start_date)),"string"==typeof a.end_date&&(a.end_date=this.templates.api_date(a.end_date));
+var r=6e4*(this.config.event_duration||this.config.time_step);a.start_date.valueOf()==a.end_date.valueOf()&&a.end_date.setTime(a.end_date.valueOf()+r),a._timed=this.isOneDayEvent(a);var d=!this._events[a.id];return this._events[a.id]=a,this.event_updated(a),this._loading||this.callEvent(d?"onEventAdded":"onEventChanged",[a.id,a]),a.id},scheduler.deleteEvent=function(e,t){var s=this._events[e];(t||this.callEvent("onBeforeEventDelete",[e,s])&&this.callEvent("onConfirmedBeforeEventDelete",[e,s]))&&(s&&(this._select_id=null,delete this._events[e],this.event_updated(s)),this.callEvent("onEventDeleted",[e,s]))
+},scheduler.getEvent=function(e){return this._events[e]},scheduler.setEvent=function(e,t){t.id||(t.id=e),this._events[e]=t},scheduler.for_rendered=function(e,t){for(var s=this._rendered.length-1;s>=0;s--)this._rendered[s].getAttribute("event_id")==e&&t(this._rendered[s],s)},scheduler.changeEventId=function(e,t){if(e!=t){var s=this._events[e];s&&(s.id=t,this._events[t]=s,delete this._events[e]),this.for_rendered(e,function(e){e.setAttribute("event_id",t)}),this._select_id==e&&(this._select_id=t),this._edit_id==e&&(this._edit_id=t),this.callEvent("onEventIdChange",[e,t])
+}},function(){for(var e=["text","Text","start_date","StartDate","end_date","EndDate"],t=function(e){return function(t){return scheduler.getEvent(t)[e]}},s=function(e){return function(t,s){var i=scheduler.getEvent(t);i[e]=s,i._changed=!0,i._timed=this.isOneDayEvent(i),scheduler.event_updated(i,!0)}},i=0;i<e.length;i+=2)scheduler["getEvent"+e[i+1]]=t(e[i]),scheduler["setEvent"+e[i+1]]=s(e[i])}(),scheduler.event_updated=function(e){this.is_visible_events(e)?this.render_view_data():this.clear_event(e.id)
+},scheduler.is_visible_events=function(e){var t=e.start_date<this._max_date&&this._min_date<e.end_date;if(t){var s=e.end_date.getHours()>=this.config.first_hour&&e.end_date.getHours()<this.config.last_hour||e.start_date.getHours()>=this.config.first_hour&&e.start_date.getHours()<this.config.last_hour;if(s)return!0;var i=(e.end_date.valueOf()-e.start_date.valueOf())/36e5,n=24-(this.config.last_hour-this.config.first_hour);return i>n}return!1},scheduler.isOneDayEvent=function(e){var t=e.end_date.getDate()-e.start_date.getDate();
+return t?(0>t&&(t=Math.ceil((e.end_date.valueOf()-e.start_date.valueOf())/864e5)),1==t&&!e.end_date.getHours()&&!e.end_date.getMinutes()&&(e.start_date.getHours()||e.start_date.getMinutes())):e.start_date.getMonth()==e.end_date.getMonth()&&e.start_date.getFullYear()==e.end_date.getFullYear()},scheduler.get_visible_events=function(e){var t=[];for(var s in this._events)this.is_visible_events(this._events[s])&&(!e||this._events[s]._timed)&&this.filter_event(s,this._events[s])&&t.push(this._events[s]);
+return t},scheduler.filter_event=function(e,t){var s=this["filter_"+this._mode];return s?s(e,t):!0},scheduler._is_main_area_event=function(e){return!!e._timed},scheduler.render_view_data=function(e,t){if(!e){if(this._not_render)return void(this._render_wait=!0);this._render_wait=!1,this.clear_view(),e=this.get_visible_events(!(this._table_view||this.config.multi_day))}for(var s=0,i=e.length;i>s;s++)this._recalculate_timed(e[s]);if(this.config.multi_day&&!this._table_view){for(var n=[],a=[],s=0;s<e.length;s++)this._is_main_area_event(e[s])?n.push(e[s]):a.push(e[s]);
+this._rendered_location=this._els.dhx_multi_day[0],this._table_view=!0,this.render_data(a,t),this._table_view=!1,this._rendered_location=this._els.dhx_cal_data[0],this._table_view=!1,this.render_data(n,t)}else this._rendered_location=this._els.dhx_cal_data[0],this.render_data(e,t)},scheduler._view_month_day=function(e){var t=scheduler.getActionData(e).date;scheduler.callEvent("onViewMoreClick",[t])&&scheduler.setCurrentView(t,"day")},scheduler._render_month_link=function(e){for(var t=this._rendered_location,s=this._lame_clone(e),i=e._sday;i<e._eday;i++){s._sday=i,s._eday=i+1;
+var n=scheduler.date,a=scheduler._min_date;a=n.add(a,s._sweek,"week"),a=n.add(a,s._sday,"day");var r=scheduler.getEvents(a,n.add(a,1,"day")).length,d=this._get_event_bar_pos(s),o=d.x2-d.x,l=document.createElement("div");l.onclick=function(e){scheduler._view_month_day(e||event)},l.className="dhx_month_link",l.style.top=d.y+"px",l.style.left=d.x+"px",l.style.width=o+"px",l.innerHTML=scheduler.templates.month_events_link(a,r),this._rendered.push(l),t.appendChild(l)}},scheduler._recalculate_timed=function(e){if(e){var t;
+t="object"!=typeof e?this._events[e]:e,t&&(t._timed=scheduler.isOneDayEvent(t))}},scheduler.attachEvent("onEventChanged",scheduler._recalculate_timed),scheduler.attachEvent("onEventAdded",scheduler._recalculate_timed),scheduler.render_data=function(e,t){e=this._pre_render_events(e,t);for(var s=0;s<e.length;s++)if(this._table_view)if("month"!=scheduler._mode)this.render_event_bar(e[s]);else{var i=scheduler.config.max_month_events;i!==1*i||e[s]._sorder<i?this.render_event_bar(e[s]):void 0!==i&&e[s]._sorder==i&&scheduler._render_month_link(e[s])
+}else this.render_event(e[s])},scheduler._pre_render_events=function(e,t){var s=this.xy.bar_height,i=this._colsS.heights,n=this._colsS.heights=[0,0,0,0,0,0,0],a=this._els.dhx_cal_data[0];if(e=this._table_view?this._pre_render_events_table(e,t):this._pre_render_events_line(e,t),this._table_view)if(t)this._colsS.heights=i;else{var r=a.firstChild;if(r.rows){for(var d=0;d<r.rows.length;d++){n[d]++;var o=this._colsS.height-this.xy.month_head_height;if(n[d]*s>o){var l=r.rows[d].cells,h=o;1*this.config.max_month_events!==this.config.max_month_events||n[d]<=this.config.max_month_events?h=n[d]*s:(this.config.max_month_events+1)*s>o&&(h=(this.config.max_month_events+1)*s);
+for(var _=0;_<l.length;_++)l[_].childNodes[1].style.height=h+"px";n[d]=(n[d-1]||0)+l[0].offsetHeight}n[d]=(n[d-1]||0)+r.rows[d].cells[0].offsetHeight}if(n.unshift(0),r.parentNode.offsetHeight<r.parentNode.scrollHeight&&!scheduler._colsS.scroll_fix&&scheduler.xy.scroll_width){var c=scheduler._colsS,u=c[c.col_length],f=c.heights.slice();u-=scheduler.xy.scroll_width||0,this._calc_scale_sizes(u,this._min_date,this._max_date),scheduler._colsS.heights=f,this.set_xy(this._els.dhx_cal_header[0],u,this.xy.scale_height),scheduler._render_scales(this._els.dhx_cal_header[0]),scheduler._render_month_scale(this._els.dhx_cal_data[0],this._get_timeunit_start(),this._min_date),c.scroll_fix=!0
+}}else if(e.length||"visible"!=this._els.dhx_multi_day[0].style.visibility||(n[0]=-1),e.length||-1==n[0]){var g=(r.parentNode.childNodes,(n[0]+1)*s+1),v=g,m=g+"px";this.config.multi_day_height_limit&&(v=Math.min(g,this.config.multi_day_height_limit),m=v+"px"),a.style.top=this._els.dhx_cal_navline[0].offsetHeight+this._els.dhx_cal_header[0].offsetHeight+v+"px",a.style.height=this._obj.offsetHeight-parseInt(a.style.top,10)-(this.xy.margin_top||0)+"px";var p=this._els.dhx_multi_day[0];p.style.height=m,p.style.visibility=-1==n[0]?"hidden":"visible";
+var x=this._els.dhx_multi_day[1];x.style.height=m,x.style.visibility=-1==n[0]?"hidden":"visible",x.className=n[0]?"dhx_multi_day_icon":"dhx_multi_day_icon_small",this._dy_shift=(n[0]+1)*s,n[0]=0,v!=g&&(a.style.top=parseInt(a.style.top)+2+"px",p.style.overflowY="auto",p.style.width=parseInt(p.style.width)-2+"px",x.style.position="fixed",x.style.top="",x.style.left="")}}return e},scheduler._get_event_sday=function(e){return Math.floor((e.start_date.valueOf()-this._min_date.valueOf())/864e5)},scheduler._get_event_mapped_end_date=function(e){var t=e.end_date;
+if(this.config.separate_short_events){var s=(e.end_date-e.start_date)/6e4;s<this._min_mapped_duration&&(t=this.date.add(t,this._min_mapped_duration-s,"minute"))}return t},scheduler._pre_render_events_line=function(e,t){e.sort(function(e,t){return e.start_date.valueOf()==t.start_date.valueOf()?e.id>t.id?1:-1:e.start_date>t.start_date?1:-1});var s=[],i=[];this._min_mapped_duration=Math.ceil(60*this.xy.min_event_height/this.config.hour_size_px);for(var n=0;n<e.length;n++){var a=e[n],r=a.start_date,d=a.end_date,o=r.getHours(),l=d.getHours();
+if(a._sday=this._get_event_sday(a),this._ignores[a._sday])e.splice(n,1),n--;else{if(s[a._sday]||(s[a._sday]=[]),!t){a._inner=!1;for(var h=s[a._sday];h.length;){var _=h[h.length-1],c=this._get_event_mapped_end_date(_);if(!(c.valueOf()<=a.start_date.valueOf()))break;h.splice(h.length-1,1)}for(var u=h.length,f=!1,g=0;g<h.length;g++){var _=h[g],c=this._get_event_mapped_end_date(_);if(c.valueOf()<=a.start_date.valueOf()){f=!0,a._sorder=_._sorder,u=g,a._inner=!0;break}}if(h.length&&(h[h.length-1]._inner=!0),!f)if(h.length)if(h.length<=h[h.length-1]._sorder){if(h[h.length-1]._sorder)for(g=0;g<h.length;g++){for(var v=!1,m=0;m<h.length;m++)if(h[m]._sorder==g){v=!0;
+break}if(!v){a._sorder=g;break}}else a._sorder=0;a._inner=!0}else{var p=h[0]._sorder;for(g=1;g<h.length;g++)h[g]._sorder>p&&(p=h[g]._sorder);a._sorder=p+1,a._inner=!1}else a._sorder=0;h.splice(u,u==h.length?0:1,a),h.length>(h.max_count||0)?(h.max_count=h.length,a._count=h.length):a._count=a._count?a._count:1}(o<this.config.first_hour||l>=this.config.last_hour)&&(i.push(a),e[n]=a=this._copy_event(a),o<this.config.first_hour&&(a.start_date.setHours(this.config.first_hour),a.start_date.setMinutes(0)),l>=this.config.last_hour&&(a.end_date.setMinutes(0),a.end_date.setHours(this.config.last_hour)),a.start_date>a.end_date||o==this.config.last_hour)&&(e.splice(n,1),n--)
+}}if(!t){for(var n=0;n<e.length;n++)e[n]._count=s[e[n]._sday].max_count;for(var n=0;n<i.length;n++)i[n]._count=s[i[n]._sday].max_count}return e},scheduler._time_order=function(e){e.sort(function(e,t){return e.start_date.valueOf()==t.start_date.valueOf()?e._timed&&!t._timed?1:!e._timed&&t._timed?-1:e.id>t.id?1:-1:e.start_date>t.start_date?1:-1})},scheduler._pre_render_events_table=function(e,t){this._time_order(e);for(var s,i=[],n=[[],[],[],[],[],[],[]],a=this._colsS.heights,r=this._cols.length,d={},o=0;o<e.length;o++){var l=e[o],h=l.id;
+d[h]||(d[h]={first_chunk:!0,last_chunk:!0});var _=d[h],c=s||l.start_date,u=l.end_date;c<this._min_date&&(_.first_chunk=!1,c=this._min_date),u>this._max_date&&(_.last_chunk=!1,u=this._max_date);var f=this.locate_holder_day(c,!1,l);if(l._sday=f%r,!this._ignores[l._sday]||!l._timed){var g=this.locate_holder_day(u,!0,l)||r;l._eday=g%r||r,l._length=g-f,l._sweek=Math.floor((this._correct_shift(c.valueOf(),1)-this._min_date.valueOf())/(864e5*r));var v,m=n[l._sweek];for(v=0;v<m.length&&!(m[v]._eday<=l._sday);v++);if(l._sorder&&t||(l._sorder=v),l._sday+l._length<=r)s=null,i.push(l),m[v]=l,a[l._sweek]=m.length-1,l._first_chunk=_.first_chunk,l._last_chunk=_.last_chunk;
+else{var p=this._copy_event(l);p.id=l.id,p._length=r-l._sday,p._eday=r,p._sday=l._sday,p._sweek=l._sweek,p._sorder=l._sorder,p.end_date=this.date.add(c,p._length,"day"),p._first_chunk=_.first_chunk,_.first_chunk&&(_.first_chunk=!1),i.push(p),m[v]=p,s=p.end_date,a[l._sweek]=m.length-1,o--}}}return i},scheduler._copy_dummy=function(){var e=new Date(this.start_date),t=new Date(this.end_date);this.start_date=e,this.end_date=t},scheduler._copy_event=function(e){return this._copy_dummy.prototype=e,new this._copy_dummy
+},scheduler._rendered=[],scheduler.clear_view=function(){for(var e=0;e<this._rendered.length;e++){var t=this._rendered[e];t.parentNode&&t.parentNode.removeChild(t)}this._rendered=[]},scheduler.updateEvent=function(e){var t=this.getEvent(e);this.clear_event(e),t&&this.is_visible_events(t)&&this.filter_event(e,t)&&(this._table_view||this.config.multi_day||t._timed)&&(this.config.update_render?this.render_view_data():this.render_view_data([t],!0))},scheduler.clear_event=function(e){this.for_rendered(e,function(e,t){e.parentNode&&e.parentNode.removeChild(e),scheduler._rendered.splice(t,1)
+})},scheduler._y_from_date=function(e){var t=60*e.getHours()+e.getMinutes();return Math.round((60*t*1e3-60*this.config.first_hour*60*1e3)*this.config.hour_size_px/36e5)%(24*this.config.hour_size_px)},scheduler._calc_event_y=function(e,t){t=t||0;var s=60*e.start_date.getHours()+e.start_date.getMinutes(),i=60*e.end_date.getHours()+e.end_date.getMinutes()||60*scheduler.config.last_hour,n=this._y_from_date(e.start_date),a=Math.max(t,(i-s)*this.config.hour_size_px/60);return{top:n,height:a}},scheduler.render_event=function(e){var t=scheduler.xy.menu_width,s=this.config.use_select_menu_space?0:t;
+if(!(e._sday<0)){var i=scheduler.locate_holder(e._sday);if(i){var n=this._calc_event_y(e,scheduler.xy.min_event_height),a=n.top,r=n.height,d=e._count||1,o=e._sorder||0,l=Math.floor((i.clientWidth-s)/d),h=o*l+1;if(e._inner||(l*=d-o),this.config.cascade_event_display){var _=this.config.cascade_event_count,c=this.config.cascade_event_margin;h=o%_*c;var u=e._inner?(d-o-1)%_*c/2:0;l=Math.floor(i.clientWidth-s-h-u)}var f=this._render_v_bar(e,s+h,a,l,r,e._text_style,scheduler.templates.event_header(e.start_date,e.end_date,e),scheduler.templates.event_text(e.start_date,e.end_date,e));
+if(this._rendered.push(f),i.appendChild(f),h=h+parseInt(i.style.left,10)+s,this._edit_id==e.id){f.style.zIndex=1,l=Math.max(l-4,scheduler.xy.editor_width),f=document.createElement("DIV"),f.setAttribute("event_id",e.id),this.set_xy(f,l,r-20,h,a+14),f.className="dhx_cal_event dhx_cal_editor";var g=scheduler.templates.event_class(e.start_date,e.end_date,e);g&&(f.className+=" "+g);var v=document.createElement("DIV");this.set_xy(v,l-6,r-26),v.style.cssText+=";margin:2px 2px 2px 2px;overflow:hidden;",f.appendChild(v),this._els.dhx_cal_data[0].appendChild(f),this._rendered.push(f),v.innerHTML="<textarea class='dhx_cal_editor'>"+e.text+"</textarea>",this._quirks7&&(v.firstChild.style.height=r-12+"px"),this._editor=v.firstChild,this._editor.onkeydown=function(e){if((e||event).shiftKey)return!0;
+var t=(e||event).keyCode;t==scheduler.keys.edit_save&&scheduler.editStop(!0),t==scheduler.keys.edit_cancel&&scheduler.editStop(!1)},this._editor.onselectstart=function(e){return(e||event).cancelBubble=!0,!0},scheduler._focus(v.firstChild,!0),this._els.dhx_cal_data[0].scrollLeft=0}if(0!==this.xy.menu_width&&this._select_id==e.id){this.config.cascade_event_display&&this._drag_mode&&(f.style.zIndex=1);for(var m=this.config["icons_"+(this._edit_id==e.id?"edit":"select")],p="",x=e.color?"background-color: "+e.color+";":"",b=e.textColor?"color: "+e.textColor+";":"",y=0;y<m.length;y++)p+="<div class='dhx_menu_icon "+m[y]+"' style='"+x+b+"' title='"+this.locale.labels[m[y]]+"'></div>";
+var w=this._render_v_bar(e,h-t+1,a,t,20*m.length+26-2,"","<div style='"+x+b+"' class='dhx_menu_head'></div>",p,!0);w.style.left=h-t+1,this._els.dhx_cal_data[0].appendChild(w),this._rendered.push(w)}this.config.drag_highlight&&this._drag_id==e.id&&this.highlightEventPosition(e)}}},scheduler._render_v_bar=function(e,t,s,i,n,a,r,d,o){var l=document.createElement("DIV"),h=e.id,_=o?"dhx_cal_event dhx_cal_select_menu":"dhx_cal_event",c=scheduler.templates.event_class(e.start_date,e.end_date,e);c&&(_=_+" "+c);
+var u=e.color?"background:"+e.color+";":"",f=e.textColor?"color:"+e.textColor+";":"",g='<div event_id="'+h+'" class="'+_+'" style="position:absolute; top:'+s+"px; left:"+t+"px; width:"+(i-4)+"px; height:"+n+"px;"+(a||"")+'"></div>';l.innerHTML=g;var v=l.cloneNode(!0).firstChild;if(!o&&scheduler.renderEvent(v,e,i,n,r,d))return v;v=l.firstChild;var m='<div class="dhx_event_move dhx_header" style=" width:'+(i-6)+"px;"+u+'" >&nbsp;</div>';m+='<div class="dhx_event_move dhx_title" style="'+u+f+'">'+r+"</div>",m+='<div class="dhx_body" style=" width:'+(i-(this._quirks?4:14))+"px; height:"+(n-(this._quirks?20:30)+1)+"px;"+u+f+'">'+d+"</div>";
+var p="dhx_event_resize dhx_footer";return o&&(p="dhx_resize_denied "+p),m+='<div class="'+p+'" style=" width:'+(i-8)+"px;"+(o?" margin-top:-1px;":"")+u+f+'" ></div>',v.innerHTML=m,v},scheduler.renderEvent=function(){return!1},scheduler.locate_holder=function(e){return"day"==this._mode?this._els.dhx_cal_data[0].firstChild:this._els.dhx_cal_data[0].childNodes[e]},scheduler.locate_holder_day=function(e,t){var s=Math.floor((this._correct_shift(e,1)-this._min_date)/864e5);return t&&this.date.time_part(e)&&s++,s
+},scheduler._get_dnd_order=function(e,t,s){if(!this._drag_event)return e;this._drag_event._orig_sorder?e=this._drag_event._orig_sorder:this._drag_event._orig_sorder=e;for(var i=t*e;i+t>s;)e--,i-=t;return e=Math.max(e,0)},scheduler._get_event_bar_pos=function(e){var t=this._colsS[e._sday],s=this._colsS[e._eday];s==t&&(s=this._colsS[e._eday+1]);var i=this.xy.bar_height,n=e._sorder;if(e.id==this._drag_id){var a=this._colsS.heights[e._sweek+1]-this._colsS.heights[e._sweek]-this.xy.month_head_height;n=scheduler._get_dnd_order(n,i,a)
+}var r=n*i,d=this._colsS.heights[e._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+r;return{x:t,x2:s,y:d}},scheduler.render_event_bar=function(e){var t=this._rendered_location,s=this._get_event_bar_pos(e),i=s.y,n=s.x,a=s.x2,r="";if(a){var d=scheduler.config.resize_month_events&&"month"==this._mode&&(!e._timed||scheduler.config.resize_month_timed),o=document.createElement("DIV"),l=e.hasOwnProperty("_first_chunk")&&e._first_chunk,h=e.hasOwnProperty("_last_chunk")&&e._last_chunk,_=d&&(e._timed||l),c=d&&(e._timed||h),u="dhx_cal_event_clear";
+(!e._timed||d)&&(u="dhx_cal_event_line"),l&&(u+=" dhx_cal_event_line_start"),h&&(u+=" dhx_cal_event_line_end"),_&&(r+="<div class='dhx_event_resize dhx_event_resize_start'></div>"),c&&(r+="<div class='dhx_event_resize dhx_event_resize_end'></div>");var f=scheduler.templates.event_class(e.start_date,e.end_date,e);f&&(u+=" "+f);var g=e.color?"background:"+e.color+";":"",v=e.textColor?"color:"+e.textColor+";":"",m=["position:absolute","top:"+i+"px","left:"+n+"px","width:"+(a-n-15)+"px",v,g,e._text_style||""].join(";"),p='<div event_id="'+e.id+'" class="'+u+'" style="'+m+'">';
+d&&(p+=r),"month"==scheduler.getState().mode&&(e=scheduler.getEvent(e.id)),e._timed&&(p+=scheduler.templates.event_bar_date(e.start_date,e.end_date,e)),p+=scheduler.templates.event_bar_text(e.start_date,e.end_date,e)+"</div>",p+="</div>",o.innerHTML=p,this._rendered.push(o.firstChild),t.appendChild(o.firstChild)}},scheduler._locate_event=function(e){for(var t=null;e&&!t&&e.getAttribute;)t=e.getAttribute("event_id"),e=e.parentNode;return t},scheduler.edit=function(e){this._edit_id!=e&&(this.editStop(!1,e),this._edit_id=e,this.updateEvent(e))
+},scheduler.editStop=function(e,t){if(!t||this._edit_id!=t){var s=this.getEvent(this._edit_id);s&&(e&&(s.text=this._editor.value),this._edit_id=null,this._editor=null,this.updateEvent(s.id),this._edit_stop_event(s,e))}},scheduler._edit_stop_event=function(e,t){this._new_event?(t?this.callEvent("onEventAdded",[e.id,e]):e&&this.deleteEvent(e.id,!0),this._new_event=null):t&&this.callEvent("onEventChanged",[e.id,e])},scheduler.getEvents=function(e,t){var s=[];for(var i in this._events){var n=this._events[i];
+n&&(!e&&!t||n.start_date<t&&n.end_date>e)&&s.push(n)}return s},scheduler.getRenderedEvent=function(e){if(e){for(var t=scheduler._rendered,s=0;s<t.length;s++){var i=t[s];if(i.getAttribute("event_id")==e)return i}return null}},scheduler.showEvent=function(e,t){var s="number"==typeof e||"string"==typeof e?scheduler.getEvent(e):e;if(t=t||scheduler._mode,s&&(!this.checkEvent("onBeforeEventDisplay")||this.callEvent("onBeforeEventDisplay",[s,t]))){var i=scheduler.config.scroll_hour;scheduler.config.scroll_hour=s.start_date.getHours();
+var n=scheduler.config.preserve_scroll;scheduler.config.preserve_scroll=!1;var a=s.color,r=s.textColor;scheduler.config.highlight_displayed_event&&(s.color=scheduler.config.displayed_event_color,s.textColor=scheduler.config.displayed_event_text_color),scheduler.setCurrentView(new Date(s.start_date),t),s.color=a,s.textColor=r,scheduler.config.scroll_hour=i,scheduler.config.preserve_scroll=n,scheduler.matrix&&scheduler.matrix[t]&&(scheduler._els.dhx_cal_data[0].scrollTop=getAbsoluteTop(scheduler.getRenderedEvent(s.id))-getAbsoluteTop(scheduler._els.dhx_cal_data[0])-20),scheduler.callEvent("onAfterEventDisplay",[s,t])
+}},scheduler._append_drag_marker=function(e){if(!e.parentNode){var t=scheduler._els.dhx_cal_data[0],s=t.lastChild;s.className&&s.className.indexOf("dhx_scale_holder")<0&&s.previousSibling&&(s=s.previousSibling),s&&0===s.className.indexOf("dhx_scale_holder")&&s.appendChild(e)}},scheduler._update_marker_position=function(e,t){var s=scheduler._calc_event_y(t,0);e.style.top=s.top+"px",e.style.height=s.height+"px"},scheduler.highlightEventPosition=function(e){var t=document.createElement("div");t.setAttribute("event_id",e.id),this._rendered.push(t),this._update_marker_position(t,e);
+var s=this.templates.drag_marker_class(e.start_date,e.end_date,e),i=this.templates.drag_marker_content(e.start_date,e.end_date,e);t.className="dhx_drag_marker",s&&(t.className+=" "+s),i&&(t.innerHTML=i),this._append_drag_marker(t)},scheduler._loaded={},scheduler._load=function(e,t){if(e=e||this._load_url){e+=(-1==e.indexOf("?")?"?":"&")+"timeshift="+(new Date).getTimezoneOffset(),this.config.prevent_cache&&(e+="&uid="+this.uid());var s;if(t=t||this._date,this._load_mode){var i=this.templates.load_format;
+for(t=this.date[this._load_mode+"_start"](new Date(t.valueOf()));t>this._min_date;)t=this.date.add(t,-1,this._load_mode);s=t;for(var n=!0;s<this._max_date;)s=this.date.add(s,1,this._load_mode),this._loaded[i(t)]&&n?t=this.date.add(t,1,this._load_mode):n=!1;var a=s;do s=a,a=this.date.add(s,-1,this._load_mode);while(a>t&&this._loaded[i(a)]);if(t>=s)return!1;for(dhtmlxAjax.get(e+"&from="+i(t)+"&to="+i(s),function(e){scheduler.on_load(e)});s>t;)this._loaded[i(t)]=!0,t=this.date.add(t,1,this._load_mode)
+}else dhtmlxAjax.get(e,function(e){scheduler.on_load(e)});return this.callEvent("onXLS",[]),!0}},scheduler.on_load=function(e){var t;t=this._process&&"xml"!=this._process?this[this._process].parse(e.xmlDoc.responseText):this._magic_parser(e),scheduler._process_loading(t),this.callEvent("onXLE",[])},scheduler._process_loading=function(e){this._loading=!0,this._not_render=!0;for(var t=0;t<e.length;t++)this.callEvent("onEventLoading",[e[t]])&&this.addEvent(e[t]);this._not_render=!1,this._render_wait&&this.render_view_data(),this._loading=!1,this._after_call&&this._after_call(),this._after_call=null
+},scheduler._init_event=function(e){e.text=e.text||e._tagvalue||"",e.start_date=scheduler._init_date(e.start_date),e.end_date=scheduler._init_date(e.end_date)},scheduler._init_date=function(e){return e?"string"==typeof e?scheduler.templates.xml_date(e):new Date(e):null},scheduler.json={},scheduler.json.parse=function(data){"string"==typeof data&&(scheduler._temp=eval("("+data+")"),data=scheduler._temp?scheduler._temp.data||scheduler._temp.d||scheduler._temp:[]),data.dhx_security&&(dhtmlx.security_key=data.dhx_security);
+var collections=scheduler._temp&&scheduler._temp.collections?scheduler._temp.collections:{},collections_loaded=!1;for(var key in collections)if(collections.hasOwnProperty(key)){collections_loaded=!0;var collection=collections[key],arr=scheduler.serverList[key];if(!arr)continue;arr.splice(0,arr.length);for(var j=0;j<collection.length;j++){var option=collection[j],obj={key:option.value,label:option.label};for(var option_key in option)if(option.hasOwnProperty(option_key)){if("value"==option_key||"label"==option_key)continue;
+obj[option_key]=option[option_key]}arr.push(obj)}}collections_loaded&&scheduler.callEvent("onOptionsLoad",[]);for(var evs=[],i=0;i<data.length;i++){var event=data[i];scheduler._init_event(event),evs.push(event)}return evs},scheduler.parse=function(e,t){this._process=t,this.on_load({xmlDoc:{responseText:e}})},scheduler.load=function(e,t){"string"==typeof t&&(this._process=t,t=arguments[2]),this._load_url=e,this._after_call=t,this._load(e,this._date)},scheduler.setLoadMode=function(e){"all"==e&&(e=""),this._load_mode=e
+},scheduler.serverList=function(e,t){return t?(this.serverList[e]=t.slice(0),this.serverList[e]):(this.serverList[e]=this.serverList[e]||[],this.serverList[e])},scheduler._userdata={},scheduler._magic_parser=function(e){var t;if(!e.getXMLTopNode){var s=e.xmlDoc.responseText;e=new dtmlXMLLoaderObject(function(){}),e.loadXMLString(s)}if(t=e.getXMLTopNode("data"),"data"!=t.tagName)return[];var i=t.getAttribute("dhx_security");i&&(dhtmlx.security_key=i);for(var n=e.doXPath("//coll_options"),a=0;a<n.length;a++){var r=n[a].getAttribute("for"),d=this.serverList[r];
+if(d){d.splice(0,d.length);for(var o=e.doXPath(".//item",n[a]),l=0;l<o.length;l++){for(var h=o[l],_=h.attributes,c={key:o[l].getAttribute("value"),label:o[l].getAttribute("label")},u=0;u<_.length;u++){var f=_[u];"value"!=f.nodeName&&"label"!=f.nodeName&&(c[f.nodeName]=f.nodeValue)}d.push(c)}}}n.length&&scheduler.callEvent("onOptionsLoad",[]);for(var g=e.doXPath("//userdata"),a=0;a<g.length;a++){var v=this._xmlNodeToJSON(g[a]);this._userdata[v.name]=v.text}var m=[];t=e.doXPath("//event");for(var a=0;a<t.length;a++){var p=m[a]=this._xmlNodeToJSON(t[a]);
+scheduler._init_event(p)}return m},scheduler._xmlNodeToJSON=function(e){for(var t={},s=0;s<e.attributes.length;s++)t[e.attributes[s].name]=e.attributes[s].value;for(var s=0;s<e.childNodes.length;s++){var i=e.childNodes[s];1==i.nodeType&&(t[i.tagName]=i.firstChild?i.firstChild.nodeValue:"")}return t.text||(t.text=e.firstChild?e.firstChild.nodeValue:""),t},scheduler.attachEvent("onXLS",function(){if(this.config.show_loading===!0){var e;e=this.config.show_loading=document.createElement("DIV"),e.className="dhx_loading",e.style.left=Math.round((this._x-128)/2)+"px",e.style.top=Math.round((this._y-15)/2)+"px",this._obj.appendChild(e)
+}}),scheduler.attachEvent("onXLE",function(){var e=this.config.show_loading;e&&"object"==typeof e&&(this._obj.removeChild(e),this.config.show_loading=!0)}),scheduler.ical={parse:function(e){var t=e.match(RegExp(this.c_start+"[^\f]*"+this.c_end,""));if(t.length){t[0]=t[0].replace(/[\r\n]+(?=[a-z \t])/g," "),t[0]=t[0].replace(/\;[^:\r\n]*:/g,":");for(var s,i=[],n=RegExp("(?:"+this.e_start+")([^\f]*?)(?:"+this.e_end+")","g");null!==(s=n.exec(t));){for(var a,r={},d=/[^\r\n]+[\r\n]+/g;null!==(a=d.exec(s[1]));)this.parse_param(a.toString(),r);
+r.uid&&!r.id&&(r.id=r.uid),i.push(r)}return i}},parse_param:function(e,t){var s=e.indexOf(":");if(-1!=s){var i=e.substr(0,s).toLowerCase(),n=e.substr(s+1).replace(/\\\,/g,",").replace(/[\r\n]+$/,"");"summary"==i?i="text":"dtstart"==i?(i="start_date",n=this.parse_date(n,0,0)):"dtend"==i&&(i="end_date",n=this.parse_date(n,0,0)),t[i]=n}},parse_date:function(e,t,s){var i=e.split("T");i[1]&&(t=i[1].substr(0,2),s=i[1].substr(2,2));var n=i[0].substr(0,4),a=parseInt(i[0].substr(4,2),10)-1,r=i[0].substr(6,2);
+return scheduler.config.server_utc&&!i[1]?new Date(Date.UTC(n,a,r,t,s)):new Date(n,a,r,t,s)},c_start:"BEGIN:VCALENDAR",e_start:"BEGIN:VEVENT",e_end:"END:VEVENT",c_end:"END:VCALENDAR"},scheduler._lightbox_controls={},scheduler.formSection=function(e){var t=this.config.lightbox.sections,s=0;for(s;s<t.length&&t[s].name!=e;s++);var i=t[s];scheduler._lightbox||scheduler.getLightbox();var n=document.getElementById(i.id),a=n.nextSibling,r={section:i,header:n,node:a,getValue:function(e){return scheduler.form_blocks[i.type].get_value(a,e||{},i)
+},setValue:function(e,t){return scheduler.form_blocks[i.type].set_value(a,e,t||{},i)}},d=scheduler._lightbox_controls["get_"+i.type+"_control"];return d?d(r):r},scheduler._lightbox_controls.get_template_control=function(e){return e.control=e.node,e},scheduler._lightbox_controls.get_select_control=function(e){return e.control=e.node.getElementsByTagName("select")[0],e},scheduler._lightbox_controls.get_textarea_control=function(e){return e.control=e.node.getElementsByTagName("textarea")[0],e},scheduler._lightbox_controls.get_time_control=function(e){return e.control=e.node.getElementsByTagName("select"),e
+},scheduler.form_blocks={template:{render:function(e){var t=(e.height||"30")+"px";return"<div class='dhx_cal_ltext dhx_cal_template' style='height:"+t+";'></div>"},set_value:function(e,t){e.innerHTML=t||""},get_value:function(e){return e.innerHTML||""},focus:function(){}},textarea:{render:function(e){var t=(e.height||"130")+"px";return"<div class='dhx_cal_ltext' style='height:"+t+";'><textarea></textarea></div>"},set_value:function(e,t){e.firstChild.value=t||""},get_value:function(e){return e.firstChild.value
+},focus:function(e){var t=e.firstChild;scheduler._focus(t,!0)}},select:{render:function(e){for(var t=(e.height||"23")+"px",s="<div class='dhx_cal_ltext' style='height:"+t+";'><select style='width:100%;'>",i=0;i<e.options.length;i++)s+="<option value='"+e.options[i].key+"'>"+e.options[i].label+"</option>";return s+="</select></div>"},set_value:function(e,t,s,i){var n=e.firstChild;!n._dhx_onchange&&i.onchange&&(n.onchange=i.onchange,n._dhx_onchange=!0),"undefined"==typeof t&&(t=(n.options[0]||{}).value),n.value=t||""
+},get_value:function(e){return e.firstChild.value},focus:function(e){var t=e.firstChild;scheduler._focus(t,!0)}},time:{render:function(e){e.time_format||(e.time_format=["%H:%i","%d","%m","%Y"]),e._time_format_order={};var t=e.time_format,s=scheduler.config,i=this.date.date_part(scheduler._currentDate()),n=1440,a=0;scheduler.config.limit_time_select&&(n=60*s.last_hour+1,a=60*s.first_hour,i.setHours(s.first_hour));for(var r="",d=0;d<t.length;d++){var o=t[d];switch(d>0&&(r+=" "),o){case"%Y":e._time_format_order[3]=d,r+="<select>";
+for(var l=i.getFullYear()-5,h=0;10>h;h++)r+="<option value='"+(l+h)+"'>"+(l+h)+"</option>";r+="</select> ";break;case"%m":e._time_format_order[2]=d,r+="<select>";for(var h=0;12>h;h++)r+="<option value='"+h+"'>"+this.locale.date.month_full[h]+"</option>";r+="</select>";break;case"%d":e._time_format_order[1]=d,r+="<select>";for(var h=1;32>h;h++)r+="<option value='"+h+"'>"+h+"</option>";r+="</select>";break;case"%H:%i":e._time_format_order[0]=d,r+="<select>";var h=a,_=i.getDate();for(e._time_values=[];n>h;){var c=this.templates.time_picker(i);
+r+="<option value='"+h+"'>"+c+"</option>",e._time_values.push(h),i.setTime(i.valueOf()+60*this.config.time_step*1e3);var u=i.getDate()!=_?1:0;h=24*u*60+60*i.getHours()+i.getMinutes()}r+="</select>"}}return"<div style='height:30px;padding-top:0px;font-size:inherit;' class='dhx_section_time'>"+r+"<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>"+r+"</div>"},set_value:function(e,t,s,i){function n(e,t,s){for(var n=i._time_values,a=60*s.getHours()+s.getMinutes(),r=a,d=!1,o=0;o<n.length;o++){var h=n[o];
+if(h===a){d=!0;break}a>h&&(r=h)}e[t+l[0]].value=d?a:r,d||r||(e[t+l[0]].selectedIndex=-1),e[t+l[1]].value=s.getDate(),e[t+l[2]].value=s.getMonth(),e[t+l[3]].value=s.getFullYear()}var a,r,d=scheduler.config,o=e.getElementsByTagName("select"),l=i._time_format_order;if(d.full_day){if(!e._full_day){var h="<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> "+scheduler.locale.labels.full_day+"&nbsp;</label></input>";scheduler.config.wide_form||(h=e.previousSibling.innerHTML+h),e.previousSibling.innerHTML=h,e._full_day=!0
+}var _=e.previousSibling.getElementsByTagName("input")[0];_.checked=0===scheduler.date.time_part(s.start_date)&&0===scheduler.date.time_part(s.end_date),o[l[0]].disabled=_.checked,o[l[0]+o.length/2].disabled=_.checked,_.onclick=function(){if(_.checked){var t={};scheduler.form_blocks.time.get_value(e,t,i),a=scheduler.date.date_part(t.start_date),r=scheduler.date.date_part(t.end_date),(+r==+a||+r>=+a&&(0!==s.end_date.getHours()||0!==s.end_date.getMinutes()))&&(r=scheduler.date.add(r,1,"day"))}o[l[0]].disabled=_.checked,o[l[0]+o.length/2].disabled=_.checked,n(o,0,a||s.start_date),n(o,4,r||s.end_date)
+}}if(d.auto_end_date&&d.event_duration)for(var c=function(){a=new Date(o[l[3]].value,o[l[2]].value,o[l[1]].value,0,o[l[0]].value),r=new Date(a.getTime()+60*scheduler.config.event_duration*1e3),n(o,4,r)},u=0;4>u;u++)o[u].onchange=c;n(o,0,s.start_date),n(o,4,s.end_date)},get_value:function(e,t,s){var i=e.getElementsByTagName("select"),n=s._time_format_order;return t.start_date=new Date(i[n[3]].value,i[n[2]].value,i[n[1]].value,0,i[n[0]].value),t.end_date=new Date(i[n[3]+4].value,i[n[2]+4].value,i[n[1]+4].value,0,i[n[0]+4].value),t.end_date<=t.start_date&&(t.end_date=scheduler.date.add(t.start_date,scheduler.config.time_step,"minute")),{start_date:new Date(t.start_date),end_date:new Date(t.end_date)}
+},focus:function(e){scheduler._focus(e.getElementsByTagName("select")[0])}}},scheduler.showCover=function(e){if(e){e.style.display="block";var t=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop,s=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft,i=window.innerHeight||document.documentElement.clientHeight;e.style.top=t?Math.round(t+Math.max((i-e.offsetHeight)/2,0))+"px":Math.round(Math.max((i-e.offsetHeight)/2,0)+9)+"px",e.style.left=document.documentElement.scrollWidth>document.body.offsetWidth?Math.round(s+(document.body.offsetWidth-e.offsetWidth)/2)+"px":Math.round((document.body.offsetWidth-e.offsetWidth)/2)+"px"
+}this.show_cover()},scheduler.showLightbox=function(e){if(e){if(!this.callEvent("onBeforeLightbox",[e]))return void(this._new_event&&(this._new_event=null));var t=this.getLightbox();this.showCover(t),this._fill_lightbox(e,t),this.callEvent("onLightbox",[e])}},scheduler._fill_lightbox=function(e,t){var s=this.getEvent(e),i=t.getElementsByTagName("span");scheduler.templates.lightbox_header?(i[1].innerHTML="",i[2].innerHTML=scheduler.templates.lightbox_header(s.start_date,s.end_date,s)):(i[1].innerHTML=this.templates.event_header(s.start_date,s.end_date,s),i[2].innerHTML=(this.templates.event_bar_text(s.start_date,s.end_date,s)||"").substr(0,70));
+for(var n=this.config.lightbox.sections,a=0;a<n.length;a++){var r=n[a],d=document.getElementById(r.id).nextSibling,o=this.form_blocks[r.type],l=void 0!==s[r.map_to]?s[r.map_to]:r.default_value;o.set_value.call(this,d,l,s,r),n[a].focus&&o.focus.call(this,d)}scheduler._lightbox_id=e},scheduler._lightbox_out=function(e){for(var t=this.config.lightbox.sections,s=0;s<t.length;s++){var i=document.getElementById(t[s].id);i=i?i.nextSibling:i;var n=this.form_blocks[t[s].type],a=n.get_value.call(this,i,e,t[s]);
+"auto"!=t[s].map_to&&(e[t[s].map_to]=a)}return e},scheduler._empty_lightbox=function(e){{var t=scheduler._lightbox_id,s=this.getEvent(t);this.getLightbox()}this._lame_copy(s,e),this.setEvent(s.id,s),this._edit_stop_event(s,!0),this.render_view_data()},scheduler.hide_lightbox=function(){this.hideCover(this.getLightbox()),this._lightbox_id=null,this.callEvent("onAfterLightbox",[])},scheduler.hideCover=function(e){e&&(e.style.display="none"),this.hide_cover()},scheduler.hide_cover=function(){this._cover&&this._cover.parentNode.removeChild(this._cover),this._cover=null
+},scheduler.show_cover=function(){if(!this._cover){this._cover=document.createElement("DIV"),this._cover.className="dhx_cal_cover";var e=void 0!==document.height?document.height:document.body.offsetHeight,t=document.documentElement?document.documentElement.scrollHeight:0;this._cover.style.height=Math.max(e,t)+"px",document.body.appendChild(this._cover)}},scheduler.save_lightbox=function(){var e=this._lightbox_out({},this._lame_copy(this.getEvent(this._lightbox_id)));(!this.checkEvent("onEventSave")||this.callEvent("onEventSave",[this._lightbox_id,e,this._new_event]))&&(this._empty_lightbox(e),this.hide_lightbox())
+},scheduler.startLightbox=function(e,t){this._lightbox_id=e,this._custom_lightbox=!0,this._temp_lightbox=this._lightbox,this._lightbox=t,this.showCover(t)},scheduler.endLightbox=function(e,t){this._edit_stop_event(scheduler.getEvent(this._lightbox_id),e),e&&scheduler.render_view_data(),this.hideCover(t),this._custom_lightbox&&(this._lightbox=this._temp_lightbox,this._custom_lightbox=!1),this._temp_lightbox=this._lightbox_id=null},scheduler.resetLightbox=function(){scheduler._lightbox&&!scheduler._custom_lightbox&&scheduler._lightbox.parentNode.removeChild(scheduler._lightbox),scheduler._lightbox=null
+},scheduler.cancel_lightbox=function(){this.callEvent("onEventCancel",[this._lightbox_id,this._new_event]),this.endLightbox(!1),this.hide_lightbox()},scheduler._init_lightbox_events=function(){this.getLightbox().onclick=function(e){var t=e?e.target:event.srcElement;if(t.className||(t=t.previousSibling),t&&t.className)switch(t.className){case"dhx_save_btn":scheduler.save_lightbox();break;case"dhx_delete_btn":var s=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(s,scheduler.locale.labels.title_confirm_deleting,function(){scheduler.deleteEvent(scheduler._lightbox_id),scheduler._new_event=null,scheduler.hide_lightbox()
+});break;case"dhx_cancel_btn":scheduler.cancel_lightbox();break;default:if(t.getAttribute("dhx_button"))scheduler.callEvent("onLightboxButton",[t.className,t,e]);else{var i,n,a;-1!=t.className.indexOf("dhx_custom_button")&&(-1!=t.className.indexOf("dhx_custom_button_")?(i=t.parentNode.getAttribute("index"),a=t.parentNode.parentNode):(i=t.getAttribute("index"),a=t.parentNode,t=t.firstChild)),i&&(n=scheduler.form_blocks[scheduler.config.lightbox.sections[i].type],n.button_click(i,t,a,a.nextSibling))
+}}},this.getLightbox().onkeydown=function(e){switch((e||event).keyCode){case scheduler.keys.edit_save:if((e||event).shiftKey)return;scheduler.save_lightbox();break;case scheduler.keys.edit_cancel:scheduler.cancel_lightbox()}}},scheduler.setLightboxSize=function(){var e=this._lightbox;if(e){var t=e.childNodes[1];t.style.height="0px",t.style.height=t.scrollHeight+"px",e.style.height=t.scrollHeight+scheduler.xy.lightbox_additional_height+"px",t.style.height=t.scrollHeight+"px"}},scheduler._init_dnd_events=function(){dhtmlxEvent(document.body,"mousemove",scheduler._move_while_dnd),dhtmlxEvent(document.body,"mouseup",scheduler._finish_dnd),scheduler._init_dnd_events=function(){}
+},scheduler._move_while_dnd=function(e){if(scheduler._dnd_start_lb){document.dhx_unselectable||(document.body.className+=" dhx_unselectable",document.dhx_unselectable=!0);var t=scheduler.getLightbox(),s=e&&e.target?[e.pageX,e.pageY]:[event.clientX,event.clientY];t.style.top=scheduler._lb_start[1]+s[1]-scheduler._dnd_start_lb[1]+"px",t.style.left=scheduler._lb_start[0]+s[0]-scheduler._dnd_start_lb[0]+"px"}},scheduler._ready_to_dnd=function(e){var t=scheduler.getLightbox();scheduler._lb_start=[parseInt(t.style.left,10),parseInt(t.style.top,10)],scheduler._dnd_start_lb=e&&e.target?[e.pageX,e.pageY]:[event.clientX,event.clientY]
+},scheduler._finish_dnd=function(){scheduler._lb_start&&(scheduler._lb_start=scheduler._dnd_start_lb=!1,document.body.className=document.body.className.replace(" dhx_unselectable",""),document.dhx_unselectable=!1)},scheduler.getLightbox=function(){if(!this._lightbox){var e=document.createElement("DIV");e.className="dhx_cal_light",scheduler.config.wide_form&&(e.className+=" dhx_cal_light_wide"),scheduler.form_blocks.recurring&&(e.className+=" dhx_cal_light_rec"),/msie|MSIE 6/.test(navigator.userAgent)&&(e.className+=" dhx_ie6"),e.style.visibility="hidden";
+for(var t=this._lightbox_template,s=this.config.buttons_left,i=0;i<s.length;i++)t+="<div class='dhx_btn_set dhx_left_btn_set "+s[i]+"_set'><div dhx_button='1' class='"+s[i]+"'></div><div>"+scheduler.locale.labels[s[i]]+"</div></div>";s=this.config.buttons_right;for(var i=0;i<s.length;i++)t+="<div class='dhx_btn_set dhx_right_btn_set "+s[i]+"_set' style='float:right;'><div dhx_button='1' class='"+s[i]+"'></div><div>"+scheduler.locale.labels[s[i]]+"</div></div>";t+="</div>",e.innerHTML=t,scheduler.config.drag_lightbox&&(e.firstChild.onmousedown=scheduler._ready_to_dnd,e.firstChild.onselectstart=function(){return!1
+},e.firstChild.style.cursor="pointer",scheduler._init_dnd_events()),document.body.insertBefore(e,document.body.firstChild),this._lightbox=e;var n=this.config.lightbox.sections;t="";for(var i=0;i<n.length;i++){var a=this.form_blocks[n[i].type];if(a){n[i].id="area_"+this.uid();var r="";n[i].button&&(r="<div class='dhx_custom_button' index='"+i+"'><div class='dhx_custom_button_"+n[i].button+"'></div><div>"+this.locale.labels["button_"+n[i].button]+"</div></div>"),this.config.wide_form&&(t+="<div class='dhx_wrap_section'>");
+var d=this.locale.labels["section_"+n[i].name];"string"!=typeof d&&(d=n[i].name),t+="<div id='"+n[i].id+"' class='dhx_cal_lsection'>"+r+d+"</div>"+a.render.call(this,n[i]),t+="</div>"}}for(var o=e.getElementsByTagName("div"),i=0;i<o.length;i++){var l=o[i];if("dhx_cal_larea"==l.className){l.innerHTML=t;break}}this.setLightboxSize(),this._init_lightbox_events(this),e.style.display="none",e.style.visibility="visible"}return this._lightbox},scheduler._lightbox_template="<div class='dhx_cal_ltitle'><span class='dhx_mark'>&nbsp;</span><span class='dhx_time'></span><span class='dhx_title'></span></div><div class='dhx_cal_larea'></div>",scheduler._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&&(this.xy.scroll_width=0,window.navigator.msPointerEnabled?(this._touch_events(["MSPointerMove","MSPointerDown","MSPointerUp"],function(e){return e.pointerType==e.MSPOINTER_TYPE_MOUSE?null:e
+},function(e){return!e||e.pointerType==e.MSPOINTER_TYPE_MOUSE}),this._obj.ondblclick=function(){}):this._touch_events(["touchmove","touchstart","touchend"],function(e){return e.touches&&e.touches.length>1?null:e.touches[0]?{target:e.target,pageX:e.touches[0].pageX,pageY:e.touches[0].pageY}:e},function(){return!1}))},scheduler._touch_events=function(e,t,s){function i(e,t,s){dhtmlxEvent(e,t,function(e){return scheduler._is_lightbox_open()?!0:s(e)})}function n(e,t,s){if(e&&t){var i=Math.abs(e.pageY-t.pageY),n=Math.abs(e.pageX-t.pageX);
+n>s&&(!i||n/i>3)&&(e.pageX>t.pageX?scheduler._click.dhx_cal_next_button():scheduler._click.dhx_cal_prev_button())}}function a(e){scheduler._hide_global_tip(),l&&(scheduler._on_mouse_up(t(e||event)),scheduler._temp_touch_block=!1),scheduler._drag_id=null,scheduler._drag_mode=null,scheduler._drag_pos=null,clearTimeout(o),l=_=!1,h=!0}var r,d,o,l,h,_,c=-1!=navigator.userAgent.indexOf("Android")&&-1!=navigator.userAgent.indexOf("WebKit"),u=0;i(document.body,e[0],function(e){if(!s(e)){if(l)return scheduler._on_mouse_move(t(e)),scheduler._update_global_tip(),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,!1;
+if(d&&c&&n(d,t(e),0),d=t(e),_)return d?void((r.target!=d.target||Math.abs(r.pageX-d.pageX)>5||Math.abs(r.pageY-d.pageY)>5)&&(h=!0,clearTimeout(o))):void(h=!0)}}),i(this._els.dhx_cal_data[0],"scroll",a),i(this._els.dhx_cal_data[0],"touchcancel",a),i(this._els.dhx_cal_data[0],"contextmenu",function(e){return _?(e&&e.preventDefault&&e.preventDefault(),(e||event).cancelBubble=!0,!1):void 0}),i(this._els.dhx_cal_data[0],e[1],function(e){if(!s(e)){var i;if(l=h=!1,_=!0,scheduler._temp_touch_block=!0,i=d=t(e),!i)return void(h=!0);
+var n=new Date;if(!h&&!l&&250>n-u)return scheduler._click.dhx_cal_data(i),window.setTimeout(function(){scheduler._on_dbl_click(i)},50),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,scheduler._block_next_stop=!0,!1;u=n,h||l||!scheduler.config.touch_drag||(o=setTimeout(function(){l=!0;var e=r.target;if(e&&e.className&&-1!=e.className.indexOf("dhx_body")&&(e=e.previousSibling),scheduler._on_mouse_down(r,e),scheduler._drag_mode&&"create"!=scheduler._drag_mode){var t=-1;if(scheduler.for_rendered(scheduler._drag_id,function(e,s){t=e.getBoundingClientRect().top,e.style.display="none",scheduler._rendered.splice(s,1)
+}),t>=0){var s=scheduler.config.time_step;scheduler._move_pos_shift=s*Math.round(60*(i.pageY-t)/(scheduler.config.hour_size_px*s))}}scheduler.config.touch_tip&&scheduler._show_global_tip(),scheduler._on_mouse_move(r)},scheduler.config.touch_drag),r=i)}}),i(this._els.dhx_cal_data[0],e[2],function(e){return s(e)?void 0:(l||n(r,d,200),l&&(scheduler._ignore_next_click=!0),a(e),scheduler._block_next_stop?(scheduler._block_next_stop=!1,e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,!1):void 0)}),dhtmlxEvent(document.body,e[2],a)
+},scheduler._show_global_tip=function(){scheduler._hide_global_tip();var e=scheduler._global_tip=document.createElement("DIV");e.className="dhx_global_tip",scheduler._update_global_tip(1),document.body.appendChild(e)},scheduler._update_global_tip=function(e){var t=scheduler._global_tip;if(t){var s="";if(scheduler._drag_id&&!e){var i=scheduler.getEvent(scheduler._drag_id);i&&(s="<div>"+(i._timed?scheduler.templates.event_header(i.start_date,i.end_date,i):scheduler.templates.day_date(i.start_date,i.end_date,i))+"</div>")
+}t.innerHTML="create"==scheduler._drag_mode||"new-size"==scheduler._drag_mode?(scheduler.locale.drag_to_create||"Drag to create")+s:(scheduler.locale.drag_to_move||"Drag to move")+s}},scheduler._hide_global_tip=function(){var e=scheduler._global_tip;e&&e.parentNode&&(e.parentNode.removeChild(e),scheduler._global_tip=0)},scheduler._dp_init=function(e){e._methods=["_set_event_text_style","","changeEventId","_dp_hook_delete"],this._dp_hook_delete=function(e){return this.deleteEvent(e,!0)},this.attachEvent("onEventAdded",function(t){!this._loading&&this._validId(t)&&e.setUpdated(t,!0,"inserted")
+}),this.attachEvent("onConfirmedBeforeEventDelete",function(t){if(this._validId(t)){var s=e.getState(t);return"inserted"==s||this._new_event?(e.setUpdated(t,!1),!0):"deleted"==s?!1:"true_deleted"==s?!0:(e.setUpdated(t,!0,"deleted"),!1)}}),this.attachEvent("onEventChanged",function(t){!this._loading&&this._validId(t)&&e.setUpdated(t,!0,"updated")}),e._getRowData=function(e){var t=this.obj.getEvent(e),s={};for(var i in t)0!==i.indexOf("_")&&(s[i]=t[i]&&t[i].getUTCFullYear?this.obj.templates.xml_format(t[i]):t[i]);
+return s},e._clearUpdateFlag=function(){},e.attachEvent("insertCallback",scheduler._update_callback),e.attachEvent("updateCallback",scheduler._update_callback),e.attachEvent("deleteCallback",function(e,t){this.obj.setUserData(t,this.action_param,"true_deleted"),this.obj.deleteEvent(t)})},scheduler._validId=function(){return!0},scheduler.setUserData=function(e,t,s){e?this.getEvent(e)[t]=s:this._userdata[t]=s},scheduler.getUserData=function(e,t){return e?this.getEvent(e)[t]:this._userdata[t]},scheduler._set_event_text_style=function(e,t){this.for_rendered(e,function(e){e.style.cssText+=";"+t
+});var s=this.getEvent(e);s._text_style=t,this.event_updated(s)},scheduler._update_callback=function(e){var t=scheduler._xmlNodeToJSON(e.firstChild);t.text=t.text||t._tagvalue,t.start_date=scheduler.templates.xml_date(t.start_date),t.end_date=scheduler.templates.xml_date(t.end_date),scheduler.addEvent(t)},scheduler._skin_settings={fix_tab_position:[1,0],use_select_menu_space:[1,0],wide_form:[1,0],hour_size_px:[44,42],displayed_event_color:["#ff4a4a","ffc5ab"],displayed_event_text_color:["#ffef80","7e2727"]},scheduler._skin_xy={lightbox_additional_height:[90,50],nav_height:[59,22],bar_height:[24,20]},scheduler._configure=function(e,t,s){for(var i in t)"undefined"==typeof e[i]&&(e[i]=t[i][s])
+},scheduler._skin_init=function(){if(!scheduler.skin)for(var e=document.getElementsByTagName("link"),t=0;t<e.length;t++){var s=e[t].href.match("dhtmlxscheduler_([a-z]+).css");if(s){scheduler.skin=s[1];break}}var i=0;if(!scheduler.skin||"classic"!==scheduler.skin&&"glossy"!==scheduler.skin||(i=1),this._configure(scheduler.config,scheduler._skin_settings,i),this._configure(scheduler.xy,scheduler._skin_xy,i),!i){var n=scheduler.config.minicalendar;n&&(n.padding=14),scheduler.templates.event_bar_date=function(e){return"• <b>"+scheduler.templates.event_date(e)+"</b> "
+},scheduler.attachEvent("onTemplatesReady",function(){var e=scheduler.date.date_to_str("%d");scheduler.templates._old_month_day||(scheduler.templates._old_month_day=scheduler.templates.month_day);var t=scheduler.templates._old_month_day;if(scheduler.templates.month_day=function(s){if("month"==this._mode){var i=e(s);return 1==s.getDate()&&(i=scheduler.locale.date.month_full[s.getMonth()]+" "+i),+s==+scheduler.date.date_part(new Date)&&(i=scheduler.locale.labels.dhx_cal_today_button+" "+i),i}return t.call(this,s)
+},scheduler.config.fix_tab_position){for(var s=scheduler._els.dhx_cal_navline[0].getElementsByTagName("div"),i=null,n=211,a=0;a<s.length;a++){var r=s[a],d=r.getAttribute("name");if(d)switch(r.style.right="auto",d){case"day_tab":r.style.left="14px",r.className+=" dhx_cal_tab_first";break;case"week_tab":r.style.left="75px";break;case"month_tab":r.style.left="136px",r.className+=" dhx_cal_tab_last";break;default:r.style.left=n+"px",r.className+=" dhx_cal_tab_standalone",n=n+14+r.offsetWidth}else 0===(r.className||"").indexOf("dhx_minical_icon")&&r.parentNode==scheduler._els.dhx_cal_navline[0]&&(i=r)
+}i&&(i.style.left=n+"px")}scheduler.skin&&"flat"===scheduler.skin&&(scheduler.xy.scale_height=35,scheduler.templates.hour_scale=function(e){var t=e.getMinutes();t=10>t?"0"+t:t;var s="<span class='dhx_scale_h'>"+e.getHours()+"</span><span class='dhx_scale_m'>&nbsp;"+t+"</span>";return s})}),scheduler._skin_init=function(){}}},window.jQuery&&!function(e){var t=[];e.fn.dhx_scheduler=function(s){if("string"!=typeof s){var i=[];return this.each(function(){if(this&&this.getAttribute&&!this.getAttribute("dhxscheduler")){for(var e in s)"data"!=e&&(scheduler.config[e]=s[e]);
+this.getElementsByTagName("div").length||(this.innerHTML='<div class="dhx_cal_navline"><div class="dhx_cal_prev_button">&nbsp;</div><div class="dhx_cal_next_button">&nbsp;</div><div class="dhx_cal_today_button"></div><div class="dhx_cal_date"></div><div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div><div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div><div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div></div><div class="dhx_cal_header"></div><div class="dhx_cal_data"></div>',this.className+=" dhx_cal_container"),scheduler.init(this,scheduler.config.date,scheduler.config.mode),s.data&&scheduler.parse(s.data),i.push(scheduler)
+}}),1===i.length?i[0]:i}return t[s]?t[s].apply(this,[]):void e.error("Method "+s+" does not exist on jQuery.dhx_scheduler")}}(jQuery);
+//# sourceMappingURL=sources/dhtmlxscheduler.js.map \ No newline at end of file
diff --git a/codebase/dhtmlxscheduler_classic.css b/codebase/dhtmlxscheduler_classic.css
index 8b2ec1b..d8cfae2 100644
--- a/codebase/dhtmlxscheduler_classic.css
+++ b/codebase/dhtmlxscheduler_classic.css
@@ -1,6 +1,8 @@
-@charset "UTF-8";
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-.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:300px;width:300px;text-align:center;position:fixed;background-color:#fff;background:-webkit-linear-gradient(top,#fff 1%,#d0d0d0 99%);background:-moz-linear-gradient(top,#fff 1%,#d0d0d0 99%);box-shadow:0 0 14px #888;font-family:Tahoma;z-index:20000;border-radius:6px;border:1px solid #fff;}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);}.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:5px;}.dhtmlx_popup_button,.dhtmlx_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF;}.dhtmlx_popup_button{min-width:120px;}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:none;zoom:1;}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px;}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid #f00;}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383;}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:normal;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px;}.dhtmlx_button input:focus,.dhtmlx_button input:active,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%);}.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:0 0 10px #888;padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff;}.dhtmlx-info div{padding:5px 10px 5px 10px;background-color:#fff;border-radius:3px;border:1px solid #B8B8B8;}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000;}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF;}.dhx_cal_container{background-color:#C2D5FC;font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden;}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none;}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48;}.dhx_cal_navline div{position:absolute;top:2px;white-space:nowrap;}.dhx_cal_navline .dhx_cal_date{font-weight:600;left:210px;padding-top:1px;}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0;}.dhx_cal_prev_button{background-image:url(imgs/buttons.png);background-position:0 0;width:29px;height:17px;left:50px;cursor:pointer;}.dhx_cal_next_button{background-image:url(imgs/buttons.png);background-position:-30px 0;width:29px;height:17px;left:80px;cursor:pointer;}.dhx_cal_today_button{background-image:url(imgs/buttons.png);background-position:-60px 0;width:75px;height:17px;left:112px;cursor:pointer;text-align:center;text-decoration:underline;}.dhx_cal_tab{width:59px;height:19px;text-align:center;text-decoration:underline;padding-top:2px;cursor:pointer;background-color:#D8E1EA;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:bold;border:1px dotted #586A7E;border-bottom:0;background-color:#C2D5FC;}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;border-top:1px dotted #8894A3;border-right:1px dotted #8894A3;z-index:2;overflow:hidden;color:#2F3A48;}.dhx_cal_data{-webkit-tap-highlight-color:transparent;border-top:1px dotted #8894A3;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;}.dhx_cal_data{-ms-touch-action:pan-y;}.dhx_cal_event,.dhx_cal_event_line,.dhx_cal_event_clear{-ms-touch-action:none;}.dhx_scale_bar{position:absolute;text-align:center;background-color:#C2D5FC;padding-top:3px;border-left:1px dotted #586A7E;}.dhx_scale_holder{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg.png);}.dhx_scale_holder_now{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg_now.png);}.dhx_scale_hour{height:41px;width:50px;border-bottom:1px dotted #8894A3;background-color:#C2D5FC;text-align:center;line-height:40px;color:#586A7E;overflow:hidden;}.dhx_month_head{background-color:#EBEFF4;color:#2F3A48;height:18px;padding-right:5px;padding-top:3px;text-align:right;border-right:1px dotted #586A7E;}.dhx_month_body{border-right:1px dotted #586A7E;border-bottom:1px dotted #586A7E;background-color:#FFF;}.dhx_now .dhx_month_body{background-color:#E2EDFF;}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#ECECEC;}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#E2E3E6;color:#94A6BB;}.dhx_now .dhx_month_head{background-color:#D1DEF4;font-weight:bold;}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50);}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999;}.dhx_multi_day_icon,.dhx_multi_day{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3;}.dhx_multi_day{position:absolute;border-top:1px dotted #8894A3;}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-color:#E1E6FF;background-repeat:no-repeat;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_multi_day_icon{background-image:url(imgs/clock_big.gif);}.dhx_multi_day_icon_small{background-image:url(imgs/clock_small.gif);}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff;}.dhx_scale_hour_border,.dhx_month_body_border,.dhx_scale_bar_border,.dhx_month_head_border{border-left:1px dotted #8894A3;}.dhx_cal_navline .dhx_cal_export{width:18px;height:18px;margin:2px;cursor:pointer;top:0;}.dhx_cal_navline .dhx_cal_export.pdf{left:2px;background-image:url('imgs/export_pdf.png');}.dhx_cal_navline .dhx_cal_export.ical{left:24px;background-image:url('imgs/export_ical.png');}.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title,.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt;}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default;}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0 1px;cursor:pointer;}.dhx_cal_event .dhx_title{height:12px;border-width:0 1px 1px 1px;border-bottom-style:dotted;font-size:7pt;font-weight:bold;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer;}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px 1px;padding:5px;}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important;}.dhx_cal_event .dhx_event_resize{cursor:s-resize;}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px 1px;position:relative;}.dhx_cal_event_line{background-color:#FFE763;border:1px solid #B7A543;border-radius:3px;font-family:Tahoma;font-size:8pt;height:13px;padding-left:10px;color:#887A2E;cursor:pointer;overflow:hidden;}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;color:#887A2E;white-space:nowrap;overflow:hidden;cursor:pointer;}.dhx_in_move{background-color:#FFFF80;}div.dhx_cal_editor{background-color:#FFE763;border:1px solid #B7A543;border-top-style:dotted;z-index:999;position:absolute;overflow:hidden;}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid black;margin:0;padding:0;overflow:auto;}div.dhx_menu_head{background-image:url(imgs/controls.gif);background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default;}div.dhx_menu_icon{background-image:url(imgs/controls.gif);width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer;}div.icon_details{background-position:0 0;}div.icon_edit{background-position:-22px 0;}div.icon_save{background-position:-84px -1px;}div.icon_cancel{background-position:-62px 0;}div.icon_delete{background-position:-42px 0;}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px;}.dhx_month_link a{color:blue;}.dhx_month_link a:hover{text-decoration:underline;}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,0.7);color:#000;z-index:10000;padding:20px 30px;width:190px;}.dhx_global_tip div{font-size:30px;}@media(-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none;}}.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:#FFE763;border-radius:5px;font-family:Tahoma;font-size:8pt;border:1px solid #B7A64B;color:#887A2E;position:absolute;z-index:10001;width:580px;height:300px;box-shadow:5px 5px 5px #888;}.dhx_cal_light_wide{width:650px;}.dhx_mark{position:relative;top:3px;background-image:url('./imgs/controls.gif');background-position:0 -43px;padding-left:10px;}.dhx_ie6 .dhx_mark{background-position:6px -41px;}.dhx_cal_light select{font-family:Tahoma;font-size:8pt;color:#887A2E;padding:2px;margin:0;}.dhx_cal_ltitle{padding:2px 0 2px 5px;overflow:hidden;white-space:nowrap;}.dhx_cal_ltitle span{white-space:nowrap;}.dhx_cal_lsection{background-color:#DBCF8C;color:#FFF4B5;font-weight:bold;padding:5px 0 3px 10px;}.dhx_section_time{background-color:#DBCF8C;white-space:nowrap;}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;color:#887A2E;font-size:12px;font-weight:normal;line-height:20px;vertical-align:top;cursor:pointer;}.dhx_cal_lsection{font-size:18px;font-family:Arial;}.dhx_cal_ltext{padding:2px 0 2px 10px;overflow:hidden;}.dhx_cal_ltext textarea{background-color:#FFF4B5;overflow:auto;border:none;color:#887A2E;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 #DCC43E;background-color:#FFF4B5;overflow:hidden;margin-left:3px;width:572px;height:1px;}.dhx_btn_set{padding:5px 10px 0 10px;float:left;}.dhx_btn_set div{float:left;height:21px;line-height:21px;vertical-align:middle;cursor:pointer;}.dhx_save_btn{background-image:url('./imgs/controls.gif');background-position:-84px 0;width:21px;}.dhx_cancel_btn{background-image:url('./imgs/controls.gif');background-position:-63px 0;width:20px;}.dhx_delete_btn{background-image:url('./imgs/controls.gif');background-position:-42px 0;width:20px;}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:black;opacity:.1;filter:alpha(opacity=10);}.dhx_custom_button{padding:0 3px 0 3px;color:#887A2E;font-family:Tahoma;font-size:8pt;background-color:#FFE763;font-weight:normal;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 .dhx_cal_larea{border-top-width:0;}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;font-size:16px;padding:5px 0 0 10px;}.dhx_cal_light_wide .dhx_wrap_section{border-top:1px solid #DBCF8C;position:relative;background-color:#DBCF8C;overflow:hidden;}.dhx_cal_light_wide .dhx_section_time{padding-top:2px!important;height:20px!important;}.dhx_section_time{text-align:center;}.dhx_cal_light_wide .dhx_cal_larea{width:730px;}.dhx_cal_light_wide{width:738px;}.dhx_cal_light_wide .dhx_section_time{background:transparent;}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0;}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px;}.dhx_cal_light input{font-family:Tahoma;font-size:8pt;color:#887A2E;}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;color:#FFF4B5;font-weight:bold;font-size:16px;font-family:Arial;cursor:pointer;}.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_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_minical_popup{position:absolute;z-index:10100;width:251px;height:175px;}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%;}.dhx_expand_icon{position:absolute;top:0;right:0;background-image:url(./imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16;}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(./imgs/databg.png);}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(./imgs/databg.png);}.dhx_agenda_line{height:21px;clear:both;overflow:hidden;}.dhx_agenda_line div{float:left;width:188px;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3;}.dhx_v_border{position:absolute;left:187px;top:0;border-right:1px dotted #8894A3;width:1px;height:100%;}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_agenda_line span{padding-left:5px;line-height:21px;}.dhx_year_body{border-left:1px dotted #586A7E;}.dhx_year_week{position:relative;}.dhx_scale_bar_last{border-right:1px dotted #586A7E;}.dhx_year_month{height:18px;padding-top:3px;border:1px dotted #586A7E;text-align:center;vertical-align:middle;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a,.dhx_year_body .dhx_after .dhx_month_head a{color:#E2E3E6!important;}.dhx_year_body .dhx_month_body{height:0;overflow:hidden;}.dhx_month_head.dhx_year_event{background-color:#FFE763;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head{cursor:default;}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(./imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden;}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden;}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center;}.dhx_text_disabled{color:#887A2E;font-family:Tahoma;font-size:8pt;}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none;}.dhx_mini_calendar .dhx_month_head{cursor:pointer;}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC;}.dhx_cal_navline div.dhx_minical_icon{width:18px;height:18px;left:190px;top:1px;cursor:pointer;background-image:url(./imgs/calendar.gif);}.dhx_matrix_scell{height:100%;}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_matrix_cell{background-color:white;}.dhx_matrix_line{overflow:hidden;}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto;}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E;}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;background:url(./imgs/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;}.dhx_event_resize_start{left:0;}.dhx_event_resize_end{right:0;}.dhx_matrix_scell.folder,.dhx_data_table.folder .dhx_matrix_cell{background-color:#969394;cursor:pointer;}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px;}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px;}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px;}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px;}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px;}.dhx_matrix_scell.folder{font-weight:bold;text-align:left;}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px;}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto;}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left;}.dhx_data_table.folder .dhx_matrix_cell{border-right:0;}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px;}.dhx_section_timeline select{width:552px;}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(./imgs/databg.png);}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_map_line{height:21px;clear:both;overflow:hidden;}.dhx_map{position:absolute;}.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_description{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border-left:0;}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden;}.dhx_map_line.highlight{background-color:#C4C5CC;}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3;}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888',Direction=135,Strength=5);background-color:white;border-left:1px dotted #887A2E;border-top:1px dotted #887A2E;color:#887A2E;cursor:default;padding:10px;position:absolute;z-index:500;font-family:Tahoma;font-size:8pt;}.dhx_cal_checkbox label{padding-left:5px;}.dhx_cal_light .radio{padding:2px 0 2px 10px;}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px;}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0;}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px;}.dhx_cal_light .combo{padding:4px;}.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px;}.dhx_wa_column{float:left;}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px dotted #8894A3;}.dhx_wa_scale_bar{font-family:Tahoma;padding-left:10px;font-size:11px;border-top:1px dotted #8894A3;border-bottom:1px dotted #8894A3;}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto;}.dhx_wa_ev_body{border-bottom:1px dotted #789;font-size:12px;padding:5px 0 5px 7px;}.dhx_wa_dnd{font-family:Tahoma;position:absolute;padding-right:7px;color:#887AE2!important;background-color:#FFE763!important;border:1px solid #B7A543;}.dhx_cal_event_selected{background-color:#9cc1db;color:white;}.dhx_second_scale_bar{border-bottom:1px dotted #586A7E;padding-top:2px;}.dhx_cal_header div div{border-left:1px dotted #8894A3;}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC;}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed;}.dhx_grid_area td{table-layout:fixed;text-align:center;}.dhx_grid_line{height:21px;clear:both;overflow:hidden;}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden;}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px;}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px 0;}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td{border-bottom-width:0;border-bottom-style:none;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4;;}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important;}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%;}.dhx_grid_event_selected{background-color:#9cc1db!important;color:white!important;}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px;}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px;}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(./imgs/images.png);}.dhx_marked_timespan{position:absolute;width:100%;}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1;}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100);}.dhx_scheduler_month .dhx_marked_timespan{display:none;}.dhx_mini_calendar .dhx_marked_timespan{display:none;}.dhx_now_time{width:100%;border-bottom:2px dotted red;z-index:1;}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px dotted red;}.dhx_matrix_now_time{border-left:2px dotted red;z-index:1;}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:300;background-color:#8e99ae;background-color:rgba(98,107,127,0.5);padding-left:7px;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{padding:5px 0 10px 5px;color:#FFF;letter-spacing:1px;}.dhx_cal_qi_tdate{font-size:14px;}.dhx_cal_qi_tcontent{font-size:18px;font-weight:bold;}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden;}.dhx_qi_big_icon{border-radius:3px;color:#444;margin:5px 9px 5px 0;min-width:60px;line-height:20px;vertical-align:middle;padding:5px 10px 5px 5px;cursor:pointer;background-color:#fefefe;border-bottom:1px solid #666;border-right:1px solid #666;float:left;}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px;}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0;}div.dhx_form_repeat input.radio{margin:-4px 0 0 -4px!ie;}div.dhx_form_repeat input.checkbox{margin:0 0 0 -4px!ie;}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px;}.dhx_form_repeat{overflow:hidden;height:0;background-color:#FFF4B5;}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent;}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left;}.dhx_repeat_left{width:95px;}.dhx_repeat_center{width:335px;margin-top:12px;}.dhx_repeat_divider{float:left;height:115px;border-left:1px dotted #DCC43E;width:1px;}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px;}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px 0 4px;line-height:18px;padding:0 0 0 2px;}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px 0 4px;}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px 0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px;}input.dhx_repeat_radio{margin-right:4px;}input.dhx_repeat_checkbox{margin:4px 4px 0 0;}.dhx_repeat_days td{padding-right:5px;}.dhx_repeat_days label{font-size:10px;}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;}.dhx_custom_button_recurring{background-image:url(./imgs/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px;}.dhx_cal_light_rec{width:640px;}.dhx_cal_light_rec .dhx_cal_larea{width:632px;}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px;}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px;} \ No newline at end of file
+.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;font-family:Tahoma;z-index:10000;overflow:hidden;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:300px;width:300px;text-align:center;position:fixed;background:-webkit-linear-gradient(top,#fff 1%,#d0d0d0 99%);background:-moz-linear-gradient(top,#fff 1%,#d0d0d0 99%);box-shadow:0 0 14px #888;font-family:Tahoma;z-index:20000;border-radius:6px;border:1px solid #fff}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%)}.dhtmlx-info,.dhtmlx_button,.dhtmlx_popup_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:5px}.dhtmlx_button,.dhtmlx_popup_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF}.dhtmlx_popup_button{min-width:120px}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:none;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC)}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:400;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px}.dhtmlx_button input:active,.dhtmlx_button input:focus,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%)}.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-error,.dhtmlx-info{font-size:14px;color:#000;box-shadow:0 0 10px #888;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 #B8B8B8}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0;cursor:pointer}.dhx_cal_event .dhx_title{height:12px;border-width:0 1px 1px;border-bottom-style:dotted;font-size:7pt;font-weight:700;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px;padding:5px}.dhx_cal_event.dhx_cal_select_menu{-webkit-box-shadow:0 0 1px #FFF;-moz-box-shadow:0 0 1px #FFF;box-shadow:0 0 1px #FFF}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important}.dhx_cal_event .dhx_event_resize{cursor:s-resize}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px;position:relative}.dhx_cal_event_line{background-color:#FFE763;border:1px solid #B7A543;border-radius:3px;font-family:Tahoma;font-size:8pt;height:13px;padding-left:10px;color:#887A2E;cursor:pointer;overflow:hidden}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;color:#887A2E;white-space:nowrap;overflow:hidden;cursor:pointer}.dhx_in_move{background-color:#FFFF80}.dhx_cal_event.dhx_cal_editor{border:1px solid #B7A543;border-top-style:dotted;z-index:999;position:absolute;overflow:hidden}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid #000;margin:0;padding:0;overflow:auto}div.dhx_menu_head{background-image:url(imgs/controls.gif);background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default}div.dhx_menu_icon{background-image:url(imgs/controls.gif);width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer}div.icon_details{background-position:0 0}div.icon_edit{background-position:-22px 0}div.icon_save{background-position:-84px -1px}div.icon_cancel{background-position:-62px 0}div.icon_delete{background-position:-42px 0}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px}.dhx_month_link a{color:#00f}.dhx_month_link a:hover{text-decoration:underline}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,.7);color:#000;z-index:10000;padding:20px 30px;width:190px}.dhx_global_tip div{font-size:30px}@media (-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none}}.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:#FFE763;border-radius:5px;font-family:Tahoma;font-size:8pt;border:1px solid #B7A64B;color:#887A2E;position:absolute;z-index:10001;width:580px;height:300px;box-shadow:5px 5px 5px #888}.dhx_mark{position:relative;top:3px;background-image:url(imgs/controls.gif);background-position:0 -43px;padding-left:10px}.dhx_ie6 .dhx_mark{background-position:6px -41px}.dhx_cal_light select{font-family:Tahoma;font-size:8pt;color:#887A2E;padding:2px;margin:0}.dhx_cal_ltitle{padding:2px 0 2px 5px;overflow:hidden;white-space:nowrap}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{background-color:#DBCF8C;color:#FFF4B5;font-weight:700;padding:5px 0 3px 10px}.dhx_section_time{background-color:#DBCF8C;white-space:nowrap}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;color:#887A2E;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection{font-size:18px;font-family:Arial}.dhx_cal_ltext{padding:2px 0 2px 10px;overflow:hidden}.dhx_cal_ltext textarea{background-color:#FFF4B5;overflow:auto;border:none;color:#887A2E;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 #DCC43E;background-color:#FFF4B5;overflow:hidden;margin-left:3px;width:572px;height:1px}.dhx_btn_set{padding:5px 10px 0;float:left}.dhx_btn_set div{float:left;height:21px;line-height:21px;vertical-align:middle;cursor:pointer}.dhx_save_btn{background-image:url(imgs/controls.gif);background-position:-84px 0;width:21px}.dhx_cancel_btn{background-image:url(imgs/controls.gif);background-position:-63px 0;width:20px}.dhx_delete_btn{background-image:url(imgs/controls.gif);background-position:-42px 0;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;color:#887A2E;font-family:Tahoma;font-size:8pt;background-color:#FFE763;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 .dhx_cal_larea{border-top-width:0}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;font-size:16px;padding:5px 0 0 10px}.dhx_cal_light_wide .dhx_wrap_section{border-top:1px solid #DBCF8C;position:relative;background-color:#DBCF8C;overflow:hidden}.dhx_cal_light_wide .dhx_section_time{padding-top:2px!important;height:20px!important}.dhx_section_time{text-align:center}.dhx_cal_light_wide .dhx_cal_larea{width:730px}.dhx_cal_light_wide{width:738px}.dhx_cal_light_wide .dhx_section_time{background:0 0}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-family:Tahoma;font-size:8pt;color:#887A2E}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;color:#FFF4B5;font-weight:700;font-size:16px;font-family:Arial;cursor:pointer}.dhx_custom_button{float:right;height:21px}.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_minical_popup{position:absolute;z-index:10100;width:251px;height:175px}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%}.dhx_expand_icon{position:absolute;top:0;right:0;background-image:url(imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(imgs/databg.png)}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(imgs/databg.png)}.dhx_agenda_line{height:21px;clear:both;overflow:hidden}.dhx_agenda_line div{float:left;width:188px;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3}.dhx_v_border{position:absolute;left:187px;top:0;border-right:1px dotted #8894A3;width:1px;height:100%}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_agenda_line span{padding-left:5px;line-height:21px}.dhx_year_body{border-left:1px dotted #586A7E}.dhx_year_week{position:relative}.dhx_scale_bar_last{border-right:1px dotted #586A7E}.dhx_year_month{height:18px;padding-top:3px;border:1px dotted #586A7E;text-align:center;vertical-align:middle}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head a,.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a{color:#E2E3E6!important}.dhx_year_body .dhx_month_body{height:0;overflow:hidden}.dhx_month_head.dhx_year_event{background-color:#FFE763}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head{cursor:default}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center}.dhx_text_disabled{color:#887A2E;font-family:Tahoma;font-size:8pt}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.dhx_mini_calendar .dhx_month_head{cursor:pointer}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC}.dhx_cal_navline div.dhx_minical_icon{width:18px;height:18px;left:190px;top:1px;cursor:pointer;background-image:url(imgs/calendar.gif)}.dhx_matrix_scell{height:100%}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3}.dhx_matrix_cell{background-color:#fff}.dhx_matrix_line{overflow:hidden}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;background:url(imgs/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;height:100%}.dhx_event_resize_start{left:0}.dhx_event_resize_end{right:0}.dhx_data_table.folder .dhx_matrix_cell,.dhx_matrix_scell.folder{background-color:#969394;cursor:pointer}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px}.dhx_matrix_scell.folder{font-weight:700;text-align:left}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left}.dhx_data_table.folder .dhx_matrix_cell{border-right:0}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px}.dhx_section_timeline select{width:552px}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(imgs/databg.png)}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_map_line{height:21px;clear:both;overflow:hidden}.dhx_map{position:absolute}.dhx_map_line .headline_description,.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border-left:0}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden}.dhx_map_line.highlight{background-color:#C4C5CC}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);background-color:#fff;border-left:1px dotted #887A2E;border-top:1px dotted #887A2E;color:#887A2E;cursor:default;padding:10px;position:absolute;z-index:500;font-family:Tahoma;font-size:8pt;opacity:1}.dhx_cal_checkbox label{padding-left:5px}.dhx_cal_light .radio{padding:2px 0 2px 10px}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px}.dhx_cal_light .combo{padding:4px}.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px}.dhx_wa_column{float:left}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px dotted #8894A3}.dhx_wa_scale_bar{font-family:Tahoma;padding-left:10px;font-size:11px;border-top:1px dotted #8894A3;border-bottom:1px dotted #8894A3}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto}.dhx_wa_ev_body{border-bottom:1px dotted #789;font-size:12px;padding:5px 0 5px 7px}.dhx_wa_dnd{font-family:Tahoma;position:absolute;padding-right:7px;color:#887AE2!important;background-color:#FFE763!important;border:1px solid #B7A543}.dhx_cal_event_selected{background-color:#9cc1db;color:#fff}.dhx_second_scale_bar{border-bottom:1px dotted #586A7E;padding-top:2px}.dhx_cal_header div div{border-left:1px dotted #8894A3}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed}.dhx_grid_area td{table-layout:fixed;text-align:center}.dhx_grid_line{height:21px;clear:both;overflow:hidden}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4}.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td{border-bottom-width:0;border-bottom-style:none}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%}.dhx_grid_event_selected{background-color:#9cc1db!important;color:#fff!important}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(imgs/images.png)}.dhx_marked_timespan{position:absolute;width:100%}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100)}.dhx_mini_calendar .dhx_marked_timespan,.dhx_scheduler_month .dhx_marked_timespan{display:none}.dhx_now_time{width:100%;border-bottom:2px solid red;z-index:1}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px solid red}.dhx_matrix_now_time{border-left:2px solid red;z-index:1}.dhx_matrix_now_time,.dhx_now_time{opacity:.5}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:300;background-color:#8e99ae;background-color:rgba(98,107,127,.5);padding-left:7px;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{padding:5px 0 10px 5px;color:#FFF;letter-spacing:1px}.dhx_cal_qi_tdate{font-size:14px}.dhx_cal_qi_tcontent{font-size:18px;font-weight:700}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden}.dhx_qi_big_icon{border-radius:3px;color:#444;margin:5px 9px 5px 0;min-width:60px;line-height:20px;vertical-align:middle;padding:5px 10px 5px 5px;cursor:pointer;background-color:#fefefe;border-bottom:1px solid #666;border-right:1px solid #666;float:left}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0}.dhx_drag_marker{width:100%;filter:alpha(Opacity=50);opacity:.5;background-color:#FFE763;position:absolute;box-sizing:border-box!important;border-top:1px solid #B6B6B6;border-bottom:1px solid #b6b6b6}.dhx_cal_data div,.dhx_cal_header,.dhx_cal_header div,.dhx_cal_light,.dhx_cal_light div,.dhx_cal_navline div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dhx_cal_light .dhx_cal_radio label{margin-bottom:0}.dhx_cal_event div{line-height:normal}.dhx_cal_container{background-color:#C2D5FC;font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48}.dhx_cal_navline div{position:absolute;top:2px;white-space:nowrap}.dhx_cal_navline .dhx_cal_date{font-weight:600;left:210px;padding-top:1px}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0}.dhx_cal_prev_button{background-image:url(imgs/buttons.png);background-position:0 0;width:29px;height:17px;left:50px;cursor:pointer}.dhx_cal_next_button{background-image:url(imgs/buttons.png);background-position:-30px 0;width:29px;height:17px;left:80px;cursor:pointer}.dhx_cal_today_button{background-image:url(imgs/buttons.png);background-position:-60px 0;width:75px;height:17px;left:112px;cursor:pointer;text-align:center;text-decoration:underline}.dhx_cal_tab{width:59px;height:19px;text-align:center;text-decoration:underline;padding-top:2px;cursor:pointer;background-color:#D8E1EA;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:700;border:1px dotted #586A7E;border-bottom:0;background-color:#C2D5FC}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;border-top:1px dotted #8894A3;border-right:1px dotted #8894A3;z-index:2;overflow:hidden;color:#2F3A48}.dhx_cal_data{-webkit-tap-highlight-color:transparent;border-top:1px dotted #8894A3;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;-ms-touch-action:pan-y}.dhx_cal_event,.dhx_cal_event_clear,.dhx_cal_event_line{-ms-touch-action:none}.dhx_scale_bar{position:absolute;text-align:center;background-color:#C2D5FC;padding-top:3px;border-left:1px dotted #586A7E}.dhx_scale_holder{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg.png)}.dhx_scale_holder_now{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg_now.png)}.dhx_scale_hour{height:41px;width:50px;border-bottom:1px dotted #8894A3;background-color:#C2D5FC;text-align:center;line-height:40px;color:#586A7E;overflow:hidden}.dhx_month_head{background-color:#EBEFF4;color:#2F3A48;height:18px;padding-right:5px;padding-top:3px;text-align:right;border-right:1px dotted #586A7E}.dhx_month_body{border-right:1px dotted #586A7E;border-bottom:1px dotted #586A7E;background-color:#FFF}.dhx_now .dhx_month_body{background-color:#E2EDFF}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#ECECEC}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#E2E3E6;color:#94A6BB}.dhx_now .dhx_month_head{background-color:#D1DEF4;font-weight:700}.dhx_scale_ignore{display:none}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50)}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999}.dhx_multi_day,.dhx_multi_day_icon{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3}.dhx_multi_day{position:absolute;border-top:1px dotted #8894A3}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-color:#E1E6FF;background-repeat:no-repeat;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3}.dhx_multi_day_icon{background-image:url(imgs/clock_big.gif)}.dhx_multi_day_icon_small{background-image:url(imgs/clock_small.gif)}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff}.dhx_month_body_border,.dhx_month_head_border,.dhx_scale_bar_border,.dhx_scale_hour_border{border-left:1px dotted #8894A3}.dhx_cal_navline .dhx_cal_export{width:18px;height:18px;margin:2px;cursor:pointer;top:0}.dhx_cal_navline .dhx_cal_export.pdf{left:2px;background-image:url(imgs/export_pdf.png)}.dhx_cal_navline .dhx_cal_export.ical{left:24px;background-image:url(imgs/export_ical.png)}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px}.dhx_form_repeat{overflow:hidden;height:0;background-color:#FFF4B5}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left}.dhx_repeat_left{width:95px}.dhx_repeat_center{width:335px;margin-top:12px}.dhx_repeat_divider{float:left;height:115px;border-left:1px dotted #DCC43E;width:1px}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px;line-height:18px;padding:0 0 0 2px}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px}input.dhx_repeat_radio{margin-right:4px}input.dhx_repeat_checkbox{margin:4px 4px 0 0}.dhx_repeat_days td{padding-right:5px}.dhx_repeat_days label{font-size:10px}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_custom_button_recurring{background-image:url(imgs/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px}.dhx_cal_light_rec{width:640px}.dhx_cal_light_rec .dhx_cal_larea{width:632px}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px} \ No newline at end of file
diff --git a/codebase/dhtmlxscheduler_flat.css b/codebase/dhtmlxscheduler_flat.css
new file mode 100644
index 0000000..9599266
--- /dev/null
+++ b/codebase/dhtmlxscheduler_flat.css
@@ -0,0 +1,8 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;font-family:Tahoma;z-index:10000;overflow:hidden;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:300px;text-align:center;position:fixed;box-shadow:0 0 14px #888;z-index:20000}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%)}.dhtmlx-info,.dhtmlx_button,.dhtmlx_popup_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:5px}.dhtmlx_button,.dhtmlx_popup_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF}.dhtmlx_popup_button{min-width:120px}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:none;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC)}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:400;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px}.dhtmlx_button input:active,.dhtmlx_button input:focus,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%)}.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;color:#000;min-height:30px;border-radius:6px}.dhtmlx-error,.dhtmlx-info{font-size:14px;color:#000;box-shadow:0 0 10px #888;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 #B8B8B8}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0;cursor:pointer}.dhx_cal_event .dhx_title{border-bottom-style:dotted;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px;padding:5px}.dhx_cal_event.dhx_cal_select_menu{-webkit-box-shadow:0 0 1px #FFF;-moz-box-shadow:0 0 1px #FFF;box-shadow:0 0 1px #FFF}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important}.dhx_cal_event .dhx_event_resize{cursor:s-resize}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px;position:relative}.dhx_cal_event_line{padding-left:10px;cursor:pointer;overflow:hidden}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;white-space:nowrap;overflow:hidden;cursor:pointer}.dhx_in_move{background-color:#FFFF80}.dhx_cal_event.dhx_cal_editor{z-index:999;position:absolute;overflow:hidden}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid #000;margin:0;padding:0;overflow:auto}div.dhx_menu_head{background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default}div.dhx_menu_icon{width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer}div.icon_details{background-position:0 0}div.icon_edit{background-position:-22px 0}div.icon_save{background-position:-84px -1px}div.icon_cancel{background-position:-62px 0}div.icon_delete{background-position:-42px 0}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px}.dhx_month_link a{color:#00f}.dhx_month_link a:hover{text-decoration:underline}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,.7);color:#000;z-index:10000;padding:20px 30px;width:190px}.dhx_global_tip div{font-size:30px}@media (-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none}}.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;font-size:8pt;position:absolute;z-index:10001;width:580px;height:300px;box-shadow:5px 5px 5px #888}.dhx_mark{position:relative;top:3px;background-image:url(imgs/controls.gif);background-position:0 -43px;padding-left:10px}.dhx_ie6 .dhx_mark{background-position:6px -41px}.dhx_cal_light select{font-family:Tahoma;font-size:8pt;padding:2px;margin:0}.dhx_cal_ltitle{padding:2px 0 2px 5px;overflow:hidden;white-space:nowrap}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{font-weight:700;padding:5px 0 3px 10px}.dhx_section_time{white-space:nowrap}.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:18px}.dhx_cal_ltext{padding:2px 0 2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;height:100%;width:100%;outline:0!important;resize:none}.dhx_time{font-weight:700}.dhx_cal_larea{overflow:hidden;width:572px;height:1px}.dhx_btn_set{float:left}.dhx_btn_set div{float:left;vertical-align:middle;cursor:pointer}.dhx_save_btn{background-image:url(imgs/controls.gif);background-position:-84px 0;width:21px}.dhx_cancel_btn{background-image:url(imgs/controls.gif);background-position:-63px 0;width:20px}.dhx_delete_btn{background-image:url(imgs/controls.gif);background-position:-42px 0;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:8pt;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 .dhx_cal_larea{border-top-width:0}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;padding:5px 0 0 10px}.dhx_cal_light_wide .dhx_wrap_section{position:relative;overflow:hidden}.dhx_cal_light_wide .dhx_section_time{padding-top:2px!important;height:20px!important}.dhx_section_time{text-align:center}.dhx_cal_light_wide .dhx_cal_larea{width:730px}.dhx_cal_light_wide{width:738px}.dhx_cal_light_wide .dhx_section_time{background:0 0}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-size:8pt}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;cursor:pointer}.dhx_custom_button{float:right;height:21px}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_minical_popup{position:absolute;z-index:10100;width:251px;height:175px}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%}.dhx_expand_icon{position:absolute;right:0;background-image:url(imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(imgs/databg.png)}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(imgs/databg.png)}.dhx_agenda_line{height:21px;clear:both;overflow:hidden}.dhx_agenda_line div{float:left;width:188px;text-align:center;line-height:21px;overflow:hidden}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3}.dhx_v_border{position:absolute;left:187px;top:0;width:1px;height:100%}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_agenda_line span{padding-left:5px;line-height:21px}.dhx_year_week{position:relative}.dhx_year_month{height:18px;padding-top:3px;text-align:center;vertical-align:middle}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head a,.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a{color:#E2E3E6!important}.dhx_year_body .dhx_month_body{height:0;overflow:hidden}.dhx_month_head.dhx_year_event{background-color:#FFE763}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head{cursor:default}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center}.dhx_text_disabled{font-family:Tahoma;font-size:8pt}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.dhx_mini_calendar .dhx_month_head{cursor:pointer}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC}.dhx_cal_navline div.dhx_minical_icon{cursor:pointer}.dhx_matrix_scell{height:100%}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle}.dhx_matrix_cell{background-color:#fff}.dhx_matrix_line{overflow:hidden}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;position:absolute;top:0;width:4px;height:100%}.dhx_event_resize_start{left:0}.dhx_event_resize_end{right:0}.dhx_data_table.folder .dhx_matrix_cell,.dhx_matrix_scell.folder{background-color:#969394;cursor:pointer}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px}.dhx_matrix_scell.folder{font-weight:700;text-align:left}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left}.dhx_data_table.folder .dhx_matrix_cell{border-right:0}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px}.dhx_section_timeline select{width:552px}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(imgs/databg.png)}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_map_line{height:21px;clear:both;overflow:hidden}.dhx_map{position:absolute}.dhx_map_line .headline_description,.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden}.dhx_map_line.highlight{background-color:#C4C5CC}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);background-color:#fff;cursor:default;padding:10px;position:absolute;z-index:500;font-family:Tahoma;opacity:1}.dhx_cal_checkbox label{padding-left:5px}.dhx_cal_light .radio{padding:2px 0 2px 10px}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px}.dhx_cal_light .combo{padding:4px}.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px}.dhx_wa_column{float:left}.dhx_wa_scale_bar{font-family:Tahoma;padding-left:10px;font-size:11px}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto}.dhx_wa_ev_body{font-size:12px;padding:5px 0 5px 7px}.dhx_wa_dnd{font-family:Tahoma;position:absolute;padding-right:7px}.dhx_cal_event_selected{background-color:#9cc1db;color:#fff}.dhx_second_scale_bar{padding-top:2px}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed}.dhx_grid_area td{table-layout:fixed;text-align:center}.dhx_grid_line{height:21px;clear:both;overflow:hidden}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4}.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td{border-bottom-width:0;border-bottom-style:none}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%}.dhx_grid_event_selected{background-color:#9cc1db!important;color:#fff!important}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(imgs/images.png)}.dhx_marked_timespan{position:absolute;width:100%}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100)}.dhx_mini_calendar .dhx_marked_timespan,.dhx_scheduler_month .dhx_marked_timespan{display:none}.dhx_now_time{width:100%;border-bottom:2px solid red;z-index:1}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px solid red}.dhx_matrix_now_time{border-left:2px solid red;z-index:1}.dhx_matrix_now_time,.dhx_now_time{opacity:.5}.dhx_cal_quick_info{position:absolute;z-index:300;padding-left:7px;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{padding:5px 0 10px 5px;letter-spacing:1px}.dhx_cal_qi_tdate{font-size:14px}.dhx_cal_qi_tcontent{font-size:18px;font-weight:700}.dhx_cal_qi_content{font-size:14px;color:#444;width:275px;overflow:hidden}.dhx_qi_big_icon{margin:5px 9px 5px 0;min-width:60px;line-height:20px;vertical-align:middle;padding:5px 10px 5px 5px;cursor:pointer;background-color:#fefefe}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0}.dhx_drag_marker{width:100%;filter:alpha(Opacity=50);opacity:.5;background-color:#FFE763;position:absolute;box-sizing:border-box!important;border-top:1px solid #B6B6B6;border-bottom:1px solid #b6b6b6}.dhx_cal_data div,.dhx_cal_header,.dhx_cal_header div,.dhx_cal_light,.dhx_cal_light div,.dhx_cal_navline div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dhx_cal_light .dhx_cal_radio label{margin-bottom:0}.dhx_cal_event div{line-height:normal}.dhx_cal_container{font-size:8pt;position:relative;overflow:hidden}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48}.dhx_cal_navline div{position:absolute;white-space:nowrap}.dhx_cal_navline .dhx_cal_date{padding-top:1px}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0}.dhx_cal_next_button,.dhx_cal_prev_button{cursor:pointer}.dhx_cal_today_button{cursor:pointer;text-align:center}.dhx_cal_tab{text-align:center;cursor:pointer;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px}.dhx_cal_tab.active{cursor:default}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;z-index:2;overflow:hidden;color:#2F3A48}.dhx_cal_data{-webkit-tap-highlight-color:transparent;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;-ms-touch-action:pan-y}.dhx_cal_event,.dhx_cal_event_clear,.dhx_cal_event_line{-ms-touch-action:none}.dhx_scale_bar{position:absolute;text-align:center}.dhx_scale_holder,.dhx_scale_holder_now{position:absolute}.dhx_scale_hour{height:41px;width:50px;text-align:center;line-height:40px;overflow:hidden}.dhx_month_head{padding-right:5px;text-align:right}.dhx_month_body{background-color:#FFF}.dhx_scale_ignore{display:none}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50)}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999}.dhx_multi_day,.dhx_multi_day_icon{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3}.dhx_multi_day{position:absolute}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-repeat:no-repeat}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px}.dhx_form_repeat{overflow:hidden;height:0}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left}.dhx_repeat_left{width:95px}.dhx_repeat_center{width:335px;margin-top:12px}.dhx_repeat_divider{float:left;height:115px;width:1px}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px;line-height:18px;padding:0 0 0 2px}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px}input.dhx_repeat_radio{margin-right:4px}input.dhx_repeat_checkbox{margin:4px 4px 0 0}.dhx_repeat_days td{padding-right:5px}.dhx_repeat_days label{font-size:10px}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_custom_button_recurring{background-position:-5px 20px;width:20px;margin-right:10px}.dhx_cal_light_rec{width:640px}.dhx_cal_light_rec .dhx_cal_larea{width:632px}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px}.dhx_cal_event .dhx_title{border-width:1px 1px 0;-webkit-border-top-left-radius:1px;-webkit-border-top-right-radius:1px;-moz-border-radius-topleft:1px;-moz-border-radius-topright:1px;border-top-left-radius:1px;border-top-right-radius:1px;font-family:"Segoe UI",Arial;font-weight:700;font-size:12px;height:14px;line-height:14px}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{padding-bottom:8px;-webkit-border-bottom-right-radius:1px;-webkit-border-bottom-left-radius:1px;-moz-border-radius-bottomright:1px;-moz-border-radius-bottomleft:1px}.dhx_cal_event .dhx_header,.dhx_cal_event.dhx_cal_select_menu .dhx_footer{display:none}.dhx_cal_event .dhx_footer{height:15px;border:0;background-color:transparent!important;margin-top:-11px}.dhx_cal_event .dhx_footer:hover{background:url(imgs_flat/resizing.png) no-repeat center center}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{background-color:#5B9BE0;border-color:transparent;color:#fff}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-bottom:1px solid #fff;border-bottom-left-radius:2px;border-bottom-right-radius:2px}.dhx_cal_event.dhx_cal_editor{border:1px solid transparent}.dhx_cal_editor{font-size:12px;font-family:"Segoe UI",Arial}div.dhx_menu_head,div.dhx_menu_icon{background-image:url(imgs_flat/controls.png)}.dhx_cal_event_line{border:1px solid transparent;background-color:#5B9BE0;color:#FFF;height:17px;line-height:17px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.dhx_cal_event_line:hover div{background:url(imgs_flat/resize_dots.png) repeat-y}.dhx_cal_event_line_start{-webkit-border-top-left-radius:1px;-webkit-border-bottom-left-radius:1px;-moz-border-radius-topleft:1px;-moz-border-radius-bottomleft:1px;border-top-left-radius:1px;border-bottom-left-radius:1px}.dhx_cal_event_line_end{-webkit-border-top-right-radius:1px;-webkit-border-bottom-right-radius:1px;-moz-border-radius-topright:1px;-moz-border-radius-bottomright:1px;border-top-right-radius:1px;border-bottom-right-radius:1px}.dhx_cal_event .dhx_body,.dhx_cal_event_line{font-size:12px;font-family:"Segoe UI",Arial}.dhx_cal_event:hover .dhx_footer{background:url(imgs_flat/resizing.png) no-repeat center center}.dhx_cal_container{background-color:#fff;font-family:"Segoe UI",Arial}.dhx_cal_data{border-top:1px solid #CECECE}.dhx_scale_holder{background-image:url(imgs_flat/databg.png);border-right:1px solid #CECECE}.dhx_scale_holder_now{background-image:url(imgs_flat/databg_now.png);border-right:1px solid #CECECE}.dhx_scale_hour{border-bottom:1px solid #CECECE;background-color:#fff;font:11px/44px Arial;font-family:"Segoe UI",Arial;font-weight:lighter;color:#767676}.dhx_scale_h{display:inline-block;font-size:22px}.dhx_scale_m{display:inline-block;font-size:11px;line-height:35px;vertical-align:top}.dhx_cal_header{border:1px solid #CECECE;border-left:0;border-bottom:0}.dhx_scale_bar{border-left:1px solid #CECECE;font:12px/16px "Segoe UI",Arial;color:#767676;line-height:30px;padding-top:2px;background-color:#fff}.dhx_scale_bar>a{color:#5780AD;text-decoration:none}.dhx_scale_bar>a:hover{text-decoration:underline}.dhx_month_head>a{color:#5780AD;text-decoration:none}.dhx_month_head>a:hover{text-decoration:underline}.dhx_cal_navline div{top:14px}.dhx_cal_date,.dhx_cal_next_button,.dhx_cal_prev_button,.dhx_cal_tab,.dhx_cal_today_button{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:none;color:#454544;height:30px;line-height:30px;background:0 0;font-family:"Segoe UI",Arial;font-weight:lighter}.dhx_cal_navline .dhx_cal_date{border:0;color:#454544;font-family:"Segoe UI",Arial;font-weight:lighter;font-size:22px;text-align:center;top:14px;position:absolute;left:0;width:100%;z-index:-1}.dhx_cal_today_button{background:0 0;color:#5780AD;font-size:13px;font-weight:bolder;left:auto;right:123px;text-decoration:none;width:80px}.dhx_cal_next_button,.dhx_cal_prev_button{left:auto;width:46px}.dhx_cal_prev_button{right:61px;background:url(imgs_flat/arrow_left.png) no-repeat center center}.dhx_cal_next_button{right:14px;background:url(imgs_flat/arrow_right.png) no-repeat center center}.dhx_cal_tab{color:#5780AD;font-size:13px;font-weight:bolder;padding-top:0;text-decoration:none;width:60px}.dhx_cal_tab:hover,.dhx_cal_today_button:hover{text-decoration:underline}.dhx_cal_tab.active{background-color:#5780AD;border:none;color:#FFF;font-family:"Segoe UI",Arial;font-weight:lighter;text-decoration:none}.dhx_cal_tab_standalone{padding:0 5px}.dhx_multi_day,.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-color:#fff}.dhx_multi_day{border-top:1px solid #CECECE}.dhx_multi_day_icon,.dhx_multi_day_icon_small{border-bottom:1px solid #CECECE;border-right:1px solid #CECECE}.dhx_multi_day_icon_small{background-image:url(imgs_flat/clock.png)}.dhx_multi_day_icon{background-image:url(imgs_flat/clock_big.gif)}.dhx_after .dhx_month_body,.dhx_after .dhx_month_head,.dhx_before .dhx_month_body,.dhx_before .dhx_month_head,.dhx_month_head{background-color:#fff}.dhx_month_head{height:21px;padding-top:0;font:12px/21px "Segoe UI",Arial;color:#5780AD;border-right:1px solid #CECECE}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{color:#bbb}.dhx_month_body{border-right:1px solid #CECECE;border-bottom:1px solid #CECECE}.dhx_now .dhx_month_body,.dhx_now .dhx_month_head{background-color:#FFF3A1;font-weight:400}.dhx_cal_event_clear{color:#0E64A0}.dhx_cal_larea{margin-left:0}.dhx_cal_light_wide .dhx_cal_larea{margin-left:3px}.dhx_cal_light_wide .dhx_wrap_section{padding:5px 0}.dhx_cal_larea,.dhx_cal_light,.dhx_cal_light_wide .dhx_wrap_section,.dhx_cal_lsection,.dhx_cal_ltext textarea,.dhx_wrap_section{background-color:#fff;font-family:"Segoe UI",Arial}.dhx_cal_light input,.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,.dhx_cal_lsection,.dhx_cal_lsection .dhx_fullday{color:#747473;font-family:"Segoe UI",Arial}.dhx_cal_light_wide .dhx_wrap_section{border-top:0;border-bottom:1px solid #CECECE}.dhx_cal_larea{border:1px solid transparent}.dhx_cal_light,.dhx_cal_light select,.dhx_cal_ltext textarea{color:#2E2E2E}.dhx_cal_light{border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.dhx_cal_light_wide .dhx_cal_lsection,.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{font-family:"Segoe UI",Arial;font-size:13px;font-weight:700}.dhx_section_time{background-color:transparent}.dhx_btn_set div:first-child,.dhx_cancel_btn,.dhx_delete_btn,.dhx_save_btn{display:none}.dhx_btn_set,.dhx_btn_set div{height:30px;padding:0 20px;line-height:30px}.dhx_btn_set{margin:12px 0 0;padding:0;font-size:13px;color:#454544;font-weight:400;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.dhx_left_btn_set{margin-left:20px}.dhx_right_btn_set{margin-right:20px}.dhx_save_btn_set{border:none;color:#FFF;background-color:#5B9BE0}.dhx_cancel_btn_set{background-color:#FE7510;color:#FFF}.dhx_delete_btn_set{border:1px solid #A4A4A4;color:#747473}.dhx_cal_ltitle{height:30px;line-height:30px;border-bottom:1px solid #CECECE}.dhx_cal_ltitle span{float:left}.dhx_cal_light .dhx_title{font-size:13px;padding-left:13px}.dhx_mark{display:none}.dhx_time{font-size:12px;padding-left:10px}.dhx_close_icon{float:right;width:9px;height:9px;background:url(imgs_flat/close_icon.png) no-repeat center center;padding:10px;margin-top:1px}.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template{line-height:22px}.dhx_cal_ltext textarea{line-height:20px;box-sizing:border-box;-moz-box-sizing:border-box;border:1px solid #CECECE;background-color:#F9F9F9}.dhtmlx_modal_box{border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background:#fff;font-family:"Segoe UI",Arial;width:330px}.dhtmlx_popup_text{font-size:16px}.dhtmlx_popup_controls{padding-bottom:9px}.dhtmlx_popup_button,.dhtmlx_popup_button div,.dhtmlx_popup_button div:active,.dhtmlx_popup_button:active{color:#444;background:#fff;box-shadow:none;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.dhtmlx_popup_button.dhtmlx_ok_button{border:none;background-color:#5B9BE0}.dhtmlx_popup_button.dhtmlx_ok_button div{background:#5B9BE0;border:none;color:#FFF}.dhtmlx_popup_button.dhtmlx_cancel_button{border:none;background-color:#FE7510}.dhtmlx_popup_button.dhtmlx_cancel_button div{background:#FE7510;border:none;color:#FFF}.dhx_cal_container.dhx_mini_calendar{box-sizing:border-box;border:none;box-shadow:0 2px 10px 0 #AAA;border-radius:0}.dhx_mini_calendar .dhx_year_month{border:1px solid #CECECE;font-family:"Segoe UI",Arial}.dhx_mini_calendar .dhx_month_body,.dhx_mini_calendar .dhx_month_head,.dhx_mini_calendar .dhx_scale_bar,.dhx_mini_calendar .dhx_year_body,.dhx_mini_calendar .dhx_year_month{border-color:transparent}.dhx_mini_calendar .dhx_year_body{padding-top:1px}.dhx_mini_calendar .dhx_scale_bar{border-width:0}.dhx_mini_calendar .dhx_year_week{border-bottom:1px solid #CECECE;padding-top:1px}.dhx_mini_calendar .dhx_month_head{padding-right:0;text-align:center}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{border:0;height:20px}.dhx_cal_navline div.dhx_minical_icon{left:210px;top:14px;width:30px;height:30px;background:url(imgs_flat/calendar.gif) no-repeat;background-position:3px 5px}.dhx_cal_event_line .dhx_event_resize{background:0 0}.dhx_cal_event_line .dhx_event_resize:hover{background:url(imgs_flat/resize_dots.png) repeat-y}.dhx_matrix_cell,.dhx_matrix_scell{border-bottom:1px solid #CECECE;border-right:1px solid #CECECE}.dhx_cal_header div div{border-left:1px solid #CECECE}.dhx_matrix_scell{font-size:13px}.dhx_matrix_scell.folder{border-right:0}.dhx_second_scale_bar{border-bottom:1px solid #CECECE}.dhx_repeat_divider{border-left:1px solid #CECECE}.dhx_custom_button{background-color:#fff;border:1px solid #CECECE;color:#747473}.dhx_cal_light_wide .dhx_custom_button{margin-top:6px}.dhx_custom_button_recurring{background-image:url(imgs_flat/but_repeat.gif)}.dhx_form_repeat{background-color:transparent}.dhx_agenda_line div,.dhx_v_border{border-right:1px solid #CECECE}.dhx_cal_header .dhx_agenda_line,.dhx_cal_header .dhx_agenda_line div{height:100%;line-height:35px}.dhx_year_month{border:1px solid #CECECE}.dhx_scale_bar_last{border-right:1px solid #CECECE}.dhx_year_body{border-left:1px solid #CECECE}.dhx_expand_icon{top:-3px}.dhx_scale_bar .dhx_cal_next_button,.dhx_scale_bar .dhx_cal_prev_button{width:20px;height:100%;top:0!important;border:0}.dhx_scale_bar .dhx_cal_next_button{right:1px!important;border-left:1px solid #CECECE}.dhx_scale_bar .dhx_cal_prev_button{left:1px!important;border-right:1px solid #CECECE}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border:0}.dhx_map_line .headline_date{border-right:1px solid #CECECE}.dhx_cal_header .dhx_map_line{height:100%}.dhx_cal_header .dhx_map_line .headline_date,.dhx_cal_header .dhx_map_line .headline_description{height:100%;line-height:35px}.dhtmlXTooltip.tooltip{border-left:1px solid #CECECE;border-top:1px solid #CECECE;color:#747473;font-size:12px;line-height:16px}.dhx_wa_scale_bar{border-top:1px solid #CECECE;border-bottom:1px solid #CECECE}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px solid #CECECE}.dhx_wa_ev_body{border-bottom:1px solid #CECECE}.dhx_wa_scale_bar{background-color:#f0ede7}.dhx_wa_ev_body.dhx_cal_event_selected{background-color:#fff3a1;color:#362d26}.dhx_wa_dnd{background-color:#fddb93!important;color:#747473!important;border:1px solid #ccb177}.dhx_text_disabled{color:#2E2E2E}.dhx_cal_ltext .dhx_text_disabled{line-height:22px}.dhx_grid_v_border{border-right-color:#CECECE}.dhx_cal_header .dhx_grid_line,.dhx_cal_header .dhx_grid_line div{height:100%;line-height:35px}.dhx_month_body_border,.dhx_month_head_border,.dhx_scale_bar_border,.dhx_scale_hour_border{border-left:1px solid #CECECE}.dhx_cal_quick_info{background:rgba(204,204,204,.8);border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-family:"Segoe UI",Arial;width:280px}.dhx_cal_qi_title{color:#000}.dhx_cal_qi_tdate{color:#444}.dhx_cal_qi_content{background:0 0;border:none;padding:10px 8px}.dhx_qi_big_icon{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:none;color:#FFF;float:none;font-size:13px}.dhx_qi_big_icon .dhx_menu_icon{display:none!important}.dhx_cal_quick_info .icon_details{background:#5B9BE0;margin-left:100px}.dhx_cal_quick_info .icon_details div{padding-left:12px}.dhx_cal_quick_info .icon_delete{background:#FE7510}.dhx_cal_quick_info .icon_delete div{padding-left:12px}.dhx_cal_navline .dhx_cal_export{width:32px;height:32px;margin:2px;cursor:pointer;top:12px}.dhx_cal_navline .dhx_cal_export.pdf{left:auto;right:249px;background-image:url(imgs_flat/export_pdf.png)}.dhx_cal_navline .dhx_cal_export.ical{left:auto;right:210px;background-image:url(imgs_flat/export_ical.png)}.dhx_mini_calendar{font-family:"Segoe UI",Arial;padding:5px}.dhx_mini_calendar .dhx_calendar_click,.dhx_mini_calendar .dhx_year_event{border-radius:0}.dhx_mini_calendar .dhx_month_head{color:#363636;font-family:"Segoe UI",Arial;font-size:13px;margin:2px}.dhx_mini_calendar .dhx_year_month{color:#454544;line-height:20px;height:25px;font-size:20px;font-weight:lighter}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{top:8px!important}.dhx_mini_calendar .dhx_scale_bar{font-family:"Segoe UI",Arial;font-size:11px} \ No newline at end of file
diff --git a/codebase/dhtmlxscheduler_glossy.css b/codebase/dhtmlxscheduler_glossy.css
index 45c6ff7..dc96f73 100644
--- a/codebase/dhtmlxscheduler_glossy.css
+++ b/codebase/dhtmlxscheduler_glossy.css
@@ -1,6 +1,8 @@
-@charset "UTF-8";
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-.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:300px;width:300px;text-align:center;position:fixed;background-color:#fff;background:-webkit-linear-gradient(top,#fff 1%,#d0d0d0 99%);background:-moz-linear-gradient(top,#fff 1%,#d0d0d0 99%);box-shadow:0 0 14px #888;font-family:Tahoma;z-index:20000;border-radius:6px;border:1px solid #fff;}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);}.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:5px;}.dhtmlx_popup_button,.dhtmlx_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF;}.dhtmlx_popup_button{min-width:120px;}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:none;zoom:1;}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px;}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid #f00;}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383;}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:normal;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px;}.dhtmlx_button input:focus,.dhtmlx_button input:active,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%);}.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:0 0 10px #888;padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff;}.dhtmlx-info div{padding:5px 10px 5px 10px;background-color:#fff;border-radius:3px;border:1px solid #B8B8B8;}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000;}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF;}.dhx_cal_container{background-color:#C2D5FC;font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden;}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none;}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48;}.dhx_cal_navline div{position:absolute;top:2px;white-space:nowrap;}.dhx_cal_navline .dhx_cal_date{font-weight:600;left:210px;padding-top:1px;}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0;}.dhx_cal_prev_button{background-image:url(imgs/buttons.png);background-position:0 0;width:29px;height:17px;left:50px;cursor:pointer;}.dhx_cal_next_button{background-image:url(imgs/buttons.png);background-position:-30px 0;width:29px;height:17px;left:80px;cursor:pointer;}.dhx_cal_today_button{background-image:url(imgs/buttons.png);background-position:-60px 0;width:75px;height:17px;left:112px;cursor:pointer;text-align:center;text-decoration:underline;}.dhx_cal_tab{width:59px;height:19px;text-align:center;text-decoration:underline;padding-top:2px;cursor:pointer;background-color:#D8E1EA;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:bold;border:1px dotted #586A7E;border-bottom:0;background-color:#C2D5FC;}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;border-top:1px dotted #8894A3;border-right:1px dotted #8894A3;z-index:2;overflow:hidden;color:#2F3A48;}.dhx_cal_data{-webkit-tap-highlight-color:transparent;border-top:1px dotted #8894A3;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;}.dhx_cal_data{-ms-touch-action:pan-y;}.dhx_cal_event,.dhx_cal_event_line,.dhx_cal_event_clear{-ms-touch-action:none;}.dhx_scale_bar{position:absolute;text-align:center;background-color:#C2D5FC;padding-top:3px;border-left:1px dotted #586A7E;}.dhx_scale_holder{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg.png);}.dhx_scale_holder_now{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg_now.png);}.dhx_scale_hour{height:41px;width:50px;border-bottom:1px dotted #8894A3;background-color:#C2D5FC;text-align:center;line-height:40px;color:#586A7E;overflow:hidden;}.dhx_month_head{background-color:#EBEFF4;color:#2F3A48;height:18px;padding-right:5px;padding-top:3px;text-align:right;border-right:1px dotted #586A7E;}.dhx_month_body{border-right:1px dotted #586A7E;border-bottom:1px dotted #586A7E;background-color:#FFF;}.dhx_now .dhx_month_body{background-color:#E2EDFF;}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#ECECEC;}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#E2E3E6;color:#94A6BB;}.dhx_now .dhx_month_head{background-color:#D1DEF4;font-weight:bold;}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50);}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999;}.dhx_multi_day_icon,.dhx_multi_day{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3;}.dhx_multi_day{position:absolute;border-top:1px dotted #8894A3;}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-color:#E1E6FF;background-repeat:no-repeat;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_multi_day_icon{background-image:url(imgs/clock_big.gif);}.dhx_multi_day_icon_small{background-image:url(imgs/clock_small.gif);}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff;}.dhx_scale_hour_border,.dhx_month_body_border,.dhx_scale_bar_border,.dhx_month_head_border{border-left:1px dotted #8894A3;}.dhx_cal_navline .dhx_cal_export{width:18px;height:18px;margin:2px;cursor:pointer;top:0;}.dhx_cal_navline .dhx_cal_export.pdf{left:2px;background-image:url('imgs/export_pdf.png');}.dhx_cal_navline .dhx_cal_export.ical{left:24px;background-image:url('imgs/export_ical.png');}.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title,.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt;}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default;}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0 1px;cursor:pointer;}.dhx_cal_event .dhx_title{height:12px;border-width:0 1px 1px 1px;border-bottom-style:dotted;font-size:7pt;font-weight:bold;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer;}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px 1px;padding:5px;}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important;}.dhx_cal_event .dhx_event_resize{cursor:s-resize;}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px 1px;position:relative;}.dhx_cal_event_line{background-color:#FFE763;border:1px solid #B7A543;border-radius:3px;font-family:Tahoma;font-size:8pt;height:13px;padding-left:10px;color:#887A2E;cursor:pointer;overflow:hidden;}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;color:#887A2E;white-space:nowrap;overflow:hidden;cursor:pointer;}.dhx_in_move{background-color:#FFFF80;}div.dhx_cal_editor{background-color:#FFE763;border:1px solid #B7A543;border-top-style:dotted;z-index:999;position:absolute;overflow:hidden;}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid black;margin:0;padding:0;overflow:auto;}div.dhx_menu_head{background-image:url(imgs/controls.gif);background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default;}div.dhx_menu_icon{background-image:url(imgs/controls.gif);width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer;}div.icon_details{background-position:0 0;}div.icon_edit{background-position:-22px 0;}div.icon_save{background-position:-84px -1px;}div.icon_cancel{background-position:-62px 0;}div.icon_delete{background-position:-42px 0;}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px;}.dhx_month_link a{color:blue;}.dhx_month_link a:hover{text-decoration:underline;}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,0.7);color:#000;z-index:10000;padding:20px 30px;width:190px;}.dhx_global_tip div{font-size:30px;}@media(-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none;}}.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:#FFE763;border-radius:5px;font-family:Tahoma;font-size:8pt;border:1px solid #B7A64B;color:#887A2E;position:absolute;z-index:10001;width:580px;height:300px;box-shadow:5px 5px 5px #888;}.dhx_cal_light_wide{width:650px;}.dhx_mark{position:relative;top:3px;background-image:url('./imgs/controls.gif');background-position:0 -43px;padding-left:10px;}.dhx_ie6 .dhx_mark{background-position:6px -41px;}.dhx_cal_light select{font-family:Tahoma;font-size:8pt;color:#887A2E;padding:2px;margin:0;}.dhx_cal_ltitle{padding:2px 0 2px 5px;overflow:hidden;white-space:nowrap;}.dhx_cal_ltitle span{white-space:nowrap;}.dhx_cal_lsection{background-color:#DBCF8C;color:#FFF4B5;font-weight:bold;padding:5px 0 3px 10px;}.dhx_section_time{background-color:#DBCF8C;white-space:nowrap;}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;color:#887A2E;font-size:12px;font-weight:normal;line-height:20px;vertical-align:top;cursor:pointer;}.dhx_cal_lsection{font-size:18px;font-family:Arial;}.dhx_cal_ltext{padding:2px 0 2px 10px;overflow:hidden;}.dhx_cal_ltext textarea{background-color:#FFF4B5;overflow:auto;border:none;color:#887A2E;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 #DCC43E;background-color:#FFF4B5;overflow:hidden;margin-left:3px;width:572px;height:1px;}.dhx_btn_set{padding:5px 10px 0 10px;float:left;}.dhx_btn_set div{float:left;height:21px;line-height:21px;vertical-align:middle;cursor:pointer;}.dhx_save_btn{background-image:url('./imgs/controls.gif');background-position:-84px 0;width:21px;}.dhx_cancel_btn{background-image:url('./imgs/controls.gif');background-position:-63px 0;width:20px;}.dhx_delete_btn{background-image:url('./imgs/controls.gif');background-position:-42px 0;width:20px;}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:black;opacity:.1;filter:alpha(opacity=10);}.dhx_custom_button{padding:0 3px 0 3px;color:#887A2E;font-family:Tahoma;font-size:8pt;background-color:#FFE763;font-weight:normal;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 .dhx_cal_larea{border-top-width:0;}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;font-size:16px;padding:5px 0 0 10px;}.dhx_cal_light_wide .dhx_wrap_section{border-top:1px solid #DBCF8C;position:relative;background-color:#DBCF8C;overflow:hidden;}.dhx_cal_light_wide .dhx_section_time{padding-top:2px!important;height:20px!important;}.dhx_section_time{text-align:center;}.dhx_cal_light_wide .dhx_cal_larea{width:730px;}.dhx_cal_light_wide{width:738px;}.dhx_cal_light_wide .dhx_section_time{background:transparent;}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0;}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px;}.dhx_cal_light input{font-family:Tahoma;font-size:8pt;color:#887A2E;}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;color:#FFF4B5;font-weight:bold;font-size:16px;font-family:Arial;cursor:pointer;}.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_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_minical_popup{position:absolute;z-index:10100;width:251px;height:175px;}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%;}.dhx_expand_icon{position:absolute;top:0;right:0;background-image:url(./imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16;}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(./imgs/databg.png);}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(./imgs/databg.png);}.dhx_agenda_line{height:21px;clear:both;overflow:hidden;}.dhx_agenda_line div{float:left;width:188px;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3;}.dhx_v_border{position:absolute;left:187px;top:0;border-right:1px dotted #8894A3;width:1px;height:100%;}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_agenda_line span{padding-left:5px;line-height:21px;}.dhx_year_body{border-left:1px dotted #586A7E;}.dhx_year_week{position:relative;}.dhx_scale_bar_last{border-right:1px dotted #586A7E;}.dhx_year_month{height:18px;padding-top:3px;border:1px dotted #586A7E;text-align:center;vertical-align:middle;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a,.dhx_year_body .dhx_after .dhx_month_head a{color:#E2E3E6!important;}.dhx_year_body .dhx_month_body{height:0;overflow:hidden;}.dhx_month_head.dhx_year_event{background-color:#FFE763;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head{cursor:default;}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(./imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden;}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden;}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center;}.dhx_text_disabled{color:#887A2E;font-family:Tahoma;font-size:8pt;}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none;}.dhx_mini_calendar .dhx_month_head{cursor:pointer;}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC;}.dhx_cal_navline div.dhx_minical_icon{width:18px;height:18px;left:190px;top:1px;cursor:pointer;background-image:url(./imgs/calendar.gif);}.dhx_matrix_scell{height:100%;}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_matrix_cell{background-color:white;}.dhx_matrix_line{overflow:hidden;}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto;}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E;}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;background:url(./imgs/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;}.dhx_event_resize_start{left:0;}.dhx_event_resize_end{right:0;}.dhx_matrix_scell.folder,.dhx_data_table.folder .dhx_matrix_cell{background-color:#969394;cursor:pointer;}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px;}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px;}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px;}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px;}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px;}.dhx_matrix_scell.folder{font-weight:bold;text-align:left;}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px;}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto;}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left;}.dhx_data_table.folder .dhx_matrix_cell{border-right:0;}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px;}.dhx_section_timeline select{width:552px;}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(./imgs/databg.png);}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_map_line{height:21px;clear:both;overflow:hidden;}.dhx_map{position:absolute;}.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_description{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border-left:0;}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden;}.dhx_map_line.highlight{background-color:#C4C5CC;}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3;}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888',Direction=135,Strength=5);background-color:white;border-left:1px dotted #887A2E;border-top:1px dotted #887A2E;color:#887A2E;cursor:default;padding:10px;position:absolute;z-index:500;font-family:Tahoma;font-size:8pt;}.dhx_cal_checkbox label{padding-left:5px;}.dhx_cal_light .radio{padding:2px 0 2px 10px;}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px;}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0;}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px;}.dhx_cal_light .combo{padding:4px;}.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px;}.dhx_wa_column{float:left;}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px dotted #8894A3;}.dhx_wa_scale_bar{font-family:Tahoma;padding-left:10px;font-size:11px;border-top:1px dotted #8894A3;border-bottom:1px dotted #8894A3;}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto;}.dhx_wa_ev_body{border-bottom:1px dotted #789;font-size:12px;padding:5px 0 5px 7px;}.dhx_wa_dnd{font-family:Tahoma;position:absolute;padding-right:7px;color:#887AE2!important;background-color:#FFE763!important;border:1px solid #B7A543;}.dhx_cal_event_selected{background-color:#9cc1db;color:white;}.dhx_second_scale_bar{border-bottom:1px dotted #586A7E;padding-top:2px;}.dhx_cal_header div div{border-left:1px dotted #8894A3;}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC;}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed;}.dhx_grid_area td{table-layout:fixed;text-align:center;}.dhx_grid_line{height:21px;clear:both;overflow:hidden;}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden;}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px;}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px 0;}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td{border-bottom-width:0;border-bottom-style:none;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4;;}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important;}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%;}.dhx_grid_event_selected{background-color:#9cc1db!important;color:white!important;}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px;}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px;}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(./imgs/images.png);}.dhx_marked_timespan{position:absolute;width:100%;}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1;}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100);}.dhx_scheduler_month .dhx_marked_timespan{display:none;}.dhx_mini_calendar .dhx_marked_timespan{display:none;}.dhx_now_time{width:100%;border-bottom:2px dotted red;z-index:1;}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px dotted red;}.dhx_matrix_now_time{border-left:2px dotted red;z-index:1;}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:300;background-color:#8e99ae;background-color:rgba(98,107,127,0.5);padding-left:7px;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{padding:5px 0 10px 5px;color:#FFF;letter-spacing:1px;}.dhx_cal_qi_tdate{font-size:14px;}.dhx_cal_qi_tcontent{font-size:18px;font-weight:bold;}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden;}.dhx_qi_big_icon{border-radius:3px;color:#444;margin:5px 9px 5px 0;min-width:60px;line-height:20px;vertical-align:middle;padding:5px 10px 5px 5px;cursor:pointer;background-color:#fefefe;border-bottom:1px solid #666;border-right:1px solid #666;float:left;}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px;}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0;}div.dhx_form_repeat input.radio{margin:-4px 0 0 -4px!ie;}div.dhx_form_repeat input.checkbox{margin:0 0 0 -4px!ie;}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px;}.dhx_form_repeat{overflow:hidden;height:0;background-color:#FFF4B5;}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent;}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left;}.dhx_repeat_left{width:95px;}.dhx_repeat_center{width:335px;margin-top:12px;}.dhx_repeat_divider{float:left;height:115px;border-left:1px dotted #DCC43E;width:1px;}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px;}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px 0 4px;line-height:18px;padding:0 0 0 2px;}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px 0 4px;}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px 0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px;}input.dhx_repeat_radio{margin-right:4px;}input.dhx_repeat_checkbox{margin:4px 4px 0 0;}.dhx_repeat_days td{padding-right:5px;}.dhx_repeat_days label{font-size:10px;}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;}.dhx_custom_button_recurring{background-image:url(./imgs/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px;}.dhx_cal_light_rec{width:640px;}.dhx_cal_light_rec .dhx_cal_larea{width:632px;}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px;}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px;}.dhx_cal_tab.active{border:none;}.dhx_multi_day{border:none;border-top:1px solid #A4BED4;}.dhx_multi_day_icon,.dhx_multi_day_icon_small{border-right:none;}.dhx_cal_container{background-image:url(imgs_glossy/top-days-bg.png);background-position:0 24px;background-repeat:repeat-x;background-color:#EBEBEB;}.dhx_cal_navline{background-color:#EBEBEB;height:23px!important;}.dhx_cal_prev_button{background-image:url(imgs_glossy/buttons.gif);width:30px;height:20px;}.dhx_cal_next_button{background-image:url(imgs_glossy/buttons.gif);width:30px;height:20px;}.dhx_cal_today_button{padding-top:3px;background-image:url(imgs_glossy/buttons.gif);width:67px;left:110px;text-decoration:none;}.dhx_cal_navline .dhx_cal_date{padding-top:4px;left:230px;}.dhx_cal_tab{background-image:url(imgs_glossy/white_tab.png);width:60px;height:15px;text-decoration:none;padding-top:4px;margin-top:4px;}.dhx_cal_tab.active{background-image:url(imgs_glossy/blue_tab.png);height:18px;width:60px;padding-top:4px;margin-top:2px;}.dhx_cal_data{border-top:1px solid #A4BED4;}.dhx_cal_header{background-image:url(imgs_glossy/top-days-bg.png);background-repeat:repeat-x;border-top:0;border-right:0;}.dhx_scale_bar{background-image:url(imgs_glossy/top-separator.gif);background-position:0 0;background-repeat:no-repeat;background-color:transparent;padding-top:3px;border-left:0;}.dhx_scale_holder{border-right:1px solid #A4BED4;}.dhx_scale_holder_now{border-right:1px solid #A4BED4;}.dhx_scale_hour{background-image:url(imgs_glossy/left-time-bg.png);border-bottom:1px solid #A4BED4;color:#2F3A48;}.dhx_multi_day{background-image:url(imgs_glossy/multi-days-bg.png);background-repeat:repeat;border-bottom:1px solid #A4BED4;border-left:0;}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-image:url(imgs_glossy/clock_big.png);border-bottom:1px solid #A4BED4;border-left:1px solid #fff;background-color:transparent;background-repeat:no-repeat;}.dhx_multi_day_icon_small{background-image:url(imgs_glossy/clock_small.png);}.dhx_month_head{background-color:#FFF;}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#EFEDE2;}.dhx_now .dhx_month_head{background-color:#E4EFFF;}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#EFEDE2;}.dhx_cal_event div{border:1px solid #FFBD51;background-color:#FFE4AB;color:#000;}.dhx_cal_event_clear{color:#000;}.dhx_cal_event_line{background-image:url(imgs_glossy/event-bg.png);border:1px solid #FFBD51;color:#000;}.dhx_in_move{background-image:url(imgs_glossy/move.png);}.dhx_cal_event .dhx_body{background-color:#FFE4AB;}.dhx_cal_event .dhx_title{background-color:#FFE4AB;}.dhx_cal_light{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;background-color:#EBEBEB;border:2px solid #A4BED4;color:#000;}.dhx_cal_larea{border:1px solid #A4BED4;border-width:0 1px 1px;background-color:#FFF;}.dhx_cal_lsection{background-image:url(imgs_glossy/lightbox.png);font-size:14px;padding:5px 0 5px 10px;color:#000;}.dhx_cal_light_wide .dhx_cal_lsection{background-image:url(imgs_glossy/multi-days-bg.png);}.dhx_cal_ltext textarea{background-color:#fff;color:#000;}.dhx_cal_light select,.dhx_cal_light input{color:#000;}.dhx_save_btn{background-image:url(imgs_glossy/controlls5.png);}.dhx_cancel_btn{background-image:url(imgs_glossy/controlls5.png);}.dhx_delete_btn{background-image:url(imgs_glossy/controlls5.png);}div.dhx_menu_head{background-image:url(imgs_glossy/controlls5.png);border:1px solid #FFE4AB;}div.dhx_menu_icon{background-image:url(imgs_glossy/controlls5.png);border:medium none;}.dhx_section_time{height:20px!important;padding:7px 0!important;text-align:center;background:white;}div.dhx_cal_editor{background-color:#FFE4AB;}.dhx_year_month{background-image:url(imgs_glossy/top-days-bg.png);border:0;}.dhx_year_week{background-image:url(imgs_glossy/top-days-bg.png);}.dhx_month_head{border-right:1px solid #A4BED4;}.dhx_month_body,.dhx_matrix_cell,.dhx_matrix_scell{border-right:1px solid #A4BED4;border-bottom:1px solid #A4BED4;}.dhx_year_body{border-left:1px solid #A4BED4;}.dhx_scale_bar_last{border-right:none;}.dhx_month_head.dhx_year_event{background-color:#FFE4AB;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a,.dhx_year_body .dhx_after .dhx_month_head a{color:#EFEDE2!important;}.dhx_cal_lsection .dhx_readonly{color:#000;}.dhx_year_tooltip{-moz-box-shadow:2px 2px 2px #888;-khtml-box-shadow:2px 2px 2px #888;}.dhx_custom_button{margin-top:-2px;}.dhx_cal_lsection .dhx_fullday{color:#000;}.dhx_cal_lsection.dhx_cal_checkbox{height:16px;line-height:18px;}.dhx_cal_light_wide .dhx_cal_lsection.dhx_cal_checkbox{height:20px;}.dhx_cal_light_wide .dhx_combo_box{width:602px!important;left:0;}.dhx_cal_checkbox label{vertical-align:top;}.dhx_cal_light_wide .dhx_cal_lsection{color:black;}.dhx_cal_light_wide .dhx_wrap_section{border-top:1px solid #A4BED4;background-image:url(imgs_glossy/multi-days-bg.png);}.dhx_cal_light_wide .dhx_cal_ltext{border-left:1px solid #A4BED4;}.dhx_cal_light_wide .dhx_cal_ltext{background-color:white;}.dhx_custom_button{background:white;color:black;}.dhx_form_repeat{background:white;}.dhx_repeat_divider{border-left:1px solid #A4BED4;}.dhx_cal_header.dhx_second_cal_header{background-image:url("imgs_glossy/second-top-days-bg.png");padding-right:20px;}.dhx_cal_header div div{border-left:0;}.dhx_scale_bar{padding-top:4px;}.dhx_second_scale_bar{border-bottom:0;padding-top:4px;}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,.dhx_cal_lsection .dhx_fullday{color:#000;font-size:14px;}.dhx_cal_light_wide .dhx_cal_lsection{font-size:14px;padding-right:10px;}.dhx_scale_hour_border,.dhx_month_body_border,.dhx_scale_bar_border,.dhx_month_head_border{border-left:1px solid #A4BED4;}.dhx_cal_navline .dhx_cal_export{width:18px;height:18px;margin:2px;cursor:pointer;top:1px;}.dhx_cal_navline .dhx_cal_export.pdf{left:2px;background-image:url('imgs_glossy/export_pdf.png');}.dhx_cal_navline .dhx_cal_export.ical{left:24px;background-image:url('imgs_glossy/export_ical.png');} \ No newline at end of file
+.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;font-family:Tahoma;z-index:10000;overflow:hidden;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:300px;width:300px;text-align:center;position:fixed;background:-webkit-linear-gradient(top,#fff 1%,#d0d0d0 99%);background:-moz-linear-gradient(top,#fff 1%,#d0d0d0 99%);box-shadow:0 0 14px #888;font-family:Tahoma;z-index:20000;border-radius:6px;border:1px solid #fff}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%)}.dhtmlx-info,.dhtmlx_button,.dhtmlx_popup_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:5px}.dhtmlx_button,.dhtmlx_popup_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF}.dhtmlx_popup_button{min-width:120px}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:none;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC)}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:400;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px}.dhtmlx_button input:active,.dhtmlx_button input:focus,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%)}.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-error,.dhtmlx-info{font-size:14px;color:#000;box-shadow:0 0 10px #888;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 #B8B8B8}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0;cursor:pointer}.dhx_cal_event .dhx_title{height:12px;border-width:0 1px 1px;border-bottom-style:dotted;font-size:7pt;font-weight:700;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px;padding:5px}.dhx_cal_event.dhx_cal_select_menu{-webkit-box-shadow:0 0 1px #FFF;-moz-box-shadow:0 0 1px #FFF;box-shadow:0 0 1px #FFF}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important}.dhx_cal_event .dhx_event_resize{cursor:s-resize}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px;position:relative}.dhx_cal_event_line{background-color:#FFE763;border-radius:3px;font-family:Tahoma;font-size:8pt;height:13px;padding-left:10px;cursor:pointer;overflow:hidden}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;white-space:nowrap;overflow:hidden;cursor:pointer}.dhx_in_move{background-color:#FFFF80}.dhx_cal_event.dhx_cal_editor{border:1px solid #B7A543;border-top-style:dotted;z-index:999;position:absolute;overflow:hidden}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid #000;margin:0;padding:0;overflow:auto}div.dhx_menu_head{background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;cursor:default}div.dhx_menu_icon{width:20px;height:20px;margin-left:-5px;margin-top:0;cursor:pointer}div.icon_details{background-position:0 0}div.icon_edit{background-position:-22px 0}div.icon_save{background-position:-84px -1px}div.icon_cancel{background-position:-62px 0}div.icon_delete{background-position:-42px 0}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px}.dhx_month_link a{color:#00f}.dhx_month_link a:hover{text-decoration:underline}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,.7);color:#000;z-index:10000;padding:20px 30px;width:190px}.dhx_global_tip div{font-size:30px}@media (-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none}}.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:5px;font-family:Tahoma;font-size:8pt;position:absolute;z-index:10001;width:580px;height:300px;box-shadow:5px 5px 5px #888}.dhx_mark{position:relative;top:3px;background-image:url(imgs/controls.gif);background-position:0 -43px;padding-left:10px}.dhx_ie6 .dhx_mark{background-position:6px -41px}.dhx_cal_light select{font-family:Tahoma;font-size:8pt;padding:2px;margin:0}.dhx_cal_ltitle{padding:2px 0 2px 5px;overflow:hidden;white-space:nowrap}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{background-color:#DBCF8C;font-weight:700}.dhx_section_time{white-space:nowrap}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection{font-family:Arial}.dhx_cal_ltext{padding:2px 0 2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;border:none;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{overflow:hidden;margin-left:3px;width:572px;height:1px}.dhx_btn_set{padding:5px 10px 0;float:left}.dhx_btn_set div{float:left;height:21px;line-height:21px;vertical-align:middle;cursor:pointer}.dhx_save_btn{background-position:-84px 0;width:21px}.dhx_cancel_btn{background-position:-63px 0;width:20px}.dhx_delete_btn{background-position:-42px 0;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:8pt;font-weight:400;margin-right:5px;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide .dhx_cal_larea{border-top-width:0}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;padding:5px 0 0 10px}.dhx_cal_light_wide .dhx_wrap_section{position:relative;background-color:#DBCF8C;overflow:hidden}.dhx_cal_light_wide .dhx_section_time{padding-top:2px!important;height:20px!important}.dhx_cal_light_wide .dhx_cal_larea{width:730px}.dhx_cal_light_wide{width:738px}.dhx_cal_light_wide .dhx_section_time{background:0 0}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-family:Tahoma;font-size:8pt}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;font-weight:700;font-family:Arial;cursor:pointer}.dhx_custom_button{float:right;height:21px}.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_minical_popup{position:absolute;z-index:10100;width:251px;height:175px}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%}.dhx_expand_icon{position:absolute;top:0;right:0;background-image:url(imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(imgs/databg.png)}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(imgs/databg.png)}.dhx_agenda_line{height:21px;clear:both;overflow:hidden}.dhx_agenda_line div{float:left;width:188px;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3}.dhx_v_border{position:absolute;left:187px;top:0;border-right:1px dotted #8894A3;width:1px;height:100%}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_agenda_line span{padding-left:5px;line-height:21px}.dhx_year_week{position:relative}.dhx_year_month{height:18px;padding-top:3px;text-align:center;vertical-align:middle}.dhx_year_body .dhx_month_body{height:0;overflow:hidden}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head{cursor:default}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center}.dhx_text_disabled{color:#887A2E;font-family:Tahoma;font-size:8pt}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.dhx_mini_calendar .dhx_month_head{cursor:pointer}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC}.dhx_cal_navline div.dhx_minical_icon{width:18px;height:18px;left:190px;top:1px;cursor:pointer;background-image:url(imgs/calendar.gif)}.dhx_matrix_scell{height:100%}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle}.dhx_matrix_cell{background-color:#fff}.dhx_matrix_line{overflow:hidden}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;background:url(imgs/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;height:100%}.dhx_event_resize_start{left:0}.dhx_event_resize_end{right:0}.dhx_data_table.folder .dhx_matrix_cell,.dhx_matrix_scell.folder{background-color:#969394;cursor:pointer}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px}.dhx_matrix_scell.folder{font-weight:700;text-align:left}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left}.dhx_data_table.folder .dhx_matrix_cell{border-right:0}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px}.dhx_section_timeline select{width:552px}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(imgs/databg.png)}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer}.dhx_map_line{height:21px;clear:both;overflow:hidden}.dhx_map{position:absolute}.dhx_map_line .headline_description,.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border-left:0}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden}.dhx_map_line.highlight{background-color:#C4C5CC}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);background-color:#fff;border-left:1px dotted #887A2E;border-top:1px dotted #887A2E;color:#887A2E;cursor:default;padding:10px;position:absolute;z-index:500;font-family:Tahoma;font-size:8pt;opacity:1}.dhx_cal_checkbox label{padding-left:5px}.dhx_cal_light .radio{padding:2px 0 2px 10px}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px}.dhx_cal_light .combo{padding:4px}.dhx_wa_column{float:left}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px dotted #8894A3}.dhx_wa_scale_bar{font-family:Tahoma;padding-left:10px;font-size:11px;border-top:1px dotted #8894A3;border-bottom:1px dotted #8894A3}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto}.dhx_wa_ev_body{border-bottom:1px dotted #789;font-size:12px;padding:5px 0 5px 7px}.dhx_wa_dnd{font-family:Tahoma;position:absolute;padding-right:7px;color:#887AE2!important;background-color:#FFE763!important;border:1px solid #B7A543}.dhx_cal_event_selected{background-color:#9cc1db;color:#fff}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed}.dhx_grid_area td{table-layout:fixed;text-align:center}.dhx_grid_line{height:21px;clear:both;overflow:hidden}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4}.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td{border-bottom-width:0;border-bottom-style:none}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%}.dhx_grid_event_selected{background-color:#9cc1db!important;color:#fff!important}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(imgs/images.png)}.dhx_marked_timespan{position:absolute;width:100%}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100)}.dhx_mini_calendar .dhx_marked_timespan,.dhx_scheduler_month .dhx_marked_timespan{display:none}.dhx_now_time{width:100%;border-bottom:2px solid red;z-index:1}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px solid red}.dhx_matrix_now_time{border-left:2px solid red;z-index:1}.dhx_matrix_now_time,.dhx_now_time{opacity:.5}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:300;background-color:#8e99ae;background-color:rgba(98,107,127,.5);padding-left:7px;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{padding:5px 0 10px 5px;color:#FFF;letter-spacing:1px}.dhx_cal_qi_tdate{font-size:14px}.dhx_cal_qi_tcontent{font-size:18px;font-weight:700}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden}.dhx_qi_big_icon{border-radius:3px;color:#444;margin:5px 9px 5px 0;min-width:60px;line-height:20px;vertical-align:middle;padding:5px 10px 5px 5px;cursor:pointer;background-color:#fefefe;border-bottom:1px solid #666;border-right:1px solid #666;float:left}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0}.dhx_drag_marker{width:100%;filter:alpha(Opacity=50);opacity:.5;background-color:#FFE763;position:absolute;box-sizing:border-box!important;border-top:1px solid #B6B6B6;border-bottom:1px solid #b6b6b6}.dhx_cal_data div,.dhx_cal_header,.dhx_cal_header div,.dhx_cal_light,.dhx_cal_light div,.dhx_cal_navline div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dhx_cal_light .dhx_cal_radio label{margin-bottom:0}.dhx_cal_event div{line-height:normal}.dhx_cal_container{font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_navline{position:absolute;z-index:3;width:750px;color:#2F3A48}.dhx_cal_navline div{position:absolute;top:2px;white-space:nowrap}.dhx_cal_navline .dhx_cal_date{font-weight:600}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0}.dhx_cal_prev_button{background-position:0 0;left:50px;cursor:pointer}.dhx_cal_next_button{background-position:-30px 0;left:80px;cursor:pointer}.dhx_cal_today_button{background-position:-60px 0;height:17px;cursor:pointer;text-align:center}.dhx_cal_tab{text-align:center;cursor:pointer;background-color:#D8E1EA;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:700;background-color:#C2D5FC}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;z-index:2;overflow:hidden;color:#2F3A48}.dhx_cal_data{-webkit-tap-highlight-color:transparent;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;-ms-touch-action:pan-y}.dhx_cal_event,.dhx_cal_event_clear,.dhx_cal_event_line{-ms-touch-action:none}.dhx_scale_bar{position:absolute;text-align:center}.dhx_scale_holder{position:absolute;background-image:url(imgs/databg.png)}.dhx_scale_holder_now{position:absolute;background-image:url(imgs/databg_now.png)}.dhx_scale_hour{height:41px;width:50px;background-color:#C2D5FC;text-align:center;line-height:40px;overflow:hidden}.dhx_month_head{color:#2F3A48;height:18px;padding-right:5px;padding-top:3px;text-align:right}.dhx_month_body{background-color:#FFF}.dhx_now .dhx_month_body{background-color:#E2EDFF}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{color:#94A6BB}.dhx_now .dhx_month_head{font-weight:700}.dhx_scale_ignore{display:none}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50)}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999}.dhx_multi_day,.dhx_multi_day_icon{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3}.dhx_multi_day{position:absolute}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px}.dhx_form_repeat{overflow:hidden;height:0}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left}.dhx_repeat_left{width:95px}.dhx_repeat_center{width:335px;margin-top:12px}.dhx_repeat_divider{float:left;height:115px;width:1px}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px;line-height:18px;padding:0 0 0 2px}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px}input.dhx_repeat_radio{margin-right:4px}input.dhx_repeat_checkbox{margin:4px 4px 0 0}.dhx_repeat_days td{padding-right:5px}.dhx_repeat_days label{font-size:10px}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_custom_button_recurring{background-image:url(imgs/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px}.dhx_cal_light_rec{width:640px}.dhx_cal_light_rec .dhx_cal_larea{width:632px}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px}.dhx_cal_tab.active{border:none}.dhx_multi_day{border:none;border-top:1px solid #A4BED4}.dhx_multi_day_icon,.dhx_multi_day_icon_small{border-right:none}.dhx_cal_container{background-image:url(imgs_glossy/top-days-bg.png);background-position:0 24px;background-repeat:repeat-x;background-color:#EBEBEB}.dhx_cal_navline{background-color:#EBEBEB;height:23px!important}.dhx_cal_next_button,.dhx_cal_prev_button{background-image:url(imgs_glossy/buttons.gif);width:30px;height:20px}.dhx_cal_today_button{padding-top:3px;background-image:url(imgs_glossy/buttons.gif);width:67px;left:110px;text-decoration:none}.dhx_cal_navline .dhx_cal_date{padding-top:4px;left:230px}.dhx_cal_tab{background-image:url(imgs_glossy/white_tab.png);width:60px;height:15px;text-decoration:none;padding-top:4px;margin-top:4px}.dhx_cal_tab.active{background-image:url(imgs_glossy/blue_tab.png);height:18px;width:60px;padding-top:4px;margin-top:2px}.dhx_cal_data{border-top:1px solid #A4BED4}.dhx_cal_header{background-image:url(imgs_glossy/top-days-bg.png);background-repeat:repeat-x;border-top:0;border-right:0}.dhx_scale_bar{background-image:url(imgs_glossy/top-separator.gif);background-position:0 0;background-repeat:no-repeat;background-color:transparent;border-left:0}.dhx_scale_holder,.dhx_scale_holder_now{border-right:1px solid #A4BED4}.dhx_scale_hour{background-image:url(imgs_glossy/left-time-bg.png);border-bottom:1px solid #A4BED4;color:#2F3A48}.dhx_multi_day{background-image:url(imgs_glossy/multi-days-bg.png);background-repeat:repeat;border-bottom:1px solid #A4BED4;border-left:0}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-image:url(imgs_glossy/clock_big.png);border-bottom:1px solid #A4BED4;border-left:1px solid #fff;background-color:transparent;background-repeat:no-repeat}.dhx_multi_day_icon_small{background-image:url(imgs_glossy/clock_small.png)}.dhx_month_head{background-color:#FFF}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#EFEDE2}.dhx_now .dhx_month_head{background-color:#E4EFFF}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#EFEDE2}.dhx_cal_event div{border:1px solid #FFBD51;background-color:#FFE4AB;color:#000}.dhx_cal_event_clear{color:#000}.dhx_cal_event_line{background-image:url(imgs_glossy/event-bg.png);border:1px solid #FFBD51;color:#000}.dhx_in_move{background-image:url(imgs_glossy/move.png)}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_title{background-color:#FFE4AB}.dhx_cal_light{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;background-color:#EBEBEB;border:2px solid #A4BED4;color:#000}.dhx_cal_larea{border:1px solid #A4BED4;border-width:0 1px 1px;background-color:#FFF}.dhx_cal_lsection{background-image:url(imgs_glossy/lightbox.png);font-size:14px;padding:5px 0 5px 10px;color:#000}.dhx_cal_light_wide .dhx_cal_lsection{background-image:url(imgs_glossy/multi-days-bg.png)}.dhx_cal_ltext textarea{background-color:#fff;color:#000}.dhx_cal_light input,.dhx_cal_light select{color:#000}.dhx_cancel_btn,.dhx_delete_btn,.dhx_save_btn{background-image:url(imgs_glossy/controlls5.png)}div.dhx_menu_head{background-image:url(imgs_glossy/controlls5.png);border:1px solid #FFE4AB}div.dhx_menu_icon{background-image:url(imgs_glossy/controlls5.png);border:medium none}.dhx_section_time{height:20px!important;padding:7px 0!important;text-align:center;background:#fff}.dhx_year_month{background-image:url(imgs_glossy/top-days-bg.png);border:0}.dhx_year_week{background-image:url(imgs_glossy/top-days-bg.png)}.dhx_month_head{border-right:1px solid #A4BED4}.dhx_matrix_cell,.dhx_matrix_scell,.dhx_month_body{border-right:1px solid #A4BED4;border-bottom:1px solid #A4BED4}.dhx_year_body{border-left:1px solid #A4BED4}.dhx_scale_bar_last{border-right:none}.dhx_month_head.dhx_year_event{background-color:#FFE4AB}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head a,.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a{color:#EFEDE2!important}.dhx_cal_lsection .dhx_readonly{color:#000}.dhx_year_tooltip{-moz-box-shadow:2px 2px 2px #888;-khtml-box-shadow:2px 2px 2px #888}.dhx_custom_button{margin-top:-2px}.dhx_cal_lsection.dhx_cal_checkbox{height:16px;line-height:18px}.dhx_cal_light_wide .dhx_cal_lsection.dhx_cal_checkbox{height:20px}.dhx_cal_light_wide .dhx_combo_box{width:602px!important;left:0}.dhx_cal_checkbox label{vertical-align:top}.dhx_cal_light_wide .dhx_cal_lsection{color:#000}.dhx_cal_light_wide .dhx_wrap_section{border-top:1px solid #A4BED4;background-image:url(imgs_glossy/multi-days-bg.png)}.dhx_cal_light_wide .dhx_cal_ltext{border-left:1px solid #A4BED4;background-color:#fff}.dhx_custom_button{background:#fff;color:#000}.dhx_form_repeat{background:#fff}.dhx_repeat_divider{border-left:1px solid #A4BED4}.dhx_cal_header.dhx_second_cal_header{background-image:url(imgs_glossy/second-top-days-bg.png);padding-right:20px}.dhx_cal_header div div{border-left:0}.dhx_scale_bar{padding-top:4px}.dhx_second_scale_bar{border-bottom:0;padding-top:4px}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,.dhx_cal_lsection .dhx_fullday{color:#000;font-size:14px}.dhx_cal_light_wide .dhx_cal_lsection{font-size:14px;padding-right:10px}.dhx_month_body_border,.dhx_month_head_border,.dhx_scale_bar_border,.dhx_scale_hour_border{border-left:1px solid #A4BED4}.dhx_cal_navline .dhx_cal_export{width:18px;height:18px;margin:2px;cursor:pointer;top:1px}.dhx_cal_navline .dhx_cal_export.pdf{left:2px;background-image:url(imgs_glossy/export_pdf.png)}.dhx_cal_navline .dhx_cal_export.ical{left:24px;background-image:url(imgs_glossy/export_ical.png)} \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_active_links.js b/codebase/ext/dhtmlxscheduler_active_links.js
index dac5ab0..9ae61ef 100644
--- a/codebase/ext/dhtmlxscheduler_active_links.js
+++ b/codebase/ext/dhtmlxscheduler_active_links.js
@@ -1,7 +1,10 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.config.active_link_view="day";
-scheduler.attachEvent("onTemplatesReady",function(){var d=scheduler.date.str_to_date(scheduler.config.api_date),b=scheduler.date.date_to_str(scheduler.config.api_date),e=scheduler.templates.month_day;scheduler.templates.month_day=function(a){return"<a jump_to='"+b(a)+"' href='#'>"+e(a)+"</a>"};var f=scheduler.templates.week_scale_date;scheduler.templates.week_scale_date=function(a){return"<a jump_to='"+b(a)+"' href='#'>"+f(a)+"</a>"};dhtmlxEvent(this._obj,"click",function(a){var b=a.target||event.srcElement,
-c=b.getAttribute("jump_to");if(c)return scheduler.setCurrentView(d(c),scheduler.config.active_link_view),a&&a.preventDefault&&a.preventDefault(),!1})});
+scheduler.config.active_link_view="day",scheduler._active_link_click=function(e){var t=e.target||event.srcElement,c=t.getAttribute("jump_to"),i=scheduler.date.str_to_date(scheduler.config.api_date);return c?(scheduler.setCurrentView(i(c),scheduler.config.active_link_view),e&&e.preventDefault&&e.preventDefault(),!1):void 0},scheduler.attachEvent("onTemplatesReady",function(){var e=function(e,t){t=t||e+"_scale_date",scheduler.templates["_active_links_old_"+t]||(scheduler.templates["_active_links_old_"+t]=scheduler.templates[t]);
+var c=scheduler.templates["_active_links_old_"+t],i=scheduler.date.date_to_str(scheduler.config.api_date);scheduler.templates[t]=function(e){return"<a jump_to='"+i(e)+"' href='#'>"+c(e)+"</a>"}};if(e("week"),e("","month_day"),this.matrix)for(var t in this.matrix)e(t);this._detachDomEvent(this._obj,"click",scheduler._active_link_click),dhtmlxEvent(this._obj,"click",scheduler._active_link_click)});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_active_links.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_agenda_view.js b/codebase/ext/dhtmlxscheduler_agenda_view.js
index 0449169..450d334 100644
--- a/codebase/ext/dhtmlxscheduler_agenda_view.js
+++ b/codebase/ext/dhtmlxscheduler_agenda_view.js
@@ -1,11 +1,14 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.date.add_agenda=function(a){return scheduler.date.add(a,1,"year")};scheduler.templates.agenda_time=function(a,d,c){return c._timed?this.day_date(c.start_date,c.end_date,c)+" "+this.event_date(a):scheduler.templates.day_date(a)+" &ndash; "+scheduler.templates.day_date(d)};scheduler.templates.agenda_text=function(a,d,c){return c.text};scheduler.templates.agenda_date=function(){return""};scheduler.date.agenda_start=function(){return scheduler.date.date_part(scheduler._currentDate())};
-scheduler.attachEvent("onTemplatesReady",function(){function a(c){if(c){var a=scheduler.locale.labels;scheduler._els.dhx_cal_header[0].innerHTML="<div class='dhx_agenda_line'><div>"+a.date+"</div><span style='padding-left:25px'>"+a.description+"</span></div>";scheduler._table_view=!0;scheduler.set_sizes()}}function d(){var c=scheduler._date,a=scheduler.get_visible_events();a.sort(function(b,a){return b.start_date>a.start_date?1:-1});for(var d="<div class='dhx_agenda_area'>",e=0;e<a.length;e++){var b=
-a[e],g=b.color?"background:"+b.color+";":"",h=b.textColor?"color:"+b.textColor+";":"",i=scheduler.templates.event_class(b.start_date,b.end_date,b);d+="<div class='dhx_agenda_line"+(i?" "+i:"")+"' event_id='"+b.id+"' style='"+h+""+g+""+(b._text_style||"")+"'><div class='dhx_agenda_event_time'>"+scheduler.templates.agenda_time(b.start_date,b.end_date,b)+"</div>";d+="<div class='dhx_event_icon icon_details'>&nbsp</div>";d+="<span>"+scheduler.templates.agenda_text(b.start_date,b.end_date,b)+"</span></div>"}d+=
-"<div class='dhx_v_border'></div></div>";scheduler._els.dhx_cal_data[0].innerHTML=d;scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop=scheduler._agendaScrollTop||0;var f=scheduler._els.dhx_cal_data[0].childNodes[0],k=f.childNodes[f.childNodes.length-1];k.style.height=f.offsetHeight<scheduler._els.dhx_cal_data[0].offsetHeight?"100%":f.offsetHeight+"px";var j=scheduler._els.dhx_cal_data[0].firstChild.childNodes;scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates.agenda_date(scheduler._min_date,
-scheduler._max_date,scheduler._mode);scheduler._rendered=[];for(e=0;e<j.length-1;e++)scheduler._rendered[e]=j[e]}var c=scheduler.dblclick_dhx_cal_data;scheduler.dblclick_dhx_cal_data=function(){if(this._mode=="agenda")!this.config.readonly&&this.config.dblclick_create&&this.addEventNow();else if(c)return c.apply(this,arguments)};scheduler.attachEvent("onSchedulerResize",function(){return this._mode=="agenda"?(this.agenda_view(!0),!1):!0});var g=scheduler.render_data;scheduler.render_data=function(a){if(this._mode==
-"agenda")d();else return g.apply(this,arguments)};var h=scheduler.render_view_data;scheduler.render_view_data=function(){if(this._mode=="agenda")scheduler._agendaScrollTop=scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop,scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop=0;return h.apply(this,arguments)};scheduler.agenda_view=function(c){scheduler._min_date=scheduler.config.agenda_start||scheduler.date.agenda_start(scheduler._date);scheduler._max_date=scheduler.config.agenda_end||scheduler.date.add_agenda(scheduler._min_date,
-1);scheduler._table_view=!0;a(c);c&&d()}});
+scheduler.date.add_agenda=function(e){return scheduler.date.add(e,1,"year")},scheduler.templates.agenda_time=function(e,d,t){return t._timed?this.day_date(t.start_date,t.end_date,t)+" "+this.event_date(e):scheduler.templates.day_date(e)+" &ndash; "+scheduler.templates.day_date(d)},scheduler.templates.agenda_text=function(e,d,t){return t.text},scheduler.templates.agenda_date=function(){return""},scheduler.date.agenda_start=function(){return scheduler.date.date_part(scheduler._currentDate())},scheduler.attachEvent("onTemplatesReady",function(){function e(e){if(e){var d=scheduler.locale.labels;
+scheduler._els.dhx_cal_header[0].innerHTML="<div class='dhx_agenda_line'><div>"+d.date+"</div><span style='padding-left:25px'>"+d.description+"</span></div>",scheduler._table_view=!0,scheduler.set_sizes()}}function d(){var e=(scheduler._date,scheduler.get_visible_events());e.sort(function(e,d){return e.start_date>d.start_date?1:-1});for(var d="<div class='dhx_agenda_area'>",t=0;t<e.length;t++){var a=e[t],l=a.color?"background:"+a.color+";":"",s=a.textColor?"color:"+a.textColor+";":"",r=scheduler.templates.event_class(a.start_date,a.end_date,a);
+d+="<div class='dhx_agenda_line"+(r?" "+r:"")+"' event_id='"+a.id+"' style='"+s+l+(a._text_style||"")+"'><div class='dhx_agenda_event_time'>"+scheduler.templates.agenda_time(a.start_date,a.end_date,a)+"</div>",d+="<div class='dhx_event_icon icon_details'>&nbsp</div>",d+="<span>"+scheduler.templates.agenda_text(a.start_date,a.end_date,a)+"</span></div>"}d+="<div class='dhx_v_border'></div></div>",scheduler._els.dhx_cal_data[0].innerHTML=d,scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop=scheduler._agendaScrollTop||0;
+var c=scheduler._els.dhx_cal_data[0].childNodes[0],_=c.childNodes[c.childNodes.length-1];_.style.height=c.offsetHeight<scheduler._els.dhx_cal_data[0].offsetHeight?"100%":c.offsetHeight+"px";var n=scheduler._els.dhx_cal_data[0].firstChild.childNodes;scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates.agenda_date(scheduler._min_date,scheduler._max_date,scheduler._mode),scheduler._rendered=[];for(var t=0;t<n.length-1;t++)scheduler._rendered[t]=n[t]}var t=scheduler.dblclick_dhx_cal_data;scheduler.dblclick_dhx_cal_data=function(){if("agenda"==this._mode)!this.config.readonly&&this.config.dblclick_create&&this.addEventNow();
+else if(t)return t.apply(this,arguments)},scheduler.attachEvent("onSchedulerResize",function(){return"agenda"==this._mode?(this.agenda_view(!0),!1):!0});var a=scheduler.render_data;scheduler.render_data=function(){return"agenda"!=this._mode?a.apply(this,arguments):void d()};var l=scheduler.render_view_data;scheduler.render_view_data=function(){return"agenda"==this._mode&&(scheduler._agendaScrollTop=scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop,scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop=0),l.apply(this,arguments)
+},scheduler.agenda_view=function(t){scheduler._min_date=scheduler.config.agenda_start||scheduler.date.agenda_start(scheduler._date),scheduler._max_date=scheduler.config.agenda_end||scheduler.date.add_agenda(scheduler._min_date,1),scheduler._table_view=!0,e(t),t&&d()}});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_agenda_view.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_all_timed.js b/codebase/ext/dhtmlxscheduler_all_timed.js
index 3c355ec..d74f717 100644
--- a/codebase/ext/dhtmlxscheduler_all_timed.js
+++ b/codebase/ext/dhtmlxscheduler_all_timed.js
@@ -1,8 +1,13 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){scheduler.config.all_timed="short";var l=function(a){return!((a.end_date-a.start_date)/36E5>=24)},m=scheduler._pre_render_events_line;scheduler._pre_render_events_line=function(a,f){function g(a){var b=i(a.start_date);return+a.end_date>+b}function i(a){var b=scheduler.date.add(a,1,"day");return b=scheduler.date.date_part(b)}function j(a,b){var c=scheduler.date.date_part(new Date(a));c.setHours(b);return c}if(!this.config.all_timed)return m.call(this,a,f);for(var d=0;d<a.length;d++){var e=
-a[d];if(!e._timed)if(this.config.all_timed=="short"&&!l(e))a.splice(d--,1);else{var b=this._lame_copy({},e);b.start_date=new Date(b.start_date);if(g(e)){if(b.end_date=i(b.start_date),this.config.last_hour!=24)b.end_date=j(b.start_date,this.config.last_hour)}else b.end_date=new Date(e.end_date);var h=!1;b.start_date<this._max_date&&b.end_date>this._min_date&&b.start_date<b.end_date&&(a[d]=b,h=!0);var c=this._lame_copy({},e);c.end_date=new Date(c.end_date);c.start_date=c.start_date<this._min_date?j(this._min_date,
-this.config.first_hour):j(i(e.start_date),this.config.first_hour);c.start_date<this._max_date&&c.start_date<c.end_date&&(h?a.splice(d+1,0,c):a[d--]=c)}}var k=this._drag_mode=="move"?!1:f;return m.call(this,a,k)};var h=scheduler.get_visible_events;scheduler.get_visible_events=function(a){return!this.config.all_timed||!this.config.multi_day?h.call(this,a):h.call(this,!1)};scheduler.attachEvent("onBeforeViewChange",function(a,f,g){scheduler._allow_dnd=g=="day"||g=="week";return!0});scheduler._is_main_area_event=
-function(a){return!(!a._timed&&!(this.config.all_timed===!0||this.config.all_timed=="short"&&l(a)))};var k=scheduler.updateEvent;scheduler.updateEvent=function(a){var f=scheduler.config.all_timed&&!(scheduler.isOneDayEvent(scheduler._events[a])||scheduler.getState().drag_id);if(f){var g=scheduler.config.update_render;scheduler.config.update_render=!0}k.apply(scheduler,arguments);if(f)scheduler.config.update_render=g}})();
+!function(){scheduler.config.all_timed="short";var e=function(e){return!((e.end_date-e.start_date)/36e5>=24)};scheduler._safe_copy=function(e){var t=null,s=null;return e.event_pid&&(t=scheduler.getEvent(e.event_pid)),t&&t.isPrototypeOf(e)?(s=scheduler._copy_event(e),delete s.event_length,delete s.event_pid,delete s.rec_pattern,delete s.rec_type):s=scheduler._lame_clone(e),s};var t=scheduler._pre_render_events_line;scheduler._pre_render_events_line=function(s,i){function n(e){var t=a(e.start_date);
+return+e.end_date>+t}function a(e){var t=scheduler.date.add(e,1,"day");return t=scheduler.date.date_part(t)}function r(e,t){var s=scheduler.date.date_part(new Date(e));return s.setHours(t),s}if(!this.config.all_timed)return t.call(this,s,i);for(var d=0;d<s.length;d++){var o=s[d];if(!o._timed)if("short"!=this.config.all_timed||e(o)){var l=this._safe_copy(o);l.start_date=new Date(l.start_date),n(o)?(l.end_date=a(l.start_date),24!=this.config.last_hour&&(l.end_date=r(l.start_date,this.config.last_hour))):l.end_date=new Date(o.end_date);
+var h=!1;l.start_date<this._max_date&&l.end_date>this._min_date&&l.start_date<l.end_date&&(s[d]=l,h=!0);var _=this._safe_copy(o);if(_.end_date=new Date(_.end_date),_.start_date=_.start_date<this._min_date?r(this._min_date,this.config.first_hour):r(a(o.start_date),this.config.first_hour),_.start_date<this._max_date&&_.start_date<_.end_date){if(!h){s[d--]=_;continue}s.splice(d+1,0,_)}}else s.splice(d--,1)}var c="move"==this._drag_mode?!1:i;return t.call(this,s,c)};var s=scheduler.get_visible_events;
+scheduler.get_visible_events=function(e){return this.config.all_timed&&this.config.multi_day?s.call(this,!1):s.call(this,e)},scheduler.attachEvent("onBeforeViewChange",function(e,t,s){return scheduler._allow_dnd="day"==s||"week"==s,!0}),scheduler._is_main_area_event=function(t){return!!(t._timed||this.config.all_timed===!0||"short"==this.config.all_timed&&e(t))};var i=scheduler.updateEvent;scheduler.updateEvent=function(e){var t,s=scheduler.config.all_timed&&!(scheduler.isOneDayEvent(scheduler._events[e])||scheduler.getState().drag_id);
+s&&(t=scheduler.config.update_render,scheduler.config.update_render=!0),i.apply(scheduler,arguments),s&&(scheduler.config.update_render=t)}}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_all_timed.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_collision.js b/codebase/ext/dhtmlxscheduler_collision.js
index 0cadfd0..d83e726 100644
--- a/codebase/ext/dhtmlxscheduler_collision.js
+++ b/codebase/ext/dhtmlxscheduler_collision.js
@@ -1,8 +1,12 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){function h(b){var a=scheduler._props?scheduler._props[scheduler._mode]:null,c=scheduler.matrix?scheduler.matrix[scheduler._mode]:null,f=a||c;if(a)var g=f.map_to;if(c)g=f.y_property;f&&b&&(m=scheduler.getEvent(b)[g])}var m,d;scheduler.config.collision_limit=1;scheduler.attachEvent("onBeforeDrag",function(b){h(b);return!0});scheduler.attachEvent("onBeforeLightbox",function(b){var a=scheduler.getEvent(b);d=[a.start_date,a.end_date];h(b);return!0});scheduler.attachEvent("onEventChanged",function(b){if(!b)return!0;
-var a=scheduler.getEvent(b);if(!scheduler.checkCollision(a)){if(!d)return!1;a.start_date=d[0];a.end_date=d[1];a._timed=this.isOneDayEvent(a)}return!0});scheduler.attachEvent("onBeforeEventChanged",function(b){return scheduler.checkCollision(b)});scheduler.attachEvent("onEventAdded",function(b,a){var c=scheduler.checkCollision(a);c||scheduler.deleteEvent(b)});scheduler.attachEvent("onEventSave",function(b,a){a=scheduler._lame_clone(a);a.id=b;if(!a.start_date||!a.end_date){var c=scheduler.getEvent(b);
-a.start_date=new Date(c.start_date);a.end_date=new Date(c.end_date)}a.rec_type&&scheduler._roll_back_dates(a);return scheduler.checkCollision(a)});scheduler.checkCollision=function(b){var a=[],c=scheduler.config.collision_limit;if(b.rec_type)for(var f=scheduler.getRecDates(b),g=0;g<f.length;g++)for(var d=scheduler.getEvents(f[g].start_date,f[g].end_date),i=0;i<d.length;i++)(d[i].event_pid||d[i].id)!=b.id&&a.push(d[i]);else for(var a=scheduler.getEvents(b.start_date,b.end_date),e=0;e<a.length;e++)if(a[e].id==
-b.id){a.splice(e,1);break}var h=scheduler._props?scheduler._props[scheduler._mode]:null,n=scheduler.matrix?scheduler.matrix[scheduler._mode]:null,l=h||n;if(h)var j=l.map_to;if(n)j=l.y_property;var k=!0;if(l){for(var o=0,e=0;e<a.length;e++)a[e][j]==b[j]&&a[e].id!=b.id&&o++;o>=c&&(k=!1)}else a.length>=c&&(k=!1);if(!k){var p=!scheduler.callEvent("onEventCollision",[b,a]);p||(b[j]=m||b[j]);return p}return k}})();
+!function(){function e(e){var s=scheduler._get_section_view();s&&e&&(t=scheduler.getEvent(e)[scheduler._get_section_property()])}var t,s;scheduler.config.collision_limit=1,scheduler.attachEvent("onBeforeDrag",function(t){return e(t),!0}),scheduler.attachEvent("onBeforeLightbox",function(t){var i=scheduler.getEvent(t);return s=[i.start_date,i.end_date],e(t),!0}),scheduler.attachEvent("onEventChanged",function(e){if(!e||!scheduler.getEvent(e))return!0;var t=scheduler.getEvent(e);if(!scheduler.checkCollision(t)){if(!s)return!1;
+t.start_date=s[0],t.end_date=s[1],t._timed=this.isOneDayEvent(t)}return!0}),scheduler.attachEvent("onBeforeEventChanged",function(e){return scheduler.checkCollision(e)}),scheduler.attachEvent("onEventAdded",function(e,t){var s=scheduler.checkCollision(t);s||scheduler.deleteEvent(e)}),scheduler.attachEvent("onEventSave",function(e,t){if(t=scheduler._lame_clone(t),t.id=e,!t.start_date||!t.end_date){var s=scheduler.getEvent(e);t.start_date=new Date(s.start_date),t.end_date=new Date(s.end_date)}return t.rec_type&&scheduler._roll_back_dates(t),scheduler.checkCollision(t)
+}),scheduler._check_sections_collision=function(e,t){var s=scheduler._get_section_property();return e[s]==t[s]&&e.id!=t.id?!0:!1},scheduler.checkCollision=function(e){var s=[],i=scheduler.config.collision_limit;if(e.rec_type)for(var n=scheduler.getRecDates(e),a=0;a<n.length;a++)for(var r=scheduler.getEvents(n[a].start_date,n[a].end_date),d=0;d<r.length;d++)(r[d].event_pid||r[d].id)!=e.id&&s.push(r[d]);else{s=scheduler.getEvents(e.start_date,e.end_date);for(var o=0;o<s.length;o++)if(s[o].id==e.id){s.splice(o,1);
+break}}var l=scheduler._get_section_view(),h=scheduler._get_section_property(),_=!0;if(l){for(var c=0,o=0;o<s.length;o++)s[o].id!=e.id&&this._check_sections_collision(s[o],e)&&c++;c>=i&&(_=!1)}else s.length>=i&&(_=!1);if(!_){var u=!scheduler.callEvent("onEventCollision",[e,s]);return u||(e[h]=t||e[h]),u}return _}}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_collision.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_container_autoresize.js b/codebase/ext/dhtmlxscheduler_container_autoresize.js
index 8a3ba2f..5667c6a 100644
--- a/codebase/ext/dhtmlxscheduler_container_autoresize.js
+++ b/codebase/ext/dhtmlxscheduler_container_autoresize.js
@@ -1,10 +1,15 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){scheduler.config.container_autoresize=!0;scheduler.config.month_day_min_height=90;var p=scheduler._pre_render_events;scheduler._pre_render_events=function(e,c){if(!scheduler.config.container_autoresize)return p.apply(this,arguments);var g=this.xy.bar_height,l=this._colsS.heights,a=this._colsS.heights=[0,0,0,0,0,0,0],b=this._els.dhx_cal_data[0],e=this._table_view?this._pre_render_events_table(e,c):this._pre_render_events_line(e,c);if(this._table_view)if(c)this._colsS.heights=l;else{var f=
-b.firstChild;if(f.rows){for(var d=0;d<f.rows.length;d++){a[d]++;if(a[d]*g>this._colsS.height-22){var h=f.rows[d].cells,j=this._colsS.height-22;this.config.max_month_events*1!==this.config.max_month_events||a[d]<=this.config.max_month_events?j=a[d]*g:(this.config.max_month_events+1)*g>this._colsS.height-22&&(j=(this.config.max_month_events+1)*g);for(var i=0;i<h.length;i++)h[i].childNodes[1].style.height=j+"px";a[d]=(a[d-1]||0)+h[0].offsetHeight}a[d]=(a[d-1]||0)+f.rows[d].cells[0].offsetHeight}a.unshift(0)}else if(!e.length&&
-this._els.dhx_multi_day[0].style.visibility=="visible"&&(a[0]=-1),e.length||a[0]==-1){var n=f.parentNode.childNodes,m=(a[0]+1)*g+1+"px";b.style.top=this._els.dhx_cal_navline[0].offsetHeight+this._els.dhx_cal_header[0].offsetHeight+parseInt(m,10)+"px";b.style.height=this._obj.offsetHeight-parseInt(b.style.top,10)-(this.xy.margin_top||0)+"px";var k=this._els.dhx_multi_day[0];k.style.height=m;k.style.visibility=a[0]==-1?"hidden":"visible";k=this._els.dhx_multi_day[1];k.style.height=m;k.style.visibility=
-a[0]==-1?"hidden":"visible";k.className=a[0]?"dhx_multi_day_icon":"dhx_multi_day_icon_small";this._dy_shift=(a[0]+1)*g;a[0]=0}}return e};var n=["dhx_cal_navline","dhx_cal_header","dhx_multi_day","dhx_cal_data"],o=function(e){for(var c=0,g=0;g<n.length;g++){var l=n[g],a=scheduler._els[l]?scheduler._els[l][0]:null,b=0;switch(l){case "dhx_cal_navline":case "dhx_cal_header":b=parseInt(a.style.height,10);break;case "dhx_multi_day":b=a?a.offsetHeight:0;b==1&&(b=0);break;case "dhx_cal_data":var b=Math.max(a.offsetHeight-
-1,a.scrollHeight),f=scheduler.getState().mode;if(f=="month"){if(scheduler.config.month_day_min_height&&!e)var d=a.getElementsByTagName("tr").length,b=d*scheduler.config.month_day_min_height;if(e)a.style.height=b+"px"}if(scheduler.matrix&&scheduler.matrix[f])if(e)b+=2,a.style.height=b+"px";else for(var b=2,h=scheduler.matrix[f],j=h.y_unit,i=0;i<j.length;i++)b+=!j[i].children?h.dy:h.folder_dy||h.dy;if(f=="day"||f=="week")b+=2}c+=b}scheduler._obj.style.height=c+"px";e||scheduler.updateView()},c=function(){var c=
-scheduler.getState().mode;o();(scheduler.matrix&&scheduler.matrix[c]||c=="month")&&window.setTimeout(function(){o(!0)},1)};scheduler.attachEvent("onViewChange",c);scheduler.attachEvent("onXLE",c);scheduler.attachEvent("onEventChanged",c);scheduler.attachEvent("onEventCreated",c);scheduler.attachEvent("onEventAdded",c);scheduler.attachEvent("onEventDeleted",c);scheduler.attachEvent("onAfterSchedulerResize",c);scheduler.attachEvent("onClearAll",c)})();
+!function(){scheduler.config.container_autoresize=!0,scheduler.config.month_day_min_height=90;var e=scheduler._pre_render_events;scheduler._pre_render_events=function(t,s){if(!scheduler.config.container_autoresize)return e.apply(this,arguments);var i=this.xy.bar_height,n=this._colsS.heights,a=this._colsS.heights=[0,0,0,0,0,0,0],r=this._els.dhx_cal_data[0];if(t=this._table_view?this._pre_render_events_table(t,s):this._pre_render_events_line(t,s),this._table_view)if(s)this._colsS.heights=n;else{var d=r.firstChild;
+if(d.rows){for(var o=0;o<d.rows.length;o++){if(a[o]++,a[o]*i>this._colsS.height-this.xy.month_head_height){var l=d.rows[o].cells,h=this._colsS.height-this.xy.month_head_height;1*this.config.max_month_events!==this.config.max_month_events||a[o]<=this.config.max_month_events?h=a[o]*i:(this.config.max_month_events+1)*i>this._colsS.height-this.xy.month_head_height&&(h=(this.config.max_month_events+1)*i);for(var _=0;_<l.length;_++)l[_].childNodes[1].style.height=h+"px";a[o]=(a[o-1]||0)+l[0].offsetHeight
+}a[o]=(a[o-1]||0)+d.rows[o].cells[0].offsetHeight}a.unshift(0),d.parentNode.offsetHeight<d.parentNode.scrollHeight&&!d._h_fix}else if(t.length||"visible"!=this._els.dhx_multi_day[0].style.visibility||(a[0]=-1),t.length||-1==a[0]){var c=(d.parentNode.childNodes,(a[0]+1)*i+1+"px");r.style.top=this._els.dhx_cal_navline[0].offsetHeight+this._els.dhx_cal_header[0].offsetHeight+parseInt(c,10)+"px",r.style.height=this._obj.offsetHeight-parseInt(r.style.top,10)-(this.xy.margin_top||0)+"px";var u=this._els.dhx_multi_day[0];
+u.style.height=c,u.style.visibility=-1==a[0]?"hidden":"visible",u=this._els.dhx_multi_day[1],u.style.height=c,u.style.visibility=-1==a[0]?"hidden":"visible",u.className=a[0]?"dhx_multi_day_icon":"dhx_multi_day_icon_small",this._dy_shift=(a[0]+1)*i,a[0]=0}}return t};var t=["dhx_cal_navline","dhx_cal_header","dhx_multi_day","dhx_cal_data"],s=function(e){for(var s=0,i=0;i<t.length;i++){var n=t[i],a=scheduler._els[n]?scheduler._els[n][0]:null,r=0;switch(n){case"dhx_cal_navline":case"dhx_cal_header":r=parseInt(a.style.height,10);
+break;case"dhx_multi_day":r=a?a.offsetHeight:0,1==r&&(r=0);break;case"dhx_cal_data":r=Math.max(a.offsetHeight-1,a.scrollHeight);var d=scheduler.getState().mode;if("month"==d){if(scheduler.config.month_day_min_height&&!e){var o=a.getElementsByTagName("tr").length;r=o*scheduler.config.month_day_min_height}e&&(a.style.height=r+"px")}if(scheduler.matrix&&scheduler.matrix[d])if(e)r+=2,a.style.height=r+"px";else{r=2;for(var l=scheduler.matrix[d],h=l.y_unit,_=0;_<h.length;_++)r+=h[_].children?l.folder_dy||l.dy:l.dy
+}("day"==d||"week"==d)&&(r+=2)}s+=r}scheduler._obj.style.height=s+"px",e||scheduler.updateView()},i=function(){var e=scheduler.getState().mode;s(),(scheduler.matrix&&scheduler.matrix[e]||"month"==e)&&window.setTimeout(function(){s(!0)},1)};scheduler.attachEvent("onViewChange",i),scheduler.attachEvent("onXLE",i),scheduler.attachEvent("onEventChanged",i),scheduler.attachEvent("onEventCreated",i),scheduler.attachEvent("onEventAdded",i),scheduler.attachEvent("onEventDeleted",i),scheduler.attachEvent("onAfterSchedulerResize",i),scheduler.attachEvent("onClearAll",i)
+}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_container_autoresize.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_cookie.js b/codebase/ext/dhtmlxscheduler_cookie.js
index f7db363..6d686b1 100644
--- a/codebase/ext/dhtmlxscheduler_cookie.js
+++ b/codebase/ext/dhtmlxscheduler_cookie.js
@@ -1,6 +1,10 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){function h(e,a,b){var c=e+"="+b+(a?"; "+a:"");document.cookie=c}function i(e){var a=e+"=";if(document.cookie.length>0){var b=document.cookie.indexOf(a);if(b!=-1){b+=a.length;var c=document.cookie.indexOf(";",b);if(c==-1)c=document.cookie.length;return document.cookie.substring(b,c)}}return""}var g=!0;scheduler.attachEvent("onBeforeViewChange",function(e,a,b,c){if(g){g=!1;var d=i("scheduler_settings");if(d){if(!scheduler._min_date)scheduler._min_date=c;d=unescape(d).split("@");d[0]=this.templates.xml_date(d[0]);
-var f=this.isViewExists(d[1])?d[1]:b,j=!isNaN(+d[0])?d[0]:c;window.setTimeout(function(){scheduler.setCurrentView(j,f)},1);return!1}}var k=escape(this.templates.xml_format(c||a)+"@"+(b||e));h("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",k);return!0});var f=scheduler._load;scheduler._load=function(){var e=arguments;if(!scheduler._date&&scheduler._load_mode){var a=this;window.setTimeout(function(){f.apply(a,e)},1)}else f.apply(this,e)}})();
+!function(){function e(e,t,i){var s=e+"="+i+(t?"; "+t:"");document.cookie=s}function t(e){var t=e+"=";if(document.cookie.length>0){var i=document.cookie.indexOf(t);if(-1!=i){i+=t.length;var s=document.cookie.indexOf(";",i);return-1==s&&(s=document.cookie.length),document.cookie.substring(i,s)}}return""}var i=!0;scheduler.attachEvent("onBeforeViewChange",function(s,n,a,r){if(i){i=!1;var d=t("scheduler_settings");if(d){scheduler._min_date||(scheduler._min_date=r),d=unescape(d).split("@"),d[0]=this.templates.xml_date(d[0]);
+var o=this.isViewExists(d[1])?d[1]:a,l=isNaN(+d[0])?r:d[0];return window.setTimeout(function(){scheduler.setCurrentView(l,o)},1),!1}}var h=escape(this.templates.xml_format(r||n)+"@"+(a||s));return e("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",h),!0});var s=scheduler._load;scheduler._load=function(){var e=arguments;if(!scheduler._date&&scheduler._load_mode){var t=this;window.setTimeout(function(){s.apply(t,e)},1)}else s.apply(this,e)}}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_cookie.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_editors.js b/codebase/ext/dhtmlxscheduler_editors.js
index 8cddbb8..5a409f0 100644
--- a/codebase/ext/dhtmlxscheduler_editors.js
+++ b/codebase/ext/dhtmlxscheduler_editors.js
@@ -1,11 +1,14 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.form_blocks.combo={render:function(a){if(!a.cached_options)a.cached_options={};var d="";d+="<div class='"+a.type+"' style='height:"+(a.height||20)+"px;' ></div>";return d},set_value:function(a,d,c,b){(function(){function b(){a._combo&&a._combo.DOMParent&&a._combo.destructor()}b();var c=scheduler.attachEvent("onAfterLightbox",function(){b();scheduler.detachEvent(c)})})();window.dhx_globalImgPath=b.image_path||"/";a._combo=new dhtmlXCombo(a,b.name,a.offsetWidth-8);b.onchange&&a._combo.attachEvent("onChange",
-b.onchange);b.options_height&&a._combo.setOptionHeight(b.options_height);var e=a._combo;e.enableFilteringMode(b.filtering,b.script_path||null,!!b.cache);if(b.script_path){var f=c[b.map_to];f?b.cached_options[f]?(e.addOption(f,b.cached_options[f]),e.disable(1),e.selectOption(0),e.disable(0)):dhtmlxAjax.get(b.script_path+"?id="+f+"&uid="+scheduler.uid(),function(a){var c=a.doXPath("//option")[0],d=c.childNodes[0].nodeValue;b.cached_options[f]=d;e.addOption(f,d);e.disable(1);e.selectOption(0);e.disable(0)}):
-e.setComboValue("")}else{for(var g=[],h=0;h<b.options.length;h++){var i=b.options[h],j=[i.key,i.label,i.css];g.push(j)}e.addOption(g);if(c[b.map_to]){var k=e.getIndexByValue(c[b.map_to]);e.selectOption(k)}}},get_value:function(a,d,c){var b=a._combo.getSelectedValue();c.script_path&&(c.cached_options[b]=a._combo.getSelectedText());return b},focus:function(){}};
-scheduler.form_blocks.radio={render:function(a){var d="";d+="<div class='dhx_cal_ltext dhx_cal_radio' style='height:"+a.height+"px;' >";for(var c=0;c<a.options.length;c++){var b=scheduler.uid();d+="<input id='"+b+"' type='radio' name='"+a.name+"' value='"+a.options[c].key+"'><label for='"+b+"'> "+a.options[c].label+"</label>";a.vertical&&(d+="<br/>")}d+="</div>";return d},set_value:function(a,d,c,b){for(var e=a.getElementsByTagName("input"),f=0;f<e.length;f++){e[f].checked=!1;var g=c[b.map_to]||d;
-if(e[f].value==g)e[f].checked=!0}},get_value:function(a){for(var d=a.getElementsByTagName("input"),c=0;c<d.length;c++)if(d[c].checked)return d[c].value},focus:function(){}};
-scheduler.form_blocks.checkbox={render:function(a){return scheduler.config.wide_form?'<div class="dhx_cal_wide_checkbox" '+(a.height?"style='height:"+a.height+"px;'":"")+"></div>":""},set_value:function(a,d,c,b){var a=document.getElementById(b.id),e=scheduler.uid(),f=typeof b.checked_value!="undefined"?c[b.map_to]==b.checked_value:!!d;a.className+=" dhx_cal_checkbox";var g="<input id='"+e+"' type='checkbox' value='true' name='"+b.name+"'"+(f?"checked='true'":"")+"'>",h="<label for='"+e+"'>"+(scheduler.locale.labels["section_"+
-b.name]||b.name)+"</label>";scheduler.config.wide_form?(a.innerHTML=h,a.nextSibling.innerHTML=g):a.innerHTML=g+h;if(b.handler){var i=a.getElementsByTagName("input")[0];i.onclick=b.handler}},get_value:function(a,d,c){var a=document.getElementById(c.id),b=a.getElementsByTagName("input")[0];b||(b=a.nextSibling.getElementsByTagName("input")[0]);return b.checked?c.checked_value||!0:c.unchecked_value||!1},focus:function(){}};
+scheduler.form_blocks.combo={render:function(e){e.cached_options||(e.cached_options={});var t="";return t+="<div class='"+e.type+"' style='height:"+(e.height||20)+"px;' ></div>"},set_value:function(e,t,i,s){!function(){function t(){e._combo&&e._combo.DOMParent&&e._combo.destructor()}t();var i=scheduler.attachEvent("onAfterLightbox",function(){t(),scheduler.detachEvent(i)})}(),window.dhx_globalImgPath=s.image_path||"/",e._combo=new dhtmlXCombo(e,s.name,e.offsetWidth-8),s.onchange&&e._combo.attachEvent("onChange",s.onchange),s.options_height&&e._combo.setOptionHeight(s.options_height);
+var n=e._combo;if(n.enableFilteringMode(s.filtering,s.script_path||null,!!s.cache),s.script_path){var a=i[s.map_to];a?s.cached_options[a]?(n.addOption(a,s.cached_options[a]),n.disable(1),n.selectOption(0),n.disable(0)):dhtmlxAjax.get(s.script_path+"?id="+a+"&uid="+scheduler.uid(),function(e){var t=e.doXPath("//option")[0],i=t.childNodes[0].nodeValue;s.cached_options[a]=i,n.addOption(a,i),n.disable(1),n.selectOption(0),n.disable(0)}):n.setComboValue("")}else{for(var r=[],d=0;d<s.options.length;d++){var o=s.options[d],l=[o.key,o.label,o.css];
+r.push(l)}if(n.addOption(r),i[s.map_to]){var h=n.getIndexByValue(i[s.map_to]);n.selectOption(h)}}},get_value:function(e,t,i){var s=e._combo.getSelectedValue();return i.script_path&&(i.cached_options[s]=e._combo.getSelectedText()),s},focus:function(){}},scheduler.form_blocks.radio={render:function(e){var t="";t+="<div class='dhx_cal_ltext dhx_cal_radio' style='height:"+e.height+"px;' >";for(var i=0;i<e.options.length;i++){var s=scheduler.uid();t+="<input id='"+s+"' type='radio' name='"+e.name+"' value='"+e.options[i].key+"'><label for='"+s+"'> "+e.options[i].label+"</label>",e.vertical&&(t+="<br/>")
+}return t+="</div>"},set_value:function(e,t,i,s){for(var n=e.getElementsByTagName("input"),a=0;a<n.length;a++){n[a].checked=!1;var r=i[s.map_to]||t;n[a].value==r&&(n[a].checked=!0)}},get_value:function(e){for(var t=e.getElementsByTagName("input"),i=0;i<t.length;i++)if(t[i].checked)return t[i].value},focus:function(){}},scheduler.form_blocks.checkbox={render:function(e){return scheduler.config.wide_form?'<div class="dhx_cal_wide_checkbox" '+(e.height?"style='height:"+e.height+"px;'":"")+"></div>":""
+},set_value:function(e,t,i,s){e=document.getElementById(s.id);var n=scheduler.uid(),a="undefined"!=typeof s.checked_value?t==s.checked_value:!!t;e.className+=" dhx_cal_checkbox";var r="<input id='"+n+"' type='checkbox' value='true' name='"+s.name+"'"+(a?"checked='true'":"")+"'>",d="<label for='"+n+"'>"+(scheduler.locale.labels["section_"+s.name]||s.name)+"</label>";if(scheduler.config.wide_form?(e.innerHTML=d,e.nextSibling.innerHTML=r):e.innerHTML=r+d,s.handler){var o=e.getElementsByTagName("input")[0];
+o.onclick=s.handler}},get_value:function(e,t,i){e=document.getElementById(i.id);var s=e.getElementsByTagName("input")[0];return s||(s=e.nextSibling.getElementsByTagName("input")[0]),s.checked?i.checked_value||!0:i.unchecked_value||!1},focus:function(){}};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_editors.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_expand.js b/codebase/ext/dhtmlxscheduler_expand.js
index 7df19f2..ef0cbcd 100644
--- a/codebase/ext/dhtmlxscheduler_expand.js
+++ b/codebase/ext/dhtmlxscheduler_expand.js
@@ -1,8 +1,11 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.expand=function(){var a=scheduler._obj;do a._position=a.style.position||"",a.style.position="static";while((a=a.parentNode)&&a.style);a=scheduler._obj;a.style.position="absolute";a._width=a.style.width;a._height=a.style.height;a.style.width=a.style.height="100%";a.style.top=a.style.left="0px";var b=document.body;b.scrollTop=0;if(b=b.parentNode)b.scrollTop=0;document.body._overflow=document.body.style.overflow||"";document.body.style.overflow="hidden";scheduler._maximize()};
-scheduler.collapse=function(){var a=scheduler._obj;do a.style.position=a._position;while((a=a.parentNode)&&a.style);a=scheduler._obj;a.style.width=a._width;a.style.height=a._height;document.body.style.overflow=document.body._overflow;scheduler._maximize()};scheduler.attachEvent("onTemplatesReady",function(){var a=document.createElement("DIV");a.className="dhx_expand_icon";scheduler.toggleIcon=a;scheduler._obj.appendChild(a);a.onclick=function(){scheduler.expanded?scheduler.collapse():scheduler.expand()}});
-scheduler._maximize=function(){this.expanded=!this.expanded;this.toggleIcon.style.backgroundPosition="0 "+(this.expanded?"0":"18")+"px";for(var a=["left","top"],b=0;b<a.length;b++){var d=scheduler.xy["margin_"+a[b]],c=scheduler["_prev_margin_"+a[b]];scheduler.xy["margin_"+a[b]]?(scheduler["_prev_margin_"+a[b]]=scheduler.xy["margin_"+a[b]],scheduler.xy["margin_"+a[b]]=0):c&&(scheduler.xy["margin_"+a[b]]=scheduler["_prev_margin_"+a[b]],delete scheduler["_prev_margin_"+a[b]])}scheduler.callEvent("onSchedulerResize",
-[])&&(scheduler.update_view(),scheduler.callEvent("onAfterSchedulerResize"))};
+scheduler.expand=function(){var e=scheduler._obj;do e._position=e.style.position||"",e.style.position="static";while((e=e.parentNode)&&e.style);e=scheduler._obj,e.style.position="absolute",e._width=e.style.width,e._height=e.style.height,e.style.width=e.style.height="100%",e.style.top=e.style.left="0px";var t=document.body;t.scrollTop=0,t=t.parentNode,t&&(t.scrollTop=0),document.body._overflow=document.body.style.overflow||"",document.body.style.overflow="hidden",scheduler._maximize()},scheduler.collapse=function(){var e=scheduler._obj;
+do e.style.position=e._position;while((e=e.parentNode)&&e.style);e=scheduler._obj,e.style.width=e._width,e.style.height=e._height,document.body.style.overflow=document.body._overflow,scheduler._maximize()},scheduler.attachEvent("onTemplatesReady",function(){var e=document.createElement("DIV");e.className="dhx_expand_icon",scheduler.toggleIcon=e,scheduler._obj.appendChild(e),e.onclick=function(){scheduler.expanded?scheduler.collapse():scheduler.expand()}}),scheduler._maximize=function(){this.expanded=!this.expanded,this.toggleIcon.style.backgroundPosition="0 "+(this.expanded?"0":"18")+"px";
+for(var e=["left","top"],t=0;t<e.length;t++){var i=(scheduler.xy["margin_"+e[t]],scheduler["_prev_margin_"+e[t]]);scheduler.xy["margin_"+e[t]]?(scheduler["_prev_margin_"+e[t]]=scheduler.xy["margin_"+e[t]],scheduler.xy["margin_"+e[t]]=0):i&&(scheduler.xy["margin_"+e[t]]=scheduler["_prev_margin_"+e[t]],delete scheduler["_prev_margin_"+e[t]])}scheduler.callEvent("onSchedulerResize",[])&&(scheduler.update_view(),scheduler.callEvent("onAfterSchedulerResize"))};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_expand.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_grid_view.js b/codebase/ext/dhtmlxscheduler_grid_view.js
index 8f7d006..f8d97bf 100644
--- a/codebase/ext/dhtmlxscheduler_grid_view.js
+++ b/codebase/ext/dhtmlxscheduler_grid_view.js
@@ -1,28 +1,25 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){scheduler._grid={sort_rules:{"int":function(b,d,a){return a(b)*1<a(d)*1?1:-1},str:function(b,d,a){return a(b)<a(d)?1:-1},date:function(b,d,a){return new Date(a(b))<new Date(a(d))?1:-1}},_getObjName:function(b){return"grid_"+b},_getViewName:function(b){return b.replace(/^grid_/,"")}}})();
-scheduler.createGridView=function(b){function d(a){return!(a!==void 0&&(a*1!=a||a<0))}var a=b.name||"grid",c=scheduler._grid._getObjName(a);scheduler.config[a+"_start"]=b.from||new Date(0);scheduler.config[a+"_end"]=b.to||new Date(9999,1,1);scheduler[c]=b;scheduler[c].defPadding=8;scheduler[c].columns=scheduler[c].fields;delete scheduler[c].fields;for(var e=scheduler[c].columns,f=0;f<e.length;f++){if(d(e[f].width))e[f].initialWidth=e[f].width;d(e[f].paddingLeft)||delete e[f].paddingLeft;d(e[f].paddingRight)||
-delete e[f].paddingRight}scheduler[c].select=b.select===void 0?!0:b.select;scheduler.locale.labels[a+"_tab"]===void 0&&(scheduler.locale.labels[a+"_tab"]=scheduler[c].label||scheduler.locale.labels.grid_tab);scheduler[c]._selected_divs=[];scheduler.date[a+"_start"]=function(a){return a};scheduler.date["add_"+a]=function(a,b){var c=new Date(a);c.setMonth(c.getMonth()+b);return c};scheduler.templates[a+"_date"]=function(a,b){return scheduler.templates.day_date(a)+" - "+scheduler.templates.day_date(b)};
-scheduler.templates[a+"_full_date"]=function(b,c,d){return scheduler.isOneDayEvent(d)?this[a+"_single_date"](b):scheduler.templates.day_date(b)+" &ndash; "+scheduler.templates.day_date(c)};scheduler.templates[a+"_single_date"]=function(a){return scheduler.templates.day_date(a)+" "+this.event_date(a)};scheduler.templates[a+"_field"]=function(a,b){return b[a]};scheduler.attachEvent("onTemplatesReady",function(){scheduler.attachEvent("onDblClick",function(b){return this._mode==a?(scheduler._click.buttons.details(b),
-!1):!0});scheduler.attachEvent("onClick",function(b,d){return this._mode==a&&scheduler[c].select?(scheduler._grid.unselectEvent("",a),scheduler._grid.selectEvent(b,a,d),!1):!0});scheduler.attachEvent("onSchedulerResize",function(){return this._mode==a?(this[a+"_view"](!0),window.setTimeout(function(){scheduler.callEvent("onAfterSchedulerResize",[])},1),!1):!0});var b=scheduler.render_data;scheduler.render_data=function(d){if(this._mode==a)scheduler._grid._fill_grid_tab(c);else return b.apply(this,
-arguments)};var d=scheduler.render_view_data;scheduler.render_view_data=function(){if(this._mode==a)scheduler._grid._gridScrollTop=scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop,scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop=0;scheduler._els.dhx_cal_data[0].style.overflowY="auto";return d.apply(this,arguments)}});scheduler[a+"_view"]=function(b){b?(scheduler._min_date=scheduler[c].paging?scheduler.date[a+"_start"](new Date(scheduler._date)):scheduler.config[a+"_start"],scheduler._max_date=
-scheduler[c].paging?scheduler.date.add(scheduler._min_date,1,a):scheduler.config[a+"_end"],scheduler._grid.set_full_view(c),scheduler._els.dhx_cal_date[0].innerHTML=scheduler._min_date>new Date(0)&&scheduler._max_date<new Date(9999,1,1)?scheduler.templates[a+"_date"](scheduler._min_date,scheduler._max_date):"",scheduler._grid._fill_grid_tab(c),scheduler._gridView=c):(scheduler._grid._sort_marker=null,delete scheduler._gridView,scheduler._rendered=[],scheduler[c]._selected_divs=[])}};
-scheduler.dblclick_dhx_grid_area=function(){!this.config.readonly&&this.config.dblclick_create&&this.addEventNow()};if(scheduler._click.dhx_cal_header)scheduler._old_header_click=scheduler._click.dhx_cal_header;
-scheduler._click.dhx_cal_header=function(b){if(scheduler._gridView){var d=b||window.event,a=scheduler._grid.get_sort_params(d,scheduler._gridView);scheduler._grid.draw_sort_marker(d.originalTarget||d.srcElement,a.dir);scheduler.clear_view();scheduler._grid._fill_grid_tab(scheduler._gridView,a)}else if(scheduler._old_header_click)return scheduler._old_header_click.apply(this,arguments)};
-scheduler._grid.selectEvent=function(b,d,a){if(scheduler.callEvent("onBeforeRowSelect",[b,a])){var c=scheduler._grid._getObjName(d);scheduler.for_rendered(b,function(a){a.className+=" dhx_grid_event_selected";scheduler[c]._selected_divs.push(a)});scheduler._select_id=b}};scheduler._grid._unselectDiv=function(b){b.className=b.className.replace(/ dhx_grid_event_selected/,"")};
-scheduler._grid.unselectEvent=function(b,d){var a=scheduler._grid._getObjName(d);if(a&&scheduler[a]._selected_divs)if(b)for(c=0;c<scheduler[a]._selected_divs.length;c++){if(scheduler[a]._selected_divs[c].getAttribute("event_id")==b){scheduler._grid._unselectDiv(scheduler[a]._selected_divs[c]);scheduler[a]._selected_divs.slice(c,1);break}}else{for(var c=0;c<scheduler[a]._selected_divs.length;c++)scheduler._grid._unselectDiv(scheduler[a]._selected_divs[c]);scheduler[a]._selected_divs=[]}};
-scheduler._grid.get_sort_params=function(b,d){var a=b.originalTarget||b.srcElement;if(a.className=="dhx_grid_view_sort")a=a.parentNode;for(var c=!a.className||a.className.indexOf("dhx_grid_sort_asc")==-1?"asc":"desc",e=0,f=0;f<a.parentNode.childNodes.length;f++)if(a.parentNode.childNodes[f]==a){e=f;break}var i=null;if(scheduler[d].columns[e].template)var g=scheduler[d].columns[e].template,i=function(a){return g(a.start_date,a.end_date,a)};else{var k=scheduler[d].columns[e].id;k=="date"&&(k="start_date");
-i=function(a){return a[k]}}var h=scheduler[d].columns[e].sort;typeof h!="function"&&(h=scheduler._grid.sort_rules[h]||scheduler._grid.sort_rules.str);return{dir:c,value:i,rule:h}};
-scheduler._grid.draw_sort_marker=function(b,d){if(b.className=="dhx_grid_view_sort")b=b.parentNode;if(scheduler._grid._sort_marker)scheduler._grid._sort_marker.className=scheduler._grid._sort_marker.className.replace(/( )?dhx_grid_sort_(asc|desc)/,""),scheduler._grid._sort_marker.removeChild(scheduler._grid._sort_marker.lastChild);b.className+=" dhx_grid_sort_"+d;scheduler._grid._sort_marker=b;var a="<div class='dhx_grid_view_sort' style='left:"+(+b.style.width.replace("px","")-15+b.offsetLeft)+"px'>&nbsp;</div>";
-b.innerHTML+=a};scheduler._grid.sort_grid=function(b){var b=b||{dir:"desc",value:function(a){return a.start_date},rule:scheduler._grid.sort_rules.date},d=scheduler.get_visible_events();b.dir=="desc"?d.sort(function(a,c){return b.rule(a,c,b.value)}):d.sort(function(a,c){return-b.rule(a,c,b.value)});return d};scheduler._grid.set_full_view=function(b){if(b){var d=scheduler.locale.labels,a=scheduler._grid._print_grid_header(b);scheduler._els.dhx_cal_header[0].innerHTML=a;scheduler._table_view=!0;scheduler.set_sizes()}};
-scheduler._grid._calcPadding=function(b,d){var a=(b.paddingLeft!==void 0?1*b.paddingLeft:scheduler[d].defPadding)+(b.paddingRight!==void 0?1*b.paddingRight:scheduler[d].defPadding);return a};
-scheduler._grid._getStyles=function(b,d){for(var a=[],c="",e=0;d[e];e++)switch(c=d[e]+":",d[e]){case "text-align":b.align&&a.push(c+b.align);break;case "vertical-align":b.valign&&a.push(c+b.valign);break;case "padding-left":b.paddingLeft!=void 0&&a.push(c+(b.paddingLeft||"0")+"px");break;case "padding-right":b.paddingRight!=void 0&&a.push(c+(b.paddingRight||"0")+"px")}return a};
-scheduler._grid._fill_grid_tab=function(b,d){for(var a=scheduler._date,c=scheduler._grid.sort_grid(d),e=scheduler[b].columns,f="<div>",i=-2,g=0;g<e.length;g++){var k=scheduler._grid._calcPadding(e[g],b);i+=e[g].width+k;g<e.length-1&&(f+="<div class='dhx_grid_v_border' style='left:"+i+"px'></div>")}f+="</div>";f+="<div class='dhx_grid_area'><table>";for(g=0;g<c.length;g++)f+=scheduler._grid._print_event_row(c[g],b);f+="</table></div>";scheduler._els.dhx_cal_data[0].innerHTML=f;scheduler._els.dhx_cal_data[0].scrollTop=
-scheduler._grid._gridScrollTop||0;var h=scheduler._els.dhx_cal_data[0].getElementsByTagName("tr");scheduler._rendered=[];for(g=0;g<h.length;g++)scheduler._rendered[g]=h[g]};
-scheduler._grid._print_event_row=function(b,d){var a=[];b.color&&a.push("background:"+b.color);b.textColor&&a.push("color:"+b.textColor);b._text_style&&a.push(b._text_style);scheduler[d].rowHeight&&a.push("height:"+scheduler[d].rowHeight+"px");var c="";a.length&&(c="style='"+a.join(";")+"'");for(var e=scheduler[d].columns,f=scheduler.templates.event_class(b.start_date,b.end_date,b),i="<tr class='dhx_grid_event"+(f?" "+f:"")+"' event_id='"+b.id+"' "+c+">",g=scheduler._grid._getViewName(d),k=["text-align",
-"vertical-align","padding-left","padding-right"],h=0;h<e.length;h++){var j;j=e[h].template?e[h].template(b.start_date,b.end_date,b):e[h].id=="date"?scheduler.templates[g+"_full_date"](b.start_date,b.end_date,b):e[h].id=="start_date"||e[h].id=="end_date"?scheduler.templates[g+"_single_date"](b[e[h].id]):scheduler.templates[g+"_field"](e[h].id,b);var l=scheduler._grid._getStyles(e[h],k),m=e[h].css?' class="'+e[h].css+'"':"";i+="<td style='width:"+e[h].width+"px;"+l.join(";")+"' "+m+">"+j+"</td>"}i+=
-"<td class='dhx_grid_dummy'></td></tr>";return i};
-scheduler._grid._print_grid_header=function(b){for(var d="<div class='dhx_grid_line'>",a=scheduler[b].columns,c=[],e=a.length,f=scheduler._obj.clientWidth-2*a.length-20,i=0;i<a.length;i++){var g=a[i].initialWidth*1;!isNaN(g)&&a[i].initialWidth!=""&&a[i].initialWidth!=null&&typeof a[i].initialWidth!="boolean"?(e--,f-=g,c[i]=g):c[i]=null}for(var k=Math.floor(f/e),h=["text-align","padding-left","padding-right"],j=0;j<a.length;j++){var l=!c[j]?k:c[j];a[j].width=l-scheduler._grid._calcPadding(a[j],b);
-var m=scheduler._grid._getStyles(a[j],h);d+="<div style='width:"+(a[j].width-1)+"px;"+m.join(";")+"'>"+(a[j].label===void 0?a[j].id:a[j].label)+"</div>"}d+="</div>";return d};
+!function(){scheduler._grid={sort_rules:{"int":function(e,t,s){return 1*s(e)<1*s(t)?1:-1},str:function(e,t,s){return s(e)<s(t)?1:-1},date:function(e,t,s){return new Date(s(e))<new Date(s(t))?1:-1}},_getObjName:function(e){return"grid_"+e},_getViewName:function(e){return e.replace(/^grid_/,"")}}}(),scheduler.createGridView=function(e){function t(e){return!(void 0!==e&&(1*e!=e||0>e))}var s=e.name||"grid",i=scheduler._grid._getObjName(s);scheduler.config[s+"_start"]=e.from||new Date(0),scheduler.config[s+"_end"]=e.to||new Date(9999,1,1),scheduler[i]=e,scheduler[i].defPadding=8,scheduler[i].columns=scheduler[i].fields,scheduler[i].unit=e.unit||"month",scheduler[i].step=e.step||1,delete scheduler[i].fields;
+for(var r=scheduler[i].columns,n=0;n<r.length;n++)t(r[n].width)&&(r[n].initialWidth=r[n].width),t(r[n].paddingLeft)||delete r[n].paddingLeft,t(r[n].paddingRight)||delete r[n].paddingRight;scheduler[i].select=void 0===e.select?!0:e.select,void 0===scheduler.locale.labels[s+"_tab"]&&(scheduler.locale.labels[s+"_tab"]=scheduler[i].label||scheduler.locale.labels.grid_tab),scheduler[i]._selected_divs=[],scheduler.date[s+"_start"]=function(t){return scheduler.date[e.unit+"_start"]?scheduler.date[e.unit+"_start"](t):t
+},scheduler.date["add_"+s]=function(e,t){return scheduler.date.add(e,t*scheduler[i].step,scheduler[i].unit)},scheduler.templates[s+"_date"]=function(e,t){return scheduler.templates.day_date(e)+" - "+scheduler.templates.day_date(t)},scheduler.templates[s+"_full_date"]=function(e,t,i){return scheduler.isOneDayEvent(i)?this[s+"_single_date"](e):scheduler.templates.day_date(e)+" &ndash; "+scheduler.templates.day_date(t)},scheduler.templates[s+"_single_date"]=function(e){return scheduler.templates.day_date(e)+" "+this.event_date(e)
+},scheduler.templates[s+"_field"]=function(e,t){return t[e]},scheduler.attachEvent("onTemplatesReady",function(){scheduler.attachEvent("onDblClick",function(e){return this._mode==s?(scheduler._click.buttons.details(e),!1):!0}),scheduler.attachEvent("onClick",function(e,t){return this._mode==s&&scheduler[i].select?(scheduler._grid.unselectEvent("",s),scheduler._grid.selectEvent(e,s,t),!1):!0}),scheduler.attachEvent("onSchedulerResize",function(){return this._mode==s?(this[s+"_view"](!0),window.setTimeout(function(){scheduler.callEvent("onAfterSchedulerResize",[])
+},1),!1):!0});var e=scheduler.render_data;scheduler.render_data=function(){return this._mode!=s?e.apply(this,arguments):void scheduler._grid._fill_grid_tab(i)};var t=scheduler.render_view_data;scheduler.render_view_data=function(){return this._mode==s?(scheduler._grid._gridScrollTop=scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop,scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop=0,scheduler._els.dhx_cal_data[0].style.overflowY="auto"):scheduler._els.dhx_cal_data[0].style.overflowY="auto",t.apply(this,arguments)
+}}),scheduler[s+"_view"]=function(e){if(e){var t=null,r=null,n=scheduler[i];n.paging?(t=scheduler.date[s+"_start"](new Date(scheduler._date)),r=scheduler.date["add_"+s](t,1)):(t=scheduler.config[s+"_start"],r=scheduler.config[s+"_end"]),scheduler._min_date=t,scheduler._max_date=r,scheduler._grid.set_full_view(i);var a="";+t>+new Date(0)&&+r<+new Date(9999,1,1)&&(a=scheduler.templates[s+"_date"](t,r)),scheduler._els.dhx_cal_date[0].innerHTML=a,scheduler._gridView=i}else scheduler._grid._sort_marker=null,delete scheduler._gridView,scheduler._rendered=[],scheduler[i]._selected_divs=[]
+}},scheduler.dblclick_dhx_grid_area=function(){!this.config.readonly&&this.config.dblclick_create&&this.addEventNow()},scheduler._click.dhx_cal_header&&(scheduler._old_header_click=scheduler._click.dhx_cal_header),scheduler._click.dhx_cal_header=function(e){if(scheduler._gridView){var t=e||window.event,s=scheduler._grid.get_sort_params(t,scheduler._gridView);scheduler._grid.draw_sort_marker(t.originalTarget||t.srcElement,s.dir),scheduler.clear_view(),scheduler._grid._fill_grid_tab(scheduler._gridView,s)
+}else if(scheduler._old_header_click)return scheduler._old_header_click.apply(this,arguments)},scheduler._grid.selectEvent=function(e,t,s){if(scheduler.callEvent("onBeforeRowSelect",[e,s])){var i=scheduler._grid._getObjName(t);scheduler.for_rendered(e,function(e){e.className+=" dhx_grid_event_selected",scheduler[i]._selected_divs.push(e)}),scheduler._select_id=e}},scheduler._grid._unselectDiv=function(e){e.className=e.className.replace(/ dhx_grid_event_selected/,"")},scheduler._grid.unselectEvent=function(e,t){var s=scheduler._grid._getObjName(t);
+if(s&&scheduler[s]._selected_divs)if(e){for(var i=0;i<scheduler[s]._selected_divs.length;i++)if(scheduler[s]._selected_divs[i].getAttribute("event_id")==e){scheduler._grid._unselectDiv(scheduler[s]._selected_divs[i]),scheduler[s]._selected_divs.slice(i,1);break}}else{for(var i=0;i<scheduler[s]._selected_divs.length;i++)scheduler._grid._unselectDiv(scheduler[s]._selected_divs[i]);scheduler[s]._selected_divs=[]}},scheduler._grid.get_sort_params=function(e,t){var s=e.originalTarget||e.srcElement,i="desc";
+"dhx_grid_view_sort"==s.className&&(s=s.parentNode),s.className&&-1!=s.className.indexOf("dhx_grid_sort_asc")||(i="asc");for(var r=0,n=0;n<s.parentNode.childNodes.length;n++)if(s.parentNode.childNodes[n]==s){r=n;break}var a=null;if(scheduler[t].columns[r].template){var d=scheduler[t].columns[r].template;a=function(e){return d(e.start_date,e.end_date,e)}}else{var l=scheduler[t].columns[r].id;"date"==l&&(l="start_date"),a=function(e){return e[l]}}var o=scheduler[t].columns[r].sort;return"function"!=typeof o&&(o=scheduler._grid.sort_rules[o]||scheduler._grid.sort_rules.str),{dir:i,value:a,rule:o}
+},scheduler._grid.draw_sort_marker=function(e,t){"dhx_grid_view_sort"==e.className&&(e=e.parentNode),scheduler._grid._sort_marker&&(scheduler._grid._sort_marker.className=scheduler._grid._sort_marker.className.replace(/( )?dhx_grid_sort_(asc|desc)/,""),scheduler._grid._sort_marker.removeChild(scheduler._grid._sort_marker.lastChild)),e.className+=" dhx_grid_sort_"+t,scheduler._grid._sort_marker=e;var s="<div class='dhx_grid_view_sort' style='left:"+(+e.style.width.replace("px","")-15+e.offsetLeft)+"px'>&nbsp;</div>";
+e.innerHTML+=s},scheduler._grid.sort_grid=function(e){var e=e||{dir:"desc",value:function(e){return e.start_date},rule:scheduler._grid.sort_rules.date},t=scheduler.get_visible_events();return t.sort("desc"==e.dir?function(t,s){return e.rule(t,s,e.value)}:function(t,s){return-e.rule(t,s,e.value)}),t},scheduler._grid.set_full_view=function(e){if(e){var t=(scheduler.locale.labels,scheduler._grid._print_grid_header(e));scheduler._els.dhx_cal_header[0].innerHTML=t,scheduler._table_view=!0,scheduler.set_sizes()
+}},scheduler._grid._calcPadding=function(e,t){var s=(void 0!==e.paddingLeft?1*e.paddingLeft:scheduler[t].defPadding)+(void 0!==e.paddingRight?1*e.paddingRight:scheduler[t].defPadding);return s},scheduler._grid._getStyles=function(e,t){for(var s=[],i="",r=0;t[r];r++)switch(i=t[r]+":",t[r]){case"text-align":e.align&&s.push(i+e.align);break;case"vertical-align":e.valign&&s.push(i+e.valign);break;case"padding-left":void 0!==e.paddingLeft&&s.push(i+(e.paddingLeft||"0")+"px");break;case"padding-right":void 0!==e.paddingRight&&s.push(i+(e.paddingRight||"0")+"px")
+}return s},scheduler._grid._fill_grid_tab=function(e,t){for(var s=(scheduler._date,scheduler._grid.sort_grid(t)),i=scheduler[e].columns,r="<div>",n=-2,a=0;a<i.length;a++){var d=scheduler._grid._calcPadding(i[a],e);n+=i[a].width+d,a<i.length-1&&(r+="<div class='dhx_grid_v_border' style='left:"+n+"px'></div>")}r+="</div>",r+="<div class='dhx_grid_area'><table>";for(var a=0;a<s.length;a++)r+=scheduler._grid._print_event_row(s[a],e);r+="</table></div>",scheduler._els.dhx_cal_data[0].innerHTML=r,scheduler._els.dhx_cal_data[0].scrollTop=scheduler._grid._gridScrollTop||0;
+var l=scheduler._els.dhx_cal_data[0].getElementsByTagName("tr");scheduler._rendered=[];for(var a=0;a<l.length;a++)scheduler._rendered[a]=l[a]},scheduler._grid._print_event_row=function(e,t){var s=[];e.color&&s.push("background:"+e.color),e.textColor&&s.push("color:"+e.textColor),e._text_style&&s.push(e._text_style),scheduler[t].rowHeight&&s.push("height:"+scheduler[t].rowHeight+"px");var i="";s.length&&(i="style='"+s.join(";")+"'");for(var r=scheduler[t].columns,n=scheduler.templates.event_class(e.start_date,e.end_date,e),a="<tr class='dhx_grid_event"+(n?" "+n:"")+"' event_id='"+e.id+"' "+i+">",d=scheduler._grid._getViewName(t),l=["text-align","vertical-align","padding-left","padding-right"],o=0;o<r.length;o++){var h;
+h=r[o].template?r[o].template(e.start_date,e.end_date,e):"date"==r[o].id?scheduler.templates[d+"_full_date"](e.start_date,e.end_date,e):"start_date"==r[o].id||"end_date"==r[o].id?scheduler.templates[d+"_single_date"](e[r[o].id]):scheduler.templates[d+"_field"](r[o].id,e);var _=scheduler._grid._getStyles(r[o],l),c=r[o].css?' class="'+r[o].css+'"':"";a+="<td style='width:"+r[o].width+"px;"+_.join(";")+"' "+c+">"+h+"</td>"}return a+="<td class='dhx_grid_dummy'></td></tr>"},scheduler._grid._print_grid_header=function(e){for(var t="<div class='dhx_grid_line'>",s=scheduler[e].columns,i=[],r=s.length,n=scheduler._obj.clientWidth-2*s.length-20,a=0;a<s.length;a++){var d=1*s[a].initialWidth;
+isNaN(d)||""===s[a].initialWidth||null===s[a].initialWidth||"boolean"==typeof s[a].initialWidth?i[a]=null:(r--,n-=d,i[a]=d)}for(var l=Math.floor(n/r),o=["text-align","padding-left","padding-right"],h=0;h<s.length;h++){var _=i[h]?i[h]:l;s[h].width=_-scheduler._grid._calcPadding(s[h],e);var c=scheduler._grid._getStyles(s[h],o);t+="<div style='width:"+(s[h].width-1)+"px;"+c.join(";")+"'>"+(void 0===s[h].label?s[h].id:s[h].label)+"</div>"}return t+="</div>"};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_grid_view.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_html_templates.js b/codebase/ext/dhtmlxscheduler_html_templates.js
index 07cc112..2d52a73 100644
--- a/codebase/ext/dhtmlxscheduler_html_templates.js
+++ b/codebase/ext/dhtmlxscheduler_html_templates.js
@@ -1,5 +1,9 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.attachEvent("onTemplatesReady",function(){for(var c=document.body.getElementsByTagName("DIV"),b=0;b<c.length;b++){var a=c[b].className||"",a=a.split(":");if(a.length==2&&a[0]=="template"){var d='return "'+(c[b].innerHTML||"").replace(/\"/g,'\\"').replace(/[\n\r]+/g,"")+'";',d=unescape(d).replace(/\{event\.([a-z]+)\}/g,function(b,a){return'"+ev.'+a+'+"'});scheduler.templates[a[1]]=Function("start","end","ev",d);c[b].style.display="none"}}});
+scheduler.attachEvent("onTemplatesReady",function(){for(var e=document.body.getElementsByTagName("DIV"),t=0;t<e.length;t++){var s=e[t].className||"";if(s=s.split(":"),2==s.length&&"template"==s[0]){var i='return "'+(e[t].innerHTML||"").replace(/\"/g,'\\"').replace(/[\n\r]+/g,"")+'";';i=unescape(i).replace(/\{event\.([a-z]+)\}/g,function(e,t){return'"+ev.'+t+'+"'}),scheduler.templates[s[1]]=Function("start","end","ev",i),e[t].style.display="none"}}});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_html_templates.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_key_nav.js b/codebase/ext/dhtmlxscheduler_key_nav.js
index 354a469..007c7b1 100644
--- a/codebase/ext/dhtmlxscheduler_key_nav.js
+++ b/codebase/ext/dhtmlxscheduler_key_nav.js
@@ -1,7 +1,12 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-(scheduler._temp_key_scope=function(){function j(b){delete b.rec_type;delete b.rec_pattern;delete b.event_pid;delete b.event_length}var h=!1,i,f=null;scheduler.attachEvent("onBeforeLightbox",function(){return h=!0});scheduler.attachEvent("onAfterLightbox",function(){h=!1;return!0});scheduler.attachEvent("onMouseMove",function(b,a){i=scheduler.getActionData(a).date});dhtmlxEvent(document,_isOpera?"keypress":"keydown",function(b){b=b||event;if(!h){var a=window.scheduler;if(b.keyCode==37||b.keyCode==
-39){b.cancelBubble=!0;var l=a.date.add(a._date,b.keyCode==37?-1:1,a._mode);a.setCurrentView(l);return!0}var g=a._select_id;if(b.ctrlKey&&b.keyCode==67){if(g)a._buffer_id=g,f=!0,a.callEvent("onEventCopied",[a.getEvent(g)]);return!0}if(b.ctrlKey&&b.keyCode==88&&g){f=!1;a._buffer_id=g;var c=a.getEvent(g);a.updateEvent(c.id);a.callEvent("onEventCut",[c])}if(b.ctrlKey&&b.keyCode==86){if(c=a.getEvent(a._buffer_id)){var k=c.end_date-c.start_date;if(f){var e=a._lame_clone(c);j(e);e.id=a.uid();e.start_date=
-new Date(i);e.end_date=new Date(e.start_date.valueOf()+k);a.addEvent(e);a.callEvent("onEventPasted",[f,e,c])}else{var d=a._lame_copy({},c);j(d);d.start_date=new Date(i);d.end_date=new Date(d.start_date.valueOf()+k);var m=a.callEvent("onBeforeEventChanged",[d,b,!1]);if(m)c.start_date=new Date(d.start_date),c.end_date=new Date(d.end_date),a.render_view_data(),a.callEvent("onEventPasted",[f,c,d]),f=!0}}return!0}}})})();
+scheduler._temp_key_scope=function(){function e(e){delete e.rec_type,delete e.rec_pattern,delete e.event_pid,delete e.event_length}scheduler.config.key_nav=!0;var t,s,i=null;scheduler.attachEvent("onMouseMove",function(e,i){t=scheduler.getActionData(i).date,s=scheduler.getActionData(i).section}),scheduler._make_pasted_event=function(i){var r=i.end_date-i.start_date,n=scheduler._lame_copy({},i);if(e(n),n.start_date=new Date(t),n.end_date=new Date(n.start_date.valueOf()+r),s){var a=scheduler.getState().mode,d=null;
+scheduler.matrix[a]?d=scheduler.matrix[a].y_property:scheduler._props[a]&&(d=scheduler._props[a].property),n[d]=s}return n},scheduler._do_paste=function(e,t,s){scheduler.addEvent(t),scheduler.callEvent("onEventPasted",[e,t,s])},scheduler._is_key_nav_active=function(){return this._is_initialized()&&!this._is_lightbox_open()&&this.config.key_nav?!0:!1},dhtmlxEvent(document,_isOpera?"keypress":"keydown",function(e){if(!scheduler._is_key_nav_active())return!0;if(e=e||event,37==e.keyCode||39==e.keyCode){e.cancelBubble=!0;
+var t=scheduler.date.add(scheduler._date,37==e.keyCode?-1:1,scheduler._mode);return scheduler.setCurrentView(t),!0}var s=scheduler._select_id;if(e.ctrlKey&&67==e.keyCode)return s&&(scheduler._buffer_id=s,i=!0,scheduler.callEvent("onEventCopied",[scheduler.getEvent(s)])),!0;if(e.ctrlKey&&88==e.keyCode&&s){i=!1,scheduler._buffer_id=s;var r=scheduler.getEvent(s);scheduler.updateEvent(r.id),scheduler.callEvent("onEventCut",[r])}if(e.ctrlKey&&86==e.keyCode){var r=scheduler.getEvent(scheduler._buffer_id);
+if(r){var n=scheduler._make_pasted_event(r);if(i)n.id=scheduler.uid(),scheduler._do_paste(i,n,r);else{var a=scheduler.callEvent("onBeforeEventChanged",[n,e,!1,r]);a&&(scheduler._do_paste(i,n,r),i=!0)}}return!0}})},scheduler._temp_key_scope();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_key_nav.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_layer.js b/codebase/ext/dhtmlxscheduler_layer.js
new file mode 100644
index 0000000..276d3be
--- /dev/null
+++ b/codebase/ext/dhtmlxscheduler_layer.js
@@ -0,0 +1,26 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTemplatesReady",function(){this.layers.sort(function(e,t){return e.zIndex-t.zIndex}),scheduler._dp_init=function(e){e._methods=["_set_event_text_style","","changeEventId","deleteEvent"],this.attachEvent("onEventAdded",function(t){!this._loading&&this.validId(t)&&this.getEvent(t)&&this.getEvent(t).layer==e.layer&&e.setUpdated(t,!0,"inserted")}),this.attachEvent("onBeforeEventDelete",function(t){if(this.getEvent(t)&&this.getEvent(t).layer==e.layer){if(!this.validId(t))return;
+var s=e.getState(t);return"inserted"==s||this._new_event?(e.setUpdated(t,!1),!0):"deleted"==s?!1:"true_deleted"==s?!0:(e.setUpdated(t,!0,"deleted"),!1)}return!0}),this.attachEvent("onEventChanged",function(t){!this._loading&&this.validId(t)&&this.getEvent(t)&&this.getEvent(t).layer==e.layer&&e.setUpdated(t,!0,"updated")}),e._getRowData=function(e){var t=this.obj.getEvent(e),s={};for(var i in t)0!==i.indexOf("_")&&(s[i]=t[i]&&t[i].getUTCFullYear?this.obj.templates.xml_format(t[i]):t[i]);return s},e._clearUpdateFlag=function(){},e.attachEvent("insertCallback",scheduler._update_callback),e.attachEvent("updateCallback",scheduler._update_callback),e.attachEvent("deleteCallback",function(e,t){this.obj.setUserData(t,this.action_param,"true_deleted"),this.obj.deleteEvent(t)
+})},function(){var e=function(t){if(null===t||"object"!=typeof t)return t;var s=new t.constructor;for(var i in t)s[i]=e(t[i]);return s};scheduler._dataprocessors=[],scheduler._layers_zindex={};for(var t=0;t<scheduler.layers.length;t++){if(scheduler.config["lightbox_"+scheduler.layers[t].name]={},scheduler.config["lightbox_"+scheduler.layers[t].name].sections=e(scheduler.config.lightbox.sections),scheduler._layers_zindex[scheduler.layers[t].name]=scheduler.config.inital_layer_zindex||5+3*t,scheduler.layers[t].url){var s=new dataProcessor(scheduler.layers[t].url);
+s.layer=scheduler.layers[t].name,scheduler._dataprocessors.push(s),scheduler._dataprocessors[t].init(scheduler)}scheduler.layers[t].isDefault&&(scheduler.defaultLayer=scheduler.layers[t].name)}}(),scheduler.showLayer=function(e){this.toggleLayer(e,!0)},scheduler.hideLayer=function(e){this.toggleLayer(e,!1)},scheduler.toggleLayer=function(e,t){var s=this.getLayer(e);s.visible="undefined"!=typeof t?!!t:!s.visible,this.setCurrentView(this._date,this._mode)},scheduler.getLayer=function(e){var t,s;"string"==typeof e&&(s=e),"object"==typeof e&&(s=e.layer);
+for(var i=0;i<scheduler.layers.length;i++)scheduler.layers[i].name==s&&(t=scheduler.layers[i]);return t},scheduler.attachEvent("onBeforeLightbox",function(e){var t=this.getEvent(e);return this.config.lightbox.sections=this.config["lightbox_"+t.layer].sections,scheduler.resetLightbox(),!0}),scheduler.attachEvent("onClick",function(e){var t=scheduler.getEvent(e);return!scheduler.getLayer(t.layer).noMenu}),scheduler.attachEvent("onEventCollision",function(e,t){var s=this.getLayer(e);if(!s.checkCollision)return!1;
+for(var i=0,r=0;r<t.length;r++)t[r].layer==s.name&&t[r].id!=e.id&&i++;return i>=scheduler.config.collision_limit}),scheduler.addEvent=function(e,t,s,i,r){var a=e;1!=arguments.length&&(a=r||{},a.start_date=e,a.end_date=t,a.text=s,a.id=i,a.layer=this.defaultLayer),a.id=a.id||scheduler.uid(),a.text=a.text||"","string"==typeof a.start_date&&(a.start_date=this.templates.api_date(a.start_date)),"string"==typeof a.end_date&&(a.end_date=this.templates.api_date(a.end_date)),a._timed=this.isOneDayEvent(a);
+var n=!this._events[a.id];this._events[a.id]=a,this.event_updated(a),this._loading||this.callEvent(n?"onEventAdded":"onEventChanged",[a.id,a])},this._evs_layer={};for(var e=0;e<this.layers.length;e++)this._evs_layer[this.layers[e].name]=[];scheduler.addEventNow=function(e,t,s){var i={};"object"==typeof e&&(i=e,e=null);var r=6e4*(this.config.event_duration||this.config.time_step);e||(e=Math.round(scheduler._currentDate().valueOf()/r)*r);var a=new Date(e);if(!t){var n=this.config.first_hour;n>a.getHours()&&(a.setHours(n),e=a.valueOf()),t=e+r
+}i.start_date=i.start_date||a,i.end_date=i.end_date||new Date(t),i.text=i.text||this.locale.labels.new_event,i.id=this._drag_id=this.uid(),i.layer=this.defaultLayer,this._drag_mode="new-size",this._loading=!0,this.addEvent(i),this.callEvent("onEventCreated",[this._drag_id,s]),this._loading=!1,this._drag_event={},this._on_mouse_up(s)},scheduler._t_render_view_data=function(e){if(this.config.multi_day&&!this._table_view){for(var t=[],s=[],i=0;i<e.length;i++)e[i]._timed?t.push(e[i]):s.push(e[i]);this._table_view=!0,this.render_data(s),this._table_view=!1,this.render_data(t)
+}else this.render_data(e)},scheduler.render_view_data=function(){if(this._not_render)return void(this._render_wait=!0);this._render_wait=!1,this.clear_view(),this._evs_layer={};for(var e=0;e<this.layers.length;e++)this._evs_layer[this.layers[e].name]=[];for(var t=this.get_visible_events(),e=0;e<t.length;e++)this._evs_layer[t[e].layer]&&this._evs_layer[t[e].layer].push(t[e]);if("month"==this._mode){for(var s=[],e=0;e<this.layers.length;e++)this.layers[e].visible&&(s=s.concat(this._evs_layer[this.layers[e].name]));
+this._t_render_view_data(s)}else for(var e=0;e<this.layers.length;e++)if(this.layers[e].visible){var i=this._evs_layer[this.layers[e].name];this._t_render_view_data(i)}},scheduler._render_v_bar=function(e,t,s,i,r,a,n,d,l){var o=e.id;-1==n.indexOf("<div class=")&&(n=scheduler.templates["event_header_"+e.layer]?scheduler.templates["event_header_"+e.layer](e.start_date,e.end_date,e):n),-1==d.indexOf("<div class=")&&(d=scheduler.templates["event_text_"+e.layer]?scheduler.templates["event_text_"+e.layer](e.start_date,e.end_date,e):d);
+var h=document.createElement("DIV"),_="dhx_cal_event",c=scheduler.templates["event_class_"+e.layer]?scheduler.templates["event_class_"+e.layer](e.start_date,e.end_date,e):scheduler.templates.event_class(e.start_date,e.end_date,e);c&&(_=_+" "+c);var u='<div event_id="'+o+'" class="'+_+'" style="position:absolute; top:'+s+"px; left:"+t+"px; width:"+(i-4)+"px; height:"+r+"px;"+(a||"")+'">';return u+='<div class="dhx_header" style=" width:'+(i-6)+'px;" >&nbsp;</div>',u+='<div class="dhx_title">'+n+"</div>",u+='<div class="dhx_body" style=" width:'+(i-(this._quirks?4:14))+"px; height:"+(r-(this._quirks?20:30))+'px;">'+d+"</div>",u+='<div class="dhx_footer" style=" width:'+(i-8)+"px;"+(l?" margin-top:-1px;":"")+'" ></div></div>',h.innerHTML=u,h.style.zIndex=100,h.firstChild
+},scheduler.render_event_bar=function(e){var t=this._els.dhx_cal_data[0],s=this._colsS[e._sday],i=this._colsS[e._eday];i==s&&(i=this._colsS[e._eday+1]);var r=this.xy.bar_height,a=this._colsS.heights[e._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+e._sorder*r,n=document.createElement("DIV"),d=e._timed?"dhx_cal_event_clear":"dhx_cal_event_line",l=scheduler.templates["event_class_"+e.layer]?scheduler.templates["event_class_"+e.layer](e.start_date,e.end_date,e):scheduler.templates.event_class(e.start_date,e.end_date,e);
+l&&(d=d+" "+l);var o='<div event_id="'+e.id+'" class="'+d+'" style="position:absolute; top:'+a+"px; left:"+s+"px; width:"+(i-s-15)+"px;"+(e._text_style||"")+'">';e._timed&&(o+=scheduler.templates["event_bar_date_"+e.layer]?scheduler.templates["event_bar_date_"+e.layer](e.start_date,e.end_date,e):scheduler.templates.event_bar_date(e.start_date,e.end_date,e)),o+=scheduler.templates["event_bar_text_"+e.layer]?scheduler.templates["event_bar_text_"+e.layer](e.start_date,e.end_date,e):scheduler.templates.event_bar_text(e.start_date,e.end_date,e)+"</div>)",o+="</div>",n.innerHTML=o,this._rendered.push(n.firstChild),t.appendChild(n.firstChild)
+},scheduler.render_event=function(e){var t=scheduler.xy.menu_width;if(scheduler.getLayer(e.layer).noMenu&&(t=0),!(e._sday<0)){var s=scheduler.locate_holder(e._sday);if(s){var i=60*e.start_date.getHours()+e.start_date.getMinutes(),r=60*e.end_date.getHours()+e.end_date.getMinutes()||60*scheduler.config.last_hour,a=Math.round((60*i*1e3-60*this.config.first_hour*60*1e3)*this.config.hour_size_px/36e5)%(24*this.config.hour_size_px)+1,n=Math.max(scheduler.xy.min_event_height,(r-i)*this.config.hour_size_px/60)+1,d=Math.floor((s.clientWidth-t)/e._count),l=e._sorder*d+1;
+e._inner||(d*=e._count-e._sorder);var o=this._render_v_bar(e.id,t+l,a,d,n,e._text_style,scheduler.templates.event_header(e.start_date,e.end_date,e),scheduler.templates.event_text(e.start_date,e.end_date,e));if(this._rendered.push(o),s.appendChild(o),l=l+parseInt(s.style.left,10)+t,a+=this._dy_shift,o.style.zIndex=this._layers_zindex[e.layer],this._edit_id==e.id){o.style.zIndex=parseInt(o.style.zIndex)+1;var h=o.style.zIndex;d=Math.max(d-4,scheduler.xy.editor_width);var o=document.createElement("DIV");
+o.setAttribute("event_id",e.id),this.set_xy(o,d,n-20,l,a+14),o.className="dhx_cal_editor",o.style.zIndex=h;var _=document.createElement("DIV");this.set_xy(_,d-6,n-26),_.style.cssText+=";margin:2px 2px 2px 2px;overflow:hidden;",_.style.zIndex=h,o.appendChild(_),this._els.dhx_cal_data[0].appendChild(o),this._rendered.push(o),_.innerHTML="<textarea class='dhx_cal_editor'>"+e.text+"</textarea>",this._quirks7&&(_.firstChild.style.height=n-12+"px"),this._editor=_.firstChild,this._editor.onkeypress=function(e){if((e||event).shiftKey)return!0;
+var t=(e||event).keyCode;t==scheduler.keys.edit_save&&scheduler.editStop(!0),t==scheduler.keys.edit_cancel&&scheduler.editStop(!1)},this._editor.onselectstart=function(e){return(e||event).cancelBubble=!0,!0},_.firstChild.focus(),this._els.dhx_cal_data[0].scrollLeft=0,_.firstChild.select()}if(this._select_id==e.id){o.style.zIndex=parseInt(o.style.zIndex)+1;for(var c=this.config["icons_"+(this._edit_id==e.id?"edit":"select")],u="",v=0;v<c.length;v++)u+="<div class='dhx_menu_icon "+c[v]+"' title='"+this.locale.labels[c[v]]+"'></div>";
+var g=this._render_v_bar(e.id,l-t+1,a,t,20*c.length+26,"","<div class='dhx_menu_head'></div>",u,!0);g.style.left=l-t+1,g.style.zIndex=o.style.zIndex,this._els.dhx_cal_data[0].appendChild(g),this._rendered.push(g)}}}},scheduler.filter_agenda=function(e,t){var s=scheduler.getLayer(t.layer);return s&&s.visible}});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_layer.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_limit.js b/codebase/ext/dhtmlxscheduler_limit.js
index ac4c096..98edf3e 100644
--- a/codebase/ext/dhtmlxscheduler_limit.js
+++ b/codebase/ext/dhtmlxscheduler_limit.js
@@ -1,33 +1,34 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.config.limit_start=null;scheduler.config.limit_end=null;scheduler.config.limit_view=!1;scheduler.config.check_limits=!0;scheduler.config.mark_now=!0;scheduler.config.display_marked_timespans=!0;
-(scheduler._temp_limit_scope=function(){function A(b,a,c,d,e){function g(a,b,c,d){var e=[];if(a&&a[b])for(var g=a[b],i=h(c,d,g),k=0;k<i.length;k++)e=f._add_timespan_zones(e,i[k].zones);return e}function h(a,b,c){var d=c[b]&&c[b][e]?c[b][e]:c[a]&&c[a][e]?c[a][e]:[];return d}var f=scheduler,i=[],l={_props:"map_to",matrix:"y_property"},m;for(m in l){var n=l[m];if(f[m])for(var k in f[m]){var o=f[m][k],j=o[n];b[j]&&(i=f._add_timespan_zones(i,g(a[k],b[j],c,d)))}}return i=f._add_timespan_zones(i,g(a,"global",
-c,d))}var u=null,t="dhx_time_block",v="default",B=function(b,a,c){a instanceof Date&&c instanceof Date?(b.start_date=a,b.end_date=c):(b.days=a,b.zones=c);return b},x=function(b,a,c){var d=typeof b=="object"?b:{days:b};d.type=t;d.css="";if(a){if(c)d.sections=c;d=B(d,b,a)}return d};scheduler.blockTime=function(b,a,c){var d=x(b,a,c);return scheduler.addMarkedTimespan(d)};scheduler.unblockTime=function(b,a,c){var a=a||"fullday",d=x(b,a,c);return scheduler.deleteMarkedTimespan(d)};scheduler.attachEvent("onBeforeViewChange",
-function(b,a,c,d){d=d||a;c=c||b;return scheduler.config.limit_view&&(d.valueOf()>scheduler.config.limit_end.valueOf()||this.date.add(d,1,c)<=scheduler.config.limit_start.valueOf())?(setTimeout(function(){scheduler.setCurrentView(scheduler._date,c)},1),!1):!0});scheduler.checkInMarkedTimespan=function(b,a,c){for(var a=a||v,d=!0,e=new Date(b.start_date.valueOf()),g=scheduler.date.add(e,1,"day"),h=scheduler._marked_timespans;e<b.end_date;e=scheduler.date.date_part(g),g=scheduler.date.add(e,1,"day")){var f=
-+scheduler.date.date_part(new Date(e)),i=e.getDay(),l=A(b,h,i,f,a);if(l)for(var m=0;m<l.length;m+=2){var n=scheduler._get_zone_minutes(e),k=b.end_date>g||b.end_date.getDate()!=e.getDate()?1440:scheduler._get_zone_minutes(b.end_date),o=l[m],j=l[m+1];if(o<k&&j>n&&(d=c=="function"?c(b,n,k,o,j):!1,!d))break}}return!d};var s=scheduler.checkLimitViolation=function(b){if(!b)return!0;if(!scheduler.config.check_limits)return!0;for(var a=scheduler,c=a.config,d=[],d=b.rec_type?scheduler.getRecDates(b):[b],e=
-!0,g=0;g<d.length;g++){var h=!0,f=d[g];f._timed=scheduler.isOneDayEvent(f);(h=c.limit_start&&c.limit_end?f.start_date.valueOf()>=c.limit_start.valueOf()&&f.end_date.valueOf()<=c.limit_end.valueOf():!0)&&(h=!scheduler.checkInMarkedTimespan(f,t,function(b,c,d,e,f){var g=!0;if(c<=f&&c>=e){if(f==1440||d<f)g=!1;b._timed&&a._drag_id&&a._drag_mode=="new-size"?(b.start_date.setHours(0),b.start_date.setMinutes(f)):g=!1}if(d>=e&&d<f||c<e&&d>f)b._timed&&a._drag_id&&a._drag_mode=="new-size"?(b.end_date.setHours(0),
-b.end_date.setMinutes(e)):g=!1;return g}));if(!h)a._drag_id=null,a._drag_mode=null,h=a.checkEvent("onLimitViolation")?a.callEvent("onLimitViolation",[f.id,f]):h;e=e&&h}return e};scheduler.attachEvent("onMouseDown",function(b){return!(b=t)});scheduler.attachEvent("onBeforeDrag",function(b){return!b?!0:s(scheduler.getEvent(b))});scheduler.attachEvent("onClick",function(b){return s(scheduler.getEvent(b))});scheduler.attachEvent("onBeforeLightbox",function(b){var a=scheduler.getEvent(b);u=[a.start_date,
-a.end_date];return s(a)});scheduler.attachEvent("onEventSave",function(b,a){if(!a.start_date||!a.end_date){var c=scheduler.getEvent(b);a.start_date=new Date(c.start_date);a.end_date=new Date(c.end_date)}if(a.rec_type){var d=scheduler._lame_clone(a);scheduler._roll_back_dates(d);return s(d)}return s(a)});scheduler.attachEvent("onEventAdded",function(b){if(!b)return!0;var a=scheduler.getEvent(b);if(!s(a)&&scheduler.config.limit_start&&scheduler.config.limit_end){if(a.start_date<scheduler.config.limit_start)a.start_date=
-new Date(scheduler.config.limit_start);if(a.start_date.valueOf()>=scheduler.config.limit_end.valueOf())a.start_date=this.date.add(scheduler.config.limit_end,-1,"day");if(a.end_date<scheduler.config.limit_start)a.end_date=new Date(scheduler.config.limit_start);if(a.end_date.valueOf()>=scheduler.config.limit_end.valueOf())a.end_date=this.date.add(scheduler.config.limit_end,-1,"day");if(a.start_date.valueOf()>=a.end_date.valueOf())a.end_date=this.date.add(a.start_date,this.config.event_duration||this.config.time_step,
-"minute");a._timed=this.isOneDayEvent(a)}return!0});scheduler.attachEvent("onEventChanged",function(b){if(!b)return!0;var a=scheduler.getEvent(b);if(!s(a)){if(!u)return!1;a.start_date=u[0];a.end_date=u[1];a._timed=this.isOneDayEvent(a)}return!0});scheduler.attachEvent("onBeforeEventChanged",function(b){return s(b)});scheduler.attachEvent("onBeforeEventCreated",function(b){var a=scheduler.getActionData(b).date,c={_timed:!0,start_date:a,end_date:scheduler.date.add(a,scheduler.config.time_step,"minute")};
-return s(c)});scheduler.attachEvent("onViewChange",function(){scheduler._mark_now()});scheduler.attachEvent("onSchedulerResize",function(){window.setTimeout(function(){scheduler._mark_now()},1);return!0});scheduler.attachEvent("onTemplatesReady",function(){scheduler._mark_now_timer=window.setInterval(function(){scheduler._mark_now()},6E4)});scheduler._mark_now=function(b){var a="dhx_now_time";this._els[a]||(this._els[a]=[]);var c=scheduler._currentDate(),d=this.config;scheduler._remove_mark_now();
-if(!b&&d.mark_now&&c<this._max_date&&c>this._min_date&&c.getHours()>=d.first_hour&&c.getHours()<d.last_hour){var e=this.locate_holder_day(c);this._els[a]=scheduler._append_mark_now(e,c)}};scheduler._append_mark_now=function(b,a){var c="dhx_now_time",d=scheduler._get_zone_minutes(a),e={zones:[d,d+1],css:c,type:c};if(this._table_view){if(this._mode=="month")return e.days=+scheduler.date.date_part(a),scheduler._render_marked_timespan(e,null,null)}else if(this._props&&this._props[this._mode]){for(var g=
-this._els.dhx_cal_data[0].childNodes,h=[],f=0;f<g.length-1;f++){var i=b+f;e.days=i;var l=scheduler._render_marked_timespan(e,null,i)[0];h.push(l)}return h}else return e.days=b,scheduler._render_marked_timespan(e,null,b)};scheduler._remove_mark_now=function(){for(var b="dhx_now_time",a=this._els[b],c=0;c<a.length;c++){var d=a[c],e=d.parentNode;e&&e.removeChild(d)}this._els[b]=[]};scheduler._marked_timespans={global:{}};scheduler._get_zone_minutes=function(b){return b.getHours()*60+b.getMinutes()};
-scheduler._prepare_timespan_options=function(b){var a=[],c=[];if(b.days=="fullweek")b.days=[0,1,2,3,4,5,6];if(b.days instanceof Array){for(var d=b.days.slice(),e=0;e<d.length;e++){var g=scheduler._lame_clone(b);g.days=d[e];a.push.apply(a,scheduler._prepare_timespan_options(g))}return a}if(!b||!(b.start_date&&b.end_date&&b.end_date>b.start_date||b.days!==void 0&&b.zones))return a;var h=0,f=1440;if(b.zones=="fullday")b.zones=[h,f];if(b.zones&&b.invert_zones)b.zones=scheduler.invertZones(b.zones);b.id=
-scheduler.uid();b.css=b.css||"";b.type=b.type||v;var i=b.sections;if(i)for(var l in i){if(i.hasOwnProperty(l)){var m=i[l];m instanceof Array||(m=[m]);for(e=0;e<m.length;e++){var n=scheduler._lame_copy({},b);n.sections={};n.sections[l]=m[e];c.push(n)}}}else c.push(b);for(var k=0;k<c.length;k++){var o=c[k],j=o.start_date,p=o.end_date;if(j&&p)for(var q=scheduler.date.date_part(new Date(j)),w=scheduler.date.add(q,1,"day");q<p;){n=scheduler._lame_copy({},o);delete n.start_date;delete n.end_date;n.days=
-q.valueOf();var r=j>q?scheduler._get_zone_minutes(j):h,s=p>w||p.getDate()!=q.getDate()?f:scheduler._get_zone_minutes(p);n.zones=[r,s];a.push(n);q=w;w=scheduler.date.add(w,1,"day")}else{if(o.days instanceof Date)o.days=scheduler.date.date_part(o.days).valueOf();o.zones=b.zones.slice();a.push(o)}}return a};scheduler._get_dates_by_index=function(b,a,c){for(var d=[],a=scheduler.date.date_part(new Date(a||scheduler._min_date)),c=new Date(c||scheduler._max_date),e=a.getDay(),g=b-e>=0?b-e:7-a.getDay()+b,
-h=scheduler.date.add(a,g,"day");h<c;h=scheduler.date.add(h,1,"week"))d.push(h);return d};scheduler._get_css_classes_by_config=function(b){var a=[];b.type==t&&(a.push(t),b.css&&a.push(t+"_reset"));a.push("dhx_marked_timespan",b.css);return a.join(" ")};scheduler._get_block_by_config=function(b){var a=document.createElement("DIV");if(b.html)typeof b.html=="string"?a.innerHTML=b.html:a.appendChild(b.html);return a};scheduler._render_marked_timespan=function(b,a,c){var d=[],e=scheduler.config,g=this._min_date,
-h=this._max_date,f=!1;if(!e.display_marked_timespans)return d;if(!c&&c!==0){if(b.days<7)c=b.days;else{var i=new Date(b.days),f=+i;if(!(+h>=+i&&+g<=+i))return d;c=i.getDay()}var l=g.getDay();l>c?c=7-(l-c):c-=l}var m=b.zones,n=scheduler._get_css_classes_by_config(b);if(scheduler._table_view&&scheduler._mode=="month"){var k=[],o=[];if(a)k.push(a),o.push(c);else for(var o=f?[f]:scheduler._get_dates_by_index(c),j=0;j<o.length;j++)k.push(this._scales[o[j]]);for(j=0;j<k.length;j++)for(var a=k[j],c=o[j],
-p=0;p<m.length;p+=2){var q=m[j],s=m[j+1];if(s<=q)return[];var r=scheduler._get_block_by_config(b);r.className=n;var t=a.offsetHeight-1,u=a.offsetWidth-1,v=Math.floor((this._correct_shift(c,1)-g.valueOf())/(864E5*this._cols.length)),x=this.locate_holder_day(c,!1)%this._cols.length,A=this._colsS[x],B=this._colsS.heights[v]+(this._colsS.height?this.xy.month_scale_height+2:2)-1;r.style.top=B+"px";r.style.lineHeight=r.style.height=t+"px";r.style.left=A+Math.round(q/1440*u)+"px";r.style.width=Math.round((s-
-q)/1440*u)+"px";a.appendChild(r);d.push(r)}}else{var y=c;if(this._props&&this._props[this._mode]&&b.sections&&b.sections[this._mode]){var z=this._props[this._mode],y=z.order[b.sections[this._mode]];z.size&&y>z.position+z.size&&(y=0)}a=a?a:scheduler.locate_holder(y);for(j=0;j<m.length;j+=2){q=Math.max(m[j],e.first_hour*60);s=Math.min(m[j+1],e.last_hour*60);if(s<=q)if(j+2<m.length)continue;else return[];r=scheduler._get_block_by_config(b);r.className=n;var D=this.config.hour_size_px*24+1,C=36E5;r.style.top=
-Math.round((q*6E4-this.config.first_hour*C)*this.config.hour_size_px/C)%D+"px";r.style.lineHeight=r.style.height=Math.max(Math.round((s-q)*6E4*this.config.hour_size_px/C)%D,1)+"px";a.appendChild(r);d.push(r)}}return d};scheduler.markTimespan=function(b){var a=scheduler._prepare_timespan_options(b);if(a.length){for(var c=[],d=0;d<a.length;d++){var e=a[d],g=scheduler._render_marked_timespan(e,null,null);g.length&&c.push.apply(c,g)}return c}};scheduler.unmarkTimespan=function(b){if(b)for(var a=0;a<b.length;a++){var c=
-b[a];c.parentNode&&c.parentNode.removeChild(c)}};scheduler._marked_timespans_ids={};scheduler.addMarkedTimespan=function(b){var a=scheduler._prepare_timespan_options(b),c="global";if(a.length){var d=a[0].id,e=scheduler._marked_timespans,g=scheduler._marked_timespans_ids;g[d]||(g[d]=[]);for(var h=0;h<a.length;h++){var f=a[h],i=f.days,l=f.zones,m=f.css,n=f.sections,k=f.type;f.id=d;if(n)for(var o in n){if(n.hasOwnProperty(o)){e[o]||(e[o]={});var j=n[o],p=e[o];p[j]||(p[j]={});p[j][i]||(p[j][i]={});if(!p[j][i][k]){p[j][i][k]=
-[];if(!scheduler._marked_timespans_types)scheduler._marked_timespans_types={};scheduler._marked_timespans_types[k]||(scheduler._marked_timespans_types[k]=!0)}var q=p[j][i][k];f._array=q;q.push(f);g[d].push(f)}}else{e[c][i]||(e[c][i]={});e[c][i][k]||(e[c][i][k]=[]);if(!scheduler._marked_timespans_types)scheduler._marked_timespans_types={};scheduler._marked_timespans_types[k]||(scheduler._marked_timespans_types[k]=!0);q=e[c][i][k];f._array=q;q.push(f);g[d].push(f)}}return d}};scheduler._add_timespan_zones=
-function(b,a){var c=b.slice(),a=a.slice();if(!c.length)return a;for(var d=0;d<c.length;d+=2)for(var e=c[d],g=c[d+1],h=d+2==c.length,f=0;f<a.length;f+=2){var i=a[f],l=a[f+1];if(l>g&&i<=g||i<e&&l>=e)c[d]=Math.min(e,i),c[d+1]=Math.max(g,l),d-=2;else{if(!h)continue;var m=e>i?0:2;c.splice(d+m,0,i,l)}a.splice(f--,2);break}return c};scheduler._subtract_timespan_zones=function(b,a){for(var c=b.slice(),d=0;d<c.length;d+=2)for(var e=c[d],g=c[d+1],h=0;h<a.length;h+=2){var f=a[h],i=a[h+1];if(i>e&&f<g){var l=
-!1;e>=f&&g<=i&&c.splice(d,2);e<f&&(c.splice(d,2,e,f),l=!0);g>i&&c.splice(l?d+2:d,l?0:2,i,g);d-=2;break}}return c};scheduler.invertZones=function(b){return scheduler._subtract_timespan_zones([0,1440],b.slice())};scheduler._delete_marked_timespan_by_id=function(b){var a=scheduler._marked_timespans_ids[b];if(a)for(var c=0;c<a.length;c++)for(var d=a[c],e=d._array,g=0;g<e.length;g++)if(e[g]==d){e.splice(g,1);break}};scheduler._delete_marked_timespan_by_config=function(b){var a=scheduler._marked_timespans,
-c=b.sections,d=b.days,e=b.type||v,g=[];if(c)for(var h in c){if(c.hasOwnProperty(h)&&a[h]){var f=c[h];a[h][f]&&a[h][f][d]&&a[h][f][d][e]&&(g=a[h][f][d][e])}}else a.global[d]&&a.global[d][e]&&(g=a.global[d][e]);for(var i=0;i<g.length;i++){var l=g[i],m=scheduler._subtract_timespan_zones(l.zones,b.zones);if(m.length)l.zones=m;else{g.splice(i,1);i--;for(var n=scheduler._marked_timespans_ids[l.id],k=0;k<n.length;k++)if(n[k]==l){n.splice(k,1);break}}}};scheduler.deleteMarkedTimespan=function(b){if(!arguments.length)scheduler._marked_timespans=
-{global:{}},scheduler._marked_timespans_ids={},scheduler._marked_timespans_types={};if(typeof b!="object")scheduler._delete_marked_timespan_by_id(b);else{if(!b.start_date||!b.end_date){if(!b.days)b.days="fullweek";if(!b.zones)b.zones="fullday"}var a=[];if(b.type)a.push(b.type);else for(var c in scheduler._marked_timespans_types)a.push(c);for(var d=scheduler._prepare_timespan_options(b),e=0;e<d.length;e++)for(var g=d[e],h=0;h<a.length;h++){var f=scheduler._lame_clone(g);f.type=a[h];scheduler._delete_marked_timespan_by_config(f)}}};
-scheduler._get_types_to_render=function(b,a){var c=b?b:{},d;for(d in a||{})a.hasOwnProperty(d)&&(c[d]=a[d]);return c};scheduler._get_configs_to_render=function(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push.apply(a,b[c]);return a};scheduler.attachEvent("onScaleAdd",function(b,a){if(!(scheduler._table_view&&scheduler._mode!="month")){var c=a.getDay(),d=a.valueOf(),e=this._mode,g=scheduler._marked_timespans,h=[];if(this._props&&this._props[e]){var f=this._props[e],i=f.options,l=scheduler._get_unit_index(f,
-a),m=i[l],a=scheduler.date.date_part(new Date(this._date)),c=a.getDay(),d=a.valueOf();if(g[e]&&g[e][m.key]){var n=g[e][m.key],k=scheduler._get_types_to_render(n[c],n[d]);h.push.apply(h,scheduler._get_configs_to_render(k))}}var o=g.global,j=o[d]||o[c];h.push.apply(h,scheduler._get_configs_to_render(j));for(var p=0;p<h.length;p++)scheduler._render_marked_timespan(h[p],b,a)}})})();
+scheduler.config.limit_start=null,scheduler.config.limit_end=null,scheduler.config.limit_view=!1,scheduler.config.check_limits=!0,scheduler.config.mark_now=!0,scheduler.config.display_marked_timespans=!0,scheduler._temp_limit_scope=function(){function e(e,t,s,r,i){var a=scheduler,n=[],d={_props:"map_to",matrix:"y_property"};for(var l in d){var o=d[l];if(a[l])for(var h in a[l]){var _=a[l][h],c=_[o];e[c]&&(n=a._add_timespan_zones(n,scheduler._get_blocked_zones(t[h],e[c],s,r,i)))}}return n=a._add_timespan_zones(n,scheduler._get_blocked_zones(t,"global",s,r,i))
+}var t=null,s="dhx_time_block",r="default",i=function(e,t,s){return t instanceof Date&&s instanceof Date?(e.start_date=t,e.end_date=s):(e.days=t,e.zones=s),e},a=function(e,t,r){var a="object"==typeof e?e:{days:e};return a.type=s,a.css="",t&&(r&&(a.sections=r),a=i(a,e,t)),a};scheduler.blockTime=function(e,t,s){var r=a(e,t,s);return scheduler.addMarkedTimespan(r)},scheduler.unblockTime=function(e,t,s){t=t||"fullday";var r=a(e,t,s);return scheduler.deleteMarkedTimespan(r)},scheduler.attachEvent("onBeforeViewChange",function(e,t,s,r){return scheduler.config.limit_view&&(r=r||t,s=s||e,r.valueOf()>scheduler.config.limit_end.valueOf()||this.date.add(r,1,s)<=scheduler.config.limit_start.valueOf())?(setTimeout(function(){scheduler.setCurrentView(t||scheduler.config.limit_start,s)
+},1),!1):!0}),scheduler.checkInMarkedTimespan=function(t,s,i){s=s||r;for(var a=!0,n=new Date(t.start_date.valueOf()),d=scheduler.date.add(n,1,"day"),l=scheduler._marked_timespans;n<t.end_date;n=scheduler.date.date_part(d),d=scheduler.date.add(n,1,"day")){var o=+scheduler.date.date_part(new Date(n)),h=n.getDay(),_=e(t,l,h,o,s);if(_)for(var c=0;c<_.length;c+=2){var u=scheduler._get_zone_minutes(n),f=t.end_date>d||t.end_date.getDate()!=n.getDate()?1440:scheduler._get_zone_minutes(t.end_date),v=_[c],g=_[c+1];
+if(f>v&&g>u&&(a="function"==typeof i?i(t,u,f,v,g):!1,!a))break}}return!a};var n=scheduler.checkLimitViolation=function(e){if(!e)return!0;if(!scheduler.config.check_limits)return!0;var t=scheduler,r=t.config,i=[];if(e.rec_type)for(var a=scheduler.getRecDates(e),n=0;n<a.length;n++){var d=scheduler._copy_event(e);scheduler._lame_copy(d,a[n]),i.push(d)}else i=[e];for(var l=!0,o=0;o<i.length;o++){var h=!0,d=i[o];d._timed=scheduler.isOneDayEvent(d),h=r.limit_start&&r.limit_end?d.start_date.valueOf()>=r.limit_start.valueOf()&&d.end_date.valueOf()<=r.limit_end.valueOf():!0,h&&(h=!scheduler.checkInMarkedTimespan(d,s,function(e,s,r,i,a){var n=!0;
+return a>=s&&s>=i&&((1440==a||a>r)&&(n=!1),e._timed&&t._drag_id&&"new-size"==t._drag_mode?(e.start_date.setHours(0),e.start_date.setMinutes(a)):n=!1),(r>=i&&a>r||i>s&&r>a)&&(e._timed&&t._drag_id&&"new-size"==t._drag_mode?(e.end_date.setHours(0),e.end_date.setMinutes(i)):n=!1),n})),h||(h=t.checkEvent("onLimitViolation")?t.callEvent("onLimitViolation",[d.id,d]):h),l=l&&h}return l||(t._drag_id=null,t._drag_mode=null),l};scheduler._get_blocked_zones=function(e,t,s,r,i){var a=[];if(e&&e[t])for(var n=e[t],d=this._get_relevant_blocked_zones(s,r,n,i),l=0;l<d.length;l++)a=this._add_timespan_zones(a,d[l].zones);
+return a},scheduler._get_relevant_blocked_zones=function(e,t,s,r){var i=s[t]&&s[t][r]?s[t][r]:s[e]&&s[e][r]?s[e][r]:[];return i},scheduler.attachEvent("onMouseDown",function(e){return!(e==s)}),scheduler.attachEvent("onBeforeDrag",function(e){return e?n(scheduler.getEvent(e)):!0}),scheduler.attachEvent("onClick",function(e){return n(scheduler.getEvent(e))}),scheduler.attachEvent("onBeforeLightbox",function(e){var s=scheduler.getEvent(e);return t=[s.start_date,s.end_date],n(s)}),scheduler.attachEvent("onEventSave",function(e,t){if(!t.start_date||!t.end_date){var s=scheduler.getEvent(e);
+t.start_date=new Date(s.start_date),t.end_date=new Date(s.end_date)}if(t.rec_type){var r=scheduler._lame_clone(t);return scheduler._roll_back_dates(r),n(r)}return n(t)}),scheduler.attachEvent("onEventAdded",function(e){if(!e)return!0;var t=scheduler.getEvent(e);return!n(t)&&scheduler.config.limit_start&&scheduler.config.limit_end&&(t.start_date<scheduler.config.limit_start&&(t.start_date=new Date(scheduler.config.limit_start)),t.start_date.valueOf()>=scheduler.config.limit_end.valueOf()&&(t.start_date=this.date.add(scheduler.config.limit_end,-1,"day")),t.end_date<scheduler.config.limit_start&&(t.end_date=new Date(scheduler.config.limit_start)),t.end_date.valueOf()>=scheduler.config.limit_end.valueOf()&&(t.end_date=this.date.add(scheduler.config.limit_end,-1,"day")),t.start_date.valueOf()>=t.end_date.valueOf()&&(t.end_date=this.date.add(t.start_date,this.config.event_duration||this.config.time_step,"minute")),t._timed=this.isOneDayEvent(t)),!0
+}),scheduler.attachEvent("onEventChanged",function(e){if(!e)return!0;var s=scheduler.getEvent(e);if(!n(s)){if(!t)return!1;s.start_date=t[0],s.end_date=t[1],s._timed=this.isOneDayEvent(s)}return!0}),scheduler.attachEvent("onBeforeEventChanged",function(e){return n(e)}),scheduler.attachEvent("onBeforeEventCreated",function(e){var t=scheduler.getActionData(e).date,s={_timed:!0,start_date:t,end_date:scheduler.date.add(t,scheduler.config.time_step,"minute")};return n(s)}),scheduler.attachEvent("onViewChange",function(){scheduler._mark_now()
+}),scheduler.attachEvent("onSchedulerResize",function(){return window.setTimeout(function(){scheduler._mark_now()},1),!0}),scheduler.attachEvent("onTemplatesReady",function(){scheduler._mark_now_timer=window.setInterval(function(){scheduler._is_initialized()&&scheduler._mark_now()},6e4)}),scheduler._mark_now=function(e){var t="dhx_now_time";this._els[t]||(this._els[t]=[]);var s=scheduler._currentDate(),r=this.config;if(scheduler._remove_mark_now(),!e&&r.mark_now&&s<this._max_date&&s>this._min_date&&s.getHours()>=r.first_hour&&s.getHours()<r.last_hour){var i=this.locate_holder_day(s);
+this._els[t]=scheduler._append_mark_now(i,s)}},scheduler._append_mark_now=function(e,t){var s="dhx_now_time",r=scheduler._get_zone_minutes(t),i={zones:[r,r+1],css:s,type:s};if(!this._table_view){if(this._props&&this._props[this._mode]){for(var a=this._els.dhx_cal_data[0].childNodes,n=[],d=0;d<a.length-1;d++){var l=e+d;i.days=l;var o=scheduler._render_marked_timespan(i,null,l)[0];n.push(o)}return n}return i.days=e,scheduler._render_marked_timespan(i,null,e)}return"month"==this._mode?(i.days=+scheduler.date.date_part(t),scheduler._render_marked_timespan(i,null,null)):void 0
+},scheduler._remove_mark_now=function(){for(var e="dhx_now_time",t=this._els[e],s=0;s<t.length;s++){var r=t[s],i=r.parentNode;i&&i.removeChild(r)}this._els[e]=[]},scheduler._marked_timespans={global:{}},scheduler._get_zone_minutes=function(e){return 60*e.getHours()+e.getMinutes()},scheduler._prepare_timespan_options=function(e){var t=[],s=[];if("fullweek"==e.days&&(e.days=[0,1,2,3,4,5,6]),e.days instanceof Array){for(var i=e.days.slice(),a=0;a<i.length;a++){var n=scheduler._lame_clone(e);n.days=i[a],t.push.apply(t,scheduler._prepare_timespan_options(n))
+}return t}if(!e||!(e.start_date&&e.end_date&&e.end_date>e.start_date||void 0!==e.days&&e.zones))return t;var d=0,l=1440;"fullday"==e.zones&&(e.zones=[d,l]),e.zones&&e.invert_zones&&(e.zones=scheduler.invertZones(e.zones)),e.id=scheduler.uid(),e.css=e.css||"",e.type=e.type||r;var o=e.sections;if(o){for(var h in o)if(o.hasOwnProperty(h)){var _=o[h];_ instanceof Array||(_=[_]);for(var a=0;a<_.length;a++){var c=scheduler._lame_copy({},e);c.sections={},c.sections[h]=_[a],s.push(c)}}}else s.push(e);for(var u=0;u<s.length;u++){var f=s[u],v=f.start_date,g=f.end_date;
+if(v&&g)for(var m=scheduler.date.date_part(new Date(v)),p=scheduler.date.add(m,1,"day");g>m;){var c=scheduler._lame_copy({},f);delete c.start_date,delete c.end_date,c.days=m.valueOf();var x=v>m?scheduler._get_zone_minutes(v):d,y=g>p||g.getDate()!=m.getDate()?l:scheduler._get_zone_minutes(g);c.zones=[x,y],t.push(c),m=p,p=scheduler.date.add(p,1,"day")}else f.days instanceof Date&&(f.days=scheduler.date.date_part(f.days).valueOf()),f.zones=e.zones.slice(),t.push(f)}return t},scheduler._get_dates_by_index=function(e,t,s){var r=[];
+t=scheduler.date.date_part(new Date(t||scheduler._min_date)),s=new Date(s||scheduler._max_date);for(var i=t.getDay(),a=e-i>=0?e-i:7-t.getDay()+e,n=scheduler.date.add(t,a,"day");s>n;n=scheduler.date.add(n,1,"week"))r.push(n);return r},scheduler._get_css_classes_by_config=function(e){var t=[];return e.type==s&&(t.push(s),e.css&&t.push(s+"_reset")),t.push("dhx_marked_timespan",e.css),t.join(" ")},scheduler._get_block_by_config=function(e){var t=document.createElement("DIV");return e.html&&("string"==typeof e.html?t.innerHTML=e.html:t.appendChild(e.html)),t
+},scheduler._render_marked_timespan=function(e,t,s){var r=[],i=scheduler.config,a=this._min_date,n=this._max_date,d=!1;if(!i.display_marked_timespans)return r;if(!s&&0!==s){if(e.days<7)s=e.days;else{var l=new Date(e.days);if(d=+l,!(+n>+l&&+l>=+a))return r;s=l.getDay()}var o=a.getDay();o>s?s=7-(o-s):s-=o}var h=e.zones,_=scheduler._get_css_classes_by_config(e);if(scheduler._table_view&&"month"==scheduler._mode){var c=[],u=[];if(t)c.push(t),u.push(s);else{u=d?[d]:scheduler._get_dates_by_index(s);for(var f=0;f<u.length;f++)c.push(this._scales[u[f]])
+}for(var f=0;f<c.length;f++){t=c[f],s=u[f];var v=Math.floor((this._correct_shift(s,1)-a.valueOf())/(864e5*this._cols.length)),g=this.locate_holder_day(s,!1)%this._cols.length;if(!this._ignores[g]){var m=scheduler._get_block_by_config(e),p=Math.max(t.offsetHeight-1,0),x=Math.max(t.offsetWidth-1,0),y=this._colsS[g],b=this._colsS.heights[v]+(this._colsS.height?this.xy.month_scale_height+2:2)-1;m.className=_,m.style.top=b+"px",m.style.lineHeight=m.style.height=p+"px";for(var w=0;w<h.length;w+=2){var E=h[f],D=h[f+1];
+if(E>=D)return[];var k=m.cloneNode(!0);k.style.left=y+Math.round(E/1440*x)+"px",k.style.width=Math.round((D-E)/1440*x)+"px",t.appendChild(k),r.push(k)}}}}else{var M=s;if(this._ignores[this.locate_holder_day(s,!1)])return r;if(this._props&&this._props[this._mode]&&e.sections&&e.sections[this._mode]){var N=this._props[this._mode];M=N.order[e.sections[this._mode]],N.size&&M>N.position+N.size&&(M=0)}t=t?t:scheduler.locate_holder(M);for(var f=0;f<h.length;f+=2){var E=Math.max(h[f],60*i.first_hour),D=Math.min(h[f+1],60*i.last_hour);
+if(E>=D){if(f+2<h.length)continue;return[]}var k=scheduler._get_block_by_config(e);k.className=_;var O=24*this.config.hour_size_px+1,L=36e5;k.style.top=Math.round((60*E*1e3-this.config.first_hour*L)*this.config.hour_size_px/L)%O+"px",k.style.lineHeight=k.style.height=Math.max(Math.round(60*(D-E)*1e3*this.config.hour_size_px/L)%O,1)+"px",t.appendChild(k),r.push(k)}}return r},scheduler.markTimespan=function(e){var t=scheduler._prepare_timespan_options(e);if(t.length){for(var s=[],r=0;r<t.length;r++){var i=t[r],a=scheduler._render_marked_timespan(i,null,null);
+a.length&&s.push.apply(s,a)}return s}},scheduler.unmarkTimespan=function(e){if(e)for(var t=0;t<e.length;t++){var s=e[t];s.parentNode&&s.parentNode.removeChild(s)}},scheduler._marked_timespans_ids={},scheduler.addMarkedTimespan=function(e){var t=scheduler._prepare_timespan_options(e),s="global";if(t.length){var r=t[0].id,i=scheduler._marked_timespans,a=scheduler._marked_timespans_ids;a[r]||(a[r]=[]);for(var n=0;n<t.length;n++){var d=t[n],l=d.days,o=(d.zones,d.css,d.sections),h=d.type;if(d.id=r,o){for(var _ in o)if(o.hasOwnProperty(_)){i[_]||(i[_]={});
+var c=o[_],u=i[_];u[c]||(u[c]={}),u[c][l]||(u[c][l]={}),u[c][l][h]||(u[c][l][h]=[],scheduler._marked_timespans_types||(scheduler._marked_timespans_types={}),scheduler._marked_timespans_types[h]||(scheduler._marked_timespans_types[h]=!0));var f=u[c][l][h];d._array=f,f.push(d),a[r].push(d)}}else{i[s][l]||(i[s][l]={}),i[s][l][h]||(i[s][l][h]=[]),scheduler._marked_timespans_types||(scheduler._marked_timespans_types={}),scheduler._marked_timespans_types[h]||(scheduler._marked_timespans_types[h]=!0);var f=i[s][l][h];
+d._array=f,f.push(d),a[r].push(d)}}return r}},scheduler._add_timespan_zones=function(e,t){var s=e.slice();if(t=t.slice(),!s.length)return t;for(var r=0;r<s.length;r+=2)for(var i=s[r],a=s[r+1],n=r+2==s.length,d=0;d<t.length;d+=2){var l=t[d],o=t[d+1];if(o>a&&a>=l||i>l&&o>=i)s[r]=Math.min(i,l),s[r+1]=Math.max(a,o),r-=2;else{if(!n)continue;var h=i>l?0:2;s.splice(r+h,0,l,o)}t.splice(d--,2);break}return s},scheduler._subtract_timespan_zones=function(e,t){for(var s=e.slice(),r=0;r<s.length;r+=2)for(var i=s[r],a=s[r+1],n=0;n<t.length;n+=2){var d=t[n],l=t[n+1];
+if(l>i&&a>d){var o=!1;i>=d&&l>=a&&s.splice(r,2),d>i&&(s.splice(r,2,i,d),o=!0),a>l&&s.splice(o?r+2:r,o?0:2,l,a),r-=2;break}}return s},scheduler.invertZones=function(e){return scheduler._subtract_timespan_zones([0,1440],e.slice())},scheduler._delete_marked_timespan_by_id=function(e){var t=scheduler._marked_timespans_ids[e];if(t)for(var s=0;s<t.length;s++)for(var r=t[s],i=r._array,a=0;a<i.length;a++)if(i[a]==r){i.splice(a,1);break}},scheduler._delete_marked_timespan_by_config=function(e){var t=scheduler._marked_timespans,s=e.sections,i=e.days,a=e.type||r,n=[];
+if(s){for(var d in s)if(s.hasOwnProperty(d)&&t[d]){var l=s[d];t[d][l]&&t[d][l][i]&&t[d][l][i][a]&&(n=t[d][l][i][a])}}else t.global[i]&&t.global[i][a]&&(n=t.global[i][a]);for(var o=0;o<n.length;o++){var h=n[o],_=scheduler._subtract_timespan_zones(h.zones,e.zones);if(_.length)h.zones=_;else{n.splice(o,1),o--;for(var c=scheduler._marked_timespans_ids[h.id],u=0;u<c.length;u++)if(c[u]==h){c.splice(u,1);break}}}},scheduler.deleteMarkedTimespan=function(e){if(arguments.length||(scheduler._marked_timespans={global:{}},scheduler._marked_timespans_ids={},scheduler._marked_timespans_types={}),"object"!=typeof e)scheduler._delete_marked_timespan_by_id(e);
+else{e.start_date&&e.end_date||(e.days||(e.days="fullweek"),e.zones||(e.zones="fullday"));var t=[];if(e.type)t.push(e.type);else for(var s in scheduler._marked_timespans_types)t.push(s);for(var r=scheduler._prepare_timespan_options(e),i=0;i<r.length;i++)for(var a=r[i],n=0;n<t.length;n++){var d=scheduler._lame_clone(a);d.type=t[n],scheduler._delete_marked_timespan_by_config(d)}}},scheduler._get_types_to_render=function(e,t){var s=e?scheduler._lame_copy({},e):{};for(var r in t||{})t.hasOwnProperty(r)&&(s[r]=t[r]);
+return s},scheduler._get_configs_to_render=function(e){var t=[];for(var s in e)e.hasOwnProperty(s)&&t.push.apply(t,e[s]);return t},scheduler.attachEvent("onScaleAdd",function(e,t){if(!scheduler._table_view||"month"==scheduler._mode){var s=t.getDay(),r=t.valueOf(),i=this._mode,a=scheduler._marked_timespans,n=[];if(this._props&&this._props[i]){var d=this._props[i],l=d.options,o=scheduler._get_unit_index(d,t),h=l[o];if(t=scheduler.date.date_part(new Date(this._date)),s=t.getDay(),r=t.valueOf(),a[i]&&a[i][h.key]){var _=a[i][h.key],c=scheduler._get_types_to_render(_[s],_[r]);
+n.push.apply(n,scheduler._get_configs_to_render(c))}}var u=a.global,f=u[r]||u[s];n.push.apply(n,scheduler._get_configs_to_render(f));for(var v=0;v<n.length;v++)scheduler._render_marked_timespan(n[v],e,t)}}),scheduler.dblclick_dhx_marked_timespan=function(e,t){scheduler.config.dblclick_create||scheduler.callEvent("onScaleDblClick",[scheduler.getActionData(e).date,t,e]),scheduler.addEventNow(scheduler.getActionData(e).date,null,e)}},scheduler._temp_limit_scope();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_limit.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_map_view.js b/codebase/ext/dhtmlxscheduler_map_view.js
index 29252fb..149ee26 100644
--- a/codebase/ext/dhtmlxscheduler_map_view.js
+++ b/codebase/ext/dhtmlxscheduler_map_view.js
@@ -1,29 +1,28 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.xy.map_date_width=188;scheduler.xy.map_description_width=400;scheduler.config.map_resolve_event_location=!0;scheduler.config.map_resolve_user_location=!0;scheduler.config.map_initial_position=new google.maps.LatLng(48.724,8.215);scheduler.config.map_error_position=new google.maps.LatLng(15,15);scheduler.config.map_infowindow_max_width=300;scheduler.config.map_type=google.maps.MapTypeId.ROADMAP;scheduler.config.map_zoom_after_resolve=15;scheduler.locale.labels.marker_geo_success="It seems you are here.";
-scheduler.locale.labels.marker_geo_fail="Sorry, could not get your current position using geolocation.";scheduler.templates.marker_date=scheduler.date.date_to_str("%Y-%m-%d %H:%i");scheduler.templates.marker_text=function(g,i,f){return"<div><b>"+f.text+"</b><br/><br/>"+(f.event_location||"")+"<br/><br/>"+scheduler.templates.marker_date(g)+" - "+scheduler.templates.marker_date(i)+"</div>"};
-scheduler.dblclick_dhx_map_area=function(){!this.config.readonly&&this.config.dblclick_create&&this.addEventNow({start_date:scheduler._date,end_date:scheduler.date.add(scheduler._date,scheduler.config.time_step,"minute")})};scheduler.templates.map_time=function(g,i,f){return f._timed?this.day_date(f.start_date,f.end_date,f)+" "+this.event_date(g):scheduler.templates.day_date(g)+" &ndash; "+scheduler.templates.day_date(i)};scheduler.templates.map_text=function(g,i,f){return f.text};
-scheduler.date.map_start=function(g){return g};scheduler.date.add_map=function(g){return new Date(g.valueOf())};scheduler.templates.map_date=function(){return""};scheduler._latLngUpdate=!1;
-scheduler.attachEvent("onSchedulerReady",function(){function g(a){if(a){var b=scheduler.locale.labels;scheduler._els.dhx_cal_header[0].innerHTML="<div class='dhx_map_line' style='width: "+(scheduler.xy.map_date_width+scheduler.xy.map_description_width+2)+"px;' ><div class='headline_date' style='width: "+scheduler.xy.map_date_width+"px;'>"+b.date+"</div><div class='headline_description' style='width: "+scheduler.xy.map_description_width+"px;'>"+b.description+"</div></div>";scheduler._table_view=!0;
-scheduler.set_sizes()}}function i(){scheduler._selected_event_id=null;scheduler.map._infowindow.close();var a=scheduler.map._markers,b;for(b in a)a.hasOwnProperty(b)&&(a[b].setMap(null),delete scheduler.map._markers[b],scheduler.map._infowindows_content[b]&&delete scheduler.map._infowindows_content[b])}function f(){var a=scheduler.get_visible_events();a.sort(function(a,b){return a.start_date.valueOf()==b.start_date.valueOf()?a.id>b.id?1:-1:a.start_date>b.start_date?1:-1});for(var b="<div class='dhx_map_area'>",
-d=0;d<a.length;d++){var c=a[d],e=c.id==scheduler._selected_event_id?"dhx_map_line highlight":"dhx_map_line",f=c.color?"background:"+c.color+";":"",g=c.textColor?"color:"+c.textColor+";":"";b+="<div class='"+e+"' event_id='"+c.id+"' style='"+f+""+g+""+(c._text_style||"")+" width: "+(scheduler.xy.map_date_width+scheduler.xy.map_description_width+2)+"px;'><div style='width: "+scheduler.xy.map_date_width+"px;' >"+scheduler.templates.map_time(c.start_date,c.end_date,c)+"</div>";b+="<div class='dhx_event_icon icon_details'>&nbsp</div>";
-b+="<div class='line_description' style='width:"+(scheduler.xy.map_description_width-25)+"px;'>"+scheduler.templates.map_text(c.start_date,c.end_date,c)+"</div></div>"}b+="<div class='dhx_v_border' style='left: "+(scheduler.xy.map_date_width-2)+"px;'></div><div class='dhx_v_border_description'></div></div>";scheduler._els.dhx_cal_data[0].scrollTop=0;scheduler._els.dhx_cal_data[0].innerHTML=b;scheduler._els.dhx_cal_data[0].style.width=scheduler.xy.map_date_width+scheduler.xy.map_description_width+
-1+"px";var h=scheduler._els.dhx_cal_data[0].firstChild.childNodes;scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates[scheduler._mode+"_date"](scheduler._min_date,scheduler._max_date,scheduler._mode);scheduler._rendered=[];for(d=0;d<h.length-2;d++)scheduler._rendered[d]=h[d]}function l(a){var b=document.getElementById(a),d=scheduler._y-scheduler.xy.nav_height;d<0&&(d=0);var c=scheduler._x-scheduler.xy.map_date_width-scheduler.xy.map_description_width-1;c<0&&(c=0);b.style.height=d+"px";b.style.width=
-c+"px";b.style.marginLeft=scheduler.xy.map_date_width+scheduler.xy.map_description_width+1+"px";b.style.marginTop=scheduler.xy.nav_height+2+"px"}scheduler._isMapPositionSet=!1;var h=document.createElement("div");h.className="dhx_map";h.id="dhx_gmap";h.style.dispay="none";var n=scheduler._obj;n.appendChild(h);scheduler._els.dhx_gmap=[];scheduler._els.dhx_gmap.push(h);l("dhx_gmap");var o={zoom:scheduler.config.map_inital_zoom||10,center:scheduler.config.map_initial_position,mapTypeId:scheduler.config.map_type||
-google.maps.MapTypeId.ROADMAP},e=new google.maps.Map(document.getElementById("dhx_gmap"),o);e.disableDefaultUI=!1;e.disableDoubleClickZoom=!scheduler.config.readonly;google.maps.event.addListener(e,"dblclick",function(a){if(!scheduler.config.readonly&&scheduler.config.dblclick_create){var b=a.latLng;geocoder.geocode({latLng:b},function(a,c){if(c==google.maps.GeocoderStatus.OK)b=a[0].geometry.location,scheduler.addEventNow({lat:b.lat(),lng:b.lng(),event_location:a[0].formatted_address,start_date:scheduler._date,
-end_date:scheduler.date.add(scheduler._date,scheduler.config.time_step,"minute")})})}});var m={content:""};if(scheduler.config.map_infowindow_max_width)m.maxWidth=scheduler.config.map_infowindow_max_width;scheduler.map={_points:[],_markers:[],_infowindow:new google.maps.InfoWindow(m),_infowindows_content:[],_initialization_count:-1,_obj:e};geocoder=new google.maps.Geocoder;scheduler.config.map_resolve_user_location&&navigator.geolocation&&(scheduler._isMapPositionSet||navigator.geolocation.getCurrentPosition(function(a){var b=
-new google.maps.LatLng(a.coords.latitude,a.coords.longitude);e.setCenter(b);e.setZoom(scheduler.config.map_zoom_after_resolve||10);scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_success);scheduler.map._infowindow.position=e.getCenter();scheduler.map._infowindow.open(e);scheduler._isMapPositionSet=!0},function(){scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_fail);scheduler.map._infowindow.setPosition(e.getCenter());scheduler.map._infowindow.open(e);
-scheduler._isMapPositionSet=!0}));google.maps.event.addListener(e,"resize",function(){h.style.zIndex="5";e.setZoom(e.getZoom())});google.maps.event.addListener(e,"tilesloaded",function(){h.style.zIndex="5"});h.style.display="none";scheduler.attachEvent("onSchedulerResize",function(){return this._mode=="map"?(this.map_view(!0),!1):!0});var p=scheduler.render_data;scheduler.render_data=function(a,b){if(this._mode=="map"){f();for(var d=scheduler.get_visible_events(),c=0;c<d.length;c++)scheduler.map._markers[d[c].id]||
-j(d[c],!1,!1)}else return p.apply(this,arguments)};scheduler.map_view=function(a){scheduler.map._initialization_count++;var b=scheduler._els.dhx_gmap[0];scheduler._els.dhx_cal_data[0].style.width=scheduler.xy.map_date_width+scheduler.xy.map_description_width+1+"px";scheduler._min_date=scheduler.config.map_start||scheduler._currentDate();scheduler._max_date=scheduler.config.map_end||scheduler.date.add(scheduler._currentDate(),1,"year");scheduler._table_view=!0;g(a);if(a){i();f();b.style.display="block";
-l("dhx_gmap");for(var d=scheduler.map._obj.getCenter(),c=scheduler.get_visible_events(),e=0;e<c.length;e++)scheduler.map._markers[c[e].id]||j(c[e])}else b.style.display="none";google.maps.event.trigger(scheduler.map._obj,"resize");scheduler.map._initialization_count===0&&d&&scheduler.map._obj.setCenter(d);scheduler._selected_event_id&&q(scheduler._selected_event_id)};var q=function(a){scheduler.map._obj.setCenter(scheduler.map._points[a]);scheduler.callEvent("onClick",[a])},j=function(a,b,d){var c=
-scheduler.config.map_error_position;a.lat&&a.lng&&(c=new google.maps.LatLng(a.lat,a.lng));var e=scheduler.templates.marker_text(a.start_date,a.end_date,a);scheduler._new_event||(scheduler.map._infowindows_content[a.id]=e,scheduler.map._markers[a.id]&&scheduler.map._markers[a.id].setMap(null),scheduler.map._markers[a.id]=new google.maps.Marker({position:c,map:scheduler.map._obj}),google.maps.event.addListener(scheduler.map._markers[a.id],"click",function(){scheduler.map._infowindow.setContent(scheduler.map._infowindows_content[a.id]);
-scheduler.map._infowindow.open(scheduler.map._obj,scheduler.map._markers[a.id]);scheduler._selected_event_id=a.id;scheduler.render_data()}),scheduler.map._points[a.id]=c,b&&scheduler.map._obj.setCenter(scheduler.map._points[a.id]),d&&scheduler.callEvent("onClick",[a.id]))};scheduler.attachEvent("onClick",function(a){if(this._mode=="map"){scheduler._selected_event_id=a;for(var b=0;b<scheduler._rendered.length;b++)scheduler._rendered[b].className="dhx_map_line",scheduler._rendered[b].getAttribute("event_id")==
-a&&(scheduler._rendered[b].className+=" highlight");scheduler.map._points[a]&&scheduler.map._markers[a]&&(scheduler.map._obj.setCenter(scheduler.map._points[a]),google.maps.event.trigger(scheduler.map._markers[a],"click"))}return!0});var k=function(a){a.event_location&&geocoder?geocoder.geocode({address:a.event_location,language:scheduler.uid().toString()},function(b,d){var c={};if(d!=google.maps.GeocoderStatus.OK){if(c=scheduler.callEvent("onLocationError",[a.id]),!c||c===!0)c=scheduler.config.map_error_position}else c=
-b[0].geometry.location;a.lat=c.lat();a.lng=c.lng();scheduler._selected_event_id=a.id;scheduler._latLngUpdate=!0;scheduler.callEvent("onEventChanged",[a.id,a]);j(a,!0,!0)}):j(a,!0,!0)},r=function(a){a.event_location&&geocoder&&geocoder.geocode({address:a.event_location,language:scheduler.uid().toString()},function(b,d){var c={};if(d!=google.maps.GeocoderStatus.OK){if(c=scheduler.callEvent("onLocationError",[a.id]),!c||c===!0)c=scheduler.config.map_error_position}else c=b[0].geometry.location;a.lat=
-c.lat();a.lng=c.lng();scheduler._latLngUpdate=!0;scheduler.callEvent("onEventChanged",[a.id,a])})},s=function(a,b,d,c){setTimeout(function(){var c=a.apply(b,d);a=b=d=null;return c},c||1)};scheduler.attachEvent("onEventChanged",function(a){if(this._latLngUpdate)this._latLngUpdate=!1;else{var b=scheduler.getEvent(a);b.start_date<scheduler._min_date&&b.end_date>scheduler._min_date||b.start_date<scheduler._max_date&&b.end_date>scheduler._max_date||b.start_date.valueOf()>=scheduler._min_date&&b.end_date.valueOf()<=
-scheduler._max_date?(scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null),k(b)):(scheduler._selected_event_id=null,scheduler.map._infowindow.close(),scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null))}return!0});scheduler.attachEvent("onEventIdChange",function(a,b){var d=scheduler.getEvent(b);if(d.start_date<scheduler._min_date&&d.end_date>scheduler._min_date||d.start_date<scheduler._max_date&&d.end_date>scheduler._max_date||d.start_date.valueOf()>=scheduler._min_date&&
-d.end_date.valueOf()<=scheduler._max_date)scheduler.map._markers[a]&&(scheduler.map._markers[a].setMap(null),delete scheduler.map._markers[a]),scheduler.map._infowindows_content[a]&&delete scheduler.map._infowindows_content[a],k(d);return!0});scheduler.attachEvent("onEventAdded",function(a,b){if(!scheduler._dataprocessor&&(b.start_date<scheduler._min_date&&b.end_date>scheduler._min_date||b.start_date<scheduler._max_date&&b.end_date>scheduler._max_date||b.start_date.valueOf()>=scheduler._min_date&&
-b.end_date.valueOf()<=scheduler._max_date))scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null),k(b);return!0});scheduler.attachEvent("onBeforeEventDelete",function(a){scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null);scheduler._selected_event_id=null;scheduler.map._infowindow.close();return!0});scheduler._event_resolve_delay=1500;scheduler.attachEvent("onEventLoading",function(a){scheduler.config.map_resolve_event_location&&a.event_location&&!a.lat&&!a.lng&&(scheduler._event_resolve_delay+=
-1500,s(r,this,[a],scheduler._event_resolve_delay));return!0});scheduler.attachEvent("onEventCancel",function(a,b){b&&(scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null),scheduler.map._infowindow.close());return!0})});
+scheduler.xy.map_date_width=188,scheduler.xy.map_description_width=400,scheduler.config.map_resolve_event_location=!0,scheduler.config.map_resolve_user_location=!0,scheduler.config.map_initial_position=new google.maps.LatLng(48.724,8.215),scheduler.config.map_error_position=new google.maps.LatLng(15,15),scheduler.config.map_infowindow_max_width=300,scheduler.config.map_type=google.maps.MapTypeId.ROADMAP,scheduler.config.map_zoom_after_resolve=15,scheduler.locale.labels.marker_geo_success="It seems you are here.",scheduler.locale.labels.marker_geo_fail="Sorry, could not get your current position using geolocation.",scheduler.templates.marker_date=scheduler.date.date_to_str("%Y-%m-%d %H:%i"),scheduler.templates.marker_text=function(e,t,s){return"<div><b>"+s.text+"</b><br/><br/>"+(s.event_location||"")+"<br/><br/>"+scheduler.templates.marker_date(e)+" - "+scheduler.templates.marker_date(t)+"</div>"
+},scheduler.dblclick_dhx_map_area=function(){!this.config.readonly&&this.config.dblclick_create&&this.addEventNow({start_date:scheduler._date,end_date:scheduler.date.add(scheduler._date,scheduler.config.time_step,"minute")})},scheduler.templates.map_time=function(e,t,s){return s._timed?this.day_date(s.start_date,s.end_date,s)+" "+this.event_date(e):scheduler.templates.day_date(e)+" &ndash; "+scheduler.templates.day_date(t)},scheduler.templates.map_text=function(e,t,s){return s.text},scheduler.date.map_start=function(e){return e
+},scheduler.date.add_map=function(e){return new Date(e.valueOf())},scheduler.templates.map_date=function(){return""},scheduler._latLngUpdate=!1,scheduler.attachEvent("onSchedulerReady",function(){function e(e){if(e){var t=scheduler.locale.labels;scheduler._els.dhx_cal_header[0].innerHTML="<div class='dhx_map_line' style='width: "+(scheduler.xy.map_date_width+scheduler.xy.map_description_width+2)+"px;' ><div class='headline_date' style='width: "+scheduler.xy.map_date_width+"px;'>"+t.date+"</div><div class='headline_description' style='width: "+scheduler.xy.map_description_width+"px;'>"+t.description+"</div></div>",scheduler._table_view=!0,scheduler.set_sizes()
+}}function t(){scheduler._selected_event_id=null,scheduler.map._infowindow.close();var e=scheduler.map._markers;for(var t in e)e.hasOwnProperty(t)&&(e[t].setMap(null),delete scheduler.map._markers[t],scheduler.map._infowindows_content[t]&&delete scheduler.map._infowindows_content[t])}function s(){var e=scheduler.get_visible_events();e.sort(function(e,t){return e.start_date.valueOf()==t.start_date.valueOf()?e.id>t.id?1:-1:e.start_date>t.start_date?1:-1});for(var t="<div class='dhx_map_area'>",s=0;s<e.length;s++){var r=e[s],a=r.id==scheduler._selected_event_id?"dhx_map_line highlight":"dhx_map_line",i=r.color?"background:"+r.color+";":"",n=r.textColor?"color:"+r.textColor+";":"";
+t+="<div class='"+a+"' event_id='"+r.id+"' style='"+i+n+(r._text_style||"")+" width: "+(scheduler.xy.map_date_width+scheduler.xy.map_description_width+2)+"px;'><div style='width: "+scheduler.xy.map_date_width+"px;' >"+scheduler.templates.map_time(r.start_date,r.end_date,r)+"</div>",t+="<div class='dhx_event_icon icon_details'>&nbsp</div>",t+="<div class='line_description' style='width:"+(scheduler.xy.map_description_width-25)+"px;'>"+scheduler.templates.map_text(r.start_date,r.end_date,r)+"</div></div>"
+}t+="<div class='dhx_v_border' style='left: "+(scheduler.xy.map_date_width-2)+"px;'></div><div class='dhx_v_border_description'></div></div>",scheduler._els.dhx_cal_data[0].scrollTop=0,scheduler._els.dhx_cal_data[0].innerHTML=t,scheduler._els.dhx_cal_data[0].style.width=scheduler.xy.map_date_width+scheduler.xy.map_description_width+1+"px";var d=scheduler._els.dhx_cal_data[0].firstChild.childNodes;scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates[scheduler._mode+"_date"](scheduler._min_date,scheduler._max_date,scheduler._mode),scheduler._rendered=[];
+for(var s=0;s<d.length-2;s++)scheduler._rendered[s]=d[s]}function r(e){var t=document.getElementById(e),s=scheduler._y-scheduler.xy.nav_height;0>s&&(s=0);var r=scheduler._x-scheduler.xy.map_date_width-scheduler.xy.map_description_width-1;0>r&&(r=0),t.style.height=s+"px",t.style.width=r+"px",t.style.marginLeft=scheduler.xy.map_date_width+scheduler.xy.map_description_width+1+"px",t.style.marginTop=scheduler.xy.nav_height+2+"px"}scheduler._isMapPositionSet=!1;var a=document.createElement("div");a.className="dhx_map",a.id="dhx_gmap",a.style.dispay="none";
+var i=scheduler._obj;i.appendChild(a),scheduler._els.dhx_gmap=[],scheduler._els.dhx_gmap.push(a),r("dhx_gmap");var n={zoom:scheduler.config.map_inital_zoom||10,center:scheduler.config.map_initial_position,mapTypeId:scheduler.config.map_type||google.maps.MapTypeId.ROADMAP},d=new google.maps.Map(document.getElementById("dhx_gmap"),n);d.disableDefaultUI=!1,d.disableDoubleClickZoom=!scheduler.config.readonly,google.maps.event.addListener(d,"dblclick",function(e){if(!scheduler.config.readonly&&scheduler.config.dblclick_create){var t=e.latLng;
+geocoder.geocode({latLng:t},function(e,s){s==google.maps.GeocoderStatus.OK&&(t=e[0].geometry.location,scheduler.addEventNow({lat:t.lat(),lng:t.lng(),event_location:e[0].formatted_address,start_date:scheduler._date,end_date:scheduler.date.add(scheduler._date,scheduler.config.time_step,"minute")}))})}});var l={content:""};scheduler.config.map_infowindow_max_width&&(l.maxWidth=scheduler.config.map_infowindow_max_width),scheduler.map={_points:[],_markers:[],_infowindow:new google.maps.InfoWindow(l),_infowindows_content:[],_initialization_count:-1,_obj:d},geocoder=new google.maps.Geocoder,scheduler.config.map_resolve_user_location&&navigator.geolocation&&(scheduler._isMapPositionSet||navigator.geolocation.getCurrentPosition(function(e){var t=new google.maps.LatLng(e.coords.latitude,e.coords.longitude);
+d.setCenter(t),d.setZoom(scheduler.config.map_zoom_after_resolve||10),scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_success),scheduler.map._infowindow.position=d.getCenter(),scheduler.map._infowindow.open(d),scheduler._isMapPositionSet=!0},function(){scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_fail),scheduler.map._infowindow.setPosition(d.getCenter()),scheduler.map._infowindow.open(d),scheduler._isMapPositionSet=!0})),google.maps.event.addListener(d,"resize",function(){a.style.zIndex="5",d.setZoom(d.getZoom())
+}),google.maps.event.addListener(d,"tilesloaded",function(){a.style.zIndex="5"}),a.style.display="none",scheduler.attachEvent("onSchedulerResize",function(){return"map"==this._mode?(this.map_view(!0),!1):!0});var o=scheduler.render_data;scheduler.render_data=function(){if("map"!=this._mode)return o.apply(this,arguments);s();for(var e=scheduler.get_visible_events(),t=0;t<e.length;t++)scheduler.map._markers[e[t].id]||h(e[t],!1,!1)},scheduler.map_view=function(a){scheduler.map._initialization_count++;
+var i,n=scheduler._els.dhx_gmap[0];if(scheduler._els.dhx_cal_data[0].style.width=scheduler.xy.map_date_width+scheduler.xy.map_description_width+1+"px",scheduler._min_date=scheduler.config.map_start||scheduler._currentDate(),scheduler._max_date=scheduler.config.map_end||scheduler.date.add(scheduler._currentDate(),1,"year"),scheduler._table_view=!0,e(a),a){t(),s(),n.style.display="block",r("dhx_gmap"),i=scheduler.map._obj.getCenter();for(var d=scheduler.get_visible_events(),l=0;l<d.length;l++)scheduler.map._markers[d[l].id]||h(d[l])
+}else n.style.display="none";google.maps.event.trigger(scheduler.map._obj,"resize"),0===scheduler.map._initialization_count&&i&&scheduler.map._obj.setCenter(i),scheduler._selected_event_id&&_(scheduler._selected_event_id)};var _=function(e){scheduler.map._obj.setCenter(scheduler.map._points[e]),scheduler.callEvent("onClick",[e])},h=function(e,t,s){var r=scheduler.config.map_error_position;e.lat&&e.lng&&(r=new google.maps.LatLng(e.lat,e.lng));var a=scheduler.templates.marker_text(e.start_date,e.end_date,e);
+scheduler._new_event||(scheduler.map._infowindows_content[e.id]=a,scheduler.map._markers[e.id]&&scheduler.map._markers[e.id].setMap(null),scheduler.map._markers[e.id]=new google.maps.Marker({position:r,map:scheduler.map._obj}),google.maps.event.addListener(scheduler.map._markers[e.id],"click",function(){scheduler.map._infowindow.setContent(scheduler.map._infowindows_content[e.id]),scheduler.map._infowindow.open(scheduler.map._obj,scheduler.map._markers[e.id]),scheduler._selected_event_id=e.id,scheduler.render_data()
+}),scheduler.map._points[e.id]=r,t&&scheduler.map._obj.setCenter(scheduler.map._points[e.id]),s&&scheduler.callEvent("onClick",[e.id]))};scheduler.attachEvent("onClick",function(e){if("map"==this._mode){scheduler._selected_event_id=e;for(var t=0;t<scheduler._rendered.length;t++)scheduler._rendered[t].className="dhx_map_line",scheduler._rendered[t].getAttribute("event_id")==e&&(scheduler._rendered[t].className+=" highlight");scheduler.map._points[e]&&scheduler.map._markers[e]&&(scheduler.map._obj.setCenter(scheduler.map._points[e]),google.maps.event.trigger(scheduler.map._markers[e],"click"))
+}return!0});var c=function(e){e.event_location&&geocoder?geocoder.geocode({address:e.event_location,language:scheduler.uid().toString()},function(t,s){var r={};s!=google.maps.GeocoderStatus.OK?(r=scheduler.callEvent("onLocationError",[e.id]),r&&r!==!0||(r=scheduler.config.map_error_position)):r=t[0].geometry.location,e.lat=r.lat(),e.lng=r.lng(),scheduler._selected_event_id=e.id,scheduler._latLngUpdate=!0,scheduler.callEvent("onEventChanged",[e.id,e]),h(e,!0,!0)}):h(e,!0,!0)},u=function(e){e.event_location&&geocoder&&geocoder.geocode({address:e.event_location,language:scheduler.uid().toString()},function(t,s){var r={};
+s!=google.maps.GeocoderStatus.OK?(r=scheduler.callEvent("onLocationError",[e.id]),r&&r!==!0||(r=scheduler.config.map_error_position)):r=t[0].geometry.location,e.lat=r.lat(),e.lng=r.lng(),scheduler._latLngUpdate=!0,scheduler.callEvent("onEventChanged",[e.id,e])})},v=function(e,t,s,r){setTimeout(function(){var r=e.apply(t,s);return e=t=s=null,r},r||1)};scheduler.attachEvent("onEventChanged",function(e){if(this._latLngUpdate)this._latLngUpdate=!1;else{var t=scheduler.getEvent(e);t.start_date<scheduler._min_date&&t.end_date>scheduler._min_date||t.start_date<scheduler._max_date&&t.end_date>scheduler._max_date||t.start_date.valueOf()>=scheduler._min_date&&t.end_date.valueOf()<=scheduler._max_date?(scheduler.map._markers[e]&&scheduler.map._markers[e].setMap(null),c(t)):(scheduler._selected_event_id=null,scheduler.map._infowindow.close(),scheduler.map._markers[e]&&scheduler.map._markers[e].setMap(null))
+}return!0}),scheduler.attachEvent("onEventIdChange",function(e,t){var s=scheduler.getEvent(t);return(s.start_date<scheduler._min_date&&s.end_date>scheduler._min_date||s.start_date<scheduler._max_date&&s.end_date>scheduler._max_date||s.start_date.valueOf()>=scheduler._min_date&&s.end_date.valueOf()<=scheduler._max_date)&&(scheduler.map._markers[e]&&(scheduler.map._markers[e].setMap(null),delete scheduler.map._markers[e]),scheduler.map._infowindows_content[e]&&delete scheduler.map._infowindows_content[e],c(s)),!0
+}),scheduler.attachEvent("onEventAdded",function(e,t){return scheduler._dataprocessor||(t.start_date<scheduler._min_date&&t.end_date>scheduler._min_date||t.start_date<scheduler._max_date&&t.end_date>scheduler._max_date||t.start_date.valueOf()>=scheduler._min_date&&t.end_date.valueOf()<=scheduler._max_date)&&(scheduler.map._markers[e]&&scheduler.map._markers[e].setMap(null),c(t)),!0}),scheduler.attachEvent("onBeforeEventDelete",function(e){return scheduler.map._markers[e]&&scheduler.map._markers[e].setMap(null),scheduler._selected_event_id=null,scheduler.map._infowindow.close(),!0
+}),scheduler._event_resolve_delay=1500,scheduler.attachEvent("onEventLoading",function(e){return scheduler.config.map_resolve_event_location&&e.event_location&&!e.lat&&!e.lng&&(scheduler._event_resolve_delay+=1500,v(u,this,[e],scheduler._event_resolve_delay)),!0}),scheduler.attachEvent("onEventCancel",function(e,t){return t&&(scheduler.map._markers[e]&&scheduler.map._markers[e].setMap(null),scheduler.map._infowindow.close()),!0})});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_map_view.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_minical.js b/codebase/ext/dhtmlxscheduler_minical.js
index b1b02af..4347274 100644
--- a/codebase/ext/dhtmlxscheduler_minical.js
+++ b/codebase/ext/dhtmlxscheduler_minical.js
@@ -1,28 +1,26 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.templates.calendar_month=scheduler.date.date_to_str("%F %Y");scheduler.templates.calendar_scale_date=scheduler.date.date_to_str("%D");scheduler.templates.calendar_date=scheduler.date.date_to_str("%d");scheduler.config.minicalendar={mark_events:!0};scheduler._synced_minicalendars=[];
-scheduler.renderCalendar=function(a,b,c){var d=null,f=a.date||scheduler._currentDate();typeof f=="string"&&(f=this.templates.api_date(f));if(b)d=this._render_calendar(b.parentNode,f,a,b),scheduler.unmarkCalendar(d);else{var e=a.container,h=a.position;typeof e=="string"&&(e=document.getElementById(e));typeof h=="string"&&(h=document.getElementById(h));if(h&&typeof h.left=="undefined")var k=getOffset(h),h={top:k.top+h.offsetHeight,left:k.left};e||(e=scheduler._get_def_cont(h));d=this._render_calendar(e,
-f,a);d.onclick=function(a){var a=a||event,b=a.target||a.srcElement;if(b.className.indexOf("dhx_month_head")!=-1){var c=b.parentNode.className;if(c.indexOf("dhx_after")==-1&&c.indexOf("dhx_before")==-1){var d=scheduler.templates.xml_date(this.getAttribute("date"));d.setDate(parseInt(b.innerHTML,10));scheduler.unmarkCalendar(this);scheduler.markCalendar(this,d,"dhx_calendar_click");this._last_date=d;this.conf.handler&&this.conf.handler.call(scheduler,d,this)}}}}if(scheduler.config.minicalendar.mark_events)for(var j=
-scheduler.date.month_start(f),n=scheduler.date.add(j,1,"month"),l=this.getEvents(j,n),s=this["filter_"+this._mode],p=0;p<l.length;p++){var g=l[p];if(!s||s(g.id,g)){var i=g.start_date;i.valueOf()<j.valueOf()&&(i=j);for(i=scheduler.date.date_part(new Date(i.valueOf()));i<g.end_date;)if(this.markCalendar(d,i,"dhx_year_event"),i=this.date.add(i,1,"day"),i.valueOf()>=n.valueOf())break}}this._markCalendarCurrentDate(d);d.conf=a;a.sync&&!c&&this._synced_minicalendars.push(d);return d};
-scheduler._get_def_cont=function(a){if(!this._def_count)this._def_count=document.createElement("DIV"),this._def_count.className="dhx_minical_popup",this._def_count.onclick=function(a){(a||event).cancelBubble=!0},document.body.appendChild(this._def_count);this._def_count.style.left=a.left+"px";this._def_count.style.top=a.top+"px";this._def_count._created=new Date;return this._def_count};
-scheduler._locateCalendar=function(a,b){typeof b=="string"&&(b=scheduler.templates.api_date(b));if(+b>+a._max_date||+b<+a._min_date)return null;for(var c=a.childNodes[2].childNodes[0],d=0,f=new Date(a._min_date);+this.date.add(f,1,"week")<=+b;)f=this.date.add(f,1,"week"),d++;var e=scheduler.config.start_on_monday,h=(b.getDay()||(e?7:0))-(e?1:0);return c.rows[d].cells[h].firstChild};scheduler.markCalendar=function(a,b,c){var d=this._locateCalendar(a,b);d&&(d.className+=" "+c)};
-scheduler.unmarkCalendar=function(a,b,c){b=b||a._last_date;c=c||"dhx_calendar_click";if(b){var d=this._locateCalendar(a,b);if(d)d.className=(d.className||"").replace(RegExp(c,"g"))}};
-scheduler._week_template=function(a){for(var b=a||250,c=0,d=document.createElement("div"),f=this.date.week_start(scheduler._currentDate()),e=0;e<7;e++)this._cols[e]=Math.floor(b/(7-e)),this._render_x_header(e,c,f,d),f=this.date.add(f,1,"day"),b-=this._cols[e],c+=this._cols[e];d.lastChild.className+=" dhx_scale_bar_last";return d};scheduler.updateCalendar=function(a,b){a.conf.date=b;this.renderCalendar(a.conf,a,!0)};scheduler._mini_cal_arrows=["&nbsp","&nbsp"];
-scheduler._render_calendar=function(a,b,c,d){var f=scheduler.templates,e=this._cols;this._cols=[];var h=this._mode;this._mode="calendar";var k=this._colsS;this._colsS={height:0};var j=new Date(this._min_date),n=new Date(this._max_date),l=new Date(scheduler._date),s=f.month_day;f.month_day=f.calendar_date;var b=this.date.month_start(b),p=this._week_template(a.offsetWidth-1-this.config.minicalendar.padding),g;d?g=d:(g=document.createElement("DIV"),g.className="dhx_cal_container dhx_mini_calendar");
-g.setAttribute("date",this.templates.xml_format(b));g.innerHTML="<div class='dhx_year_month'></div><div class='dhx_year_week'>"+p.innerHTML+"</div><div class='dhx_year_body'></div>";g.childNodes[0].innerHTML=this.templates.calendar_month(b);if(c.navigation)for(var i=function(a,b){var c=scheduler.date.add(a._date,b,"month");scheduler.updateCalendar(a,c);scheduler._date.getMonth()==a._date.getMonth()&&scheduler._date.getFullYear()==a._date.getFullYear()&&scheduler._markCalendarCurrentDate(a)},w=["dhx_cal_prev_button",
-"dhx_cal_next_button"],x=["left:1px;top:2px;position:absolute;","left:auto; right:1px;top:2px;position:absolute;"],y=[-1,1],z=function(a){return function(){if(c.sync)for(var b=scheduler._synced_minicalendars,d=0;d<b.length;d++)i(b[d],a);else i(g,a)}},o=0;o<2;o++){var q=document.createElement("DIV");q.className=w[o];q.style.cssText=x[o];q.innerHTML=this._mini_cal_arrows[o];g.firstChild.appendChild(q);q.onclick=z(y[o])}g._date=new Date(b);g.week_start=(b.getDay()-(this.config.start_on_monday?1:0)+7)%
-7;var A=g._min_date=this.date.week_start(b);g._max_date=this.date.add(g._min_date,6,"week");this._reset_month_scale(g.childNodes[2],b,A);for(var m=g.childNodes[2].firstChild.rows,r=m.length;r<6;r++){var v=m[m.length-1];m[0].parentNode.appendChild(v.cloneNode(!0));for(var t=parseInt(v.childNodes[v.childNodes.length-1].childNodes[0].innerHTML),t=t<10?t:0,u=0;u<m[r].childNodes.length;u++)m[r].childNodes[u].className="dhx_after",m[r].childNodes[u].childNodes[0].innerHTML=scheduler.date.to_fixed(++t)}d||
-a.appendChild(g);g.childNodes[1].style.height=g.childNodes[1].childNodes[0].offsetHeight-1+"px";this._cols=e;this._mode=h;this._colsS=k;this._min_date=j;this._max_date=n;scheduler._date=l;f.month_day=s;return g};
-scheduler.destroyCalendar=function(a,b){if(!a&&this._def_count&&this._def_count.firstChild&&(b||(new Date).valueOf()-this._def_count._created.valueOf()>500))a=this._def_count.firstChild;if(a&&(a.onclick=null,a.innerHTML="",a.parentNode&&a.parentNode.removeChild(a),this._def_count))this._def_count.style.top="-1000px"};scheduler.isCalendarVisible=function(){return this._def_count&&parseInt(this._def_count.style.top,10)>0?this._def_count:!1};
-scheduler.attachEvent("onTemplatesReady",function(){dhtmlxEvent(document.body,"click",function(){scheduler.destroyCalendar()})});scheduler.templates.calendar_time=scheduler.date.date_to_str("%d-%m-%Y");
-scheduler.form_blocks.calendar_time={render:function(){var a="<input class='dhx_readonly' type='text' readonly='true'>",b=scheduler.config,c=this.date.date_part(scheduler._currentDate()),d=1440,f=0;b.limit_time_select&&(f=60*b.first_hour,d=60*b.last_hour+1);c.setHours(f/60);a+=" <select>";for(var e=f;e<d;e+=this.config.time_step*1){var h=this.templates.time_picker(c);a+="<option value='"+e+"'>"+h+"</option>";c=this.date.add(c,this.config.time_step,"minute")}a+="</select>";var k=scheduler.config.full_day;
-return"<div style='height:30px;padding-top:0; font-size:inherit;' class='dhx_section_time'>"+a+"<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>"+a+"</div>"},set_value:function(a,b,c){function d(a,b,d){h(a,b,d);a.value=scheduler.templates.calendar_time(b);a._date=scheduler.date.date_part(new Date(b))}var f=a.getElementsByTagName("input"),e=a.getElementsByTagName("select"),h=function(a,b,d){a.onclick=function(){scheduler.destroyCalendar(null,!0);scheduler.renderCalendar({position:a,
-date:new Date(this._date),navigation:!0,handler:function(b){a.value=scheduler.templates.calendar_time(b);a._date=new Date(b);scheduler.destroyCalendar();scheduler.config.event_duration&&scheduler.config.auto_end_date&&d==0&&l()}})}};if(scheduler.config.full_day){if(!a._full_day){var k="<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> "+scheduler.locale.labels.full_day+"&nbsp;</label></input>";scheduler.config.wide_form||(k=a.previousSibling.innerHTML+k);a.previousSibling.innerHTML=
-k;a._full_day=!0}var j=a.previousSibling.getElementsByTagName("input")[0],n=scheduler.date.time_part(c.start_date)==0&&scheduler.date.time_part(c.end_date)==0;j.checked=n;e[0].disabled=j.checked;e[1].disabled=j.checked;j.onclick=function(){if(j.checked==!0){var b={};scheduler.form_blocks.calendar_time.get_value(a,b);var h=scheduler.date.date_part(b.start_date),g=scheduler.date.date_part(b.end_date);if(+g==+h||+g>=+h&&(c.end_date.getHours()!=0||c.end_date.getMinutes()!=0))g=scheduler.date.add(g,1,
-"day")}var i=h||c.start_date,k=g||c.end_date;d(f[0],i);d(f[1],k);e[0].value=i.getHours()*60+i.getMinutes();e[1].value=k.getHours()*60+k.getMinutes();e[0].disabled=j.checked;e[1].disabled=j.checked}}if(scheduler.config.event_duration&&scheduler.config.auto_end_date){var l=function(){start_date=scheduler.date.add(f[0]._date,e[0].value,"minute");end_date=new Date(start_date.getTime()+scheduler.config.event_duration*6E4);f[1].value=scheduler.templates.calendar_time(end_date);f[1]._date=scheduler.date.date_part(new Date(end_date));
-e[1].value=end_date.getHours()*60+end_date.getMinutes()};e[0].onchange=l}d(f[0],c.start_date,0);d(f[1],c.end_date,1);h=function(){};e[0].value=c.start_date.getHours()*60+c.start_date.getMinutes();e[1].value=c.end_date.getHours()*60+c.end_date.getMinutes()},get_value:function(a,b){var c=a.getElementsByTagName("input"),d=a.getElementsByTagName("select");b.start_date=scheduler.date.add(c[0]._date,d[0].value,"minute");b.end_date=scheduler.date.add(c[1]._date,d[1].value,"minute");if(b.end_date<=b.start_date)b.end_date=
-scheduler.date.add(b.start_date,scheduler.config.time_step,"minute")},focus:function(){}};scheduler.linkCalendar=function(a,b){var c=function(){var d=scheduler._date,c=new Date(d.valueOf());b&&(c=b(c));c.setDate(1);scheduler.updateCalendar(a,c);return!0};scheduler.attachEvent("onViewChange",c);scheduler.attachEvent("onXLE",c);scheduler.attachEvent("onEventAdded",c);scheduler.attachEvent("onEventChanged",c);scheduler.attachEvent("onAfterEventDelete",c);c()};
-scheduler._markCalendarCurrentDate=function(a){var b=scheduler._date,c=scheduler._mode,d=scheduler.date.month_start(new Date(a._date)),f=scheduler.date.add(d,1,"month");if(c=="day"||this._props&&this._props[c])d.valueOf()<=b.valueOf()&&f>b&&scheduler.markCalendar(a,b,"dhx_calendar_click");else if(c=="week")for(var e=scheduler.date.week_start(new Date(b.valueOf())),h=0;h<7;h++)d.valueOf()<=e.valueOf()&&f>e&&scheduler.markCalendar(a,e,"dhx_calendar_click"),e=scheduler.date.add(e,1,"day")};
-scheduler.attachEvent("onEventCancel",function(){scheduler.destroyCalendar(null,!0)});
+scheduler.templates.calendar_month=scheduler.date.date_to_str("%F %Y"),scheduler.templates.calendar_scale_date=scheduler.date.date_to_str("%D"),scheduler.templates.calendar_date=scheduler.date.date_to_str("%d"),scheduler.config.minicalendar={mark_events:!0},scheduler._synced_minicalendars=[],scheduler.renderCalendar=function(e,t,s){var a=null,r=e.date||scheduler._currentDate();if("string"==typeof r&&(r=this.templates.api_date(r)),t)a=this._render_calendar(t.parentNode,r,e,t),scheduler.unmarkCalendar(a);
+else{var d=e.container,n=e.position;if("string"==typeof d&&(d=document.getElementById(d)),"string"==typeof n&&(n=document.getElementById(n)),n&&"undefined"==typeof n.left){var i=getOffset(n);n={top:i.top+n.offsetHeight,left:i.left}}d||(d=scheduler._get_def_cont(n)),a=this._render_calendar(d,r,e),a.onclick=function(e){e=e||event;var t=e.target||e.srcElement;if(-1!=t.className.indexOf("dhx_month_head")){var s=t.parentNode.className;if(-1==s.indexOf("dhx_after")&&-1==s.indexOf("dhx_before")){var a=scheduler.templates.xml_date(this.getAttribute("date"));
+a.setDate(parseInt(t.innerHTML,10)),scheduler.unmarkCalendar(this),scheduler.markCalendar(this,a,"dhx_calendar_click"),this._last_date=a,this.conf.handler&&this.conf.handler.call(scheduler,a,this)}}}}if(scheduler.config.minicalendar.mark_events)for(var l=scheduler.date.month_start(r),o=scheduler.date.add(l,1,"month"),_=this.getEvents(l,o),h=this["filter_"+this._mode],c=0;c<_.length;c++){var u=_[c];if(!h||h(u.id,u)){var f=u.start_date;for(f.valueOf()<l.valueOf()&&(f=l),f=scheduler.date.date_part(new Date(f.valueOf()));f<u.end_date&&(this.markCalendar(a,f,"dhx_year_event"),f=this.date.add(f,1,"day"),!(f.valueOf()>=o.valueOf())););}}return this._markCalendarCurrentDate(a),a.conf=e,e.sync&&!s&&this._synced_minicalendars.push(a),a
+},scheduler._get_def_cont=function(e){return this._def_count||(this._def_count=document.createElement("DIV"),this._def_count.className="dhx_minical_popup",this._def_count.onclick=function(e){(e||event).cancelBubble=!0},document.body.appendChild(this._def_count)),this._def_count.style.left=e.left+"px",this._def_count.style.top=e.top+"px",this._def_count._created=new Date,this._def_count},scheduler._locateCalendar=function(e,t){if("string"==typeof t&&(t=scheduler.templates.api_date(t)),+t>+e._max_date||+t<+e._min_date)return null;
+for(var s=e.childNodes[2].childNodes[0],a=0,r=new Date(e._min_date);+this.date.add(r,1,"week")<=+t;)r=this.date.add(r,1,"week"),a++;var d=scheduler.config.start_on_monday,n=(t.getDay()||(d?7:0))-(d?1:0);return s.rows[a].cells[n].firstChild},scheduler.markCalendar=function(e,t,s){var a=this._locateCalendar(e,t);a&&(a.className+=" "+s)},scheduler.unmarkCalendar=function(e,t,s){if(t=t||e._last_date,s=s||"dhx_calendar_click",t){var a=this._locateCalendar(e,t);a&&(a.className=(a.className||"").replace(RegExp(s,"g")))
+}},scheduler._week_template=function(e){for(var t=e||250,s=0,a=document.createElement("div"),r=this.date.week_start(scheduler._currentDate()),d=0;7>d;d++)this._cols[d]=Math.floor(t/(7-d)),this._render_x_header(d,s,r,a),r=this.date.add(r,1,"day"),t-=this._cols[d],s+=this._cols[d];return a.lastChild.className+=" dhx_scale_bar_last",a},scheduler.updateCalendar=function(e,t){e.conf.date=t,this.renderCalendar(e.conf,e,!0)},scheduler._mini_cal_arrows=["&nbsp","&nbsp"],scheduler._render_calendar=function(e,t,s,a){var r=scheduler.templates,d=this._cols;
+this._cols=[];var n=this._mode;this._mode="calendar";var i=this._colsS;this._colsS={height:0};var l=new Date(this._min_date),o=new Date(this._max_date),_=new Date(scheduler._date),h=r.month_day,c=this._ignores_detected;this._ignores_detected=0,r.month_day=r.calendar_date,t=this.date.month_start(t);var u,f=this._week_template(e.offsetWidth-1-this.config.minicalendar.padding);if(a?u=a:(u=document.createElement("DIV"),u.className="dhx_cal_container dhx_mini_calendar"),u.setAttribute("date",this.templates.xml_format(t)),u.innerHTML="<div class='dhx_year_month'></div><div class='dhx_year_week'>"+f.innerHTML+"</div><div class='dhx_year_body'></div>",u.childNodes[0].innerHTML=this.templates.calendar_month(t),s.navigation)for(var v=function(e,t){var s=scheduler.date.add(e._date,t,"month");
+scheduler.updateCalendar(e,s),scheduler._date.getMonth()==e._date.getMonth()&&scheduler._date.getFullYear()==e._date.getFullYear()&&scheduler._markCalendarCurrentDate(e)},g=["dhx_cal_prev_button","dhx_cal_next_button"],m=["left:1px;top:2px;position:absolute;","left:auto; right:1px;top:2px;position:absolute;"],p=[-1,1],x=function(e){return function(){if(s.sync)for(var t=scheduler._synced_minicalendars,a=0;a<t.length;a++)v(t[a],e);else v(u,e)}},y=0;2>y;y++){var b=document.createElement("DIV");b.className=g[y],b.style.cssText=m[y],b.innerHTML=this._mini_cal_arrows[y],u.firstChild.appendChild(b),b.onclick=x(p[y])
+}u._date=new Date(t),u.week_start=(t.getDay()-(this.config.start_on_monday?1:0)+7)%7;var w=u._min_date=this.date.week_start(t);u._max_date=this.date.add(u._min_date,6,"week"),this._reset_month_scale(u.childNodes[2],t,w);for(var E=u.childNodes[2].firstChild.rows,k=E.length;6>k;k++){var D=E[E.length-1];E[0].parentNode.appendChild(D.cloneNode(!0));var M=parseInt(D.childNodes[D.childNodes.length-1].childNodes[0].innerHTML);M=10>M?M:0;for(var N=0;N<E[k].childNodes.length;N++)E[k].childNodes[N].className="dhx_after",E[k].childNodes[N].childNodes[0].innerHTML=scheduler.date.to_fixed(++M)
+}return a||e.appendChild(u),u.childNodes[1].style.height=u.childNodes[1].childNodes[0].offsetHeight-1+"px",this._cols=d,this._mode=n,this._colsS=i,this._min_date=l,this._max_date=o,scheduler._date=_,r.month_day=h,this._ignores_detected=c,u},scheduler.destroyCalendar=function(e,t){!e&&this._def_count&&this._def_count.firstChild&&(t||(new Date).valueOf()-this._def_count._created.valueOf()>500)&&(e=this._def_count.firstChild),e&&(e.onclick=null,e.innerHTML="",e.parentNode&&e.parentNode.removeChild(e),this._def_count&&(this._def_count.style.top="-1000px"))
+},scheduler.isCalendarVisible=function(){return this._def_count&&parseInt(this._def_count.style.top,10)>0?this._def_count:!1},scheduler._attach_minical_events=function(){dhtmlxEvent(document.body,"click",function(){scheduler.destroyCalendar()}),scheduler._attach_minical_events=function(){}},scheduler.attachEvent("onTemplatesReady",function(){scheduler._attach_minical_events()}),scheduler.templates.calendar_time=scheduler.date.date_to_str("%d-%m-%Y"),scheduler.form_blocks.calendar_time={render:function(){var e="<input class='dhx_readonly' type='text' readonly='true'>",t=scheduler.config,s=this.date.date_part(scheduler._currentDate()),a=1440,r=0;
+t.limit_time_select&&(r=60*t.first_hour,a=60*t.last_hour+1),s.setHours(r/60),e+=" <select>";for(var d=r;a>d;d+=1*this.config.time_step){var n=this.templates.time_picker(s);e+="<option value='"+d+"'>"+n+"</option>",s=this.date.add(s,this.config.time_step,"minute")}e+="</select>";scheduler.config.full_day;return"<div style='height:30px;padding-top:0; font-size:inherit;' class='dhx_section_time'>"+e+"<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>"+e+"</div>"},set_value:function(e,t,s){function a(e,t,s){l(e,t,s),e.value=scheduler.templates.calendar_time(t),e._date=scheduler.date.date_part(new Date(t))
+}var r,d,n=e.getElementsByTagName("input"),i=e.getElementsByTagName("select"),l=function(e,t,s){e.onclick=function(){scheduler.destroyCalendar(null,!0),scheduler.renderCalendar({position:e,date:new Date(this._date),navigation:!0,handler:function(t){e.value=scheduler.templates.calendar_time(t),e._date=new Date(t),scheduler.destroyCalendar(),scheduler.config.event_duration&&scheduler.config.auto_end_date&&0===s&&c()}})}};if(scheduler.config.full_day){if(!e._full_day){var o="<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> "+scheduler.locale.labels.full_day+"&nbsp;</label></input>";
+scheduler.config.wide_form||(o=e.previousSibling.innerHTML+o),e.previousSibling.innerHTML=o,e._full_day=!0}var _=e.previousSibling.getElementsByTagName("input")[0],h=0===scheduler.date.time_part(s.start_date)&&0===scheduler.date.time_part(s.end_date);_.checked=h,i[0].disabled=_.checked,i[1].disabled=_.checked,_.onclick=function(){if(_.checked===!0){var t={};scheduler.form_blocks.calendar_time.get_value(e,t),r=scheduler.date.date_part(t.start_date),d=scheduler.date.date_part(t.end_date),(+d==+r||+d>=+r&&(0!==s.end_date.getHours()||0!==s.end_date.getMinutes()))&&(d=scheduler.date.add(d,1,"day"))
+}var l=r||s.start_date,o=d||s.end_date;a(n[0],l),a(n[1],o),i[0].value=60*l.getHours()+l.getMinutes(),i[1].value=60*o.getHours()+o.getMinutes(),i[0].disabled=_.checked,i[1].disabled=_.checked}}if(scheduler.config.event_duration&&scheduler.config.auto_end_date){var c=function(){r=scheduler.date.add(n[0]._date,i[0].value,"minute"),d=new Date(r.getTime()+60*scheduler.config.event_duration*1e3),n[1].value=scheduler.templates.calendar_time(d),n[1]._date=scheduler.date.date_part(new Date(d)),i[1].value=60*d.getHours()+d.getMinutes()
+};i[0].onchange=c}a(n[0],s.start_date,0),a(n[1],s.end_date,1),l=function(){},i[0].value=60*s.start_date.getHours()+s.start_date.getMinutes(),i[1].value=60*s.end_date.getHours()+s.end_date.getMinutes()},get_value:function(e,t){var s=e.getElementsByTagName("input"),a=e.getElementsByTagName("select");return t.start_date=scheduler.date.add(s[0]._date,a[0].value,"minute"),t.end_date=scheduler.date.add(s[1]._date,a[1].value,"minute"),t.end_date<=t.start_date&&(t.end_date=scheduler.date.add(t.start_date,scheduler.config.time_step,"minute")),{start_date:new Date(t.start_date),end_date:new Date(t.end_date)}
+},focus:function(){}},scheduler.linkCalendar=function(e,t){var s=function(){var s=scheduler._date,a=new Date(s.valueOf());return t&&(a=t(a)),a.setDate(1),scheduler.updateCalendar(e,a),!0};scheduler.attachEvent("onViewChange",s),scheduler.attachEvent("onXLE",s),scheduler.attachEvent("onEventAdded",s),scheduler.attachEvent("onEventChanged",s),scheduler.attachEvent("onAfterEventDelete",s),s()},scheduler._markCalendarCurrentDate=function(e){var t=scheduler._date,s=scheduler._mode,a=scheduler.date.month_start(new Date(e._date)),r=scheduler.date.add(a,1,"month");
+if("day"==s||this._props&&this._props[s])a.valueOf()<=t.valueOf()&&r>t&&scheduler.markCalendar(e,t,"dhx_calendar_click");else if("week"==s)for(var d=scheduler.date.week_start(new Date(t.valueOf())),n=0;7>n;n++)a.valueOf()<=d.valueOf()&&r>d&&scheduler.markCalendar(e,d,"dhx_calendar_click"),d=scheduler.date.add(d,1,"day")},scheduler.attachEvent("onEventCancel",function(){scheduler.destroyCalendar(null,!0)});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_minical.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_monthheight.js b/codebase/ext/dhtmlxscheduler_monthheight.js
new file mode 100644
index 0000000..f493b7d
--- /dev/null
+++ b/codebase/ext/dhtmlxscheduler_monthheight.js
@@ -0,0 +1,10 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTemplatesReady",function(){scheduler.xy.scroll_width=0;var e=scheduler.render_view_data;scheduler.render_view_data=function(){var t=this._els.dhx_cal_data[0];t.firstChild._h_fix=!0,e.apply(scheduler,arguments);var s=parseInt(t.style.height);t.style.height="1px",t.style.height=t.scrollHeight+"px",this._obj.style.height=this._obj.clientHeight+t.scrollHeight-s+"px"};var t=scheduler._reset_month_scale;scheduler._reset_month_scale=function(e,s,a){var r={clientHeight:100};t.apply(scheduler,[r,s,a]),e.innerHTML=r.innerHTML
+}});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_monthheight.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_multisection.js b/codebase/ext/dhtmlxscheduler_multisection.js
new file mode 100644
index 0000000..47df7c1
--- /dev/null
+++ b/codebase/ext/dhtmlxscheduler_multisection.js
@@ -0,0 +1,16 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.config.multisection=!0,scheduler.config.section_delemiter=",",scheduler.attachEvent("onSchedulerReady",function(){var e=scheduler._update_unit_section;scheduler._update_unit_section=function(t){return scheduler._update_sections(t,e)};var t=scheduler._update_timeline_section;scheduler._update_timeline_section=function(e){return scheduler._update_sections(e,t)},scheduler.isMultisectionEvent=function(e){if(e&&this._get_multisection_view()){var t=this._get_event_sections(e);return t.length>1
+}return!1},scheduler._get_event_sections=function(e){var t=this._get_section_property(),s=e[t]||"";return this._parse_event_sections(s)},scheduler._parse_event_sections=function(e){return e instanceof Array?e:e.toString().split(scheduler.config.section_delemiter)},scheduler._register_copies_array=function(e){for(var t=0;t<e.length;t++)this._register_copy(e[t])},scheduler._register_copy=function(e){this._multisection_copies[e.id]||(this._multisection_copies[e.id]={});var t=e[this._get_section_property()],s=this._multisection_copies[e.id];
+s[t]||(s[t]=e)},scheduler._get_copied_event=function(e,t){if(!this._multisection_copies[e])return null;if(this._multisection_copies[e][t])return this._multisection_copies[e][t];var s=this._multisection_copies[e];if(scheduler._drag_event&&scheduler._drag_event._orig_section&&s[scheduler._drag_event._orig_section])return s[scheduler._drag_event._orig_section];var r=1/0,a=null;for(var i in s)s[i]._sorder<r&&(a=s[i],r=s[i]._sorder);return a},scheduler._clear_copied_events=function(){this._multisection_copies={}
+},scheduler._clear_copied_events(),scheduler._split_events=function(e){var t=[],s=this._get_multisection_view(),r=this._get_section_property();if(s)for(var a=0;a<e.length;a++){var i=this._get_event_sections(e[a]);if(i.length>1){for(var n=0;n<i.length;n++)if("undefined"!=typeof s.order[i[n]]){var d=this._lame_copy({},e[a]);d[r]=i[n],t.push(d)}}else t.push(e[a])}else t=e;return t},scheduler._get_multisection_view=function(){return this.config.multisection?scheduler._get_section_view():!1};var s=scheduler.get_visible_events;
+scheduler.get_visible_events=function(){this._clear_copied_events();{var e=s.apply(this,arguments);this._get_multisection_view()}return this._get_multisection_view()&&(e=this._split_events(e),this._register_copies_array(e)),e},scheduler._rendered_events={};var r=scheduler.render_view_data;scheduler.render_view_data=function(e,t){return this._get_multisection_view()&&e&&(e=this._split_events(e),this._restore_render_flags(e)),r.apply(this,[e,t])},scheduler._restore_render_flags=function(e){for(var t=this._get_section_property(),s=0;s<e.length;s++){var r=e[s],a=scheduler._get_copied_event(r.id,r[t]);
+if(a)for(var i in a)0===i.indexOf("_")&&(r[i]=a[i])}},scheduler._update_sections=function(e,t){var s=e.view,r=e.event,a=e.pos;if(scheduler.isMultisectionEvent(r)){if(scheduler._drag_event._orig_section||(scheduler._drag_event._orig_section=a.section),scheduler._drag_event._orig_section!=a.section){var i=s.order[a.section]-s.order[scheduler._drag_event._orig_section];if(i){for(var n=this._get_event_sections(r),d=[],l=!0,o=0;o<n.length;o++){var _=scheduler._shift_sections(s,n[o],i);if(null===_){d=n,l=!1;
+break}d[o]=_}l&&(scheduler._drag_event._orig_section=a.section),r[scheduler._get_section_property()]=d.join(",")}}}else t.apply(scheduler,[e])},scheduler._shift_sections=function(e,t,s){for(var r in e.order)if(e.order[r]-e.order[t]==s)return r;return null};var a=scheduler._get_blocked_zones;scheduler._get_blocked_zones=function(e,t,s,r,i){if(t&&this.config.multisection){t=this._parse_event_sections(t);for(var n=[],d=0;d<t.length;d++)n=n.concat(a.apply(this,[e,t[d],s,r,i]));return n}return a.apply(this,arguments)
+};var i=scheduler._check_sections_collision;scheduler._check_sections_collision=function(e,t){if(this.config.multisection&&this._get_section_view()){e=this._split_events([e]),t=this._split_events([t]);for(var s=!1,r=0,a=e.length;a>r&&!s;r++)for(var n=0,d=t.length;d>n;n++)if(i.apply(this,[e[r],t[n]])){s=!0;break}return s}return i.apply(this,arguments)}});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_multisection.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_multiselect.js b/codebase/ext/dhtmlxscheduler_multiselect.js
index deb4d29..5e80dca 100644
--- a/codebase/ext/dhtmlxscheduler_multiselect.js
+++ b/codebase/ext/dhtmlxscheduler_multiselect.js
@@ -1,7 +1,11 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.form_blocks.multiselect={render:function(d){for(var a="<div class='dhx_multi_select_"+d.name+"' style='overflow: auto; height: "+d.height+"px; position: relative;' >",b=0;b<d.options.length;b++)a+="<label><input type='checkbox' value='"+d.options[b].key+"'/>"+d.options[b].label+"</label>",convertStringToBoolean(d.vertical)&&(a+="<br/>");a+="</div>";return a},set_value:function(d,a,b,c){function h(b){for(var c=d.getElementsByTagName("input"),a=0;a<c.length;a++)c[a].checked=!!b[c[a].value]}
-for(var f=d.getElementsByTagName("input"),e=0;e<f.length;e++)f[e].checked=!1;f=[];if(b[c.map_to]){for(var i=b[c.map_to].split(","),e=0;e<i.length;e++)f[i[e]]=!0;h(f)}else if(!scheduler._new_event&&c.script_url){var g=document.createElement("div");g.className="dhx_loading";g.style.cssText="position: absolute; top: 40%; left: 40%;";d.appendChild(g);dhtmlxAjax.get(c.script_url+"?dhx_crosslink_"+c.map_to+"="+b.id+"&uid="+scheduler.uid(),function(b){for(var a=b.doXPath("//data/item"),e=[],f=0;f<a.length;f++)e[a[f].getAttribute(c.map_to)]=
-!0;h(e);d.removeChild(g)})}},get_value:function(d){for(var a=[],b=d.getElementsByTagName("input"),c=0;c<b.length;c++)b[c].checked&&a.push(b[c].value);return a.join(",")},focus:function(){}};
+scheduler.form_blocks.multiselect={render:function(e){for(var t="<div class='dhx_multi_select_"+e.name+"' style='overflow: auto; height: "+e.height+"px; position: relative;' >",s=0;s<e.options.length;s++)t+="<label><input type='checkbox' value='"+e.options[s].key+"'/>"+e.options[s].label+"</label>",convertStringToBoolean(e.vertical)&&(t+="<br/>");return t+="</div>"},set_value:function(e,t,s,r){function a(t){for(var s=e.getElementsByTagName("input"),r=0;r<s.length;r++)s[r].checked=!!t[s[r].value]}for(var i=e.getElementsByTagName("input"),n=0;n<i.length;n++)i[n].checked=!1;
+var d=[];if(s[r.map_to]){for(var l=(s[r.map_to]+"").split(","),n=0;n<l.length;n++)d[l[n]]=!0;a(d)}else{if(scheduler._new_event||!r.script_url)return;var o=document.createElement("div");o.className="dhx_loading",o.style.cssText="position: absolute; top: 40%; left: 40%;",e.appendChild(o),dhtmlxAjax.get(r.script_url+"?dhx_crosslink_"+r.map_to+"="+s.id+"&uid="+scheduler.uid(),function(t){for(var s=t.doXPath("//data/item"),i=[],n=0;n<s.length;n++)i[s[n].getAttribute(r.map_to)]=!0;a(i),e.removeChild(o)
+})}},get_value:function(e){for(var t=[],s=e.getElementsByTagName("input"),r=0;r<s.length;r++)s[r].checked&&t.push(s[r].value);return t.join(",")},focus:function(){}};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_multiselect.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_multisource.js b/codebase/ext/dhtmlxscheduler_multisource.js
index fd8b767..3cb4d37 100644
--- a/codebase/ext/dhtmlxscheduler_multisource.js
+++ b/codebase/ext/dhtmlxscheduler_multisource.js
@@ -1,5 +1,9 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){function e(a){var b=function(){};b.prototype=a;return b}var d=scheduler._load;scheduler._load=function(a,b){a=a||this._load_url;if(typeof a=="object")for(var f=e(this._loaded),c=0;c<a.length;c++)this._loaded=new f,d.call(this,a[c],b);else d.apply(this,arguments)}})();
+!function(){function e(e){var t=function(){};return t.prototype=e,t}var t=scheduler._load;scheduler._load=function(s,r){if(s=s||this._load_url,"object"==typeof s)for(var a=e(this._loaded),i=0;i<s.length;i++)this._loaded=new a,t.call(this,s[i],r);else t.apply(this,arguments)}}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_multisource.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_mvc.js b/codebase/ext/dhtmlxscheduler_mvc.js
index 096fb30..f0a8c4d 100644
--- a/codebase/ext/dhtmlxscheduler_mvc.js
+++ b/codebase/ext/dhtmlxscheduler_mvc.js
@@ -1,7 +1,12 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){function d(a){var b={},c;for(c in a)c.indexOf("_")!==0&&(b[c]=a[c]);return b}function f(){clearTimeout(e);e=setTimeout(function(){scheduler.updateView()},1)}var e;scheduler.backbone=function(){events.bind("reset",function(){scheduler.clearAll();scheduler.parse(events.toJSON(),"json")});events.bind("change",function(a,b){if(b.changes&&b.changes.id){var c=a.previous("id");scheduler.changeEventId(c,a.id)}var d=a.id;scheduler._init_event(scheduler._events[d]=a.toJSON());f()});events.bind("remove",
-function(a){scheduler._events[a.id]&&scheduler.deleteEvent(a.id)});events.bind("add",function(a){if(!scheduler._events[a.id]){var b=a.toJSON();scheduler._init_event(b);scheduler.addEvent(b)}});scheduler.attachEvent("onEventCreated",function(a){var b=new events.model(scheduler.getEvent(a));scheduler._events[a]=b.toJSON();return!0});scheduler.attachEvent("onEventAdded",function(a){events.get(a)||events.add(new events.model(d(scheduler.getEvent(a))));return!0});scheduler.attachEvent("onEventChanged",
-function(a){var b=events.get(a),c=d(scheduler.getEvent(a));b.set(c);return!0});scheduler.attachEvent("onEventDeleted",function(a){events.get(a)&&events.remove(a);return!0})}})();
+!function(){function e(e){var t={};for(var s in e)0!==s.indexOf("_")&&(t[s]=e[s]);return i.use_id||delete t.id,t}function t(){clearTimeout(n),n=setTimeout(function(){scheduler.updateView()},1)}function s(e){e._loading=!0,e._not_render=!0,e.callEvent("onXLS",[])}function r(e){e._not_render=!1,e._render_wait&&e.render_view_data(),e._loading=!1,e.callEvent("onXLE",[])}function a(e){return i.use_id?e.id:e.cid}var n,i={use_id:!1};scheduler.backbone=function(n,d){function l(){o.length&&(scheduler.parse(o,"json"),o=[])
+}d&&(i=d),n.bind("change",function(e){var s=a(e),r=scheduler._events[s]=e.toJSON();r.id=s,scheduler._init_event(r),t()}),n.bind("remove",function(e){var t=a(e);scheduler._events[t]&&scheduler.deleteEvent(t)});var o=[];n.bind("add",function(e){var t=a(e);if(!scheduler._events[t]){var s=e.toJSON();s.id=t,scheduler._init_event(s),o.push(s),1==o.length&&setTimeout(l,1)}}),n.bind("request",function(e){e instanceof Backbone.Collection&&s(scheduler)}),n.bind("sync",function(e){e instanceof Backbone.Collection&&r(scheduler)
+}),n.bind("error",function(e){e instanceof Backbone.Collection&&r(scheduler)}),scheduler.attachEvent("onEventCreated",function(e){var t=new n.model(scheduler.getEvent(e));return scheduler._events[e]=t.toJSON(),scheduler._events[e].id=e,!0}),scheduler.attachEvent("onEventAdded",function(t){if(!n.get(t)){var s=e(scheduler.getEvent(t)),r=new n.model(s),i=a(r);i!=t&&this.changeEventId(t,i),n.add(r),n.trigger("scheduler:add",r)}return!0}),scheduler.attachEvent("onEventChanged",function(t){var s=n.get(t),r=e(scheduler.getEvent(t));
+return s.set(r),n.trigger("scheduler:change",s),!0}),scheduler.attachEvent("onEventDeleted",function(e){var t=n.get(e);return t&&(n.trigger("scheduler:remove",t),n.remove(e)),!0})}}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_mvc.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_offline.js b/codebase/ext/dhtmlxscheduler_offline.js
index c69e356..f0727a4 100644
--- a/codebase/ext/dhtmlxscheduler_offline.js
+++ b/codebase/ext/dhtmlxscheduler_offline.js
@@ -1,8 +1,12 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.load=function(a,c,b){if(typeof c=="string")var f=this._process=c,c=b;this._load_url=a;this._after_call=c;a.$proxy?a.load(this,typeof f=="string"?f:null):this._load(a,this._date)};scheduler._dp_init_backup=scheduler._dp_init;
-scheduler._dp_init=function(a){a._sendData=function(c,b){if(c){if(!this.callEvent("onBeforeDataSending",b?[b,this.getState(b),c]:[null,null,c]))return!1;b&&(this._in_progress[b]=(new Date).valueOf());if(this.serverProcessor.$proxy){var a=this._tMode!="POST"?"get":"post",d=[],e;for(e in c)d.push({id:e,data:c[e],operation:this.getState(e)});this.serverProcessor._send(d,a,this)}else{var h=new dtmlXMLLoaderObject(this.afterUpdate,this,!0),g=this.serverProcessor+(this._user?getUrlSymbol(this.serverProcessor)+
-["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&"):"");this._tMode!="POST"?h.loadXML(g+(g.indexOf("?")!=-1?"&":"?")+this.serialize(c,b)):h.loadXML(g,!0,this.serialize(c,b));this._waitMode++}}};a._updatesToParams=function(c){for(var b={},a=0;a<c.length;a++)b[c[a].id]=c[a].data;return this.serialize(b)};a._processResult=function(a,b,f){if(f.status!=200)for(var d in this._in_progress){var e=this.getState(d);this.afterUpdateCallback(d,d,e,null)}else b=new dtmlXMLLoaderObject(function(){},
-this,!0),b.loadXMLString(a),b.xmlDoc=f,this.afterUpdate(this,null,null,null,b)};this._dp_init_backup(a)};if(window.dataProcessor)dataProcessor.prototype.init=function(a){this.init_original(a);a._dataprocessor=this;this.setTransactionMode("POST",!0);this.serverProcessor.$proxy||(this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true")};
+scheduler.load=function(e,t){var s;return"string"==typeof t&&(this._process=t,s=t,t=arguments[2]),this._load_url=e,this._after_call=t,e.$proxy?void e.load(this,"string"==typeof s?s:null):void this._load(e,this._date)},scheduler._dp_init_backup=scheduler._dp_init,scheduler._dp_init=function(e){e._sendData=function(e,t){if(e){if(!this.callEvent("onBeforeDataSending",t?[t,this.getState(t),e]:[null,null,e]))return!1;if(t&&(this._in_progress[t]=(new Date).valueOf()),this.serverProcessor.$proxy){var s="POST"!=this._tMode?"get":"post",r=[];
+for(var a in e)r.push({id:a,data:e[a],operation:this.getState(a)});return void this.serverProcessor._send(r,s,this)}var i=new dtmlXMLLoaderObject(this.afterUpdate,this,!0),n=this.serverProcessor+(this._user?getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&"):"");"POST"!=this._tMode?i.loadXML(n+(-1!=n.indexOf("?")?"&":"?")+this.serialize(e,t)):i.loadXML(n,!0,this.serialize(e,t)),this._waitMode++}},e._updatesToParams=function(e){for(var t={},s=0;s<e.length;s++)t[e[s].id]=e[s].data;
+return this.serialize(t)},e._processResult=function(e,t,s){if(200==s.status)t=new dtmlXMLLoaderObject(function(){},this,!0),t.loadXMLString(e),t.xmlDoc=s,this.afterUpdate(this,null,null,null,t);else for(var r in this._in_progress){var a=this.getState(r);this.afterUpdateCallback(r,r,a,null)}},this._dp_init_backup(e)},window.dataProcessor&&(dataProcessor.prototype.init=function(e){this.init_original(e),e._dataprocessor=this,this.setTransactionMode("POST",!0),this.serverProcessor.$proxy||(this.serverProcessor+=(-1!=this.serverProcessor.indexOf("?")?"&":"?")+"editing=true")
+});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_offline.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_outerdrag.js b/codebase/ext/dhtmlxscheduler_outerdrag.js
index 9330c60..f2f8ea4 100644
--- a/codebase/ext/dhtmlxscheduler_outerdrag.js
+++ b/codebase/ext/dhtmlxscheduler_outerdrag.js
@@ -1,7 +1,11 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.attachEvent("onTemplatesReady",function(){var c=new dhtmlDragAndDropObject,f=c.stopDrag,d;c.stopDrag=function(b){d=b||event;return f.apply(this,arguments)};c.addDragLanding(scheduler._els.dhx_cal_data[0],{_drag:function(b,c,f,h){if(!scheduler.checkEvent("onBeforeExternalDragIn")||scheduler.callEvent("onBeforeExternalDragIn",[b,c,f,h,d])){var i=scheduler.attachEvent("onEventCreated",function(a){if(!scheduler.callEvent("onExternalDragIn",[a,b,d]))this._drag_mode=this._drag_id=null,this.deleteEvent(a)}),
-g=scheduler.getActionData(d),a={start_date:new Date(g.date)};if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){var e=scheduler.matrix[scheduler._mode];a[e.y_property]=g.section;var j=scheduler._locate_cell_timeline(d);a.start_date=e._trace_x[j.x];a.end_date=scheduler.date.add(a.start_date,e.x_step,e.x_unit)}if(scheduler._props&&scheduler._props[scheduler._mode])a[scheduler._props[scheduler._mode].map_to]=g.section;scheduler.addEventNow(a);scheduler.detachEvent(i)}},_dragIn:function(b){return b},
-_dragOut:function(){return this}})});
+scheduler.attachEvent("onTemplatesReady",function(){var e,t=new dhtmlDragAndDropObject,s=t.stopDrag;t.stopDrag=function(t){return e=t||event,s.apply(this,arguments)},t.addDragLanding(scheduler._els.dhx_cal_data[0],{_drag:function(t,s,r,a){if(!scheduler.checkEvent("onBeforeExternalDragIn")||scheduler.callEvent("onBeforeExternalDragIn",[t,s,r,a,e])){var n=scheduler.attachEvent("onEventCreated",function(s){scheduler.callEvent("onExternalDragIn",[s,t,e])||(this._drag_mode=this._drag_id=null,this.deleteEvent(s))
+}),i=scheduler.getActionData(e),d={start_date:new Date(i.date)};if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){var l=scheduler.matrix[scheduler._mode];d[l.y_property]=i.section;var o=scheduler._locate_cell_timeline(e);d.start_date=l._trace_x[o.x],d.end_date=scheduler.date.add(d.start_date,l.x_step,l.x_unit)}scheduler._props&&scheduler._props[scheduler._mode]&&(d[scheduler._props[scheduler._mode].map_to]=i.section),scheduler.addEventNow(d),scheduler.detachEvent(n)}},_dragIn:function(e){return e
+},_dragOut:function(){return this}})});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_outerdrag.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_pdf.js b/codebase/ext/dhtmlxscheduler_pdf.js
index 00ab782..fdefa02 100644
--- a/codebase/ext/dhtmlxscheduler_pdf.js
+++ b/codebase/ext/dhtmlxscheduler_pdf.js
@@ -1,19 +1,23 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
*/
-(function(){function g(a){return a.replace(newline_regexp,"\n").replace(html_regexp,"")}function y(a,e){a=parseFloat(a);e=parseFloat(e);isNaN(e)||(a-=e);var c=s(a),a=a-c.width+c.cols*h;return isNaN(a)?"auto":100*a/h}function B(a,e,c){a=parseFloat(a);e=parseFloat(e);!isNaN(e)&&c&&(a-=e);var d=s(a),a=a-d.width+d.cols*h;return isNaN(a)?"auto":100*a/(h-(!isNaN(e)?e:0))}function s(a){for(var e=0,c=scheduler._els.dhx_cal_header[0].childNodes,d=c[1]?c[1].childNodes:c[0].childNodes,b=0;b<d.length;b++){var f=
-d[b].style?d[b]:d[b].parentNode,g=parseFloat(f.style.width);if(a>g)a-=g+1,e+=g+1;else break}return{width:e,cols:b}}function z(a){a=parseFloat(a);return isNaN(a)?"auto":100*a/n}function k(a,e){return(window.getComputedStyle?window.getComputedStyle(a,null)[e]:a.currentStyle?a.currentStyle[e]:null)||""}function F(a,e){for(var c=parseInt(a.style.left,10),d=0;d<scheduler._cols.length;d++)if(c-=scheduler._cols[d],c<0)return d;return e}function G(a,e){for(var c=parseInt(a.style.top,10),d=0;d<scheduler._colsS.heights.length;d++)if(scheduler._colsS.heights[d]>
-c)return d;return e}function H(a){return a?"<"+a+">":""}function q(a){return a?"</"+a+">":""}function t(a,e,c,d){var b="<"+a+" profile='"+e+"'";c&&(b+=" header='"+c+"'");d&&(b+=" footer='"+d+"'");b+=">";return b}function u(){var a="",e=scheduler._mode;scheduler.matrix&&scheduler.matrix[scheduler._mode]&&(e=scheduler.matrix[scheduler._mode].render=="cell"?"matrix":"timeline");a+="<scale mode='"+e+"' today='"+scheduler._els.dhx_cal_date[0].innerHTML+"'>";if(scheduler._mode=="week_agenda")for(var c=
-scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV"),d=0;d<c.length;d++)c[d].className=="dhx_wa_scale_bar"&&(a+="<column>"+g(c[d].innerHTML)+"</column>");else if(scheduler._mode=="agenda"||scheduler._mode=="map")c=scheduler._els.dhx_cal_header[0].childNodes[0].childNodes,a+="<column>"+g(c[0].innerHTML)+"</column><column>"+g(c[1].innerHTML)+"</column>";else if(scheduler._mode=="year"){c=scheduler._els.dhx_cal_data[0].childNodes;for(d=0;d<c.length;d++)a+="<month label='"+g(c[d].childNodes[0].innerHTML)+
-"'>",a+=r(c[d].childNodes[1].childNodes),a+=v(c[d].childNodes[2]),a+="</month>"}else{a+="<x>";c=scheduler._els.dhx_cal_header[0].childNodes;a+=r(c);a+="</x>";var b=scheduler._els.dhx_cal_data[0];if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){a+="<y>";for(d=0;d<b.firstChild.rows.length;d++){var f=b.firstChild.rows[d];a+="<row><![CDATA["+g(f.cells[0].innerHTML)+"]]\></row>"}a+="</y>";n=b.firstChild.rows[0].cells[0].offsetHeight}else if(b.firstChild.tagName=="TABLE")a+=v(b);else{for(b=b.childNodes[b.childNodes.length-
-1];b.className.indexOf("dhx_scale_holder")==-1;)b=b.previousSibling;b=b.childNodes;a+="<y>";for(d=0;d<b.length;d++)a+="\n<row><![CDATA["+g(b[d].innerHTML)+"]]\></row>";a+="</y>";n=b[0].offsetHeight}}a+="</scale>";return a}function v(a){for(var e="",c=a.firstChild.rows,d=0;d<c.length;d++){for(var b=[],f=0;f<c[d].cells.length;f++)b.push(c[d].cells[f].firstChild.innerHTML);e+="\n<row height='"+a.firstChild.rows[d].cells[0].offsetHeight+"'><![CDATA["+g(b.join("|"))+"]]\></row>";n=a.firstChild.rows[0].cells[0].offsetHeight}return e}
-function r(a){var e="";if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){if(scheduler.matrix[scheduler._mode].second_scale)var c=a[1].childNodes;a=a[0].childNodes}for(var d=0;d<a.length;d++)e+="\n<column><![CDATA["+g(a[d].innerHTML)+"]]\></column>";h=a[0].offsetWidth;if(c)for(var b=0,f=a[0].offsetWidth,o=1,d=0;d<c.length;d++)e+="\n<column second_scale='"+o+"'><![CDATA["+g(c[d].innerHTML)+"]]\></column>",b+=c[d].offsetWidth,b>=f&&(f+=a[o]?a[o].offsetWidth:0,o++),h=c[0].offsetWidth;return e}function C(a){var e=
-"",c=scheduler._rendered,d=scheduler.matrix&&scheduler.matrix[scheduler._mode];if(scheduler._mode=="agenda"||scheduler._mode=="map")for(var b=0;b<c.length;b++)e+="<event><head><![CDATA["+g(c[b].childNodes[0].innerHTML)+"]]\></head><body><![CDATA["+g(c[b].childNodes[2].innerHTML)+"]]\></body></event>";else if(scheduler._mode=="week_agenda")for(b=0;b<c.length;b++)e+="<event day='"+c[b].parentNode.getAttribute("day")+"'><body>"+g(c[b].innerHTML)+"</body></event>";else if(scheduler._mode=="year"){c=scheduler.get_visible_events();
-for(b=0;b<c.length;b++){var f=c[b].start_date;if(f.valueOf()<scheduler._min_date.valueOf())f=scheduler._min_date;for(;f<c[b].end_date;){var o=f.getMonth()+12*(f.getFullYear()-scheduler._min_date.getFullYear())-scheduler.week_starts._month,p=scheduler.week_starts[o]+f.getDate()-1,j=a?k(scheduler._get_year_cell(f),"color"):"",i=a?k(scheduler._get_year_cell(f),"backgroundColor"):"";e+="<event day='"+p%7+"' week='"+Math.floor(p/7)+"' month='"+o+"' backgroundColor='"+i+"' color='"+j+"'></event>";f=scheduler.date.add(f,
-1,"day");if(f.valueOf()>=scheduler._max_date.valueOf())break}}}else if(d&&d.render=="cell"){c=scheduler._els.dhx_cal_data[0].getElementsByTagName("TD");for(b=0;b<c.length;b++)j=a?k(c[b],"color"):"",i=a?k(c[b],"backgroundColor"):"",e+="\n<event><body backgroundColor='"+i+"' color='"+j+"'><![CDATA["+g(c[b].innerHTML)+"]]\></body></event>"}else for(b=0;b<c.length;b++){var l,h;if(scheduler.matrix&&scheduler.matrix[scheduler._mode])l=y(c[b].style.left),h=y(c[b].offsetWidth)-1;else{var D=scheduler.config.use_select_menu_space?
-0:26;l=B(c[b].style.left,D,!0);h=B(c[b].style.width,D)-1}if(!isNaN(h*1)){var m=z(c[b].style.top),q=z(c[b].style.height),A=c[b].className.split(" ")[0].replace("dhx_cal_","");if(A!=="dhx_tooltip_line"){var w=scheduler.getEvent(c[b].getAttribute("event_id"));if(w){var p=w._sday,x=w._sweek,s=w._length||0;if(scheduler._mode=="month")q=parseInt(c[b].offsetHeight,10),m=parseInt(c[b].style.top,10)-22,p=F(c[b],p),x=G(c[b],x);else if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){var p=0,t=c[b].parentNode.parentNode.parentNode,
-x=t.rowIndex,u=n;n=c[b].parentNode.offsetHeight;m=z(c[b].style.top);m-=m*0.2;n=u}else{if(c[b].parentNode==scheduler._els.dhx_cal_data[0])continue;var r=scheduler._els.dhx_cal_data[0].childNodes[0],v=parseFloat(r.className.indexOf("dhx_scale_holder")!=-1?r.style.left:0);l+=y(c[b].parentNode.style.left,v)}e+="\n<event week='"+x+"' day='"+p+"' type='"+A+"' x='"+l+"' y='"+m+"' width='"+h+"' height='"+q+"' len='"+s+"'>";A=="event"?(e+="<header><![CDATA["+g(c[b].childNodes[1].innerHTML)+"]]\></header>",
-j=a?k(c[b].childNodes[2],"color"):"",i=a?k(c[b].childNodes[2],"backgroundColor"):"",e+="<body backgroundColor='"+i+"' color='"+j+"'><![CDATA["+g(c[b].childNodes[2].innerHTML)+"]]\></body>"):(j=a?k(c[b],"color"):"",i=a?k(c[b],"backgroundColor"):"",e+="<body backgroundColor='"+i+"' color='"+j+"'><![CDATA["+g(c[b].innerHTML)+"]]\></body>");e+="</event>"}}}}return e}function E(a,e,c,d,b,f,g){var h=!1;b=="fullcolor"&&(h=!0,b="color");b=b||"color";html_regexp=RegExp("<[^>]*>","g");newline_regexp=RegExp("<br[^>]*>",
-"g");var j=scheduler.uid(),i=document.createElement("div");i.style.display="none";document.body.appendChild(i);i.innerHTML='<form id="'+j+'" method="post" target="_blank" action="'+d+'" accept-charset="utf-8" enctype="application/x-www-form-urlencoded"><input type="hidden" name="mycoolxmlbody"/> </form>';var l="";if(a){for(var k=scheduler._date,n=scheduler._mode,l=t("pages",b,f,g),m=new Date(a);+m<+e;m=scheduler.date.add(m,1,c))scheduler.setCurrentView(m,c),l+=H("page")+u().replace("\u2013","-")+
-C(h)+q("page");l+=q("pages");scheduler.setCurrentView(k,n)}else l=t("data",b,f,g)+u().replace("\u2013","-")+C(h)+q("data");document.getElementById(j).firstChild.value=encodeURIComponent(l);document.getElementById(j).submit();i.parentNode.removeChild(i)}var h,n;scheduler.toPDF=function(a,e,c,d){return E.apply(this,[null,null,null,a,e,c,d])};scheduler.toPDFRange=function(a,e,c,d,b,f,g){typeof a=="string"&&(a=scheduler.templates.api_date(a),e=scheduler.templates.api_date(e));return E.apply(this,arguments)}})();
+!function(){function e(e){return e.replace(y,"\n").replace(p,"")}function t(e,t){e=parseFloat(e),t=parseFloat(t),isNaN(t)||(e-=t);var r=s(e);return e=e-r.width+r.cols*g,isNaN(e)?"auto":100*e/g}function r(e,t,r){e=parseFloat(e),t=parseFloat(t),!isNaN(t)&&r&&(e-=t);var a=s(e);return e=e-a.width+a.cols*g,isNaN(e)?"auto":100*e/(g-(isNaN(t)?0:t))}function s(e){for(var t=0,r=scheduler._els.dhx_cal_header[0].childNodes,s=r[1]?r[1].childNodes:r[0].childNodes,a=0;a<s.length;a++){var n=s[a].style?s[a]:s[a].parentNode,i=parseFloat(n.style.width);
+if(!(e>i))break;e-=i+1,t+=i+1}return{width:t,cols:a}}function a(e){return e=parseFloat(e),isNaN(e)?"auto":100*e/m}function n(e,t){return(window.getComputedStyle?window.getComputedStyle(e,null)[t]:e.currentStyle?e.currentStyle[t]:null)||""}function i(e,t){for(var r=parseInt(e.style.left,10),s=0;s<scheduler._cols.length;s++)if(r-=scheduler._cols[s],0>r)return s;return t}function d(e,t){for(var r=parseInt(e.style.top,10),s=0;s<scheduler._colsS.heights.length;s++)if(scheduler._colsS.heights[s]>r)return s;
+return t}function l(e){return e?"<"+e+">":""}function o(e){return e?"</"+e+">":""}function _(e,t,r,s){var a="<"+e+" profile='"+t+"'";return r&&(a+=" header='"+r+"'"),s&&(a+=" footer='"+s+"'"),a+=">"}function h(){var t="",r=scheduler._mode;if(scheduler.matrix&&scheduler.matrix[scheduler._mode]&&(r="cell"==scheduler.matrix[scheduler._mode].render?"matrix":"timeline"),t+="<scale mode='"+r+"' today='"+scheduler._els.dhx_cal_date[0].innerHTML+"'>","week_agenda"==scheduler._mode)for(var s=scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV"),a=0;a<s.length;a++)"dhx_wa_scale_bar"==s[a].className&&(t+="<column>"+e(s[a].innerHTML)+"</column>");
+else if("agenda"==scheduler._mode||"map"==scheduler._mode){var s=scheduler._els.dhx_cal_header[0].childNodes[0].childNodes;t+="<column>"+e(s[0].innerHTML)+"</column><column>"+e(s[1].innerHTML)+"</column>"}else if("year"==scheduler._mode)for(var s=scheduler._els.dhx_cal_data[0].childNodes,a=0;a<s.length;a++)t+="<month label='"+e(s[a].childNodes[0].innerHTML)+"'>",t+=u(s[a].childNodes[1].childNodes),t+=c(s[a].childNodes[2]),t+="</month>";else{t+="<x>";var s=scheduler._els.dhx_cal_header[0].childNodes;
+t+=u(s),t+="</x>";var n=scheduler._els.dhx_cal_data[0];if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){t+="<y>";for(var a=0;a<n.firstChild.rows.length;a++){var i=n.firstChild.rows[a];t+="<row><![CDATA["+e(i.cells[0].innerHTML)+"]]></row>"}t+="</y>",m=n.firstChild.rows[0].cells[0].offsetHeight}else if("TABLE"==n.firstChild.tagName)t+=c(n);else{for(n=n.childNodes[n.childNodes.length-1];-1==n.className.indexOf("dhx_scale_holder");)n=n.previousSibling;n=n.childNodes,t+="<y>";for(var a=0;a<n.length;a++)t+="\n<row><![CDATA["+e(n[a].innerHTML)+"]]></row>";
+t+="</y>",m=n[0].offsetHeight}}return t+="</scale>"}function c(t){for(var r="",s=t.firstChild.rows,a=0;a<s.length;a++){for(var n=[],i=0;i<s[a].cells.length;i++)n.push(s[a].cells[i].firstChild.innerHTML);r+="\n<row height='"+t.firstChild.rows[a].cells[0].offsetHeight+"'><![CDATA["+e(n.join("|"))+"]]></row>",m=t.firstChild.rows[0].cells[0].offsetHeight}return r}function u(t){var r,s="";scheduler.matrix&&scheduler.matrix[scheduler._mode]&&(scheduler.matrix[scheduler._mode].second_scale&&(r=t[1].childNodes),t=t[0].childNodes);
+for(var a=0;a<t.length;a++)s+="\n<column><![CDATA["+e(t[a].innerHTML)+"]]></column>";if(g=t[0].offsetWidth,r)for(var n=0,i=t[0].offsetWidth,d=1,a=0;a<r.length;a++)s+="\n<column second_scale='"+d+"'><![CDATA["+e(r[a].innerHTML)+"]]></column>",n+=r[a].offsetWidth,n>=i&&(i+=t[d]?t[d].offsetWidth:0,d++),g=r[0].offsetWidth;return s}function f(s){var l="",o=scheduler._rendered,_=scheduler.matrix&&scheduler.matrix[scheduler._mode];if("agenda"==scheduler._mode||"map"==scheduler._mode)for(var h=0;h<o.length;h++)l+="<event><head><![CDATA["+e(o[h].childNodes[0].innerHTML)+"]]></head><body><![CDATA["+e(o[h].childNodes[2].innerHTML)+"]]></body></event>";
+else if("week_agenda"==scheduler._mode)for(var h=0;h<o.length;h++)l+="<event day='"+o[h].parentNode.getAttribute("day")+"'><body>"+e(o[h].innerHTML)+"</body></event>";else if("year"==scheduler._mode)for(var o=scheduler.get_visible_events(),h=0;h<o.length;h++){var c=o[h].start_date;for(c.valueOf()<scheduler._min_date.valueOf()&&(c=scheduler._min_date);c<o[h].end_date;){var u=c.getMonth()+12*(c.getFullYear()-scheduler._min_date.getFullYear())-scheduler.week_starts._month,f=scheduler.week_starts[u]+c.getDate()-1,v=s?n(scheduler._get_year_cell(c),"color"):"",g=s?n(scheduler._get_year_cell(c),"backgroundColor"):"";
+if(l+="<event day='"+f%7+"' week='"+Math.floor(f/7)+"' month='"+u+"' backgroundColor='"+g+"' color='"+v+"'></event>",c=scheduler.date.add(c,1,"day"),c.valueOf()>=scheduler._max_date.valueOf())break}}else if(_&&"cell"==_.render)for(var o=scheduler._els.dhx_cal_data[0].getElementsByTagName("TD"),h=0;h<o.length;h++){var v=s?n(o[h],"color"):"",g=s?n(o[h],"backgroundColor"):"";l+="\n<event><body backgroundColor='"+g+"' color='"+v+"'><![CDATA["+e(o[h].innerHTML)+"]]></body></event>"}else for(var h=0;h<o.length;h++){var p,y;
+if(scheduler.matrix&&scheduler.matrix[scheduler._mode])p=t(o[h].style.left),y=t(o[h].offsetWidth)-1;else{var x=scheduler.config.use_select_menu_space?0:26;p=r(o[h].style.left,x,!0),y=r(o[h].style.width,x)-1}if(!isNaN(1*y)){var b=a(o[h].style.top),w=a(o[h].style.height),E=o[h].className.split(" ")[0].replace("dhx_cal_","");if("dhx_tooltip_line"!==E){var k=scheduler.getEvent(o[h].getAttribute("event_id"));if(k){var f=k._sday,D=k._sweek,N=k._length||0;if("month"==scheduler._mode)w=parseInt(o[h].offsetHeight,10),b=parseInt(o[h].style.top,10)-scheduler.xy.month_head_height,f=i(o[h],f),D=d(o[h],D);
+else if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){f=0;var M=o[h].parentNode.parentNode.parentNode;D=M.rowIndex;var L=m;m=o[h].parentNode.offsetHeight,b=a(o[h].style.top),b-=.2*b,m=L}else{if(o[h].parentNode==scheduler._els.dhx_cal_data[0])continue;var C=scheduler._els.dhx_cal_data[0].childNodes[0],O=parseFloat(-1!=C.className.indexOf("dhx_scale_holder")?C.style.left:0);p+=t(o[h].parentNode.style.left,O)}if(l+="\n<event week='"+D+"' day='"+f+"' type='"+E+"' x='"+p+"' y='"+b+"' width='"+y+"' height='"+w+"' len='"+N+"'>","event"==E){l+="<header><![CDATA["+e(o[h].childNodes[1].innerHTML)+"]]></header>";
+var v=s?n(o[h].childNodes[2],"color"):"",g=s?n(o[h].childNodes[2],"backgroundColor"):"";l+="<body backgroundColor='"+g+"' color='"+v+"'><![CDATA["+e(o[h].childNodes[2].innerHTML)+"]]></body>"}else{var v=s?n(o[h],"color"):"",g=s?n(o[h],"backgroundColor"):"";l+="<body backgroundColor='"+g+"' color='"+v+"'><![CDATA["+e(o[h].innerHTML)+"]]></body>"}l+="</event>"}}}}return l}function v(e,t,r,s,a,n,i){var d=!1;"fullcolor"==a&&(d=!0,a="color"),a=a||"color";var c=scheduler.uid(),u=document.createElement("div");
+u.style.display="none",document.body.appendChild(u),u.innerHTML='<form id="'+c+'" method="post" target="_blank" action="'+s+'" accept-charset="utf-8" enctype="application/x-www-form-urlencoded"><input type="hidden" name="mycoolxmlbody"/> </form>';var v="";if(e){var g=scheduler._date,m=scheduler._mode;t=scheduler.date[r+"_start"](t),t=scheduler.date["get_"+r+"_end"]?scheduler.date["get_"+r+"_end"](t):scheduler.date.add(t,1,r),v=_("pages",a,n,i);for(var p=new Date(e);+t>+p;p=scheduler.date.add(p,1,r))scheduler.setCurrentView(p,r),v+=l("page")+h().replace("–","-")+f(d)+o("page");
+v+=o("pages"),scheduler.setCurrentView(g,m)}else v=_("data",a,n,i)+h().replace("–","-")+f(d)+o("data");document.getElementById(c).firstChild.value=encodeURIComponent(v),document.getElementById(c).submit(),u.parentNode.removeChild(u)}var g,m,p=new RegExp("<[^>]*>","g"),y=new RegExp("<br[^>]*>","g");scheduler.toPDF=function(e,t,r,s){return v.apply(this,[null,null,null,e,t,r,s])},scheduler.toPDFRange=function(e,t){return"string"==typeof e&&(e=scheduler.templates.api_date(e),t=scheduler.templates.api_date(t)),v.apply(this,arguments)
+}}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_pdf.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_quick_info.js b/codebase/ext/dhtmlxscheduler_quick_info.js
index 7eb6c6e..b8c7fa6 100644
--- a/codebase/ext/dhtmlxscheduler_quick_info.js
+++ b/codebase/ext/dhtmlxscheduler_quick_info.js
@@ -1,14 +1,17 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.config.icons_select=["icon_details","icon_delete"];scheduler.config.details_on_create=!0;scheduler.xy.menu_width=0;scheduler.attachEvent("onClick",function(b){scheduler.showQuickInfo(b);return!0});(function(){for(var b=["onEmptyClick","onViewChange","onLightbox","onBeforeEventDelete","onBeforeDrag"],a=function(){scheduler._hideQuickInfo();return!0},c=0;c<b.length;c++)scheduler.attachEvent(b[c],a)})();scheduler.templates.quick_info_title=function(b,a,c){return c.text.substr(0,50)};
-scheduler.templates.quick_info_content=function(b,a,c){return c.details||c.text};scheduler.templates.quick_info_date=function(b,a,c){return scheduler.isOneDayEvent(c)?scheduler.templates.day_date(b,a,c)+" "+scheduler.templates.event_header(b,a,c):scheduler.templates.week_date(b,a,c)};scheduler.showQuickInfo=function(b){if(b!=this._quick_info_box_id){this.hideQuickInfo(!0);var a=this._get_event_counter_part(b);if(a)this._quick_info_box=this._init_quick_info(a),this._fill_quick_data(b),this._show_quick_info(a)}};
-scheduler._hideQuickInfo=function(){scheduler.hideQuickInfo()};scheduler.hideQuickInfo=function(b){var a=this._quick_info_box;this._quick_info_box_id=0;if(a&&a.parentNode){if(scheduler.config.quick_info_detached)return a.parentNode.removeChild(a);a.style.right=="auto"?a.style.left="-350px":a.style.right="-350px";b&&a.parentNode.removeChild(a)}};dhtmlxEvent(window,"keydown",function(b){b.keyCode==27&&scheduler.hideQuickInfo()});
-scheduler._show_quick_info=function(b){var a=scheduler._quick_info_box;if(scheduler.config.quick_info_detached){scheduler._obj.appendChild(a);var c=a.offsetWidth,e=a.offsetHeight;a.style.left=b.left-b.dx*(c-b.width)+"px";a.style.top=b.top-(b.dy?e:-b.height)+"px"}else a.style.top=this.xy.scale_height+this.xy.nav_height+20+"px",b.dx==1?(a.style.right="auto",a.style.left="-300px",setTimeout(function(){a.style.left="-10px"},1)):(a.style.left="auto",a.style.right="-300px",setTimeout(function(){a.style.right=
-"-10px"},1)),a.className=a.className.replace("dhx_qi_left","").replace("dhx_qi_left","")+" dhx_qi_"+(b==1?"left":"right"),scheduler._obj.appendChild(a)};
-scheduler._init_quick_info=function(){if(!this._quick_info_box){var b=scheduler.xy,a=this._quick_info_box=document.createElement("div");a.className="dhx_cal_quick_info";scheduler.$testmode&&(a.className+=" dhx_no_animate");var c='<div class="dhx_cal_qi_title" style="height:'+b.quick_info_title+'px"><div class="dhx_cal_qi_tcontent"></div><div class="dhx_cal_qi_tdate"></div></div><div class="dhx_cal_qi_content"></div>';c+='<div class="dhx_cal_qi_controls" style="height:'+b.quick_info_buttons+'px">';
-for(var e=scheduler.config.icons_select,d=0;d<e.length;d++)c+='<div class="dhx_qi_big_icon '+e[d]+'" title="'+scheduler.locale.labels[e[d]]+"\"><div class='dhx_menu_icon "+e[d]+"'></div><div>"+scheduler.locale.labels[e[d]]+"</div></div>";c+="</div>";a.innerHTML=c;dhtmlxEvent(a,"click",function(a){a=a||event;scheduler._qi_button_click(a.target||a.srcElement)});scheduler.config.quick_info_detached&&dhtmlxEvent(scheduler._els.dhx_cal_data[0],"scroll",function(){scheduler.hideQuickInfo()})}return this._quick_info_box};
-scheduler._qi_button_click=function(b){var a=scheduler._quick_info_box;if(b&&b!=a){var c=b.className;if(c.indexOf("_icon")!=-1){var e=scheduler._quick_info_box_id;scheduler._click.buttons[c.split(" ")[1].replace("icon_","")](e)}else scheduler._qi_button_click(b.parentNode)}};
-scheduler._get_event_counter_part=function(b){for(var a=scheduler.getRenderedEvent(b),c=0,e=0,d=a;d&&d!=scheduler._obj;)c+=d.offsetLeft,e+=d.offsetTop-d.scrollTop,d=d.offsetParent;if(d){var f=c+a.offsetWidth/2>scheduler._x/2?1:0,g=e+a.offsetHeight/2>scheduler._y/2?1:0;return{left:c,top:e,dx:f,dy:g,width:a.offsetWidth,height:a.offsetHeight}}return 0};
-scheduler._fill_quick_data=function(b){var a=scheduler.getEvent(b),c=scheduler._quick_info_box;scheduler._quick_info_box_id=b;var e=c.firstChild.firstChild;e.innerHTML=scheduler.templates.quick_info_title(a.start_date,a.end_date,a);var d=e.nextSibling;d.innerHTML=scheduler.templates.quick_info_date(a.start_date,a.end_date,a);var f=c.firstChild.nextSibling;f.innerHTML=scheduler.templates.quick_info_content(a.start_date,a.end_date,a)};
+scheduler.config.icons_select=["icon_details","icon_delete"],scheduler.config.details_on_create=!0,scheduler.xy.menu_width=0,scheduler.attachEvent("onClick",function(e){return scheduler.showQuickInfo(e),!0}),function(){for(var e=["onEmptyClick","onViewChange","onLightbox","onBeforeEventDelete","onBeforeDrag"],t=function(){return scheduler._hideQuickInfo(),!0},s=0;s<e.length;s++)scheduler.attachEvent(e[s],t)}(),scheduler.templates.quick_info_title=function(e,t,s){return s.text.substr(0,50)},scheduler.templates.quick_info_content=function(e,t,s){return s.details||s.text
+},scheduler.templates.quick_info_date=function(e,t,s){return scheduler.isOneDayEvent(s)?scheduler.templates.day_date(e,t,s)+" "+scheduler.templates.event_header(e,t,s):scheduler.templates.week_date(e,t,s)},scheduler.showQuickInfo=function(e){if(e!=this._quick_info_box_id){this.hideQuickInfo(!0);var t=this._get_event_counter_part(e);t&&(this._quick_info_box=this._init_quick_info(t),this._fill_quick_data(e),this._show_quick_info(t))}},scheduler._hideQuickInfo=function(){scheduler.hideQuickInfo()},scheduler.hideQuickInfo=function(e){var t=this._quick_info_box;
+if(this._quick_info_box_id=0,t&&t.parentNode){if(scheduler.config.quick_info_detached)return t.parentNode.removeChild(t);"auto"==t.style.right?t.style.left="-350px":t.style.right="-350px",e&&t.parentNode.removeChild(t)}},dhtmlxEvent(window,"keydown",function(e){27==e.keyCode&&scheduler.hideQuickInfo()}),scheduler._show_quick_info=function(e){var t=scheduler._quick_info_box;if(scheduler.config.quick_info_detached){scheduler._obj.appendChild(t);var s=t.offsetWidth,r=t.offsetHeight;t.style.left=e.left-e.dx*(s-e.width)+"px",t.style.top=e.top-(e.dy?r:-e.height)+"px"
+}else t.style.top=this.xy.scale_height+this.xy.nav_height+20+"px",1==e.dx?(t.style.right="auto",t.style.left="-300px",setTimeout(function(){t.style.left="-10px"},1)):(t.style.left="auto",t.style.right="-300px",setTimeout(function(){t.style.right="-10px"},1)),t.className=t.className.replace("dhx_qi_left","").replace("dhx_qi_left","")+" dhx_qi_"+(1==e?"left":"right"),scheduler._obj.appendChild(t)},scheduler.attachEvent("onTemplatesReady",function(){if(scheduler.hideQuickInfo(),this._quick_info_box){var e=this._quick_info_box;
+e.parentNode&&e.parentNode.removeChild(e),this._quick_info_box=null}}),scheduler._quick_info_onscroll_handler=function(){scheduler.hideQuickInfo()},scheduler._init_quick_info=function(){if(!this._quick_info_box){var e=scheduler.xy,t=this._quick_info_box=document.createElement("div");t.className="dhx_cal_quick_info",scheduler.$testmode&&(t.className+=" dhx_no_animate");var s='<div class="dhx_cal_qi_title" style="height:'+e.quick_info_title+'px"><div class="dhx_cal_qi_tcontent"></div><div class="dhx_cal_qi_tdate"></div></div><div class="dhx_cal_qi_content"></div>';
+s+='<div class="dhx_cal_qi_controls" style="height:'+e.quick_info_buttons+'px">';for(var r=scheduler.config.icons_select,a=0;a<r.length;a++)s+='<div class="dhx_qi_big_icon '+r[a]+'" title="'+scheduler.locale.labels[r[a]]+"\"><div class='dhx_menu_icon "+r[a]+"'></div><div>"+scheduler.locale.labels[r[a]]+"</div></div>";s+="</div>",t.innerHTML=s,dhtmlxEvent(t,"click",function(e){e=e||event,scheduler._qi_button_click(e.target||e.srcElement)}),scheduler.config.quick_info_detached&&(scheduler._detachDomEvent(scheduler._els.dhx_cal_data[0],"scroll",scheduler._quick_info_onscroll_handler),dhtmlxEvent(scheduler._els.dhx_cal_data[0],"scroll",scheduler._quick_info_onscroll_handler))
+}return this._quick_info_box},scheduler._qi_button_click=function(e){var t=scheduler._quick_info_box;if(e&&e!=t){var s=e.className;if(-1!=s.indexOf("_icon")){var r=scheduler._quick_info_box_id;scheduler._click.buttons[s.split(" ")[1].replace("icon_","")](r)}else scheduler._qi_button_click(e.parentNode)}},scheduler._get_event_counter_part=function(e){for(var t=scheduler.getRenderedEvent(e),s=0,r=0,a=t;a&&a!=scheduler._obj;)s+=a.offsetLeft,r+=a.offsetTop-a.scrollTop,a=a.offsetParent;if(a){var n=s+t.offsetWidth/2>scheduler._x/2?1:0,i=r+t.offsetHeight/2>scheduler._y/2?1:0;
+return{left:s,top:r,dx:n,dy:i,width:t.offsetWidth,height:t.offsetHeight}}return 0},scheduler._fill_quick_data=function(e){var t=scheduler.getEvent(e),s=scheduler._quick_info_box;scheduler._quick_info_box_id=e;var r=s.firstChild.firstChild;r.innerHTML=scheduler.templates.quick_info_title(t.start_date,t.end_date,t);var a=r.nextSibling;a.innerHTML=scheduler.templates.quick_info_date(t.start_date,t.end_date,t);var n=s.firstChild.nextSibling;n.innerHTML=scheduler.templates.quick_info_content(t.start_date,t.end_date,t)
+};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_quick_info.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_readonly.js b/codebase/ext/dhtmlxscheduler_readonly.js
index 7eb8938..196f20f 100644
--- a/codebase/ext/dhtmlxscheduler_readonly.js
+++ b/codebase/ext/dhtmlxscheduler_readonly.js
@@ -1,10 +1,13 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.attachEvent("onTemplatesReady",function(){function e(d,b,a,c){for(var i=b.getElementsByTagName(d),h=a.getElementsByTagName(d),g=h.length-1;g>=0;g--)if(a=h[g],c){var f=document.createElement("SPAN");f.className="dhx_text_disabled";f.innerHTML=c(i[g]);a.parentNode.insertBefore(f,a);a.parentNode.removeChild(a)}else if(a.disabled=!0,b.checked)a.checked=!0}var r=scheduler.config.lightbox.sections,k=null,n=scheduler.config.buttons_left.slice(),o=scheduler.config.buttons_right.slice();scheduler.attachEvent("onBeforeLightbox",
-function(d){if(this.config.readonly_form||this.getEvent(d).readonly){this.config.readonly_active=!0;for(var b=0;b<this.config.lightbox.sections.length;b++)this.config.lightbox.sections[b].focus=!1}else this.config.readonly_active=!1,scheduler.config.buttons_left=n.slice(),scheduler.config.buttons_right=o.slice();var a=this.config.lightbox.sections;if(this.config.readonly_active){for(var c=!1,b=0;b<a.length;b++)if(a[b].type=="recurring"){k=a[b];this.config.readonly_active&&a.splice(b,1);break}!c&&
-!this.config.readonly_active&&k&&a.splice(a.length-2,0,k);for(var i=["dhx_delete_btn","dhx_save_btn"],h=[scheduler.config.buttons_left,scheduler.config.buttons_right],b=0;b<i.length;b++)for(var g=i[b],f=0;f<h.length;f++){for(var e=h[f],l=-1,j=0;j<e.length;j++)if(e[j]==g){l=j;break}l!=-1&&e.splice(l,1)}}this.resetLightbox();return!0});var p=scheduler._fill_lightbox;scheduler._fill_lightbox=function(){var d=this.getLightbox();if(this.config.readonly_active)d.style.visibility="hidden",d.style.display=
-"block";var b=p.apply(this,arguments);if(this.config.readonly_active)d.style.visibility="",d.style.display="none";if(this.config.readonly_active){var a=this.getLightbox(),c=this._lightbox_r=a.cloneNode(!0);c.id=scheduler.uid();e("textarea",a,c,function(a){return a.value});e("input",a,c,!1);e("select",a,c,function(a){return!a.options.length?"":a.options[Math.max(a.selectedIndex||0,0)].text});a.parentNode.insertBefore(c,a);m.call(this,c);scheduler._lightbox&&scheduler._lightbox.parentNode.removeChild(scheduler._lightbox);
-this._lightbox=c;if(scheduler.config.drag_lightbox)c.firstChild.onmousedown=scheduler._ready_to_dnd;this.setLightboxSize();c.onclick=function(a){var b=a?a.target:event.srcElement;if(!b.className)b=b.previousSibling;if(b&&b.className)switch(b.className){case "dhx_cancel_btn":scheduler.callEvent("onEventCancel",[scheduler._lightbox_id]),scheduler._edit_stop_event(scheduler.getEvent(scheduler._lightbox_id),!1),scheduler.hide_lightbox()}}}return b};var m=scheduler.showCover;scheduler.showCover=function(){this.config.readonly_active||
-m.apply(this,arguments)};var q=scheduler.hide_lightbox;scheduler.hide_lightbox=function(){if(this._lightbox_r)this._lightbox_r.parentNode.removeChild(this._lightbox_r),this._lightbox_r=this._lightbox=null;return q.apply(this,arguments)}});
+scheduler.attachEvent("onTemplatesReady",function(){function e(e,t,s,r){for(var i=t.getElementsByTagName(e),a=s.getElementsByTagName(e),n=a.length-1;n>=0;n--){var s=a[n];if(r){var d=document.createElement("SPAN");d.className="dhx_text_disabled",d.innerHTML=r(i[n]),s.parentNode.insertBefore(d,s),s.parentNode.removeChild(s)}else s.disabled=!0,t.checked&&(s.checked=!0)}}var t=scheduler.config.lightbox.sections.slice(),s=scheduler.config.buttons_left.slice(),r=scheduler.config.buttons_right.slice();scheduler.attachEvent("onBeforeLightbox",function(e){if(this.config.readonly_form||this.getEvent(e).readonly){this.config.readonly_active=!0;
+for(var i=0;i<this.config.lightbox.sections.length;i++)this.config.lightbox.sections[i].focus=!1}else this.config.readonly_active=!1,scheduler.config.lightbox.sections=t.slice(),scheduler.config.buttons_left=s.slice(),scheduler.config.buttons_right=r.slice();var a=this.config.lightbox.sections;if(this.config.readonly_active){for(var i=0;i<a.length;i++)if("recurring"==a[i].type){this.config.readonly_active&&a.splice(i,1);break}for(var n=["dhx_delete_btn","dhx_save_btn"],d=[scheduler.config.buttons_left,scheduler.config.buttons_right],i=0;i<n.length;i++)for(var l=n[i],o=0;o<d.length;o++){for(var h=d[o],_=-1,c=0;c<h.length;c++)if(h[c]==l){_=c;
+break}-1!=_&&h.splice(_,1)}}return this.resetLightbox(),!0});var i=scheduler._fill_lightbox;scheduler._fill_lightbox=function(){var t=this.getLightbox();this.config.readonly_active&&(t.style.visibility="hidden",t.style.display="block");var s=i.apply(this,arguments);if(this.config.readonly_active&&(t.style.visibility="",t.style.display="none"),this.config.readonly_active){var r=this.getLightbox(),n=this._lightbox_r=r.cloneNode(!0);n.id=scheduler.uid(),e("textarea",r,n,function(e){return e.value}),e("input",r,n,!1),e("select",r,n,function(e){return e.options.length?e.options[Math.max(e.selectedIndex||0,0)].text:""
+}),r.parentNode.insertBefore(n,r),a.call(this,n),scheduler._lightbox&&scheduler._lightbox.parentNode.removeChild(scheduler._lightbox),this._lightbox=n,scheduler.config.drag_lightbox&&(n.firstChild.onmousedown=scheduler._ready_to_dnd),this.setLightboxSize(),n.onclick=function(e){var t=e?e.target:event.srcElement;if(t.className||(t=t.previousSibling),t&&t.className)switch(t.className){case"dhx_cancel_btn":scheduler.callEvent("onEventCancel",[scheduler._lightbox_id]),scheduler._edit_stop_event(scheduler.getEvent(scheduler._lightbox_id),!1),scheduler.hide_lightbox()
+}}}return s};var a=scheduler.showCover;scheduler.showCover=function(){this.config.readonly_active||a.apply(this,arguments)};var n=scheduler.hide_lightbox;scheduler.hide_lightbox=function(){return this._lightbox_r&&(this._lightbox_r.parentNode.removeChild(this._lightbox_r),this._lightbox_r=this._lightbox=null),n.apply(this,arguments)}});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_readonly.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_recurring.js b/codebase/ext/dhtmlxscheduler_recurring.js
index 303fe20..0cc3c74 100644
--- a/codebase/ext/dhtmlxscheduler_recurring.js
+++ b/codebase/ext/dhtmlxscheduler_recurring.js
@@ -1,41 +1,36 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.config.occurrence_timestamp_in_utc=!1;
-scheduler.form_blocks.recurring={render:function(){return scheduler.__recurring_template},_ds:{},_init_set_value:function(a,b,c){function d(a){for(var b=0;b<a.length;b++){var c=a[b];c.type=="checkbox"||c.type=="radio"?(h[c.name]||(h[c.name]=[]),h[c.name].push(c)):h[c.name]=c}}function f(a){for(var b=h[a],c=0;c<b.length;c++)if(b[c].checked)return b[c].value}function e(){m("dhx_repeat_day").style.display="none";m("dhx_repeat_week").style.display="none";m("dhx_repeat_month").style.display="none";m("dhx_repeat_year").style.display=
-"none";m("dhx_repeat_"+this.value).style.display="block"}function g(a){var b=[f("repeat")];for(q[b[0]](b,a);b.length<5;)b.push("");var c="";if(h.end[0].checked)a.end=new Date(9999,1,1),c="no";else if(h.end[2].checked)a.end=j(h.date_of_end.value);else{scheduler.transpose_type(b.join("_"));var c=Math.max(1,h.occurences_count.value),e=b[0]=="week"&&b[4]&&b[4].toString().indexOf(scheduler.config.start_on_monday?1:0)==-1?1:0;a.end=scheduler.date.add(new Date(a.start),c+e,b.join("_"))}return b.join("_")+
-"#"+c}function i(a,b){var c=a.split("#"),a=c[0].split("_");r[a[0]](a,b);var e=h.repeat[{day:0,week:1,month:2,year:3}[a[0]]];switch(c[1]){case "no":h.end[0].checked=!0;break;case "":h.end[2].checked=!0;h.date_of_end.value=l(b.end);break;default:h.end[1].checked=!0,h.occurences_count.value=c[1]}e.checked=!0;e.onclick()}scheduler.form_blocks.recurring._ds={start:c.start_date,end:c._end_date};var k=scheduler.date.str_to_date(scheduler.config.repeat_date),j=function(a){var b=k(a);scheduler.config.include_end_by&&
-(b=scheduler.date.add(b,1,"day"));return b},l=scheduler.date.date_to_str(scheduler.config.repeat_date),n=a.getElementsByTagName("FORM")[0],h=[];d(n.getElementsByTagName("INPUT"));d(n.getElementsByTagName("SELECT"));if(!scheduler.config.repeat_date_of_end){var s=scheduler.date.date_to_str(scheduler.config.repeat_date);scheduler.config.repeat_date_of_end=s(scheduler.date.add(scheduler._currentDate(),30,"day"))}h.date_of_end.value=scheduler.config.repeat_date_of_end;var m=function(a){return document.getElementById(a)};
-scheduler.form_blocks.recurring._get_repeat_code=g;var q={month:function(a,b){f("month_type")=="d"?(a.push(Math.max(1,h.month_count.value)),b.start.setDate(h.month_day.value)):(a.push(Math.max(1,h.month_count2.value)),a.push(h.month_day2.value),a.push(Math.max(1,h.month_week2.value)),b.start.setDate(1));b._start=!0},week:function(a,b){a.push(Math.max(1,h.week_count.value));a.push("");a.push("");for(var c=[],e=h.week_day,d=b.start.getDay(),f=!1,g=0;g<e.length;g++)e[g].checked&&(c.push(e[g].value),
-f=f||e[g].value==d);c.length||(c.push(d),f=!0);c.sort();if(scheduler.config.repeat_precise){if(!f)scheduler.transpose_day_week(b.start,c,1,7),b._start=!0}else b.start=scheduler.date.week_start(b.start),b._start=!0;a.push(c.join(","))},day:function(a){f("day_type")=="d"?a.push(Math.max(1,h.day_count.value)):(a.push("week"),a.push(1),a.push(""),a.push(""),a.push("1,2,3,4,5"),a.splice(0,1))},year:function(a,b){f("year_type")=="d"?(a.push("1"),b.start.setMonth(0),b.start.setDate(h.year_day.value),b.start.setMonth(h.year_month.value)):
-(a.push("1"),a.push(h.year_day2.value),a.push(h.year_week2.value),b.start.setDate(1),b.start.setMonth(h.year_month2.value));b._start=!0}},r={week:function(a){h.week_count.value=a[1];for(var b=h.week_day,c=a[4].split(","),e={},d=0;d<c.length;d++)e[c[d]]=!0;for(d=0;d<b.length;d++)b[d].checked=!!e[b[d].value]},month:function(a,b){a[2]==""?(h.month_type[0].checked=!0,h.month_count.value=a[1],h.month_day.value=b.start.getDate()):(h.month_type[1].checked=!0,h.month_count2.value=a[1],h.month_week2.value=
-a[3],h.month_day2.value=a[2])},day:function(a){h.day_type[0].checked=!0;h.day_count.value=a[1]},year:function(a,b){a[2]==""?(h.year_type[0].checked=!0,h.year_day.value=b.start.getDate(),h.year_month.value=b.start.getMonth()):(h.year_type[1].checked=!0,h.year_week2.value=a[3],h.year_day2.value=a[2],h.year_month2.value=b.start.getMonth())}};scheduler.form_blocks.recurring._set_repeat_code=i;for(var o=0;o<n.elements.length;o++){var p=n.elements[o];switch(p.name){case "repeat":p.onclick=e}}scheduler._lightbox._rec_init_done=
-!0},set_value:function(a,b,c){var d=scheduler.form_blocks.recurring;scheduler._lightbox._rec_init_done||d._init_set_value(a,b,c);a.open=!c.rec_type;a.blocked=c.event_pid&&c.event_pid!="0"?!0:!1;var f=d._ds;f.start=c.start_date;f.end=c._end_date;d.button_click(0,a.previousSibling.firstChild.firstChild,a,a);b&&d._set_repeat_code(b,f)},get_value:function(a,b){if(a.open){var c=scheduler.form_blocks.recurring._ds,d={};this.formSection("time").getValue(d);c.start=d.start_date;b.rec_type=scheduler.form_blocks.recurring._get_repeat_code(c);
-c._start?(b.start_date=new Date(c.start),b._start_date=new Date(c.start),c._start=!1):b._start_date=null;b._end_date=c.end;b.rec_pattern=b.rec_type.split("#")[0]}else b.rec_type=b.rec_pattern="",b._end_date=b.end_date;return b.rec_type},focus:function(){},button_click:function(a,b,c,d){!d.open&&!d.blocked?(d.style.height="115px",b.style.backgroundPosition="-5px 0px",b.nextSibling.innerHTML=scheduler.locale.labels.button_recurring_open):(d.style.height="0px",b.style.backgroundPosition="-5px 20px",
-b.nextSibling.innerHTML=scheduler.locale.labels.button_recurring);d.open=!d.open;scheduler.setLightboxSize()}};scheduler._rec_markers={};scheduler._rec_markers_pull={};scheduler._add_rec_marker=function(a,b){a._pid_time=b;this._rec_markers[a.id]=a;this._rec_markers_pull[a.event_pid]||(this._rec_markers_pull[a.event_pid]={});this._rec_markers_pull[a.event_pid][b]=a};scheduler._get_rec_marker=function(a,b){var c=this._rec_markers_pull[b];return c?c[a]:null};
-scheduler._get_rec_markers=function(a){return this._rec_markers_pull[a]||[]};scheduler._rec_temp=[];(function(){var a=scheduler.addEvent;scheduler.addEvent=function(b,c,d,f,e){var g=a.apply(this,arguments);if(g){var i=scheduler.getEvent(g);i.event_pid!=0&&scheduler._add_rec_marker(i,i.event_length*1E3);if(i.rec_type)i.rec_pattern=i.rec_type.split("#")[0]}return g}})();
-scheduler.attachEvent("onEventIdChange",function(a,b){if(!this._ignore_call){this._ignore_call=!0;for(var c=0;c<this._rec_temp.length;c++){var d=this._rec_temp[c];if(d.event_pid==a)d.event_pid=b,this.changeEventId(d.id,b+"#"+d.id.split("#")[1])}delete this._ignore_call}});
-scheduler.attachEvent("onConfirmedBeforeEventDelete",function(a){var b=this.getEvent(a);if(a.toString().indexOf("#")!=-1||b.event_pid&&b.event_pid!="0"&&b.rec_type&&b.rec_type!="none"){var a=a.split("#"),c=this.uid(),d=a[1]?a[1]:b._pid_time/1E3,f=this._copy_event(b);f.id=c;f.event_pid=b.event_pid||a[0];var e=d;f.event_length=e;f.rec_type=f.rec_pattern="none";this.addEvent(f);this._add_rec_marker(f,e*1E3)}else{b.rec_type&&this._lightbox_id&&this._roll_back_dates(b);var g=this._get_rec_markers(a),i;
-for(i in g)if(g.hasOwnProperty(i))a=g[i].id,this.getEvent(a)&&this.deleteEvent(a,!0)}return!0});
-scheduler.attachEvent("onEventChanged",function(a){if(this._loading)return!0;var b=this.getEvent(a);if(a.toString().indexOf("#")!=-1){var a=a.split("#"),c=this.uid();this._not_render=!0;var d=this._copy_event(b);d.id=c;d.event_pid=a[0];var f=a[1];d.event_length=f;d.rec_type=d.rec_pattern="";this._add_rec_marker(d,f*1E3);this.addEvent(d);this._not_render=!1}else{b.rec_type&&this._lightbox_id&&this._roll_back_dates(b);var e=this._get_rec_markers(a),g;for(g in e)e.hasOwnProperty(g)&&(delete this._rec_markers[e[g].id],
-this.deleteEvent(e[g].id,!0));delete this._rec_markers_pull[a];for(var i=!1,k=0;k<this._rendered.length;k++)this._rendered[k].getAttribute("event_id")==a&&(i=!0);if(!i)this._select_id=null}return!0});scheduler.attachEvent("onEventAdded",function(a){if(!this._loading){var b=this.getEvent(a);b.rec_type&&!b.event_length&&this._roll_back_dates(b)}return!0});
-scheduler.attachEvent("onEventSave",function(a,b){var c=this.getEvent(a);if(!c.rec_type&&b.rec_type&&(a+"").indexOf("#")==-1)this._select_id=null;return!0});scheduler.attachEvent("onEventCreated",function(a){var b=this.getEvent(a);if(!b.rec_type)b.rec_type=b.rec_pattern=b.event_length=b.event_pid="";return!0});scheduler.attachEvent("onEventCancel",function(a){var b=this.getEvent(a);b.rec_type&&(this._roll_back_dates(b),this.render_view_data())});
-scheduler._roll_back_dates=function(a){a.event_length=(a.end_date.valueOf()-a.start_date.valueOf())/1E3;a.end_date=a._end_date;a._start_date&&(a.start_date.setMonth(0),a.start_date.setDate(a._start_date.getDate()),a.start_date.setMonth(a._start_date.getMonth()),a.start_date.setFullYear(a._start_date.getFullYear()))};scheduler._validId=function(a){return a.toString().indexOf("#")==-1};scheduler.showLightbox_rec=scheduler.showLightbox;
-scheduler.showLightbox=function(a){var b=this.locale,c=scheduler.config.lightbox_recurring,d=this.getEvent(a),f=d.event_pid,e=a.toString().indexOf("#")!=-1;e&&(f=a.split("#")[0]);var g=function(a){var b=scheduler.getEvent(a);b._end_date=b.end_date;b.end_date=new Date(b.start_date.valueOf()+b.event_length*1E3);return scheduler.showLightbox_rec(a)};if((f||f==0)&&d.rec_type)return g(a);if(!f||f==0||!b.labels.confirm_recurring||c=="instance"||c=="series"&&!e)return this.showLightbox_rec(a);if(c=="ask"){var i=
-this;dhtmlx.modalbox({text:b.labels.confirm_recurring,title:b.labels.title_confirm_recurring,width:"500px",position:"middle",buttons:[b.labels.button_edit_series,b.labels.button_edit_occurrence,b.labels.icon_cancel],callback:function(b){switch(+b){case 0:return g(f);case 1:return i.showLightbox_rec(a)}}})}else g(f)};scheduler.get_visible_events_rec=scheduler.get_visible_events;
-scheduler.get_visible_events=function(a){for(var b=0;b<this._rec_temp.length;b++)delete this._events[this._rec_temp[b].id];this._rec_temp=[];for(var c=this.get_visible_events_rec(a),d=[],b=0;b<c.length;b++)c[b].rec_type?c[b].rec_pattern!="none"&&this.repeat_date(c[b],d):d.push(c[b]);return d};
-(function(){var a=scheduler.isOneDayEvent;scheduler.isOneDayEvent=function(b){return b.rec_type?!0:a.call(this,b)};var b=scheduler.updateEvent;scheduler.updateEvent=function(a){var d=scheduler.getEvent(a);if(d.rec_type)d.rec_pattern=(d.rec_type||"").split("#")[0];d&&d.rec_type&&a.toString().indexOf("#")===-1?scheduler.update_view():b.call(this,a)}})();scheduler.transponse_size={day:1,week:7,month:1,year:12};
-scheduler.date.day_week=function(a,b,c){a.setDate(1);var c=(c-1)*7,d=a.getDay(),f=b*1+c-d+1;a.setDate(f<=c?f+7:f)};scheduler.transpose_day_week=function(a,b,c,d,f){for(var e=(a.getDay()||(scheduler.config.start_on_monday?7:0))-c,g=0;g<b.length;g++)if(b[g]>e)return a.setDate(a.getDate()+b[g]*1-e-(d?c:f));this.transpose_day_week(a,b,c+d,null,c)};
-scheduler.transpose_type=function(a){var b="transpose_"+a;if(!this.date[b]){var c=a.split("_"),d=864E5,f="add_"+a,e=this.transponse_size[c[0]]*c[1];if(c[0]=="day"||c[0]=="week"){var g=null;if(c[4]&&(g=c[4].split(","),scheduler.config.start_on_monday)){for(var i=0;i<g.length;i++)g[i]=g[i]*1||7;g.sort()}this.date[b]=function(a,b){var c=Math.floor((b.valueOf()-a.valueOf())/(d*e));c>0&&a.setDate(a.getDate()+c*e);g&&scheduler.transpose_day_week(a,g,1,e)};this.date[f]=function(a,b){var c=new Date(a.valueOf());
-if(g)for(var d=0;d<b;d++)scheduler.transpose_day_week(c,g,0,e);else c.setDate(c.getDate()+b*e);return c}}else if(c[0]=="month"||c[0]=="year")this.date[b]=function(a,b){var d=Math.ceil((b.getFullYear()*12+b.getMonth()*1-(a.getFullYear()*12+a.getMonth()*1))/e);d>=0&&a.setMonth(a.getMonth()+d*e);c[3]&&scheduler.date.day_week(a,c[2],c[3])},this.date[f]=function(a,b){var d=new Date(a.valueOf());d.setMonth(d.getMonth()+b*e);c[3]&&scheduler.date.day_week(d,c[2],c[3]);return d}}};
-scheduler.repeat_date=function(a,b,c,d,f){var d=d||this._min_date,f=f||this._max_date,e=new Date(a.start_date.valueOf());if(!a.rec_pattern&&a.rec_type)a.rec_pattern=a.rec_type.split("#")[0];this.transpose_type(a.rec_pattern);for(scheduler.date["transpose_"+a.rec_pattern](e,d);e<a.start_date||scheduler._fix_daylight_saving_date(e,d,a,e,new Date(e.valueOf()+a.event_length*1E3)).valueOf()<=d.valueOf()||e.valueOf()+a.event_length*1E3<=d.valueOf();)e=this.date.add(e,1,a.rec_pattern);for(;e<f&&e<a.end_date;){var g=
-scheduler.config.occurrence_timestamp_in_utc?Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()):e.valueOf(),i=this._get_rec_marker(g,a.id);if(i)c&&b.push(i);else{var k=new Date(e.valueOf()+a.event_length*1E3),j=this._copy_event(a);j.text=a.text;j.start_date=e;j.event_pid=a.id;j.id=a.id+"#"+Math.ceil(g/1E3);j.end_date=k;j.end_date=scheduler._fix_daylight_saving_date(j.start_date,j.end_date,a,e,j.end_date);j._timed=this.isOneDayEvent(j);if(!j._timed&&!this._table_view&&
-!this.config.multi_day)break;b.push(j);c||(this._events[j.id]=j,this._rec_temp.push(j))}e=this.date.add(e,1,a.rec_pattern)}};scheduler._fix_daylight_saving_date=function(a,b,c,d,f){var e=a.getTimezoneOffset()-b.getTimezoneOffset();return e?e>0?new Date(d.valueOf()+c.event_length*1E3-e*6E4):new Date(b.valueOf()-e*6E4):new Date(f.valueOf())};
-scheduler.getRecDates=function(a,b){var c=typeof a=="object"?a:scheduler.getEvent(a),d=0,f=[],b=b||100,e=new Date(c.start_date.valueOf()),g=new Date(e.valueOf());if(!c.rec_type)return[{start_date:c.start_date,end_date:c.end_date}];if(c.rec_type=="none")return[];this.transpose_type(c.rec_pattern);for(scheduler.date["transpose_"+c.rec_pattern](e,g);e<c.start_date||e.valueOf()+c.event_length*1E3<=g.valueOf();)e=this.date.add(e,1,c.rec_pattern);for(;e<c.end_date;){var i=this._get_rec_marker(e.valueOf(),
-c.id),k=!0;if(i)i.rec_type=="none"?k=!1:f.push({start_date:i.start_date,end_date:i.end_date});else{var j=new Date(e),l=new Date(e.valueOf()+c.event_length*1E3),l=scheduler._fix_daylight_saving_date(j,l,c,e,l);f.push({start_date:j,end_date:l})}e=this.date.add(e,1,c.rec_pattern);if(k&&(d++,d==b))break}return f};
-scheduler.getEvents=function(a,b){var c=[],d;for(d in this._events){var f=this._events[d];if(f&&f.start_date<b&&f.end_date>a)if(f.rec_pattern){if(f.rec_pattern!="none"){var e=[];this.repeat_date(f,e,!0,a,b);for(var g=0;g<e.length;g++)!e[g].rec_pattern&&e[g].start_date<b&&e[g].end_date>a&&!this._rec_markers[e[g].id]&&c.push(e[g])}}else f.id.toString().indexOf("#")==-1&&c.push(f)}return c};scheduler.config.repeat_date="%m.%d.%Y";
-scheduler.config.lightbox.sections=[{name:"description",height:130,map_to:"text",type:"textarea",focus:!0},{name:"recurring",type:"recurring",map_to:"rec_type",button:"recurring"},{name:"time",height:72,type:"time",map_to:"auto"}];scheduler._copy_dummy=function(){var a=new Date(this.start_date),b=new Date(this.end_date);this.start_date=a;this.end_date=b;this.event_length=this.event_pid=this.rec_pattern=this.rec_type=null};scheduler.config.include_end_by=!1;scheduler.config.lightbox_recurring="ask";
-scheduler.attachEvent("onClearAll",function(){scheduler._rec_markers={};scheduler._rec_markers_pull={};scheduler._rec_temp=[]});
-scheduler.__recurring_template='<div class="dhx_form_repeat"> <form> <div class="dhx_repeat_left"> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="day" />Daily</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="week"/>Weekly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="month" checked />Monthly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="year" />Yearly</label> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_center"> <div style="display:none;" id="dhx_repeat_day"> <label><input class="dhx_repeat_radio" type="radio" name="day_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="day_count" value="1" />day<br /> <label><input class="dhx_repeat_radio" type="radio" name="day_type" checked value="w"/>Every workday</label> </div> <div style="display:none;" id="dhx_repeat_week"> Repeat every<input class="dhx_repeat_text" type="text" name="week_count" value="1" />week next days:<br /> <table class="dhx_repeat_days"> <tr> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="1" />Monday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="4" />Thursday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="2" />Tuesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="5" />Friday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="3" />Wednesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="6" />Saturday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="0" />Sunday</label><br /><br /> </td> </tr> </table> </div> <div id="dhx_repeat_month"> <label><input class="dhx_repeat_radio" type="radio" name="month_type" value="d"/>Repeat</label><input class="dhx_repeat_text" type="text" name="month_day" value="1" />day every<input class="dhx_repeat_text" type="text" name="month_count" value="1" />month<br /> <label><input class="dhx_repeat_radio" type="radio" name="month_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="month_week2" value="1" /><select name="month_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="0">Sunday</select>every<input class="dhx_repeat_text" type="text" name="month_count2" value="1" />month<br /> </div> <div style="display:none;" id="dhx_repeat_year"> <label><input class="dhx_repeat_radio" type="radio" name="year_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="year_day" value="1" />day<select name="year_month"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select>month<br /> <label><input class="dhx_repeat_radio" type="radio" name="year_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="year_week2" value="1" /><select name="year_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="7">Sunday</select>of<select name="year_month2"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select><br /> </div> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_right"> <label><input class="dhx_repeat_radio" type="radio" name="end" checked/>No end date</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />After</label><input class="dhx_repeat_text" type="text" name="occurences_count" value="1" />occurrences<br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />End by</label><input class="dhx_repeat_date" type="text" name="date_of_end" value="'+scheduler.config.repeat_date_of_end+
-'" /><br /> </div> </form> </div> <div style="clear:both"> </div>';
+scheduler.config.occurrence_timestamp_in_utc=!1,scheduler.config.recurring_workdays=[1,2,3,4,5],scheduler.form_blocks.recurring={render:function(){return scheduler.__recurring_template},_ds:{},_init_set_value:function(e,t,r){function s(e){for(var t=0;t<e.length;t++){var r=e[t];"checkbox"==r.type||"radio"==r.type?(h[r.name]||(h[r.name]=[]),h[r.name].push(r)):h[r.name]=r}}function a(e){for(var t=h[e],r=0;r<t.length;r++)if(t[r].checked)return t[r].value}function n(){v("dhx_repeat_day").style.display="none",v("dhx_repeat_week").style.display="none",v("dhx_repeat_month").style.display="none",v("dhx_repeat_year").style.display="none",v("dhx_repeat_"+this.value).style.display="block"
+}function i(e){var t=[a("repeat")];for(f[t[0]](t,e);t.length<5;)t.push("");var r="";if(h.end[0].checked)e.end=new Date(9999,1,1),r="no";else if(h.end[2].checked)e.end=o(h.date_of_end.value);else{scheduler.transpose_type(t.join("_")),r=Math.max(1,h.occurences_count.value);var s="week"==t[0]&&t[4]&&-1==t[4].toString().indexOf(scheduler.config.start_on_monday?1:0)?1:0;e.end=scheduler.date.add(new Date(e.start),r+s,t.join("_"))}return t.join("_")+"#"+r}function d(e,t){var r=e.split("#");e=r[0].split("_"),g[e[0]](e,t);
+var s=h.repeat[{day:0,week:1,month:2,year:3}[e[0]]];switch(r[1]){case"no":h.end[0].checked=!0;break;case"":h.end[2].checked=!0;var a=t.end;scheduler.config.include_end_by&&(a=scheduler.date.add(a,-1,"day")),h.date_of_end.value=_(a);break;default:h.end[1].checked=!0,h.occurences_count.value=r[1]}s.checked=!0,s.onclick()}scheduler.form_blocks.recurring._ds={start:r.start_date,end:r._end_date};var l=scheduler.date.str_to_date(scheduler.config.repeat_date),o=function(e){var t=l(e);return scheduler.config.include_end_by&&(t=scheduler.date.add(t,1,"day")),t
+},_=scheduler.date.date_to_str(scheduler.config.repeat_date),c=e.getElementsByTagName("FORM")[0],h=[];if(s(c.getElementsByTagName("INPUT")),s(c.getElementsByTagName("SELECT")),!scheduler.config.repeat_date_of_end){var u=scheduler.date.date_to_str(scheduler.config.repeat_date);scheduler.config.repeat_date_of_end=u(scheduler.date.add(scheduler._currentDate(),30,"day"))}h.date_of_end.value=scheduler.config.repeat_date_of_end;var v=function(e){return document.getElementById(e)};scheduler.form_blocks.recurring._get_repeat_code=i;
+var f={month:function(e,t){"d"==a("month_type")?(e.push(Math.max(1,h.month_count.value)),t.start.setDate(h.month_day.value)):(e.push(Math.max(1,h.month_count2.value)),e.push(h.month_day2.value),e.push(Math.max(1,h.month_week2.value)),scheduler.config.repeat_precise||t.start.setDate(1)),t._start=!0},week:function(e,t){e.push(Math.max(1,h.week_count.value)),e.push(""),e.push("");for(var r=[],s=h.week_day,a=t.start.getDay(),n=!1,i=0;i<s.length;i++)s[i].checked&&(r.push(s[i].value),n=n||s[i].value==a);
+r.length||(r.push(a),n=!0),r.sort(),scheduler.config.repeat_precise?n||(scheduler.transpose_day_week(t.start,r,1,7),t._start=!0):(t.start=scheduler.date.week_start(t.start),t._start=!0),e.push(r.join(","))},day:function(e){"d"==a("day_type")?e.push(Math.max(1,h.day_count.value)):(e.push("week"),e.push(1),e.push(""),e.push(""),e.push(scheduler.config.recurring_workdays.join(",")),e.splice(0,1))},year:function(e,t){"d"==a("year_type")?(e.push("1"),t.start.setMonth(0),t.start.setDate(h.year_day.value),t.start.setMonth(h.year_month.value)):(e.push("1"),e.push(h.year_day2.value),e.push(h.year_week2.value),t.start.setDate(1),t.start.setMonth(h.year_month2.value)),t._start=!0
+}},g={week:function(e){h.week_count.value=e[1];for(var t=h.week_day,r=e[4].split(","),s={},a=0;a<r.length;a++)s[r[a]]=!0;for(var a=0;a<t.length;a++)t[a].checked=!!s[t[a].value]},month:function(e,t){""===e[2]?(h.month_type[0].checked=!0,h.month_count.value=e[1],h.month_day.value=t.start.getDate()):(h.month_type[1].checked=!0,h.month_count2.value=e[1],h.month_week2.value=e[3],h.month_day2.value=e[2])},day:function(e){h.day_type[0].checked=!0,h.day_count.value=e[1]},year:function(e,t){""===e[2]?(h.year_type[0].checked=!0,h.year_day.value=t.start.getDate(),h.year_month.value=t.start.getMonth()):(h.year_type[1].checked=!0,h.year_week2.value=e[3],h.year_day2.value=e[2],h.year_month2.value=t.start.getMonth())
+}};scheduler.form_blocks.recurring._set_repeat_code=d;for(var p=0;p<c.elements.length;p++){var m=c.elements[p];switch(m.name){case"repeat":m.onclick=n}}scheduler._lightbox._rec_init_done=!0},set_value:function(e,t,r){var s=scheduler.form_blocks.recurring;scheduler._lightbox._rec_init_done||s._init_set_value(e,t,r),e.open=!r.rec_type,e.blocked=this._is_modified_occurence(r)?!0:!1;var a=s._ds;a.start=r.start_date,a.end=r._end_date,s.button_click(0,e.previousSibling.firstChild.firstChild,e,e),t&&s._set_repeat_code(t,a)
+},get_value:function(e,t){if(e.open){var r=scheduler.form_blocks.recurring._ds,s={};this.formSection("time").getValue(s),r.start=s.start_date,t.rec_type=scheduler.form_blocks.recurring._get_repeat_code(r),r._start?(t.start_date=new Date(r.start),t._start_date=new Date(r.start),r._start=!1):t._start_date=null,t._end_date=r.end,t.rec_pattern=t.rec_type.split("#")[0]}else t.rec_type=t.rec_pattern="",t._end_date=t.end_date;return t.rec_type},focus:function(){},button_click:function(e,t,r,s){s.open||s.blocked?(s.style.height="0px",t.style.backgroundPosition="-5px 20px",t.nextSibling.innerHTML=scheduler.locale.labels.button_recurring):(s.style.height="115px",t.style.backgroundPosition="-5px 0px",t.nextSibling.innerHTML=scheduler.locale.labels.button_recurring_open),s.open=!s.open,scheduler.setLightboxSize()
+}},scheduler._rec_markers={},scheduler._rec_markers_pull={},scheduler._add_rec_marker=function(e,t){e._pid_time=t,this._rec_markers[e.id]=e,this._rec_markers_pull[e.event_pid]||(this._rec_markers_pull[e.event_pid]={}),this._rec_markers_pull[e.event_pid][t]=e},scheduler._get_rec_marker=function(e,t){var r=this._rec_markers_pull[t];return r?r[e]:null},scheduler._get_rec_markers=function(e){return this._rec_markers_pull[e]||[]},scheduler._rec_temp=[],function(){var e=scheduler.addEvent;scheduler.addEvent=function(){var t=e.apply(this,arguments);
+if(t){var r=scheduler.getEvent(t);this._is_modified_occurence(r)&&scheduler._add_rec_marker(r,1e3*r.event_length),r.rec_type&&(r.rec_pattern=r.rec_type.split("#")[0])}return t}}(),scheduler.attachEvent("onEventIdChange",function(e,t){if(!this._ignore_call){this._ignore_call=!0,scheduler._rec_markers[e]&&(scheduler._rec_markers[t]=scheduler._rec_markers[e],delete scheduler._rec_markers[e]);for(var r=0;r<this._rec_temp.length;r++){var s=this._rec_temp[r];s.event_pid==e&&(s.event_pid=t,this.changeEventId(s.id,t+"#"+s.id.split("#")[1]))
+}delete this._ignore_call}}),scheduler.attachEvent("onConfirmedBeforeEventDelete",function(e){var t=this.getEvent(e);if(this._is_virtual_event(e)||this._is_modified_occurence(t)&&t.rec_type&&"none"!=t.rec_type){e=e.split("#");var r=this.uid(),s=e[1]?e[1]:t._pid_time/1e3,a=this._copy_event(t);a.id=r,a.event_pid=t.event_pid||e[0];var n=s;a.event_length=n,a.rec_type=a.rec_pattern="none",this.addEvent(a),this._add_rec_marker(a,1e3*n)}else{t.rec_type&&this._lightbox_id&&this._roll_back_dates(t);var i=this._get_rec_markers(e);
+for(var d in i)i.hasOwnProperty(d)&&(e=i[d].id,this.getEvent(e)&&this.deleteEvent(e,!0))}return!0}),scheduler.attachEvent("onEventDeleted",function(e,t){!this._is_virtual_event(e)&&this._is_modified_occurence(t)&&(scheduler._events[e]||(t.rec_type=t.rec_pattern="none",this.setEvent(e,t)))}),scheduler.attachEvent("onEventChanged",function(e){if(this._loading)return!0;var t=this.getEvent(e);if(this._is_virtual_event(e)){var e=e.split("#"),r=this.uid();this._not_render=!0;var s=this._copy_event(t);s.id=r,s.event_pid=e[0];
+var a=e[1];s.event_length=a,s.rec_type=s.rec_pattern="",this._add_rec_marker(s,1e3*a),this.addEvent(s),this._not_render=!1}else{t.rec_type&&this._lightbox_id&&this._roll_back_dates(t);var n=this._get_rec_markers(e);for(var i in n)n.hasOwnProperty(i)&&(delete this._rec_markers[n[i].id],this.deleteEvent(n[i].id,!0));delete this._rec_markers_pull[e];for(var d=!1,l=0;l<this._rendered.length;l++)this._rendered[l].getAttribute("event_id")==e&&(d=!0);d||(this._select_id=null)}return!0}),scheduler.attachEvent("onEventAdded",function(e){if(!this._loading){var t=this.getEvent(e);
+t.rec_type&&!t.event_length&&this._roll_back_dates(t)}return!0}),scheduler.attachEvent("onEventSave",function(e,t){var r=this.getEvent(e);return r.rec_type||!t.rec_type||this._is_virtual_event(e)||(this._select_id=null),!0}),scheduler.attachEvent("onEventCreated",function(e){var t=this.getEvent(e);return t.rec_type||(t.rec_type=t.rec_pattern=t.event_length=t.event_pid=""),!0}),scheduler.attachEvent("onEventCancel",function(e){var t=this.getEvent(e);t.rec_type&&(this._roll_back_dates(t),this.render_view_data())
+}),scheduler._roll_back_dates=function(e){e.event_length=(e.end_date.valueOf()-e.start_date.valueOf())/1e3,e.end_date=e._end_date,e._start_date&&(e.start_date.setMonth(0),e.start_date.setDate(e._start_date.getDate()),e.start_date.setMonth(e._start_date.getMonth()),e.start_date.setFullYear(e._start_date.getFullYear()))},scheduler._is_virtual_event=function(e){return-1!=e.toString().indexOf("#")},scheduler._is_modified_occurence=function(e){return e.event_pid&&"0"!=e.event_pid},scheduler._validId=function(e){return!this._is_virtual_event(e)
+},scheduler.showLightbox_rec=scheduler.showLightbox,scheduler.showLightbox=function(e){var t=this.locale,r=scheduler.config.lightbox_recurring,s=this.getEvent(e),a=s.event_pid,n=this._is_virtual_event(e);n&&(a=e.split("#")[0]);var i=function(e){var t=scheduler.getEvent(e);return t._end_date=t.end_date,t.end_date=new Date(t.start_date.valueOf()+1e3*t.event_length),scheduler.showLightbox_rec(e)};if((a||1*a===0)&&s.rec_type)return i(e);if(!a||"0"===a||!t.labels.confirm_recurring||"instance"==r||"series"==r&&!n)return this.showLightbox_rec(e);
+if("ask"==r){var d=this;dhtmlx.modalbox({text:t.labels.confirm_recurring,title:t.labels.title_confirm_recurring,width:"500px",position:"middle",buttons:[t.labels.button_edit_series,t.labels.button_edit_occurrence,t.labels.icon_cancel],callback:function(t){switch(+t){case 0:return i(a);case 1:return d.showLightbox_rec(e);case 2:return}}})}else i(a)},scheduler.get_visible_events_rec=scheduler.get_visible_events,scheduler.get_visible_events=function(e){for(var t=0;t<this._rec_temp.length;t++)delete this._events[this._rec_temp[t].id];
+this._rec_temp=[];for(var r=this.get_visible_events_rec(e),s=[],t=0;t<r.length;t++)r[t].rec_type?"none"!=r[t].rec_pattern&&this.repeat_date(r[t],s):s.push(r[t]);return s},function(){var e=scheduler.isOneDayEvent;scheduler.isOneDayEvent=function(t){return t.rec_type?!0:e.call(this,t)};var t=scheduler.updateEvent;scheduler.updateEvent=function(e){var r=scheduler.getEvent(e);r&&r.rec_type&&(r.rec_pattern=(r.rec_type||"").split("#")[0]),r&&r.rec_type&&!this._is_virtual_event(e)?scheduler.update_view():t.call(this,e)
+}}(),scheduler.transponse_size={day:1,week:7,month:1,year:12},scheduler.date.day_week=function(e,t,r){e.setDate(1),r=7*(r-1);var s=e.getDay(),a=1*t+r-s+1;e.setDate(r>=a?a+7:a)},scheduler.transpose_day_week=function(e,t,r,s,a){for(var n=(e.getDay()||(scheduler.config.start_on_monday?7:0))-r,i=0;i<t.length;i++)if(t[i]>n)return e.setDate(e.getDate()+1*t[i]-n-(s?r:a));this.transpose_day_week(e,t,r+s,null,r)},scheduler.transpose_type=function(e){var t="transpose_"+e;if(!this.date[t]){var r=e.split("_"),s=864e5,a="add_"+e,n=this.transponse_size[r[0]]*r[1];
+if("day"==r[0]||"week"==r[0]){var i=null;if(r[4]&&(i=r[4].split(","),scheduler.config.start_on_monday)){for(var d=0;d<i.length;d++)i[d]=1*i[d]||7;i.sort()}this.date[t]=function(e,t){var r=Math.floor((t.valueOf()-e.valueOf())/(s*n));r>0&&e.setDate(e.getDate()+r*n),i&&scheduler.transpose_day_week(e,i,1,n)},this.date[a]=function(e,t){var r=new Date(e.valueOf());if(i)for(var s=0;t>s;s++)scheduler.transpose_day_week(r,i,0,n);else r.setDate(r.getDate()+t*n);return r}}else("month"==r[0]||"year"==r[0])&&(this.date[t]=function(e,t){var s=Math.ceil((12*t.getFullYear()+1*t.getMonth()-(12*e.getFullYear()+1*e.getMonth()))/n);
+s>=0&&e.setMonth(e.getMonth()+s*n),r[3]&&scheduler.date.day_week(e,r[2],r[3])},this.date[a]=function(e,t){var s=new Date(e.valueOf());return s.setMonth(s.getMonth()+t*n),r[3]&&scheduler.date.day_week(s,r[2],r[3]),s})}},scheduler.repeat_date=function(e,t,r,s,a){s=s||this._min_date,a=a||this._max_date;var n=new Date(e.start_date.valueOf());for(!e.rec_pattern&&e.rec_type&&(e.rec_pattern=e.rec_type.split("#")[0]),this.transpose_type(e.rec_pattern),scheduler.date["transpose_"+e.rec_pattern](n,s);n<e.start_date||scheduler._fix_daylight_saving_date(n,s,e,n,new Date(n.valueOf()+1e3*e.event_length)).valueOf()<=s.valueOf()||n.valueOf()+1e3*e.event_length<=s.valueOf();)n=this.date.add(n,1,e.rec_pattern);
+for(;a>n&&n<e.end_date;){var i=scheduler.config.occurrence_timestamp_in_utc?Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds()):n.valueOf(),d=this._get_rec_marker(i,e.id);if(d)r&&t.push(d);else{var l=new Date(n.valueOf()+1e3*e.event_length),o=this._copy_event(e);if(o.text=e.text,o.start_date=n,o.event_pid=e.id,o.id=e.id+"#"+Math.ceil(i/1e3),o.end_date=l,o.end_date=scheduler._fix_daylight_saving_date(o.start_date,o.end_date,e,n,o.end_date),o._timed=this.isOneDayEvent(o),!o._timed&&!this._table_view&&!this.config.multi_day)return;
+t.push(o),r||(this._events[o.id]=o,this._rec_temp.push(o))}n=this.date.add(n,1,e.rec_pattern)}},scheduler._fix_daylight_saving_date=function(e,t,r,s,a){var n=e.getTimezoneOffset()-t.getTimezoneOffset();return new Date(n?n>0?s.valueOf()+1e3*r.event_length-60*n*1e3:t.valueOf()-60*n*1e3:a.valueOf())},scheduler.getRecDates=function(e,t){var r="object"==typeof e?e:scheduler.getEvent(e),s=0,a=[];t=t||100;var n=new Date(r.start_date.valueOf()),i=new Date(n.valueOf());if(!r.rec_type)return[{start_date:r.start_date,end_date:r.end_date}];
+if("none"==r.rec_type)return[];for(this.transpose_type(r.rec_pattern),scheduler.date["transpose_"+r.rec_pattern](n,i);n<r.start_date||n.valueOf()+1e3*r.event_length<=i.valueOf();)n=this.date.add(n,1,r.rec_pattern);for(;n<r.end_date;){var d=this._get_rec_marker(n.valueOf(),r.id),l=!0;if(d)"none"==d.rec_type?l=!1:a.push({start_date:d.start_date,end_date:d.end_date});else{var o=new Date(n),_=new Date(n.valueOf()+1e3*r.event_length);_=scheduler._fix_daylight_saving_date(o,_,r,n,_),a.push({start_date:o,end_date:_})
+}if(n=this.date.add(n,1,r.rec_pattern),l&&(s++,s==t))break}return a},scheduler.getEvents=function(e,t){var r=[];for(var s in this._events){var a=this._events[s];if(a&&a.start_date<t&&a.end_date>e)if(a.rec_pattern){if("none"==a.rec_pattern)continue;var n=[];this.repeat_date(a,n,!0,e,t);for(var i=0;i<n.length;i++)!n[i].rec_pattern&&n[i].start_date<t&&n[i].end_date>e&&!this._rec_markers[n[i].id]&&r.push(n[i])}else this._is_virtual_event(a.id)||r.push(a)}return r},scheduler.config.repeat_date="%m.%d.%Y",scheduler.config.lightbox.sections=[{name:"description",height:130,map_to:"text",type:"textarea",focus:!0},{name:"recurring",type:"recurring",map_to:"rec_type",button:"recurring"},{name:"time",height:72,type:"time",map_to:"auto"}],scheduler._copy_dummy=function(){var e=new Date(this.start_date),t=new Date(this.end_date);
+this.start_date=e,this.end_date=t,this.event_length=this.event_pid=this.rec_pattern=this.rec_type=null},scheduler.config.include_end_by=!1,scheduler.config.lightbox_recurring="ask",scheduler.attachEvent("onClearAll",function(){scheduler._rec_markers={},scheduler._rec_markers_pull={},scheduler._rec_temp=[]}),scheduler.__recurring_template='<div class="dhx_form_repeat"> <form> <div class="dhx_repeat_left"> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="day" />Daily</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="week"/>Weekly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="month" checked />Monthly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="year" />Yearly</label> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_center"> <div style="display:none;" id="dhx_repeat_day"> <label><input class="dhx_repeat_radio" type="radio" name="day_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="day_count" value="1" />day<br /> <label><input class="dhx_repeat_radio" type="radio" name="day_type" checked value="w"/>Every workday</label> </div> <div style="display:none;" id="dhx_repeat_week"> Repeat every<input class="dhx_repeat_text" type="text" name="week_count" value="1" />week next days:<br /> <table class="dhx_repeat_days"> <tr> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="1" />Monday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="4" />Thursday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="2" />Tuesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="5" />Friday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="3" />Wednesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="6" />Saturday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="0" />Sunday</label><br /><br /> </td> </tr> </table> </div> <div id="dhx_repeat_month"> <label><input class="dhx_repeat_radio" type="radio" name="month_type" value="d"/>Repeat</label><input class="dhx_repeat_text" type="text" name="month_day" value="1" />day every<input class="dhx_repeat_text" type="text" name="month_count" value="1" />month<br /> <label><input class="dhx_repeat_radio" type="radio" name="month_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="month_week2" value="1" /><select name="month_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="0">Sunday</select>every<input class="dhx_repeat_text" type="text" name="month_count2" value="1" />month<br /> </div> <div style="display:none;" id="dhx_repeat_year"> <label><input class="dhx_repeat_radio" type="radio" name="year_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="year_day" value="1" />day<select name="year_month"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select>month<br /> <label><input class="dhx_repeat_radio" type="radio" name="year_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="year_week2" value="1" /><select name="year_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="7">Sunday</select>of<select name="year_month2"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select><br /> </div> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_right"> <label><input class="dhx_repeat_radio" type="radio" name="end" checked/>No end date</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />After</label><input class="dhx_repeat_text" type="text" name="occurences_count" value="1" />occurrences<br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />End by</label><input class="dhx_repeat_date" type="text" name="date_of_end" value="'+scheduler.config.repeat_date_of_end+'" /><br /> </div> </form> </div> <div style="clear:both"> </div>';
+
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_recurring.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_serialize.js b/codebase/ext/dhtmlxscheduler_serialize.js
index 7dfd070..4695411 100644
--- a/codebase/ext/dhtmlxscheduler_serialize.js
+++ b/codebase/ext/dhtmlxscheduler_serialize.js
@@ -1,9 +1,12 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.data_attributes=function(){var g=[],c=scheduler.templates.xml_format,b;for(b in this._events){var e=this._events[b],d;for(d in e)d.substr(0,1)!="_"&&g.push([d,d=="start_date"||d=="end_date"?c:null]);break}return g};
-scheduler.toXML=function(g){var c=[],b=this.data_attributes(),e;for(e in this._events){var d=this._events[e];if(d.id.toString().indexOf("#")==-1){c.push("<event>");for(var a=0;a<b.length;a++)c.push("<"+b[a][0]+"><![CDATA["+(b[a][1]?b[a][1](d[b[a][0]]):d[b[a][0]])+"]]\></"+b[a][0]+">");c.push("</event>")}}return(g||"")+"<data>"+c.join("\n")+"</data>"};
-scheduler.toJSON=function(){var g=[],c=this.data_attributes(),b;for(b in this._events){var e=this._events[b];if(e.id.toString().indexOf("#")==-1){for(var e=this._events[b],d=[],a=0;a<c.length;a++)d.push(' "'+c[a][0]+'": "'+((c[a][1]?c[a][1](e[c[a][0]]):e[c[a][0]])||"").toString().replace(/\n/g,"")+'" ');g.push("{"+d.join(",")+"}")}}return"["+g.join(",\n")+"]"};
-scheduler.toICal=function(g){var c="BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//dhtmlXScheduler//NONSGML v2.2//EN\nDESCRIPTION:",b="END:VCALENDAR",e=scheduler.date.date_to_str("%Y%m%dT%H%i%s"),d=scheduler.date.date_to_str("%Y%m%d"),a=[],h;for(h in this._events){var f=this._events[h];f.id.toString().indexOf("#")==-1&&(a.push("BEGIN:VEVENT"),!f._timed||!f.start_date.getHours()&&!f.start_date.getMinutes()?a.push("DTSTART:"+d(f.start_date)):a.push("DTSTART:"+e(f.start_date)),!f._timed||!f.end_date.getHours()&&
-!f.end_date.getMinutes()?a.push("DTEND:"+d(f.end_date)):a.push("DTEND:"+e(f.end_date)),a.push("SUMMARY:"+f.text),a.push("END:VEVENT"))}return c+(g||"")+"\n"+a.join("\n")+"\n"+b};
+scheduler._get_serializable_data=function(){var e={};for(var t in this._events){var r=this._events[t];-1==r.id.toString().indexOf("#")&&(e[r.id]=r)}return e},scheduler.data_attributes=function(){var e=[],t=scheduler.templates.xml_format,r=this._get_serializable_data();for(var s in r){var a=r[s];for(var n in a)"_"!=n.substr(0,1)&&e.push([n,"start_date"==n||"end_date"==n?t:null]);break}return e},scheduler.toXML=function(e){var t=[],r=this.data_attributes(),s=this._get_serializable_data();for(var a in s){var n=s[a];
+t.push("<event>");for(var i=0;i<r.length;i++)t.push("<"+r[i][0]+"><![CDATA["+(r[i][1]?r[i][1](n[r[i][0]]):n[r[i][0]])+"]]></"+r[i][0]+">");t.push("</event>")}return(e||"")+"<data>"+t.join("\n")+"</data>"},scheduler._serialize_json_value=function(e){return null===e||"boolean"==typeof e?e=""+e:(e||0===e||(e=""),e='"'+e.toString().replace(/\n/g,"").replace(/\\/g,"\\\\").replace(/\"/g,'\\"')+'"'),e},scheduler.toJSON=function(){var e=[],t="",r=this.data_attributes(),s=this._get_serializable_data();for(var a in s){for(var n=s[a],i=[],d=0;d<r.length;d++)t=r[d][1]?r[d][1](n[r[d][0]]):n[r[d][0]],i.push(' "'+r[d][0]+'": '+this._serialize_json_value(t));
+e.push("{"+i.join(",")+"}")}return"["+e.join(",\n")+"]"},scheduler.toICal=function(e){var t="BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//dhtmlXScheduler//NONSGML v2.2//EN\nDESCRIPTION:",r="END:VCALENDAR",s=scheduler.date.date_to_str("%Y%m%dT%H%i%s"),a=scheduler.date.date_to_str("%Y%m%d"),n=[],i=this._get_serializable_data();for(var d in i){var l=i[d];n.push("BEGIN:VEVENT"),n.push(l._timed&&(l.start_date.getHours()||l.start_date.getMinutes())?"DTSTART:"+s(l.start_date):"DTSTART:"+a(l.start_date)),n.push(l._timed&&(l.end_date.getHours()||l.end_date.getMinutes())?"DTEND:"+s(l.end_date):"DTEND:"+a(l.end_date)),n.push("SUMMARY:"+l.text),n.push("END:VEVENT")
+}return t+(e||"")+"\n"+n.join("\n")+"\n"+r};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_serialize.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_timeline.js b/codebase/ext/dhtmlxscheduler_timeline.js
index bbbe8fe..b13989b 100644
--- a/codebase/ext/dhtmlxscheduler_timeline.js
+++ b/codebase/ext/dhtmlxscheduler_timeline.js
@@ -1,52 +1,52 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-(scheduler._temp_matrix_scope=function(){function H(){for(var a=scheduler.get_visible_events(),c=[],b=0;b<this.y_unit.length;b++)c[b]=[];c[d]||(c[d]=[]);for(b=0;b<a.length;b++){for(var d=this.order[a[b][this.y_property]],h=0;this._trace_x[h+1]&&a[b].start_date>=this._trace_x[h+1];)h++;for(;this._trace_x[h]&&a[b].end_date>this._trace_x[h];)c[d][h]||(c[d][h]=[]),c[d][h].push(a[b]),h++}return c}function w(a,c,b){var d=0,h=b._step,e=b.round_position,l=0,f=c?a.end_date:a.start_date;if(f.valueOf()>scheduler._max_date.valueOf())f=
-scheduler._max_date;var k=f-scheduler._min_date_timeline;if(k>0){var m=scheduler._get_date_index(b,f);scheduler._ignores[m]&&(e=!0);for(var i=0;i<m;i++)d+=scheduler._cols[i];var p=scheduler.date.add(scheduler._min_date_timeline,scheduler.matrix[scheduler._mode].x_step*m,scheduler.matrix[scheduler._mode].x_unit);e?+f>+p&&c&&(l=scheduler._cols[m]):(k=f-p,b.first_hour||b.last_hour?(k-=b._start_correction,k<0&&(k=0),l=Math.round(k/h),l>scheduler._cols[m]&&(l=scheduler._cols[m])):l=Math.round(k/h))}d+=
-c?k!=0&&!e?l-12:l-14:l+1;return d}function t(a,c){var b=scheduler._get_date_index(this,a),d=this._trace_x[b];c&&+a!=+this._trace_x[b]&&(d=this._trace_x[b+1]?this._trace_x[b+1]:scheduler.date.add(this._trace_x[b],this.x_step,this.x_unit));return new Date(d)}function I(a){var c="";if(a&&this.render!="cell"){a.sort(this.sort||function(a,b){return a.start_date.valueOf()==b.start_date.valueOf()?a.id>b.id?1:-1:a.start_date>b.start_date?1:-1});for(var b=[],d=a.length,h=0;h<d;h++){var e=a[h];e._inner=!1;
-for(var l=this.round_position?t.apply(this,[e.start_date,!1]):e.start_date,f=this.round_position?t.apply(this,[e.end_date,!0]):e.end_date;b.length;){var k=b[b.length-1];if(k.end_date.valueOf()<=l.valueOf())b.splice(b.length-1,1);else break}for(var m=!1,i=0;i<b.length;i++){var p=b[i];if(p.end_date.valueOf()<=l.valueOf()){m=!0;e._sorder=p._sorder;b.splice(i,1);e._inner=!0;break}}if(b.length)b[b.length-1]._inner=!0;if(!m)if(b.length)if(b.length<=b[b.length-1]._sorder){if(b[b.length-1]._sorder)for(var g=
-0;g<b.length;g++){for(var q=!1,n=0;n<b.length;n++)if(b[n]._sorder==g){q=!0;break}if(!q){e._sorder=g;break}}else e._sorder=0;e._inner=!0}else{for(var q=b[0]._sorder,o=1;o<b.length;o++)if(b[o]._sorder>q)q=b[o]._sorder;e._sorder=q+1;e._inner=!1}else e._sorder=0;b.push(e);b.length>(b.max_count||0)?(b.max_count=b.length,e._count=b.length):e._count=e._count?e._count:1}for(var j=0;j<a.length;j++)a[j]._count=b.max_count;for(var r=0;r<d;r++)c+=scheduler.render_timeline_event.call(this,a[r],!1)}return c}function J(a){var c=
-"<table style='table-layout:fixed;' cellspacing='0' cellpadding='0'>",b=[];scheduler._load_mode&&scheduler._load();if(this.render=="cell")b=H.call(this);else for(var d=scheduler.get_visible_events(),h=this.order,e=0;e<d.length;e++){var l=d[e],f=l[this.y_property],k=this.order[f];if(this.show_unassigned&&!f)for(var m in h){if(h.hasOwnProperty(m)){k=h[m];b[k]||(b[k]=[]);var i=scheduler._lame_copy({},l);i[this.y_property]=m;b[k].push(i)}}else b[k]||(b[k]=[]),b[k].push(l)}for(var p=0,g=0;g<scheduler._cols.length;g++)p+=
-scheduler._cols[g];var q=new Date,n=scheduler._cols.length-scheduler._ignores_detected;this._step=q=(scheduler.date.add(q,this.x_step*n,this.x_unit)-q-(this._start_correction+this._end_correction)*n)/p;this._summ=p;var o=scheduler._colsS.heights=[];this._events_height={};this._section_height={};for(g=0;g<this.y_unit.length;g++){var j=this._logic(this.render,this.y_unit[g],this);scheduler._merge(j,{height:this.dy});if(this.section_autoheight){if(this.y_unit.length*j.height<a.offsetHeight)j.height=
-Math.max(j.height,Math.floor((a.offsetHeight-1)/this.y_unit.length));this._section_height[this.y_unit[g].key]=j.height}scheduler._merge(j,{tr_className:"",style_height:"height:"+j.height+"px;",style_width:"width:"+(this.dx-1)+"px;",td_className:"dhx_matrix_scell"+(scheduler.templates[this.name+"_scaley_class"](this.y_unit[g].key,this.y_unit[g].label,this.y_unit[g])?" "+scheduler.templates[this.name+"_scaley_class"](this.y_unit[g].key,this.y_unit[g].label,this.y_unit[g]):""),td_content:scheduler.templates[this.name+
-"_scale_label"](this.y_unit[g].key,this.y_unit[g].label,this.y_unit[g]),summ_width:"width:"+p+"px;",table_className:""});var r=I.call(this,b[g]);if(this.fit_events){var s=this._events_height[this.y_unit[g].key]||0;j.height=s>j.height?s:j.height;j.style_height="height:"+j.height+"px;";this._section_height[this.y_unit[g].key]=j.height}c+="<tr class='"+j.tr_className+"' style='"+j.style_height+"'><td class='"+j.td_className+"' style='"+j.style_width+" height:"+(j.height-1)+"px;'>"+j.td_content+"</td>";
-if(this.render=="cell")for(e=0;e<scheduler._cols.length;e++)c+=scheduler._ignores[e]?"<td></td>":"<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](b[g][e],this._trace_x[e],this.y_unit[g])+"' style='width:"+(scheduler._cols[e]-1)+"px'><div style='width:"+(scheduler._cols[e]-1)+"px'>"+scheduler.templates[this.name+"_cell_value"](b[g][e])+"</div></td>";else{c+="<td><div style='"+j.summ_width+" "+j.style_height+" position:relative;' class='dhx_matrix_line'>";c+=r;c+="<table class='"+
-j.table_className+"' cellpadding='0' cellspacing='0' style='"+j.summ_width+" "+j.style_height+"' >";for(e=0;e<scheduler._cols.length;e++)c+=scheduler._ignores[e]?"<td></td>":"<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](b[g],this._trace_x[e],this.y_unit[g])+"' style='width:"+(scheduler._cols[e]-1)+"px'><div style='width:"+(scheduler._cols[e]-1)+"px'></div></td>";c+="</table>";c+="</div></td>"}c+="</tr>"}c+="</table>";this._matrix=b;a.innerHTML=c;scheduler._rendered=[];
-for(var B=scheduler._obj.getElementsByTagName("DIV"),g=0;g<B.length;g++)B[g].getAttribute("event_id")&&scheduler._rendered.push(B[g]);this._scales={};for(g=0;g<a.firstChild.rows.length;g++){o.push(a.firstChild.rows[g].offsetHeight);var x=this.y_unit[g].key,z=this._scales[x]=scheduler._isRender("cell")?a.firstChild.rows[g]:a.firstChild.rows[g].childNodes[1].getElementsByTagName("div")[0];scheduler.callEvent("onScaleAdd",[z,x])}}function K(a){var c=scheduler.xy.scale_height,b=this._header_resized||
-scheduler.xy.scale_height;scheduler._cols=[];scheduler._colsS={height:0};this._trace_x=[];var d=scheduler._x-this.dx-scheduler.xy.scroll_width,h=[this.dx],e=scheduler._els.dhx_cal_header[0];e.style.width=h[0]+d+"px";scheduler._min_date_timeline=scheduler._min_date;var l=scheduler.config.preserve_scale_length,f=scheduler._min_date;scheduler._process_ignores(f,this.x_size,this.x_unit,this.x_step,l);var k=this.x_size+(l?scheduler._ignores_detected:0);if(k!=this.x_size)scheduler._max_date=scheduler.date.add(scheduler._min_date,
-k*this.x_step,this.x_unit);for(var m=k-scheduler._ignores_detected,i=0;i<k;i++)this._trace_x[i]=new Date(f),f=scheduler.date.add(f,this.x_step,this.x_unit),scheduler._ignores[i]?(scheduler._cols[i]=0,m++):scheduler._cols[i]=Math.floor(d/(m-i)),d-=scheduler._cols[i],h[i+1]=h[i]+scheduler._cols[i];a.innerHTML="<div></div>";if(this.second_scale){for(var p=this.second_scale.x_unit,g=[this._trace_x[0]],q=[],n=[this.dx,this.dx],o=0,j=0;j<this._trace_x.length;j++){var r=this._trace_x[j],s=E(p,r,g[o]);s&&
-(++o,g[o]=r,n[o+1]=n[o]);var B=o+1;q[o]=scheduler._cols[j]+(q[o]||0);n[B]+=scheduler._cols[j]}a.innerHTML="<div></div><div></div>";var x=a.firstChild;x.style.height=b+"px";var z=a.lastChild;z.style.position="relative";for(var u=0;u<g.length;u++){var y=g[u],C=scheduler.templates[this.name+"_second_scalex_class"](y),A=document.createElement("DIV");A.className="dhx_scale_bar dhx_second_scale_bar"+(C?" "+C:"");scheduler.set_xy(A,q[u]-1,b-3,n[u],0);A.innerHTML=scheduler.templates[this.name+"_second_scale_date"](y);
-x.appendChild(A)}}scheduler.xy.scale_height=b;for(var a=a.lastChild,v=0;v<this._trace_x.length;v++)if(!scheduler._ignores[v]){f=this._trace_x[v];scheduler._render_x_header(v,h[v],f,a);var w=scheduler.templates[this.name+"_scalex_class"](f);w&&(a.lastChild.className+=" "+w)}scheduler.xy.scale_height=c;var t=this._trace_x;a.onclick=function(a){var b=F(a);b&&scheduler.callEvent("onXScaleClick",[b.x,t[b.x],a||event])};a.ondblclick=function(a){var b=F(a);b&&scheduler.callEvent("onXScaleDblClick",[b.x,
-t[b.x],a||event])}}function E(a,c,b){switch(a){case "hour":return c.getHours()!=b.getHours()||E("day",c,b);case "day":return!(c.getDate()==b.getDate()&&c.getMonth()==b.getMonth()&&c.getFullYear()==b.getFullYear());case "week":return!(scheduler.date.getISOWeek(c)==scheduler.date.getISOWeek(b)&&c.getFullYear()==b.getFullYear());case "month":return!(c.getMonth()==b.getMonth()&&c.getFullYear()==b.getFullYear());case "year":return c.getFullYear()!=b.getFullYear();default:return!1}}function L(a){if(a){scheduler.set_sizes();
-G();var c=scheduler._min_date;K.call(this,scheduler._els.dhx_cal_header[0]);J.call(this,scheduler._els.dhx_cal_data[0]);scheduler._min_date=c;scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates[this.name+"_date"](scheduler._min_date,scheduler._max_date);scheduler._mark_now&&scheduler._mark_now()}D()}function D(){if(scheduler._tooltip)scheduler._tooltip.style.display="none",scheduler._tooltip.date=""}function M(a,c,b){if(a.render=="cell"){var d=c.x+"_"+c.y,h=a._matrix[c.y][c.x];if(!h)return D();
-h.sort(function(a,b){return a.start_date>b.start_date?1:-1});if(scheduler._tooltip){if(scheduler._tooltip.date==d)return;scheduler._tooltip.innerHTML=""}else{var e=scheduler._tooltip=document.createElement("DIV");e.className="dhx_year_tooltip";document.body.appendChild(e);e.onclick=scheduler._click.dhx_cal_data}for(var l="",f=0;f<h.length;f++){var k=h[f].color?"background-color:"+h[f].color+";":"",m=h[f].textColor?"color:"+h[f].textColor+";":"";l+="<div class='dhx_tooltip_line' event_id='"+h[f].id+
-"' style='"+k+""+m+"'>";l+="<div class='dhx_tooltip_date'>"+(h[f]._timed?scheduler.templates.event_date(h[f].start_date):"")+"</div>";l+="<div class='dhx_event_icon icon_details'>&nbsp;</div>";l+=scheduler.templates[a.name+"_tooltip"](h[f].start_date,h[f].end_date,h[f])+"</div>"}scheduler._tooltip.style.display="";scheduler._tooltip.style.top="0px";scheduler._tooltip.style.left=document.body.offsetWidth-b.left-scheduler._tooltip.offsetWidth<0?b.left-scheduler._tooltip.offsetWidth+"px":b.left+c.src.offsetWidth+
-"px";scheduler._tooltip.date=d;scheduler._tooltip.innerHTML=l;scheduler._tooltip.style.top=document.body.offsetHeight-b.top-scheduler._tooltip.offsetHeight<0?b.top-scheduler._tooltip.offsetHeight+c.src.offsetHeight+"px":b.top+"px"}}function G(){dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",function(a){var c=scheduler.matrix[scheduler._mode];if(c&&c.render=="cell"){if(c){var b=scheduler._locate_cell_timeline(a),a=a||event,d=a.target||a.srcElement;if(b)return M(c,b,getOffset(b.src))}D()}});
-G=function(){}}function N(a){for(var c=a.parentNode.childNodes,b=0;b<c.length;b++)if(c[b]==a)return b;return-1}function F(a){for(var a=a||event,c=a.target?a.target:a.srcElement;c&&c.tagName!="DIV";)c=c.parentNode;if(c&&c.tagName=="DIV"){var b=c.className.split(" ")[0];if(b=="dhx_scale_bar")return{x:N(c),y:-1,src:c,scale:!0}}}scheduler.matrix={};scheduler._merge=function(a,c){for(var b in c)typeof a[b]=="undefined"&&(a[b]=c[b])};scheduler.createTimelineView=function(a){scheduler._skin_init();scheduler._merge(a,
-{section_autoheight:!0,name:"matrix",x:"time",y:"time",x_step:1,x_unit:"hour",y_unit:"day",y_step:1,x_start:0,x_size:24,y_start:0,y_size:7,render:"cell",dx:200,dy:50,event_dy:scheduler.xy.bar_height-5,event_min_dy:scheduler.xy.bar_height-5,resize_events:!0,fit_events:!0,show_unassigned:!1,second_scale:!1,round_position:!1,_logic:function(a,b,c){var f={};scheduler.checkEvent("onBeforeSectionRender")&&(f=scheduler.callEvent("onBeforeSectionRender",[a,b,c]));return f}});a._original_x_start=a.x_start;
-if(a.x_unit!="day")a.first_hour=a.last_hour=0;a._start_correction=a.first_hour?a.first_hour*36E5:0;a._end_correction=a.last_hour?(24-a.last_hour)*36E5:0;scheduler.checkEvent("onTimelineCreated")&&scheduler.callEvent("onTimelineCreated",[a]);var c=scheduler.render_data;scheduler.render_data=function(b,e){if(this._mode==a.name)if(e&&!a.show_unassigned&&a.render!="cell")for(var d=0;d<b.length;d++)this.clear_event(b[d]),this.render_timeline_event.call(this.matrix[this._mode],b[d],!0);else scheduler._renderMatrix.call(a,
-!0,!0);else return c.apply(this,arguments)};scheduler.matrix[a.name]=a;scheduler.templates[a.name+"_cell_value"]=function(a){return a?a.length:""};scheduler.templates[a.name+"_cell_class"]=function(){return""};scheduler.templates[a.name+"_scalex_class"]=function(){return""};scheduler.templates[a.name+"_second_scalex_class"]=function(){return""};scheduler.templates[a.name+"_scaley_class"]=function(){return""};scheduler.templates[a.name+"_scale_label"]=function(a,b){return b};scheduler.templates[a.name+
-"_tooltip"]=function(a,b,c){return c.text};scheduler.templates[a.name+"_date"]=function(a,b){return a.getDay()==b.getDay()&&b-a<864E5||+a==+scheduler.date.date_part(new Date(b))||+scheduler.date.add(a,1,"day")==+b&&b.getHours()==0&&b.getMinutes()==0?scheduler.templates.day_date(a):a.getDay()!=b.getDay()&&b-a<864E5?scheduler.templates.day_date(a)+" &ndash; "+scheduler.templates.day_date(b):scheduler.templates.week_date(a,b)};scheduler.templates[a.name+"_scale_date"]=scheduler.date.date_to_str(a.x_date||
-scheduler.config.hour_date);scheduler.templates[a.name+"_second_scale_date"]=scheduler.date.date_to_str(a.second_scale&&a.second_scale.x_date?a.second_scale.x_date:scheduler.config.hour_date);scheduler.date["add_"+a.name]=function(b,c){var d=scheduler.date.add(b,(a.x_length||a.x_size)*c*a.x_step,a.x_unit);if(a.x_unit=="minute"||a.x_unit=="hour"){var f=a.x_length||a.x_size;if(+scheduler.date.date_part(new Date(b))==+scheduler.date.date_part(new Date(d)))a.x_start+=c*f;else{var k=a.x_unit=="hour"?a.x_step*
-60:a.x_step,m=1440/(f*k)-1,i=Math.round(m*f);c>0?a.x_start-=i:a.x_start=i+a.x_start}}return d};scheduler.attachEvent("onBeforeTodayDisplayed",function(){a.x_start=a._original_x_start;return!0});scheduler.date[a.name+"_start"]=function(b){var c=scheduler.date[a.x_unit+"_start"]||scheduler.date.day_start,d=c.call(scheduler.date,b);return d=scheduler.date.add(d,a.x_step*a.x_start,a.x_unit)};scheduler.attachEvent("onSchedulerResize",function(){return this._mode==a.name?(scheduler._renderMatrix.call(a,
-!0,!0),!1):!0});scheduler.attachEvent("onOptionsLoad",function(){a.order={};scheduler.callEvent("onOptionsLoadStart",[]);for(var b=0;b<a.y_unit.length;b++)a.order[a.y_unit[b].key]=b;scheduler.callEvent("onOptionsLoadFinal",[]);scheduler._date&&a.name==scheduler._mode&&scheduler.setCurrentView(scheduler._date,scheduler._mode)});scheduler.callEvent("onOptionsLoad",[a]);scheduler[a.name+"_view"]=function(){scheduler._renderMatrix.apply(a,arguments)};var b=new Date,d=scheduler.date.add(b,a.x_step,a.x_unit).valueOf()-
-b.valueOf();scheduler["mouse_"+a.name]=function(b){var c=this._drag_event;if(this._drag_id)c=this.getEvent(this._drag_id),this._drag_event._dhx_changed=!0;b.x-=a.dx;for(var d=0,f=0,k=0;f<=this._cols.length-1;f++){var m=this._cols[f];d+=m;if(d>b.x){var i=(b.x-(d-m))/m,i=i<0?0:i;break}}if(f==0&&this._ignores[0]){f=1;for(i=0;this._ignores[f];)f++}else if(f==this._cols.length&&this._ignores[f-1]){f=this._cols.length-1;for(i=0;this._ignores[f];)f--;f++}for(d=0;k<this._colsS.heights.length;k++)if(d+=this._colsS.heights[k],
-d>b.y)break;b.fields={};a.y_unit[k]||(k=a.y_unit.length-1);if(k>=0&&a.y_unit[k]&&(b.section=b.fields[a.y_property]=a.y_unit[k].key,c)){if(c[a.y_property]!=b.section){var p=scheduler._get_timeline_event_height(c,a);c._sorder=scheduler._get_dnd_order(c._sorder,p,a._section_height[b.section])}c[a.y_property]=b.section}b.x=0;b.force_redraw=!0;b.custom=!0;var g;if(f>=a._trace_x.length)g=scheduler.date.add(a._trace_x[a._trace_x.length-1],a.x_step,a.x_unit),a._end_correction&&(g=new Date(g-a._end_correction));
-else{var q=i*m*a._step+a._start_correction;g=new Date(+a._trace_x[f]+q)}if(this._drag_mode=="move"&&this._drag_id&&this._drag_event){var c=this.getEvent(this._drag_id),n=this._drag_event;b._ignores=this._ignores_detected||a._start_correction||a._end_correction;if(!n._move_delta&&(n._move_delta=(c.start_date-g)/6E4,this.config.preserve_length&&b._ignores))n._move_delta=this._get_real_event_length(c.start_date,g,a),n._event_length=this._get_real_event_length(c.start_date,c.end_date,a);if(this.config.preserve_length&&
-b._ignores){var o=n._event_length,j=this._get_fictional_event_length(g,n._move_delta,a,!0);g=new Date(g-j)}else g=scheduler.date.add(g,n._move_delta,"minute")}if(this._drag_mode=="resize"&&c){var r=!!(Math.abs(c.start_date-g)<Math.abs(c.end_date-g));if(a._start_correction||a._end_correction){var s=!this._drag_event||this._drag_event._resize_from_start==void 0;s||Math.abs(c.end_date-c.start_date)<=6E4*this.config.time_step?this._drag_event._resize_from_start=b.resize_from_start=r:b.resize_from_start=
-this._drag_event._resize_from_start}else b.resize_from_start=r}if(a.round_position)switch(this._drag_mode){case "move":if(!this.config.preserve_length&&(g=t.call(a,g,!1),a.x_unit=="day"))b.custom=!1;break;case "resize":if(this._drag_event){if(this._drag_event._resize_from_start==null)this._drag_event._resize_from_start=b.resize_from_start;b.resize_from_start=this._drag_event._resize_from_start;g=t.call(a,g,!this._drag_event._resize_from_start)}}b.y=Math.round((g-this._min_date)/(6E4*this.config.time_step));
-b.shift=this.config.time_step;return b}};scheduler._get_timeline_event_height=function(a,c){var b=a[c.y_property],d=c.event_dy;c.event_dy=="full"&&(d=c.section_autoheight?c._section_height[b]-6:c.dy-3);c.resize_events&&(d=Math.max(Math.floor(d/a._count),c.event_min_dy));return d};scheduler._get_timeline_event_y=function(a,c){var b=a,d=2+b*c+(b?b*2:0);scheduler.config.cascade_event_display&&(d=2+b*scheduler.config.cascade_event_margin+(b?b*2:0));return d};scheduler.render_timeline_event=function(a,
-c){var b=a[this.y_property];if(!b)return"";var d=a._sorder,h=w(a,!1,this),e=w(a,!0,this),l=scheduler._get_timeline_event_height(a,this),f=l-2;!a._inner&&this.event_dy=="full"&&(f=(f+2)*(a._count-d)-2);var k=scheduler._get_timeline_event_y(a._sorder,l),m=l+k+2;if(!this._events_height[b]||this._events_height[b]<m)this._events_height[b]=m;var i=scheduler.templates.event_class(a.start_date,a.end_date,a),i="dhx_cal_event_line "+(i||""),p=a.color?"background:"+a.color+";":"",g=a.textColor?"color:"+a.textColor+
-";":"",q=scheduler.templates.event_bar_text(a.start_date,a.end_date,a),n='<div event_id="'+a.id+'" class="'+i+'" style="'+p+""+g+"position:absolute; top:"+k+"px; height: "+f+"px; left:"+h+"px; width:"+Math.max(0,e-h)+"px;"+(a._text_style||"")+'">';if(scheduler.config.drag_resize&&!scheduler.config.readonly){var o="dhx_event_resize";n+="<div class='"+o+" "+o+"_start' style='height: "+f+"px;'></div><div class='"+o+" "+o+"_end' style='height: "+f+"px;'></div>"}n+=q+"</div>";if(c){var j=document.createElement("DIV");
-j.innerHTML=n;var r=this.order[b],s=scheduler._els.dhx_cal_data[0].firstChild.rows[r].cells[1].firstChild;scheduler._rendered.push(j.firstChild);s.appendChild(j.firstChild)}else return n};scheduler._renderMatrix=function(a,c){if(!c)scheduler._els.dhx_cal_data[0].scrollTop=0;scheduler._min_date=scheduler.date[this.name+"_start"](scheduler._date);scheduler._max_date=scheduler.date.add(scheduler._min_date,this.x_size*this.x_step,this.x_unit);scheduler._table_view=!0;if(this.second_scale){if(a&&!this._header_resized)this._header_resized=
-scheduler.xy.scale_height,scheduler.xy.scale_height*=2,scheduler._els.dhx_cal_header[0].className+=" dhx_second_cal_header";if(!a&&this._header_resized){scheduler.xy.scale_height/=2;this._header_resized=!1;var b=scheduler._els.dhx_cal_header[0];b.className=b.className.replace(/ dhx_second_cal_header/gi,"")}}L.call(this,a)};scheduler._locate_cell_timeline=function(a){for(var a=a||event,c=a.target?a.target:a.srcElement,b={},d=scheduler.matrix[scheduler._mode],h=scheduler.getActionData(a),e=0;e<d._trace_x.length-
-1;e++)if(+h.date<d._trace_x[e+1])break;b.x=e;b.y=d.order[h.section];var l=scheduler._isRender("cell")?1:0;b.src=d._scales[h.section]?d._scales[h.section].getElementsByTagName("td")[e+l]:null;for(var f=!1;b.x==0&&c.className!="dhx_cal_data"&&c.parentNode;)if(c.className.split(" ")[0]=="dhx_matrix_scell"){f=!0;break}else c=c.parentNode;if(f)b.x=-1,b.src=c,b.scale=!0;return b};var O=scheduler._click.dhx_cal_data;scheduler._click.dhx_marked_timespan=scheduler._click.dhx_cal_data=function(a){var c=O.apply(this,
-arguments),b=scheduler.matrix[scheduler._mode];if(b){var d=scheduler._locate_cell_timeline(a);d&&(d.scale?scheduler.callEvent("onYScaleClick",[d.y,b.y_unit[d.y],a||event]):scheduler.callEvent("onCellClick",[d.x,d.y,b._trace_x[d.x],(b._matrix[d.y]||{})[d.x]||[],a||event]))}return c};scheduler.dblclick_dhx_marked_timespan=scheduler.dblclick_dhx_matrix_cell=function(a){var c=scheduler.matrix[scheduler._mode];if(c){var b=scheduler._locate_cell_timeline(a);b&&(b.scale?scheduler.callEvent("onYScaleDblClick",
-[b.y,c.y_unit[b.y],a||event]):scheduler.callEvent("onCellDblClick",[b.x,b.y,c._trace_x[b.x],(c._matrix[b.y]||{})[b.x]||[],a||event]))}};scheduler.dblclick_dhx_matrix_scell=function(a){return scheduler.dblclick_dhx_matrix_cell(a)};scheduler._isRender=function(a){return scheduler.matrix[scheduler._mode]&&scheduler.matrix[scheduler._mode].render==a};scheduler.attachEvent("onCellDblClick",function(a,c,b,d,h){if(!(this.config.readonly||h.type=="dblclick"&&!this.config.dblclick_create)){var e=scheduler.matrix[scheduler._mode],
-l={};l.start_date=e._trace_x[a];l.end_date=e._trace_x[a+1]?e._trace_x[a+1]:scheduler.date.add(e._trace_x[a],e.x_step,e.x_unit);if(e._start_correction)l.start_date=new Date(l.start_date*1+e._start_correction);if(e._end_correction)l.end_date=new Date(l.end_date-e._end_correction);l[e.y_property]=e.y_unit[c].key;scheduler.addEventNow(l,null,h)}});scheduler.attachEvent("onBeforeDrag",function(){return!scheduler._isRender("cell")});scheduler.attachEvent("onEventChanged",function(a,c){c._timed=this.isOneDayEvent(c)});
-var P=scheduler._render_marked_timespan;scheduler._render_marked_timespan=function(a,c,b,d,h){if(!scheduler.config.display_marked_timespans)return[];if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){if(!scheduler._isRender("cell")){var e=scheduler._lame_copy({},scheduler.matrix[scheduler._mode]);e.round_position=!1;var l=[],f=[],k=[];if(b)k=[c],f=[b];else{var m=e.order,i;for(i in m)m.hasOwnProperty(i)&&(f.push(i),k.push(e._scales[i]))}var d=d?new Date(d):scheduler._min_date,h=h?new Date(h):
-scheduler._max_date,p=[];if(a.days>6){var g=new Date(a.days);scheduler.date.date_part(new Date(d))<=+g&&+h>=+g&&p.push(g)}else p.push.apply(p,scheduler._get_dates_by_index(a.days));for(var q=a.zones,n=scheduler._get_css_classes_by_config(a),o=0;o<f.length;o++)for(var c=k[o],b=f[o],j=0;j<p.length;j++)for(var r=p[j],s=0;s<q.length;s+=2){var t=q[s],x=q[s+1],z=new Date(+r+t*6E4),u=new Date(+r+x*6E4);if(d<u&&h>z){var y=scheduler._get_block_by_config(a);y.className=n;var C=w({start_date:z},!1,e)-1,A=w({start_date:u},
-!1,e)-1,v=Math.max(1,A-C-1),D=e._section_height[b]-1;y.style.cssText="height: "+D+"px; left: "+C+"px; width: "+v+"px; top: 0;";c.insertBefore(y,c.firstChild);l.push(y)}}return l}}else return P.apply(scheduler,[a,c,b])};var Q=scheduler._append_mark_now;scheduler._append_mark_now=function(a,c){if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){var b=scheduler._currentDate(),d=scheduler._get_zone_minutes(b),h={days:+scheduler.date.date_part(b),zones:[d,d+1],css:"dhx_matrix_now_time",type:"dhx_now_time"};
-return scheduler._render_marked_timespan(h)}else return Q.apply(scheduler,[a,c])};scheduler.attachEvent("onScaleAdd",function(a,c){var b=scheduler._marked_timespans;if(b&&scheduler.matrix&&scheduler.matrix[scheduler._mode])for(var d=scheduler._mode,h=scheduler._min_date,e=scheduler._max_date,l=b.global,f=scheduler.date.date_part(new Date(h));f<e;f=scheduler.date.add(f,1,"day")){var k=+f,m=f.getDay(),i=[],p=l[k]||l[m];i.push.apply(i,scheduler._get_configs_to_render(p));if(b[d]&&b[d][c]){var g=[],q=
-scheduler._get_types_to_render(b[d][c][m],b[d][c][k]);g.push.apply(g,scheduler._get_configs_to_render(q));g.length&&(i=g)}for(var n=0;n<i.length;n++){var o=i[n],j=o.days;j<7?(j=k,scheduler._render_marked_timespan(o,a,c,f,scheduler.date.add(f,1,"day")),j=m):scheduler._render_marked_timespan(o,a,c,f,scheduler.date.add(f,1,"day"))}}});scheduler._get_date_index=function(a,c){for(var b=0,d=a._trace_x;b<d.length-1&&+c>=+d[b+1];)b++;return b}})();
+scheduler._temp_matrix_scope=function(){function e(){for(var e=scheduler.get_visible_events(),t=[],r=0;r<this.y_unit.length;r++)t[r]=[];t[s]||(t[s]=[]);for(var r=0;r<e.length;r++){for(var s=this.order[e[r][this.y_property]],a=0;this._trace_x[a+1]&&e[r].start_date>=this._trace_x[a+1];)a++;for(;this._trace_x[a]&&e[r].end_date>this._trace_x[a];)t[s][a]||(t[s][a]=[]),t[s][a].push(e[r]),a++}return t}function t(e,t,r){var s=0,a=r._step,n=r.round_position,i=0,d=t?e.end_date:e.start_date;d.valueOf()>scheduler._max_date.valueOf()&&(d=scheduler._max_date);
+var l=d-scheduler._min_date_timeline;if(l>0){var _=scheduler._get_date_index(r,d);scheduler._ignores[_]&&(n=!0);for(var o=0;_>o;o++)s+=scheduler._cols[o];var c=scheduler.date.add(scheduler._min_date_timeline,scheduler.matrix[scheduler._mode].x_step*_,scheduler.matrix[scheduler._mode].x_unit);n?+d>+c&&t&&(i=scheduler._cols[_]):(l=d-c,r.first_hour||r.last_hour?(l-=r._start_correction,0>l&&(l=0),i=Math.round(l/a),i>scheduler._cols[_]&&(i=scheduler._cols[_])):i=Math.round(l/a))}return s+=t?0===l||n?i-14:i-12:i+1
+}function r(e,t){var r=scheduler._get_date_index(this,e),s=this._trace_x[r];return t&&+e!=+this._trace_x[r]&&(s=this._trace_x[r+1]?this._trace_x[r+1]:scheduler.date.add(this._trace_x[r],this.x_step,this.x_unit)),new Date(s)}function s(e){var t="";if(e&&"cell"!=this.render){e.sort(this.sort||function(e,t){return e.start_date.valueOf()==t.start_date.valueOf()?e.id>t.id?1:-1:e.start_date>t.start_date?1:-1});for(var s=[],a=e.length,n=0;a>n;n++){var i=e[n];i._inner=!1;var d=this.round_position?r.apply(this,[i.start_date,!1]):i.start_date;
+for(this.round_position?r.apply(this,[i.end_date,!0]):i.end_date;s.length;){var l=s[s.length-1];if(!(l.end_date.valueOf()<=d.valueOf()))break;s.splice(s.length-1,1)}for(var _=!1,o=0;o<s.length;o++){var c=s[o];if(c.end_date.valueOf()<=d.valueOf()){_=!0,i._sorder=c._sorder,s.splice(o,1),i._inner=!0;break}}if(s.length&&(s[s.length-1]._inner=!0),!_)if(s.length)if(s.length<=s[s.length-1]._sorder){if(s[s.length-1]._sorder)for(var h=0;h<s.length;h++){for(var u=!1,v=0;v<s.length;v++)if(s[v]._sorder==h){u=!0;
+break}if(!u){i._sorder=h;break}}else i._sorder=0;i._inner=!0}else{for(var f=s[0]._sorder,g=1;g<s.length;g++)s[g]._sorder>f&&(f=s[g]._sorder);i._sorder=f+1,i._inner=!1}else i._sorder=0;s.push(i),s.length>(s.max_count||0)?(s.max_count=s.length,i._count=s.length):i._count=i._count?i._count:1}for(var p=0;p<e.length;p++)e[p]._count=s.max_count;for(var m=0;a>m;m++)t+=scheduler.render_timeline_event.call(this,e[m],!1)}return t}function a(t){var r="<table style='table-layout:fixed;' cellspacing='0' cellpadding='0'>",a=[];
+if(scheduler._load_mode&&scheduler._load(),"cell"==this.render)a=e.call(this);else for(var n=scheduler.get_visible_events(),i=this.order,d=0;d<n.length;d++){var l=n[d],_=l[this.y_property],o=this.order[_];if(this.show_unassigned&&!_){for(var c in i)if(i.hasOwnProperty(c)){o=i[c],a[o]||(a[o]=[]);var h=scheduler._lame_copy({},l);h[this.y_property]=c,a[o].push(h)}}else a[o]||(a[o]=[]),a[o].push(l)}for(var u=0,v=0;v<scheduler._cols.length;v++)u+=scheduler._cols[v];var f=new Date,g=scheduler._cols.length-scheduler._ignores_detected;
+f=(scheduler.date.add(f,this.x_step*g,this.x_unit)-f-(this._start_correction+this._end_correction)*g)/u,this._step=f,this._summ=u;var p=scheduler._colsS.heights=[];this._events_height={},this._section_height={};for(var v=0;v<this.y_unit.length;v++){var m=this._logic(this.render,this.y_unit[v],this);scheduler._merge(m,{height:this.dy}),this.section_autoheight&&(this.y_unit.length*m.height<t.offsetHeight&&(m.height=Math.max(m.height,Math.floor((t.offsetHeight-1)/this.y_unit.length))),this._section_height[this.y_unit[v].key]=m.height),scheduler._merge(m,{tr_className:"",style_height:"height:"+m.height+"px;",style_width:"width:"+(this.dx-1)+"px;",td_className:"dhx_matrix_scell"+(scheduler.templates[this.name+"_scaley_class"](this.y_unit[v].key,this.y_unit[v].label,this.y_unit[v])?" "+scheduler.templates[this.name+"_scaley_class"](this.y_unit[v].key,this.y_unit[v].label,this.y_unit[v]):""),td_content:scheduler.templates[this.name+"_scale_label"](this.y_unit[v].key,this.y_unit[v].label,this.y_unit[v]),summ_width:"width:"+u+"px;",table_className:""});
+var y=s.call(this,a[v]);if(this.fit_events){var x=this._events_height[this.y_unit[v].key]||0;m.height=x>m.height?x:m.height,m.style_height="height:"+m.height+"px;",this._section_height[this.y_unit[v].key]=m.height}if(r+="<tr class='"+m.tr_className+"' style='"+m.style_height+"'><td class='"+m.td_className+"' style='"+m.style_width+" height:"+(m.height-1)+"px;'>"+m.td_content+"</td>","cell"==this.render)for(var d=0;d<scheduler._cols.length;d++)r+=scheduler._ignores[d]?"<td></td>":"<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](a[v][d],this._trace_x[d],this.y_unit[v])+"' style='width:"+(scheduler._cols[d]-1)+"px'><div style='width:"+(scheduler._cols[d]-1)+"px'>"+scheduler.templates[this.name+"_cell_value"](a[v][d],this._trace_x[d],this.y_unit[v])+"</div></td>";
+else{r+="<td><div style='"+m.summ_width+" "+m.style_height+" position:relative;' class='dhx_matrix_line'>",r+=y,r+="<table class='"+m.table_className+"' cellpadding='0' cellspacing='0' style='"+m.summ_width+" "+m.style_height+"' >";for(var d=0;d<scheduler._cols.length;d++)r+=scheduler._ignores[d]?"<td></td>":"<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](a[v],this._trace_x[d],this.y_unit[v])+"' style='width:"+(scheduler._cols[d]-1)+"px'><div style='width:"+(scheduler._cols[d]-1)+"px'></div></td>";
+r+="</table>",r+="</div></td>"}r+="</tr>"}r+="</table>",this._matrix=a,t.innerHTML=r,scheduler._rendered=[];for(var b=scheduler._obj.getElementsByTagName("DIV"),v=0;v<b.length;v++)b[v].getAttribute("event_id")&&scheduler._rendered.push(b[v]);this._scales={};for(var v=0;v<t.firstChild.rows.length;v++){p.push(t.firstChild.rows[v].offsetHeight);var w=this.y_unit[v].key,k=this._scales[w]=scheduler._isRender("cell")?t.firstChild.rows[v]:t.firstChild.rows[v].childNodes[1].getElementsByTagName("div")[0];
+scheduler.callEvent("onScaleAdd",[k,w])}}function n(e){var t=scheduler.xy.scale_height,r=this._header_resized||scheduler.xy.scale_height;scheduler._cols=[],scheduler._colsS={height:0},this._trace_x=[];var s=scheduler._x-this.dx-scheduler.xy.scroll_width,a=[this.dx],n=scheduler._els.dhx_cal_header[0];n.style.width=a[0]+s+"px",scheduler._min_date_timeline=scheduler._min_date;var d=scheduler.config.preserve_scale_length,l=scheduler._min_date;scheduler._process_ignores(l,this.x_size,this.x_unit,this.x_step,d);
+var _=this.x_size+(d?scheduler._ignores_detected:0);_!=this.x_size&&(scheduler._max_date=scheduler.date.add(scheduler._min_date,_*this.x_step,this.x_unit));for(var o=_-scheduler._ignores_detected,h=0;_>h;h++)this._trace_x[h]=new Date(l),l=scheduler.date.add(l,this.x_step,this.x_unit),scheduler._ignores[h]?(scheduler._cols[h]=0,o++):scheduler._cols[h]=Math.floor(s/(o-h)),s-=scheduler._cols[h],a[h+1]=a[h]+scheduler._cols[h];if(e.innerHTML="<div></div>",this.second_scale){for(var u=this.second_scale.x_unit,v=[this._trace_x[0]],f=[],g=[this.dx,this.dx],p=0,m=0;m<this._trace_x.length;m++){var y=this._trace_x[m],x=i(u,y,v[p]);
+x&&(++p,v[p]=y,g[p+1]=g[p]);var b=p+1;f[p]=scheduler._cols[m]+(f[p]||0),g[b]+=scheduler._cols[m]}e.innerHTML="<div></div><div></div>";var w=e.firstChild;w.style.height=r+"px";var k=e.lastChild;k.style.position="relative";for(var E=0;E<v.length;E++){var D=v[E],N=scheduler.templates[this.name+"_second_scalex_class"](D),M=document.createElement("DIV");M.className="dhx_scale_bar dhx_second_scale_bar"+(N?" "+N:""),scheduler.set_xy(M,f[E]-1,r-3,g[E],0),M.innerHTML=scheduler.templates[this.name+"_second_scale_date"](D),w.appendChild(M)
+}}scheduler.xy.scale_height=r,e=e.lastChild;for(var C=0;C<this._trace_x.length;C++)if(!scheduler._ignores[C]){l=this._trace_x[C],scheduler._render_x_header(C,a[C],l,e);var O=scheduler.templates[this.name+"_scalex_class"](l);O&&(e.lastChild.className+=" "+O)}scheduler.xy.scale_height=t;var L=this._trace_x;e.onclick=function(e){var t=c(e);t&&scheduler.callEvent("onXScaleClick",[t.x,L[t.x],e||event])},e.ondblclick=function(e){var t=c(e);t&&scheduler.callEvent("onXScaleDblClick",[t.x,L[t.x],e||event])
+}}function i(e,t,r){switch(e){case"hour":return t.getHours()!=r.getHours()||i("day",t,r);case"day":return!(t.getDate()==r.getDate()&&t.getMonth()==r.getMonth()&&t.getFullYear()==r.getFullYear());case"week":return!(scheduler.date.getISOWeek(t)==scheduler.date.getISOWeek(r)&&t.getFullYear()==r.getFullYear());case"month":return!(t.getMonth()==r.getMonth()&&t.getFullYear()==r.getFullYear());case"year":return!(t.getFullYear()==r.getFullYear());default:return!1}}function d(e){if(e){scheduler.set_sizes(),scheduler._init_matrix_tooltip();
+var t=scheduler._min_date;n.call(this,scheduler._els.dhx_cal_header[0]),a.call(this,scheduler._els.dhx_cal_data[0]),scheduler._min_date=t,scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates[this.name+"_date"](scheduler._min_date,scheduler._max_date),scheduler._mark_now&&scheduler._mark_now()}l()}function l(){scheduler._tooltip&&(scheduler._tooltip.style.display="none",scheduler._tooltip.date="")}function _(e,t,r){if("cell"==e.render){var s=t.x+"_"+t.y,a=e._matrix[t.y][t.x];if(!a)return l();
+if(a.sort(function(e,t){return e.start_date>t.start_date?1:-1}),scheduler._tooltip){if(scheduler._tooltip.date==s)return;scheduler._tooltip.innerHTML=""}else{var n=scheduler._tooltip=document.createElement("DIV");n.className="dhx_year_tooltip",document.body.appendChild(n),n.onclick=scheduler._click.dhx_cal_data}for(var i="",d=0;d<a.length;d++){var _=a[d].color?"background-color:"+a[d].color+";":"",o=a[d].textColor?"color:"+a[d].textColor+";":"";i+="<div class='dhx_tooltip_line' event_id='"+a[d].id+"' style='"+_+o+"'>",i+="<div class='dhx_tooltip_date'>"+(a[d]._timed?scheduler.templates.event_date(a[d].start_date):"")+"</div>",i+="<div class='dhx_event_icon icon_details'>&nbsp;</div>",i+=scheduler.templates[e.name+"_tooltip"](a[d].start_date,a[d].end_date,a[d])+"</div>"
+}scheduler._tooltip.style.display="",scheduler._tooltip.style.top="0px",scheduler._tooltip.style.left=document.body.offsetWidth-r.left-scheduler._tooltip.offsetWidth<0?r.left-scheduler._tooltip.offsetWidth+"px":r.left+t.src.offsetWidth+"px",scheduler._tooltip.date=s,scheduler._tooltip.innerHTML=i,scheduler._tooltip.style.top=document.body.offsetHeight-r.top-scheduler._tooltip.offsetHeight<0?r.top-scheduler._tooltip.offsetHeight+t.src.offsetHeight+"px":r.top+"px"}}function o(e){for(var t=e.parentNode.childNodes,r=0;r<t.length;r++)if(t[r]==e)return r;
+return-1}function c(e){e=e||event;for(var t=e.target?e.target:e.srcElement;t&&"DIV"!=t.tagName;)t=t.parentNode;if(t&&"DIV"==t.tagName){var r=t.className.split(" ")[0];if("dhx_scale_bar"==r)return{x:o(t),y:-1,src:t,scale:!0}}}scheduler.matrix={},scheduler._merge=function(e,t){for(var r in t)"undefined"==typeof e[r]&&(e[r]=t[r])},scheduler.createTimelineView=function(e){scheduler._skin_init(),scheduler._merge(e,{section_autoheight:!0,name:"matrix",x:"time",y:"time",x_step:1,x_unit:"hour",y_unit:"day",y_step:1,x_start:0,x_size:24,y_start:0,y_size:7,render:"cell",dx:200,dy:50,event_dy:scheduler.xy.bar_height-5,event_min_dy:scheduler.xy.bar_height-5,resize_events:!0,fit_events:!0,show_unassigned:!1,second_scale:!1,round_position:!1,_logic:function(e,t,r){var s={};
+return scheduler.checkEvent("onBeforeSectionRender")&&(s=scheduler.callEvent("onBeforeSectionRender",[e,t,r])),s}}),e._original_x_start=e.x_start,"day"!=e.x_unit&&(e.first_hour=e.last_hour=0),e._start_correction=e.first_hour?60*e.first_hour*60*1e3:0,e._end_correction=e.last_hour?60*(24-e.last_hour)*60*1e3:0,scheduler.checkEvent("onTimelineCreated")&&scheduler.callEvent("onTimelineCreated",[e]);var t=scheduler.render_data;scheduler.render_data=function(r,s){if(this._mode!=e.name)return t.apply(this,arguments);
+if(s&&!e.show_unassigned&&"cell"!=e.render)for(var a=0;a<r.length;a++)this.clear_event(r[a]),this.render_timeline_event.call(this.matrix[this._mode],r[a],!0);else scheduler._renderMatrix.call(e,!0,!0)},scheduler.matrix[e.name]=e,scheduler.templates[e.name+"_cell_value"]=function(e){return e?e.length:""},scheduler.templates[e.name+"_cell_class"]=function(){return""},scheduler.templates[e.name+"_scalex_class"]=function(){return""},scheduler.templates[e.name+"_second_scalex_class"]=function(){return""
+},scheduler.templates[e.name+"_scaley_class"]=function(){return""},scheduler.templates[e.name+"_scale_label"]=function(e,t){return t},scheduler.templates[e.name+"_tooltip"]=function(e,t,r){return r.text},scheduler.templates[e.name+"_date"]=function(e,t){return e.getDay()==t.getDay()&&864e5>t-e||+e==+scheduler.date.date_part(new Date(t))||+scheduler.date.add(e,1,"day")==+t&&0===t.getHours()&&0===t.getMinutes()?scheduler.templates.day_date(e):e.getDay()!=t.getDay()&&864e5>t-e?scheduler.templates.day_date(e)+" &ndash; "+scheduler.templates.day_date(t):scheduler.templates.week_date(e,t)
+},scheduler.templates[e.name+"_scale_date"]=scheduler.date.date_to_str(e.x_date||scheduler.config.hour_date),scheduler.templates[e.name+"_second_scale_date"]=scheduler.date.date_to_str(e.second_scale&&e.second_scale.x_date?e.second_scale.x_date:scheduler.config.hour_date),scheduler.date["add_"+e.name]=function(t,r){var s=scheduler.date.add(t,(e.x_length||e.x_size)*r*e.x_step,e.x_unit);if("minute"==e.x_unit||"hour"==e.x_unit){var a=e.x_length||e.x_size,n="hour"==e.x_unit?60*e.x_step:e.x_step;if(n*a%1440)if(+scheduler.date.date_part(new Date(t))==+scheduler.date.date_part(new Date(s)))e.x_start+=r*a;
+else{var i=1440/(a*n)-1,d=Math.round(i*a);e.x_start=r>0?e.x_start-d:d+e.x_start}}return s},scheduler.date[e.name+"_start"]=function(t){var r=scheduler.date[e.x_unit+"_start"]||scheduler.date.day_start,s=r.call(scheduler.date,t);return s=scheduler.date.add(s,e.x_step*e.x_start,e.x_unit)},scheduler.callEvent("onOptionsLoad",[e]),scheduler[e.name+"_view"]=function(){scheduler._renderMatrix.apply(e,arguments)};{var s=new Date;scheduler.date.add(s,e.x_step,e.x_unit).valueOf()-s.valueOf()}scheduler["mouse_"+e.name]=function(t){var s=this._drag_event;
+this._drag_id&&(s=this.getEvent(this._drag_id),this._drag_event._dhx_changed=!0),t.x-=e.dx;var a,n,i=0,d=0;for(d;d<=this._cols.length-1;d++)if(n=this._cols[d],i+=n,i>t.x){a=(t.x-(i-n))/n,a=0>a?0:a;break}if(e.round_position){var l=1;scheduler.getState().drag_mode&&"move"!=scheduler.getState().drag_mode&&(l=.5),a>=l&&d++,a=0}if(0===d&&this._ignores[0])for(d=1,a=0;this._ignores[d];)d++;else if(d==this._cols.length&&this._ignores[d-1]){for(d=this._cols.length-1,a=0;this._ignores[d];)d--;d++}t.x=0,t.force_redraw=!0,t.custom=!0;
+var _;if(d>=e._trace_x.length)_=scheduler.date.add(e._trace_x[e._trace_x.length-1],e.x_step,e.x_unit),e._end_correction&&(_=new Date(_-e._end_correction));else{var o=a*n*e._step+e._start_correction;_=new Date(+e._trace_x[d]+o)}if("move"==this._drag_mode&&this._drag_id&&this._drag_event){var s=this.getEvent(this._drag_id),c=this._drag_event;if(t._ignores=this._ignores_detected||e._start_correction||e._end_correction,c._move_delta||(c._move_delta=(s.start_date-_)/6e4,this.config.preserve_length&&t._ignores&&(c._move_delta=this._get_real_event_length(s.start_date,_,e),c._event_length=this._get_real_event_length(s.start_date,s.end_date,e))),this.config.preserve_length&&t._ignores){var h=(c._event_length,this._get_fictional_event_length(_,c._move_delta,e,!0));
+_=new Date(_-h)}else _=scheduler.date.add(_,c._move_delta,"minute")}if("resize"==this._drag_mode&&s&&(this._drag_from_start&&+_>+s.end_date?this._drag_from_start=!1:!this._drag_from_start&&+_<+s.start_date&&(this._drag_from_start=!0),t.resize_from_start=this._drag_from_start),e.round_position)switch(this._drag_mode){case"move":this.config.preserve_length||(_=r.call(e,_,!1),"day"==e.x_unit&&(t.custom=!1));break;case"resize":this._drag_event&&((null===this._drag_event._resize_from_start||void 0===this._drag_event._resize_from_start)&&(this._drag_event._resize_from_start=t.resize_from_start),t.resize_from_start=this._drag_event._resize_from_start,_=r.call(e,_,!this._drag_event._resize_from_start))
+}return this._resolve_timeline_section(e,t),t.section&&this._update_timeline_section({pos:t,event:this.getEvent(this._drag_id),view:e}),t.y=Math.round((_-this._min_date)/(6e4*this.config.time_step)),t.shift=this.config.time_step,t}},scheduler._get_timeline_event_height=function(e,t){var r=e[t.y_property],s=t.event_dy;return"full"==t.event_dy&&(s=t.section_autoheight?t._section_height[r]-6:t.dy-3),t.resize_events&&(s=Math.max(Math.floor(s/e._count),t.event_min_dy)),s},scheduler._get_timeline_event_y=function(e,t){var r=e,s=2+r*t+(r?2*r:0);
+return scheduler.config.cascade_event_display&&(s=2+r*scheduler.config.cascade_event_margin+(r?2*r:0)),s},scheduler.render_timeline_event=function(e,r){var s=e[this.y_property];if(!s)return"";var a=e._sorder,n=t(e,!1,this),i=t(e,!0,this),d=scheduler._get_timeline_event_height(e,this),l=d-2;e._inner||"full"!=this.event_dy||(l=(l+2)*(e._count-a)-2);var _=scheduler._get_timeline_event_y(e._sorder,d),o=d+_+2;(!this._events_height[s]||this._events_height[s]<o)&&(this._events_height[s]=o);var c=scheduler.templates.event_class(e.start_date,e.end_date,e);
+c="dhx_cal_event_line "+(c||"");var h=e.color?"background:"+e.color+";":"",u=e.textColor?"color:"+e.textColor+";":"",v=scheduler.templates.event_bar_text(e.start_date,e.end_date,e),f='<div event_id="'+e.id+'" class="'+c+'" style="'+h+u+"position:absolute; top:"+_+"px; height: "+l+"px; left:"+n+"px; width:"+Math.max(0,i-n)+"px;"+(e._text_style||"")+'">';if(scheduler.config.drag_resize&&!scheduler.config.readonly){var g="dhx_event_resize";f+="<div class='"+g+" "+g+"_start' style='height: "+l+"px;'></div><div class='"+g+" "+g+"_end' style='height: "+l+"px;'></div>"
+}if(f+=v+"</div>",!r)return f;var p=document.createElement("DIV");p.innerHTML=f;var m=this.order[s],y=scheduler._els.dhx_cal_data[0].firstChild.rows[m].cells[1].firstChild;scheduler._rendered.push(p.firstChild),y.appendChild(p.firstChild)},scheduler._matrix_tooltip_handler=function(e){var t=scheduler.matrix[scheduler._mode];if(t&&"cell"==t.render){if(t){{var r=scheduler._locate_cell_timeline(e),e=e||event;e.target||e.srcElement}if(r)return _(t,r,getOffset(r.src))}l()}},scheduler._init_matrix_tooltip=function(){scheduler._detachDomEvent(scheduler._els.dhx_cal_data[0],"mouseover",scheduler._matrix_tooltip_handler),dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",scheduler._matrix_tooltip_handler)
+},scheduler._renderMatrix=function(e,t){if(t||(scheduler._els.dhx_cal_data[0].scrollTop=0),scheduler._min_date=scheduler.date[this.name+"_start"](scheduler._date),scheduler._max_date=scheduler.date.add(scheduler._min_date,this.x_size*this.x_step,this.x_unit),scheduler._table_view=!0,this.second_scale&&(e&&!this._header_resized&&(this._header_resized=scheduler.xy.scale_height,scheduler.xy.scale_height*=2,scheduler._els.dhx_cal_header[0].className+=" dhx_second_cal_header"),!e&&this._header_resized)){scheduler.xy.scale_height/=2,this._header_resized=!1;
+var r=scheduler._els.dhx_cal_header[0];r.className=r.className.replace(/ dhx_second_cal_header/gi,"")}d.call(this,e)},scheduler._locate_cell_timeline=function(e){e=e||event;for(var t=e.target?e.target:e.srcElement,r={},s=scheduler.matrix[scheduler._mode],a=scheduler.getActionData(e),n=0;n<s._trace_x.length-1&&!(+a.date<s._trace_x[n+1]);n++);r.x=n,r.y=s.order[a.section];var i=scheduler._isRender("cell")?1:0;r.src=s._scales[a.section]?s._scales[a.section].getElementsByTagName("td")[n+i]:null;for(var d=!1;0===r.x&&"dhx_cal_data"!=t.className&&t.parentNode;){if("dhx_matrix_scell"==t.className.split(" ")[0]){d=!0;
+break}t=t.parentNode}return d&&(r.x=-1,r.src=t,r.scale=!0),r};var h=scheduler._click.dhx_cal_data;scheduler._click.dhx_marked_timespan=scheduler._click.dhx_cal_data=function(e){var t=h.apply(this,arguments),r=scheduler.matrix[scheduler._mode];if(r){var s=scheduler._locate_cell_timeline(e);s&&(s.scale?scheduler.callEvent("onYScaleClick",[s.y,r.y_unit[s.y],e||event]):scheduler.callEvent("onCellClick",[s.x,s.y,r._trace_x[s.x],(r._matrix[s.y]||{})[s.x]||[],e||event]))}return t},scheduler.dblclick_dhx_matrix_cell=function(e){var t=scheduler.matrix[scheduler._mode];
+if(t){var r=scheduler._locate_cell_timeline(e);r&&(r.scale?scheduler.callEvent("onYScaleDblClick",[r.y,t.y_unit[r.y],e||event]):scheduler.callEvent("onCellDblClick",[r.x,r.y,t._trace_x[r.x],(t._matrix[r.y]||{})[r.x]||[],e||event]))}};var u=scheduler.dblclick_dhx_marked_timespan||function(){};scheduler.dblclick_dhx_marked_timespan=function(e){var t=scheduler.matrix[scheduler._mode];return t?scheduler.dblclick_dhx_matrix_cell(e):u.apply(this,arguments)},scheduler.dblclick_dhx_matrix_scell=function(e){return scheduler.dblclick_dhx_matrix_cell(e)
+},scheduler._isRender=function(e){return scheduler.matrix[scheduler._mode]&&scheduler.matrix[scheduler._mode].render==e},scheduler.attachEvent("onCellDblClick",function(e,t,r,s,a){if(!this.config.readonly&&("dblclick"!=a.type||this.config.dblclick_create)){var n=scheduler.matrix[scheduler._mode],i={};i.start_date=n._trace_x[e],i.end_date=n._trace_x[e+1]?n._trace_x[e+1]:scheduler.date.add(n._trace_x[e],n.x_step,n.x_unit),n._start_correction&&(i.start_date=new Date(1*i.start_date+n._start_correction)),n._end_correction&&(i.end_date=new Date(i.end_date-n._end_correction)),i[n.y_property]=n.y_unit[t].key,scheduler.addEventNow(i,null,a)
+}}),scheduler.attachEvent("onBeforeDrag",function(){return!scheduler._isRender("cell")}),scheduler.attachEvent("onEventChanged",function(e,t){t._timed=this.isOneDayEvent(t)});var v=scheduler._render_marked_timespan;scheduler._render_marked_timespan=function(e,r,s,a,n){if(!scheduler.config.display_marked_timespans)return[];if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){if(scheduler._isRender("cell"))return;var i=scheduler._lame_copy({},scheduler.matrix[scheduler._mode]);i.round_position=!1;
+var d=[],l=[],_=[],o=e.sections?e.sections.units||e.sections.timeline:null;if(s)_=[r],l=[s];else{var c=i.order;if(o)c.hasOwnProperty(o)&&(l.push(o),_.push(i._scales[o]));else for(var h in c)c.hasOwnProperty(h)&&(l.push(h),_.push(i._scales[h]))}var a=a?new Date(a):scheduler._min_date,n=n?new Date(n):scheduler._max_date,u=[];if(e.days>6){var f=new Date(e.days);scheduler.date.date_part(new Date(a))<=+f&&+n>=+f&&u.push(f)}else u.push.apply(u,scheduler._get_dates_by_index(e.days));for(var g=e.zones,p=scheduler._get_css_classes_by_config(e),m=0;m<l.length;m++){r=_[m],s=l[m];
+for(var y=0;y<u.length;y++)for(var x=u[y],b=0;b<g.length;b+=2){var w=g[b],k=g[b+1],E=new Date(+x+60*w*1e3),D=new Date(+x+60*k*1e3);if(D>a&&n>E){var N=scheduler._get_block_by_config(e);N.className=p;var M=t({start_date:E},!1,i)-1,C=t({start_date:D},!1,i)-1,O=Math.max(1,C-M-1),L=i._section_height[s]-1;N.style.cssText="height: "+L+"px; left: "+M+"px; width: "+O+"px; top: 0;",r.insertBefore(N,r.firstChild),d.push(N)}}}return d}return v.apply(scheduler,[e,r,s])};var f=scheduler._append_mark_now;scheduler._append_mark_now=function(e,t){if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){var r=scheduler._currentDate(),s=scheduler._get_zone_minutes(r),a={days:+scheduler.date.date_part(r),zones:[s,s+1],css:"dhx_matrix_now_time",type:"dhx_now_time"};
+return scheduler._render_marked_timespan(a)}return f.apply(scheduler,[e,t])},scheduler.attachEvent("onScaleAdd",function(e,t){var r=scheduler._marked_timespans;if(r&&scheduler.matrix&&scheduler.matrix[scheduler._mode])for(var s=scheduler._mode,a=scheduler._min_date,n=scheduler._max_date,i=r.global,d=scheduler.date.date_part(new Date(a));n>d;d=scheduler.date.add(d,1,"day")){var l=+d,_=d.getDay(),o=[],c=i[l]||i[_];if(o.push.apply(o,scheduler._get_configs_to_render(c)),r[s]&&r[s][t]){var h=[],u=scheduler._get_types_to_render(r[s][t][_],r[s][t][l]);
+h.push.apply(h,scheduler._get_configs_to_render(u)),h.length&&(o=h)}for(var v=0;v<o.length;v++){var f=o[v],g=f.days;7>g?(g=l,scheduler._render_marked_timespan(f,e,t,d,scheduler.date.add(d,1,"day")),g=_):scheduler._render_marked_timespan(f,e,t,d,scheduler.date.add(d,1,"day"))}}}),scheduler._resolve_timeline_section=function(e,t){var r=0,s=0;for(r;r<this._colsS.heights.length&&(s+=this._colsS.heights[r],!(s>t.y));r++);e.y_unit[r]||(r=e.y_unit.length-1),this._drag_event&&!this._drag_event._orig_section&&(this._drag_event._orig_section=e.y_unit[r].key),t.fields={},r>=0&&e.y_unit[r]&&(t.section=t.fields[e.y_property]=e.y_unit[r].key)
+},scheduler._update_timeline_section=function(e){var t=e.view,r=e.event,s=e.pos;if(r){if(r[t.y_property]!=s.section){var a=this._get_timeline_event_height(r,t);r._sorder=this._get_dnd_order(r._sorder,a,t._section_height[s.section])}r[t.y_property]=s.section}},scheduler._get_date_index=function(e,t){for(var r=0,s=e._trace_x;r<s.length-1&&+t>=+s[r+1];)r++;return r},scheduler.attachEvent("onBeforeTodayDisplayed",function(){for(var e in scheduler.matrix){var t=scheduler.matrix[e];t.x_start=t._original_x_start
+}return!0}),scheduler.attachEvent("onOptionsLoad",function(){for(var e in scheduler.matrix){var t=scheduler.matrix[e];t.order={},scheduler.callEvent("onOptionsLoadStart",[]);for(var e=0;e<t.y_unit.length;e++)t.order[t.y_unit[e].key]=e;scheduler.callEvent("onOptionsLoadFinal",[]),scheduler._date&&t.name==scheduler._mode&&scheduler.setCurrentView(scheduler._date,scheduler._mode)}}),scheduler.attachEvent("onSchedulerResize",function(){if(scheduler.matrix[this._mode]){var e=scheduler.matrix[this._mode];
+return scheduler._renderMatrix.call(e,!0,!0),!1}return!0}),scheduler.attachEvent("onBeforeDrag",function(e,t,r){if("resize"==t){var s=r.target||r.srcElement;scheduler._drag_from_start=(s.className||"").indexOf("dhx_event_resize_end")<0?!0:!1}return!0})},scheduler._temp_matrix_scope();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_timeline.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_tooltip.js b/codebase/ext/dhtmlxscheduler_tooltip.js
index aeeeb8b..b2f738e 100644
--- a/codebase/ext/dhtmlxscheduler_tooltip.js
+++ b/codebase/ext/dhtmlxscheduler_tooltip.js
@@ -1,13 +1,15 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-window.dhtmlXTooltip=scheduler.dhtmlXTooltip=window.dhtmlxTooltip={};dhtmlXTooltip.config={className:"dhtmlXTooltip tooltip",timeout_to_display:50,timeout_to_hide:50,delta_x:15,delta_y:-20};dhtmlXTooltip.tooltip=document.createElement("div");dhtmlXTooltip.tooltip.className=dhtmlXTooltip.config.className;
-dhtmlXTooltip.show=function(b,d){if(!scheduler.config.touch||scheduler.config.touch_tooltip){var c=dhtmlXTooltip,g=this.tooltip,a=g.style;c.tooltip.className=c.config.className;var h=this.position(b),i=b.target||b.srcElement;if(!this.isTooltip(i)){var e=h.x+(c.config.delta_x||0),f=h.y-(c.config.delta_y||0);a.visibility="hidden";a.removeAttribute?(a.removeAttribute("right"),a.removeAttribute("bottom")):(a.removeProperty("right"),a.removeProperty("bottom"));a.left="0";a.top="0";this.tooltip.innerHTML=
-d;document.body.appendChild(this.tooltip);var j=this.tooltip.offsetWidth,k=this.tooltip.offsetHeight;document.body.offsetWidth-e-j<0?(a.removeAttribute?a.removeAttribute("left"):a.removeProperty("left"),a.right=document.body.offsetWidth-e+2*(c.config.delta_x||0)+"px"):a.left=e<0?h.x+Math.abs(c.config.delta_x||0)+"px":e+"px";document.body.offsetHeight-f-k<0?(a.removeAttribute?a.removeAttribute("top"):a.removeProperty("top"),a.bottom=document.body.offsetHeight-f-2*(c.config.delta_y||0)+"px"):a.top=
-f<0?h.y+Math.abs(c.config.delta_y||0)+"px":f+"px";a.visibility="visible";scheduler.callEvent("onTooltipDisplayed",[this.tooltip,this.tooltip.event_id])}}};dhtmlXTooltip._clearTimeout=function(){this.tooltip._timeout_id&&window.clearTimeout(this.tooltip._timeout_id)};dhtmlXTooltip.hide=function(){if(this.tooltip.parentNode){var b=this.tooltip.event_id;this.tooltip.event_id=null;this.tooltip.parentNode.removeChild(this.tooltip);scheduler.callEvent("onAfterTooltip",[b])}this._clearTimeout()};
-dhtmlXTooltip.delay=function(b,d,c,g){this._clearTimeout();this.tooltip._timeout_id=setTimeout(function(){var a=b.apply(d,c);b=d=c=null;return a},g||this.config.timeout_to_display)};dhtmlXTooltip.isTooltip=function(b){var d=!1;for(b.className.split(" ");b&&!d;)d=b.className==this.tooltip.className,b=b.parentNode;return d};
-dhtmlXTooltip.position=function(b){b=b||window.event;if(b.pageX||b.pageY)return{x:b.pageX,y:b.pageY};var d=window._isIE&&document.compatMode!="BackCompat"?document.documentElement:document.body;return{x:b.clientX+d.scrollLeft-d.clientLeft,y:b.clientY+d.scrollTop-d.clientTop}};
-scheduler.attachEvent("onMouseMove",function(b,d){var c=window.event||d,g=c.target||c.srcElement,a=dhtmlXTooltip,h=a.isTooltip(g),i=a.isTooltipTarget&&a.isTooltipTarget(g);if(b||h||i){var e;if(b||a.tooltip.event_id){var f=scheduler.getEvent(b)||scheduler.getEvent(a.tooltip.event_id);if(!f)return;a.tooltip.event_id=f.id;e=scheduler.templates.tooltip_text(f.start_date,f.end_date,f);if(!e)return a.hide()}i&&(e="");var j=void 0;_isIE&&(j=document.createEventObject(c));scheduler.callEvent("onBeforeTooltip",
-[b])&&e&&a.delay(a.show,a,[j||c,e])}else a.delay(a.hide,a,[],a.config.timeout_to_hide)});scheduler.attachEvent("onBeforeDrag",function(){dhtmlXTooltip.hide();return!0});scheduler.attachEvent("onEventDeleted",function(){dhtmlXTooltip.hide();return!0});scheduler.templates.tooltip_date_format=scheduler.date.date_to_str("%Y-%m-%d %H:%i");
-scheduler.templates.tooltip_text=function(b,d,c){return"<b>Event:</b> "+c.text+"<br/><b>Start date:</b> "+scheduler.templates.tooltip_date_format(b)+"<br/><b>End date:</b> "+scheduler.templates.tooltip_date_format(d)};
+window.dhtmlXTooltip=scheduler.dhtmlXTooltip=window.dhtmlxTooltip={},dhtmlXTooltip.config={className:"dhtmlXTooltip tooltip",timeout_to_display:50,timeout_to_hide:50,delta_x:15,delta_y:-20},dhtmlXTooltip.tooltip=document.createElement("div"),dhtmlXTooltip.tooltip.className=dhtmlXTooltip.config.className,dhtmlXTooltip.show=function(e,t){if(!scheduler.config.touch||scheduler.config.touch_tooltip){var r=dhtmlXTooltip,s=this.tooltip,a=s.style;r.tooltip.className=r.config.className;var i=this.position(e),n=e.target||e.srcElement;
+if(!this.isTooltip(n)){var d=i.x+(r.config.delta_x||0),l=i.y-(r.config.delta_y||0);a.visibility="hidden",a.removeAttribute?(a.removeAttribute("right"),a.removeAttribute("bottom")):(a.removeProperty("right"),a.removeProperty("bottom")),a.left="0",a.top="0",this.tooltip.innerHTML=t,document.body.appendChild(this.tooltip);var o=this.tooltip.offsetWidth,_=this.tooltip.offsetHeight;document.body.offsetWidth-d-o<0?(a.removeAttribute?a.removeAttribute("left"):a.removeProperty("left"),a.right=document.body.offsetWidth-d+2*(r.config.delta_x||0)+"px"):a.left=0>d?i.x+Math.abs(r.config.delta_x||0)+"px":d+"px",document.body.offsetHeight-l-_<0?(a.removeAttribute?a.removeAttribute("top"):a.removeProperty("top"),a.bottom=document.body.offsetHeight-l-2*(r.config.delta_y||0)+"px"):a.top=0>l?i.y+Math.abs(r.config.delta_y||0)+"px":l+"px",a.visibility="visible",this.tooltip.onmouseleave=function(e){for(var t=scheduler.dhtmlXTooltip,r=e.relatedTarget;r!=scheduler._obj&&r;)r=r.parentNode;
+r!=scheduler._obj&&t.delay(t.hide,t,[],t.config.timeout_to_hide)},scheduler.callEvent("onTooltipDisplayed",[this.tooltip,this.tooltip.event_id])}}},dhtmlXTooltip._clearTimeout=function(){this.tooltip._timeout_id&&window.clearTimeout(this.tooltip._timeout_id)},dhtmlXTooltip.hide=function(){if(this.tooltip.parentNode){var e=this.tooltip.event_id;this.tooltip.event_id=null,this.tooltip.onmouseleave=null,this.tooltip.parentNode.removeChild(this.tooltip),scheduler.callEvent("onAfterTooltip",[e])}this._clearTimeout()
+},dhtmlXTooltip.delay=function(e,t,r,s){this._clearTimeout(),this.tooltip._timeout_id=setTimeout(function(){var s=e.apply(t,r);return e=t=r=null,s},s||this.config.timeout_to_display)},dhtmlXTooltip.isTooltip=function(e){var t=!1;for("dhtmlXTooltip"==e.className.split(" ")[0];e&&!t;)t=e.className==this.tooltip.className,e=e.parentNode;return t},dhtmlXTooltip.position=function(e){if(e=e||window.event,e.pageX||e.pageY)return{x:e.pageX,y:e.pageY};var t=window._isIE&&"BackCompat"!=document.compatMode?document.documentElement:document.body;
+return{x:e.clientX+t.scrollLeft-t.clientLeft,y:e.clientY+t.scrollTop-t.clientTop}},scheduler.attachEvent("onMouseMove",function(e,t){var r=window.event||t,s=r.target||r.srcElement,a=dhtmlXTooltip,i=a.isTooltip(s),n=a.isTooltipTarget&&a.isTooltipTarget(s);if(e||i||n){var d;if(e||a.tooltip.event_id){var l=scheduler.getEvent(e)||scheduler.getEvent(a.tooltip.event_id);if(!l)return;if(a.tooltip.event_id=l.id,d=scheduler.templates.tooltip_text(l.start_date,l.end_date,l),!d)return a.hide()}n&&(d="");var o;
+if(_isIE){o={pageX:void 0,pageY:void 0,clientX:void 0,clientY:void 0,target:void 0,srcElement:void 0};for(var _ in o)o[_]=r[_]}if(!scheduler.callEvent("onBeforeTooltip",[e])||!d)return;a.delay(a.show,a,[o||r,d])}else a.delay(a.hide,a,[],a.config.timeout_to_hide)}),scheduler.attachEvent("onBeforeDrag",function(){return dhtmlXTooltip.hide(),!0}),scheduler.attachEvent("onEventDeleted",function(){return dhtmlXTooltip.hide(),!0}),scheduler.templates.tooltip_date_format=scheduler.date.date_to_str("%Y-%m-%d %H:%i"),scheduler.templates.tooltip_text=function(e,t,r){return"<b>Event:</b> "+r.text+"<br/><b>Start date:</b> "+scheduler.templates.tooltip_date_format(e)+"<br/><b>End date:</b> "+scheduler.templates.tooltip_date_format(t)
+};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_tooltip.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_treetimeline.js b/codebase/ext/dhtmlxscheduler_treetimeline.js
index 0cd4ca5..cc20ac1 100644
--- a/codebase/ext/dhtmlxscheduler_treetimeline.js
+++ b/codebase/ext/dhtmlxscheduler_treetimeline.js
@@ -1,19 +1,19 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.attachEvent("onTimelineCreated",function(a){if(a.render=="tree")a.y_unit_original=a.y_unit,a.y_unit=scheduler._getArrayToDisplay(a.y_unit_original),scheduler.attachEvent("onOptionsLoadStart",function(){a.y_unit=scheduler._getArrayToDisplay(a.y_unit_original)}),scheduler.form_blocks[a.name]={render:function(b){var d="<div class='dhx_section_timeline' style='overflow: hidden; height: "+b.height+"px'></div>";return d},set_value:function(b,d,g,e){var c=scheduler._getArrayForSelect(scheduler.matrix[e.type].y_unit_original,
-e.type);b.innerHTML="";var a=document.createElement("select");b.appendChild(a);var h=b.getElementsByTagName("select")[0];if(!h._dhx_onchange&&e.onchange)h.onchange=e.onchange,h._dhx_onchange=!0;for(var k=0;k<c.length;k++){var j=document.createElement("option");j.value=c[k].key;if(j.value==g[scheduler.matrix[e.type].y_property])j.selected=!0;j.innerHTML=c[k].label;h.appendChild(j)}},get_value:function(b){return b.firstChild.value},focus:function(){}}});
-scheduler.attachEvent("onBeforeSectionRender",function(a,b,d){var g={};if(a=="tree"){var e,c,f,h,k,j;b.children?(e=d.folder_dy||d.dy,d.folder_dy&&!d.section_autoheight&&(f="height:"+d.folder_dy+"px;"),c="dhx_row_folder",h="dhx_matrix_scell folder",k="<div class='dhx_scell_expand'>"+(b.open?"-":"+")+"</div>",j=d.folder_events_available?"dhx_data_table folder_events":"dhx_data_table folder"):(e=d.dy,c="dhx_row_item",h="dhx_matrix_scell item",k="",j="dhx_data_table");var i="<div class='dhx_scell_level"+
-b.level+"'>"+k+"<div class='dhx_scell_name'>"+(scheduler.templates[d.name+"_scale_label"](b.key,b.label,b)||b.label)+"</div></div>",g={height:e,style_height:f,tr_className:c,td_className:h,td_content:i,table_className:j}}return g});var section_id_before;
-scheduler.attachEvent("onBeforeEventChanged",function(a,b,d){if(scheduler._isRender("tree")){var g=scheduler.getSection(a[scheduler.matrix[scheduler._mode].y_property]);if(g&&typeof g.children!="undefined"&&!scheduler.matrix[scheduler._mode].folder_events_available)return d||(a[scheduler.matrix[scheduler._mode].y_property]=section_id_before),!1}return!0});
-scheduler.attachEvent("onBeforeDrag",function(a,b,d){if(scheduler._isRender("tree")){var g=scheduler._locate_cell_timeline(d);if(g){var e=scheduler.matrix[scheduler._mode].y_unit[g.y].key;if(typeof scheduler.matrix[scheduler._mode].y_unit[g.y].children!="undefined"&&!scheduler.matrix[scheduler._mode].folder_events_available)return!1}var c=scheduler.getEvent(a);section_id_before=e||c[scheduler.matrix[scheduler._mode].y_property]}return!0});
-scheduler._getArrayToDisplay=function(a){var b=[],d=function(a,e){for(var c=e||0,f=0;f<a.length;f++){a[f].level=c;if(typeof a[f].children!="undefined"&&typeof a[f].key=="undefined")a[f].key=scheduler.uid();b.push(a[f]);a[f].open&&a[f].children&&d(a[f].children,c+1)}};d(a);return b};
-scheduler._getArrayForSelect=function(a,b){var d=[],g=function(a){for(var c=0;c<a.length;c++)scheduler.matrix[b].folder_events_available?d.push(a[c]):typeof a[c].children=="undefined"&&d.push(a[c]),a[c].children&&g(a[c].children,b)};g(a);return d};
-scheduler._toggleFolderDisplay=function(a,b,d){var g,e=function(a,b,c,d){for(var i=0;i<b.length;i++){if((b[i].key==a||d)&&b[i].children)if(b[i].open=typeof c!="undefined"?c:!b[i].open,g=!0,!d&&g)break;b[i].children&&e(a,b[i].children,c,d)}},c=scheduler.getSection(a);if(scheduler.callEvent("onBeforeFolderToggle",[c,b,d]))e(a,scheduler.matrix[scheduler._mode].y_unit_original,b,d),scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original),
-scheduler.callEvent("onOptionsLoad",[]),scheduler.callEvent("onAfterFolderToggle",[c,b,d])};scheduler.attachEvent("onCellClick",function(a,b){scheduler._isRender("tree")&&(scheduler.matrix[scheduler._mode].folder_events_available||typeof scheduler.matrix[scheduler._mode].y_unit[b].children!="undefined"&&scheduler._toggleFolderDisplay(scheduler.matrix[scheduler._mode].y_unit[b].key))});
-scheduler.attachEvent("onYScaleClick",function(a,b){scheduler._isRender("tree")&&typeof b.children!="undefined"&&scheduler._toggleFolderDisplay(b.key)});scheduler.getSection=function(a){if(scheduler._isRender("tree")){var b,d=function(a,e){for(var c=0;c<e.length;c++)e[c].key==a&&(b=e[c]),e[c].children&&d(a,e[c].children)};d(a,scheduler.matrix[scheduler._mode].y_unit_original);return b||null}};
-scheduler.deleteSection=function(a){if(scheduler._isRender("tree")){var b=!1,d=function(a,e){for(var c=0;c<e.length;c++){e[c].key==a&&(e.splice(c,1),b=!0);if(b)break;e[c].children&&d(a,e[c].children)}};d(a,scheduler.matrix[scheduler._mode].y_unit_original);scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);scheduler.callEvent("onOptionsLoad",[]);return b}};
-scheduler.deleteAllSections=function(){if(scheduler._isRender("tree"))scheduler.matrix[scheduler._mode].y_unit_original=[],scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original),scheduler.callEvent("onOptionsLoad",[])};
-scheduler.addSection=function(a,b){if(scheduler._isRender("tree")){var d=!1,g=function(a,c,f){if(b)for(var h=0;h<f.length;h++){f[h].key==c&&typeof f[h].children!="undefined"&&(f[h].children.push(a),d=!0);if(d)break;f[h].children&&g(a,c,f[h].children)}else f.push(a),d=!0};g(a,b,scheduler.matrix[scheduler._mode].y_unit_original);scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);scheduler.callEvent("onOptionsLoad",[]);return d}};
-scheduler.openAllSections=function(){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(1,!0,!0)};scheduler.closeAllSections=function(){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(1,!1,!0)};scheduler.openSection=function(a){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(a,!0)};scheduler.closeSection=function(a){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(a,!1)};
+scheduler.attachEvent("onTimelineCreated",function(e){"tree"==e.render&&(e.y_unit_original=e.y_unit,e.y_unit=scheduler._getArrayToDisplay(e.y_unit_original),scheduler.attachEvent("onOptionsLoadStart",function(){e.y_unit=scheduler._getArrayToDisplay(e.y_unit_original)}),scheduler.form_blocks[e.name]={render:function(e){var t="<div class='dhx_section_timeline' style='overflow: hidden; height: "+e.height+"px'></div>";return t},set_value:function(e,t,r,s){var a=scheduler._getArrayForSelect(scheduler.matrix[s.type].y_unit_original,s.type);
+e.innerHTML="";var i=document.createElement("select");e.appendChild(i);var n=e.getElementsByTagName("select")[0];!n._dhx_onchange&&s.onchange&&(n.onchange=s.onchange,n._dhx_onchange=!0);for(var d=0;d<a.length;d++){var l=document.createElement("option");l.value=a[d].key,l.value==r[scheduler.matrix[s.type].y_property]&&(l.selected=!0),l.innerHTML=a[d].label,n.appendChild(l)}},get_value:function(e){return e.firstChild.value},focus:function(){}})}),scheduler.attachEvent("onBeforeSectionRender",function(e,t,r){var s={};
+if("tree"==e){var a,i,n,d,l,o;t.children?(a=r.folder_dy||r.dy,r.folder_dy&&!r.section_autoheight&&(n="height:"+r.folder_dy+"px;"),i="dhx_row_folder",d="dhx_matrix_scell folder",l="<div class='dhx_scell_expand'>"+(t.open?"-":"+")+"</div>",o=r.folder_events_available?"dhx_data_table folder_events":"dhx_data_table folder"):(a=r.dy,i="dhx_row_item",d="dhx_matrix_scell item"+(scheduler.templates[r.name+"_scaley_class"](t.key,t.label,t)?" "+scheduler.templates[r.name+"_scaley_class"](t.key,t.label,t):""),l="",o="dhx_data_table");
+var _="<div class='dhx_scell_level"+t.level+"'>"+l+"<div class='dhx_scell_name'>"+(scheduler.templates[r.name+"_scale_label"](t.key,t.label,t)||t.label)+"</div></div>";s={height:a,style_height:n,tr_className:i,td_className:d,td_content:_,table_className:o}}return s});var section_id_before;scheduler.attachEvent("onBeforeEventChanged",function(e,t,r){if(scheduler._isRender("tree")){var s=scheduler.getSection(e[scheduler.matrix[scheduler._mode].y_property]);if(s&&"undefined"!=typeof s.children&&!scheduler.matrix[scheduler._mode].folder_events_available)return r||(e[scheduler.matrix[scheduler._mode].y_property]=section_id_before),!1
+}return!0}),scheduler.attachEvent("onBeforeDrag",function(e,t,r){if(scheduler._isRender("tree")){var s,a=scheduler._locate_cell_timeline(r);if(a&&(s=scheduler.matrix[scheduler._mode].y_unit[a.y].key,"undefined"!=typeof scheduler.matrix[scheduler._mode].y_unit[a.y].children&&!scheduler.matrix[scheduler._mode].folder_events_available))return!1;var i=scheduler.getEvent(e);section_id_before=s||i[scheduler.matrix[scheduler._mode].y_property]}return!0}),scheduler._getArrayToDisplay=function(e){var t=[],r=function(e,s){for(var a=s||0,i=0;i<e.length;i++)e[i].level=a,"undefined"!=typeof e[i].children&&"undefined"==typeof e[i].key&&(e[i].key=scheduler.uid()),t.push(e[i]),e[i].open&&e[i].children&&r(e[i].children,a+1)
+};return r(e),t},scheduler._getArrayForSelect=function(e,t){var r=[],s=function(e){for(var a=0;a<e.length;a++)scheduler.matrix[t].folder_events_available?r.push(e[a]):"undefined"==typeof e[a].children&&r.push(e[a]),e[a].children&&s(e[a].children,t)};return s(e),r},scheduler._toggleFolderDisplay=function(e,t,r){var s,a=function(e,t,r,i){for(var n=0;n<t.length&&(t[n].key!=e&&!i||!t[n].children||(t[n].open="undefined"!=typeof r?r:!t[n].open,s=!0,i||!s));n++)t[n].children&&a(e,t[n].children,r,i)},i=scheduler.getSection(e);
+"undefined"!=typeof t||r||(t=!i.open),scheduler.callEvent("onBeforeFolderToggle",[i,t,r])&&(a(e,scheduler.matrix[scheduler._mode].y_unit_original,t,r),scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original),scheduler.callEvent("onOptionsLoad",[]),scheduler.callEvent("onAfterFolderToggle",[i,t,r]))},scheduler.attachEvent("onCellClick",function(e,t){scheduler._isRender("tree")&&(scheduler.matrix[scheduler._mode].folder_events_available||"undefined"!=typeof scheduler.matrix[scheduler._mode].y_unit[t]&&"undefined"!=typeof scheduler.matrix[scheduler._mode].y_unit[t].children&&scheduler._toggleFolderDisplay(scheduler.matrix[scheduler._mode].y_unit[t].key))
+}),scheduler.attachEvent("onYScaleClick",function(e,t){scheduler._isRender("tree")&&"undefined"!=typeof t.children&&scheduler._toggleFolderDisplay(t.key)}),scheduler.getSection=function(e){if(scheduler._isRender("tree")){var t,r=function(e,s){for(var a=0;a<s.length;a++)s[a].key==e&&(t=s[a]),s[a].children&&r(e,s[a].children)};return r(e,scheduler.matrix[scheduler._mode].y_unit_original),t||null}},scheduler.deleteSection=function(e){if(scheduler._isRender("tree")){var t=!1,r=function(e,s){for(var a=0;a<s.length&&(s[a].key==e&&(s.splice(a,1),t=!0),!t);a++)s[a].children&&r(e,s[a].children)
+};return r(e,scheduler.matrix[scheduler._mode].y_unit_original),scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original),scheduler.callEvent("onOptionsLoad",[]),t}},scheduler.deleteAllSections=function(){scheduler._isRender("tree")&&(scheduler.matrix[scheduler._mode].y_unit_original=[],scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original),scheduler.callEvent("onOptionsLoad",[]))
+},scheduler.addSection=function(e,t){if(scheduler._isRender("tree")){var r=!1,s=function(e,a,i){if(t)for(var n=0;n<i.length&&(i[n].key==a&&"undefined"!=typeof i[n].children&&(i[n].children.push(e),r=!0),!r);n++)i[n].children&&s(e,a,i[n].children);else i.push(e),r=!0};return s(e,t,scheduler.matrix[scheduler._mode].y_unit_original),scheduler.matrix[scheduler._mode].y_unit=scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original),scheduler.callEvent("onOptionsLoad",[]),r}},scheduler.openAllSections=function(){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(1,!0,!0)
+},scheduler.closeAllSections=function(){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(1,!1,!0)},scheduler.openSection=function(e){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(e,!0)},scheduler.closeSection=function(e){scheduler._isRender("tree")&&scheduler._toggleFolderDisplay(e,!1)};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_treetimeline.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_units.js b/codebase/ext/dhtmlxscheduler_units.js
index 07b04a7..1a0f21b 100644
--- a/codebase/ext/dhtmlxscheduler_units.js
+++ b/codebase/ext/dhtmlxscheduler_units.js
@@ -1,16 +1,18 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler._props={};
-scheduler.createUnitsView=function(a,g,j,f,k,l){if(typeof a=="object")j=a.list,g=a.property,f=a.size||0,k=a.step||1,l=a.skip_incorrect,a=a.name;scheduler._props[a]={map_to:g,options:j,step:k,position:0};if(f>scheduler._props[a].options.length)scheduler._props[a]._original_size=f,f=0;scheduler._props[a].size=f;scheduler._props[a].skip_incorrect=l||!1;scheduler.date[a+"_start"]=scheduler.date.day_start;scheduler.templates[a+"_date"]=function(a){return scheduler.templates.day_date(a)};scheduler._get_unit_index=
-function(a,i){var h=a.position||0,g=Math.floor((scheduler._correct_shift(+i,1)-+scheduler._min_date)/864E5);return h+g};scheduler.templates[a+"_scale_text"]=function(a,i,h){return h.css?"<span class='"+h.css+"'>"+i+"</span>":i};scheduler.templates[a+"_scale_date"]=function(c){var i=scheduler._props[a],h=i.options;if(!h.length)return"";var g=scheduler._get_unit_index(i,c),b=h[g];return scheduler.templates[a+"_scale_text"](b.key,b.label,b)};scheduler.date["add_"+a]=function(a,g){return scheduler.date.add(a,
-g,"day")};scheduler.date["get_"+a+"_end"]=function(c){return scheduler.date.add(c,scheduler._props[a].size||scheduler._props[a].options.length,"day")};scheduler.attachEvent("onOptionsLoad",function(){for(var c=scheduler._props[a],g=c.order={},h=c.options,f=0;f<h.length;f++)g[h[f].key]=f;if(c._original_size&&c.size==0)c.size=c._original_size,delete c.original_size;c.size>h.length?(c._original_size=c.size,c.size=0):c.size=c._original_size||c.size;scheduler._date&&scheduler._mode==a&&scheduler.setCurrentView(scheduler._date,
-scheduler._mode)});scheduler.callEvent("onOptionsLoad",[])};scheduler.scrollUnit=function(a){var g=scheduler._props[this._mode];if(g)g.position=Math.min(Math.max(0,g.position+a),g.options.length-g.size),this.update_view()};
-(function(){var a=function(b){var d=scheduler._props[scheduler._mode];if(d&&d.order&&d.skip_incorrect){for(var a=[],e=0;e<b.length;e++)typeof d.order[b[e][d.map_to]]!="undefined"&&a.push(b[e]);b.splice(0,b.length);b.push.apply(b,a)}return b},g=scheduler._pre_render_events_table;scheduler._pre_render_events_table=function(b,d){b=a(b);return g.apply(this,[b,d])};var j=scheduler._pre_render_events_line;scheduler._pre_render_events_line=function(b,d){b=a(b);return j.apply(this,[b,d])};var f=function(b,
-d){if(b&&typeof b.order[d[b.map_to]]=="undefined"){var a=scheduler,e=864E5,c=Math.floor((d.end_date-a._min_date)/e);d[b.map_to]=b.options[Math.min(c+b.position,b.options.length-1)].key;return!0}},k=scheduler._reset_scale,l=scheduler.is_visible_events;scheduler.is_visible_events=function(b){var d=l.apply(this,arguments);if(d){var a=scheduler._props[this._mode];if(a&&a.size){var e=a.order[b[a.map_to]];if(e<a.position||e>=a.size+a.position)return!1}}return d};scheduler._reset_scale=function(){var b=
-scheduler._props[this._mode],a=k.apply(this,arguments);if(b){this._max_date=this.date.add(this._min_date,1,"day");for(var c=this._els.dhx_cal_data[0].childNodes,e=0;e<c.length;e++)c[e].className=c[e].className.replace("_now","");if(b.size&&b.size<b.options.length){var g=this._els.dhx_cal_header[0],f=document.createElement("DIV");if(b.position)f.className="dhx_cal_prev_button",f.style.cssText="left:1px;top:2px;position:absolute;",f.innerHTML="&nbsp;",g.firstChild.appendChild(f),f.onclick=function(){scheduler.scrollUnit(b.step*
--1)};if(b.position+b.size<b.options.length)f=document.createElement("DIV"),f.className="dhx_cal_next_button",f.style.cssText="left:auto; right:0px;top:2px;position:absolute;",f.innerHTML="&nbsp;",g.lastChild.appendChild(f),f.onclick=function(){scheduler.scrollUnit(b.step)}}}return a};var c=scheduler._get_event_sday;scheduler._get_event_sday=function(b){var a=scheduler._props[this._mode];return a?(f(a,b),a.order[b[a.map_to]]-a.position):c.call(this,b)};var i=scheduler.locate_holder_day;scheduler.locate_holder_day=
-function(a,d,c){var e=scheduler._props[this._mode];return e&&c?(f(e,c),e.order[c[e.map_to]]*1+(d?1:0)-e.position):i.apply(this,arguments)};var h=scheduler._mouse_coords;scheduler._mouse_coords=function(){var a=scheduler._props[this._mode],d=h.apply(this,arguments);if(a){if(!this._drag_event)this._drag_event={};var c=this._drag_event;if(this._drag_id&&this._drag_mode)c=this.getEvent(this._drag_id),this._drag_event._dhx_changed=!0;var e=Math.min(d.x+a.position,a.options.length-1),f=a.map_to;d.section=
-c[f]=(a.options[e]||{}).key;d.x=0}d.force_redraw=!0;return d};var m=scheduler._time_order;scheduler._time_order=function(a){var d=scheduler._props[this._mode];d?a.sort(function(a,b){return d.order[a[d.map_to]]>d.order[b[d.map_to]]?1:-1}):m.apply(this,arguments)};scheduler.attachEvent("onEventAdded",function(a,d){if(this._loading)return!0;for(var c in scheduler._props){var e=scheduler._props[c];if(typeof d[e.map_to]=="undefined")d[e.map_to]=e.options[0].key}return!0});scheduler.attachEvent("onEventCreated",
-function(a,d){var c=scheduler._props[this._mode];if(c&&d){var e=this.getEvent(a);this._mouse_coords(d);f(c,e);this.event_updated(e)}return!0})})();
+scheduler._props={},scheduler.createUnitsView=function(e,t,r,s,a,i){"object"==typeof e&&(r=e.list,t=e.property,s=e.size||0,a=e.step||1,i=e.skip_incorrect,e=e.name),scheduler._props[e]={map_to:t,options:r,step:a,position:0},s>scheduler._props[e].options.length&&(scheduler._props[e]._original_size=s,s=0),scheduler._props[e].size=s,scheduler._props[e].skip_incorrect=i||!1,scheduler.date[e+"_start"]=scheduler.date.day_start,scheduler.templates[e+"_date"]=function(e){return scheduler.templates.day_date(e)
+},scheduler._get_unit_index=function(e,t){var r=e.position||0,s=Math.floor((scheduler._correct_shift(+t,1)-+scheduler._min_date)/864e5);return r+s},scheduler.templates[e+"_scale_text"]=function(e,t,r){return r.css?"<span class='"+r.css+"'>"+t+"</span>":t},scheduler.templates[e+"_scale_date"]=function(t){var r=scheduler._props[e],s=r.options;if(!s.length)return"";var a=scheduler._get_unit_index(r,t),i=s[a];return scheduler.templates[e+"_scale_text"](i.key,i.label,i)},scheduler.date["add_"+e]=function(e,t){return scheduler.date.add(e,t,"day")
+},scheduler.date["get_"+e+"_end"]=function(t){return scheduler.date.add(t,scheduler._props[e].size||scheduler._props[e].options.length,"day")},scheduler.attachEvent("onOptionsLoad",function(){for(var t=scheduler._props[e],r=t.order={},s=t.options,a=0;a<s.length;a++)r[s[a].key]=a;t._original_size&&0===t.size&&(t.size=t._original_size,delete t.original_size),t.size>s.length?(t._original_size=t.size,t.size=0):t.size=t._original_size||t.size,scheduler._date&&scheduler._mode==e&&scheduler.setCurrentView(scheduler._date,scheduler._mode)
+}),scheduler["mouse_"+e]=function(e){var t=scheduler._props[this._mode];if(t){e=this._week_indexes_from_pos(e),this._drag_event||(this._drag_event={}),this._drag_id&&this._drag_mode&&(this._drag_event._dhx_changed=!0);var r=Math.min(e.x+t.position,t.options.length-1);e.section=(t.options[r]||{}).key,e.x=0;var s=this.getEvent(this._drag_id);this._update_unit_section({view:t,event:s,pos:e})}return e.force_redraw=!0,e},scheduler.callEvent("onOptionsLoad",[])},scheduler._update_unit_section=function(e){var t=e.view,r=e.event,s=e.pos;
+r&&(r[t.map_to]=s.section)},scheduler.scrollUnit=function(e){var t=scheduler._props[this._mode];t&&(t.position=Math.min(Math.max(0,t.position+e),t.options.length-t.size),this.update_view())},function(){var e=function(e){var t=scheduler._props[scheduler._mode];if(t&&t.order&&t.skip_incorrect){for(var r=[],s=0;s<e.length;s++)"undefined"!=typeof t.order[e[s][t.map_to]]&&r.push(e[s]);e.splice(0,e.length),e.push.apply(e,r)}return e},t=scheduler._pre_render_events_table;scheduler._pre_render_events_table=function(r,s){return r=e(r),t.apply(this,[r,s])
+};var r=scheduler._pre_render_events_line;scheduler._pre_render_events_line=function(t,s){return t=e(t),r.apply(this,[t,s])};var s=function(e,t){if(e&&"undefined"==typeof e.order[t[e.map_to]]){var r=scheduler,s=864e5,a=Math.floor((t.end_date-r._min_date)/s);return t[e.map_to]=e.options[Math.min(a+e.position,e.options.length-1)].key,!0}},a=scheduler._reset_scale,i=scheduler.is_visible_events;scheduler.is_visible_events=function(e){var t=i.apply(this,arguments);if(t){var r=scheduler._props[this._mode];
+if(r&&r.size){var s=r.order[e[r.map_to]];if(s<r.position||s>=r.size+r.position)return!1}}return t},scheduler._reset_scale=function(){var e=scheduler._props[this._mode],t=a.apply(this,arguments);if(e){this._max_date=this.date.add(this._min_date,1,"day");for(var r=this._els.dhx_cal_data[0].childNodes,s=0;s<r.length;s++)r[s].className=r[s].className.replace("_now","");if(e.size&&e.size<e.options.length){var i=this._els.dhx_cal_header[0],n=document.createElement("DIV");e.position&&(n.className="dhx_cal_prev_button",n.style.cssText="left:1px;top:2px;position:absolute;",n.innerHTML="&nbsp;",i.firstChild.appendChild(n),n.onclick=function(){scheduler.scrollUnit(-1*e.step)
+}),e.position+e.size<e.options.length&&(n=document.createElement("DIV"),n.className="dhx_cal_next_button",n.style.cssText="left:auto; right:0px;top:2px;position:absolute;",n.innerHTML="&nbsp;",i.lastChild.appendChild(n),n.onclick=function(){scheduler.scrollUnit(e.step)})}}return t};var n=scheduler._get_event_sday;scheduler._get_event_sday=function(e){var t=scheduler._props[this._mode];return t?(s(t,e),t.order[e[t.map_to]]-t.position):n.call(this,e)};var d=scheduler.locate_holder_day;scheduler.locate_holder_day=function(e,t,r){var a=scheduler._props[this._mode];
+return a&&r?(s(a,r),1*a.order[r[a.map_to]]+(t?1:0)-a.position):d.apply(this,arguments)};var l=scheduler._time_order;scheduler._time_order=function(e){var t=scheduler._props[this._mode];t?e.sort(function(e,r){return t.order[e[t.map_to]]>t.order[r[t.map_to]]?1:-1}):l.apply(this,arguments)},scheduler.attachEvent("onEventAdded",function(e,t){if(this._loading)return!0;for(var r in scheduler._props){var s=scheduler._props[r];"undefined"==typeof t[s.map_to]&&(t[s.map_to]=s.options[0].key)}return!0}),scheduler.attachEvent("onEventCreated",function(e,t){var r=scheduler._props[this._mode];
+if(r&&t){var a=this.getEvent(e),i=this._mouse_coords(t);this._update_unit_section({view:r,event:a,pos:i}),s(r,a),this.event_updated(a)}return!0})}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_units.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_url.js b/codebase/ext/dhtmlxscheduler_url.js
index e794c2b..47f703a 100644
--- a/codebase/ext/dhtmlxscheduler_url.js
+++ b/codebase/ext/dhtmlxscheduler_url.js
@@ -1,6 +1,10 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.attachEvent("onTemplatesReady",function(){var d=!0,e=scheduler.date.str_to_date("%Y-%m-%d"),h=scheduler.date.date_to_str("%Y-%m-%d");scheduler.attachEvent("onBeforeViewChange",function(i,j,f,k){if(d){d=!1;for(var a={},g=(document.location.hash||"").replace("#","").split(","),b=0;b<g.length;b++){var c=g[b].split("=");c.length==2&&(a[c[0]]=c[1])}if(a.date||a.mode){try{this.setCurrentView(a.date?e(a.date):null,a.mode||null)}catch(m){this.setCurrentView(a.date?e(a.date):null,f)}return!1}}var l=
-"#date="+h(k||j)+",mode="+(f||i);document.location.hash=l;return!0})});
+scheduler.attachEvent("onTemplatesReady",function(){var e=!0,t=scheduler.date.str_to_date("%Y-%m-%d"),r=scheduler.date.date_to_str("%Y-%m-%d");scheduler.attachEvent("onBeforeViewChange",function(s,a,i,n){if(e){e=!1;for(var d={},l=(document.location.hash||"").replace("#","").split(","),o=0;o<l.length;o++){var _=l[o].split("=");2==_.length&&(d[_[0]]=_[1])}if(d.date||d.mode){try{this.setCurrentView(d.date?t(d.date):null,d.mode||null)}catch(c){this.setCurrentView(d.date?t(d.date):null,i)}return!1}}var h="#date="+r(n||a)+",mode="+(i||s);
+return document.location.hash=h,!0})});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_url.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_week_agenda.js b/codebase/ext/dhtmlxscheduler_week_agenda.js
index e211b99..cfb4545 100644
--- a/codebase/ext/dhtmlxscheduler_week_agenda.js
+++ b/codebase/ext/dhtmlxscheduler_week_agenda.js
@@ -1,19 +1,19 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler._wa={};scheduler.xy.week_agenda_scale_height=20;scheduler.templates.week_agenda_event_text=function(c,g,h){return scheduler.templates.event_date(c)+" "+h.text};scheduler.date.week_agenda_start=scheduler.date.week_start;scheduler.date.week_agenda_end=function(c){return scheduler.date.add(c,7,"day")};scheduler.date.add_week_agenda=function(c,g){return scheduler.date.add(c,g*7,"day")};
-scheduler.attachEvent("onSchedulerReady",function(){var c=scheduler.templates;if(!c.week_agenda_date)c.week_agenda_date=c.week_date});(function(){var c=scheduler.date.date_to_str("%l, %F %d");scheduler.templates.week_agenda_scale_date=function(g){return c(g)}})();
-scheduler.attachEvent("onTemplatesReady",function(){scheduler.attachEvent("onSchedulerResize",function(){return this._mode=="week_agenda"?(this.week_agenda_view(!0),!1):!0});var c=scheduler.render_data;scheduler.render_data=function(b){if(this._mode=="week_agenda")scheduler.week_agenda_view(!0);else return c.apply(this,arguments)};var g=function(){scheduler._cols=[];var b=parseInt(scheduler._els.dhx_cal_data[0].style.width);scheduler._cols.push(Math.floor(b/2));scheduler._cols.push(b-scheduler._cols[0]-
-1);scheduler._colsS={0:[],1:[]};for(var a=parseInt(scheduler._els.dhx_cal_data[0].style.height),m=0;m<3;m++)scheduler._colsS[0].push(Math.floor(a/(3-scheduler._colsS[0].length))),a-=scheduler._colsS[0][m];scheduler._colsS[1].push(scheduler._colsS[0][0]);scheduler._colsS[1].push(scheduler._colsS[0][1]);a=scheduler._colsS[0][scheduler._colsS[0].length-1];scheduler._colsS[1].push(Math.floor(a/2));scheduler._colsS[1].push(a-scheduler._colsS[1][scheduler._colsS[1].length-1])},h=function(){g();scheduler._els.dhx_cal_data[0].innerHTML=
-"";scheduler._rendered=[];for(var b="",a=0;a<2;a++){var m=scheduler._cols[a],c="dhx_wa_column";a==1&&(c+=" dhx_wa_column_last");b+="<div class='"+c+"' style='width: "+m+"px;'>";for(var e=0;e<scheduler._colsS[a].length;e++){var j=scheduler.xy.week_agenda_scale_height-2,u=scheduler._colsS[a][e]-j-2,k=Math.min(6,e*2+a);b+="<div class='dhx_wa_day_cont'><div style='height:"+j+"px; line-height:"+j+"px;' class='dhx_wa_scale_bar'></div><div style='height:"+u+"px;' class='dhx_wa_day_data' day='"+k+"'></div></div>"}b+=
-"</div>"}scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates[scheduler._mode+"_date"](scheduler._min_date,scheduler._max_date,scheduler._mode);scheduler._els.dhx_cal_data[0].innerHTML=b;for(var l=scheduler._els.dhx_cal_data[0].getElementsByTagName("div"),o=[],a=0;a<l.length;a++)l[a].className=="dhx_wa_day_cont"&&o.push(l[a]);scheduler._wa._selected_divs=[];for(var h=scheduler.get_visible_events(),i=scheduler.date.week_start(scheduler._date),n=scheduler.date.add(i,1,"day"),a=0;a<7;a++){o[a]._date=
-i;var v=o[a].childNodes[0],w=o[a].childNodes[1];v.innerHTML=scheduler.templates.week_agenda_scale_date(i);for(var p=[],r=0;r<h.length;r++){var s=h[r];s.start_date<n&&s.end_date>i&&p.push(s)}p.sort(function(a,b){return a.start_date.valueOf()==b.start_date.valueOf()?a.id>b.id?1:-1:a.start_date>b.start_date?1:-1});for(e=0;e<p.length;e++){var d=p[e],f=document.createElement("div");scheduler._rendered.push(f);var t=scheduler.templates.event_class(d.start_date,d.end_date,d);f.className="dhx_wa_ev_body"+
-(t?" "+t:"");if(d._text_style)f.style.cssText=d._text_style;if(d.color)f.style.background=d.color;if(d.textColor)f.style.color=d.textColor;if(scheduler._select_id&&d.id==scheduler._select_id&&(scheduler.config.week_agenda_select||scheduler.config.week_agenda_select===void 0))f.className+=" dhx_cal_event_selected",scheduler._wa._selected_divs.push(f);var q="";d._timed||(q="middle",d.start_date.valueOf()>=i.valueOf()&&d.start_date.valueOf()<=n.valueOf()&&(q="start"),d.end_date.valueOf()>=i.valueOf()&&
-d.end_date.valueOf()<=n.valueOf()&&(q="end"));f.innerHTML=scheduler.templates.week_agenda_event_text(d.start_date,d.end_date,d,i,q);f.setAttribute("event_id",d.id);w.appendChild(f)}i=scheduler.date.add(i,1,"day");n=scheduler.date.add(n,1,"day")}};scheduler.week_agenda_view=function(b){scheduler._min_date=scheduler.date.week_start(scheduler._date);scheduler._max_date=scheduler.date.add(scheduler._min_date,1,"week");scheduler.set_sizes();if(b)scheduler._table_view=scheduler._allow_dnd=!0,scheduler._wa._prev_data_border=
-scheduler._els.dhx_cal_data[0].style.borderTop,scheduler._els.dhx_cal_data[0].style.borderTop=0,scheduler._els.dhx_cal_data[0].style.overflowY="hidden",scheduler._els.dhx_cal_date[0].innerHTML="",scheduler._els.dhx_cal_data[0].style.top=parseInt(scheduler._els.dhx_cal_data[0].style.top)-20-1+"px",scheduler._els.dhx_cal_data[0].style.height=parseInt(scheduler._els.dhx_cal_data[0].style.height)+20+1+"px",scheduler._els.dhx_cal_header[0].style.display="none",h();else{scheduler._table_view=scheduler._allow_dnd=
-!1;if(scheduler._wa._prev_data_border)scheduler._els.dhx_cal_data[0].style.borderTop=scheduler._wa._prev_data_border;scheduler._els.dhx_cal_data[0].style.overflowY="auto";scheduler._els.dhx_cal_data[0].style.top=parseInt(scheduler._els.dhx_cal_data[0].style.top)+20+"px";scheduler._els.dhx_cal_data[0].style.height=parseInt(scheduler._els.dhx_cal_data[0].style.height)-20+"px";scheduler._els.dhx_cal_header[0].style.display="block"}};scheduler.mouse_week_agenda=function(b){for(var a=b.ev,c=a.srcElement||
-a.target;c.parentNode;){if(c._date)var g=c._date;c=c.parentNode}if(!g)return b;b.x=0;var e=g.valueOf()-scheduler._min_date.valueOf();b.y=Math.ceil(e/6E4/this.config.time_step);if(this._drag_mode=="move"){this._drag_event._dhx_changed=!0;this._select_id=this._drag_id;for(var j=0;j<scheduler._rendered.length;j++)if(scheduler._drag_id==this._rendered[j].getAttribute("event_id"))var h=this._rendered[j];if(!scheduler._wa._dnd){var k=h.cloneNode(!0);this._wa._dnd=k;k.className=h.className;k.id="dhx_wa_dnd";
-k.className+=" dhx_wa_dnd";document.body.appendChild(k)}var l=document.getElementById("dhx_wa_dnd");l.style.top=(a.pageY||a.clientY)+20+"px";l.style.left=(a.pageX||a.clientX)+20+"px"}return b};scheduler.attachEvent("onBeforeEventChanged",function(){if(this._mode=="week_agenda"&&this._drag_mode=="move"){var b=document.getElementById("dhx_wa_dnd");b.parentNode.removeChild(b);scheduler._wa._dnd=!1}return!0});scheduler.attachEvent("onEventSave",function(b,a,c){if(c&&this._mode=="week_agenda")this._select_id=
-b;return!0});scheduler._wa._selected_divs=[];scheduler.attachEvent("onClick",function(b){if(this._mode=="week_agenda"&&(scheduler.config.week_agenda_select||scheduler.config.week_agenda_select===void 0)){if(scheduler._wa._selected_divs)for(var a=0;a<this._wa._selected_divs.length;a++){var c=this._wa._selected_divs[a];c.className=c.className.replace(/ dhx_cal_event_selected/,"")}this.for_rendered(b,function(a){a.className+=" dhx_cal_event_selected";scheduler._wa._selected_divs.push(a)});scheduler.select(b);
-return!1}return!0})});
+scheduler._wa={},scheduler.xy.week_agenda_scale_height=20,scheduler.templates.week_agenda_event_text=function(e,t,r){return scheduler.templates.event_date(e)+" "+r.text},scheduler.date.week_agenda_start=scheduler.date.week_start,scheduler.date.week_agenda_end=function(e){return scheduler.date.add(e,7,"day")},scheduler.date.add_week_agenda=function(e,t){return scheduler.date.add(e,7*t,"day")},scheduler.attachEvent("onSchedulerReady",function(){var e=scheduler.templates;e.week_agenda_date||(e.week_agenda_date=e.week_date)
+}),function(){var e=scheduler.date.date_to_str("%l, %F %d");scheduler.templates.week_agenda_scale_date=function(t){return e(t)}}(),scheduler.attachEvent("onTemplatesReady",function(){scheduler.attachEvent("onSchedulerResize",function(){return"week_agenda"==this._mode?(this.week_agenda_view(!0),!1):!0});var e=scheduler.render_data;scheduler.render_data=function(){return"week_agenda"!=this._mode?e.apply(this,arguments):void scheduler.week_agenda_view(!0)};var t=function(){scheduler._cols=[];var e=parseInt(scheduler._els.dhx_cal_data[0].style.width);
+scheduler._cols.push(Math.floor(e/2)),scheduler._cols.push(e-scheduler._cols[0]-1),scheduler._colsS={0:[],1:[]};for(var t=parseInt(scheduler._els.dhx_cal_data[0].style.height),r=0;3>r;r++)scheduler._colsS[0].push(Math.floor(t/(3-scheduler._colsS[0].length))),t-=scheduler._colsS[0][r];scheduler._colsS[1].push(scheduler._colsS[0][0]),scheduler._colsS[1].push(scheduler._colsS[0][1]),t=scheduler._colsS[0][scheduler._colsS[0].length-1],scheduler._colsS[1].push(Math.floor(t/2)),scheduler._colsS[1].push(t-scheduler._colsS[1][scheduler._colsS[1].length-1])
+},r=function(){t(),scheduler._els.dhx_cal_data[0].innerHTML="",scheduler._rendered=[];for(var e="",r=0;2>r;r++){var s=scheduler._cols[r],a="dhx_wa_column";1==r&&(a+=" dhx_wa_column_last"),e+="<div class='"+a+"' style='width: "+s+"px;'>";for(var d=0;d<scheduler._colsS[r].length;d++){var n=scheduler.xy.week_agenda_scale_height-2,i=scheduler._colsS[r][d]-n-2,l=Math.min(6,2*d+r);e+="<div class='dhx_wa_day_cont'><div style='height:"+n+"px; line-height:"+n+"px;' class='dhx_wa_scale_bar'></div><div style='height:"+i+"px;' class='dhx_wa_day_data' day='"+l+"'></div></div>"
+}e+="</div>"}scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates[scheduler._mode+"_date"](scheduler._min_date,scheduler._max_date,scheduler._mode),scheduler._els.dhx_cal_data[0].innerHTML=e;for(var _=scheduler._els.dhx_cal_data[0].getElementsByTagName("div"),o=[],r=0;r<_.length;r++)"dhx_wa_day_cont"==_[r].className&&o.push(_[r]);scheduler._wa._selected_divs=[];for(var c=scheduler.get_visible_events(),h=scheduler.date.week_start(scheduler._date),u=scheduler.date.add(h,1,"day"),r=0;7>r;r++){o[r]._date=h;
+var v=o[r].childNodes[0],f=o[r].childNodes[1];v.innerHTML=scheduler.templates.week_agenda_scale_date(h);for(var p=[],g=0;g<c.length;g++){var m=c[g];m.start_date<u&&m.end_date>h&&p.push(m)}p.sort(function(e,t){return e.start_date.valueOf()==t.start_date.valueOf()?e.id>t.id?1:-1:e.start_date>t.start_date?1:-1});for(var d=0;d<p.length;d++){var y=p[d],x=document.createElement("div");scheduler._rendered.push(x);var b=scheduler.templates.event_class(y.start_date,y.end_date,y);x.className="dhx_wa_ev_body"+(b?" "+b:""),y._text_style&&(x.style.cssText=y._text_style),y.color&&(x.style.background=y.color),y.textColor&&(x.style.color=y.textColor),scheduler._select_id&&y.id==scheduler._select_id&&(scheduler.config.week_agenda_select||void 0===scheduler.config.week_agenda_select)&&(x.className+=" dhx_cal_event_selected",scheduler._wa._selected_divs.push(x));
+var w="";y._timed||(w="middle",y.start_date.valueOf()>=h.valueOf()&&y.start_date.valueOf()<=u.valueOf()&&(w="start"),y.end_date.valueOf()>=h.valueOf()&&y.end_date.valueOf()<=u.valueOf()&&(w="end")),x.innerHTML=scheduler.templates.week_agenda_event_text(y.start_date,y.end_date,y,h,w),x.setAttribute("event_id",y.id),f.appendChild(x)}h=scheduler.date.add(h,1,"day"),u=scheduler.date.add(u,1,"day")}};scheduler.week_agenda_view=function(e){scheduler._min_date=scheduler.date.week_start(scheduler._date),scheduler._max_date=scheduler.date.add(scheduler._min_date,1,"week"),scheduler.set_sizes(),e?(scheduler._table_view=scheduler._allow_dnd=!0,scheduler._wa._prev_data_border=scheduler._els.dhx_cal_data[0].style.borderTop,scheduler._els.dhx_cal_data[0].style.borderTop=0,scheduler._els.dhx_cal_data[0].style.overflowY="hidden",scheduler._els.dhx_cal_date[0].innerHTML="",scheduler._els.dhx_cal_data[0].style.top=parseInt(scheduler._els.dhx_cal_data[0].style.top)-20-1+"px",scheduler._els.dhx_cal_data[0].style.height=parseInt(scheduler._els.dhx_cal_data[0].style.height)+20+1+"px",scheduler._els.dhx_cal_header[0].style.display="none",r()):(scheduler._table_view=scheduler._allow_dnd=!1,scheduler._wa._prev_data_border&&(scheduler._els.dhx_cal_data[0].style.borderTop=scheduler._wa._prev_data_border),scheduler._els.dhx_cal_data[0].style.overflowY="auto",scheduler._els.dhx_cal_data[0].style.top=parseInt(scheduler._els.dhx_cal_data[0].style.top)+20+"px",scheduler._els.dhx_cal_data[0].style.height=parseInt(scheduler._els.dhx_cal_data[0].style.height)-20+"px",scheduler._els.dhx_cal_header[0].style.display="block")
+},scheduler.mouse_week_agenda=function(e){for(var t,r=e.ev,s=r.srcElement||r.target;s.parentNode;)s._date&&(t=s._date),s=s.parentNode;if(!t)return e;e.x=0;var a=t.valueOf()-scheduler._min_date.valueOf();if(e.y=Math.ceil(a/6e4/this.config.time_step),"move"==this._drag_mode){var d;this._drag_event._dhx_changed=!0,this._select_id=this._drag_id;for(var n=0;n<scheduler._rendered.length;n++)scheduler._drag_id==this._rendered[n].getAttribute("event_id")&&(d=this._rendered[n]);if(!scheduler._wa._dnd){var i=d.cloneNode(!0);
+this._wa._dnd=i,i.className=d.className,i.id="dhx_wa_dnd",i.className+=" dhx_wa_dnd",document.body.appendChild(i)}var l=document.getElementById("dhx_wa_dnd");l.style.top=(r.pageY||r.clientY)+20+"px",l.style.left=(r.pageX||r.clientX)+20+"px"}return e},scheduler.attachEvent("onBeforeEventChanged",function(){if("week_agenda"==this._mode&&"move"==this._drag_mode){var e=document.getElementById("dhx_wa_dnd");e.parentNode.removeChild(e),scheduler._wa._dnd=!1}return!0}),scheduler.attachEvent("onEventSave",function(e,t,r){return r&&"week_agenda"==this._mode&&(this._select_id=e),!0
+}),scheduler._wa._selected_divs=[],scheduler.attachEvent("onClick",function(e){if("week_agenda"==this._mode&&(scheduler.config.week_agenda_select||void 0===scheduler.config.week_agenda_select)){if(scheduler._wa._selected_divs)for(var t=0;t<this._wa._selected_divs.length;t++){var r=this._wa._selected_divs[t];r.className=r.className.replace(/ dhx_cal_event_selected/,"")}return this.for_rendered(e,function(e){e.className+=" dhx_cal_event_selected",scheduler._wa._selected_divs.push(e)}),scheduler.select(e),!1
+}return!0})});
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_week_agenda.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_wp.js b/codebase/ext/dhtmlxscheduler_wp.js
new file mode 100644
index 0000000..837ca94
--- /dev/null
+++ b/codebase/ext/dhtmlxscheduler_wp.js
@@ -0,0 +1,9 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onLightBox",function(){if(this._cover)try{this._cover.style.height=this.expanded?"100%":(document.body.parentNode||document.body).scrollHeight+"px"}catch(e){}}),scheduler.form_blocks.select.set_value=function(e,t){("undefined"==typeof t||""===t)&&(t=(e.firstChild.options[0]||{}).value),e.firstChild.value=t||""};
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_wp.js.map \ No newline at end of file
diff --git a/codebase/ext/dhtmlxscheduler_year_view.js b/codebase/ext/dhtmlxscheduler_year_view.js
index bf36dd1..fcfb98c 100644
--- a/codebase/ext/dhtmlxscheduler_year_view.js
+++ b/codebase/ext/dhtmlxscheduler_year_view.js
@@ -1,20 +1,24 @@
/*
-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
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
*/
-scheduler.config.year_x=4;scheduler.config.year_y=3;scheduler.xy.year_top=0;scheduler.templates.year_date=function(n){return scheduler.date.date_to_str(scheduler.locale.labels.year_tab+" %Y")(n)};scheduler.templates.year_month=scheduler.date.date_to_str("%F");scheduler.templates.year_scale_date=scheduler.date.date_to_str("%D");scheduler.templates.year_tooltip=function(n,q,u){return u.text};
-(function(){function n(b){return m(b,function(a){return a.nodeName.toLowerCase()=="td"})}function q(b){return m(b,function(a){return a.nodeName.toLowerCase()=="table"})}function u(b){b=q(b);return m(b,function(a){return a.hasAttribute&&a.hasAttribute("date")})}function m(b,a){for(;b&&!a(b);)b=b.parentNode;return b}var k=function(){return scheduler._mode=="year"};scheduler.dblclick_dhx_month_head=function(b){if(k()){var a=b.target||b.srcElement;if(a.parentNode.className.indexOf("dhx_before")!=-1||
-a.parentNode.className.indexOf("dhx_after")!=-1)return!1;var c=this.templates.xml_date(a.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("date"));c.setDate(parseInt(a.innerHTML,10));var e=this.date.add(c,1,"day");!this.config.readonly&&this.config.dblclick_create&&this.addEventNow(c.valueOf(),e.valueOf(),b)}};var v=scheduler.changeEventId;scheduler.changeEventId=function(){v.apply(this,arguments);k()&&this.year_view(!0)};var w=scheduler.render_data,x=scheduler.date.date_to_str("%Y/%m/%d"),
-y=scheduler.date.str_to_date("%Y/%m/%d");scheduler.render_data=function(b){if(!k())return w.apply(this,arguments);for(var a=0;a<b.length;a++)this._year_render_event(b[a])};var z=scheduler.clear_view;scheduler.clear_view=function(){if(!k())return z.apply(this,arguments);for(var b in o)if(o.hasOwnProperty(b)){var a=o[b];a.className="dhx_month_head";a.setAttribute("date","")}o={}};scheduler._hideToolTip=function(){if(this._tooltip)this._tooltip.style.display="none",this._tooltip.date=new Date(9999,1,
-1)};scheduler._showToolTip=function(b,a,c,e){if(this._tooltip){if(this._tooltip.date.valueOf()==b.valueOf())return;this._tooltip.innerHTML=""}else{var d=this._tooltip=document.createElement("DIV");d.className="dhx_year_tooltip";document.body.appendChild(d);d.onclick=scheduler._click.dhx_cal_data}for(var f=this.getEvents(b,this.date.add(b,1,"day")),l="",i=0;i<f.length;i++){var p=f[i],g=p.color?"background:"+p.color+";":"",j=p.textColor?"color:"+p.textColor+";":"";l+="<div class='dhx_tooltip_line' style='"+
-g+""+j+"' event_id='"+f[i].id+"'>";l+="<div class='dhx_tooltip_date' style='"+g+""+j+"'>"+(f[i]._timed?this.templates.event_date(f[i].start_date):"")+"</div>";l+="<div class='dhx_event_icon icon_details'>&nbsp;</div>";l+=this.templates.year_tooltip(f[i].start_date,f[i].end_date,f[i])+"</div>"}this._tooltip.style.display="";this._tooltip.style.top="0px";this._tooltip.style.left=document.body.offsetWidth-a.left-this._tooltip.offsetWidth<0?a.left-this._tooltip.offsetWidth+"px":a.left+e.offsetWidth+"px";
-this._tooltip.date=b;this._tooltip.innerHTML=l;this._tooltip.style.top=document.body.offsetHeight-a.top-this._tooltip.offsetHeight<0?a.top-this._tooltip.offsetHeight+e.offsetHeight+"px":a.top+"px"};scheduler._init_year_tooltip=function(){dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",function(b){if(k()){var b=b||event,a=b.target||b.srcElement;if(a.tagName.toLowerCase()=="a")a=a.parentNode;(a.className||"").indexOf("dhx_year_event")!=-1?scheduler._showToolTip(y(a.getAttribute("date")),getOffset(a),
-b,a):scheduler._hideToolTip()}});this._init_year_tooltip=function(){}};scheduler.attachEvent("onSchedulerResize",function(){return k()?(this.year_view(!0),!1):!0});scheduler._get_year_cell=function(b){var a=b.getMonth()+12*(b.getFullYear()-this._min_date.getFullYear())-this.week_starts._month,c=this._els.dhx_cal_data[0].childNodes[a],b=this.week_starts[a]+b.getDate()-1;return c.childNodes[2].firstChild.rows[Math.floor(b/7)].cells[b%7].firstChild};var o={};scheduler._mark_year_date=function(b,a){var c=
-x(b),e=this._get_year_cell(b),d=this.templates.event_class(a.start_date,a.end_date,a);if(!o[c])e.className="dhx_month_head dhx_year_event",e.setAttribute("date",c),o[c]=e;e.className+=d?" "+d:""};scheduler._unmark_year_date=function(b){this._get_year_cell(b).className="dhx_month_head"};scheduler._year_render_event=function(b){for(var a=b.start_date,a=a.valueOf()<this._min_date.valueOf()?this._min_date:this.date.date_part(new Date(a));a<b.end_date;)if(this._mark_year_date(a,b),a=this.date.add(a,1,
-"day"),a.valueOf()>=this._max_date.valueOf())break};scheduler.year_view=function(b){if(b){var a=scheduler.xy.scale_height;scheduler.xy.scale_height=-1}scheduler._els.dhx_cal_header[0].style.display=b?"none":"";scheduler.set_sizes();if(b)scheduler.xy.scale_height=a;scheduler._table_view=b;if(!this._load_mode||!this._load())if(b){scheduler._init_year_tooltip();scheduler._reset_year_scale();if(scheduler._load_mode&&scheduler._load())return scheduler._render_wait=!0;scheduler.render_view_data()}else scheduler._hideToolTip()};
-scheduler._reset_year_scale=function(){this._cols=[];this._colsS={};var b=[],a=this._els.dhx_cal_data[0],c=this.config;a.scrollTop=0;a.innerHTML="";var e=Math.floor(parseInt(a.style.width)/c.year_x),d=Math.floor((parseInt(a.style.height)-scheduler.xy.year_top)/c.year_y);d<190&&(d=190,e=Math.floor((parseInt(a.style.width)-scheduler.xy.scroll_width)/c.year_x));for(var f=e-11,l=0,i=document.createElement("div"),p=this.date.week_start(scheduler._currentDate()),g=0;g<7;g++)this._cols[g]=Math.floor(f/(7-
-g)),this._render_x_header(g,l,p,i),p=this.date.add(p,1,"day"),f-=this._cols[g],l+=this._cols[g];i.lastChild.className+=" dhx_scale_bar_last";for(var j=this.date[this._mode+"_start"](this.date.copy(this._date)),k=j,g=0;g<c.year_y;g++)for(var t=0;t<c.year_x;t++){var h=document.createElement("DIV");h.style.cssText="position:absolute;";h.setAttribute("date",this.templates.xml_format(j));h.innerHTML="<div class='dhx_year_month'></div><div class='dhx_year_week'>"+i.innerHTML+"</div><div class='dhx_year_body'></div>";
-h.childNodes[0].innerHTML=this.templates.year_month(j);for(var o=this.date.week_start(j),n=this._reset_month_scale(h.childNodes[2],j,o),r=h.childNodes[2].firstChild.rows,s=r.length;s<6;s++){r[0].parentNode.appendChild(r[0].cloneNode(!0));for(var m=0;m<r[s].childNodes.length;m++)r[s].childNodes[m].className="dhx_after",r[s].childNodes[m].firstChild.innerHTML=scheduler.templates.month_day(n),n=scheduler.date.add(n,1,"day")}a.appendChild(h);h.childNodes[1].style.height=h.childNodes[1].childNodes[0].offsetHeight+
-"px";var q=Math.round((d-190)/2);h.style.marginTop=q+"px";this.set_xy(h,e-10,d-q-10,e*t+5,d*g+5+scheduler.xy.year_top);b[g*c.year_x+t]=(j.getDay()-(this.config.start_on_monday?1:0)+7)%7;j=this.date.add(j,1,"month")}this._els.dhx_cal_date[0].innerHTML=this.templates[this._mode+"_date"](k,j,this._mode);this.week_starts=b;b._month=k.getMonth();this._min_date=k;this._max_date=j};var A=scheduler.getActionData;scheduler.getActionData=function(b){function a(a){a=u(a);if(!a)return null;var b=a.getAttribute("date");
-return!b?null:scheduler.date.week_start(scheduler.templates.xml_date(b))}function c(a){var b=q(a);if(!b)return null;for(var d=0,c=0,d=0,e=b.rows.length;d<e;d++){for(var f=b.rows[d].getElementsByTagName("td"),c=0,h=f.length;c<h;c++)if(f[c]==a)break;if(c<h)break}return d<e?{day:c,week:d}:null}if(!k())return A.apply(scheduler,arguments);var e=b?b.target:event.srcElement,d=a(e),f=n(e),l=c(f);l&&d?(d=scheduler.date.add(d,l.week,"week"),d=scheduler.date.add(d,l.day,"day")):d=null;return{date:d,section:null}};
-var B=scheduler._locate_event;scheduler._locate_event=function(b){if(!k())return B.apply(scheduler,arguments);var a=m(b,function(a){return a.className&&a.className.indexOf("dhx_year_event")!=-1&&a.hasAttribute&&a.hasAttribute("date")});if(!a||!a.hasAttribute("date"))return null;var c=scheduler.templates.xml_date(a.getAttribute("date")),e=scheduler.getEvents(c,scheduler.date.add(c,1,"day"));return!e.length?null:e[0].id}})();
+scheduler.config.year_x=4,scheduler.config.year_y=3,scheduler.xy.year_top=0,scheduler.templates.year_date=function(e){return scheduler.date.date_to_str(scheduler.locale.labels.year_tab+" %Y")(e)},scheduler.templates.year_month=scheduler.date.date_to_str("%F"),scheduler.templates.year_scale_date=scheduler.date.date_to_str("%D"),scheduler.templates.year_tooltip=function(e,t,r){return r.text},function(){var e=function(){return"year"==scheduler._mode};scheduler.dblclick_dhx_month_head=function(t){if(e()){var r=t.target||t.srcElement;
+if(-1!=r.parentNode.className.indexOf("dhx_before")||-1!=r.parentNode.className.indexOf("dhx_after"))return!1;var s=this.templates.xml_date(r.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("date"));s.setDate(parseInt(r.innerHTML,10));var a=this.date.add(s,1,"day");!this.config.readonly&&this.config.dblclick_create&&this.addEventNow(s.valueOf(),a.valueOf(),t)}};var t=scheduler.changeEventId;scheduler.changeEventId=function(){t.apply(this,arguments),e()&&this.year_view(!0)
+};var r=scheduler.render_data,s=scheduler.date.date_to_str("%Y/%m/%d"),a=scheduler.date.str_to_date("%Y/%m/%d");scheduler.render_data=function(t){if(!e())return r.apply(this,arguments);for(var s=0;s<t.length;s++)this._year_render_event(t[s])};var d=scheduler.clear_view;scheduler.clear_view=function(){if(!e())return d.apply(this,arguments);var t=scheduler._year_marked_cells,r=null;for(var s in t)t.hasOwnProperty(s)&&(r=t[s],r.className="dhx_month_head",r.setAttribute("date",""));scheduler._year_marked_cells={}
+},scheduler._hideToolTip=function(){this._tooltip&&(this._tooltip.style.display="none",this._tooltip.date=new Date(9999,1,1))},scheduler._showToolTip=function(e,t,r,s){if(this._tooltip){if(this._tooltip.date.valueOf()==e.valueOf())return;this._tooltip.innerHTML=""}else{var a=this._tooltip=document.createElement("DIV");a.className="dhx_year_tooltip",document.body.appendChild(a),a.onclick=scheduler._click.dhx_cal_data}for(var d=this.getEvents(e,this.date.add(e,1,"day")),n="",i=0;i<d.length;i++){var l=d[i];
+if(this.filter_event(l.id,l)){var _=l.color?"background:"+l.color+";":"",o=l.textColor?"color:"+l.textColor+";":"";n+="<div class='dhx_tooltip_line' style='"+_+o+"' event_id='"+d[i].id+"'>",n+="<div class='dhx_tooltip_date' style='"+_+o+"'>"+(d[i]._timed?this.templates.event_date(d[i].start_date):"")+"</div>",n+="<div class='dhx_event_icon icon_details'>&nbsp;</div>",n+=this.templates.year_tooltip(d[i].start_date,d[i].end_date,d[i])+"</div>"}}this._tooltip.style.display="",this._tooltip.style.top="0px",this._tooltip.style.left=document.body.offsetWidth-t.left-this._tooltip.offsetWidth<0?t.left-this._tooltip.offsetWidth+"px":t.left+s.offsetWidth+"px",this._tooltip.date=e,this._tooltip.innerHTML=n,this._tooltip.style.top=document.body.offsetHeight-t.top-this._tooltip.offsetHeight<0?t.top-this._tooltip.offsetHeight+s.offsetHeight+"px":t.top+"px"
+},scheduler._year_view_tooltip_handler=function(t){if(e()){var t=t||event,r=t.target||t.srcElement;"a"==r.tagName.toLowerCase()&&(r=r.parentNode),-1!=(r.className||"").indexOf("dhx_year_event")?scheduler._showToolTip(a(r.getAttribute("date")),getOffset(r),t,r):scheduler._hideToolTip()}},scheduler._init_year_tooltip=function(){scheduler._detachDomEvent(scheduler._els.dhx_cal_data[0],"mouseover",scheduler._year_view_tooltip_handler),dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",scheduler._year_view_tooltip_handler)
+},scheduler.attachEvent("onSchedulerResize",function(){return e()?(this.year_view(!0),!1):!0}),scheduler._get_year_cell=function(e){var t=e.getMonth()+12*(e.getFullYear()-this._min_date.getFullYear())-this.week_starts._month,r=this._els.dhx_cal_data[0].childNodes[t],e=this.week_starts[t]+e.getDate()-1;return r.childNodes[2].firstChild.rows[Math.floor(e/7)].cells[e%7].firstChild},scheduler._year_marked_cells={},scheduler._mark_year_date=function(e,t){var r=s(e),a=this._get_year_cell(e),d=this.templates.event_class(t.start_date,t.end_date,t);
+scheduler._year_marked_cells[r]||(a.className="dhx_month_head dhx_year_event",a.setAttribute("date",r),scheduler._year_marked_cells[r]=a),a.className+=d?" "+d:""},scheduler._unmark_year_date=function(e){this._get_year_cell(e).className="dhx_month_head"},scheduler._year_render_event=function(e){var t=e.start_date;for(t=t.valueOf()<this._min_date.valueOf()?this._min_date:this.date.date_part(new Date(t));t<e.end_date;)if(this._mark_year_date(t,e),t=this.date.add(t,1,"day"),t.valueOf()>=this._max_date.valueOf())return
+},scheduler.year_view=function(e){var t;if(e&&(t=scheduler.xy.scale_height,scheduler.xy.scale_height=-1),scheduler._els.dhx_cal_header[0].style.display=e?"none":"",scheduler.set_sizes(),e&&(scheduler.xy.scale_height=t),scheduler._table_view=e,!this._load_mode||!this._load())if(e){if(scheduler._init_year_tooltip(),scheduler._reset_year_scale(),scheduler._load_mode&&scheduler._load())return void(scheduler._render_wait=!0);scheduler.render_view_data()}else scheduler._hideToolTip()},scheduler._reset_year_scale=function(){this._cols=[],this._colsS={};
+var e=[],t=this._els.dhx_cal_data[0],r=this.config;t.scrollTop=0,t.innerHTML="";var s=Math.floor(parseInt(t.style.width)/r.year_x),a=Math.floor((parseInt(t.style.height)-scheduler.xy.year_top)/r.year_y);190>a&&(a=190,s=Math.floor((parseInt(t.style.width)-scheduler.xy.scroll_width)/r.year_x));for(var d=s-11,n=0,i=document.createElement("div"),l=this.date.week_start(scheduler._currentDate()),_=0;7>_;_++)this._cols[_]=Math.floor(d/(7-_)),this._render_x_header(_,n,l,i),l=this.date.add(l,1,"day"),d-=this._cols[_],n+=this._cols[_];
+i.lastChild.className+=" dhx_scale_bar_last";for(var o=this.date[this._mode+"_start"](this.date.copy(this._date)),c=o,h=null,_=0;_<r.year_y;_++)for(var u=0;u<r.year_x;u++){h=document.createElement("DIV"),h.style.cssText="position:absolute;",h.setAttribute("date",this.templates.xml_format(o)),h.innerHTML="<div class='dhx_year_month'></div><div class='dhx_year_week'>"+i.innerHTML+"</div><div class='dhx_year_body'></div>",h.childNodes[0].innerHTML=this.templates.year_month(o);for(var v=this.date.week_start(o),f=this._reset_month_scale(h.childNodes[2],o,v),p=h.childNodes[2].firstChild.rows,g=p.length;6>g;g++){p[0].parentNode.appendChild(p[0].cloneNode(!0));
+for(var m=0,y=p[g].childNodes.length;y>m;m++)p[g].childNodes[m].className="dhx_after",p[g].childNodes[m].firstChild.innerHTML=scheduler.templates.month_day(f),f=scheduler.date.add(f,1,"day")}t.appendChild(h),h.childNodes[1].style.height=h.childNodes[1].childNodes[0].offsetHeight+"px";var x=Math.round((a-190)/2);h.style.marginTop=x+"px",this.set_xy(h,s-10,a-x-10,s*u+5,a*_+5+scheduler.xy.year_top),e[_*r.year_x+u]=(o.getDay()-(this.config.start_on_monday?1:0)+7)%7,o=this.date.add(o,1,"month")}this._els.dhx_cal_date[0].innerHTML=this.templates[this._mode+"_date"](c,o,this._mode),this.week_starts=e,e._month=c.getMonth(),this._min_date=c,this._max_date=o
+};var n=scheduler.getActionData;scheduler.getActionData=function(t){if(!e())return n.apply(scheduler,arguments);var r=t?t.target:event.srcElement,s=scheduler._get_year_month_date(r),a=scheduler._get_year_month_cell(r),d=scheduler._get_year_day_indexes(a);return d&&s?(s=scheduler.date.add(s,d.week,"week"),s=scheduler.date.add(s,d.day,"day")):s=null,{date:s,section:null}},scheduler._get_year_day_indexes=function(e){var t=scheduler._locate_year_month_table(e);if(!t)return null;for(var r=0,s=0,r=0,a=t.rows.length;a>r;r++){for(var d=t.rows[r].getElementsByTagName("td"),s=0,n=d.length;n>s&&d[s]!=e;s++);if(n>s)break
+}return a>r?{day:s,week:r}:null},scheduler._get_year_month_date=function(e){var e=scheduler._locate_year_month_root(e);if(!e)return null;var t=e.getAttribute("date");return t?scheduler.date.week_start(scheduler.templates.xml_date(t)):null},scheduler._locate_year_month_day=function(e){return e.className&&-1!=e.className.indexOf("dhx_year_event")&&e.hasAttribute&&e.hasAttribute("date")};var i=scheduler._locate_event;scheduler._locate_event=function(e){var t=i.apply(scheduler,arguments);if(!t){var r=scheduler._get_year_el_node(e,scheduler._locate_year_month_day);
+if(!r||!r.hasAttribute("date"))return null;var s=scheduler.templates.xml_date(r.getAttribute("date")),a=scheduler.getEvents(s,scheduler.date.add(s,1,"day"));if(!a.length)return null;t=a[0].id}return t},scheduler._locate_year_month_cell=function(e){return"td"==e.nodeName.toLowerCase()},scheduler._locate_year_month_table=function(e){return"table"==e.nodeName.toLowerCase()},scheduler._locate_year_month_root=function(e){return e.hasAttribute&&e.hasAttribute("date")},scheduler._get_year_month_cell=function(e){return this._get_year_el_node(e,this._locate_year_month_cell)
+},scheduler._get_year_month_table=function(e){return this._get_year_el_node(e,this._locate_year_month_table)},scheduler._get_year_month_root=function(e){return this._get_year_el_node(this._get_year_month_table(e),this._locate_year_month_root)},scheduler._get_year_el_node=function(e,t){for(;e&&!t(e);)e=e.parentNode;return e}}();
+//# sourceMappingURL=../sources/ext/dhtmlxscheduler_year_view.js.map \ No newline at end of file
diff --git a/codebase/imgs_flat/arrow_left.png b/codebase/imgs_flat/arrow_left.png
new file mode 100644
index 0000000..9075516
--- /dev/null
+++ b/codebase/imgs_flat/arrow_left.png
Binary files differ
diff --git a/codebase/imgs_flat/arrow_right.png b/codebase/imgs_flat/arrow_right.png
new file mode 100644
index 0000000..96638fe
--- /dev/null
+++ b/codebase/imgs_flat/arrow_right.png
Binary files differ
diff --git a/codebase/imgs_flat/but_repeat.gif b/codebase/imgs_flat/but_repeat.gif
new file mode 100644
index 0000000..9306667
--- /dev/null
+++ b/codebase/imgs_flat/but_repeat.gif
Binary files differ
diff --git a/codebase/imgs_flat/calendar.gif b/codebase/imgs_flat/calendar.gif
new file mode 100644
index 0000000..8c12c94
--- /dev/null
+++ b/codebase/imgs_flat/calendar.gif
Binary files differ
diff --git a/codebase/imgs_flat/clock.png b/codebase/imgs_flat/clock.png
new file mode 100644
index 0000000..73da343
--- /dev/null
+++ b/codebase/imgs_flat/clock.png
Binary files differ
diff --git a/codebase/imgs_flat/clock_big.gif b/codebase/imgs_flat/clock_big.gif
new file mode 100644
index 0000000..26b331c
--- /dev/null
+++ b/codebase/imgs_flat/clock_big.gif
Binary files differ
diff --git a/codebase/imgs_flat/clock_small.gif b/codebase/imgs_flat/clock_small.gif
new file mode 100644
index 0000000..9646dab
--- /dev/null
+++ b/codebase/imgs_flat/clock_small.gif
Binary files differ
diff --git a/codebase/imgs_flat/close_icon.png b/codebase/imgs_flat/close_icon.png
new file mode 100644
index 0000000..4aa5d66
--- /dev/null
+++ b/codebase/imgs_flat/close_icon.png
Binary files differ
diff --git a/codebase/imgs_flat/collapse_expand_icon.gif b/codebase/imgs_flat/collapse_expand_icon.gif
new file mode 100644
index 0000000..bf64cc8
--- /dev/null
+++ b/codebase/imgs_flat/collapse_expand_icon.gif
Binary files differ
diff --git a/codebase/imgs_flat/controls.png b/codebase/imgs_flat/controls.png
new file mode 100644
index 0000000..f9a99e2
--- /dev/null
+++ b/codebase/imgs_flat/controls.png
Binary files differ
diff --git a/codebase/imgs_flat/databg.png b/codebase/imgs_flat/databg.png
new file mode 100644
index 0000000..1b02c11
--- /dev/null
+++ b/codebase/imgs_flat/databg.png
Binary files differ
diff --git a/codebase/imgs_flat/databg_now.png b/codebase/imgs_flat/databg_now.png
new file mode 100644
index 0000000..f187514
--- /dev/null
+++ b/codebase/imgs_flat/databg_now.png
Binary files differ
diff --git a/codebase/imgs_flat/export_ical.png b/codebase/imgs_flat/export_ical.png
new file mode 100644
index 0000000..ca496f5
--- /dev/null
+++ b/codebase/imgs_flat/export_ical.png
Binary files differ
diff --git a/codebase/imgs_flat/export_pdf.png b/codebase/imgs_flat/export_pdf.png
new file mode 100644
index 0000000..ebadc7c
--- /dev/null
+++ b/codebase/imgs_flat/export_pdf.png
Binary files differ
diff --git a/codebase/imgs_flat/resize_dots.png b/codebase/imgs_flat/resize_dots.png
new file mode 100644
index 0000000..c26e2a3
--- /dev/null
+++ b/codebase/imgs_flat/resize_dots.png
Binary files differ
diff --git a/codebase/imgs_flat/resizing.png b/codebase/imgs_flat/resizing.png
new file mode 100644
index 0000000..fdfda20
--- /dev/null
+++ b/codebase/imgs_flat/resizing.png
Binary files differ
diff --git a/codebase/locale/locale_ar.js b/codebase/locale/locale_ar.js
new file mode 100644
index 0000000..d0f87cd
--- /dev/null
+++ b/codebase/locale/locale_ar.js
@@ -0,0 +1,52 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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: "الفترة الزمنية",
+ full_day: "طوال اليوم",
+
+ confirm_recurring: "هل تريد تحرير مجموعة كاملة من الأحداث المتكررة؟",
+ section_recurring: "تكرار الحدث",
+ button_recurring: "تعطيل",
+ button_recurring_open: "تمكين",
+ button_edit_series: "تحرير سلسلة",
+ button_edit_occurrence: "تعديل نسخة",
+
+ /*grid view extension*/
+ grid_tab: "جدول",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
+
diff --git a/codebase/locale/locale_be.js b/codebase/locale/locale_be.js
new file mode 100644
index 0000000..f5a31cf
--- /dev/null
+++ b/codebase/locale/locale_be.js
@@ -0,0 +1,64 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+/*
+ Translation by Sofya Morozova
+ */
+scheduler.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: "Перыяд часу",
+ full_day: "Увесь дзень",
+
+ confirm_recurring: "Вы хочаце змяніць усю серыю паўтаральных падзей?",
+ section_recurring: "Паўтарэнне",
+ button_recurring: "Адключана",
+ button_recurring_open: "Уключана",
+ button_edit_series: "Рэдагаваць серыю",
+ button_edit_occurrence: "Рэдагаваць асобнік",
+
+ /*agenda view extension*/
+ agenda_tab: "Спіс",
+ date: "Дата",
+ description: "Апісанне",
+
+ /*year view extension*/
+ year_tab: "Год",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Спіс",
+
+ /*grid view extension*/
+ grid_tab: "Спic",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/locale/locale_ca.js b/codebase/locale/locale_ca.js
new file mode 100644
index 0000000..fe908e8
--- /dev/null
+++ b/codebase/locale/locale_ca.js
@@ -0,0 +1,64 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+/*
+ @Traducido por Vicente Adria Bohigues - vicenteadria@hotmail.com
+ */
+scheduler.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",
+ full_day: "Tot el dia",
+
+ confirm_recurring: "¿Desitja modificar el conjunt d'esdeveniments repetits?",
+ section_recurring: "Repeteixca l'esdeveniment",
+ button_recurring: "Impedit",
+ button_recurring_open: "Permés",
+ button_edit_series: "Edit sèrie",
+ button_edit_occurrence: "Edita Instància",
+
+ /*agenda view extension*/
+ agenda_tab: "Agenda",
+ date: "Data",
+ description: "Descripció",
+
+ /*year view extension*/
+ year_tab: "Any",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Taula",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/locale/locale_cn.js b/codebase/locale/locale_cn.js
new file mode 100644
index 0000000..783afb3
--- /dev/null
+++ b/codebase/locale/locale_cn.js
@@ -0,0 +1,69 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+/*
+Translation by FreezeSoul
+*/
+scheduler.config.day_date="%M %d日 %D";
+scheduler.config.default_date="%Y年 %M %d日";
+scheduler.config.month_date="%Y年 %M";
+
+scheduler.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: "时间范围",
+ full_day: "整天",
+
+ confirm_recurring:"请确认是否将日程设为重复模式?",
+ section_recurring:"重复周期",
+ button_recurring:"禁用",
+ button_recurring_open:"启用",
+ button_edit_series: "编辑系列",
+ button_edit_occurrence: "编辑实例",
+
+ /*agenda view extension*/
+ agenda_tab:"议程",
+ date:"日期",
+ description:"说明",
+
+ /*year view extension*/
+ year_tab:"今年",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "议程",
+
+ /*grid view extension*/
+ grid_tab:"电网",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_cs.js b/codebase/locale/locale_cs.js
new file mode 100644
index 0000000..2d1833d
--- /dev/null
+++ b/codebase/locale/locale_cs.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+
+ /*recurring events*/
+ confirm_recurring: "Přejete si upravit celou řadu opakovaných událostí?",
+ section_recurring: "Opakování události",
+ button_recurring: "Vypnuto",
+ button_recurring_open: "Zapnuto",
+ button_edit_series: "Edit series",
+ button_edit_occurrence: "Upravit instance",
+
+ /*agenda view extension*/
+ agenda_tab: "Program",
+ date: "Datum",
+ description: "Poznámka",
+
+ /*year view extension*/
+ year_tab: "Rok",
+ full_day: "Full day",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Program",
+
+ /*grid view extension*/
+ grid_tab: "Mřížka",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_da.js b/codebase/locale/locale_da.js
new file mode 100644
index 0000000..430b20d
--- /dev/null
+++ b/codebase/locale/locale_da.js
@@ -0,0 +1,62 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+
+ /*recurring events*/
+ confirm_recurring: "Vil du tilrette hele serien af gentagne begivenheder?",
+ section_recurring: "Gentag begivenhed",
+ button_recurring: "Frakoblet",
+ button_recurring_open: "Tilkoblet",
+ button_edit_series: "Rediger serien",
+ button_edit_occurrence: "Rediger en kopi",
+
+ /*agenda view extension*/
+ agenda_tab: "Dagsorden",
+ date: "Dato",
+ description: "Beskrivelse",
+
+ /*year view extension*/
+ year_tab: "År",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Dagsorden",
+
+ /*grid view extension*/
+ grid_tab: "Grid",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_de.js b/codebase/locale/locale_de.js
new file mode 100644
index 0000000..051dd6d
--- /dev/null
+++ b/codebase/locale/locale_de.js
@@ -0,0 +1,62 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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", "Dez"],
+ 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",
+ full_day: "Ganzer Tag",
+
+ confirm_recurring: "Wollen Sie alle Einträge bearbeiten oder nur diesen einzelnen Eintrag?",
+ section_recurring: "Wiederholung",
+ button_recurring: "Aus",
+ button_recurring_open: "An",
+ button_edit_series: "Bearbeiten Sie die Serie",
+ button_edit_occurrence: "Bearbeiten Sie eine Kopie",
+
+ /*agenda view extension*/
+ agenda_tab: "Agenda",
+ date: "Datum",
+ description: "Beschreibung",
+
+ /*year view extension*/
+ year_tab: "Jahre",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Grid",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_el.js b/codebase/locale/locale_el.js
new file mode 100644
index 0000000..a1aaee0
--- /dev/null
+++ b/codebase/locale/locale_el.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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: "Χρονική περίοδος",
+ full_day: "Πλήρης Ημέρα",
+
+ /*recurring events*/
+ confirm_recurring: "Θέλετε να επεξεργασθείτε ολόκληρη την ομάδα των επαναλαμβανόμενων έργων;",
+ section_recurring: "Επαναλαμβανόμενο έργο",
+ button_recurring: "Ανενεργό",
+ button_recurring_open: "Ενεργό",
+ button_edit_series: "Επεξεργαστείτε τη σειρά",
+ button_edit_occurrence: "Επεξεργασία ένα αντίγραφο",
+
+ /*agenda view extension*/
+ agenda_tab: "Ημερήσια Διάταξη",
+ date: "Ημερομηνία",
+ description: "Περιγραφή",
+
+ /*year view extension*/
+ year_tab: "Έτος",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Ημερήσια Διάταξη",
+
+ /*grid view extension*/
+ grid_tab: "Πλέγμα",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_en.js b/codebase/locale/locale_en.js
new file mode 100644
index 0000000..ce79b21
--- /dev/null
+++ b/codebase/locale/locale_en.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.locale = {
+ date:{
+ month_full:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ month_short:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ day_full:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ day_short:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
+ },
+ labels:{
+ dhx_cal_today_button:"Today",
+ day_tab:"Day",
+ week_tab:"Week",
+ month_tab:"Month",
+ new_event:"New event",
+ icon_save:"Save",
+ icon_cancel:"Cancel",
+ icon_details:"Details",
+ icon_edit:"Edit",
+ icon_delete:"Delete",
+ confirm_closing:"",//Your changes will be lost, are your sure ?
+ confirm_deleting:"Event will be deleted permanently, are you sure?",
+ section_description:"Description",
+ section_time:"Time period",
+ full_day:"Full day",
+
+ /*recurring events*/
+ confirm_recurring:"Do you want to edit the whole set of repeated events?",
+ section_recurring:"Repeat event",
+ button_recurring:"Disabled",
+ button_recurring_open:"Enabled",
+ button_edit_series: "Edit series",
+ button_edit_occurrence: "Edit occurrence",
+
+ /*agenda view extension*/
+ agenda_tab:"Agenda",
+ date:"Date",
+ description:"Description",
+
+ /*year view extension*/
+ year_tab:"Year",
+
+ /* week agenda extension */
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Grid",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_es.js b/codebase/locale/locale_es.js
new file mode 100644
index 0000000..010a551
--- /dev/null
+++ b/codebase/locale/locale_es.js
@@ -0,0 +1,64 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+/*
+ @Autor Manuel Fernandez Panzuela - www.mfernandez.es
+ */
+scheduler.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",
+ full_day: "Todo el día",
+
+ confirm_recurring: "¿Desea modificar el conjunto de eventos repetidos?",
+ section_recurring: "Repita el evento",
+ button_recurring: "Impedido",
+ button_recurring_open: "Permitido",
+ button_edit_series: "Editar la serie",
+ button_edit_occurrence: "Editar una copia",
+
+ /*agenda view extension*/
+ agenda_tab: "Día",
+ date: "Fecha",
+ description: "Descripción",
+
+ /*year view extension*/
+ year_tab: "Año",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Día",
+
+ /*grid view extension*/
+ grid_tab: "Reja",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/locale/locale_fi.js b/codebase/locale/locale_fi.js
new file mode 100644
index 0000000..91e7bbb
--- /dev/null
+++ b/codebase/locale/locale_fi.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.locale = {
+ date: {
+ month_full: ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kes&auml;kuu", "Hein&auml;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",
+ full_day: "Koko päivä",
+
+ confirm_recurring: "Haluatko varmasti muokata toistuvan tapahtuman kaikkia jaksoja?",
+ section_recurring: "Toista tapahtuma",
+ button_recurring: "Ei k&auml;yt&ouml;ss&auml;",
+ button_recurring_open: "K&auml;yt&ouml;ss&auml;",
+ button_edit_series: "Muokkaa sarja",
+ button_edit_occurrence: "Muokkaa kopio",
+
+ /*agenda view extension*/
+ agenda_tab: "Esityslista",
+ date: "Päivämäärä",
+ description: "Kuvaus",
+
+ /*year view extension*/
+ year_tab: "Vuoden",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Esityslista",
+
+ /*grid view extension*/
+ grid_tab: "Ritilä",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
+
diff --git a/codebase/locale/locale_fr.js b/codebase/locale/locale_fr.js
new file mode 100644
index 0000000..2bfcb89
--- /dev/null
+++ b/codebase/locale/locale_fr.js
@@ -0,0 +1,61 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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", "Aoû", "Sep", "Oct", "Nov", "Déc"],
+ day_full: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
+ day_short: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"]
+ },
+ labels: {
+ dhx_cal_today_button: "Aujourd'hui",
+ day_tab: "Jour",
+ week_tab: "Semaine",
+ month_tab: "Mois",
+ new_event: "Nouvel événement",
+ 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",
+ full_day: "Journée complète",
+
+ confirm_recurring: "Voulez-vous éditer toute une série d'évènements répétés?",
+ section_recurring: "Périodicité",
+ button_recurring: "Désactivé",
+ button_recurring_open: "Activé",
+ button_edit_series: "Modifier la série",
+ button_edit_occurrence: "Modifier une copie",
+
+ /*agenda view extension*/
+ agenda_tab: "Jour",
+ date: "Date",
+ description: "Description",
+
+ /*year view extension*/
+ year_tab: "Année",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Jour",
+
+ /*grid view extension*/
+ grid_tab: "Grille",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
diff --git a/codebase/locale/locale_he.js b/codebase/locale/locale_he.js
new file mode 100644
index 0000000..3b6996d
--- /dev/null
+++ b/codebase/locale/locale_he.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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: "תקופה",
+
+ confirm_recurring: "האם ברצונך לשנות כל סדרת ארועים מתמשכים?",
+ section_recurring: "להעתיק ארוע",
+ button_recurring: "לא פעיל",
+ button_recurring_open: "פעיל",
+ full_day: "יום שלם",
+ button_edit_series: "ערוך את הסדרה",
+ button_edit_occurrence: "עריכת עותק",
+
+ /*agenda view extension*/
+ agenda_tab: "סדר יום",
+ date: "תאריך",
+ description: "תיאור",
+
+ /*year view extension*/
+ year_tab: "לשנה",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "סדר יום",
+
+ /*grid view extension*/
+ grid_tab: "סורג",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
+
diff --git a/codebase/locale/locale_hu.js b/codebase/locale/locale_hu.js
new file mode 100644
index 0000000..17e649e
--- /dev/null
+++ b/codebase/locale/locale_hu.js
@@ -0,0 +1,57 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+ full_day: "Egesz napos",
+
+ /*ismétlõdõ események*/
+ confirm_recurring: "Biztosan szerkeszteni akarod az összes ismétlõdõ esemény beállítását?",
+ section_recurring: "Esemény ismétlése",
+ button_recurring: "Tiltás",
+ button_recurring_open: "Engedélyezés",
+ button_edit_series: "Edit series",
+ button_edit_occurrence: "Szerkesztés bíróság",
+
+ /*napirendi nézet*/
+ agenda_tab: "Napirend",
+ date: "Dátum",
+ description: "Leírás",
+
+ /*éves nézet*/
+ year_tab: "Év",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_id.js b/codebase/locale/locale_id.js
new file mode 100644
index 0000000..c50b4ba
--- /dev/null
+++ b/codebase/locale/locale_id.js
@@ -0,0 +1,8 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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", full_day: "Hari penuh", /*recurring events*/ confirm_recurring: "Apakah acara ini akan berulang?", section_recurring: "Acara Rutin", button_recurring: "Tidak Difungsikan", button_recurring_open: "Difungsikan", button_edit_series: "Mengedit seri", button_edit_occurrence: "Mengedit salinan", /*agenda view extension*/ agenda_tab: "Agenda", date: "Tanggal", description: "Keterangan", /*year view extension*/ year_tab: "Tahun", /*week agenda view extension*/ week_agenda_tab: "Agenda", /*grid view extension*/ grid_tab: "Tabel", /* touch tooltip*/ drag_to_create:"Drag to create", drag_to_move:"Drag to move", /* dhtmlx message default buttons */ message_ok:"OK", message_cancel:"Cancel" } }; \ No newline at end of file
diff --git a/codebase/locale/locale_it.js b/codebase/locale/locale_it.js
new file mode 100644
index 0000000..33c028d
--- /dev/null
+++ b/codebase/locale/locale_it.js
@@ -0,0 +1,61 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+ full_day: "Intera giornata",
+
+ confirm_recurring: "Vuoi modificare l'intera serie di eventi?",
+ section_recurring: "Ripetere l'evento",
+ button_recurring: "Disattivato",
+ button_recurring_open: "Attivato",
+ button_edit_series: "Modificare la serie",
+ button_edit_occurrence: "Modificare una copia",
+
+ /*agenda view extension*/
+ agenda_tab: "Giorno",
+ date: "Data",
+ description: "Descrizione",
+
+ /*year view extension*/
+ year_tab: "Anni",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Giorno",
+
+ /*grid view extension*/
+ grid_tab: "Griglia",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
diff --git a/codebase/locale/locale_jp.js b/codebase/locale/locale_jp.js
new file mode 100644
index 0000000..8a47216
--- /dev/null
+++ b/codebase/locale/locale_jp.js
@@ -0,0 +1,65 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+/*
+ Translation by Genexus Japan Inc.
+ */
+scheduler.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: "期間",
+ confirm_recurring: "繰り返されているイベントを全て編集しますか?",
+ section_recurring: "イベントを繰り返す",
+ button_recurring: "無効",
+ button_recurring_open: "有効",
+ full_day: "終日",
+ button_edit_series: "シリーズを編集します",
+ button_edit_occurrence: "コピーを編集",
+
+ /*agenda view extension*/
+ agenda_tab: "議題は",
+ date: "日付",
+ description: "説明",
+
+ /*year view extension*/
+ year_tab: "今年",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "議題は",
+
+ /*grid view extension*/
+ grid_tab: "グリッド",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
+
diff --git a/codebase/locale/locale_nb.js b/codebase/locale/locale_nb.js
new file mode 100644
index 0000000..e7a632a
--- /dev/null
+++ b/codebase/locale/locale_nb.js
@@ -0,0 +1,61 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+
+ /*recurring events*/
+ confirm_recurring: "Vil du forandre hele dette settet av repeterende hendelser?",
+ section_recurring: "Repeter hendelsen",
+ button_recurring: "Av",
+ button_recurring_open: "På",
+ button_edit_series: "Rediger serien",
+ button_edit_occurrence: "Redigere en kopi",
+
+ /*agenda view extension*/
+ agenda_tab: "Agenda",
+ date: "Dato",
+ description: "Beskrivelse",
+
+ /*year view extension*/
+ year_tab: "År",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Grid",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/locale/locale_nl.js b/codebase/locale/locale_nl.js
new file mode 100644
index 0000000..73f7f3d
--- /dev/null
+++ b/codebase/locale/locale_nl.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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: "Edit",
+ 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",
+ full_day: "Hele dag",
+
+ confirm_recurring: "Wilt u alle terugkerende items bijwerken?",
+ section_recurring: "Item herhalen",
+ button_recurring: "Uit",
+ button_recurring_open: "Aan",
+ button_edit_series: "Bewerk de serie",
+ button_edit_occurrence: "Bewerk een kopie",
+
+ /*agenda view extension*/
+ agenda_tab: "Agenda",
+ date: "Datum",
+ description: "Omschrijving",
+
+ /*year view extension*/
+ year_tab: "Jaar",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Tabel",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
+
diff --git a/codebase/locale/locale_no.js b/codebase/locale/locale_no.js
new file mode 100644
index 0000000..efb76a4
--- /dev/null
+++ b/codebase/locale/locale_no.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+ full_day: "Full dag",
+
+ /*recurring events*/
+ confirm_recurring: "Vil du endre hele settet med repeterende oppføringer?",
+ section_recurring: "Repeterende oppføring",
+ button_recurring: "Ikke aktiv",
+ button_recurring_open: "Aktiv",
+ button_edit_series: "Rediger serien",
+ button_edit_occurrence: "Redigere en kopi",
+
+ /*agenda view extension*/
+ agenda_tab: "Agenda",
+ date: "Dato",
+ description: "Beskrivelse",
+
+ /*year view extension*/
+ year_tab: "År",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Grid",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_pl.js b/codebase/locale/locale_pl.js
new file mode 100644
index 0000000..66da5ca
--- /dev/null
+++ b/codebase/locale/locale_pl.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+ full_day: "Cały dzień",
+
+ /*recurring events*/
+ confirm_recurring: "Czy chcesz edytować cały zbiór powtarzających się zdarzeń?",
+ section_recurring: "Powtórz zdarzenie",
+ button_recurring: "Nieaktywne",
+ button_recurring_open: "Aktywne",
+ button_edit_series: "Edytuj serię",
+ button_edit_occurrence: "Edytuj kopię",
+
+ /*agenda view extension*/
+ agenda_tab: "Agenda",
+ date: "Data",
+ description: "Opis",
+
+ /*year view extension*/
+ year_tab: "Rok",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Tabela",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_pt.js b/codebase/locale/locale_pt.js
new file mode 100644
index 0000000..25ba2ca
--- /dev/null
+++ b/codebase/locale/locale_pt.js
@@ -0,0 +1,73 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+/*
+
+ TRANSLATION BY MATTHEUS PIROVANI RORIZ GONЗALVES
+
+ mattheusroriz@hotmail.com / mattheus.pirovani@gmail.com /
+
+ www.atrixian.com.br
+
+ */
+
+scheduler.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: "", //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",
+ full_day: "Dia inteiro",
+
+ confirm_recurring: "Deseja editar todos esses eventos repetidos?",
+ section_recurring: "Repetir evento",
+ button_recurring: "Desabilitar",
+ button_recurring_open: "Habilitar",
+ button_edit_series: "Editar a série",
+ button_edit_occurrence: "Editar uma cópia",
+
+ /*agenda view extension*/
+ agenda_tab: "Dia",
+ date: "Data",
+ description: "Descrição",
+
+ /*year view extension*/
+ year_tab: "Ano",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Dia",
+
+ /*grid view extension*/
+ grid_tab: "Grade",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
+
diff --git a/codebase/locale/locale_ro.js b/codebase/locale/locale_ro.js
new file mode 100644
index 0000000..87dde46
--- /dev/null
+++ b/codebase/locale/locale_ro.js
@@ -0,0 +1,67 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+/*
+ Traducere de Ovidiu Lixandru: http://www.madball.ro
+ */
+
+scheduler.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",
+ full_day:"Toata ziua",
+
+ /*recurring events*/
+ confirm_recurring:"Vrei sa editezi toata seria de evenimente repetate?",
+ section_recurring:"Repetare",
+ button_recurring:"Dezactivata",
+ button_recurring_open:"Activata",
+ button_edit_series: "Editeaza serie",
+ button_edit_occurrence: "Editeaza doar intrare",
+
+ /*agenda view extension*/
+ agenda_tab:"Agenda",
+ date:"Data",
+ description:"Descriere",
+
+ /*year view extension*/
+ year_tab:"An",
+
+ /* week agenda extension */
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Lista",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_ru.js b/codebase/locale/locale_ru.js
new file mode 100644
index 0000000..fa1311d
--- /dev/null
+++ b/codebase/locale/locale_ru.js
@@ -0,0 +1,61 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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: "Период времени",
+ full_day: "Весь день",
+
+ confirm_recurring: "Вы хотите изменить всю серию повторяющихся событий?",
+ section_recurring: "Повторение",
+ button_recurring: "Отключено",
+ button_recurring_open: "Включено",
+ button_edit_series: "Редактировать серию",
+ button_edit_occurrence: "Редактировать экземпляр",
+
+ /*agenda view extension*/
+ agenda_tab: "Список",
+ date: "Дата",
+ description: "Описание",
+
+ /*year view extension*/
+ year_tab: "Год",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Список",
+
+ /*grid view extension*/
+ grid_tab: "Таблица",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/locale/locale_si.js b/codebase/locale/locale_si.js
new file mode 100644
index 0000000..f8a9564
--- /dev/null
+++ b/codebase/locale/locale_si.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+ full_day: "Ves dan",
+
+ /*recurring events*/
+ confirm_recurring: "Želite urediti celoten set ponavljajočih dogodkov?",
+ section_recurring: "Ponovi dogodek",
+ button_recurring: "Onemogočeno",
+ button_recurring_open: "Omogočeno",
+ button_edit_series: "Edit series",
+ button_edit_occurrence: "Edit occurrence",
+
+ /*agenda view extension*/
+ agenda_tab: "Zadeva",
+ date: "Datum",
+ description: "Opis",
+
+ /*year view extension*/
+ year_tab: "Leto",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Zadeva",
+
+ /*grid view extension*/
+ grid_tab: "Miza",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_sk.js b/codebase/locale/locale_sk.js
new file mode 100644
index 0000000..5ffdedd
--- /dev/null
+++ b/codebase/locale/locale_sk.js
@@ -0,0 +1,63 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+
+ /*recurring events*/
+ confirm_recurring: "Prajete si upraviť celú radu opakovaných udalostí?",
+ section_recurring: "Opakovanie udalosti",
+ button_recurring: "Vypnuté",
+ button_recurring_open: "Zapnuté",
+ button_edit_series: "Upraviť opakovania",
+ button_edit_occurrence: "Upraviť inštancie",
+
+ /*agenda view extension*/
+ agenda_tab: "Program",
+ date: "Dátum",
+ description: "Poznámka",
+
+ /*year view extension*/
+ year_tab: "Rok",
+ full_day: "Celý deň", // Full day
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Program",
+
+ /*grid view extension*/
+ grid_tab: "Mriežka",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
diff --git a/codebase/locale/locale_sv.js b/codebase/locale/locale_sv.js
new file mode 100644
index 0000000..061cfc8
--- /dev/null
+++ b/codebase/locale/locale_sv.js
@@ -0,0 +1,62 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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",
+ full_day: "Hela dagen",
+
+ /*recurring events*/
+ confirm_recurring: "Vill du redigera hela serien med repeterande händelser?",
+ section_recurring: "Upprepa händelse",
+ button_recurring: "Inaktiverat",
+ button_recurring_open: "Aktiverat",
+ button_edit_series: "Redigera serien",
+ button_edit_occurrence: "Redigera en kopia",
+
+ /*agenda view extension*/
+ agenda_tab: "Dagordning",
+ date: "Datum",
+ description: "Beskrivning",
+
+ /*year view extension*/
+ year_tab: "År",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Dagordning",
+
+ /*grid view extension*/
+ grid_tab: "Galler",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/locale/locale_tr.js b/codebase/locale/locale_tr.js
new file mode 100644
index 0000000..67649ac
--- /dev/null
+++ b/codebase/locale/locale_tr.js
@@ -0,0 +1,62 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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ýðý",
+ full_day: "Tam gün",
+
+ /*recurring events*/
+ confirm_recurring: "Tüm tekrar eden etkinlikler silinecek, devam?",
+ section_recurring: "Etkinliði tekrarla",
+ button_recurring: "Pasif",
+ button_recurring_open: "Aktif",
+ button_edit_series: "Dizi düzenleme",
+ button_edit_occurrence: "Bir kopyasını düzenleyin",
+
+ /*agenda view extension*/
+ agenda_tab: "Ajanda",
+ date: "Tarih",
+ description: "Açýklama",
+
+ /*year view extension*/
+ year_tab: "Yýl",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Ajanda",
+
+ /*grid view extension*/
+ grid_tab: "Izgara",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/locale/locale_ua.js b/codebase/locale/locale_ua.js
new file mode 100644
index 0000000..11299ec
--- /dev/null
+++ b/codebase/locale/locale_ua.js
@@ -0,0 +1,62 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.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: "Часовий проміжок",
+ full_day: "Весь день",
+
+ /*recurring events*/
+ confirm_recurring: "Хочете редагувати весь перелік повторюваних подій?",
+ section_recurring: "Повторювана подія",
+ button_recurring: "Відключено",
+ button_recurring_open: "Включено",
+ button_edit_series: "Редагувати серію",
+ button_edit_occurrence: "Редагувати примірник",
+
+ /*agenda view extension*/
+ agenda_tab: "Перелік",
+ date: "Дата",
+ description: "Опис",
+
+ /*year view extension*/
+ year_tab: "Рік",
+
+ /*week agenda view extension*/
+ week_agenda_tab: "Перелік",
+
+ /*grid view extension*/
+ grid_tab: "Таблиця",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+}; \ No newline at end of file
diff --git a/codebase/sources/dhtmlxscheduler.js b/codebase/sources/dhtmlxscheduler.js
new file mode 100644
index 0000000..4656403
--- /dev/null
+++ b/codebase/sources/dhtmlxscheduler.js
@@ -0,0 +1,6148 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+window.dhtmlXScheduler = window.scheduler = { version: "4.1.0" };
+
+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<node.attributes.length; i++)
+ t[node.attributes[i].name]=node.attributes[i].value;
+ t["_tagvalue"]=node.firstChild?node.firstChild.nodeValue:"";
+ for (var i=0; i<node.childNodes.length; i++){
+ var name=node.childNodes[i].tagName;
+ if (name){
+ if (!t[name]) t[name]=[];
+ t[name].push(this.xmlNodeToJSON(node.childNodes[i]));
+ }
+ }
+ return t;
+};
+
+/**
+ * @desc: Call wrapper
+ * @type: private
+ * @param: funcObject - action handler
+ * @param: dhtmlObject - user data
+ * @returns: function handler
+ * @topic: 0
+ */
+function callerFunction(funcObject, dhtmlObject){
+ this.handler=function(e){
+ if (!e)
+ e=window.event;
+ funcObject(e, dhtmlObject);
+ return true;
+ };
+ return this.handler;
+}
+
+/**
+ * @desc: Calculate absolute position of html object
+ * @type: private
+ * @param: htmlObject - html object
+ * @topic: 0
+ */
+function getAbsoluteLeft(htmlObject){
+ return getOffset(htmlObject).left;
+}
+/**
+ * @desc: Calculate absolute position of html object
+ * @type: private
+ * @param: htmlObject - html object
+ * @topic: 0
+ */
+function getAbsoluteTop(htmlObject){
+ return getOffset(htmlObject).top;
+}
+
+function getOffsetSum(elem) {
+ var top=0, left=0;
+ while(elem) {
+ top = top + parseInt(elem.offsetTop);
+ left = left + parseInt(elem.offsetLeft);
+ elem = elem.offsetParent;
+ }
+ return {top: top, left: left};
+}
+function getOffsetRect(elem) {
+ var box = elem.getBoundingClientRect();
+ var body = document.body;
+ var docElem = document.documentElement;
+ var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
+ var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
+ var clientTop = docElem.clientTop || body.clientTop || 0;
+ var clientLeft = docElem.clientLeft || body.clientLeft || 0;
+ var top = box.top + scrollTop - clientTop;
+ var left = box.left + scrollLeft - clientLeft;
+ return { top: Math.round(top), left: Math.round(left) };
+}
+function getOffset(elem) {
+ if (elem.getBoundingClientRect) {
+ return getOffsetRect(elem);
+ } else {
+ return getOffsetSum(elem);
+ }
+}
+
+/**
+ * @desc: Convert string to it boolean representation
+ * @type: private
+ * @param: inputString - string for covertion
+ * @topic: 0
+ */
+function convertStringToBoolean(inputString){
+ if (typeof (inputString) == "string")
+ inputString=inputString.toLowerCase();
+
+ switch (inputString){
+ case "1":
+ case "true":
+ case "yes":
+ case "y":
+ case 1:
+ case true:
+ return true;
+ default:
+ return false;
+ }
+}
+
+/**
+ * @desc: find out what symbol to use as url param delimiters in further params
+ * @type: private
+ * @param: str - current url string
+ * @topic: 0
+ */
+function getUrlSymbol(str){
+ if (str.indexOf("?") != -1)
+ return "&";
+ else
+ return "?";
+}
+
+function dhtmlDragAndDropObject(){
+ if (window.dhtmlDragAndDrop)
+ return window.dhtmlDragAndDrop;
+
+ this.lastLanding=0;
+ this.dragNode=0;
+ this.dragStartNode=0;
+ this.dragStartObject=0;
+ this.tempDOMU=null;
+ this.tempDOMM=null;
+ this.waitDrag=0;
+ window.dhtmlDragAndDrop=this;
+
+ return this;
+}
+
+dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){
+ htmlNode.onmousedown=null;
+ htmlNode.dragStarter=null;
+ htmlNode.dragLanding=null;
+};
+
+dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode, dhtmlObject){
+ htmlNode.onmousedown=this.preCreateDragCopy;
+ htmlNode.dragStarter=dhtmlObject;
+ this.addDragLanding(htmlNode, dhtmlObject);
+};
+
+dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode, dhtmlObject){
+ htmlNode.dragLanding=dhtmlObject;
+};
+
+dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e){
+ if ((e||window.event) && (e||event).button == 2)
+ return;
+
+ if (window.dhtmlDragAndDrop.waitDrag){
+ window.dhtmlDragAndDrop.waitDrag=0;
+ document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU;
+ document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM;
+ return false;
+ }
+
+ if (window.dhtmlDragAndDrop.dragNode)
+ window.dhtmlDragAndDrop.stopDrag(e);
+
+ window.dhtmlDragAndDrop.waitDrag=1;
+ window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup;
+ window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove;
+ window.dhtmlDragAndDrop.dragStartNode=this;
+ window.dhtmlDragAndDrop.dragStartObject=this.dragStarter;
+ document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy;
+ document.body.onmousemove=window.dhtmlDragAndDrop.callDrag;
+ window.dhtmlDragAndDrop.downtime = new Date().valueOf();
+
+
+ if ((e)&&(e.preventDefault)){
+ e.preventDefault();
+ return false;
+ }
+ return false;
+};
+
+dhtmlDragAndDropObject.prototype.callDrag=function(e){
+ if (!e)
+ e=window.event;
+ var dragger=window.dhtmlDragAndDrop;
+ if ((new Date()).valueOf()-dragger.downtime<100) return;
+
+ //if ((e.button == 0)&&(_isIE))
+ // return dragger.stopDrag();
+
+ if (!dragger.dragNode){
+ if (dragger.waitDrag){
+ dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode, e);
+
+ if (!dragger.dragNode)
+ return dragger.stopDrag();
+
+ dragger.dragNode.onselectstart=function(){return false;};
+ dragger.gldragNode=dragger.dragNode;
+ document.body.appendChild(dragger.dragNode);
+ document.body.onmouseup=dragger.stopDrag;
+ dragger.waitDrag=0;
+ dragger.dragNode.pWindow=window;
+ dragger.initFrameRoute();
+ }
+ else return dragger.stopDrag(e, true);
+ }
+
+ if (dragger.dragNode.parentNode != window.document.body && dragger.gldragNode){
+ var grd = dragger.gldragNode;
+
+ if (dragger.gldragNode.old)
+ grd=dragger.gldragNode.old;
+
+ //if (!document.all) dragger.calculateFramePosition();
+ grd.parentNode.removeChild(grd);
+ var oldBody = dragger.dragNode.pWindow;
+
+ if (grd.pWindow && grd.pWindow.dhtmlDragAndDrop.lastLanding)
+ grd.pWindow.dhtmlDragAndDrop.lastLanding.dragLanding._dragOut(grd.pWindow.dhtmlDragAndDrop.lastLanding);
+
+ // var oldp=dragger.dragNode.parentObject;
+ if (_isIE){
+ var div = document.createElement("Div");
+ div.innerHTML=dragger.dragNode.outerHTML;
+ dragger.dragNode=div.childNodes[0];
+ } else
+ dragger.dragNode=dragger.dragNode.cloneNode(true);
+
+ dragger.dragNode.pWindow=window;
+ // dragger.dragNode.parentObject=oldp;
+
+ dragger.gldragNode.old=dragger.dragNode;
+ document.body.appendChild(dragger.dragNode);
+ oldBody.dhtmlDragAndDrop.dragNode=dragger.dragNode;
+ }
+
+ dragger.dragNode.style.left=e.clientX+15 +
+ (dragger.fx ? dragger.fx*(-1) : 0) +
+ (document.body.scrollLeft||document.documentElement.scrollLeft)+"px";
+ dragger.dragNode.style.top=e.clientY+3+
+ (dragger.fy ? dragger.fy*(-1) : 0) +
+ (document.body.scrollTop||document.documentElement.scrollTop)+"px";
+
+ var z;
+ if (!e.srcElement)
+ z = e.target;
+ else
+ z=e.srcElement;
+ dragger.checkLanding(z, e);
+};
+
+dhtmlDragAndDropObject.prototype.calculateFramePosition=function(n){
+ //this.fx = 0, this.fy = 0;
+ if (window.name){
+ var el = parent.frames[window.name].frameElement.offsetParent;
+ var fx = 0;
+ var fy = 0;
+
+ while (el){
+ fx+=el.offsetLeft;
+ fy+=el.offsetTop;
+ el=el.offsetParent;
+ }
+
+ if ((parent.dhtmlDragAndDrop)){
+ var ls = parent.dhtmlDragAndDrop.calculateFramePosition(1);
+ fx+=ls.split('_')[0]*1;
+ fy+=ls.split('_')[1]*1;
+ }
+
+ if (n)
+ return fx+"_"+fy;
+ else
+ this.fx=fx;
+ this.fy=fy;
+ }
+ return "0_0";
+};
+
+dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject, e){
+ if ((htmlObject)&&(htmlObject.dragLanding)){
+ if (this.lastLanding)
+ this.lastLanding.dragLanding._dragOut(this.lastLanding);
+ this.lastLanding=htmlObject;
+ this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding, this.dragStartNode, e.clientX,
+ e.clientY, e);
+ this.lastLanding_scr=(_isIE ? e.srcElement : e.target);
+ } else {
+ if ((htmlObject)&&(htmlObject.tagName != "BODY"))
+ this.checkLanding(htmlObject.parentNode, e);
+ else {
+ if (this.lastLanding)
+ this.lastLanding.dragLanding._dragOut(this.lastLanding, e.clientX, e.clientY, e);
+ this.lastLanding=0;
+
+ if (this._onNotFound)
+ this._onNotFound();
+ }
+ }
+};
+
+dhtmlDragAndDropObject.prototype.stopDrag=function(e, mode){
+ var dragger=window.dhtmlDragAndDrop;
+
+ if (!mode){
+ dragger.stopFrameRoute();
+ var temp = dragger.lastLanding;
+ dragger.lastLanding=null;
+
+ if (temp)
+ temp.dragLanding._drag(dragger.dragStartNode, dragger.dragStartObject, temp,
+ (_isIE ? event.srcElement : e.target));
+ }
+ dragger.lastLanding=null;
+
+ if ((dragger.dragNode)&&(dragger.dragNode.parentNode == document.body))
+ dragger.dragNode.parentNode.removeChild(dragger.dragNode);
+ dragger.dragNode=0;
+ dragger.gldragNode=0;
+ dragger.fx=0;
+ dragger.fy=0;
+ dragger.dragStartNode=0;
+ dragger.dragStartObject=0;
+ document.body.onmouseup=dragger.tempDOMU;
+ document.body.onmousemove=dragger.tempDOMM;
+ dragger.tempDOMU=null;
+ dragger.tempDOMM=null;
+ dragger.waitDrag=0;
+};
+
+dhtmlDragAndDropObject.prototype.stopFrameRoute=function(win){
+ if (win)
+ window.dhtmlDragAndDrop.stopDrag(1, 1);
+
+ for (var i = 0; i < window.frames.length; i++){
+ try{
+ if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
+ window.frames[i].dhtmlDragAndDrop.stopFrameRoute(window);
+ } catch(e){}
+ }
+
+ try{
+ if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
+ parent.dhtmlDragAndDrop.stopFrameRoute(window);
+ } catch(e){}
+};
+
+dhtmlDragAndDropObject.prototype.initFrameRoute=function(win, mode){
+ if (win){
+ window.dhtmlDragAndDrop.preCreateDragCopy();
+ window.dhtmlDragAndDrop.dragStartNode=win.dhtmlDragAndDrop.dragStartNode;
+ window.dhtmlDragAndDrop.dragStartObject=win.dhtmlDragAndDrop.dragStartObject;
+ window.dhtmlDragAndDrop.dragNode=win.dhtmlDragAndDrop.dragNode;
+ window.dhtmlDragAndDrop.gldragNode=win.dhtmlDragAndDrop.dragNode;
+ window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag;
+ window.waitDrag=0;
+
+ if (((!_isIE)&&(mode))&&((!_isFF)||(_FFrv < 1.8)))
+ window.dhtmlDragAndDrop.calculateFramePosition();
+ }
+ try{
+ if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
+ parent.dhtmlDragAndDrop.initFrameRoute(window);
+ }catch(e){}
+
+ for (var i = 0; i < window.frames.length; i++){
+ try{
+ if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
+ window.frames[i].dhtmlDragAndDrop.initFrameRoute(window, ((!win||mode) ? 1 : 0));
+ } catch(e){}
+ }
+};
+
+_isFF = false;
+_isIE = false;
+_isOpera = false;
+_isKHTML = false;
+_isMacOS = false;
+_isChrome = false;
+_FFrv = false;
+_KHTMLrv = false;
+_OperaRv = false;
+
+if (navigator.userAgent.indexOf('Macintosh') != -1)
+ _isMacOS=true;
+
+
+if (navigator.userAgent.toLowerCase().indexOf('chrome')>-1)
+ _isChrome=true;
+
+if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){
+ _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, css){
+ // css - for locale-independent class name
+ var className = css ? css : (text || "");
+ var button_css = "dhtmlx_"+(className).toLowerCase().replace(/ /g, "_")+"_button"; // dhtmlx_ok_button, dhtmlx_click_me_button
+ return "<div class='dhtmlx_popup_button "+button_css+"' result='"+result+"' ><div>"+text+"</div></div>";
+ }
+
+ 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 = "<div>"+text.text+"</div>";
+ 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+='<div class="dhtmlx_popup_title">'+config.title+'</div>';
+ inner+='<div class="dhtmlx_popup_text"><span>'+(config.content?'':config.text)+'</span></div><div class="dhtmlx_popup_controls">';
+ if (ok){
+ var ok_text = (config.ok || scheduler.locale.labels.message_ok);
+ //default value for compatibility with custom locales some people have
+ if(ok_text === undefined) ok_text = "OK";
+ inner += button(ok_text, true, "ok");
+ }
+ if (cancel){
+ var cancel_text = (config.cancel || scheduler.locale.labels.message_cancel);
+ if(cancel_text === undefined) cancel_text = "Cancel";
+ inner += button(cancel_text, false, "cancel");
+ }
+ if (config.buttons){
+ for (var i=0; i<config.buttons.length; i++)
+ inner += button(config.buttons[i],i);
+ }
+ inner += '</div>';
+ box.innerHTML = inner;
+
+ if (config.content){
+ var node = config.content;
+ if (typeof node == "string")
+ node = document.getElementById(node);
+ if (node.style.display == 'none')
+ node.style.display = "";
+ box.childNodes[config.title?1:0].appendChild(node);
+ }
+
+ box.onclick = function(e){
+ e = e ||event;
+ var source = e.target || e.srcElement;
+ if (!source.className) source = source.parentNode;
+ if (source.className.split(" ")[0] == "dhtmlx_popup_button"){
+ var result = source.getAttribute("result");
+ result = (result == "true")||(result == "false"?false:result);
+ callback(config, result);
+ }
+ };
+ config.box = box;
+ if (ok||cancel)
+ _dhx_msg_cfg = config;
+
+ return box;
+ }
+ function _createBox(config, ok, cancel){
+ var box = config.tagName ? config : _boxStructure(config, ok, cancel);
+
+ if (!config.hidden)
+ modality(true);
+ document.body.appendChild(box);
+ var x = Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth) - box.offsetWidth)/2));
+ var y = Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight) - box.offsetHeight)/2));
+ if (config.position == "top")
+ box.style.top = "-3px";
+ else
+ box.style.top = y+'px';
+ box.style.left = x+'px';
+ //necessary for IE only
+ box.onkeydown = modal_key;
+
+ box.focus();
+ if (config.hidden)
+ dhtmlx.modalbox.hide(box);
+
+ return box;
+ }
+
+ function alertPopup(config){
+ return _createBox(config, true, false);
+ }
+ function confirmPopup(config){
+ return _createBox(config, true, true);
+ }
+ function boxPopup(config){
+ return _createBox(config);
+ }
+ function box_params(text, type, callback){
+ if (typeof text != "object"){
+ if (typeof type == "function"){
+ callback = type;
+ type = "";
+ }
+ text = {text:text, type:type, callback:callback };
+ }
+ return text;
+ }
+ function params(text, type, expire, id){
+ if (typeof text != "object")
+ text = {text:text, type:type, expire:expire, id:id};
+ text.id = text.id||t.uid();
+ text.expire = text.expire||t.expire;
+ return text;
+ }
+ dhtmlx.alert = function(){
+ var text = box_params.apply(this, arguments);
+ text.type = text.type || "confirm";
+ return alertPopup(text);
+ };
+ dhtmlx.confirm = function(){
+ var text = box_params.apply(this, arguments);
+ text.type = text.type || "alert";
+ return confirmPopup(text);
+ };
+ dhtmlx.modalbox = function(){
+ var text = box_params.apply(this, arguments);
+ text.type = text.type || "alert";
+ return boxPopup(text);
+ };
+ dhtmlx.modalbox.hide = function(node){
+ while (node && node.getAttribute && !node.getAttribute("dhxbox"))
+ node = node.parentNode;
+ if (node){
+ node.parentNode.removeChild(node);
+ modality(false);
+ }
+ };
+ var t = dhtmlx.message = function(text, type, expire, id){
+ text = params.apply(this, arguments);
+ text.type = text.type||"info";
+
+ var subtype = text.type.split("-")[0];
+ switch (subtype){
+ case "alert":
+ return alertPopup(text);
+ case "confirm":
+ return confirmPopup(text);
+ case "modalbox":
+ return boxPopup(text);
+ default:
+ return info(text);
+ }
+ };
+
+ t.seed = (new Date()).valueOf();
+ t.uid = function(){return t.seed++;};
+ t.expire = 4000;
+ t.keyboard = true;
+ t.position = "top";
+ t.pull = {};
+ t.timers = {};
+
+ t.hideAll = function(){
+ for (var key in t.pull)
+ t.hide(key);
+ };
+ t.hide = function(id){
+ var obj = t.pull[id];
+ if (obj && obj.parentNode){
+ window.setTimeout(function(){
+ obj.parentNode.removeChild(obj);
+ obj = null;
+ },2000);
+ obj.className+=" hidden";
+
+ if(t.timers[id])
+ window.clearTimeout(t.timers[id]);
+ delete t.pull[id];
+ }
+ };
+})();
+/**
+ * @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<this.updatedRows.length; i++)
+ valid&=this.checkBeforeUpdate(this.updatedRows[i]);
+ if (!valid && !this.callEvent("onValidationError",["",this.messages])) return false;
+
+ if (this._tSend)
+ this._sendData(this._getAllData());
+ else
+ for (var i=0; i<this.updatedRows.length; i++)
+ if (!this._in_progress[this.updatedRows[i]]){
+ if (this.is_invalid(this.updatedRows[i])) continue;
+ this._beforeSendData(this._getRowData(this.updatedRows[i]),this.updatedRows[i]);
+ if (this._waitMode && (this.obj.mytype=="tree" || this.obj._h2)) return; //block send all for tree
+ }
+ },
+
+
+
+
+
+
+
+
+ _getAllData:function(rowId){
+ var out={};
+ var has_one = false;
+ for(var i=0;i<this.updatedRows.length;i++){
+ var id=this.updatedRows[i];
+ if (this._in_progress[id] || this.is_invalid(id)) continue;
+ if (!this.callEvent("onBeforeUpdate",[id,this.getState(id)])) continue;
+ out[id]=this._getRowData(id,id+this.post_delim);
+ has_one = true;
+ this._in_progress[id]=(new Date()).valueOf();
+ }
+ return has_one?out:null;
+ },
+
+
+ /**
+ * @desc: specify column which value should be varified before sending to server
+ * @param: ind - column index (0 based)
+ * @param: verifFunction - function (object) which should verify cell value (if not specified, then value will be compared to empty string). Two arguments will be passed into it: value and column name
+ * @type: public
+ */
+ setVerificator:function(ind,verifFunction){
+ this.mandatoryFields[ind] = verifFunction||(function(value){return (value !== "");});
+ },
+ /**
+ * @desc: remove column from list of those which should be verified
+ * @param: ind - column Index (0 based)
+ * @type: public
+ */
+ clearVerificator:function(ind){
+ this.mandatoryFields[ind] = false;
+ },
+
+
+
+
+
+ findRow:function(pattern){
+ var i=0;
+ for(i=0;i<this.updatedRows.length;i++)
+ if(pattern==this.updatedRows[i]) break;
+ return i;
+ },
+
+
+
+
+
+
+
+
+
+
+
+ /**
+ * @desc: define custom actions
+ * @param: name - name of action, same as value of action attribute
+ * @param: handler - custom function, which receives a XMl response content for action
+ * @type: private
+ */
+ defineAction:function(name,handler){
+ if (!this._uActions) this._uActions=[];
+ this._uActions[name]=handler;
+ },
+
+
+
+
+ /**
+* @desc: used in combination with setOnBeforeUpdateHandler to create custom client-server transport system
+* @param: sid - id of item before update
+* @param: tid - id of item after up0ate
+* @param: action - action name
+* @type: public
+* @topic: 0
+*/
+ afterUpdateCallback:function(sid, tid, action, btag) {
+ var marker = sid;
+ var correct=(action!="error" && action!="invalid");
+ if (!correct) this.set_invalid(sid,action);
+ if ((this._uActions)&&(this._uActions[action])&&(!this._uActions[action](btag)))
+ return (delete this._in_progress[marker]);
+
+ if (this._in_progress[marker]!="wait")
+ this.setUpdated(sid, false);
+
+ var soid = sid;
+
+ switch (action) {
+ case "inserted":
+ case "insert":
+ if (tid != sid) {
+ this.obj[this._methods[2]](sid, tid);
+ sid = tid;
+ }
+ break;
+ case "delete":
+ case "deleted":
+ this.obj.setUserData(sid, this.action_param, "true_deleted");
+ this.obj[this._methods[3]](sid);
+ delete this._in_progress[marker];
+ return this.callEvent("onAfterUpdate", [sid, action, tid, btag]);
+ }
+
+ if (this._in_progress[marker]!="wait"){
+ if (correct) this.obj.setUserData(sid, this.action_param,'');
+ delete this._in_progress[marker];
+ } else {
+ delete this._in_progress[marker];
+ this.setUpdated(tid,true,this.obj.getUserData(sid,this.action_param));
+ }
+
+ this.callEvent("onAfterUpdate", [soid, action, tid, btag]);
+ },
+
+ /**
+ * @desc: response from server
+ * @param: xml - XMLLoader object with response XML
+ * @type: private
+ */
+ afterUpdate:function(that,b,c,d,xml){
+ xml.getXMLTopNode("data"); //fix incorrect content type in IE
+ if (!xml.xmlDoc.responseXML) return;
+ var atag=xml.doXPath("//data/action");
+ for (var i=0; i<atag.length; i++){
+ var btag=atag[i];
+ var action = btag.getAttribute("type");
+ var sid = btag.getAttribute("sid");
+ var tid = btag.getAttribute("tid");
+
+ that.afterUpdateCallback(sid,tid,action,btag);
+ }
+ that.finalizeUpdate();
+ },
+ finalizeUpdate:function(){
+ if (this._waitMode) this._waitMode--;
+
+ if ((this.obj.mytype=="tree" || this.obj._h2) && this.updatedRows.length)
+ this.sendData();
+ this.callEvent("onAfterUpdateFinish",[]);
+ if (!this.updatedRows.length)
+ this.callEvent("onFullSync",[]);
+ },
+
+
+
+
+
+ /**
+ * @desc: initializes data-processor
+ * @param: anObj - dhtmlxGrid object to attach this data-processor to
+ * @type: public
+ */
+ init:function(anObj){
+ this.obj = anObj;
+ if (this.obj._dp_init)
+ this.obj._dp_init(this);
+ },
+
+
+ setOnAfterUpdate:function(ev){
+ this.attachEvent("onAfterUpdate",ev);
+ },
+ enableDebug:function(mode){
+ },
+ setOnBeforeUpdateHandler:function(func){
+ this.attachEvent("onBeforeDataSending",func);
+ },
+
+
+
+ /*! starts autoupdate mode
+ @param interval
+ time interval for sending update requests
+ */
+ setAutoUpdate: function(interval, user) {
+ interval = interval || 2000;
+
+ this._user = user || (new Date()).valueOf();
+ this._need_update = false;
+ this._loader = null;
+ this._update_busy = false;
+
+ this.attachEvent("onAfterUpdate",function(sid,action,tid,xml_node){
+ this.afterAutoUpdate(sid, action, tid, xml_node);
+ });
+ this.attachEvent("onFullSync",function(){
+ this.fullSync();
+ });
+
+ var self = this;
+ window.setInterval(function(){
+ self.loadUpdate();
+ }, interval);
+ },
+
+
+ /*! process updating request answer
+ if status == collision version is depricated
+ set flag for autoupdating immidiatly
+ */
+ afterAutoUpdate: function(sid, action, tid, xml_node) {
+ if (action == 'collision') {
+ this._need_update = true;
+ return false;
+ } else {
+ return true;
+ }
+ },
+
+
+ /*! callback function for onFillSync event
+ call update function if it's need
+ */
+ fullSync: function() {
+ if (this._need_update === true) {
+ this._need_update = false;
+ this.loadUpdate();
+ }
+ return true;
+ },
+
+
+ /*! sends query to the server and call callback function
+ */
+ getUpdates: function(url,callback){
+ if (this._update_busy)
+ return false;
+ else
+ this._update_busy = true;
+
+ this._loader = this._loader || new dtmlXMLLoaderObject(true);
+
+ this._loader.async=true;
+ this._loader.waitCall=callback;
+ this._loader.loadXML(url);
+ },
+
+
+ /*! returns xml node value
+ @param node
+ xml node
+ */
+ _v: function(node) {
+ if (node.firstChild) return node.firstChild.nodeValue;
+ return "";
+ },
+
+
+ /*! returns values array of xml nodes array
+ @param arr
+ array of xml nodes
+ */
+ _a: function(arr) {
+ var res = [];
+ for (var i=0; i < arr.length; i++) {
+ res[i]=this._v(arr[i]);
+ }
+ return res;
+ },
+
+
+ /*! loads updates and processes them
+ */
+ loadUpdate: function(){
+ var self = this;
+ var version = this.obj.getUserData(0,"version");
+ var url = this.serverProcessor+getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+version].join("&");
+ url = url.replace("editing=true&","");
+ this.getUpdates(url, function(){
+ var vers = self._loader.doXPath("//userdata");
+ self.obj.setUserData(0,"version",self._v(vers[0]));
+
+ var upds = self._loader.doXPath("//update");
+ if (upds.length){
+ self._silent_mode = true;
+
+ for (var i=0; i<upds.length; i++) {
+ var status = upds[i].getAttribute('status');
+ var id = upds[i].getAttribute('id');
+ var parent = upds[i].getAttribute('parent');
+ switch (status) {
+ case 'inserted':
+ self.callEvent("insertCallback",[upds[i], id, parent]);
+ break;
+ case 'updated':
+ self.callEvent("updateCallback",[upds[i], id, parent]);
+ break;
+ case 'deleted':
+ self.callEvent("deleteCallback",[upds[i], id, parent]);
+ break;
+ }
+ }
+
+ self._silent_mode = false;
+ }
+
+ self._update_busy = false;
+ self = null;
+ });
+ }
+
+};
+/*
+ dhx_sort[index]=direction
+ dhx_filter[index]=mask
+*/
+if (window.dhtmlXGridObject){
+ dhtmlXGridObject.prototype._init_point_connector=dhtmlXGridObject.prototype._init_point;
+ dhtmlXGridObject.prototype._init_point=function(){
+ var clear_url=function(url){
+ url=url.replace(/(\?|\&)connector[^\f]*/g,"");
+ return url+(url.indexOf("?")!=-1?"&":"?")+"connector=true"+(this.hdr.rows.length > 0 ? "&dhx_no_header=1":"");
+ };
+ var combine_urls=function(url){
+ return clear_url.call(this,url)+(this._connector_sorting||"")+(this._connector_filter||"");
+ };
+ var sorting_url=function(url,ind,dir){
+ this._connector_sorting="&dhx_sort["+ind+"]="+dir;
+ return combine_urls.call(this,url);
+ };
+ var filtering_url=function(url,inds,vals){
+ for (var i=0; i<inds.length; i++)
+ inds[i]="dhx_filter["+inds[i]+"]="+encodeURIComponent(vals[i]);
+ this._connector_filter="&"+inds.join("&");
+ return combine_urls.call(this,url);
+ };
+ this.attachEvent("onCollectValues",function(ind){
+ if (this._con_f_used[ind]){
+ if (typeof(this._con_f_used[ind]) == "object")
+ return this._con_f_used[ind];
+ else
+ return false;
+ }
+ return true;
+ });
+ this.attachEvent("onDynXLS",function(){
+ this.xmlFileUrl=combine_urls.call(this,this.xmlFileUrl);
+ return true;
+ });
+ this.attachEvent("onBeforeSorting",function(ind,type,dir){
+ if (type=="connector"){
+ var self=this;
+ this.clearAndLoad(sorting_url.call(this,this.xmlFileUrl,ind,dir),function(){
+ self.setSortImgState(true,ind,dir);
+ });
+ return false;
+ }
+ return true;
+ });
+ this.attachEvent("onFilterStart",function(a,b){
+ if (this._con_f_used.length){
+ this.clearAndLoad(filtering_url.call(this,this.xmlFileUrl,a,b));
+ return false;
+ }
+ return true;
+ });
+ this.attachEvent("onXLE",function(a,b,c,xml){
+ if (!xml) return;
+ });
+
+ if (this._init_point_connector) this._init_point_connector();
+ };
+ dhtmlXGridObject.prototype._con_f_used=[];
+ dhtmlXGridObject.prototype._in_header_connector_text_filter=function(t,i){
+ if (!this._con_f_used[i])
+ this._con_f_used[i]=1;
+ return this._in_header_text_filter(t,i);
+ };
+ dhtmlXGridObject.prototype._in_header_connector_select_filter=function(t,i){
+ if (!this._con_f_used[i])
+ this._con_f_used[i]=2;
+ return this._in_header_select_filter(t,i);
+ };
+ dhtmlXGridObject.prototype.load_connector=dhtmlXGridObject.prototype.load;
+ dhtmlXGridObject.prototype.load=function(url, call, type){
+ var data = [].concat(arguments);
+ if (!this._colls_loaded && this.cellType){
+ var ar=[];
+ for (var i=0; i < this.cellType.length; i++)
+ if (this.cellType[i].indexOf("co") === 0 || this._con_f_used[i]==2) ar.push(i);
+ if (ar.length)
+ data[0] += (data[0].indexOf("?")!=-1?"&":"?")+"connector=true&dhx_colls="+ar.join(",");
+ }
+ return this.load_connector.apply(this, data);
+ };
+ dhtmlXGridObject.prototype._parseHead_connector=dhtmlXGridObject.prototype._parseHead;
+ dhtmlXGridObject.prototype._parseHead=function(url, call, type){
+ this._parseHead_connector.apply(this,arguments);
+ if (!this._colls_loaded){
+ var cols = this.xmlLoader.doXPath("./coll_options", arguments[0]);
+ for (var i=0; i < cols.length; i++){
+ var f = cols[i].getAttribute("for");
+ var v = [];
+ var combo=null;
+ if (this.cellType[f] == "combo")
+ combo = this.getColumnCombo(f);
+ if (this.cellType[f].indexOf("co") === 0)
+ combo=this.getCombo(f);
+
+ var os = this.xmlLoader.doXPath("./item",cols[i]);
+ for (var j=0; j<os.length; j++){
+ var val=os[j].getAttribute("value");
+
+ if (combo){
+ var lab=os[j].getAttribute("label")||val;
+
+ if (combo.addOption)
+ combo.addOption([[val, lab]]);
+ else
+ combo.put(val,lab);
+
+ v[v.length]=lab;
+ } else
+ v[v.length]=val;
+ }
+ if (this._con_f_used[f*1])
+ this._con_f_used[f*1]=v;
+ }
+ this._colls_loaded=true;
+ }
+ };
+}
+
+if (window.dataProcessor){
+ dataProcessor.prototype.init_original=dataProcessor.prototype.init;
+ dataProcessor.prototype.init=function(obj){
+ this.init_original(obj);
+ obj._dataprocessor=this;
+
+ this.setTransactionMode("POST",true);
+ this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true";
+ };
+}
+dhtmlxError.catchError("LoadXML",function(a,b,c){
+ if (c[0].status) {
+ window.alert(c[0].responseText);
+ }
+});
+
+
+dhtmlxEventable(scheduler);
+
+scheduler._detachDomEvent = function(el, event, handler){
+ if (el.removeEventListener){
+ el.removeEventListener(event, handler, false);
+
+ }else if (el.detachEvent){
+ el.detachEvent("on"+event, handler);
+ }
+};
+
+scheduler._init_once = function(){
+
+ var oldSize = getWindowSize();
+ dhtmlxEvent(window,"resize",function(){
+ var newSize = getWindowSize();
+
+ // ie7-8 triggers "resize" when window's elements are resized, it messes container-autoresize extension
+ // check if it's actually resized
+ if(!equals(oldSize, newSize)){
+ window.clearTimeout(scheduler._resize_timer);
+ scheduler._resize_timer=window.setTimeout(function(){
+ if (scheduler.callEvent("onSchedulerResize",[])) {
+ scheduler.update_view();
+ scheduler.callEvent("onAfterSchedulerResize", []);
+ }
+ }, 100);
+ }
+ oldSize = newSize;
+
+ });
+ function getWindowSize(){
+ return {
+ w : window.innerWidth || document.documentElement.clientWidth,
+ h : window.innerHeight || document.documentElement.clientHeight
+ };
+ }
+ function equals(a,b){
+ return a.w == b.w && a.h == b.h;
+ }
+
+ scheduler._init_once = function(){};
+};
+scheduler.init=function(id,date,mode){
+ date=date||(scheduler._currentDate());
+ mode=mode||"week";
+
+ if(this._obj){
+ this.unset_actions();
+ this._obj.innerHTML = "";
+ }
+
+ this._obj=(typeof id == "string")?document.getElementById(id):id;
+
+ //hook for terrace skin
+ if (this._skin_init)
+ scheduler._skin_init();
+
+ scheduler.date.init();
+
+
+ this._els=[];
+ this._scroll=true;
+ this._quirks=(_isIE && document.compatMode == "BackCompat");
+ this._quirks7=(_isIE && navigator.appVersion.indexOf("MSIE 8")==-1);
+
+ this.get_elements();
+ this.init_templates();
+ this.set_actions();
+
+ this._init_once();
+ this._init_touch_events();
+
+ this.set_sizes();
+ scheduler.callEvent('onSchedulerReady', []);
+ this.setCurrentView(date,mode);
+
+};
+
+scheduler.xy={
+ min_event_height:40,
+ scale_width:50,
+ scroll_width:18,
+ scale_height:20,
+ month_scale_height:20,
+ menu_width:25,
+ margin_top:0,
+ margin_left:0,
+ editor_width:140,
+ month_head_height:22
+};
+scheduler.keys={
+ edit_save:13,
+ edit_cancel:27
+};
+scheduler.set_sizes=function(){
+ var w = this._x = this._obj.clientWidth-this.xy.margin_left;
+ var h = this._y = this._obj.clientHeight-this.xy.margin_top;
+
+ //not-table mode always has scroll - need to be fixed in future
+ var scale_x=this._table_view?0:(this.xy.scale_width+this.xy.scroll_width);
+ var scale_s=this._table_view?-1:this.xy.scale_width;
+
+ this.set_xy(this._els["dhx_cal_navline"][0],w,this.xy.nav_height,0,0);
+ this.set_xy(this._els["dhx_cal_header"][0],w-scale_x,this.xy.scale_height,scale_s,this.xy.nav_height+(this._quirks?-1:1));
+ //to support alter-skin, we need a way to alter height directly from css
+ var actual_height = this._els["dhx_cal_navline"][0].offsetHeight;
+ if (actual_height > 0) this.xy.nav_height = actual_height;
+
+ var data_y=this.xy.scale_height+this.xy.nav_height+(this._quirks?-2:0);
+ this.set_xy(this._els["dhx_cal_data"][0],w,h-(data_y+2),0,data_y+2);
+};
+scheduler.set_xy=function(node,w,h,x,y){
+ node.style.width=Math.max(0,w)+"px";
+ node.style.height=Math.max(0,h)+"px";
+ if (arguments.length>3){
+ node.style.left=x+"px";
+ node.style.top=y+"px";
+ }
+};
+scheduler.get_elements=function(){
+ //get all child elements as named hash
+ var els=this._obj.getElementsByTagName("DIV");
+ for (var i=0; i < els.length; i++){
+ var class_name=els[i].className || "";
+ var attr_value = els[i].getAttribute("name") || "";
+ if (class_name) class_name = class_name.split(" ")[0];
+ if (!this._els[class_name]) this._els[class_name]=[];
+ this._els[class_name].push(els[i]);
+
+ //check if name need to be changed
+ var label = scheduler.locale.labels[attr_value||class_name];
+ if (typeof label !== "string" && attr_value && !els[i].innerHTML)
+ label = attr_value.split("_")[0];
+ if (label)
+ els[i].innerHTML= label;
+ }
+};
+
+scheduler.unset_actions = function(){
+ for (var a in this._els)
+ if (this._click[a])
+ for (var i=0; i < this._els[a].length; i++)
+ this._els[a][i].onclick = null;
+ this._obj.onselectstart = null;
+ this._obj.onmousemove = null;
+ this._obj.onmousedown = null;
+ this._obj.onmouseup = null;
+ this._obj.ondblclick = null;
+ this._obj.oncontextmenu = null;
+};
+
+scheduler.set_actions=function(){
+ for (var a in this._els)
+ if (this._click[a])
+ for (var i=0; i < this._els[a].length; i++)
+ this._els[a][i].onclick=scheduler._click[a];
+ this._obj.onselectstart=function(e){ return false; };
+ this._obj.onmousemove=function(e){
+ if (!scheduler._temp_touch_block)
+ scheduler._on_mouse_move(e||event);
+ };
+ this._obj.onmousedown=function(e){
+ if (!scheduler._ignore_next_click)
+ scheduler._on_mouse_down(e||event);
+ };
+ this._obj.onmouseup=function(e){
+ if (!scheduler._ignore_next_click)
+ scheduler._on_mouse_up(e||event);
+ };
+ this._obj.ondblclick=function(e){
+ scheduler._on_dbl_click(e||event);
+ };
+ this._obj.oncontextmenu = function(e) {
+ var ev = e||event;
+ var src = ev.target||ev.srcElement;
+ var returnValue = scheduler.callEvent("onContextMenu", [scheduler._locate_event(src), ev]);
+ return returnValue;
+ };
+};
+scheduler.select=function(id){
+ if (this._select_id==id) return;
+ this.editStop(false);
+ this.unselect();
+ this._select_id = id;
+ this.updateEvent(id);
+};
+scheduler.unselect=function(id){
+ if (id && id!=this._select_id) return;
+ var t=this._select_id;
+ this._select_id = null;
+ if (t && this.getEvent(t)) this.updateEvent(t);
+};
+scheduler.getState=function(){
+ return {
+ mode: this._mode,
+ date: new Date(this._date),
+ min_date: new Date(this._min_date),
+ max_date: new Date(this._max_date),
+ editor_id: this._edit_id,
+ lightbox_id: this._lightbox_id,
+ new_event: this._new_event,
+ select_id: this._select_id,
+ expanded: this.expanded,
+ drag_id: this._drag_id,
+ drag_mode: this._drag_mode
+ };
+};
+scheduler._click={
+ dhx_cal_data:function(e){
+ //in case of touch disable click processing
+ if (scheduler._ignore_next_click){
+ if (e.preventDefault)
+ e.preventDefault();
+ e.cancelBubble = true;
+ scheduler._ignore_next_click = false;
+ return false;
+ }
+
+ var trg = e?e.target:event.srcElement;
+ var id = scheduler._locate_event(trg);
+
+ e = e || event;
+
+ if (!id) {
+ scheduler.callEvent("onEmptyClick",[scheduler.getActionData(e).date, e]);
+ } else {
+ if ( !scheduler.callEvent("onClick",[id,e]) || scheduler.config.readonly ) return;
+ }
+
+ if (id && scheduler.config.select) {
+
+ scheduler.select(id);
+ var mask = trg.className;
+ if (mask.indexOf("_icon")!=-1)
+ scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id);
+ } else{
+ scheduler._close_not_saved();
+ scheduler.unselect();
+ }
+ },
+ dhx_cal_prev_button:function(){
+ scheduler._click.dhx_cal_next_button(0,-1);
+ },
+ dhx_cal_next_button:function(dummy,step){
+ scheduler.setCurrentView(scheduler.date.add( //next line changes scheduler._date , but seems it has not side-effects
+ scheduler.date[scheduler._mode+"_start"](scheduler._date),(step||1),scheduler._mode));
+ },
+ dhx_cal_today_button:function(){
+ if (scheduler.callEvent("onBeforeTodayDisplayed", [])) {
+ scheduler.setCurrentView(scheduler._currentDate());
+ }
+ },
+ dhx_cal_tab:function(){
+ var name = this.getAttribute("name");
+ var mode = name.substring(0, name.search("_tab"));
+ scheduler.setCurrentView(scheduler._date,mode);
+ },
+ buttons:{
+ "delete":function(id){
+ var c = scheduler.locale.labels.confirm_deleting;
+ scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_deleting, function(){ scheduler.deleteEvent(id); });
+ },
+ edit:function(id){ scheduler.edit(id); },
+ save:function(id){ scheduler.editStop(true); },
+ details:function(id){ scheduler.showLightbox(id); },
+ cancel:function(id){ scheduler.editStop(false); }
+ }
+};
+scheduler._dhtmlx_confirm = function(message, title, callback) {
+ if (!message)
+ return callback();
+ var opts = { text: message };
+ if (title)
+ opts.title = title;
+ if (callback) {
+ opts.callback = function(result) {
+ if (result)
+ callback();
+ };
+ }
+ dhtmlx.confirm(opts);
+};
+scheduler.addEventNow=function(start,end,e){
+ var base = {};
+ if (start && start.constructor.toString().match(/object/i) !== null){
+ base = start;
+ start = null;
+ }
+
+ var d = (this.config.event_duration||this.config.time_step)*60000;
+ if (!start) start = base.start_date||Math.round((scheduler._currentDate()).valueOf()/d)*d;
+ var start_date = new Date(start);
+ if (!end){
+ var start_hour = this.config.first_hour;
+ if (start_hour > start_date.getHours()){
+ start_date.setHours(start_hour);
+ start = start_date.valueOf();
+ }
+ end = start.valueOf()+d;
+ }
+ var end_date = new Date(end);
+
+ // scheduler.addEventNow(new Date(), new Date()) + collision though get_visible events defect (such event was not retrieved)
+ if(start_date.valueOf() == end_date.valueOf())
+ end_date.setTime(end_date.valueOf()+d);
+
+ base.start_date = base.start_date||start_date;
+ base.end_date = base.end_date||end_date;
+ base.text = base.text||this.locale.labels.new_event;
+ base.id = this._drag_id = this.uid();
+ this._drag_mode="new-size";
+
+ this._loading=true;
+ this.addEvent(base);
+ this.callEvent("onEventCreated",[this._drag_id,e]);
+ this._loading=false;
+
+ this._drag_event={}; //dummy , to trigger correct event updating logic
+ this._on_mouse_up(e);
+};
+scheduler._on_dbl_click=function(e,src){
+ src = src||(e.target||e.srcElement);
+ if (this.config.readonly) return;
+ var name = (src.className||"").split(" ")[0];
+ switch(name){
+ case "dhx_scale_holder":
+ case "dhx_scale_holder_now":
+ case "dhx_month_body":
+ case "dhx_wa_day_data":
+ if (!scheduler.config.dblclick_create) break;
+ this.addEventNow(this.getActionData(e).date,null,e);
+ break;
+ case "dhx_cal_event":
+ case "dhx_wa_ev_body":
+ case "dhx_agenda_line":
+ case "dhx_grid_event":
+ case "dhx_cal_event_line":
+ case "dhx_cal_event_clear":
+ var id = this._locate_event(src);
+ if (!this.callEvent("onDblClick",[id,e])) return;
+ if (this.config.details_on_dblclick || this._table_view || !this.getEvent(id)._timed || !this.config.select)
+ this.showLightbox(id);
+ else
+ this.edit(id);
+ break;
+ case "dhx_time_block":
+ case "dhx_cal_container":
+ return;
+ default:
+ var t = this["dblclick_"+name];
+ if (t) {
+ t.call(this,e);
+ }
+ else {
+ if (src.parentNode && src != this)
+ return scheduler._on_dbl_click(e,src.parentNode);
+ }
+ break;
+ }
+};
+//column index by mouse x-coordinate
+scheduler._get_column_index = function(x_pos){
+ var column = 0;
+ if (this._cols){
+
+ var width = 0;
+ for(var i=0; i < this._cols.length && !width; i++){
+ width = this._cols[i];
+ }
+
+ if(width){
+ column = x_pos / width;
+ }else{
+ column = 0;
+ }
+
+ if (this._ignores)
+ for (var i=0; i<=column; i++)
+ if (this._ignores[i])
+ column++;
+ }
+ return column;
+};
+//transform mouse coordinates to day-time indexes of week based view
+scheduler._week_indexes_from_pos = function(pos){
+ //"get position" can be invoked before columns are loaded into the units view(e.g. by onMouseMove handler in key_nav.js)
+ if(!this._cols){
+ return pos;
+ }else{
+ var column = this._get_column_index(pos.x);
+ pos.x=Math.min(this._cols.length-1, Math.max(0,Math.ceil(column)-1));
+
+ pos.y=Math.max(0,Math.ceil(pos.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step);
+ return pos;
+ }
+};
+
+scheduler._mouse_coords=function(ev){
+ var pos;
+ var b=document.body;
+ var d = document.documentElement;
+ if (!_isIE && (ev.pageX || ev.pageY))
+ pos={x:ev.pageX, y:ev.pageY};
+ else pos={
+ x:ev.clientX + (b.scrollLeft||d.scrollLeft||0) - b.clientLeft,
+ y:ev.clientY + (b.scrollTop||d.scrollTop||0) - b.clientTop
+ };
+
+ //apply layout
+ pos.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);
+ pos.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els["dhx_cal_data"][0].scrollTop;
+ pos.ev = ev;
+
+ var handler = this["mouse_"+this._mode];
+ if (handler)
+ return handler.call(this,pos);
+
+
+ //transform to date
+ if (!this._table_view) {
+ pos = this._week_indexes_from_pos(pos);
+ } else {
+ var column = this._get_column_index(pos.x);
+ if (!this._cols || !this._colsS) // agenda/map views
+ return pos;
+ var dy=0;
+ for (dy=1; dy < this._colsS.heights.length; dy++)
+ if (this._colsS.heights[dy]>pos.y) break;
+
+ pos.y=Math.ceil( (Math.max(0, column)+Math.max(0,dy-1)*7)*24*60/this.config.time_step );
+
+ if (scheduler._drag_mode || this._mode == "month")
+ pos.y=(Math.max(0,Math.ceil(column)-1)+Math.max(0,dy-1)*7)*24*60/this.config.time_step;
+
+ //we care about ignored days only during event moving in month view
+ if (this._drag_mode == "move"){
+ if (scheduler._ignores_detected && scheduler.config.preserve_length){
+ pos._ignores = true;
+ //get real lengtn of event
+ if (!this._drag_event._event_length)
+ this._drag_event._event_length = this._get_real_event_length(this._drag_event.start_date, this._drag_event.end_date, { x_step:1, x_unit:"day"});
+ }
+ }
+
+ pos.x=0;
+ }
+ return pos;
+};
+scheduler._close_not_saved=function(){
+ if (new Date().valueOf()-(scheduler._new_event||0) > 500 && scheduler._edit_id){
+ var c=scheduler.locale.labels.confirm_closing;
+
+ scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_closing, function() { scheduler.editStop(scheduler.config.positive_closing); });
+ }
+};
+scheduler._correct_shift=function(start, back){
+ return start-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(start)).getTimezoneOffset())*60000*(back?-1:1);
+};
+scheduler._on_mouse_move=function(e){
+ if (this._drag_mode){
+ var pos=this._mouse_coords(e);
+ if (!this._drag_pos || pos.force_redraw || this._drag_pos.x!=pos.x || this._drag_pos.y!=pos.y ){
+ var start, end;
+ if (this._edit_id!=this._drag_id)
+ this._close_not_saved();
+
+ this._drag_pos=pos;
+
+ if (this._drag_mode=="create"){
+ this._close_not_saved();
+ this.unselect(this._select_id);
+ this._loading=true; //will be ignored by dataprocessor
+
+ start = this._get_date_from_pos(pos).valueOf();
+
+ if (!this._drag_start) {
+ var res = this.callEvent("onBeforeEventCreated", [e, this._drag_id]);
+ if (!res)
+ return;
+
+
+ this._drag_start=start;
+ return;
+ }
+
+ end = start;
+ if (end == this._drag_start) {
+ }
+
+ var start_date = new Date(this._drag_start);
+ var end_date = new Date(end);
+ if ( (this._mode == "day" || this._mode == "week") &&
+ (start_date.getHours() == end_date.getHours() &&
+ start_date.getMinutes() == end_date.getMinutes()) ) {
+ end_date = new Date(this._drag_start+1000);
+ }
+
+
+ this._drag_id=this.uid();
+ this.addEvent(start_date, end_date, this.locale.labels.new_event, this._drag_id, pos.fields);
+
+ this.callEvent("onEventCreated",[this._drag_id,e]);
+ this._loading=false;
+ this._drag_mode="new-size";
+
+ }
+
+ var ev=this.getEvent(this._drag_id);
+ var obj;
+
+ if (this._drag_mode=="move"){
+ start = this._min_date.valueOf()+(pos.y*this.config.time_step+pos.x*24*60 -(scheduler._move_pos_shift||0) )*60000;
+ if (!pos.custom && this._table_view) start+=this.date.time_part(ev.start_date)*1000;
+ start = this._correct_shift(start);
+
+ if (pos._ignores && this.config.preserve_length && this._table_view){
+ if (this.matrix)
+ obj = this.matrix[this._mode];
+ obj = obj || { x_step:1, x_unit:"day" };
+ end = start*1 + this._get_fictional_event_length(start, this._drag_event._event_length, obj);
+ } else
+ end = ev.end_date.valueOf()-(ev.start_date.valueOf()-start);
+ } else { // resize
+ start = ev.start_date.valueOf();
+ end = ev.end_date.valueOf();
+ if (this._table_view) {
+ var resize_date = this._min_date.valueOf()+pos.y*this.config.time_step*60000 + (pos.custom?0:24*60*60000);
+ if (this._mode == "month") {
+ resize_date = this._correct_shift(resize_date, false);
+ if( this._drag_from_start ) {
+ var day = 24*60*60000;
+ if( resize_date <= scheduler.date.date_part(new Date(end+day-1)).valueOf() ) // to get end time as 23:59:59 and then the day start
+ start = resize_date - day;
+ } else {
+ end = resize_date;
+ }
+ } else {
+ if (pos.resize_from_start)
+ start = resize_date;
+ else
+ end = resize_date;
+ }
+ } else {
+ end = this.date.date_part(new Date(ev.end_date.valueOf() - 1)).valueOf()+pos.y*this.config.time_step*60000;
+ this._els["dhx_cal_data"][0].style.cursor="s-resize";
+ if (this._mode == "week" || this._mode == "day")
+ end = this._correct_shift(end);
+ }
+ if (this._drag_mode == "new-size") {
+ if (end <= this._drag_start){
+ var shift = pos.shift||((this._table_view && !pos.custom)?24*60*60000:0);
+ start = end-(pos.shift?0:shift);
+ end = this._drag_start+(shift||(this.config.time_step*60000));
+ } else {
+ start = this._drag_start;
+ }
+ } else {
+ if (end<=start)
+ end=start+this.config.time_step*60000;
+ }
+ }
+ var new_end = new Date(end-1);
+ var new_start = new Date(start);
+ //deny drag out of visible scheduler scale in timeline view
+ if(scheduler.config.limit_drag_out &&
+ (+new_start < +scheduler._min_date || +end > +scheduler._max_date)){
+ var duration = end - new_start;
+ if(+new_start < +scheduler._min_date){
+ new_start = new Date(scheduler._min_date);
+ end = new Date(+new_start + duration);
+ }else{
+ end = new Date(scheduler._max_date);
+ new_start = new Date(+end - duration);
+ }
+ var new_end = new Date(end-1);
+ }
+
+
+
+ // fix event dates when resized to bottom of the column (day/week views)
+ if(!this._table_view &&
+ (pos.x != this._get_event_sday({start_date: new Date(end), end_date:new Date(end)}) || new Date(end).getHours() >= this.config.last_hour)){
+ var duration = end - new_start;
+ var day = this._min_date.valueOf()+(pos.x*24*60)*60000;
+ end = scheduler.date.date_part(new Date(day));
+ end.setHours(this.config.last_hour);
+ new_end = new Date(end-1);
+ if(this._drag_mode == "move"){
+ new_start = new Date(+end - duration);
+ }
+ }
+
+ //prevent out-of-borders situation for day|week view
+ if ( this._table_view || (new_end.getDate()==new_start.getDate() && new_end.getHours()<this.config.last_hour) || scheduler._allow_dnd ){
+ ev.start_date=new_start;
+ ev.end_date=new Date(end);
+ if (this.config.update_render){
+ //fix for repaint after dnd and scroll issue, #231
+ var sx = scheduler._els["dhx_cal_data"][0].scrollTop;
+ this.update_view();
+ scheduler._els["dhx_cal_data"][0].scrollTop = sx;
+ } else
+ this.updateEvent(this._drag_id);
+ }
+ if (this._table_view) {
+ this.for_rendered(this._drag_id,function(r){
+ r.className+=" dhx_in_move";
+ });
+ }
+
+ this.callEvent("onEventDrag", [this._drag_id, this._drag_mode, e]);
+ }
+ } else {
+ if (scheduler.checkEvent("onMouseMove")){
+ var id = this._locate_event(e.target||e.srcElement);
+ this.callEvent("onMouseMove",[id,e]);
+ }
+ }
+};
+scheduler._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 (this.config.readonly || this._drag_mode) return;
+ src = src||(e.target||e.srcElement);
+ var classname = src.className && src.className.split(" ")[0];
+
+ switch (classname) {
+ case "dhx_cal_event_line":
+ case "dhx_cal_event_clear":
+ if (this._table_view)
+ this._drag_mode="move"; //item in table mode
+ break;
+ case "dhx_event_move":
+ case "dhx_wa_ev_body":
+ this._drag_mode="move";
+ break;
+ case "dhx_event_resize":
+ this._drag_mode="resize";
+ if((src.className||"").indexOf("dhx_event_resize_end") < 0){
+ scheduler._drag_from_start = true;
+ }else{
+ scheduler._drag_from_start = false;
+ }
+ break;
+ case "dhx_scale_holder":
+ case "dhx_scale_holder_now":
+ case "dhx_month_body":
+ case "dhx_matrix_cell":
+ case "dhx_marked_timespan":
+ this._drag_mode="create";
+ break;
+ case "":
+ if (src.parentNode)
+ return scheduler._on_mouse_down(e,src.parentNode);
+ break;
+ default:
+ if (!scheduler.checkEvent("onMouseDown") || scheduler.callEvent("onMouseDown", [classname])) {
+ if (src.parentNode && src != this && classname != "dhx_body") {
+ return scheduler._on_mouse_down(e,src.parentNode);
+ }
+ }
+ this._drag_mode=null;
+ this._drag_id=null;
+ break;
+ }
+ if (this._drag_mode){
+ var id = this._locate_event(src);
+ if (!this.config["drag_"+this._drag_mode] || !this.callEvent("onBeforeDrag",[id, this._drag_mode, e]))
+ this._drag_mode=this._drag_id=0;
+ else {
+ this._drag_id= id;
+ this._drag_event = scheduler._lame_clone(this.getEvent(this._drag_id) || {});
+ }
+ }
+ this._drag_start=null;
+};
+
+
+scheduler._get_private_properties = function(event){
+ var fields = {};
+ for(var i in event){
+ if(i.indexOf("_") === 0){
+ fields[i] = true;
+ }
+ }
+ return fields;
+};
+scheduler._clear_temporary_properties = function(clean, flagged_event){
+ var initial = this._get_private_properties(clean);
+ var current_state = this._get_private_properties(flagged_event);
+ for(var i in current_state){
+ if(!initial[i]){
+ delete flagged_event[i];
+ }
+ }
+};
+
+
+scheduler._on_mouse_up=function(e){
+ if (e && e.button == 2 && scheduler.config.touch) return;
+ if (this._drag_mode && this._drag_id){
+ this._els["dhx_cal_data"][0].style.cursor="default";
+ //drop
+ var ev=this.getEvent(this._drag_id);
+ if (this._drag_event._dhx_changed || !this._drag_event.start_date || ev.start_date.valueOf()!=this._drag_event.start_date.valueOf() || ev.end_date.valueOf()!=this._drag_event.end_date.valueOf()){
+ var is_new=(this._drag_mode=="new-size");
+ if (!this.callEvent("onBeforeEventChanged",[ev, e, is_new, this._drag_event])){
+ if (is_new)
+ this.deleteEvent(ev.id, true);
+ else {
+ this._drag_event._dhx_changed = false;
+ this._clear_temporary_properties(ev, this._drag_event);
+ scheduler._lame_copy(ev, this._drag_event);
+ this.updateEvent(ev.id);
+ }
+ } else {
+ var drag_id = this._drag_id;
+ var mode = this._drag_mode;
+ this._drag_id = this._drag_mode = null;
+ if (is_new && this.config.edit_on_create){
+ this.unselect();
+ this._new_event=new Date();//timestamp of creation
+ //if selection disabled - force lightbox usage
+ if (this._table_view || this.config.details_on_create || !this.config.select) {
+ scheduler.callEvent("onDragEnd", [drag_id, mode, e]);
+ return this.showLightbox(drag_id);
+ }
+ this._drag_pos = true; //set flag to trigger full redraw
+ this._select_id = this._edit_id = drag_id;
+ } else {
+ if (!this._new_event)
+ this.callEvent(is_new?"onEventAdded":"onEventChanged",[drag_id,this.getEvent(drag_id)]);
+ }
+ }
+ }
+ if (this._drag_pos) this.render_view_data(); //redraw even if there is no real changes - necessary for correct positioning item after drag
+ scheduler.callEvent("onDragEnd", [this._drag_id, this._drag_mode, e]);
+ }
+ this._drag_id = null;
+ this._drag_mode=null;
+ this._drag_pos=null;
+};
+
+scheduler._trigger_dyn_loading = function(){
+ if (this._load_mode && this._load()){
+ this._render_wait = true;
+ return true;
+ }else{
+ return false;
+ }
+};
+scheduler.update_view=function(){
+ var view = this[this._mode + "_view"];
+ if(view){
+ view(true);
+ }else{
+ this._reset_scale();
+ }
+
+ if (this._trigger_dyn_loading()){
+ return true;
+ }
+ this.render_view_data();
+};
+
+scheduler.isViewExists = function(mode){
+ return !!(scheduler[mode+ "_view"] ||
+ (scheduler.date[mode+ "_start"] && scheduler.templates[mode+ "_date"] && scheduler.templates[mode+ "_scale_date"]));
+};
+
+scheduler.updateView = function(date, mode) {
+ date = date || this._date;
+ mode = mode || this._mode;
+ var dhx_cal_data = 'dhx_cal_data';
+
+ if (!this._mode)
+ this._obj.className += " dhx_scheduler_" + mode; else {
+ this._obj.className = this._obj.className.replace("dhx_scheduler_" + this._mode, "dhx_scheduler_" + mode);
+ }
+
+ var prev_scroll = (this._mode == mode && this.config.preserve_scroll) ? this._els[dhx_cal_data][0].scrollTop : false; // saving current scroll
+
+ //hide old custom view
+ if (this[this._mode + "_view"] && mode && this._mode != mode)
+ this[this._mode + "_view"](false);
+
+ this._close_not_saved();
+
+ var dhx_multi_day = 'dhx_multi_day';
+ if (this._els[dhx_multi_day]) {
+ this._els[dhx_multi_day][0].parentNode.removeChild(this._els[dhx_multi_day][0]);
+ this._els[dhx_multi_day] = null;
+ }
+
+ this._mode = mode;
+ this._date = date;
+ this._table_view = (this._mode == "month");
+
+ this._dy_shift = 0;//correction for multiday section in week/day views
+
+ var tabs = this._els["dhx_cal_tab"];
+ if(tabs){//calendar can work without view tabs
+ for (var i = 0; i < tabs.length; i++) {
+ var name = tabs[i].className;
+ name = name.replace(/ active/g, "");
+ if (tabs[i].getAttribute("name") == this._mode + "_tab")
+ name = name + " active";
+ tabs[i].className = name;
+ }
+ }
+ //show new view
+ this.update_view();
+
+ if (typeof prev_scroll == "number") // if we are updating or working with the same view scrollTop should be saved
+ this._els[dhx_cal_data][0].scrollTop = prev_scroll; // restoring original scroll
+};
+scheduler.setCurrentView = function(date, mode) {
+ if (!this.callEvent("onBeforeViewChange", [this._mode, this._date, mode || this._mode, date || this._date])) return;
+ this.updateView(date, mode);
+ this.callEvent("onViewChange", [this._mode, this._date]);
+};
+scheduler._render_x_header = function(i,left,d,h){
+ //header scale
+ var head=document.createElement("DIV");
+ head.className = "dhx_scale_bar";
+
+ if(this.templates[this._mode+"_scalex_class"]){
+ //'_scalex_class' - timeline already have similar template, use the same name
+ head.className += ' ' + this.templates[this._mode+"_scalex_class"](d);
+ }
+
+ var width = this._cols[i]-1;
+
+ if (this._mode == "month" && i === 0 && this.config.left_border) {
+ head.className += " dhx_scale_bar_border";
+ left = left+1;
+ }
+ this.set_xy(head, width, this.xy.scale_height-2, left, 0);//-1 for border
+ head.innerHTML=this.templates[this._mode+"_scale_date"](d,this._mode); //TODO - move in separate method
+ h.appendChild(head);
+};
+
+scheduler._get_columns_num = function(from, to){
+ var count = 7;
+ if (!scheduler._table_view){
+ var count_n = scheduler.date["get_"+scheduler._mode+"_end"];
+ if (count_n) to = count_n(from);
+ count = Math.round((to.valueOf()-from.valueOf())/(1000*60*60*24));
+ }
+ return count;
+};
+scheduler._get_timeunit_start = function(){
+ //start date of currently displayed time unit(day, week,...)
+ return this.date[this._mode+"_start"](new Date(this._date.valueOf()));
+};
+
+scheduler._get_view_end = function(){
+ var dd = this._get_timeunit_start();
+ var ed = scheduler.date.add(dd, 1, this._mode);
+ if (!scheduler._table_view){
+ var count_n = scheduler.date["get_"+scheduler._mode+"_end"];
+ if (count_n) ed = count_n(dd);
+ }
+ return ed;
+};
+scheduler._calc_scale_sizes = function(width, from, to){
+ //calculates number of displayed columns(days/units/month view cols) and their widths
+ var summ = width; //border delta
+ var count = this._get_columns_num(from, to);
+
+ this._process_ignores(from, count, "day", 1);
+ var realcount = count - this._ignores_detected;
+
+ for (var i=0; i<count; i++){
+ if (this._ignores[i]){
+ this._cols[i] = 0;
+ realcount++;
+ } else {
+ this._cols[i]=Math.floor(summ/(realcount-i));
+ }
+ summ-=this._cols[i];
+ this._colsS[i]=(this._cols[i-1]||0)+(this._colsS[i-1]||(this._table_view?0:this.xy.scale_width+2));
+ this._colsS['col_length'] = count;
+ }
+
+ this._colsS[count]=this._cols[count-1]+this._colsS[count-1];
+};
+scheduler._set_scale_col_size = function(div, width, left){
+ var c = this.config;
+ this.set_xy(div, width-1, c.hour_size_px*(c.last_hour-c.first_hour), left+this.xy.scale_width+1, 0);//-1 for border
+};
+
+scheduler._render_scales = function(header, data_area){
+ //render columns in week/units view, or header in month view
+ var sd = new Date(scheduler._min_date),
+ ed = new Date(scheduler._max_date),
+ today = this.date.date_part( scheduler._currentDate());
+
+ var summ = parseInt(header.style.width,10); //border delta
+ var d = new Date(this._min_date);
+ var count = this._get_columns_num(sd, ed);
+ this._calc_scale_sizes(summ, sd, ed);
+ var left=0;
+
+ header.innerHTML = "";
+ for (var i=0; i<count; i++){
+ if (!this._ignores[i]){
+ this._render_x_header(i,left,d,header);
+ }
+ if (!this._table_view){
+ var scales=document.createElement("DIV");
+ var cls = "dhx_scale_holder";
+ if (d.valueOf() == today.valueOf()) cls = "dhx_scale_holder_now";
+
+ if (this._ignores_detected && this._ignores[i]){
+ cls += " dhx_scale_ignore";
+ }
+
+ scales.className = cls+" "+this.templates.week_date_class(d,today);
+
+ this._set_scale_col_size(scales, this._cols[i], left);
+
+ data_area.appendChild(scales);
+ this.callEvent("onScaleAdd",[scales, d]);
+ }
+
+ left+=this._cols[i];
+ d=this.date.add(d,1,"day");
+ }
+};
+
+scheduler._reset_scale=function(){
+ //current mode doesn't support scales
+ //we mustn't call reset_scale for such modes, so it just to be sure
+ if (!this.templates[this._mode + "_date"]) return;
+
+ var h = this._els["dhx_cal_header"][0];
+ var data_area = this._els["dhx_cal_data"][0];
+ var c = this.config;
+
+ h.innerHTML = "";
+ //data_area.scrollTop = 0; //fix flickering in FF; makes IE8 flicker instead
+ data_area.innerHTML = "";
+
+ var str = ((c.readonly || (!c.drag_resize)) ? " dhx_resize_denied" : "") + ((c.readonly || (!c.drag_move)) ? " dhx_move_denied" : "");
+ if (str) data_area.className = "dhx_cal_data" + str;
+
+ this._scales = {};
+ this._cols = []; //store for data section
+ this._colsS = {height: 0};
+ this._dy_shift = 0;
+
+ this.set_sizes();
+
+ var d,sd,today;
+ var dd = this._get_timeunit_start(),
+ ed = scheduler._get_view_end();
+
+ d = sd = this._table_view ? scheduler.date.week_start(dd) : dd;
+
+
+ this._min_date=d;
+ this._els["dhx_cal_date"][0].innerHTML=this.templates[this._mode+"_date"](dd,ed,this._mode);
+
+ this._max_date = ed;
+ scheduler._render_scales(h, data_area);
+
+ if (this._table_view) // month view
+ this._reset_month_scale(data_area,dd,sd);
+ else{
+ this._reset_hours_scale(data_area,dd,sd);
+ if (c.multi_day) {
+ var dhx_multi_day = 'dhx_multi_day';
+
+ if(this._els[dhx_multi_day]) {
+ this._els[dhx_multi_day][0].parentNode.removeChild(this._els[dhx_multi_day][0]);
+ this._els[dhx_multi_day] = null;
+ }
+
+ var navline = this._els["dhx_cal_navline"][0];
+ var top = navline.offsetHeight + this._els["dhx_cal_header"][0].offsetHeight+1;
+
+ var c1 = document.createElement("DIV");
+ c1.className = dhx_multi_day;
+ c1.style.visibility="hidden";
+ this.set_xy(c1, this._colsS[this._colsS.col_length]+this.xy.scroll_width, 0, 0, top); // 2 extra borders, dhx_header has -1 bottom margin
+ data_area.parentNode.insertBefore(c1,data_area);
+
+ var c2 = c1.cloneNode(true);
+ c2.className = dhx_multi_day+"_icon";
+ c2.style.visibility="hidden";
+ this.set_xy(c2, this.xy.scale_width, 0, 0, top); // dhx_header has -1 bottom margin
+
+ c1.appendChild(c2);
+ this._els[dhx_multi_day]=[c1,c2];
+ this._els[dhx_multi_day][0].onclick = this._click.dhx_cal_data;
+ }
+ }
+};
+scheduler._reset_hours_scale=function(b,dd,sd){
+ var c=document.createElement("DIV");
+ c.className="dhx_scale_holder";
+
+ var date = new Date(1980,1,1,this.config.first_hour,0,0);
+ for (var i=this.config.first_hour*1; i < this.config.last_hour; i++) {
+ var cc=document.createElement("DIV");
+ cc.className="dhx_scale_hour";
+ cc.style.height=this.config.hour_size_px-(this._quirks?0:1)+"px";
+ var width = this.xy.scale_width;
+ if (this.config.left_border) {
+ width = width - 1;
+ cc.className += " dhx_scale_hour_border";
+ }
+ cc.style.width = width + "px";
+ cc.innerHTML=scheduler.templates.hour_scale(date);
+
+ c.appendChild(cc);
+ date=this.date.add(date,1,"hour");
+ }
+ b.appendChild(c);
+ if (this.config.scroll_hour)
+ b.scrollTop = this.config.hour_size_px*(this.config.scroll_hour-this.config.first_hour);
+};
+
+scheduler._currentDate = function(){
+ if(scheduler.config.now_date){
+ return new Date(scheduler.config.now_date);
+ }
+ return new Date();
+};
+
+scheduler._process_ignores = function(sd, n, mode, step, preserve){
+ this._ignores={};
+ this._ignores_detected = 0;
+ var ignore = scheduler["ignore_"+this._mode];
+
+ if (ignore){
+ var ign_date = new Date(sd);
+ for (var i=0; i<n; i++){
+ if (ignore(ign_date)){
+ this._ignores_detected += 1;
+ this._ignores[i] = true;
+ if (preserve)
+ n++;
+ }
+ ign_date = scheduler.date.add(ign_date, step, mode);
+ }
+ }
+};
+
+scheduler._render_month_scale = function(div, dd/*month start*/, sd/*view start*/ ){
+ //renders month view layout
+
+ var ed=scheduler.date.add(dd,1,"month"),
+ view_start = new Date(sd);
+ var cd = scheduler._currentDate();
+ this.date.date_part(cd);
+ this.date.date_part(sd);
+
+ var rows=Math.ceil(Math.round((ed.valueOf()-sd.valueOf()) / (60*60*24*1000) ) / 7);
+ var tdcss=[];
+
+ for (var i=0; i<=7; i++) {
+ var cell_width = ((this._cols[i]||0)-1);
+ if (i === 0 && this.config.left_border) {
+ cell_width = cell_width - 1;
+ }
+ tdcss[i]=" style='width:"+cell_width+"px;";
+ }
+
+ function getCellHeight(row){
+ var h = scheduler._colsS.height;
+ if(scheduler._colsS.heights[row + 1] !== undefined ){
+ h = scheduler._colsS.heights[row + 1] - (scheduler._colsS.heights[row]||0);
+ }
+ return h;
+ }
+
+
+ var cellheight = 0;
+
+ var html="<table cellpadding='0' cellspacing='0'>";
+ var rendered_dates = [];
+ for (var i=0; i<rows; i++){
+ html+="<tr>";
+ var row_height = Math.max(getCellHeight(i) - scheduler.xy.month_head_height, 0);
+ for (var j=0; j<7; j++) {
+ html+="<td";
+
+ var cls = "";
+ if (sd<dd)
+ cls='dhx_before';
+ else if (sd>=ed)
+ cls='dhx_after';
+ else if (sd.valueOf()==cd.valueOf())
+ cls='dhx_now';
+
+ if (this._ignores_detected && this._ignores[j]){
+ cls += " dhx_scale_ignore";
+ }
+
+ html+=" class='"+cls+" "+this.templates.month_date_class(sd,cd)+"' >";
+ var body_class = "dhx_month_body";
+ var head_class = "dhx_month_head";
+ if (j === 0 && this.config.left_border) {
+ body_class += " dhx_month_body_border";
+ head_class += " dhx_month_head_border";
+ }
+ if (!this._ignores_detected || !this._ignores[j]){
+ html+="<div class='"+head_class+"'>"+this.templates.month_day(sd)+"</div>";
+ html+="<div class='"+body_class+"' "+tdcss[j] + ";height:"+row_height + "px;'></div></td>";
+ } else {
+ html+="<div></div><div></div>";
+ }
+ rendered_dates.push(sd);
+ var bf1 = sd.getDate();
+ sd=this.date.add(sd,1,"day");
+ if (sd.getDate() - bf1 > 1)
+ sd = new Date(sd.getFullYear(), sd.getMonth(), bf1 + 1, 12, 0);
+ }
+ html+="</tr>";
+
+ scheduler._colsS.heights[i] = cellheight;
+ cellheight += getCellHeight(i);
+ }
+ html+="</table>";
+
+ this._min_date = view_start;
+ this._max_date = sd;
+
+ div.innerHTML=html;
+
+ this._scales = {};
+ var divs = div.getElementsByTagName('div');
+ for (var i=0; i<rendered_dates.length; i++) { // [header, body, header, body, ...]
+ var div = divs[(i*2)+1];
+ var date = rendered_dates[i];
+ this._scales[+date] = div;
+ }
+ for (var i=0; i<rendered_dates.length; i++) {
+ var date = rendered_dates[i];
+ this.callEvent("onScaleAdd", [this._scales[+date], date]);
+ }
+
+
+
+ return this._max_date;
+};
+
+scheduler._reset_month_scale=function(b,dd,sd){
+ //recalculates rows height and redraws month layout
+ var ed=scheduler.date.add(dd,1,"month");
+
+ //trim time part for comparation reasons
+ var cd = scheduler._currentDate();
+ this.date.date_part(cd);
+ this.date.date_part(sd);
+
+ var rows=Math.ceil(Math.round((ed.valueOf()-sd.valueOf()) / (60*60*24*1000) ) / 7);
+
+ var height = (Math.floor(b.clientHeight/rows) - this.xy.month_head_height);
+
+ this._colsS.height = height + this.xy.month_head_height;
+ this._colsS.heights = [];
+
+ return scheduler._render_month_scale(b, dd, sd);
+
+};
+scheduler.getLabel = function(property, key) {
+ var sections = this.config.lightbox.sections;
+ for (var i=0; i<sections.length; i++) {
+ if(sections[i].map_to == property) {
+ var options = sections[i].options;
+ for (var j=0; j<options.length; j++) {
+ if(options[j].key == key) {
+ return options[j].label;
+ }
+ }
+ }
+ }
+ return "";
+};
+scheduler.updateCollection = function(list_name, collection) {
+ var list = scheduler.serverList(list_name);
+ if (!list) return false;
+ list.splice(0, list.length);
+ list.push.apply(list, collection || []);
+ scheduler.callEvent("onOptionsLoad", []);
+ scheduler.resetLightbox();
+ return true;
+};
+scheduler._lame_clone = function(object, cache) {
+ var i, t, result; // iterator, types array, result
+
+ cache = cache || [];
+
+ for (i=0; i<cache.length; i+=2)
+ if(object === cache[i])
+ return cache[i+1];
+
+ if (object && typeof object == "object") {
+ result = {};
+ t = [Array,Date,Number,String,Boolean];
+ for (i=0; i<t.length; i++) {
+ if (object instanceof t[i])
+ result = i ? new t[i](object) : new t[i](); // first one is array
+ }
+ cache.push(object, result);
+ for (i in object) {
+ if (Object.prototype.hasOwnProperty.apply(object, [i]))
+ result[i] = scheduler._lame_clone(object[i], cache);
+ }
+ }
+ return result || object;
+};
+scheduler._lame_copy = function(target, source) {
+ for (var key in source) {
+ if (source.hasOwnProperty(key)) {
+ target[key] = source[key];
+ }
+ }
+ return target;
+};
+scheduler._get_date_from_pos = function(pos) {
+ var start=this._min_date.valueOf()+(pos.y*this.config.time_step+(this._table_view?0:pos.x)*24*60)*60000;
+ return new Date(this._correct_shift(start));
+};
+// n_ev - native event
+scheduler.getActionData = function(n_ev) {
+ var pos = this._mouse_coords(n_ev);
+ return {
+ date:this._get_date_from_pos(pos),
+ section:pos.section
+ };
+};
+scheduler._focus = function(node, select){
+ if (node && node.focus){
+ if (this.config.touch){
+ window.setTimeout(function(){
+ node.focus();
+ },100);
+ } else {
+ if (select && node.select) node.select();
+ node.focus();
+ }
+ }
+};
+
+//non-linear scales
+scheduler._get_real_event_length=function(sd, fd, obj){
+ var ev_length = fd -sd;
+ var hours = (obj._start_correction + obj._end_correction)||0;
+ var ignore = this["ignore_"+this._mode];
+
+ var start_slot = 0,
+ end_slot;
+ if (obj.render){
+ start_slot = this._get_date_index(obj, sd);
+ end_slot = this._get_date_index(obj, fd);
+ } else{
+ end_slot = Math.round(ev_length/60/60/1000/24);
+ }
+
+ while (start_slot < end_slot){
+ var check = scheduler.date.add(fd, -obj.x_step, obj.x_unit);
+ if (ignore && ignore(fd))
+ ev_length -= (fd-check);
+ else
+ ev_length -= hours;
+
+ fd = check;
+ end_slot--;
+ }
+ return ev_length;
+};
+scheduler._get_fictional_event_length=function(end_date, ev_length, obj, back){
+ var sd = new Date(end_date);
+ var dir = back ? -1 : 1;
+
+ //get difference caused by first|last hour
+ if (obj._start_correction || obj._end_correction){
+ var today;
+ if (back)
+ today = (sd.getHours()*60+sd.getMinutes()) - (obj.first_hour||0)*60;
+ else
+ today = (obj.last_hour||0)*60 - (sd.getHours()*60+sd.getMinutes());
+ var per_day = (obj.last_hour - obj.first_hour)*60;
+ var days = Math.ceil( (ev_length / (60*1000) - today ) / per_day);
+ ev_length += days * (24*60 - per_day) * 60 * 1000;
+ }
+
+ var fd = new Date(end_date*1+ev_length*dir);
+ var ignore = this["ignore_"+this._mode];
+
+ var start_slot = 0,
+ end_slot;
+ if (obj.render){
+ start_slot = this._get_date_index(obj, sd);
+ end_slot = this._get_date_index(obj, fd);
+ } else{
+ end_slot = Math.round(ev_length/60/60/1000/24);
+ }
+
+ while (start_slot*dir <= end_slot*dir){
+ var check = scheduler.date.add(sd, obj.x_step*dir, obj.x_unit);
+ if (ignore && ignore(sd)){
+ ev_length += (check-sd)*dir;
+ end_slot += dir;
+ }
+
+ sd = check;
+ start_slot+=dir;
+ }
+
+ return ev_length;
+};
+
+scheduler._get_section_view = function(){
+ if(this.matrix && this.matrix[this._mode]){
+ return this.matrix[this._mode];
+ }else if(this._props && this._props[this._mode]){
+ return this._props[this._mode];
+ }
+ return null;
+};
+
+scheduler._get_section_property = function(){
+ if(this.matrix && this.matrix[this._mode]){
+ return this.matrix[this._mode].y_property;
+ }else if(this._props && this._props[this._mode]){
+ return this._props[this._mode].map_to;
+ }
+ return null;
+};
+
+scheduler._is_initialized = function(){
+ var state = this.getState();
+ return (this._obj && state.date && state.mode);
+};
+scheduler._is_lightbox_open = function(){
+ var state = this.getState();
+ return state.lightbox_id !== null && state.lightbox_id !== undefined;
+};
+scheduler.date={
+ init:function(){
+ var s = scheduler.locale.date.month_short;
+ var t = scheduler.locale.date.month_short_hash = {};
+ for (var i = 0; i < s.length; i++)
+ t[s[i]]=i;
+
+ var s = scheduler.locale.date.month_full;
+ var t = scheduler.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() !== 0)
+ 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 (scheduler.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);
+ },
+ _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){
+ var ndate=new Date(date.valueOf());
+ switch(mode){
+ case "day":
+ ndate = scheduler.date._add_days(ndate, inc);
+ break;
+ case "week":
+ ndate = scheduler.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": ndate.setHours(ndate.getHours()+inc); break;
+ case "minute": ndate.setMinutes(ndate.getMinutes()+inc); break;
+ default:
+ return scheduler.date["add_"+mode](date,inc,mode);
+ }
+ return ndate;
+ },
+ 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 "\"+scheduler.date.to_fixed(date.getDate())+\"";
+ case "%m": return "\"+scheduler.date.to_fixed((date.getMonth()+1))+\"";
+ case "%j": return "\"+date.getDate()+\"";
+ case "%n": return "\"+(date.getMonth()+1)+\"";
+ case "%y": return "\"+scheduler.date.to_fixed(date.getFullYear()%100)+\"";
+ case "%Y": return "\"+date.getFullYear()+\"";
+ case "%D": return "\"+scheduler.locale.date.day_short[date.getDay()]+\"";
+ case "%l": return "\"+scheduler.locale.date.day_full[date.getDay()]+\"";
+ case "%M": return "\"+scheduler.locale.date.month_short[date.getMonth()]+\"";
+ case "%F": return "\"+scheduler.locale.date.month_full[date.getMonth()]+\"";
+ case "%h": return "\"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+\"";
+ case "%g": return "\"+((date.getHours()+11)%12+1)+\"";
+ case "%G": return "\"+date.getHours()+\"";
+ case "%H": return "\"+scheduler.date.to_fixed(date.getHours())+\"";
+ case "%i": return "\"+scheduler.date.to_fixed(date.getMinutes())+\"";
+ case "%a": return "\"+(date.getHours()>11?\"pm\":\"am\")+\"";
+ case "%A": return "\"+(date.getHours()>11?\"PM\":\"AM\")+\"";
+ case "%s": return "\"+scheduler.date.to_fixed(date.getSeconds())+\"";
+ case "%W": return "\"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+\"";
+ default: return 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; i<mask.length; i++){
+ switch(mask[i]){
+ case "%j":
+ case "%d": splt+="set[2]=temp["+i+"]||1;";
+ break;
+ case "%n":
+ case "%m": splt+="set[1]=(temp["+i+"]||1)-1;";
+ break;
+ case "%y": splt+="set[0]=temp["+i+"]*1+(temp["+i+"]>50?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]=scheduler.locale.date.month_short_hash[temp["+i+"]]||0;";
+ break;
+ case "%F": splt+="set[1]=scheduler.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(this.convert_to_utc(ndate));
+ },
+ convert_to_utc: function(date) {
+ return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
+ }
+};
+scheduler.locale = {
+ date:{
+ month_full:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ month_short:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ day_full:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ day_short:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
+ },
+ labels:{
+ dhx_cal_today_button:"Today",
+ day_tab:"Day",
+ week_tab:"Week",
+ month_tab:"Month",
+ new_event:"New event",
+ icon_save:"Save",
+ icon_cancel:"Cancel",
+ icon_details:"Details",
+ icon_edit:"Edit",
+ icon_delete:"Delete",
+ confirm_closing:"",//Your changes will be lost, are your sure ?
+ confirm_deleting:"Event will be deleted permanently, are you sure?",
+ section_description:"Description",
+ section_time:"Time period",
+ full_day:"Full day",
+
+ /*recurring events*/
+ confirm_recurring:"Do you want to edit the whole set of repeated events?",
+ section_recurring:"Repeat event",
+ button_recurring:"Disabled",
+ button_recurring_open:"Enabled",
+ button_edit_series: "Edit series",
+ button_edit_occurrence: "Edit occurrence",
+
+ /*agenda view extension*/
+ agenda_tab:"Agenda",
+ date:"Date",
+ description:"Description",
+
+ /*year view extension*/
+ year_tab:"Year",
+
+ /* week agenda extension */
+ week_agenda_tab: "Agenda",
+
+ /*grid view extension*/
+ grid_tab: "Grid",
+
+ /* touch tooltip*/
+ drag_to_create:"Drag to create",
+ drag_to_move:"Drag to move",
+
+ /* dhtmlx message default buttons */
+ message_ok:"OK",
+ message_cancel:"Cancel"
+ }
+};
+
+
+/*
+%e Day of the month without leading zeros (01..31)
+%d Day of the month, 2 digits with leading zeros (01..31)
+%j Day of the year, 3 digits with leading zeros (001..366)
+%a A textual representation of a day, two letters
+%W A full textual representation of the day of the week
+
+%c Numeric representation of a month, without leading zeros (0..12)
+%m Numeric representation of a month, with leading zeros (00..12)
+%b A short textual representation of a month, three letters (Jan..Dec)
+%M A full textual representation of a month, such as January or March (January..December)
+
+%y A two digit representation of a year (93..03)
+%Y A full numeric representation of a year, 4 digits (1993..03)
+*/
+
+scheduler.config={
+ default_date: "%j %M %Y",
+ month_date: "%F %Y",
+ load_date: "%Y-%m-%d",
+ week_date: "%l",
+ day_date: "%D, %F %j",
+ hour_date: "%H:%i",
+ month_day: "%d",
+ xml_date: "%m/%d/%Y %H:%i",
+ api_date: "%d-%m-%Y %H:%i",
+ preserve_length:true,
+ time_step: 5,
+
+ start_on_monday: 1,
+ first_hour: 0,
+ last_hour: 24,
+ readonly: false,
+ drag_resize: 1,
+ drag_move: 1,
+ drag_create: 1,
+ dblclick_create: 1,
+ edit_on_create: 1,
+ details_on_create: 0,
+ resize_month_events:false,
+ resize_month_timed:false,
+
+ cascade_event_display: false,
+ cascade_event_count: 4,
+ cascade_event_margin: 30,
+
+ multi_day:true,
+ multi_day_height_limit: 0,
+
+ drag_lightbox: true,
+ preserve_scroll: true,
+ select: true,
+
+ server_utc: false,
+ touch:true,
+ touch_tip:true,
+ touch_drag:500,
+ quick_info_detached:true,
+
+ positive_closing: false,
+
+ drag_highlight: true,
+ limit_drag_out: false,
+ icons_edit: ["icon_save", "icon_cancel"],
+ icons_select: ["icon_details", "icon_edit", "icon_delete"],
+ buttons_left: ["dhx_save_btn", "dhx_cancel_btn"],
+ buttons_right: ["dhx_delete_btn"],
+ lightbox: {
+ sections: [
+ {name: "description", height: 200, map_to: "text", type: "textarea", focus: true},
+ {name: "time", height: 72, type: "time", map_to: "auto"}
+ ]
+ },
+ highlight_displayed_event: true,
+ left_border: false
+};
+scheduler.templates={};
+scheduler.init_templates=function(){
+ var labels = scheduler.locale.labels;
+ labels.dhx_save_btn = labels.icon_save;
+ labels.dhx_cancel_btn = labels.icon_cancel;
+ labels.dhx_delete_btn = labels.icon_delete;
+
+
+ var d=scheduler.date.date_to_str;
+ var c=scheduler.config;
+ var f = function(a,b){
+ for (var c in b)
+ if (!a[c]) a[c]=b[c];
+ };
+ f(scheduler.templates,{
+ day_date:d(c.default_date),
+ month_date:d(c.month_date),
+ week_date:function(d1,d2){
+ return scheduler.templates.day_date(d1)+" &ndash; "+scheduler.templates.day_date(scheduler.date.add(d2,-1,"day"));
+ },
+ day_scale_date:d(c.default_date),
+ month_scale_date:d(c.week_date),
+ week_scale_date:d(c.day_date),
+ hour_scale:d(c.hour_date),
+ time_picker:d(c.hour_date),
+ event_date:d(c.hour_date),
+ month_day:d(c.month_day),
+ xml_date:scheduler.date.str_to_date(c.xml_date,c.server_utc),
+ load_format:d(c.load_date,c.server_utc),
+ xml_format:d(c.xml_date,c.server_utc),
+ api_date:scheduler.date.str_to_date(c.api_date),
+ event_header:function(start,end,ev){
+ return scheduler.templates.event_date(start)+" - "+scheduler.templates.event_date(end);
+ },
+ event_text:function(start,end,ev){
+ return ev.text;
+ },
+ event_class:function(start,end,ev){
+ return "";
+ },
+ month_date_class:function(d){
+ return "";
+ },
+ week_date_class:function(d){
+ return "";
+ },
+ event_bar_date:function(start,end,ev){
+ return scheduler.templates.event_date(start)+" ";
+ },
+ event_bar_text:function(start,end,ev){
+ return ev.text;
+ },
+ month_events_link : function(date, count){
+ return "<a>View more("+count+" events)</a>";
+ },
+ drag_marker_class : function(start, end, event){
+ return "";
+ },
+ drag_marker_content : function(start, end, event){
+ return "";
+ }
+ });
+ this.callEvent("onTemplatesReady",[]);
+};
+
+
+
+scheduler.uid = function() {
+ if (!this._seed) this._seed = (new Date()).valueOf();
+ return this._seed++;
+};
+scheduler._events = {};
+scheduler.clearAll = function() {
+ this._events = {};
+ this._loaded = {};
+ this.clear_view();
+ this.callEvent("onClearAll", []);
+};
+scheduler.addEvent = function(start_date, end_date, text, id, extra_data) {
+ if (!arguments.length)
+ return this.addEventNow();
+ var ev = start_date;
+ if (arguments.length != 1) {
+ ev = extra_data || {};
+ ev.start_date = start_date;
+ ev.end_date = end_date;
+ ev.text = text;
+ ev.id = id;
+ }
+ ev.id = ev.id || scheduler.uid();
+ ev.text = ev.text || "";
+
+ if (typeof ev.start_date == "string") ev.start_date = this.templates.api_date(ev.start_date);
+ if (typeof ev.end_date == "string") ev.end_date = this.templates.api_date(ev.end_date);
+
+ var d = (this.config.event_duration || this.config.time_step) * 60000;
+ if (ev.start_date.valueOf() == ev.end_date.valueOf())
+ ev.end_date.setTime(ev.end_date.valueOf() + d);
+
+ ev._timed = this.isOneDayEvent(ev);
+
+ var is_new = !this._events[ev.id];
+ this._events[ev.id] = ev;
+ this.event_updated(ev);
+ if (!this._loading)
+ this.callEvent(is_new ? "onEventAdded" : "onEventChanged", [ev.id, ev]);
+ return ev.id;
+};
+scheduler.deleteEvent = function(id, silent) {
+ var ev = this._events[id];
+ if (!silent && (!this.callEvent("onBeforeEventDelete", [id, ev]) || !this.callEvent("onConfirmedBeforeEventDelete", [id, ev])))
+ return;
+ if (ev) {
+ this._select_id = null;
+ delete this._events[id];
+ this.event_updated(ev);
+ }
+
+ this.callEvent("onEventDeleted", [id, ev]);
+};
+scheduler.getEvent = function(id) {
+ return this._events[id];
+};
+scheduler.setEvent = function(id, hash) {
+ if(!hash.id)
+ hash.id = id;
+
+ this._events[id] = hash;
+};
+scheduler.for_rendered = function(id, method) {
+ for (var i = this._rendered.length - 1; i >= 0; i--)
+ if (this._rendered[i].getAttribute("event_id") == id)
+ method(this._rendered[i], i);
+};
+scheduler.changeEventId = function(id, new_id) {
+ if (id == new_id) return;
+ var ev = this._events[id];
+ if (ev) {
+ ev.id = new_id;
+ this._events[new_id] = ev;
+ delete this._events[id];
+ }
+ this.for_rendered(id, function(r) {
+ r.setAttribute("event_id", new_id);
+ });
+ if (this._select_id == id) this._select_id = new_id;
+ if (this._edit_id == id) this._edit_id = new_id;
+ //if (this._drag_id==id) this._drag_id=new_id;
+ this.callEvent("onEventIdChange", [id, new_id]);
+};
+
+(function() {
+ var attrs = ["text", "Text", "start_date", "StartDate", "end_date", "EndDate"];
+ var create_getter = function(name) {
+ return function(id) { return (scheduler.getEvent(id))[name]; };
+ };
+ var create_setter = function(name) {
+ return function(id, value) {
+ var ev = scheduler.getEvent(id);
+ ev[name] = value;
+ ev._changed = true;
+ ev._timed = this.isOneDayEvent(ev);
+ scheduler.event_updated(ev, true);
+ };
+ };
+ for (var i = 0; i < attrs.length; i += 2) {
+ scheduler["getEvent" + attrs[i + 1]] = create_getter(attrs[i]);
+ scheduler["setEvent" + attrs[i + 1]] = create_setter(attrs[i]);
+ }
+})();
+
+scheduler.event_updated = function(ev, force) {
+ if (this.is_visible_events(ev))
+ this.render_view_data();
+ else
+ this.clear_event(ev.id);
+};
+scheduler.is_visible_events = function(ev) {
+ //if in displayed dates
+ var in_visible_range = (ev.start_date < this._max_date && this._min_date < ev.end_date);
+
+ if(in_visible_range){
+ //end dates are not between last/first hours
+ var end_dates_visible = (ev.end_date.getHours() >= this.config.first_hour && ev.end_date.getHours() < this.config.last_hour) ||
+ (ev.start_date.getHours() >= this.config.first_hour && ev.start_date.getHours() < this.config.last_hour);
+
+ if(end_dates_visible){
+ return true;
+ }else{
+
+ //event is bigger than area hidden between last/first hours
+ var event_duration = (ev.end_date.valueOf() - ev.start_date.valueOf()) / (1000*60*60),//hours
+ hidden_duration = 24 - (this.config.last_hour - this.config.first_hour);
+
+ return (event_duration > hidden_duration);
+
+ }
+ }else{
+ return false;
+ }
+};
+scheduler.isOneDayEvent = function(ev) {
+ var delta = ev.end_date.getDate() - ev.start_date.getDate();
+
+ if (!delta)
+ return ev.start_date.getMonth() == ev.end_date.getMonth() && ev.start_date.getFullYear() == ev.end_date.getFullYear();
+ else {
+ if (delta < 0) delta = Math.ceil((ev.end_date.valueOf() - ev.start_date.valueOf()) / (24 * 60 * 60 * 1000));
+ return (delta == 1 && !ev.end_date.getHours() && !ev.end_date.getMinutes() && (ev.start_date.getHours() || ev.start_date.getMinutes() ));
+ }
+
+};
+scheduler.get_visible_events = function(only_timed) {
+ //not the best strategy for sure
+ var stack = [];
+
+ for (var id in this._events)
+ if (this.is_visible_events(this._events[id]))
+ if (!only_timed || this._events[id]._timed)
+ if (this.filter_event(id, this._events[id]))
+ stack.push(this._events[id]);
+
+ return stack;
+};
+scheduler.filter_event = function(id, ev) {
+ var filter = this["filter_" + this._mode];
+ return (filter) ? filter(id, ev) : true;
+};
+scheduler._is_main_area_event = function(ev){
+ return !!ev._timed;
+};
+scheduler.render_view_data = function(evs, hold) {
+ if (!evs) {
+ if (this._not_render) {
+ this._render_wait = true;
+ return;
+ }
+ this._render_wait = false;
+
+ this.clear_view();
+ evs = this.get_visible_events(!(this._table_view || this.config.multi_day));
+ }
+ for(var i= 0, len = evs.length; i < len; i++){
+ this._recalculate_timed(evs[i]);
+ }
+
+ if (this.config.multi_day && !this._table_view) {
+
+ var tvs = [];
+ var tvd = [];
+ for (var i = 0; i < evs.length; i++) {
+ if (this._is_main_area_event(evs[i]))
+ tvs.push(evs[i]);
+ else
+ tvd.push(evs[i]);
+ }
+
+ // multiday events
+ this._rendered_location = this._els['dhx_multi_day'][0];
+ this._table_view = true;
+ this.render_data(tvd, hold);
+ this._table_view = false;
+
+ // normal events
+ this._rendered_location = this._els['dhx_cal_data'][0];
+ this._table_view = false;
+ this.render_data(tvs, hold);
+
+ } else {
+ this._rendered_location = this._els['dhx_cal_data'][0];
+ this.render_data(evs, hold);
+ }
+};
+
+
+scheduler._view_month_day = function(e){
+ var date = scheduler.getActionData(e).date;
+ if(!scheduler.callEvent("onViewMoreClick", [date]))
+ return;
+ scheduler.setCurrentView(date, "day");
+};
+
+scheduler._render_month_link = function(ev){
+ var parent = this._rendered_location;
+ var toRender = this._lame_clone(ev);
+
+ //render links in each cell of multiday events
+ for(var d = ev._sday; d < ev._eday; d++){
+
+ toRender._sday = d;
+ toRender._eday = d+1;
+
+ var date = scheduler.date;
+ var curr = scheduler._min_date;
+ curr = date.add(curr, toRender._sweek, "week");
+ curr = date.add(curr, toRender._sday, "day");
+ var count = scheduler.getEvents(curr, date.add(curr, 1, "day")).length;
+
+ var pos = this._get_event_bar_pos(toRender);
+ var widt = (pos.x2 - pos.x);
+
+ var el = document.createElement("div");
+ el.onclick = function(e){scheduler._view_month_day(e||event);};
+ el.className = "dhx_month_link";
+ el.style.top = pos.y + "px";
+ el.style.left = pos.x + "px";
+ el.style.width = widt + "px";
+ el.innerHTML = scheduler.templates.month_events_link(curr, count);
+ this._rendered.push(el);
+
+ parent.appendChild(el);
+ }
+};
+
+scheduler._recalculate_timed = function(id){
+ if(!id) return;
+ var ev;
+ if(typeof(id) != "object")
+ ev = this._events[id];
+ else
+ ev = id;
+ if(!ev) return;
+ ev._timed = scheduler.isOneDayEvent(ev);
+};
+scheduler.attachEvent("onEventChanged", scheduler._recalculate_timed);
+scheduler.attachEvent("onEventAdded", scheduler._recalculate_timed);
+
+scheduler.render_data = function(evs, hold) {
+ evs = this._pre_render_events(evs, hold);
+
+ for (var i = 0; i < evs.length; i++)
+ if (this._table_view){
+ if(scheduler._mode != 'month'){
+ this.render_event_bar(evs[i]);//may be multiday section on other views
+ }else{
+
+ var max_evs = scheduler.config.max_month_events;
+ if(max_evs !== max_evs*1 || evs[i]._sorder < max_evs){
+ //of max number events per month cell is set and event can be rendered
+ this.render_event_bar(evs[i]);
+ }else if(max_evs !== undefined && evs[i]._sorder == max_evs){
+ //render 'view more' links
+ scheduler._render_month_link(evs[i]);
+ }else{
+ //do not render events with ordinal number > maximum events per cell
+ }
+ }
+
+
+
+ }else
+ this.render_event(evs[i]);
+};
+scheduler._pre_render_events = function(evs, hold) {
+ var hb = this.xy.bar_height;
+ var h_old = this._colsS.heights;
+ var h = this._colsS.heights = [0, 0, 0, 0, 0, 0, 0];
+ var data = this._els["dhx_cal_data"][0];
+
+ if (!this._table_view)
+ evs = this._pre_render_events_line(evs, hold); //ignore long events for now
+ else
+ evs = this._pre_render_events_table(evs, hold);
+
+ if (this._table_view) {
+ if (hold)
+ this._colsS.heights = h_old;
+ else {
+ var evl = data.firstChild;
+ if (evl.rows) {
+ for (var i = 0; i < evl.rows.length; i++) {
+ h[i]++;
+ var cellHeight = this._colsS.height - this.xy.month_head_height;
+ if ((h[i]) * hb > cellHeight) { // 22 - height of cell's header
+ //we have overflow, update heights
+ var cells = evl.rows[i].cells;
+ var cHeight = cellHeight;
+ if(this.config.max_month_events*1 !== this.config.max_month_events || h[i] <= this.config.max_month_events){
+ cHeight = h[i] * hb;
+ }else if( (this.config.max_month_events + 1) * hb > cellHeight){
+ cHeight = (this.config.max_month_events + 1) * hb;
+ }
+
+ for (var j = 0; j < cells.length; j++) {
+ cells[j].childNodes[1].style.height = cHeight + "px";
+ }
+ h[i] = (h[i - 1] || 0) + cells[0].offsetHeight;
+ }
+ h[i] = (h[i - 1] || 0) + evl.rows[i].cells[0].offsetHeight;
+ }
+ h.unshift(0);
+ if (evl.parentNode.offsetHeight < evl.parentNode.scrollHeight && !scheduler._colsS.scroll_fix && scheduler.xy.scroll_width) {
+
+ var scale_settings = scheduler._colsS,
+ sum_width = scale_settings[scale_settings.col_length],
+ row_heights = scale_settings.heights.slice();
+
+ sum_width -= (scheduler.xy.scroll_width || 0);
+ this._calc_scale_sizes(sum_width, this._min_date, this._max_date);
+ scheduler._colsS.heights = row_heights;
+
+ this.set_xy(this._els["dhx_cal_header"][0], sum_width, this.xy.scale_height);
+ scheduler._render_scales(this._els["dhx_cal_header"][0]);
+ scheduler._render_month_scale(this._els["dhx_cal_data"][0], this._get_timeunit_start(), this._min_date);
+
+ scale_settings.scroll_fix = true;
+ }
+ } else {
+ if (!evs.length && this._els["dhx_multi_day"][0].style.visibility == "visible")
+ h[0] = -1;
+ if (evs.length || h[0] == -1) {
+ //shift days to have space for multiday events
+ var childs = evl.parentNode.childNodes;
+
+ // +1 so multiday events would have 2px from top and 2px from bottom by default
+ var full_multi_day_height = (h[0] + 1) * hb + 1;
+
+ var used_multi_day_height = full_multi_day_height;
+ var used_multi_day_height_css = full_multi_day_height + "px";
+ if (this.config.multi_day_height_limit) {
+ used_multi_day_height = Math.min(full_multi_day_height, this.config.multi_day_height_limit) ;
+ used_multi_day_height_css = used_multi_day_height + "px";
+ }
+
+ data.style.top = (this._els["dhx_cal_navline"][0].offsetHeight + this._els["dhx_cal_header"][0].offsetHeight + used_multi_day_height ) + 'px';
+ data.style.height = (this._obj.offsetHeight - parseInt(data.style.top, 10) - (this.xy.margin_top || 0)) + 'px';
+
+ var multi_day_section = this._els["dhx_multi_day"][0];
+ multi_day_section.style.height = used_multi_day_height_css;
+ multi_day_section.style.visibility = (h[0] == -1 ? "hidden" : "visible");
+
+ // icon
+ var multi_day_icon = this._els["dhx_multi_day"][1];
+ multi_day_icon.style.height = used_multi_day_height_css;
+ multi_day_icon.style.visibility = (h[0] == -1 ? "hidden" : "visible");
+ multi_day_icon.className = h[0] ? "dhx_multi_day_icon" : "dhx_multi_day_icon_small";
+ this._dy_shift = (h[0] + 1) * hb;
+ h[0] = 0;
+
+ if (used_multi_day_height != full_multi_day_height) {
+ data.style.top = (parseInt(data.style.top) + 2) + "px";
+
+ multi_day_section.style.overflowY = "auto";
+ multi_day_section.style.width = (parseInt(multi_day_section.style.width) - 2) + "px";
+
+ multi_day_icon.style.position = "fixed";
+ multi_day_icon.style.top = "";
+ multi_day_icon.style.left = "";
+ }
+ }
+ }
+ }
+ }
+
+ return evs;
+};
+scheduler._get_event_sday = function(ev) {
+ return Math.floor((ev.start_date.valueOf() - this._min_date.valueOf()) / (24 * 60 * 60 * 1000));
+};
+scheduler._get_event_mapped_end_date = function(ev) {
+ var end_date = ev.end_date;
+ if (this.config.separate_short_events) {
+ var ev_duration = (ev.end_date - ev.start_date) / 60000; // minutes
+ if (ev_duration < this._min_mapped_duration) {
+ end_date = this.date.add(end_date, this._min_mapped_duration - ev_duration, "minute");
+ }
+ }
+ return end_date;
+};
+scheduler._pre_render_events_line = function(evs, hold){
+ evs.sort(function(a, b) {
+ if (a.start_date.valueOf() == b.start_date.valueOf())
+ return a.id > b.id ? 1 : -1;
+ return a.start_date > b.start_date ? 1 : -1;
+ });
+ var days = []; //events by weeks
+ var evs_originals = [];
+
+ this._min_mapped_duration = Math.ceil(this.xy.min_event_height * 60 / this.config.hour_size_px); // values could change along the way
+
+ for (var i = 0; i < evs.length; i++) {
+ var ev = evs[i];
+
+ //check date overflow
+ var sd = ev.start_date;
+ var ed = ev.end_date;
+ //check scale overflow
+ var sh = sd.getHours();
+ var eh = ed.getHours();
+
+ ev._sday = this._get_event_sday(ev); // sday based on event start_date
+ if (this._ignores[ev._sday]){
+ //ignore event
+ evs.splice(i,1);
+ i--;
+ continue;
+ }
+
+ if (!days[ev._sday]) days[ev._sday] = [];
+
+ if (!hold) {
+ ev._inner = false;
+
+ var stack = days[ev._sday];
+
+ while (stack.length) {
+ var t_ev = stack[stack.length - 1];
+ var t_end_date = this._get_event_mapped_end_date(t_ev);
+ if (t_end_date.valueOf() <= ev.start_date.valueOf()) {
+ stack.splice(stack.length - 1, 1);
+ } else {
+ break;
+ }
+ }
+ var slot_index = stack.length;
+ var sorderSet = false;
+ for (var j = 0; j < stack.length; j++) {
+ var t_ev = stack[j];
+ var t_end_date = this._get_event_mapped_end_date(t_ev);
+ if (t_end_date.valueOf() <= ev.start_date.valueOf()) {
+ sorderSet = true;
+ ev._sorder = t_ev._sorder;
+ slot_index = j;
+ ev._inner = true;
+ break;
+ }
+ }
+
+ if (stack.length)
+ stack[stack.length - 1]._inner = true;
+
+ if (!sorderSet) {
+ if (stack.length) {
+ if (stack.length <= stack[stack.length - 1]._sorder) {
+ if (!stack[stack.length - 1]._sorder)
+ ev._sorder = 0;
+ else
+ for (j = 0; j < stack.length; j++) {
+ var _is_sorder = false;
+ for (var k = 0; k < stack.length; k++) {
+ if (stack[k]._sorder == j) {
+ _is_sorder = true;
+ break;
+ }
+ }
+ if (!_is_sorder) {
+ ev._sorder = j;
+ break;
+ }
+ }
+ ev._inner = true;
+ } else {
+ var _max_sorder = stack[0]._sorder;
+ for (j = 1; j < stack.length; j++) {
+ if (stack[j]._sorder > _max_sorder)
+ _max_sorder = stack[j]._sorder;
+ }
+ ev._sorder = _max_sorder + 1;
+ ev._inner = false;
+ }
+
+ } else
+ ev._sorder = 0;
+ }
+
+ stack.splice(slot_index, slot_index == stack.length ? 0 : 1, ev);
+
+ if (stack.length > (stack.max_count || 0)) {
+ stack.max_count = stack.length;
+ ev._count = stack.length;
+ } else {
+ ev._count = (ev._count) ? ev._count : 1;
+ }
+ }
+
+ if (sh < this.config.first_hour || eh >= this.config.last_hour) {
+ // Need to create copy of event as we will be changing it's start/end date
+ // e.g. first_hour = 11 and event.start_date hours = 9. Need to preserve that info
+ evs_originals.push(ev);
+ evs[i] = ev = this._copy_event(ev);
+
+ if (sh < this.config.first_hour) {
+ ev.start_date.setHours(this.config.first_hour);
+ ev.start_date.setMinutes(0);
+ }
+ if (eh >= this.config.last_hour) {
+ ev.end_date.setMinutes(0);
+ ev.end_date.setHours(this.config.last_hour);
+ }
+
+ if (ev.start_date > ev.end_date || sh == this.config.last_hour) {
+ evs.splice(i, 1);
+ i--;
+ continue;
+ }
+ }
+ }
+ if (!hold) {
+ for (var i = 0; i < evs.length; i++) {
+ evs[i]._count = days[evs[i]._sday].max_count;
+ }
+ for (var i = 0; i < evs_originals.length; i++)
+ evs_originals[i]._count = days[evs_originals[i]._sday].max_count;
+ }
+
+ return evs;
+};
+scheduler._time_order = function(evs) {
+ evs.sort(function(a, b) {
+ if (a.start_date.valueOf() == b.start_date.valueOf()) {
+ if (a._timed && !b._timed) return 1;
+ if (!a._timed && b._timed) return -1;
+ return a.id > b.id ? 1 : -1;
+ }
+ return a.start_date > b.start_date ? 1 : -1;
+ });
+};
+scheduler._pre_render_events_table = function(evs, hold) { // max - max height of week slot
+ this._time_order(evs);
+ var out = [];
+ var weeks = [
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ []
+ ]; //events by weeks
+ var max = this._colsS.heights;
+ var start_date;
+ var cols = this._cols.length;
+ var chunks_info = {};
+
+ for (var i = 0; i < evs.length; i++) {
+ var ev = evs[i];
+ var id = ev.id;
+ if (!chunks_info[id]) {
+ chunks_info[id] = {
+ first_chunk: true,
+ last_chunk: true
+ };
+ }
+ var chunk_info = chunks_info[id];
+ var sd = (start_date || ev.start_date);
+ var ed = ev.end_date;
+ //trim events which are crossing through current view
+ if (sd < this._min_date) {
+ chunk_info.first_chunk = false;
+ sd = this._min_date;
+ }
+ if (ed > this._max_date) {
+ chunk_info.last_chunk = false;
+ ed = this._max_date;
+ }
+
+ var locate_s = this.locate_holder_day(sd, false, ev);
+ ev._sday = locate_s % cols;
+
+ //skip single day events for ignored dates
+ if (this._ignores[ev._sday] && ev._timed) continue;
+
+ var locate_e = this.locate_holder_day(ed, true, ev) || cols;
+ ev._eday = (locate_e % cols) || cols; //cols used to fill full week, when event end on monday
+ ev._length = locate_e - locate_s;
+
+ //3600000 - compensate 1 hour during winter|summer time shift
+ ev._sweek = Math.floor((this._correct_shift(sd.valueOf(), 1) - this._min_date.valueOf()) / (60 * 60 * 1000 * 24 * cols));
+
+ //current slot
+ var stack = weeks[ev._sweek];
+ //check order position
+ var stack_line;
+
+ for (stack_line = 0; stack_line < stack.length; stack_line++)
+ if (stack[stack_line]._eday <= ev._sday)
+ break;
+
+ if (!ev._sorder || !hold) {
+ ev._sorder = stack_line;
+ }
+
+ if (ev._sday + ev._length <= cols) {
+ start_date = null;
+ out.push(ev);
+ stack[stack_line] = ev;
+ //get max height of slot
+ max[ev._sweek] = stack.length - 1;
+ ev._first_chunk = chunk_info.first_chunk;
+ ev._last_chunk = chunk_info.last_chunk;
+ } else { // split long event in chunks
+ var copy = this._copy_event(ev);
+ copy.id = ev.id;
+ copy._length = cols - ev._sday;
+ copy._eday = cols;
+ copy._sday = ev._sday;
+ copy._sweek = ev._sweek;
+ copy._sorder = ev._sorder;
+ copy.end_date = this.date.add(sd, copy._length, "day");
+ copy._first_chunk = chunk_info.first_chunk;
+ if (chunk_info.first_chunk) {
+ chunk_info.first_chunk = false;
+ }
+
+ out.push(copy);
+ stack[stack_line] = copy;
+ start_date = copy.end_date;
+ //get max height of slot
+ max[ev._sweek] = stack.length - 1;
+ i--;
+ continue; //repeat same step
+ }
+ }
+ return out;
+};
+scheduler._copy_dummy = function() {
+ var a = new Date(this.start_date);
+ var b = new Date(this.end_date);
+ this.start_date = a;
+ this.end_date = b;
+};
+scheduler._copy_event = function(ev) {
+ this._copy_dummy.prototype = ev;
+ return new this._copy_dummy();
+ //return {start_date:ev.start_date, end_date:ev.end_date, text:ev.text, id:ev.id}
+};
+scheduler._rendered = [];
+scheduler.clear_view = function() {
+ for (var i = 0; i < this._rendered.length; i++) {
+ var obj = this._rendered[i];
+ if (obj.parentNode) obj.parentNode.removeChild(obj);
+ }
+ this._rendered = [];
+};
+scheduler.updateEvent = function(id) {
+ var ev = this.getEvent(id);
+ this.clear_event(id);
+
+ if (ev && this.is_visible_events(ev) && this.filter_event(id, ev) && (this._table_view || this.config.multi_day || ev._timed)) {
+ if (this.config.update_render)
+ this.render_view_data();
+ else
+ this.render_view_data([ev], true);
+ }
+};
+scheduler.clear_event = function(id) {
+ this.for_rendered(id, function(node, i) {
+ if (node.parentNode)
+ node.parentNode.removeChild(node);
+ scheduler._rendered.splice(i, 1);
+ });
+};
+scheduler._y_from_date = function(date){
+ var sm = date.getHours() * 60 + date.getMinutes();
+ return ((Math.round((sm * 60 * 1000 - this.config.first_hour * 60 * 60 * 1000) * this.config.hour_size_px / (60 * 60 * 1000))) % (this.config.hour_size_px * 24)); //42px/hour
+};
+scheduler._calc_event_y = function(ev, min_height){
+ min_height = min_height || 0;
+ var sm = ev.start_date.getHours() * 60 + ev.start_date.getMinutes();
+ var em = (ev.end_date.getHours() * 60 + ev.end_date.getMinutes()) || (scheduler.config.last_hour * 60);
+ var top = this._y_from_date(ev.start_date);
+
+ var height = Math.max(min_height, (em - sm) * this.config.hour_size_px / 60); //42px/hour
+ return {
+ top: top,
+ height: height
+ };
+};
+scheduler.render_event = function(ev) {
+ var menu = scheduler.xy.menu_width;
+ var menu_offset = (this.config.use_select_menu_space) ? 0 : menu;
+ if (ev._sday < 0) return; //can occur in case of recurring event during time shift
+
+ var parent = scheduler.locate_holder(ev._sday);
+ if (!parent) return; //attempt to render non-visible event
+
+ var pos_y = this._calc_event_y(ev, scheduler.xy.min_event_height);
+ var top = pos_y.top,
+ height = pos_y.height;
+
+ var ev_count = ev._count || 1;
+ var ev_sorder = ev._sorder || 0;
+
+ var width = Math.floor((parent.clientWidth - menu_offset) / ev_count);
+ var left = ev_sorder * width + 1;
+ if (!ev._inner) width = width * (ev_count - ev_sorder);
+ if (this.config.cascade_event_display) {
+ var limit = this.config.cascade_event_count;
+ var margin = this.config.cascade_event_margin;
+ left = ev_sorder % limit * margin;
+ var right = (ev._inner) ? (ev_count - ev_sorder - 1) % limit * margin / 2 : 0;
+ width = Math.floor(parent.clientWidth - menu_offset - left - right);
+ }
+
+ var d = this._render_v_bar(ev, menu_offset + left, top, width, height, ev._text_style, scheduler.templates.event_header(ev.start_date, ev.end_date, ev), scheduler.templates.event_text(ev.start_date, ev.end_date, ev));
+
+ this._rendered.push(d);
+ parent.appendChild(d);
+
+ left = left + parseInt(parent.style.left, 10) + menu_offset;
+
+ if (this._edit_id == ev.id) {
+
+ d.style.zIndex = 1; //fix overlapping issue
+ width = Math.max(width - 4, scheduler.xy.editor_width);
+ d = document.createElement("DIV");
+ d.setAttribute("event_id", ev.id);
+ this.set_xy(d, width, height - 20, left, top + 14);
+ d.className = "dhx_cal_event dhx_cal_editor";
+
+ var tplClass = scheduler.templates.event_class(ev.start_date, ev.end_date, ev);
+
+ if(tplClass){
+ d.className += " " + tplClass;
+ }
+ var d2 = document.createElement("DIV");
+ this.set_xy(d2, width - 6, height - 26);
+ d2.style.cssText += ";margin:2px 2px 2px 2px;overflow:hidden;";
+
+ d.appendChild(d2);
+ this._els["dhx_cal_data"][0].appendChild(d);
+ this._rendered.push(d);
+
+ d2.innerHTML = "<textarea class='dhx_cal_editor'>" + ev.text + "</textarea>";
+ if (this._quirks7) d2.firstChild.style.height = height - 12 + "px"; //IEFIX
+ this._editor = d2.firstChild;
+ this._editor.onkeydown = function(e) {
+ if ((e || event).shiftKey) return true;
+ var code = (e || event).keyCode;
+ if (code == scheduler.keys.edit_save) scheduler.editStop(true);
+ if (code == scheduler.keys.edit_cancel) scheduler.editStop(false);
+ };
+ this._editor.onselectstart = function (e) {
+ (e || event).cancelBubble = true;
+ return true;
+ };
+ scheduler._focus(d2.firstChild, true);
+ //IE and opera can add x-scroll during focusing
+ this._els["dhx_cal_data"][0].scrollLeft = 0;
+ }
+ if (this.xy.menu_width !== 0 && this._select_id == ev.id) {
+ if (this.config.cascade_event_display && this._drag_mode)
+ d.style.zIndex = 1; //fix overlapping issue for cascade view in case of dnd of selected event
+ var icons = this.config["icons_" + ((this._edit_id == ev.id) ? "edit" : "select")];
+ var icons_str = "";
+ var bg_color = (ev.color ? ("background-color: " + ev.color + ";") : "");
+ var color = (ev.textColor ? ("color: " + ev.textColor + ";") : "");
+ for (var i = 0; i < icons.length; i++)
+ icons_str += "<div class='dhx_menu_icon " + icons[i] + "' style='" + bg_color + "" + color + "' title='" + this.locale.labels[icons[i]] + "'></div>";
+ var obj = this._render_v_bar(ev, left - menu + 1, top, menu, icons.length * 20 + 26 - 2, "", "<div style='" + bg_color + "" + color + "' class='dhx_menu_head'></div>", icons_str, true);
+ obj.style.left = left - menu + 1;
+ this._els["dhx_cal_data"][0].appendChild(obj);
+ this._rendered.push(obj);
+ }
+ if(this.config.drag_highlight && this._drag_id == ev.id){
+ this.highlightEventPosition(ev);
+ }
+};
+scheduler._render_v_bar = function (ev, x, y, w, h, style, contentA, contentB, bottom) {
+ var d = document.createElement("DIV");
+ var id = ev.id;
+ var cs = (bottom) ? "dhx_cal_event dhx_cal_select_menu" : "dhx_cal_event";
+
+ var cse = scheduler.templates.event_class(ev.start_date, ev.end_date, ev);
+ if (cse) cs = cs + " " + cse;
+
+ var bg_color = (ev.color ? ("background:" + ev.color + ";") : "");
+ var color = (ev.textColor ? ("color:" + ev.textColor + ";") : "");
+
+ var html = '<div event_id="' + id + '" class="' + cs + '" style="position:absolute; top:' + y + 'px; left:' + x + 'px; width:' + (w - 4) + 'px; height:' + h + 'px;' + (style || "") + '"></div>';
+ d.innerHTML = html;
+
+ var container = d.cloneNode(true).firstChild;
+
+ if (!bottom && scheduler.renderEvent(container, ev, w, h, contentA, contentB)) {
+ return container;
+ } else {
+ container = d.firstChild;
+
+ var inner_html = '<div class="dhx_event_move dhx_header" style=" width:' + (w - 6) + 'px;' + bg_color + '" >&nbsp;</div>';
+ inner_html += '<div class="dhx_event_move dhx_title" style="' + bg_color + '' + color + '">' + contentA + '</div>';
+ inner_html += '<div class="dhx_body" style=" width:' + (w - (this._quirks ? 4 : 14)) + 'px; height:' + (h - (this._quirks ? 20 : 30) + 1) + 'px;' + bg_color + '' + color + '">' + contentB + '</div>'; // +2 css specific, moved from render_event
+
+ var footer_class = "dhx_event_resize dhx_footer";
+ if (bottom)
+ footer_class = "dhx_resize_denied " + footer_class;
+
+ inner_html += '<div class="' + footer_class + '" style=" width:' + (w - 8) + 'px;' + (bottom ? ' margin-top:-1px;' : '') + '' + bg_color + '' + color + '" ></div>';
+
+ container.innerHTML = inner_html;
+ }
+
+ return container;
+};
+scheduler.renderEvent = function(){
+ return false;
+};
+scheduler.locate_holder = function(day) {
+ if (this._mode == "day") return this._els["dhx_cal_data"][0].firstChild; //dirty
+ return this._els["dhx_cal_data"][0].childNodes[day];
+};
+scheduler.locate_holder_day = function(date, past) {
+ var day = Math.floor((this._correct_shift(date, 1) - this._min_date) / (60 * 60 * 24 * 1000));
+ //when locating end data of event , we need to use next day if time part was defined
+ if (past && this.date.time_part(date)) day++;
+ return day;
+};
+
+
+
+scheduler._get_dnd_order = function(order, ev_height, max_height){
+ if(!this._drag_event)
+ return order;
+ if(!this._drag_event._orig_sorder)
+ this._drag_event._orig_sorder = order;
+ else
+ order = this._drag_event._orig_sorder;
+
+ var evTop = ev_height * order;
+ while((evTop + ev_height) > max_height){
+ order--;
+ evTop -= ev_height;
+ }
+ order = Math.max(order, 0);
+ return order;
+};
+//scheduler._get_event_bar_pos = function(sday, eday, week, drag){
+scheduler._get_event_bar_pos = function(ev){
+ var x = this._colsS[ev._sday];
+ var x2 = this._colsS[ev._eday];
+ if (x2 == x) x2 = this._colsS[ev._eday + 1];
+ var hb = this.xy.bar_height;
+
+ var order = ev._sorder;
+ if(ev.id == this._drag_id){
+ var cellHeight = this._colsS.heights[ev._sweek + 1] - this._colsS.heights[ev._sweek]- this.xy.month_head_height;//22 for month head height
+ order = scheduler._get_dnd_order(order, hb, cellHeight);
+ }
+ var y_event_offset = order * hb;
+ var y = this._colsS.heights[ev._sweek] + (this._colsS.height ? (this.xy.month_scale_height + 2) : 2 ) + y_event_offset;
+ return {x:x, x2:x2, y:y};
+};
+
+scheduler.render_event_bar = function (ev) {
+ var parent = this._rendered_location;
+ var pos = this._get_event_bar_pos(ev);
+
+ var y = pos.y;
+ var x = pos.x;
+ var x2 = pos.x2;
+
+ // resize for month mutliday events
+ var resize_handle = "";
+
+ //events in ignored dates
+
+ if (!x2) return;
+
+ var resizable = scheduler.config.resize_month_events && this._mode == "month" &&
+ (!ev._timed || scheduler.config.resize_month_timed);
+
+ var d = document.createElement("DIV");
+ var left_chunk = (ev.hasOwnProperty("_first_chunk") && ev._first_chunk),
+ right_chunk = (ev.hasOwnProperty("_last_chunk") && ev._last_chunk);
+
+ var resize_left = resizable && (ev._timed || left_chunk);
+ var resize_right = resizable && (ev._timed || right_chunk);
+
+ var cs = "dhx_cal_event_clear";
+ if (!ev._timed || resizable) {
+ cs = "dhx_cal_event_line";
+ }
+ if(left_chunk){
+ cs += " dhx_cal_event_line_start";
+ }
+ if(right_chunk){
+ cs += " dhx_cal_event_line_end";
+ }
+ if(resize_left){
+ resize_handle += "<div class='dhx_event_resize dhx_event_resize_start'></div>";
+ }
+ if(resize_right){
+ resize_handle += "<div class='dhx_event_resize dhx_event_resize_end'></div>";
+ }
+
+ var cse = scheduler.templates.event_class(ev.start_date, ev.end_date, ev);
+ if (cse){
+ cs += " " + cse;
+ }
+
+ var bg_color = (ev.color ? ("background:" + ev.color + ";") : "");
+ var color = (ev.textColor ? ("color:" + ev.textColor + ";") : "");
+
+ var style_text = [
+ "position:absolute",
+ "top:" + y + "px",
+ "left:" + x + "px",
+ "width:" + (x2 - x - 15) + "px",
+ color,
+ bg_color,
+ (ev._text_style || "")
+ ].join(";");
+
+ var html = '<div event_id="' + ev.id + '" class="' + cs + '" style="'+style_text+'">';
+ if (resizable) {
+ html += resize_handle;
+ }
+ if(scheduler.getState().mode == "month"){
+ ev = scheduler.getEvent(ev.id); // ev at this point could be a part (row in a month view) of a larger event
+ }
+
+ if (ev._timed)
+ html += scheduler.templates.event_bar_date(ev.start_date, ev.end_date, ev);
+ html += scheduler.templates.event_bar_text(ev.start_date, ev.end_date, ev) + '</div>';
+ html += '</div>';
+
+ d.innerHTML = html;
+
+ this._rendered.push(d.firstChild);
+ parent.appendChild(d.firstChild);
+};
+
+scheduler._locate_event = function(node) {
+ var id = null;
+ while (node && !id && node.getAttribute) {
+ id = node.getAttribute("event_id");
+ node = node.parentNode;
+ }
+ return id;
+};
+
+scheduler.edit = function(id) {
+ if (this._edit_id == id) return;
+ this.editStop(false, id);
+ this._edit_id = id;
+ this.updateEvent(id);
+};
+scheduler.editStop = function(mode, id) {
+ if (id && this._edit_id == id) return;
+ var ev = this.getEvent(this._edit_id);
+ if (ev) {
+ if (mode) ev.text = this._editor.value;
+ this._edit_id = null;
+ this._editor = null;
+ this.updateEvent(ev.id);
+ this._edit_stop_event(ev, mode);
+ }
+};
+scheduler._edit_stop_event = function(ev, mode) {
+ if (this._new_event) {
+ if (!mode) {
+ if (ev) // in case of custom lightbox user can already delete event
+ this.deleteEvent(ev.id, true);
+ } else {
+ this.callEvent("onEventAdded", [ev.id, ev]);
+ }
+ this._new_event = null;
+ } else {
+ if (mode){
+ this.callEvent("onEventChanged", [ev.id, ev]);
+ }
+ }
+};
+
+scheduler.getEvents = function(from, to) {
+ var result = [];
+ for (var a in this._events) {
+ var ev = this._events[a];
+ if (ev && ( (!from && !to) || (ev.start_date < to && ev.end_date > from) ))
+ result.push(ev);
+ }
+ return result;
+};
+scheduler.getRenderedEvent = function(id) {
+ if (!id)
+ return;
+ var rendered_events = scheduler._rendered;
+ for (var i=0; i<rendered_events.length; i++) {
+ var rendered_event = rendered_events[i];
+ if (rendered_event.getAttribute("event_id") == id) {
+ return rendered_event;
+ }
+ }
+ return null;
+};
+scheduler.showEvent = function(id, mode) {
+ var ev = (typeof id == "number" || typeof id == "string") ? scheduler.getEvent(id) : id;
+ mode = mode||scheduler._mode;
+
+ if (!ev || (this.checkEvent("onBeforeEventDisplay") && !this.callEvent("onBeforeEventDisplay", [ev, mode])))
+ return;
+
+ var scroll_hour = scheduler.config.scroll_hour;
+ scheduler.config.scroll_hour = ev.start_date.getHours();
+ var preserve_scroll = scheduler.config.preserve_scroll;
+ scheduler.config.preserve_scroll = false;
+
+ var original_color = ev.color;
+ var original_text_color = ev.textColor;
+ if (scheduler.config.highlight_displayed_event) {
+ ev.color = scheduler.config.displayed_event_color;
+ ev.textColor = scheduler.config.displayed_event_text_color;
+ }
+
+ scheduler.setCurrentView(new Date(ev.start_date), mode);
+
+ ev.color = original_color;
+ ev.textColor = original_text_color;
+ scheduler.config.scroll_hour = scroll_hour;
+ scheduler.config.preserve_scroll = preserve_scroll;
+
+ if (scheduler.matrix && scheduler.matrix[mode]) {
+ scheduler._els.dhx_cal_data[0].scrollTop = getAbsoluteTop(scheduler.getRenderedEvent(ev.id)) - getAbsoluteTop(scheduler._els.dhx_cal_data[0]) - 20;
+ }
+
+ scheduler.callEvent("onAfterEventDisplay", [ev, mode]);
+};
+
+scheduler._append_drag_marker = function(m){
+ if(m.parentNode) return;
+ var zone = scheduler._els["dhx_cal_data"][0];
+
+ var scale = zone.lastChild;
+ if(scale.className && scale.className.indexOf("dhx_scale_holder") < 0 && scale.previousSibling){
+ scale = scale.previousSibling;
+ }
+ if (scale && scale.className.indexOf("dhx_scale_holder") === 0) {
+ scale.appendChild(m);
+ }
+};
+
+scheduler._update_marker_position = function(m, event){
+ var size = scheduler._calc_event_y(event, 0);
+ m.style.top = size.top + "px";
+ m.style.height = size.height + "px";
+};
+
+scheduler.highlightEventPosition = function(event){
+ var m = document.createElement("div");
+
+ m.setAttribute("event_id", event.id);
+ this._rendered.push(m);
+ this._update_marker_position(m, event);
+
+ var css = this.templates.drag_marker_class(event.start_date, event.end_date, event);
+ var html = this.templates.drag_marker_content(event.start_date, event.end_date, event);
+ m.className = "dhx_drag_marker";
+ if(css)
+ m.className += " " + css;
+ if(html)
+ m.innerHTML = html;
+ this._append_drag_marker(m);
+};
+scheduler._loaded = {};
+scheduler._load = function(url, from) {
+ url = url || this._load_url;
+
+ if(!url){
+ //if scheduler.setLoadMode is called before scheduler.init, initial rendering will invoke data loading while url is undefined
+ return;
+ }
+
+ url += (url.indexOf("?") == -1 ? "?" : "&") + "timeshift=" + (new Date()).getTimezoneOffset();
+ if (this.config.prevent_cache) url += "&uid=" + this.uid();
+ var to;
+ from = from || this._date;
+
+ if (this._load_mode) {
+ var lf = this.templates.load_format;
+
+ from = this.date[this._load_mode + "_start"](new Date(from.valueOf()));
+ while (from > this._min_date) from = this.date.add(from, -1, this._load_mode);
+ to = from;
+
+ var cache_line = true;
+ while (to < this._max_date) {
+ to = this.date.add(to, 1, this._load_mode);
+ if (this._loaded[lf(from)] && cache_line)
+ from = this.date.add(from, 1, this._load_mode); else cache_line = false;
+ }
+
+ var temp_to = to;
+ do {
+ to = temp_to;
+ temp_to = this.date.add(to, -1, this._load_mode);
+ } while (temp_to > from && this._loaded[lf(temp_to)]);
+
+ if (to <= from)
+ return false; //already loaded
+ dhtmlxAjax.get(url + "&from=" + lf(from) + "&to=" + lf(to), function(l) {scheduler.on_load(l);});
+ while (from < to) {
+ this._loaded[lf(from)] = true;
+ from = this.date.add(from, 1, this._load_mode);
+ }
+ } else
+ dhtmlxAjax.get(url, function(l) {scheduler.on_load(l);});
+ this.callEvent("onXLS", []);
+ return true;
+};
+scheduler.on_load = function(loader) {
+ var evs;
+ if (this._process && this._process != "xml") {
+ evs = this[this._process].parse(loader.xmlDoc.responseText);
+ } else {
+ evs = this._magic_parser(loader);
+ }
+
+ scheduler._process_loading(evs);
+
+ this.callEvent("onXLE", []);
+};
+scheduler._process_loading = function(evs) {
+ this._loading = true;
+ this._not_render = true;
+ for (var i = 0; i < evs.length; i++) {
+ if (!this.callEvent("onEventLoading", [evs[i]])) continue;
+ this.addEvent(evs[i]);
+ }
+ this._not_render = false;
+ if (this._render_wait) this.render_view_data();
+
+ this._loading = false;
+ if (this._after_call) this._after_call();
+ this._after_call = null;
+};
+scheduler._init_event = function(event) {
+ event.text = (event.text || event._tagvalue) || "";
+ event.start_date = scheduler._init_date(event.start_date);
+ event.end_date = scheduler._init_date(event.end_date);
+};
+
+scheduler._init_date = function(date){
+ if(!date)
+ return null;
+ if(typeof date == "string")
+ return scheduler.templates.xml_date(date);
+ else return new Date(date);
+};
+
+scheduler.json = {};
+scheduler.json.parse = function(data) {
+ if (typeof data == "string") {
+ scheduler._temp = eval("(" + data + ")");
+ data = (scheduler._temp) ? scheduler._temp.data || scheduler._temp.d || scheduler._temp : [];
+ }
+
+ if (data.dhx_security)
+ dhtmlx.security_key = data.dhx_security;
+
+ var collections = (scheduler._temp && scheduler._temp.collections) ? scheduler._temp.collections : {};
+ var collections_loaded = false;
+ for (var key in collections) {
+ if (collections.hasOwnProperty(key)) {
+ collections_loaded = true;
+ var collection = collections[key];
+ var arr = scheduler.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 = { key: option.value, label: option.label }; // 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)
+ scheduler.callEvent("onOptionsLoad", []);
+
+ var evs = [];
+ for (var i = 0; i < data.length; i++) {
+ var event = data[i];
+ scheduler._init_event(event);
+ evs.push(event);
+ }
+ return evs;
+};
+scheduler.parse = function(data, type) {
+ this._process = type;
+ this.on_load({xmlDoc: {responseText: data}});
+};
+scheduler.load = function(url, call) {
+ if (typeof call == "string") {
+ this._process = call;
+ call = arguments[2];
+ }
+
+ this._load_url = url;
+ this._after_call = call;
+ this._load(url, this._date);
+};
+//possible values - day,week,month,year,all
+scheduler.setLoadMode = function(mode) {
+ if (mode == "all") mode = "";
+ this._load_mode = mode;
+};
+
+scheduler.serverList = function(name, array) {
+ if (array) {
+ this.serverList[name] = array.slice(0);
+ return this.serverList[name];
+ }
+ this.serverList[name] = (this.serverList[name] || []);
+ return this.serverList[name];
+};
+scheduler._userdata = {};
+scheduler._magic_parser = function(loader) {
+ var xml;
+ if (!loader.getXMLTopNode) { //from a string
+ var xml_string = loader.xmlDoc.responseText;
+ loader = new dtmlXMLLoaderObject(function() {});
+ loader.loadXMLString(xml_string);
+ }
+
+ xml = loader.getXMLTopNode("data");
+ if (xml.tagName != "data") return [];//not an xml
+ var skey = xml.getAttribute("dhx_security");
+ if (skey)
+ dhtmlx.security_key = skey;
+
+ var opts = loader.doXPath("//coll_options");
+ for (var i = 0; i < opts.length; i++) {
+ var bind = opts[i].getAttribute("for");
+ var arr = this.serverList[bind];
+ if (!arr) continue;
+ arr.splice(0, arr.length); //clear old options
+ 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);
+ }
+ }
+ if (opts.length)
+ scheduler.callEvent("onOptionsLoad", []);
+
+ var ud = loader.doXPath("//userdata");
+ for (var i = 0; i < ud.length; i++) {
+ var udx = this._xmlNodeToJSON(ud[i]);
+ this._userdata[udx.name] = udx.text;
+ }
+
+ var evs = [];
+ xml = loader.doXPath("//event");
+
+ for (var i = 0; i < xml.length; i++) {
+ var ev = evs[i] = this._xmlNodeToJSON(xml[i]);
+ scheduler._init_event(ev);
+ }
+ return evs;
+};
+scheduler._xmlNodeToJSON = function(node) {
+ var t = {};
+ for (var i = 0; i < node.attributes.length; i++)
+ t[node.attributes[i].name] = node.attributes[i].value;
+
+ 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;
+};
+scheduler.attachEvent("onXLS", function() {
+ if (this.config.show_loading === true) {
+ var t;
+ t = this.config.show_loading = document.createElement("DIV");
+ t.className = 'dhx_loading';
+ t.style.left = Math.round((this._x - 128) / 2) + "px";
+ t.style.top = Math.round((this._y - 15) / 2) + "px";
+ this._obj.appendChild(t);
+ }
+});
+scheduler.attachEvent("onXLE", function() {
+ var t = this.config.show_loading;
+ if (t && typeof t == "object") {
+ this._obj.removeChild(t);
+ this.config.show_loading = true;
+ }
+});
+
+/*
+This software is allowed to use under GPL or you need to obtain Commercial or Enterise License
+to use it in not GPL project. Please contact sales@dhtmlx.com for details
+*/
+scheduler.ical={
+ parse:function(str){
+ var data = str.match(RegExp(this.c_start+"[^\f]*"+this.c_end,""));
+ if (!data.length) return;
+
+ //unfolding
+ data[0]=data[0].replace(/[\r\n]+(?=[a-z \t])/g," ");
+ //drop property
+ data[0]=data[0].replace(/\;[^:\r\n]*:/g,":");
+
+
+ var incoming=[];
+ var match;
+ var event_r = RegExp("(?:"+this.e_start+")([^\f]*?)(?:"+this.e_end+")","g");
+ while ((match=event_r.exec(data)) !== null){
+ var e={};
+ var param;
+ var param_r = /[^\r\n]+[\r\n]+/g;
+ while ((param=param_r.exec(match[1])) !== null)
+ this.parse_param(param.toString(),e);
+ if (e.uid && !e.id) e.id = e.uid; //fallback to UID, when ID is not defined
+ incoming.push(e);
+ }
+ return incoming;
+ },
+ parse_param:function(str,obj){
+ var d = str.indexOf(":");
+ if (d==-1) return;
+
+ var name = str.substr(0,d).toLowerCase();
+ var value = str.substr(d+1).replace(/\\\,/g,",").replace(/[\r\n]+$/,"");
+ if (name=="summary")
+ name="text";
+ else if (name=="dtstart"){
+ name = "start_date";
+ value = this.parse_date(value,0,0);
+ }
+ else if (name=="dtend"){
+ name = "end_date";
+ value = this.parse_date(value,0,0);
+ }
+ obj[name]=value;
+ },
+ parse_date:function(value,dh,dm){
+ var t = value.split("T");
+ if (t[1]){
+ dh=t[1].substr(0,2);
+ dm=t[1].substr(2,2);
+ }
+ var dy = t[0].substr(0,4);
+ var dn = parseInt(t[0].substr(4,2),10)-1;
+ var dd = t[0].substr(6,2);
+ if (scheduler.config.server_utc && !t[1]) { // if no hours/minutes were specified == full day event
+ return new Date(Date.UTC(dy,dn,dd,dh,dm)) ;
+ }
+ return new Date(dy,dn,dd,dh,dm);
+ },
+ c_start:"BEGIN:VCALENDAR",
+ e_start:"BEGIN:VEVENT",
+ e_end:"END:VEVENT",
+ c_end:"END:VCALENDAR"
+};
+scheduler._lightbox_controls = {};
+scheduler.formSection = function(name){
+ var config = this.config.lightbox.sections;
+ var i =0;
+ for (i; i < config.length; i++)
+ if (config[i].name == name)
+ break;
+ var section = config[i];
+ if (!scheduler._lightbox)
+ scheduler.getLightbox();
+ var header = document.getElementById(section.id);
+ var node = header.nextSibling;
+
+ var result = {
+ section: section,
+ header: header,
+ node: node,
+ getValue:function(ev){
+ return scheduler.form_blocks[section.type].get_value(node, (ev||{}), section);
+ },
+ setValue:function(value, ev){
+ return scheduler.form_blocks[section.type].set_value(node, value, (ev||{}), section);
+ }
+ };
+
+ var handler = scheduler._lightbox_controls["get_"+section.type+"_control"];
+ return handler?handler(result):result;
+};
+scheduler._lightbox_controls.get_template_control = function(result) {
+ result.control = result.node;
+ return result;
+};
+scheduler._lightbox_controls.get_select_control = function(result) {
+ result.control = result.node.getElementsByTagName('select')[0];
+ return result;
+};
+scheduler._lightbox_controls.get_textarea_control = function(result) {
+ result.control = result.node.getElementsByTagName('textarea')[0];
+ return result;
+};
+scheduler._lightbox_controls.get_time_control = function(result) {
+ result.control = result.node.getElementsByTagName('select'); // array
+ return result;
+};
+scheduler.form_blocks={
+ template:{
+ render: function(sns){
+ var height=(sns.height||"30")+"px";
+ return "<div class='dhx_cal_ltext dhx_cal_template' style='height:"+height+";'></div>";
+ },
+ 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 "<div class='dhx_cal_ltext' style='height:"+height+";'><textarea></textarea></div>";
+ },
+ 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; scheduler._focus(a, true);
+ }
+ },
+ select:{
+ render:function(sns){
+ var height=(sns.height||"23")+"px";
+ var html="<div class='dhx_cal_ltext' style='height:"+height+";'><select style='width:100%;'>";
+ for (var i=0; i < sns.options.length; i++)
+ html+="<option value='"+sns.options[i].key+"'>"+sns.options[i].label+"</option>";
+ html+="</select></div>";
+ 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; scheduler._focus(a, true);
+ }
+ },
+ time:{
+ render:function(sns) {
+ if (!sns.time_format) {
+ // default order
+ sns.time_format = ["%H:%i", "%d", "%m", "%Y"];
+ }
+ // map: default order => real one
+ sns._time_format_order = {};
+ var time_format = sns.time_format;
+
+ var cfg = scheduler.config;
+ var dt = this.date.date_part(scheduler._currentDate());
+ var last = 24*60, first = 0;
+ if(scheduler.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 += " ";
+ }
+
+ switch (time_option) {
+ case "%Y":
+ sns._time_format_order[3] = p;
+ //year
+ html+="<select>";
+ var year = dt.getFullYear()-5; //maybe take from config?
+ for (var i=0; i < 10; i++)
+ html+="<option value='"+(year+i)+"'>"+(year+i)+"</option>";
+ html+="</select> ";
+ break;
+ case "%m":
+ sns._time_format_order[2] = p;
+ //month
+ html+="<select>";
+ for (var i=0; i < 12; i++)
+ html+="<option value='"+i+"'>"+this.locale.date.month_full[i]+"</option>";
+ html += "</select>";
+ break;
+ case "%d":
+ sns._time_format_order[1] = p;
+ //days
+ html+="<select>";
+ for (var i=1; i < 32; i++)
+ html+="<option value='"+i+"'>"+i+"</option>";
+ html += "</select>";
+ break;
+ case "%H:%i":
+ sns._time_format_order[0] = p;
+ //hours
+ html += "<select>";
+ var i = first;
+ var tdate = dt.getDate();
+ sns._time_values = [];
+
+ while(i<last){
+ var time=this.templates.time_picker(dt);
+ html+="<option value='"+i+"'>"+time+"</option>";
+ sns._time_values.push(i);
+ dt.setTime(dt.valueOf()+this.config.time_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();
+ }
+ html += "</select>";
+ break;
+ }
+ }
+
+ return "<div style='height:30px;padding-top:0px;font-size:inherit;' class='dhx_section_time'>"+html+"<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>"+html+"</div>";
+ },
+ set_value:function(node,value,ev,config){
+ var cfg = scheduler.config;
+ var s=node.getElementsByTagName("select");
+ var map = config._time_format_order;
+ var start_date, end_date;
+
+ if(cfg.full_day) {
+ if (!node._full_day){
+ var html = "<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> "+scheduler.locale.labels.full_day+"&nbsp;</label></input>";
+ if (!scheduler.config.wide_form)
+ html = node.previousSibling.innerHTML+html;
+ node.previousSibling.innerHTML=html;
+ node._full_day=true;
+ }
+ var input=node.previousSibling.getElementsByTagName("input")[0];
+ input.checked = (scheduler.date.time_part(ev.start_date)===0 && scheduler.date.time_part(ev.end_date)===0);
+
+ s[map[0]].disabled=input.checked;
+ s[ map[0] + s.length/2 ].disabled=input.checked;
+
+ input.onclick = function(){
+ if(input.checked) {
+ var obj = {};
+ scheduler.form_blocks.time.get_value(node,obj,config);
+
+ start_date = scheduler.date.date_part(obj.start_date);
+ end_date = scheduler.date.date_part(obj.end_date);
+
+ if (+end_date == +start_date || (+end_date >= +start_date && (ev.end_date.getHours() !== 0 || ev.end_date.getMinutes() !== 0)))
+ end_date = scheduler.date.add(end_date, 1, "day");
+ }
+
+ s[map[0]].disabled=input.checked;
+ s[ map[0] + s.length/2 ].disabled=input.checked;
+
+ _fill_lightbox_select(s,0,start_date||ev.start_date);
+ _fill_lightbox_select(s,4,end_date||ev.end_date);
+ };
+ }
+
+ if(cfg.auto_end_date && cfg.event_duration) {
+ var _update_lightbox_select = function () {
+ start_date = new Date(s[map[3]].value,s[map[2]].value,s[map[1]].value,0,s[map[0]].value);
+ end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000));
+ _fill_lightbox_select(s, 4, end_date);
+ };
+ for(var i=0; i<4; i++) {
+ s[i].onchange = _update_lightbox_select;
+ }
+ }
+
+ function _fill_lightbox_select(s,i,d) {
+ var time_values = config._time_values;
+ var direct_value = d.getHours()*60+d.getMinutes();
+ var fixed_value = direct_value;
+ var value_found = false;
+ for (var k=0; k<time_values.length; k++) {
+ var t_v = time_values[k];
+ if (t_v === direct_value) {
+ value_found = true;
+ break;
+ }
+ if (t_v < direct_value)
+ fixed_value = t_v;
+ }
+
+ s[i+map[0]].value=(value_found)?direct_value:fixed_value;
+ if(!(value_found || fixed_value)){
+ s[i+map[0]].selectedIndex = -1;//show empty select in FF
+ }
+ s[i+map[1]].value=d.getDate();
+ s[i+map[2]].value=d.getMonth();
+ s[i+map[3]].value=d.getFullYear();
+ }
+
+ _fill_lightbox_select(s,0,ev.start_date);
+ _fill_lightbox_select(s,4,ev.end_date);
+ },
+ get_value:function(node, ev, config) {
+ var s = node.getElementsByTagName("select");
+ var map = config._time_format_order;
+
+ ev.start_date=new Date(s[map[3]].value,s[map[2]].value,s[map[1]].value,0,s[map[0]].value);
+ ev.end_date=new Date(s[map[3]+4].value,s[map[2]+4].value,s[map[1]+4].value,0,s[map[0]+4].value);
+
+ if (ev.end_date<=ev.start_date)
+ ev.end_date=scheduler.date.add(ev.start_date,scheduler.config.time_step,"minute");
+ return {
+ start_date: new Date(ev.start_date),
+ end_date: new Date(ev.end_date)
+ };
+ },
+ focus:function(node){
+ scheduler._focus(node.getElementsByTagName("select")[0]);
+ }
+ }
+};
+scheduler.showCover=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";
+ }
+ this.show_cover();
+};
+scheduler.showLightbox=function(id){
+ if (!id) return;
+ if (!this.callEvent("onBeforeLightbox",[id])) {
+ if (this._new_event)
+ this._new_event = null;
+ return;
+ }
+ var box = this.getLightbox();
+ this.showCover(box);
+ this._fill_lightbox(id,box);
+ this.callEvent("onLightbox",[id]);
+};
+scheduler._fill_lightbox = function(id, box) {
+ var ev = this.getEvent(id);
+ var s = box.getElementsByTagName("span");
+ if (scheduler.templates.lightbox_header) {
+ s[1].innerHTML = "";
+ s[2].innerHTML = scheduler.templates.lightbox_header(ev.start_date, ev.end_date, ev);
+ } else {
+ s[1].innerHTML = this.templates.event_header(ev.start_date, ev.end_date, ev);
+ s[2].innerHTML = (this.templates.event_bar_text(ev.start_date, ev.end_date, ev) || "").substr(0, 70); //IE6 fix
+ }
+
+ var sns = this.config.lightbox.sections;
+ for (var i = 0; i < sns.length; i++) {
+ var current_sns = sns[i];
+ var node = document.getElementById(current_sns.id).nextSibling;
+ var block = this.form_blocks[current_sns.type];
+ var value = (ev[current_sns.map_to] !== undefined) ? ev[current_sns.map_to] : current_sns.default_value;
+ block.set_value.call(this, node, value, ev, current_sns);
+ if (sns[i].focus)
+ block.focus.call(this, node);
+ }
+
+ scheduler._lightbox_id = id;
+};
+scheduler._lightbox_out=function(ev){
+ var sns = this.config.lightbox.sections;
+ 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,ev, sns[i]);
+ if (sns[i].map_to!="auto")
+ ev[sns[i].map_to]=res;
+ }
+ return ev;
+};
+scheduler._empty_lightbox=function(data){
+ var id=scheduler._lightbox_id;
+ var ev=this.getEvent(id);
+ var box=this.getLightbox();
+
+ this._lame_copy(ev, data);
+
+ this.setEvent(ev.id,ev);
+ this._edit_stop_event(ev,true);
+ this.render_view_data();
+};
+scheduler.hide_lightbox=function(id){
+ this.hideCover(this.getLightbox());
+ this._lightbox_id = null;
+ this.callEvent("onAfterLightbox",[]);
+};
+scheduler.hideCover=function(box){
+ if (box) box.style.display="none";
+ this.hide_cover();
+};
+scheduler.hide_cover=function(){
+ if (this._cover)
+ this._cover.parentNode.removeChild(this._cover);
+ this._cover=null;
+};
+scheduler.show_cover=function(){
+ 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);
+};
+scheduler.save_lightbox=function(){
+ var data = this._lightbox_out({}, this._lame_copy(this.getEvent(this._lightbox_id)));
+ if (this.checkEvent("onEventSave") && !this.callEvent("onEventSave",[this._lightbox_id, data, this._new_event]))
+ return;
+ this._empty_lightbox(data);
+ this.hide_lightbox();
+};
+scheduler.startLightbox = function(id, box){
+ this._lightbox_id = id;
+ this._custom_lightbox = true;
+
+ this._temp_lightbox = this._lightbox;
+ this._lightbox = box;
+ this.showCover(box);
+};
+scheduler.endLightbox = function(mode, box){
+ this._edit_stop_event(scheduler.getEvent(this._lightbox_id),mode);
+ if (mode)
+ scheduler.render_view_data();
+ this.hideCover(box);
+
+ if (this._custom_lightbox){
+ this._lightbox = this._temp_lightbox;
+ this._custom_lightbox = false;
+ }
+ this._temp_lightbox = this._lightbox_id = null; // in case of custom lightbox user only calls endLightbox so we need to reset _lightbox_id
+};
+scheduler.resetLightbox = function(){
+ if (scheduler._lightbox && !scheduler._custom_lightbox)
+ scheduler._lightbox.parentNode.removeChild(scheduler._lightbox);
+ scheduler._lightbox = null;
+};
+scheduler.cancel_lightbox=function(){
+ this.callEvent("onEventCancel",[this._lightbox_id, this._new_event]);
+ this.endLightbox(false);
+ this.hide_lightbox();
+};
+scheduler._init_lightbox_events=function(){
+ this.getLightbox().onclick=function(e){
+ var src=e?e.target:event.srcElement;
+ if (!src.className) src=src.previousSibling;
+ if (src && src.className)
+ switch(src.className){
+ case "dhx_save_btn":
+ scheduler.save_lightbox();
+ break;
+ case "dhx_delete_btn":
+ var c=scheduler.locale.labels.confirm_deleting;
+
+ scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_deleting, function(){
+ scheduler.deleteEvent(scheduler._lightbox_id);
+ scheduler._new_event = null; //clear flag, if it was unsaved event
+ scheduler.hide_lightbox();
+ });
+
+ break;
+ case "dhx_cancel_btn":
+ scheduler.cancel_lightbox();
+ break;
+
+ default:
+ if (src.getAttribute("dhx_button")) {
+ scheduler.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;
+ }
+ }
+ if (index) {
+ block = scheduler.form_blocks[scheduler.config.lightbox.sections[index].type];
+ block.button_click(index, src, sec, sec.nextSibling);
+ }
+ }
+ break;
+ }
+ };
+ this.getLightbox().onkeydown=function(e){
+ switch((e||event).keyCode){
+ case scheduler.keys.edit_save:
+ if ((e||event).shiftKey) return;
+ scheduler.save_lightbox();
+ break;
+ case scheduler.keys.edit_cancel:
+ scheduler.cancel_lightbox();
+ break;
+ default:
+ break;
+ }
+ };
+};
+scheduler.setLightboxSize=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+scheduler.xy.lightbox_additional_height+"px";
+ con.style.height=con.scrollHeight+"px"; //it is incredible , how ugly IE can be
+};
+
+scheduler._init_dnd_events = function(){
+ dhtmlxEvent(document.body, "mousemove", scheduler._move_while_dnd);
+ dhtmlxEvent(document.body, "mouseup", scheduler._finish_dnd);
+ scheduler._init_dnd_events = function(){};
+};
+scheduler._move_while_dnd = function(e){
+ if (scheduler._dnd_start_lb){
+ if (!document.dhx_unselectable){
+ document.body.className += " dhx_unselectable";
+ document.dhx_unselectable = true;
+ }
+ var lb = scheduler.getLightbox();
+ var now = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY];
+ lb.style.top = scheduler._lb_start[1]+now[1]-scheduler._dnd_start_lb[1]+"px";
+ lb.style.left = scheduler._lb_start[0]+now[0]-scheduler._dnd_start_lb[0]+"px";
+ }
+};
+scheduler._ready_to_dnd = function(e){
+ var lb = scheduler.getLightbox();
+ scheduler._lb_start = [parseInt(lb.style.left,10), parseInt(lb.style.top,10)];
+ scheduler._dnd_start_lb = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY];
+};
+scheduler._finish_dnd = function(){
+ if (scheduler._lb_start){
+ scheduler._lb_start = scheduler._dnd_start_lb = false;
+ document.body.className = document.body.className.replace(" dhx_unselectable","");
+ document.dhx_unselectable = false;
+ }
+};
+scheduler.getLightbox=function(){ //scheduler.config.wide_form=true;
+ if (!this._lightbox){
+ var d=document.createElement("DIV");
+ d.className="dhx_cal_light";
+ if (scheduler.config.wide_form)
+ d.className+=" dhx_cal_light_wide";
+ if (scheduler.form_blocks.recurring)
+ d.className+=" dhx_cal_light_rec";
+
+ if (/msie|MSIE 6/.test(navigator.userAgent))
+ d.className+=" dhx_ie6";
+ d.style.visibility="hidden";
+ var html = this._lightbox_template;
+
+ var buttons = this.config.buttons_left;
+ for (var i = 0; i < buttons.length; i++)
+ html+="<div class='dhx_btn_set dhx_left_btn_set "+buttons[i]+"_set'><div dhx_button='1' class='"+buttons[i]+"'></div><div>"+scheduler.locale.labels[buttons[i]]+"</div></div>";
+
+ buttons = this.config.buttons_right;
+ for (var i = 0; i < buttons.length; i++)
+ html+="<div class='dhx_btn_set dhx_right_btn_set "+buttons[i]+"_set' style='float:right;'><div dhx_button='1' class='"+buttons[i]+"'></div><div>"+scheduler.locale.labels[buttons[i]]+"</div></div>";
+
+ html+="</div>";
+ d.innerHTML=html;
+ if (scheduler.config.drag_lightbox){
+ d.firstChild.onmousedown = scheduler._ready_to_dnd;
+ d.firstChild.onselectstart = function(){ return false; };
+ d.firstChild.style.cursor = "pointer";
+ scheduler._init_dnd_events();
+
+ }
+ document.body.insertBefore(d,document.body.firstChild);
+ this._lightbox=d;
+
+ var sns=this.config.lightbox.sections;
+ html="";
+ for (var i=0; i < sns.length; i++) {
+ var block=this.form_blocks[sns[i].type];
+ if (!block) continue; //ignore incorrect blocks
+ sns[i].id="area_"+this.uid();
+ var button = "";
+ if (sns[i].button){
+ button = "<div class='dhx_custom_button' index='"+i+"'><div class='dhx_custom_button_"+sns[i].button+"'></div><div>"+this.locale.labels["button_"+sns[i].button]+"</div></div>";
+ }
+
+ if (this.config.wide_form){
+ html+="<div class='dhx_wrap_section'>";
+ }
+
+ var label_name = this.locale.labels["section_"+sns[i].name];
+ if(typeof label_name !== "string"){
+ label_name = sns[i].name;
+ }
+ html+="<div id='"+sns[i].id+"' class='dhx_cal_lsection'>"+button+label_name+"</div>"+block.render.call(this,sns[i]);
+ html+="</div>";
+ }
+
+ var ds=d.getElementsByTagName("div");
+ for (var i=0; i<ds.length; i++) {
+ var t_ds = ds[i];
+ if (t_ds.className == "dhx_cal_larea") {
+ t_ds.innerHTML = html;
+ break;
+ }
+ }
+
+ //sizes
+ this.setLightboxSize();
+
+ this._init_lightbox_events(this);
+ d.style.display="none";
+ d.style.visibility="visible";
+ }
+ return this._lightbox;
+};
+scheduler._lightbox_template="<div class='dhx_cal_ltitle'><span class='dhx_mark'>&nbsp;</span><span class='dhx_time'></span><span class='dhx_title'></span></div><div class='dhx_cal_larea'></div>";
+
+scheduler._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){
+ this.xy.scroll_width = 0;
+ 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);
+ });
+ this._obj.ondblclick = function(){};
+ } 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; });
+ }
+};
+
+scheduler._touch_events = function(names, accessor, ignore){
+ //webkit on android need to be handled separately
+ var a_webkit = (navigator.userAgent.indexOf("Android")!=-1) && (navigator.userAgent.indexOf("WebKit")!=-1);
+ var source, tracker, timer, drag_mode, scroll_mode, action_mode;
+ var dblclicktime = 0;
+
+ function attachTouchEvent(element, name, callback){
+ //touch gestures must be disabled when ligthbox is opened
+ dhtmlxEvent(element, name, function(e){
+ if(scheduler._is_lightbox_open()){
+ return true;
+ }else{
+ return callback(e);
+ }
+ });
+ }
+
+ function check_direction_swipe(s_ev, e_ev, step){
+ if (!s_ev || !e_ev) return;
+
+ var dy = Math.abs(s_ev.pageY - e_ev.pageY);
+ var dx = Math.abs(s_ev.pageX - e_ev.pageX);
+ if (dx>step && (!dy || (dx/dy > 3))){
+ if (s_ev.pageX > e_ev.pageX)
+ scheduler._click.dhx_cal_next_button();
+ else
+ scheduler._click.dhx_cal_prev_button();
+ }
+ }
+
+ attachTouchEvent(document.body, names[0], function(e){
+ if (ignore(e)) return;
+
+ if (drag_mode){
+ scheduler._on_mouse_move(accessor(e));
+ scheduler._update_global_tip();
+ if (e.preventDefault)
+ e.preventDefault();
+ e.cancelBubble = true;
+ return false;
+ }
+
+ if (tracker && a_webkit){
+ check_direction_swipe(tracker, accessor(e), 0);
+ }
+
+ tracker = accessor(e);
+ //ignore common and scrolling moves
+ if (!action_mode) return;
+
+ //multitouch
+ if (!tracker){
+ scroll_mode = true;
+ return;
+ }
+
+ //target changed - probably in scroll mode
+
+ if (source.target != tracker.target || (Math.abs(source.pageX - tracker.pageX) > 5) || (Math.abs(source.pageY - tracker.pageY) > 5)){
+ scroll_mode = true;
+ clearTimeout(timer);
+ }
+
+ });
+
+ attachTouchEvent(this._els["dhx_cal_data"][0], "scroll", drag_cancel);
+ attachTouchEvent(this._els["dhx_cal_data"][0], "touchcancel", drag_cancel);
+ attachTouchEvent(this._els["dhx_cal_data"][0], "contextmenu", function(e){
+ if (action_mode){
+ if (e && e.preventDefault)
+ e.preventDefault();
+ (e||event).cancelBubble = true;
+ return false;
+ }
+ });
+ attachTouchEvent(this._els["dhx_cal_data"][0], names[1], function(e){
+ if (ignore(e)) return;
+
+ var fake_event;
+ drag_mode = scroll_mode = false;
+ action_mode = true;
+ scheduler._temp_touch_block = true;
+ fake_event = tracker = accessor(e);
+
+ if (!fake_event){
+ scroll_mode = true;
+ return;
+ }
+
+ //dbl click
+ var now = new Date();
+
+ if (!scroll_mode && !drag_mode && now - dblclicktime < 250){
+ scheduler._click.dhx_cal_data(fake_event);
+ window.setTimeout(function(){
+ scheduler._on_dbl_click(fake_event);
+ }, 50);
+
+ if (e.preventDefault)
+ e.preventDefault();
+ e.cancelBubble = true;
+ scheduler._block_next_stop = true;
+ return false;
+ }
+ dblclicktime = now;
+
+ //drag
+
+ if (scroll_mode || drag_mode || !scheduler.config.touch_drag)
+ return;
+
+ //there is no target
+ timer = setTimeout(function(){
+
+ drag_mode = true;
+ var target = source.target;
+ if (target && target.className && target.className.indexOf("dhx_body") != -1)
+ target = target.previousSibling;
+
+ scheduler._on_mouse_down(source, target);
+ if (scheduler._drag_mode && scheduler._drag_mode != "create"){
+ var pos = -1;
+ scheduler.for_rendered(scheduler._drag_id, function(node, i) {
+ pos = node.getBoundingClientRect().top;
+ node.style.display='none';
+ scheduler._rendered.splice(i, 1);
+ });
+ if (pos>=0){
+ var step = scheduler.config.time_step;
+ scheduler._move_pos_shift = step* Math.round((fake_event.pageY - pos)*60/(scheduler.config.hour_size_px*step));
+ }
+ }
+
+ if (scheduler.config.touch_tip)
+ scheduler._show_global_tip();
+ scheduler._on_mouse_move(source);
+ },scheduler.config.touch_drag);
+
+ source = fake_event;
+ });
+ function drag_cancel(e){
+ scheduler._hide_global_tip();
+ if (drag_mode){
+ scheduler._on_mouse_up( accessor(e||event) );
+ scheduler._temp_touch_block = false;
+ }
+ scheduler._drag_id = null;
+ scheduler._drag_mode=null;
+ scheduler._drag_pos=null;
+
+ clearTimeout(timer);
+ drag_mode = action_mode = false;
+ scroll_mode = true;
+ }
+ attachTouchEvent(this._els["dhx_cal_data"][0], names[2], function(e){
+ if (ignore(e)) return;
+
+ if (!drag_mode)
+ check_direction_swipe(source, tracker, 200);
+
+ if (drag_mode)
+ scheduler._ignore_next_click = true;
+
+ drag_cancel(e);
+ if (scheduler._block_next_stop){
+ scheduler._block_next_stop = false;
+ if (e.preventDefault)
+ e.preventDefault();
+ e.cancelBubble = true;
+ return false;
+ }
+ });
+
+ dhtmlxEvent(document.body, names[2], drag_cancel);
+};
+
+scheduler._show_global_tip = function(){
+ scheduler._hide_global_tip();
+
+ var toptip = scheduler._global_tip = document.createElement("DIV");
+ toptip.className='dhx_global_tip';
+
+ scheduler._update_global_tip(1);
+
+ document.body.appendChild(toptip);
+};
+scheduler._update_global_tip = function(init){
+ var toptip = scheduler._global_tip;
+ if (toptip){
+ var time = "";
+ if (scheduler._drag_id && !init){
+ var ev = scheduler.getEvent(scheduler._drag_id);
+ if (ev)
+ time = "<div>" + (ev._timed ? scheduler.templates.event_header(ev.start_date, ev.end_date, ev):scheduler.templates.day_date(ev.start_date, ev.end_date, ev)) + "</div>";
+ }
+
+ if (scheduler._drag_mode == "create" || scheduler._drag_mode == "new-size")
+ toptip.innerHTML = (scheduler.locale.drag_to_create || "Drag to create")+time;
+ else
+ toptip.innerHTML = (scheduler.locale.drag_to_move || "Drag to move")+time;
+ }
+};
+scheduler._hide_global_tip = function(){
+ var toptip = scheduler._global_tip;
+ if (toptip && toptip.parentNode){
+ toptip.parentNode.removeChild(toptip);
+ scheduler._global_tip = 0;
+ }
+};
+
+scheduler._dp_init=function(dp){
+ dp._methods=["_set_event_text_style","","changeEventId","_dp_hook_delete"];
+
+ this._dp_hook_delete = function(id){
+ return this.deleteEvent(id, true);
+ };
+ this.attachEvent("onEventAdded",function(id){
+ if (!this._loading && this._validId(id))
+ dp.setUpdated(id,true,"inserted");
+ });
+ this.attachEvent("onConfirmedBeforeEventDelete", function(id){
+ if (!this._validId(id)) return;
+ var z=dp.getState(id);
+
+ if (z=="inserted" || this._new_event) { dp.setUpdated(id,false); return true; }
+ if (z=="deleted") return false;
+ if (z=="true_deleted") return true;
+
+ dp.setUpdated(id,true,"deleted");
+ return false;
+ });
+ this.attachEvent("onEventChanged",function(id){
+ if (!this._loading && this._validId(id))
+ dp.setUpdated(id,true,"updated");
+ });
+
+ dp._getRowData=function(id,pref){
+ var ev=this.obj.getEvent(id);
+ var data = {};
+
+ for (var a in ev){
+ if (a.indexOf("_") === 0) continue;
+ if (ev[a] && ev[a].getUTCFullYear) //not very good, but will work
+ data[a] = this.obj.templates.xml_format(ev[a]);
+ else
+ data[a] = ev[a];
+ }
+
+ return data;
+ };
+ dp._clearUpdateFlag=function(){};
+
+ dp.attachEvent("insertCallback", scheduler._update_callback);
+ dp.attachEvent("updateCallback", scheduler._update_callback);
+ dp.attachEvent("deleteCallback", function(upd, id) {
+ this.obj.setUserData(id, this.action_param, "true_deleted");
+ this.obj.deleteEvent(id);
+ });
+
+};
+
+scheduler._validId=function(id){
+ return true;
+};
+
+scheduler.setUserData=function(id,name,value){
+ if (id)
+ this.getEvent(id)[name]=value;
+ else
+ this._userdata[name]=value;
+};
+scheduler.getUserData=function(id,name){
+ return id?this.getEvent(id)[name]:this._userdata[name];
+};
+scheduler._set_event_text_style=function(id,style){
+ this.for_rendered(id,function(r){
+ r.style.cssText+=";"+style;
+ });
+ var ev = this.getEvent(id);
+ ev["_text_style"]=style;
+ this.event_updated(ev);
+};
+
+scheduler._update_callback = function(upd,id){
+ var data = scheduler._xmlNodeToJSON(upd.firstChild);
+ data.text = data.text||data._tagvalue;
+ data.start_date = scheduler.templates.xml_date(data.start_date);
+ data.end_date = scheduler.templates.xml_date(data.end_date);
+
+ scheduler.addEvent(data);
+};
+scheduler._skin_settings = {
+ fix_tab_position: [1,0],
+ use_select_menu_space: [1,0],
+ wide_form: [1,0],
+
+ hour_size_px: [44,42],
+ displayed_event_color: ["#ff4a4a", "ffc5ab"],
+ displayed_event_text_color: ["#ffef80", "7e2727"]
+};
+
+scheduler._skin_xy = {
+ lightbox_additional_height: [90,50],
+ nav_height: [59,22],
+ bar_height: [24,20]
+};
+
+scheduler._configure = function(col, data, skin){
+ for (var key in data)
+ if (typeof col[key] == "undefined")
+ col[key] = data[key][skin];
+};
+scheduler._skin_init = function(){
+ if (!scheduler.skin){
+ var links = document.getElementsByTagName("link");
+ for (var i = 0; i < links.length; i++) {
+ var res = links[i].href.match("dhtmlxscheduler_([a-z]+).css");
+ if (res){
+ scheduler.skin = res[1];
+ break;
+ }
+ }
+ }
+
+
+
+ var set = 0;
+ if (scheduler.skin && (scheduler.skin === "classic" || scheduler.skin === "glossy")) set = 1;
+
+ //apply skin related settings
+ this._configure(scheduler.config, scheduler._skin_settings, set);
+ this._configure(scheduler.xy, scheduler._skin_xy, set);
+
+ //classic skin need not any further customization
+ if (set) return;
+
+
+ var minic = scheduler.config.minicalendar;
+ if (minic) minic.padding = 14;
+
+ scheduler.templates.event_bar_date = function(start,end,ev) {
+ return "• <b>"+scheduler.templates.event_date(start)+"</b> ";
+ };
+
+ //scheduler._lightbox_template="<div class='dhx_cal_ltitle'><span class='dhx_mark'>&nbsp;</span><span class='dhx_time'></span><span class='dhx_title'></span><div class='dhx_close_icon'></div></div><div class='dhx_cal_larea'></div>";
+ scheduler.attachEvent("onTemplatesReady", function() {
+
+ var date_to_str = scheduler.date.date_to_str("%d");
+ if(!scheduler.templates._old_month_day){
+ scheduler.templates._old_month_day = scheduler.templates.month_day;
+ }
+ var old_month_day = scheduler.templates._old_month_day;
+ scheduler.templates.month_day = function(date) {
+ if (this._mode == "month") {
+ var label = date_to_str(date);
+ if (date.getDate() == 1) {
+ label = scheduler.locale.date.month_full[date.getMonth()] + " " + label;
+ }
+ if (+date == +scheduler.date.date_part(new Date())) {
+ label = scheduler.locale.labels.dhx_cal_today_button + " " + label;
+ }
+ return label;
+ } else {
+ return old_month_day.call(this, date);
+ }
+ };
+
+
+ if (scheduler.config.fix_tab_position){
+ var navline_divs = scheduler._els["dhx_cal_navline"][0].getElementsByTagName('div');
+ var minical = null;
+ var tabs = [];
+ var last = 211;
+ for (var i=0; i<navline_divs.length; i++) {
+ var div = navline_divs[i];
+ var name = div.getAttribute("name");
+ if (name) { // mode tab
+ div.style.right = "auto";
+ switch (name) {
+ case "day_tab":
+ div.style.left = "14px";
+ div.className += " dhx_cal_tab_first";
+ break;
+ case "week_tab":
+ div.style.left = "75px";
+ break;
+ case "month_tab":
+ div.style.left = "136px";
+ div.className += " dhx_cal_tab_last";
+ break;
+ default:
+ div.style.left = last+"px";
+ div.className += " dhx_cal_tab_standalone";
+ last = last + 14 + div.offsetWidth;
+ break;
+ }
+ }else{
+ if((div.className || "").indexOf("dhx_minical_icon") === 0 &&
+ div.parentNode == scheduler._els["dhx_cal_navline"][0]){
+ // if default minicalendar icon
+ minical = div;
+ }
+ }
+
+ }
+
+ if(minical){
+ minical.style.left = last+"px";
+ }
+ }
+
+ if (scheduler.skin && scheduler.skin === "flat"){
+ scheduler.xy.scale_height = 35;
+ scheduler.templates.hour_scale = function(date){
+ var min = date.getMinutes();
+ min = min < 10 ? "0"+min : min;
+ var html = "<span class='dhx_scale_h'>"+ date.getHours() +"</span>"+
+ "<span class='dhx_scale_m'>&nbsp;"+ min +"</span>";
+ return html;
+ };
+ }
+ });
+ scheduler._skin_init = function(){};
+};
+
+
+if (window.jQuery){
+
+(function( $ ){
+
+ var methods = [];
+ $.fn.dhx_scheduler = function(config){
+ if (typeof(config) === 'string') {
+ if (methods[config] ) {
+ return methods[config].apply(this, []);
+ }else {
+ $.error('Method ' + config + ' does not exist on jQuery.dhx_scheduler');
+ }
+ } else {
+ var views = [];
+ this.each(function() {
+ if (this && this.getAttribute){
+ if (!this.getAttribute("dhxscheduler")){
+ for (var key in config)
+ if (key!="data")
+ scheduler.config[key] = config[key];
+
+ if (!this.getElementsByTagName("div").length){
+ this.innerHTML = '<div class="dhx_cal_navline"><div class="dhx_cal_prev_button">&nbsp;</div><div class="dhx_cal_next_button">&nbsp;</div><div class="dhx_cal_today_button"></div><div class="dhx_cal_date"></div><div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div><div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div><div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div></div><div class="dhx_cal_header"></div><div class="dhx_cal_data"></div>';
+ this.className += " dhx_cal_container";
+ }
+ scheduler.init(this, scheduler.config.date, scheduler.config.mode);
+ if (config.data)
+ scheduler.parse(config.data);
+
+ views.push(scheduler);
+ }
+ }
+ });
+
+ if (views.length === 1) return views[0];
+ return views;
+ }
+ };
+
+
+
+
+})(jQuery);
+
+} \ No newline at end of file
diff --git a/codebase/sources/dhtmlxscheduler.js.map b/codebase/sources/dhtmlxscheduler.js.map
new file mode 100644
index 0000000..8ab2925
--- /dev/null
+++ b/codebase/sources/dhtmlxscheduler.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler.js.map","sources":["dhtmlxscheduler.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","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","dhtmlxEventable","dhtmlXScheduler","scheduler","version","dhtmlx","obj","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","detachEvent","list","detachAllEvents","config","usercall","modality","_dhx_msg_cfg","modal_key","code","which","keyCode","message","keyboard","cancelBubble","cover","onkeydown","className","scrollHeight","display","text","css","button_css","info","area","position","hide","onclick","insertBefore","expire","timers","setTimeout","pull","_boxStructure","ok","cancel","setAttribute","inner","width","height","title","content","ok_text","locale","labels","message_ok","undefined","cancel_text","message_cancel","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","setTransactionMode","total","_tSend","escape","data","_utf","encodeURIComponent","setDataColumns","val","_columns","getSyncState","enableDataNames","_endnm","enablePartialDataSend","_changed","setUpdateMode","dnd","ignore","master","_silent_mode","setUpdated","rowId","state","ind","findRow","existing","getUserData","set_invalid","setUserData","is_invalid","splice","_clearUpdateFlag","markRow","sendData","_methods","details","getState","toString","checkBeforeUpdate","mytype","_h2","editStop","sendAllData","_beforeSendData","_getRowData","_sendData","serialize","serialize_one","stack","keys","hasOwnProperty","join","security_key","pref","a1","a2","afterUpdate","a3","_user","valid","_getAllData","out","has_one","setVerificator","verifFunction","clearVerificator","pattern","defineAction","_uActions","afterUpdateCallback","sid","tid","action","btag","marker","correct","soid","d","atag","finalizeUpdate","init","anObj","_dp_init","setOnAfterUpdate","enableDebug","setOnBeforeUpdateHandler","func","setAutoUpdate","interval","user","_need_update","_loader","_update_busy","xml_node","afterAutoUpdate","fullSync","self","setInterval","loadUpdate","getUpdates","_v","_a","arr","vers","upds","status","dhtmlXGridObject","_init_point_connector","_init_point","clear_url","hdr","rows","combine_urls","_connector_sorting","_connector_filter","sorting_url","dir","filtering_url","inds","vals","_con_f_used","xmlFileUrl","clearAndLoad","setSortImgState","_in_header_connector_text_filter","_in_header_text_filter","_in_header_connector_select_filter","_in_header_select_filter","load_connector","load","concat","_colls_loaded","cellType","ar","_parseHead_connector","_parseHead","cols","xmlLoader","f","v","combo","getColumnCombo","getCombo","os","lab","addOption","put","init_original","_dataprocessor","_detachDomEvent","removeEventListener","_init_once","getWindowSize","w","clientWidth","h","clientHeight","equals","oldSize","newSize","_resize_timer","update_view","date","_currentDate","_obj","unset_actions","_skin_init","_els","_scroll","_quirks","_quirks7","get_elements","init_templates","set_actions","_init_touch_events","set_sizes","setCurrentView","xy","min_event_height","scale_width","scroll_width","scale_height","month_scale_height","menu_width","margin_top","margin_left","editor_width","month_head_height","edit_save","edit_cancel","_x","_y","scale_x","_table_view","scale_s","set_xy","nav_height","actual_height","data_y","max","els","class_name","attr_value","label","_click","ondblclick","oncontextmenu","_temp_touch_block","_on_mouse_move","_ignore_next_click","_on_mouse_down","_on_mouse_up","_on_dbl_click","src","returnValue","_locate_event","select","_select_id","unselect","updateEvent","getEvent","_mode","_date","min_date","_min_date","max_date","_max_date","editor_id","_edit_id","lightbox_id","_lightbox_id","new_event","_new_event","select_id","expanded","drag_id","_drag_id","drag_mode","_drag_mode","dhx_cal_data","trg","readonly","getActionData","mask","_close_not_saved","dhx_cal_prev_button","dhx_cal_next_button","dummy","step","add","dhx_cal_today_button","dhx_cal_tab","substring","search","delete","confirm_deleting","_dhtmlx_confirm","title_confirm_deleting","deleteEvent","edit","save","showLightbox","opts","addEventNow","start","end","base","constructor","match","event_duration","time_step","start_date","start_hour","first_hour","getHours","setHours","end_date","setTime","_loading","_drag_event","dblclick_create","details_on_dblclick","_timed","_get_column_index","x_pos","column","_cols","_ignores","_week_indexes_from_pos","pos","min","ceil","hour_size_px","_mouse_coords","pageX","pageY","_dy_shift","_colsS","dy","heights","_ignores_detected","preserve_length","_event_length","_get_real_event_length","x_step","x_unit","confirm_closing","title_confirm_closing","positive_closing","_correct_shift","back","getTimezoneOffset","_drag_pos","force_redraw","_get_date_from_pos","_drag_start","getMinutes","fields","_move_pos_shift","custom","time_part","matrix","_get_fictional_event_length","resize_date","_drag_from_start","day","date_part","resize_from_start","cursor","shift","new_end","new_start","limit_drag_out","duration","_get_event_sday","last_hour","getDate","_allow_dnd","update_render","sx","for_rendered","r","classname","_lame_clone","_get_private_properties","_clear_temporary_properties","clean","flagged_event","initial","current_state","touch","_dhx_changed","is_new","edit_on_create","details_on_create","_lame_copy","render_view_data","_trigger_dyn_loading","_load_mode","_load","_render_wait","view","_reset_scale","isViewExists","templates","updateView","prev_scroll","preserve_scroll","dhx_multi_day","tabs","_render_x_header","head","left_border","_get_columns_num","from","to","count_n","_get_timeunit_start","_get_view_end","dd","ed","_calc_scale_sizes","summ","_process_ignores","realcount","_set_scale_col_size","_render_scales","header","data_area","sd","today","scales","cls","week_date_class","drag_resize","drag_move","_scales","week_start","_reset_month_scale","_reset_hours_scale","multi_day","navline","c1","visibility","col_length","c2","cc","hour_scale","scroll_hour","now_date","preserve","ign_date","_render_month_scale","getCellHeight","row","view_start","cd","tdcss","cell_width","cellheight","html","rendered_dates","row_height","month_date_class","body_class","head_class","month_day","bf1","getFullYear","getMonth","divs","getLabel","property","sections","lightbox","map_to","options","updateCollection","list_name","collection","serverList","resetLightbox","cache","Number","String","Boolean","Object","n_ev","section","_focus","fd","end_slot","ev_length","hours","_start_correction","_end_correction","start_slot","render","_get_date_index","per_day","days","_get_section_view","_props","_get_section_property","y_property","_is_initialized","_is_lightbox_open","s","month_short","month_short_hash","month_full","month_full_hash","setMinutes","setSeconds","setMilliseconds","getTime","getDay","start_on_monday","month_start","setDate","year_start","setMonth","day_start","_add_days","inc","ndate","setYear","to_fixed","num","copy","date_to_str","format","utc","Function","str_to_date","splt","getISOWeek","nday","first_thursday","year_number","ordinal_date","week_number","getUTCISOWeek","convert_to_utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","day_full","day_short","day_tab","week_tab","month_tab","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","section_description","section_time","full_day","confirm_recurring","section_recurring","button_recurring","button_recurring_open","button_edit_series","button_edit_occurrence","agenda_tab","description","year_tab","week_agenda_tab","grid_tab","drag_to_create","drag_to_move","default_date","month_date","load_date","week_date","day_date","hour_date","xml_date","api_date","drag_create","resize_month_events","resize_month_timed","cascade_event_display","cascade_event_count","cascade_event_margin","multi_day_height_limit","drag_lightbox","server_utc","touch_tip","touch_drag","quick_info_detached","drag_highlight","icons_edit","icons_select","buttons_left","buttons_right","highlight_displayed_event","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","d1","d2","day_scale_date","month_scale_date","week_scale_date","time_picker","event_date","load_format","xml_format","event_header","event_text","event_class","event_bar_date","event_bar_text","month_events_link","drag_marker_class","drag_marker_content","_seed","_events","clearAll","_loaded","clear_view","extra_data","isOneDayEvent","event_updated","setEvent","hash","method","_rendered","changeEventId","new_id","attrs","create_getter","create_setter","is_visible_events","clear_event","in_visible_range","end_dates_visible","hidden_duration","delta","get_visible_events","only_timed","filter_event","filter","_is_main_area_event","evs","hold","_not_render","len","_recalculate_timed","tvs","tvd","_rendered_location","render_data","_view_month_day","_render_month_link","toRender","_sday","_eday","curr","_sweek","getEvents","_get_event_bar_pos","widt","x2","_pre_render_events","render_event_bar","max_evs","max_month_events","_sorder","render_event","hb","bar_height","h_old","_pre_render_events_table","_pre_render_events_line","evl","cellHeight","cells","cHeight","unshift","scroll_fix","scale_settings","sum_width","row_heights","slice","full_multi_day_height","used_multi_day_height","used_multi_day_height_css","multi_day_section","multi_day_icon","overflowY","_get_event_mapped_end_date","separate_short_events","ev_duration","_min_mapped_duration","sort","evs_originals","sh","eh","_inner","t_ev","t_end_date","slot_index","sorderSet","_is_sorder","k","_max_sorder","max_count","_count","_copy_event","_time_order","weeks","chunks_info","first_chunk","last_chunk","chunk_info","locate_s","locate_holder_day","locate_e","_length","stack_line","_first_chunk","_last_chunk","_copy_dummy","_y_from_date","sm","_calc_event_y","min_height","em","menu","menu_offset","locate_holder","pos_y","ev_count","ev_sorder","limit","margin","right","_render_v_bar","_text_style","zIndex","tplClass","cssText","_editor","shiftKey","icons","icons_str","bg_color","color","textColor","highlightEventPosition","contentA","contentB","bottom","cs","cse","container","renderEvent","inner_html","footer_class","past","_get_dnd_order","order","ev_height","max_height","_orig_sorder","evTop","y_event_offset","resize_handle","resizable","left_chunk","right_chunk","resize_left","resize_right","style_text","_edit_stop_event","getRenderedEvent","rendered_events","rendered_event","showEvent","original_color","original_text_color","displayed_event_color","displayed_event_text_color","_append_drag_marker","m","zone","scale","lastChild","previousSibling","_update_marker_position","size","_load_url","prevent_cache","lf","cache_line","temp_to","l","on_load","loader","_process","parse","_magic_parser","_process_loading","_after_call","_init_event","_tagvalue","_init_date","json","_temp","dhx_security","collections","collections_loaded","option","option_key","setLoadMode","array","_userdata","xml_string","skey","bind","itms","itm","attr","ud","udx","_xmlNodeToJSON","child","nodeType","show_loading","ical","RegExp","c_start","c_end","incoming","event_r","e_start","e_end","exec","param","param_r","parse_param","parse_date","dh","dm","dn","UTC","_lightbox_controls","formSection","_lightbox","getLightbox","nextSibling","getValue","form_blocks","get_value","setValue","set_value","get_template_control","control","get_select_control","get_textarea_control","get_time_control","template","sns","textarea","_dhx_onchange","onchange","time","time_format","_time_format_order","cfg","dt","last","first","limit_time_select","p","time_option","year","tdate","_time_values","diff","_fill_lightbox_select","time_values","direct_value","fixed_value","value_found","t_v","selectedIndex","_full_day","wide_form","input","checked","disabled","auto_end_date","_update_lightbox_select","showCover","scroll_top","scroll_left","view_height","scrollWidth","show_cover","_fill_lightbox","lightbox_header","current_sns","block","default_value","_lightbox_out","_empty_lightbox","hide_lightbox","hideCover","hide_cover","_cover","_document_height","_scroll_height","save_lightbox","startLightbox","_custom_lightbox","_temp_lightbox","endLightbox","cancel_lightbox","_init_lightbox_events","index","sec","button_click","setLightboxSize","con","lightbox_additional_height","_init_dnd_events","_move_while_dnd","_finish_dnd","_dnd_start_lb","dhx_unselectable","lb","now","_lb_start","_ready_to_dnd","recurring","test","_lightbox_template","label_name","ds","t_ds","msPointerEnabled","_touch_events","pointerType","MSPOINTER_TYPE_MOUSE","touches","names","accessor","attachTouchEvent","element","check_direction_swipe","s_ev","e_ev","dx","drag_cancel","_hide_global_tip","timer","action_mode","scroll_mode","tracker","a_webkit","dblclicktime","_update_global_tip","fake_event","_block_next_stop","_show_global_tip","toptip","_global_tip","dp","_dp_hook_delete","_validId","_update_callback","upd","_set_event_text_style","_skin_settings","fix_tab_position","use_select_menu_space","_skin_xy","_configure","skin","links","href","set","minic","minicalendar","padding","_old_month_day","old_month_day","navline_divs","minical","jQuery","$","methods","fn","dhx_scheduler","views","each"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_active_links.js b/codebase/sources/ext/dhtmlxscheduler_active_links.js
new file mode 100644
index 0000000..f8a55b9
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_active_links.js
@@ -0,0 +1,43 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.config.active_link_view = "day";
+scheduler._active_link_click = function(e){
+ var start = e.target || event.srcElement;
+ var to = start.getAttribute("jump_to");
+ var s_d = scheduler.date.str_to_date(scheduler.config.api_date);
+ if (to) {
+ scheduler.setCurrentView(s_d(to), scheduler.config.active_link_view);
+ if (e && e.preventDefault)
+ e.preventDefault();
+ return false;
+ }
+};
+scheduler.attachEvent("onTemplatesReady", function() {
+ var do_wrapper = function(key, fullname){
+ fullname = fullname || (key+"_scale_date");
+
+ if(!scheduler.templates['_active_links_old_'+ fullname]){
+ scheduler.templates['_active_links_old_'+ fullname] = scheduler.templates[fullname];
+ }
+ var week_x = scheduler.templates['_active_links_old_'+ fullname];
+ var d_s = scheduler.date.date_to_str(scheduler.config.api_date);
+ scheduler.templates[fullname] = function(date) {
+ return "<a jump_to='" + d_s(date) + "' href='#'>" + week_x(date) + "</a>";
+ };
+ };
+
+ do_wrapper("week");
+ do_wrapper("", "month_day");
+ if (this.matrix){
+ for (var key in this.matrix)
+ do_wrapper(key);
+ }
+
+ this._detachDomEvent(this._obj, "click", scheduler._active_link_click);
+ dhtmlxEvent(this._obj, "click", scheduler._active_link_click);
+}); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_active_links.js.map b/codebase/sources/ext/dhtmlxscheduler_active_links.js.map
new file mode 100644
index 0000000..d1bc8a7
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_active_links.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_active_links.js.map","sources":["dhtmlxscheduler_active_links.js"],"names":["scheduler","config","active_link_view","_active_link_click","e","start","target","event","srcElement","to","getAttribute","s_d","date","str_to_date","api_date","setCurrentView","preventDefault","attachEvent","do_wrapper","key","fullname","templates","week_x","d_s","date_to_str","this","matrix","_detachDomEvent","_obj","dhtmlxEvent"],"mappings":"AAAAA,UAAUC,OAAOC,iBAAmB,MACpCF,UAAUG,mBAAqB,SAASC,GACvC,GAAIC,GAAQD,EAAEE,QAAUC,MAAMC,WAC1BC,EAAKJ,EAAMK,aAAa,WACxBC,EAAMX,UAAUY,KAAKC,YAAYb,UAAUC,OAAOa,SACtD,OAAIL,IACHT,UAAUe,eAAeJ,EAAIF,GAAKT,UAAUC,OAAOC,kBAC/CE,GAAKA,EAAEY,gBACVZ,EAAEY,kBACI,GAJR,QAODhB,UAAUiB,YAAY,mBAAoB,WACzC,GAAIC,GAAa,SAASC,EAAKC,GAC9BA,EAAWA,GAAaD,EAAI,cAExBnB,UAAUqB,UAAU,qBAAsBD,KAC7CpB,UAAUqB,UAAU,qBAAsBD,GAAYpB,UAAUqB,UAAUD,GAE3E;GAAIE,GAAStB,UAAUqB,UAAU,qBAAsBD,GACnDG,EAAMvB,UAAUY,KAAKY,YAAYxB,UAAUC,OAAOa,SACtDd,WAAUqB,UAAUD,GAAY,SAASR,GACxC,MAAO,eAAiBW,EAAIX,GAAQ,cAAgBU,EAAOV,GAAQ,QAMrE,IAFAM,EAAW,QACXA,EAAW,GAAI,aACXO,KAAKC,OACR,IAAK,GAAIP,KAAOM,MAAKC,OACpBR,EAAWC,EAGbM,MAAKE,gBAAgBF,KAAKG,KAAM,QAAS5B,UAAUG,oBACnD0B,YAAYJ,KAAKG,KAAM,QAAS5B,UAAUG"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_agenda_view.js b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js
new file mode 100644
index 0000000..18d791b
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js
@@ -0,0 +1,123 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.date.add_agenda = function(date){
+ return scheduler.date.add(date, 1, "year");
+};
+
+scheduler.templates.agenda_time = function(start,end,ev){
+ if (ev._timed)
+ return this.day_date(ev.start_date, ev.end_date, ev)+" "+this.event_date(start);
+ else
+ return scheduler.templates.day_date(start)+" &ndash; "+scheduler.templates.day_date(end);
+};
+scheduler.templates.agenda_text = function(start,end,event){
+ return event.text;
+};
+scheduler.templates.agenda_date = function(){ return ""; };
+
+scheduler.date.agenda_start=function(){ return scheduler.date.date_part(scheduler._currentDate()); };
+
+scheduler.attachEvent("onTemplatesReady",function() {
+ var old_dblclick_dhx_cal_data = scheduler.dblclick_dhx_cal_data;
+ scheduler.dblclick_dhx_cal_data = function() {
+ if (this._mode == "agenda") {
+ if (!this.config.readonly && this.config.dblclick_create)
+ this.addEventNow();
+ } else {
+ if (old_dblclick_dhx_cal_data)
+ return old_dblclick_dhx_cal_data.apply(this, arguments);
+ }
+ };
+ scheduler.attachEvent("onSchedulerResize",function(){
+ if (this._mode == "agenda"){
+ this.agenda_view(true);
+ return false;
+ }
+ return true;
+ });
+
+
+ var old = scheduler.render_data;
+ scheduler.render_data=function(evs){
+ if (this._mode == "agenda")
+ fill_agenda_tab();
+ else
+ return old.apply(this,arguments);
+ };
+
+ var old_render_view_data = scheduler.render_view_data;
+ scheduler.render_view_data = function(){
+ if(this._mode == "agenda") {
+ scheduler._agendaScrollTop = scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop;
+ scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = 0;
+ }
+ return old_render_view_data.apply(this,arguments);
+ };
+
+
+ function set_full_view(mode){
+ if (mode){
+ var l = scheduler.locale.labels;
+ scheduler._els["dhx_cal_header"][0].innerHTML="<div class='dhx_agenda_line'><div>"+l.date+"</div><span style='padding-left:25px'>"+l.description+"</span></div>";
+ scheduler._table_view=true;
+ scheduler.set_sizes();
+ }
+ }
+
+ function fill_agenda_tab(){
+ //get current date
+ var date = scheduler._date;
+ //select events for which data need to be printed
+
+ var events = scheduler.get_visible_events();
+ events.sort(function(a,b){ return a.start_date>b.start_date?1:-1;});
+
+ //generate html for the view
+ var html="<div class='dhx_agenda_area'>";
+ for (var i=0; i<events.length; i++){
+ var ev = events[i];
+ var bg_color = (ev.color?("background:"+ev.color+";"):"");
+ var color = (ev.textColor?("color:"+ev.textColor+";"):"");
+ var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev);
+ html+="<div class='dhx_agenda_line"+(ev_class?' '+ev_class:'')+"' event_id='"+ev.id+"' style='"+color+""+bg_color+""+(ev._text_style||"")+"'><div class='dhx_agenda_event_time'>"+scheduler.templates.agenda_time(ev.start_date, ev.end_date,ev)+"</div>";
+ html+="<div class='dhx_event_icon icon_details'>&nbsp</div>";
+ html+="<span>"+scheduler.templates.agenda_text(ev.start_date, ev.end_date, ev)+"</span></div>";
+ }
+ html+="<div class='dhx_v_border'></div></div>";
+
+ //render html
+ scheduler._els["dhx_cal_data"][0].innerHTML = html;
+ scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = scheduler._agendaScrollTop||0;
+
+ // setting up dhx_v_border size
+ var agenda_area = scheduler._els["dhx_cal_data"][0].childNodes[0];
+ var v_border = agenda_area.childNodes[agenda_area.childNodes.length-1];
+ v_border.style.height = (agenda_area.offsetHeight < scheduler._els["dhx_cal_data"][0].offsetHeight) ? "100%" : (agenda_area.offsetHeight+"px");
+
+ var t=scheduler._els["dhx_cal_data"][0].firstChild.childNodes;
+ scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates.agenda_date(scheduler._min_date, scheduler._max_date, scheduler._mode);
+
+ scheduler._rendered=[];
+ for (var i=0; i < t.length-1; i++)
+ scheduler._rendered[i]=t[i];
+
+ }
+
+ scheduler.agenda_view=function(mode){
+ scheduler._min_date = scheduler.config.agenda_start||scheduler.date.agenda_start(scheduler._date);
+ scheduler._max_date = scheduler.config.agenda_end||scheduler.date.add_agenda(scheduler._min_date, 1);
+ scheduler._table_view = true;
+ set_full_view(mode);
+ if (mode){
+ //agenda tab activated
+ fill_agenda_tab();
+ } else {
+ //agenda tab de-activated
+ }
+ };
+});
diff --git a/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map
new file mode 100644
index 0000000..c7e5d0b
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_agenda_view.js.map","sources":["dhtmlxscheduler_agenda_view.js"],"names":["scheduler","date","add_agenda","add","templates","agenda_time","start","end","ev","_timed","this","day_date","start_date","end_date","event_date","agenda_text","event","text","agenda_date","agenda_start","date_part","_currentDate","attachEvent","set_full_view","mode","l","locale","labels","_els","innerHTML","description","_table_view","set_sizes","fill_agenda_tab","events","_date","get_visible_events","sort","a","b","html","i","length","bg_color","color","textColor","ev_class","event_class","id","_text_style","childNodes","scrollTop","_agendaScrollTop","agenda_area","v_border","style","height","offsetHeight","t","firstChild","_min_date","_max_date","_mode","_rendered","old_dblclick_dhx_cal_data","dblclick_dhx_cal_data","config","readonly","dblclick_create","addEventNow","apply","arguments","agenda_view","old","render_data","old_render_view_data","render_view_data","agenda_end"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_all_timed.js b/codebase/sources/ext/dhtmlxscheduler_all_timed.js
new file mode 100644
index 0000000..2bb81fe
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_all_timed.js
@@ -0,0 +1,148 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function(){
+
+ scheduler.config.all_timed = "short";
+
+ var is_event_short = function (ev) {
+ return !((ev.end_date - ev.start_date)/(1000*60*60) >= 24);
+ };
+
+ // copy of usual events and recurring instances;
+ // regular copy causes problems with recurrings which have series event as a prototype
+ scheduler._safe_copy = function(event){
+ var proto = null,
+ copy = null;
+ if(event.event_pid){
+ proto = scheduler.getEvent(event.event_pid);
+ }
+
+ if (proto && proto.isPrototypeOf(event)) {
+ copy = scheduler._copy_event(event);
+ delete copy.event_length;
+ delete copy.event_pid;
+ delete copy.rec_pattern;
+ delete copy.rec_type;
+ } else {
+ copy = scheduler._lame_clone(event);
+ }
+ return copy;
+ };
+
+ var old_prerender_events_line = scheduler._pre_render_events_line;
+ scheduler._pre_render_events_line = function(evs, hold){
+ if (!this.config.all_timed)
+ return old_prerender_events_line.call(this, evs, hold);
+
+ for (var i=0; i < evs.length; i++) {
+ var ev=evs[i];
+
+ if (ev._timed)
+ continue;
+
+ if (this.config.all_timed == "short") {
+ if (!is_event_short(ev)) {
+ evs.splice(i--,1);
+ continue;
+ }
+ }
+
+ var ce = this._safe_copy(ev); // current event (event for one specific day) is copy of original with modified dates
+
+ ce.start_date = new Date(ce.start_date); // as lame copy doesn't copy date objects
+
+ if (!isOvernightEvent(ev)) {
+ ce.end_date = new Date(ev.end_date);
+ }
+ else {
+ ce.end_date = getNextDay(ce.start_date);
+ if (this.config.last_hour != 24) { // if specific last_hour was set (e.g. 20)
+ ce.end_date = setDateTime(ce.start_date, this.config.last_hour);
+ }
+ }
+
+ var event_changed = false;
+ if (ce.start_date < this._max_date && ce.end_date > this._min_date && ce.start_date < ce.end_date) {
+ evs[i] = ce; // adding another event in collection
+ event_changed = true;
+ }
+ // if (ce.start_date > ce.end_date) {
+ // evs.splice(i--,1);
+ // }
+
+ var re = this._safe_copy(ev); // remaining event, copy of original with modified start_date (making range more narrow)
+ re.end_date = new Date(re.end_date);
+ if (re.start_date < this._min_date)
+ re.start_date = setDateTime(this._min_date, this.config.first_hour);// as we are starting only with whole hours
+ else
+ re.start_date = setDateTime(getNextDay(ev.start_date), this.config.first_hour);
+
+ if (re.start_date < this._max_date && re.start_date < re.end_date) {
+ if (event_changed)
+ evs.splice(i+1,0,re);//insert part
+ else {
+ evs[i--] = re;
+ continue;
+ }
+ }
+
+ }
+ // in case of all_timed pre_render is not applied to the original event
+ // so we need to force redraw in case of dnd
+ var redraw = (this._drag_mode == 'move')?false:hold;
+ return old_prerender_events_line.call(this, evs, redraw);
+
+
+ function isOvernightEvent(ev){
+ var next_day = getNextDay(ev.start_date);
+ return (+ev.end_date > +next_day);
+ }
+ function getNextDay(date){
+ var next_day = scheduler.date.add(date, 1, "day");
+ next_day = scheduler.date.date_part(next_day);
+ return next_day;
+ }
+ function setDateTime(date, hours){
+ var val = scheduler.date.date_part(new Date(date));
+ val.setHours(hours);
+ return val;
+ }
+ };
+ var old_get_visible_events = scheduler.get_visible_events;
+ scheduler.get_visible_events = function(only_timed){
+ if (!(this.config.all_timed && this.config.multi_day))
+ return old_get_visible_events.call(this, only_timed);
+ return old_get_visible_events.call(this, false); // only timed = false
+ };
+ scheduler.attachEvent("onBeforeViewChange", function (old_mode, old_date, mode, date) {
+ scheduler._allow_dnd = (mode == "day" || mode == "week");
+ return true;
+ });
+
+ scheduler._is_main_area_event = function(ev){
+ return !!(ev._timed || this.config.all_timed === true || (this.config.all_timed == "short" && is_event_short(ev)) );
+ };
+
+ var oldUpdate = scheduler.updateEvent;
+ scheduler.updateEvent = function(id){
+ // full redraw(update_render=true) messes events order while dnd.
+ // individual redraw(update_render=false) of multiday event, which happens on select/unselect, expands event to full width of the cell and can be fixes only with full redraw.
+ // so for now full redraw is always enabled for not-dnd updates
+ var fullRedrawNeeded = (scheduler.config.all_timed && !(scheduler.isOneDayEvent(scheduler._events[id]) || scheduler.getState().drag_id));
+ var initial;
+ if(fullRedrawNeeded){
+ initial = scheduler.config.update_render;
+ scheduler.config.update_render = true;
+ }
+ oldUpdate.apply(scheduler, arguments);
+
+ if(fullRedrawNeeded){
+ scheduler.config.update_render = initial;
+ }
+ };
+})(); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map b/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map
new file mode 100644
index 0000000..e5589ea
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_all_timed.js.map","sources":["dhtmlxscheduler_all_timed.js"],"names":["scheduler","config","all_timed","is_event_short","ev","end_date","start_date","_safe_copy","event","proto","copy","event_pid","getEvent","isPrototypeOf","_copy_event","event_length","rec_pattern","rec_type","_lame_clone","old_prerender_events_line","_pre_render_events_line","evs","hold","isOvernightEvent","next_day","getNextDay","date","add","date_part","setDateTime","hours","val","Date","setHours","this","call","i","length","_timed","ce","last_hour","event_changed","_max_date","_min_date","re","first_hour","splice","redraw","_drag_mode","old_get_visible_events","get_visible_events","only_timed","multi_day","attachEvent","old_mode","old_date","mode","_allow_dnd","_is_main_area_event","oldUpdate","updateEvent","id","initial","fullRedrawNeeded","isOneDayEvent","_events","getState","drag_id","update_render","apply","arguments"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_collision.js b/codebase/sources/ext/dhtmlxscheduler_collision.js
new file mode 100644
index 0000000..ce79a4a
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_collision.js
@@ -0,0 +1,131 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function(){
+
+var temp_section;
+var before;
+
+scheduler.config.collision_limit = 1;
+
+function _setTempSection(event_id) { // for custom views (matrix, timeline, units)
+ var checked_mode = scheduler._get_section_view();
+ if(checked_mode && event_id){
+ temp_section = scheduler.getEvent(event_id)[scheduler._get_section_property()];
+ }
+}
+
+scheduler.attachEvent("onBeforeDrag",function(id){
+ _setTempSection(id);
+ return true;
+});
+scheduler.attachEvent("onBeforeLightbox",function(id){
+ var ev = scheduler.getEvent(id);
+ before = [ev.start_date, ev.end_date];
+ _setTempSection(id);
+ return true;
+});
+scheduler.attachEvent("onEventChanged",function(id){
+ if (!id || !scheduler.getEvent(id)) return true;
+ var ev = scheduler.getEvent(id);
+ if (!scheduler.checkCollision(ev)){
+ if (!before) return false;
+ ev.start_date = before[0];
+ ev.end_date = before[1];
+ ev._timed=this.isOneDayEvent(ev);
+ }
+ return true;
+});
+scheduler.attachEvent("onBeforeEventChanged",function(ev,e,is_new){
+ return scheduler.checkCollision(ev);
+});
+scheduler.attachEvent("onEventAdded",function(id,ev) {
+ var result = scheduler.checkCollision(ev);
+ if (!result)
+ scheduler.deleteEvent(id);
+});
+scheduler.attachEvent("onEventSave",function(id, edited_ev, is_new){
+ edited_ev = scheduler._lame_clone(edited_ev);
+ edited_ev.id = id;
+
+ //lightbox may not have 'time' section
+ if(!(edited_ev.start_date && edited_ev.end_date)){
+ var ev = scheduler.getEvent(id);
+ edited_ev.start_date = new Date(ev.start_date);
+ edited_ev.end_date = new Date(ev.end_date);
+ }
+
+ if(edited_ev.rec_type){
+ scheduler._roll_back_dates(edited_ev);
+ }
+ return scheduler.checkCollision(edited_ev); // in case user creates event on one date but then edited it another
+});
+
+scheduler._check_sections_collision = function(first, second){
+ var map_to = scheduler._get_section_property();
+ if (first[map_to] == second[map_to] && first.id != second.id)
+ return true;
+ return false;
+};
+
+scheduler.checkCollision = function(ev) {
+ var evs = [];
+ var collision_limit = scheduler.config.collision_limit;
+
+ if (ev.rec_type) {
+ var evs_dates = scheduler.getRecDates(ev);
+ for(var k=0; k<evs_dates.length; k++) {
+ var tevs = scheduler.getEvents(evs_dates[k].start_date, evs_dates[k].end_date);
+ for(var j=0; j<tevs.length; j++) {
+ if ((tevs[j].event_pid || tevs[j].id) != ev.id )
+ evs.push(tevs[j]);
+ }
+ }
+ } else {
+ evs = scheduler.getEvents(ev.start_date, ev.end_date);
+ for (var i=0; i<evs.length; i++) {
+ if (evs[i].id == ev.id) {
+ evs.splice(i,1);
+ break;
+ }
+ }
+ }
+
+
+ var checked_mode = scheduler._get_section_view();
+ var map_to = scheduler._get_section_property();
+
+ var single = true;
+ if (checked_mode) { // custom view
+ var count = 0;
+
+ for (var i = 0; i < evs.length; i++){
+ if (evs[i].id != ev.id && this._check_sections_collision(evs[i], ev))
+ count++;
+ }
+
+ if (count >= collision_limit) {
+
+ single = false;
+ }
+ }
+ else {
+ if ( evs.length >= collision_limit )
+ single = false;
+ }
+ if (!single) {
+ var res = !scheduler.callEvent("onEventCollision",[ev,evs]);
+ if (!res) {
+ ev[map_to] = temp_section||ev[map_to]; // from _setTempSection for custom views
+ }
+ return res;
+ }
+ return single;
+
+};
+
+})();
diff --git a/codebase/sources/ext/dhtmlxscheduler_collision.js.map b/codebase/sources/ext/dhtmlxscheduler_collision.js.map
new file mode 100644
index 0000000..033f96c
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_collision.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_collision.js.map","sources":["dhtmlxscheduler_collision.js"],"names":["_setTempSection","event_id","checked_mode","scheduler","_get_section_view","temp_section","getEvent","_get_section_property","before","config","collision_limit","attachEvent","id","ev","start_date","end_date","checkCollision","_timed","this","isOneDayEvent","result","deleteEvent","edited_ev","_lame_clone","Date","rec_type","_roll_back_dates","_check_sections_collision","first","second","map_to","evs","evs_dates","getRecDates","k","length","tevs","getEvents","j","event_pid","push","i","splice","single","count","res","callEvent"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js
new file mode 100644
index 0000000..78bbcf3
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js
@@ -0,0 +1,164 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function() {
+
+ scheduler.config.container_autoresize = true;
+ scheduler.config.month_day_min_height = 90;
+
+ var old_pre_render_event = scheduler._pre_render_events;
+
+ scheduler._pre_render_events = function(evs, hold) {
+ if (!scheduler.config.container_autoresize) {
+ return old_pre_render_event.apply(this, arguments);
+ }
+
+ var hb = this.xy.bar_height;
+ var h_old = this._colsS.heights;
+ var h = this._colsS.heights = [0, 0, 0, 0, 0, 0, 0];
+ var data = this._els["dhx_cal_data"][0];
+
+ if (!this._table_view)
+ evs = this._pre_render_events_line(evs, hold); //ignore long events for now
+ else
+ evs = this._pre_render_events_table(evs, hold);
+
+ if (this._table_view) {
+ if (hold){
+ this._colsS.heights = h_old;
+ } else {
+ var evl = data.firstChild;
+ if (evl.rows) {
+ for (var i = 0; i < evl.rows.length; i++) {
+ h[i]++;
+ if ((h[i]) * hb > this._colsS.height - this.xy.month_head_height) { // 22 - height of cell's header
+ //we have overflow, update heights
+ var cells = evl.rows[i].cells;
+
+ var cHeight = this._colsS.height - this.xy.month_head_height;
+ if(this.config.max_month_events*1 !== this.config.max_month_events || h[i] <= this.config.max_month_events){
+ cHeight = h[i] * hb;
+ }else if( (this.config.max_month_events + 1) * hb > this._colsS.height - this.xy.month_head_height){
+ cHeight = (this.config.max_month_events + 1) * hb;
+ }
+
+ for (var j = 0; j < cells.length; j++) {
+ cells[j].childNodes[1].style.height = cHeight + "px";
+ }
+ h[i] = (h[i - 1] || 0) + cells[0].offsetHeight;
+ }
+ h[i] = (h[i - 1] || 0) + evl.rows[i].cells[0].offsetHeight;
+ }
+ h.unshift(0);
+ if (evl.parentNode.offsetHeight < evl.parentNode.scrollHeight && !evl._h_fix) {
+ //we have v-scroll, decrease last day cell
+
+ // NO CHECK SHOULD BE MADE ON VERTICAL SCROLL
+ }
+ } else {
+ if (!evs.length && this._els["dhx_multi_day"][0].style.visibility == "visible")
+ h[0] = -1;
+ if (evs.length || h[0] == -1) {
+ //shift days to have space for multiday events
+ var childs = evl.parentNode.childNodes;
+ var dh = ((h[0] + 1) * hb + 1) + "px"; // +1 so multiday events would have 2px from top and 2px from bottom by default
+ data.style.top = (this._els["dhx_cal_navline"][0].offsetHeight + this._els["dhx_cal_header"][0].offsetHeight + parseInt(dh, 10)) + 'px';
+ data.style.height = (this._obj.offsetHeight - parseInt(data.style.top, 10) - (this.xy.margin_top || 0)) + 'px';
+ var last = this._els["dhx_multi_day"][0];
+ last.style.height = dh;
+ last.style.visibility = (h[0] == -1 ? "hidden" : "visible");
+ last = this._els["dhx_multi_day"][1];
+ last.style.height = dh;
+ last.style.visibility = (h[0] == -1 ? "hidden" : "visible");
+ last.className = h[0] ? "dhx_multi_day_icon" : "dhx_multi_day_icon_small";
+ this._dy_shift = (h[0] + 1) * hb;
+ h[0] = 0;
+ }
+ }
+ }
+ }
+
+ return evs;
+ };
+
+ var checked_divs = ["dhx_cal_navline", "dhx_cal_header", "dhx_multi_day", "dhx_cal_data"];
+ var updateContainterHeight = function(is_repaint) {
+ var total_height = 0;
+ for (var i = 0; i < checked_divs.length; i++) {
+
+ var className = checked_divs[i];
+ var checked_div = (scheduler._els[className]) ? scheduler._els[className][0] : null;
+ var height = 0;
+ switch (className) {
+ case "dhx_cal_navline":
+ case "dhx_cal_header":
+ height = parseInt(checked_div.style.height, 10);
+ break;
+ case "dhx_multi_day":
+ height = (checked_div) ? checked_div.offsetHeight : 0;
+ if (height == 1)
+ height = 0;
+ break;
+ case "dhx_cal_data":
+ height = Math.max(checked_div.offsetHeight - 1, checked_div.scrollHeight);
+ var mode = scheduler.getState().mode;
+ if (mode == "month") {
+ if (scheduler.config.month_day_min_height && !is_repaint) {
+ var rows_length = checked_div.getElementsByTagName("tr").length;
+ height = rows_length * scheduler.config.month_day_min_height;
+ }
+ if (is_repaint) {
+ checked_div.style.height = height + "px";
+ }
+ }
+ if (scheduler.matrix && scheduler.matrix[mode]) {
+ if (is_repaint) {
+ height += 2;
+ checked_div.style.height = height + "px";
+ } else {
+ height = 2;
+ var cfg = scheduler.matrix[mode];
+ var rows = cfg.y_unit;
+ for(var r=0; r < rows.length; r++){
+ height += !rows[r].children ? cfg.dy : (cfg.folder_dy||cfg.dy);
+ }
+ }
+ }
+ if (mode == "day" || mode == "week") {
+ height += 2;
+ }
+ break;
+ }
+ total_height += height;
+ }
+ scheduler._obj.style.height = (total_height) + "px";
+
+ if (!is_repaint)
+ scheduler.updateView();
+ };
+
+ var conditionalUpdateContainerHeight = function() {
+ var mode = scheduler.getState().mode;
+
+ updateContainterHeight();
+ if ( (scheduler.matrix && scheduler.matrix[mode]) || mode == "month" ) {
+ window.setTimeout(function() {
+ updateContainterHeight(true);
+ }, 1);
+ }
+ };
+
+ scheduler.attachEvent("onViewChange", conditionalUpdateContainerHeight);
+ scheduler.attachEvent("onXLE", conditionalUpdateContainerHeight);
+ scheduler.attachEvent("onEventChanged", conditionalUpdateContainerHeight);
+ scheduler.attachEvent("onEventCreated", conditionalUpdateContainerHeight);
+ scheduler.attachEvent("onEventAdded", conditionalUpdateContainerHeight);
+ scheduler.attachEvent("onEventDeleted", conditionalUpdateContainerHeight);
+ scheduler.attachEvent("onAfterSchedulerResize", conditionalUpdateContainerHeight);
+ scheduler.attachEvent("onClearAll", conditionalUpdateContainerHeight);
+
+})(); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map
new file mode 100644
index 0000000..207513a
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_container_autoresize.js.map","sources":["dhtmlxscheduler_container_autoresize.js"],"names":["scheduler","config","container_autoresize","month_day_min_height","old_pre_render_event","_pre_render_events","evs","hold","apply","this","arguments","hb","xy","bar_height","h_old","_colsS","heights","h","data","_els","_table_view","_pre_render_events_table","_pre_render_events_line","evl","firstChild","rows","i","length","height","month_head_height","cells","cHeight","max_month_events","j","childNodes","style","offsetHeight","unshift","parentNode","scrollHeight","_h_fix","visibility","dh","top","parseInt","_obj","margin_top","last","className","_dy_shift","checked_divs","updateContainterHeight","is_repaint","total_height","checked_div","Math","max","mode","getState","rows_length","getElementsByTagName","matrix","cfg","y_unit","r","children","folder_dy","dy","updateView","conditionalUpdateContainerHeight","window","setTimeout","attachEvent"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_cookie.js b/codebase/sources/ext/dhtmlxscheduler_cookie.js
new file mode 100644
index 0000000..4420e2b
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_cookie.js
@@ -0,0 +1,73 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function(){
+ function setCookie(name,cookie_param,value) {
+ var str = name + "=" + value + (cookie_param?("; "+cookie_param):"");
+ document.cookie = str;
+ }
+ function getCookie(name) {
+ var search = name + "=";
+ if (document.cookie.length > 0) {
+ var offset = document.cookie.indexOf(search);
+ if (offset != -1) {
+ offset += search.length;
+ var end = document.cookie.indexOf(";", offset);
+ if (end == -1)
+ end = document.cookie.length;
+ return document.cookie.substring(offset, end);
+ }
+ }
+ return "";
+ }
+ var first = true;
+ scheduler.attachEvent("onBeforeViewChange",function(om,od,m,d){
+ if (first){
+ first = false;
+
+
+
+ var data=getCookie("scheduler_settings");
+ if (data){
+
+ if(!scheduler._min_date){
+ //otherwise scheduler will have incorrect date until timeout
+ //it can cause js error with 'onMouseMove' handler of key_nav.js
+ scheduler._min_date = d;
+ }
+
+ data = unescape(data).split("@");
+ data[0] = this.templates.xml_date(data[0]);
+ var view = this.isViewExists(data[1]) ? data[1] : m,
+ date = !isNaN(+data[0]) ? data[0] : d;
+
+ window.setTimeout(function(){
+ scheduler.setCurrentView(date,view);
+ },1);
+ return false;
+ }
+ }
+ var text = escape(this.templates.xml_format(d||od)+"@"+(m||om));
+ setCookie("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",text);
+ return true;
+ });
+
+
+ // As we are blocking first render above there could be a problem in case of dynamic loading ('from' won't be defined)
+ var old_load = scheduler._load;
+ scheduler._load = function() {
+ var args = arguments;
+ if (!scheduler._date && scheduler._load_mode) {
+ var that = this;
+ window.setTimeout(function() {
+ old_load.apply(that, args);
+ },1);
+ } else {
+ old_load.apply(this, args);
+ }
+ };
+})(); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_cookie.js.map b/codebase/sources/ext/dhtmlxscheduler_cookie.js.map
new file mode 100644
index 0000000..5490213
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_cookie.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_cookie.js.map","sources":["dhtmlxscheduler_cookie.js"],"names":["setCookie","name","cookie_param","value","str","document","cookie","getCookie","search","length","offset","indexOf","end","substring","first","scheduler","attachEvent","om","od","m","d","data","_min_date","unescape","split","this","templates","xml_date","view","isViewExists","date","isNaN","window","setTimeout","setCurrentView","text","escape","xml_format","old_load","_load","args","arguments","_date","_load_mode","that","apply"],"mappings":"CAAA,WACC,QAASA,GAAUC,EAAKC,EAAaC,GACpC,GAAIC,GAAMH,EAAO,IAAME,GAAUD,EAAc,KAAKA,EAAc,GAClEG,UAASC,OAASF,EAEnB,QAASG,GAAUN,GAClB,GAAIO,GAASP,EAAO,GACpB,IAAII,SAASC,OAAOG,OAAS,EAAG,CAC/B,GAAIC,GAASL,SAASC,OAAOK,QAAQH,EACrC,IAAc,IAAVE,EAAc,CACjBA,GAAUF,EAAOC,MACjB,IAAIG,GAAMP,SAASC,OAAOK,QAAQ,IAAKD,EAGvC,OAFW,IAAPE,IACHA,EAAMP,SAASC,OAAOG,QAChBJ,SAASC,OAAOO,UAAUH,EAAQE,IAG3C,MAAO,GAER,GAAIE,IAAQ,CACZC,WAAUC,YAAY,qBAAqB,SAASC,EAAGC,EAAGC,EAAEC,GAC3D,GAAIN,EAAM,CACTA,GAAQ,CAIR,IAAIO,GAAKd,EAAU,qBACnB,IAAIc,EAAK,CAEJN,UAAUO,YAGbP,UAAUO,UAAYF,GAGvBC,EAAOE,SAASF,GAAMG,MAAM,KAC5BH,EAAK,GAAKI,KAAKC,UAAUC,SAASN,EAAK,GACvC;GAAIO,GAAOH,KAAKI,aAAaR,EAAK,IAAMA,EAAK,GAAKF,EACjDW,EAAQC,OAAOV,EAAK,IAAgBD,EAAVC,EAAK,EAKhC,OAHAW,QAAOC,WAAW,WACjBlB,UAAUmB,eAAeJ,EAAKF,IAC7B,IACK,GAGT,GAAIO,GAAOC,OAAOX,KAAKC,UAAUW,WAAWjB,GAAGF,GAAI,KAAKC,GAAGF,GAE3D,OADAjB,GAAU,qBAAqB,wCAAwCmC,IAChE,GAKR,IAAIG,GAAWvB,UAAUwB,KACzBxB,WAAUwB,MAAQ,WACjB,GAAIC,GAAOC,SACX,KAAK1B,UAAU2B,OAAS3B,UAAU4B,WAAY,CAC7C,GAAIC,GAAOnB,IACXO,QAAOC,WAAW,WACjBK,EAASO,MAAMD,EAAMJ,IACpB,OAEFF,GAASO,MAAMpB,KAAMe"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_editors.js b/codebase/sources/ext/dhtmlxscheduler_editors.js
new file mode 100644
index 0000000..f088140
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_editors.js
@@ -0,0 +1,161 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.form_blocks['combo']={
+ render:function(sns) {
+ if (!sns.cached_options)
+ sns.cached_options = {};
+ var res = '';
+ res += "<div class='"+sns.type+"' style='height:"+(sns.height||20)+"px;' ></div>";
+ return res;
+ },
+ set_value:function(node,value,ev,config){
+ (function(){
+ resetCombo();
+ var id = scheduler.attachEvent("onAfterLightbox",function(){
+ // otherwise destructor will never be called after form reset(e.g. in readonly event mode)
+ resetCombo();
+ scheduler.detachEvent(id);
+ });
+ function resetCombo(){
+ if(node._combo && node._combo.DOMParent) {
+ node._combo.destructor();
+ }
+ }
+ })();
+ window.dhx_globalImgPath = config.image_path||'/';
+ node._combo = new dhtmlXCombo(node, config.name, node.offsetWidth-8);
+ if (config.onchange)
+ node._combo.attachEvent("onChange", config.onchange);
+
+ if (config.options_height)
+ node._combo.setOptionHeight(config.options_height);
+ var combo = node._combo;
+ combo.enableFilteringMode(config.filtering, config.script_path||null, !!config.cache);
+
+ if (!config.script_path) { // script-side filtration is used
+ var all_options = [];
+ for (var i = 0; i < config.options.length; i++) {
+ var option = config.options[i];
+ var single_option = [
+ option.key,
+ option.label,
+ option.css
+ ];
+ all_options.push(single_option);
+ }
+ combo.addOption(all_options);
+ if (ev[config.map_to]) {
+ var index = combo.getIndexByValue(ev[config.map_to]);
+ combo.selectOption(index);
+ }
+ } else { // server-side filtration is used
+ var selected_id = ev[config.map_to];
+ if (selected_id) {
+ if (config.cached_options[selected_id]) {
+ combo.addOption(selected_id, config.cached_options[selected_id]);
+ combo.disable(1);
+ combo.selectOption(0);
+ combo.disable(0);
+ } else {
+ dhtmlxAjax.get(config.script_path+"?id="+selected_id+"&uid="+scheduler.uid(), function(result){
+ var option = result.doXPath("//option")[0];
+ var label = option.childNodes[0].nodeValue;
+ config.cached_options[selected_id] = label;
+ combo.addOption(selected_id, label);
+ combo.disable(1);
+ combo.selectOption(0);
+ combo.disable(0);
+ });
+ }
+ } else {
+ combo.setComboValue("");
+ }
+ }
+ },
+ get_value:function(node,ev,config) {
+ var selected_id = node._combo.getSelectedValue(); // value = key
+ if (config.script_path) {
+ config.cached_options[selected_id] = node._combo.getSelectedText();
+ }
+ return selected_id;
+ },
+ focus:function(node){
+ }
+};
+
+scheduler.form_blocks['radio']={
+ render:function(sns) {
+ var res = '';
+ res += "<div class='dhx_cal_ltext dhx_cal_radio' style='height:"+sns.height+"px;' >";
+ for (var i=0; i<sns.options.length; i++) {
+ var id = scheduler.uid();
+ res += "<input id='"+id+"' type='radio' name='"+sns.name+"' value='"+sns.options[i].key+"'><label for='"+id+"'>"+" "+sns.options[i].label+"</label>";
+ if(sns.vertical)
+ res += "<br/>";
+ }
+ res += "</div>";
+
+ return res;
+ },
+ set_value:function(node,value,ev,config){
+ var radiobuttons = node.getElementsByTagName('input');
+ for (var i = 0; i < radiobuttons.length; i++) {
+ radiobuttons[i].checked = false;
+ var checked_value = ev[config.map_to]||value;
+ if (radiobuttons[i].value == checked_value) {
+ radiobuttons[i].checked = true;
+ }
+ }
+ },
+ get_value:function(node,ev,config){
+ var radiobuttons = node.getElementsByTagName('input');
+ for(var i=0; i<radiobuttons.length; i++) {
+ if(radiobuttons[i].checked) {
+ return radiobuttons[i].value;
+ }
+ }
+ },
+ focus:function(node){
+ }
+};
+
+scheduler.form_blocks['checkbox']={
+ render:function(sns) {
+ if (scheduler.config.wide_form)
+ return '<div class="dhx_cal_wide_checkbox" '+(sns.height?("style='height:"+sns.height+"px;'"):"")+'></div>';
+ else
+ return '';
+ },
+ set_value:function(node,value,ev,config){
+ node=document.getElementById(config.id);
+ var id = scheduler.uid();
+ var isChecked = (typeof config.checked_value != "undefined") ? value == config.checked_value : !!value;
+ node.className += " dhx_cal_checkbox";
+ var check_html = "<input id='"+id+"' type='checkbox' value='true' name='"+config.name+"'"+((isChecked)?"checked='true'":'')+"'>";
+ var label_html = "<label for='"+id+"'>"+(scheduler.locale.labels["section_"+config.name]||config.name)+"</label>";
+ if (scheduler.config.wide_form){
+ node.innerHTML = label_html;
+ node.nextSibling.innerHTML=check_html;
+ } else
+ node.innerHTML=check_html+label_html;
+
+ if (config.handler) {
+ var checkbox = node.getElementsByTagName('input')[0];
+ checkbox.onclick = config.handler;
+ }
+ },
+ get_value:function(node,ev,config){
+ node=document.getElementById(config.id);
+ var checkbox = node.getElementsByTagName('input')[0]; // moved to the header
+ if (!checkbox)
+ checkbox = node.nextSibling.getElementsByTagName('input')[0];
+ return (checkbox.checked)?(config.checked_value||true):(config.unchecked_value||false);
+ },
+ focus:function(node){
+ }
+};
diff --git a/codebase/sources/ext/dhtmlxscheduler_editors.js.map b/codebase/sources/ext/dhtmlxscheduler_editors.js.map
new file mode 100644
index 0000000..1980416
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_editors.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_editors.js.map","sources":["dhtmlxscheduler_editors.js"],"names":["scheduler","form_blocks","render","sns","cached_options","res","type","height","set_value","node","value","ev","config","resetCombo","_combo","DOMParent","destructor","id","attachEvent","detachEvent","window","dhx_globalImgPath","image_path","dhtmlXCombo","name","offsetWidth","onchange","options_height","setOptionHeight","combo","enableFilteringMode","filtering","script_path","cache","selected_id","map_to","addOption","disable","selectOption","dhtmlxAjax","get","uid","result","option","doXPath","label","childNodes","nodeValue","setComboValue","all_options","i","options","length","single_option","key","css","push","index","getIndexByValue","get_value","getSelectedValue","getSelectedText","focus","vertical","radiobuttons","getElementsByTagName","checked","checked_value","wide_form","document","getElementById","isChecked","className","check_html","label_html","locale","labels","innerHTML","nextSibling","handler","checkbox","onclick","unchecked_value"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_expand.js b/codebase/sources/ext/dhtmlxscheduler_expand.js
new file mode 100644
index 0000000..2a5a4b8
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_expand.js
@@ -0,0 +1,76 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.expand = function() {
+ var t = scheduler._obj;
+ do {
+ t._position = t.style.position || "";
+ t.style.position = "static";
+ } while ((t = t.parentNode) && t.style);
+ t = scheduler._obj;
+ t.style.position = "absolute";
+ t._width = t.style.width;
+ t._height = t.style.height;
+ t.style.width = t.style.height = "100%";
+ t.style.top = t.style.left = "0px";
+
+ var top = document.body;
+ top.scrollTop = 0;
+
+ top = top.parentNode;
+ if (top)
+ top.scrollTop = 0;
+ document.body._overflow = document.body.style.overflow || "";
+ document.body.style.overflow = "hidden";
+ scheduler._maximize();
+};
+scheduler.collapse = function() {
+ var t = scheduler._obj;
+ do {
+ t.style.position = t._position;
+ } while ((t = t.parentNode) && t.style);
+ t = scheduler._obj;
+ t.style.width = t._width;
+ t.style.height = t._height;
+ document.body.style.overflow = document.body._overflow;
+ scheduler._maximize();
+};
+scheduler.attachEvent("onTemplatesReady", function() {
+ var t = document.createElement("DIV");
+ t.className = "dhx_expand_icon";
+ scheduler.toggleIcon = t;
+ scheduler._obj.appendChild(t);
+ t.onclick = function() {
+ if (!scheduler.expanded)
+ scheduler.expand(); else
+ scheduler.collapse();
+ };
+});
+scheduler._maximize = function() {
+ this.expanded = !this.expanded;
+ this.toggleIcon.style.backgroundPosition = "0 " + (this.expanded ? "0" : "18") + "px";
+
+ var directions = ['left', 'top'];
+ for (var i = 0; i < directions.length; i++) {
+ var margin = scheduler.xy['margin_' + directions[i]];
+ var prev_margin = scheduler['_prev_margin_' + directions[i]];
+ if (scheduler.xy['margin_' + directions[i]]) {
+ scheduler['_prev_margin_' + directions[i]] = scheduler.xy['margin_' + directions[i]];
+ scheduler.xy['margin_' + directions[i]] = 0;
+ } else {
+ if (prev_margin) {
+ scheduler.xy['margin_' + directions[i]] = scheduler['_prev_margin_' + directions[i]];
+ delete scheduler['_prev_margin_' + directions[i]];
+ }
+ }
+ }
+
+ if (scheduler.callEvent("onSchedulerResize", [])) {
+ scheduler.update_view();
+ scheduler.callEvent("onAfterSchedulerResize");
+ }
+};
diff --git a/codebase/sources/ext/dhtmlxscheduler_expand.js.map b/codebase/sources/ext/dhtmlxscheduler_expand.js.map
new file mode 100644
index 0000000..7c67fd4
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_expand.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_expand.js.map","sources":["dhtmlxscheduler_expand.js"],"names":["scheduler","expand","t","_obj","_position","style","position","parentNode","_width","width","_height","height","top","left","document","body","scrollTop","_overflow","overflow","_maximize","collapse","attachEvent","createElement","className","toggleIcon","appendChild","onclick","expanded","this","backgroundPosition","directions","i","length","prev_margin","xy","callEvent","update_view"],"mappings":"AAAAA,UAAUC,OAAS,WAClB,GAAIC,GAAIF,UAAUG,IAClB,GACCD,GAAEE,UAAYF,EAAEG,MAAMC,UAAY,GAClCJ,EAAEG,MAAMC,SAAW,gBACVJ,EAAIA,EAAEK,aAAeL,EAAEG,MACjCH,GAAIF,UAAUG,KACdD,EAAEG,MAAMC,SAAW,WACnBJ,EAAEM,OAASN,EAAEG,MAAMI,MACnBP,EAAEQ,QAAUR,EAAEG,MAAMM,OACpBT,EAAEG,MAAMI,MAAQP,EAAEG,MAAMM,OAAS,OACjCT,EAAEG,MAAMO,IAAMV,EAAEG,MAAMQ,KAAO,KAE7B,IAAID,GAAME,SAASC,IACnBH,GAAII,UAAY,EAEhBJ,EAAMA,EAAIL,WACNK,IACHA,EAAII,UAAY,GACjBF,SAASC,KAAKE,UAAYH,SAASC,KAAKV,MAAMa,UAAY,GAC1DJ,SAASC,KAAKV,MAAMa,SAAW,SAC/BlB,UAAUmB,aAEXnB,UAAUoB,SAAW,WACpB,GAAIlB,GAAIF,UAAUG,IAClB;EACCD,GAAEG,MAAMC,SAAWJ,EAAEE,iBACZF,EAAIA,EAAEK,aAAeL,EAAEG,MACjCH,GAAIF,UAAUG,KACdD,EAAEG,MAAMI,MAAQP,EAAEM,OAClBN,EAAEG,MAAMM,OAAST,EAAEQ,QACnBI,SAASC,KAAKV,MAAMa,SAAWJ,SAASC,KAAKE,UAC7CjB,UAAUmB,aAEXnB,UAAUqB,YAAY,mBAAoB,WACzC,GAAInB,GAAIY,SAASQ,cAAc,MAC/BpB,GAAEqB,UAAY,kBACdvB,UAAUwB,WAAatB,EACvBF,UAAUG,KAAKsB,YAAYvB,GAC3BA,EAAEwB,QAAU,WACN1B,UAAU2B,SAEd3B,UAAUoB,WADVpB,UAAUC,YAIbD,UAAUmB,UAAY,WACrBS,KAAKD,UAAYC,KAAKD,SACtBC,KAAKJ,WAAWnB,MAAMwB,mBAAqB,MAAQD,KAAKD,SAAW,IAAM,MAAQ,IAGjF;IAAK,GADDG,IAAc,OAAQ,OACjBC,EAAI,EAAGA,EAAID,EAAWE,OAAQD,IAAK,CAC3C,GACIE,IADSjC,UAAUkC,GAAG,UAAYJ,EAAWC,IAC/B/B,UAAU,gBAAkB8B,EAAWC,IACrD/B,WAAUkC,GAAG,UAAYJ,EAAWC,KACvC/B,UAAU,gBAAkB8B,EAAWC,IAAM/B,UAAUkC,GAAG,UAAYJ,EAAWC,IACjF/B,UAAUkC,GAAG,UAAYJ,EAAWC,IAAM,GAEtCE,IACHjC,UAAUkC,GAAG,UAAYJ,EAAWC,IAAM/B,UAAU,gBAAkB8B,EAAWC,UAC1E/B,WAAU,gBAAkB8B,EAAWC,KAK7C/B,UAAUmC,UAAU,0BACvBnC,UAAUoC,cACVpC,UAAUmC,UAAU"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_grid_view.js b/codebase/sources/ext/dhtmlxscheduler_grid_view.js
new file mode 100644
index 0000000..d1e7c47
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_grid_view.js
@@ -0,0 +1,483 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function(){
+ scheduler._grid = {
+ sort_rules:{
+ "int":function(a,b, getVal){ return getVal(a)*1 < getVal(b)*1?1:-1; },
+ "str":function(a,b, getVal){ return getVal(a) < getVal(b)?1:-1; },
+ "date":function(a,b, getVal){ return new Date(getVal(a))< new Date(getVal(b))?1:-1; }
+ },
+ _getObjName:function(name){
+ return "grid_"+name;
+ },
+ _getViewName:function(objName){
+ return objName.replace(/^grid_/,'');
+ }
+ };
+}
+)();
+/*
+obj={
+ name:'grid_name'
+ fields:[
+ { id:"id", label:"Id", width:80, sort:"int/date/str", template:function(start_date, end_date, ev){ return ""}, align:"right/left/center" },
+ { id:"text", label:"Text", width:'*', css:"class_name", sort:function(a,b){ return 1 or -1}, valign:'top/bottom/middle' }
+ ...
+ ],
+ from:new Date(0),
+ to:Date:new Date(9999,1,1),
+ rowHeight:int,
+ paging:true/false,
+ select:true/false
+}
+*/
+
+
+scheduler.createGridView=function(obj){
+
+ var name = obj.name || 'grid';
+ var objName = scheduler._grid._getObjName(name);
+
+ scheduler.config[name + '_start'] = obj.from || (new Date(0));
+ scheduler.config[name + '_end'] = obj.to || (new Date(9999,1,1));
+
+ scheduler[objName] = obj;
+ scheduler[objName].defPadding = 8;
+ scheduler[objName].columns = scheduler[objName].fields;
+ scheduler[objName].unit = obj.unit || "month";
+ scheduler[objName].step = obj.step || 1;
+ delete scheduler[objName].fields;
+ function isValidSize(size){
+ return !(size !== undefined && (size*1 != size || size < 0));
+ }
+
+ var cols = scheduler[objName].columns;
+ for(var i=0; i < cols.length; i++){
+ if(isValidSize(cols[i].width))
+ cols[i].initialWidth = cols[i].width;
+ if(!isValidSize(cols[i].paddingLeft))
+ delete cols[i].paddingLeft;
+ if(!isValidSize(cols[i].paddingRight))
+ delete cols[i].paddingRight;
+ }
+
+ scheduler[objName].select = obj.select === undefined ? true : obj.select;
+ if(scheduler.locale.labels[name +'_tab'] === undefined)
+ scheduler.locale.labels[name +'_tab'] = scheduler[objName].label || scheduler.locale.labels.grid_tab;
+
+ scheduler[objName]._selected_divs = [];
+
+ scheduler.date[name+'_start']=function(d){
+ if(scheduler.date[obj.unit+'_start'])
+ return scheduler.date[obj.unit+'_start'](d);
+ else
+ return (d);
+ };
+ scheduler.date['add_' + name] = function(date, inc){
+ return scheduler.date.add(date, inc*scheduler[objName].step, scheduler[objName].unit);
+ };
+
+ scheduler.templates[name+"_date"] = function(start, end){
+ return scheduler.templates.day_date(start)+" - "+scheduler.templates.day_date(end);
+ };
+ scheduler.templates[name + '_full_date'] = function(start,end,ev){
+ if (scheduler.isOneDayEvent(ev))
+ return this[name + '_single_date'](start);
+ else
+ return scheduler.templates.day_date(start)+" &ndash; "+scheduler.templates.day_date(end);
+ };
+ scheduler.templates[name + '_single_date'] = function(date){
+ return scheduler.templates.day_date(date)+" "+this.event_date(date);
+ };
+ scheduler.templates[name + '_field'] = function(field_name, event){
+ return event[field_name];
+ };
+
+ scheduler.attachEvent("onTemplatesReady",function(){
+
+ scheduler.attachEvent("onDblClick",function(event_id, native_event_object){
+ if(this._mode == name){
+ scheduler._click.buttons['details'](event_id);
+ return false;
+ }
+ return true;
+ });
+
+ scheduler.attachEvent("onClick",function(event_id, native_event_object){
+ if(this._mode == name && scheduler[objName].select ){
+ scheduler._grid.unselectEvent('', name);
+ scheduler._grid.selectEvent(event_id, name, native_event_object);
+ return false;
+ }
+ return true;
+ });
+
+ scheduler.attachEvent("onSchedulerResize", function() {
+ if (this._mode == name) {
+ this[name + '_view'](true);
+ // timeout used to run code after all onSchedulerResize handlers are finished
+ window.setTimeout(function(){
+ // we need to call event manually because handler return false, and blocks default logic
+ scheduler.callEvent("onAfterSchedulerResize", []);
+ },1);
+ return false;
+ }
+ return true;
+ });
+
+
+ var old = scheduler.render_data;
+ scheduler.render_data=function(evs){
+ if (this._mode == name)
+ scheduler._grid._fill_grid_tab(objName);
+ else
+ return old.apply(this,arguments);
+ };
+
+ var old_render_view_data = scheduler.render_view_data;
+ scheduler.render_view_data=function(){
+ if(this._mode == name) {
+ scheduler._grid._gridScrollTop = scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop;
+ scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = 0;
+ scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto';
+ }
+ else {
+ scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto';
+ }
+ return old_render_view_data.apply(this,arguments);
+ };
+});
+
+
+ scheduler[name+'_view']=function(mode){
+ if (mode){
+ var min = null,
+ max = null;
+ var view = scheduler[objName];
+ if(view.paging){
+ min = scheduler.date[name+'_start'](new Date(scheduler._date));
+ max = scheduler.date['add_'+name](min, 1);
+ }else{
+ min = scheduler.config[name + '_start'];
+ max = scheduler.config[name + '_end'];
+ }
+
+ scheduler._min_date = min;
+ scheduler._max_date = max;
+
+ scheduler._grid.set_full_view(objName);
+
+ var header = "";
+ if(+min > +new Date(0) && +max < +(new Date(9999,1,1)))
+ header = scheduler.templates[name+"_date"](min, max);
+
+ scheduler._els["dhx_cal_date"][0].innerHTML = header;
+
+ //grid tab activated
+ scheduler._gridView = objName;
+ } else {
+ scheduler._grid._sort_marker = null;
+ delete scheduler._gridView;
+ scheduler._rendered=[];
+ scheduler[objName]._selected_divs = [];
+ //grid tab de-activated
+ }
+ };
+
+
+};
+
+
+scheduler.dblclick_dhx_grid_area=function(){
+ if (!this.config.readonly && this.config.dblclick_create)
+ this.addEventNow();
+};
+
+if(scheduler._click.dhx_cal_header){
+ scheduler._old_header_click = scheduler._click.dhx_cal_header;
+}
+scheduler._click.dhx_cal_header=function(e){
+ if(scheduler._gridView){
+ var event = e||window.event;
+ var params = scheduler._grid.get_sort_params(event, scheduler._gridView);
+
+ scheduler._grid.draw_sort_marker(event.originalTarget || event.srcElement, params.dir);
+
+ scheduler.clear_view();
+ scheduler._grid._fill_grid_tab(scheduler._gridView, params);
+ }
+ else if(scheduler._old_header_click)
+ return scheduler._old_header_click.apply(this,arguments);
+};
+
+scheduler._grid.selectEvent = function(id, view_name, native_event_object){
+ if(scheduler.callEvent("onBeforeRowSelect",[id,native_event_object])){
+ var objName = scheduler._grid._getObjName(view_name);
+
+ scheduler.for_rendered(id, function(event_div){
+ event_div.className += " dhx_grid_event_selected";
+ scheduler[objName]._selected_divs.push(event_div);
+ });
+ scheduler._select_id = id;
+ }
+};
+
+scheduler._grid._unselectDiv= function(div){
+ div.className = div.className.replace(/ dhx_grid_event_selected/,'');
+};
+scheduler._grid.unselectEvent = function(id, view_name){
+ var objName = scheduler._grid._getObjName(view_name);
+ if(!objName || !scheduler[objName]._selected_divs)
+ return;
+
+ if(!id){
+ for(var i=0; i<scheduler[objName]._selected_divs.length; i++)
+ scheduler._grid._unselectDiv(scheduler[objName]._selected_divs[i]);
+
+ scheduler[objName]._selected_divs = [];
+
+ }else{
+ for(var i=0; i<scheduler[objName]._selected_divs.length; i++)
+ if(scheduler[objName]._selected_divs[i].getAttribute('event_id') == id){
+ scheduler._grid._unselectDiv(scheduler[objName]._selected_divs[i]);
+ scheduler[objName]._selected_divs.slice(i,1);
+ break;
+ }
+
+ }
+};
+
+scheduler._grid.get_sort_params = function(event, objName){
+ var targ = event.originalTarget || event.srcElement;
+ var direction = "desc";
+ if(targ.className == 'dhx_grid_view_sort')
+ targ = targ.parentNode;
+ if(!targ.className || targ.className.indexOf("dhx_grid_sort_asc") == -1)
+ direction = 'asc';
+
+ var index = 0;
+ for(var i =0; i < targ.parentNode.childNodes.length; i++){
+ if(targ.parentNode.childNodes[i] == targ){
+ index = i;
+ break;
+ }
+ }
+
+ var value = null;
+ if(scheduler[objName].columns[index].template){
+ var template = scheduler[objName].columns[index].template;
+ value = function(ev){
+ return template(ev.start_date, ev.end_date, ev);
+ };
+ }else{
+ var field = scheduler[objName].columns[index].id;
+ if(field == "date")
+ field = "start_date";
+ value = function(ev){ return ev[field]; };
+ }
+
+ var rule = scheduler[objName].columns[index].sort;
+
+ if(typeof rule != 'function'){
+ rule = scheduler._grid.sort_rules[rule] || scheduler._grid.sort_rules['str'];
+ }
+
+ return {dir:direction, value:value, rule:rule};
+};
+
+scheduler._grid.draw_sort_marker = function(node, direction){
+ if(node.className == 'dhx_grid_view_sort')
+ node = node.parentNode;
+
+ if(scheduler._grid._sort_marker){
+ scheduler._grid._sort_marker.className = scheduler._grid._sort_marker.className.replace(/( )?dhx_grid_sort_(asc|desc)/, '');
+ scheduler._grid._sort_marker.removeChild(scheduler._grid._sort_marker.lastChild);
+ }
+
+ node.className += " dhx_grid_sort_"+direction;
+ scheduler._grid._sort_marker = node;
+ var html = "<div class='dhx_grid_view_sort' style='left:"+(+node.style.width.replace('px','') -15+node.offsetLeft)+"px'>&nbsp;</div>";
+ node.innerHTML += html;
+
+};
+
+scheduler._grid.sort_grid=function(sort){
+
+ var sort = sort || {dir:'desc', value:function(ev){return ev.start_date;}, rule:scheduler._grid.sort_rules['date']};
+
+ var events = scheduler.get_visible_events();
+
+ if(sort.dir == 'desc')
+ events.sort(function(a,b){return sort.rule(a,b,sort.value);});
+ else
+ events.sort(function(a,b){return -sort.rule(a,b, sort.value);});
+ return events;
+};
+
+
+
+scheduler._grid.set_full_view = function(mode){
+ if (mode){
+ var l = scheduler.locale.labels;
+ var html =scheduler._grid._print_grid_header(mode);
+
+ scheduler._els["dhx_cal_header"][0].innerHTML= html;
+ scheduler._table_view=true;
+ scheduler.set_sizes();
+ }
+};
+scheduler._grid._calcPadding = function(column, parent){
+ var padding = (column.paddingLeft !== undefined ? 1*column.paddingLeft : scheduler[parent].defPadding) +
+ (column.paddingRight !== undefined ? 1*column.paddingRight : scheduler[parent].defPadding);
+ return padding;
+};
+
+scheduler._grid._getStyles = function(column, items){
+ var cell_style = [], style = "";
+ for(var i=0; items[i]; i++ ){
+ style = items[i] + ":";
+ switch (items[i]){
+ case "text-align":
+ if(column.align)
+ cell_style.push(style+column.align);
+ break;
+ case "vertical-align":
+ if(column.valign)
+ cell_style.push(style+column.valign);
+ break;
+ case "padding-left":
+ if(column.paddingLeft !== undefined)
+ cell_style.push(style+(column.paddingLeft||'0') + "px");
+ break;
+ case "padding-right":
+ if(column.paddingRight !== undefined)
+ cell_style.push(style+(column.paddingRight||'0') + "px");
+ break;
+ }
+ }
+ return cell_style;
+};
+
+scheduler._grid._fill_grid_tab = function(objName, sort){
+ //get current date
+ var date = scheduler._date;
+ //select events for which data need to be printed
+ var events = scheduler._grid.sort_grid(sort);
+
+ //generate html for the view
+ var columns = scheduler[objName].columns;
+
+ var html = "<div>";
+ var left = -2;//column borders at the same pos as header borders...
+ for(var i=0; i < columns.length; i++){
+ var padding = scheduler._grid._calcPadding(columns[i], objName);
+ left +=columns[i].width + padding ;//
+ if(i < columns.length - 1)
+ html += "<div class='dhx_grid_v_border' style='left:"+(left)+"px'></div>";
+ }
+ html += "</div>";
+ html +="<div class='dhx_grid_area'><table>";
+
+ for (var i=0; i<events.length; i++){
+ html += scheduler._grid._print_event_row(events[i], objName);
+ }
+
+ html +="</table></div>";
+ //render html
+ scheduler._els["dhx_cal_data"][0].innerHTML = html;
+ scheduler._els["dhx_cal_data"][0].scrollTop = scheduler._grid._gridScrollTop||0;
+
+ var t=scheduler._els["dhx_cal_data"][0].getElementsByTagName("tr");
+
+ scheduler._rendered=[];
+ for (var i=0; i < t.length; i++){
+ scheduler._rendered[i]=t[i];
+ }
+
+};
+scheduler._grid._print_event_row = function(ev, objName){
+
+ var styles = [];
+ if(ev.color)
+ styles.push("background:"+ev.color);
+ if(ev.textColor)
+ styles.push("color:"+ev.textColor);
+ if(ev._text_style)
+ styles.push(ev._text_style);
+ if(scheduler[objName]['rowHeight'])
+ styles.push('height:'+scheduler[objName]['rowHeight'] + 'px');
+
+ var style = "";
+ if(styles.length){
+ style = "style='"+styles.join(";")+"'";
+ }
+
+ var columns = scheduler[objName].columns;
+ var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev);
+
+ var html ="<tr class='dhx_grid_event"+(ev_class? ' '+ev_class:'')+"' event_id='"+ev.id+"' " + style + ">";
+
+ var name = scheduler._grid._getViewName(objName);
+ var availStyles = ["text-align", "vertical-align", "padding-left","padding-right"];
+ for(var i =0; i < columns.length; i++){
+ var value;
+ if(columns[i].template){
+ value = columns[i].template(ev.start_date, ev.end_date, ev);
+ }else if(columns[i].id == 'date') {
+ value = scheduler.templates[name + '_full_date'](ev.start_date, ev.end_date, ev);
+ }else if(columns[i].id == 'start_date' || columns[i].id == 'end_date' ){
+ value = scheduler.templates[name + '_single_date'](ev[columns[i].id]);
+ }else{
+ value = scheduler.templates[name + '_field'](columns[i].id, ev);
+ }
+
+ var cell_style = scheduler._grid._getStyles(columns[i], availStyles);
+
+ var className = columns[i].css ? (" class=\""+columns[i].css+"\"") : "";
+
+ html+= "<td style='width:"+ (columns[i].width )+"px;"+cell_style.join(";")+"' "+className+">"+value+"</td>";
+
+ }
+ html+="<td class='dhx_grid_dummy'></td></tr>";
+
+ return html;
+};
+
+scheduler._grid._print_grid_header = function(objName){
+ var head = "<div class='dhx_grid_line'>";
+
+ var columns = scheduler[objName].columns;
+ var widths = [];
+
+ var unsized_columns = columns.length;
+ var avail_width = scheduler._obj.clientWidth - 2*columns.length -20;//-20 for possible scrollbar, -length for borders
+ for(var ind=0; ind < columns.length; ind++){
+
+ var val = columns[ind].initialWidth*1;
+ if(!isNaN(val) && columns[ind].initialWidth !== '' && columns[ind].initialWidth !== null && typeof columns[ind].initialWidth != 'boolean'){
+
+ unsized_columns--;
+ avail_width -= val;
+ widths[ind] = val;
+ }else {
+ widths[ind] = null;
+ }
+ }
+
+ var unsized_width = Math.floor(avail_width / unsized_columns);
+ var availStyles = ["text-align", "padding-left","padding-right"];
+ for(var i=0; i < columns.length; i++){
+ var column_width = !widths[i] ? unsized_width : widths[i];
+ columns[i].width = column_width - scheduler._grid._calcPadding(columns[i], objName);
+ var cell_style = scheduler._grid._getStyles(columns[i], availStyles);
+ head += "<div style='width:"+(columns[i].width -1)+"px;"+cell_style.join(";")+"'>" + (columns[i].label === undefined ? columns[i].id : columns[i].label) + "</div>";
+ }
+ head +="</div>";
+
+ return head;
+};
diff --git a/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map b/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map
new file mode 100644
index 0000000..f0f702b
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_grid_view.js.map","sources":["dhtmlxscheduler_grid_view.js"],"names":["scheduler","_grid","sort_rules","int","a","b","getVal","str","date","Date","_getObjName","name","_getViewName","objName","replace","createGridView","obj","isValidSize","size","undefined","config","from","to","defPadding","columns","fields","unit","step","cols","i","length","width","initialWidth","paddingLeft","paddingRight","select","locale","labels","label","grid_tab","_selected_divs","d","inc","add","templates","start","end","day_date","ev","isOneDayEvent","this","event_date","field_name","event","attachEvent","event_id","_mode","_click","buttons","native_event_object","unselectEvent","selectEvent","window","setTimeout","callEvent","old","render_data","apply","arguments","_fill_grid_tab","old_render_view_data","render_view_data","_gridScrollTop","_els","childNodes","scrollTop","style","overflowY","mode","min","max","view","paging","_date","_min_date","_max_date","set_full_view","header","innerHTML","_gridView","_sort_marker","_rendered","dblclick_dhx_grid_area","readonly","dblclick_create","addEventNow","dhx_cal_header","_old_header_click","e","params","get_sort_params","draw_sort_marker","originalTarget","srcElement","dir","clear_view","id","view_name","for_rendered","event_div","className","push","_select_id","_unselectDiv","div","getAttribute","slice","targ","direction","parentNode","indexOf","index","value","template","start_date","end_date","field","rule","sort","node","removeChild","lastChild","html","offsetLeft","sort_grid","events","get_visible_events","_print_grid_header","_table_view","set_sizes","_calcPadding","column","parent","padding","_getStyles","items","cell_style","align","valign","left","_print_event_row","t","getElementsByTagName","styles","color","textColor","_text_style","join","ev_class","event_class","availStyles","css","head","widths","unsized_columns","avail_width","_obj","clientWidth","ind","val","isNaN","unsized_width","Math","floor","column_width"],"mappings":"CAAA,WACCA,UAAUC,OACTC,YACCC,MAAM,SAASC,EAAEC,EAAGC,GAAS,MAAiB,GAAVA,EAAOF,GAAiB,EAAVE,EAAOD,GAAK,EAAE,IAChEE,IAAM,SAASH,EAAEC,EAAGC,GAAS,MAAOA,GAAOF,GAAKE,EAAOD,GAAG,EAAE,IAC5DG,KAAO,SAASJ,EAAEC,EAAGC,GAAS,MAAO,IAAIG,MAAKH,EAAOF,IAAK,GAAIK,MAAKH,EAAOD,IAAI,EAAE,KAEjFK,YAAY,SAASC,GACpB,MAAO,QAAQA,GAEhBC,aAAa,SAASC,GACrB,MAAOA,GAAQC,QAAQ,SAAS,SAsBnCd,UAAUe,eAAe,SAASC,GAcjC,QAASC,GAAYC,GACpB,QAAkBC,SAATD,IAA4B,EAALA,GAAUA,GAAe,EAAPA,IAbnD,GAAIP,GAAOK,EAAIL,MAAQ,OACnBE,EAAUb,UAAUC,MAAMS,YAAYC,EAE1CX,WAAUoB,OAAOT,EAAO,UAAYK,EAAIK,MAAQ,GAAKZ,MAAK,GAC1DT,UAAUoB,OAAOT,EAAO,QAAUK,EAAIM,IAAM,GAAKb,MAAK,KAAK,EAAE,GAE7DT,UAAUa,GAAWG,EACrBhB,UAAUa,GAASU,WAAa,EAChCvB,UAAUa,GAASW,QAAUxB,UAAUa,GAASY,OAChDzB,UAAUa,GAASa,KAAOV,EAAIU,MAAQ,QACtC1B,UAAUa,GAASc,KAAOX,EAAIW,MAAQ,QAC/B3B,WAAUa,GAASY,MAM1B;IAAI,GADAG,GAAO5B,UAAUa,GAASW,QACtBK,EAAE,EAAGA,EAAID,EAAKE,OAAQD,IAC1BZ,EAAYW,EAAKC,GAAGE,SACtBH,EAAKC,GAAGG,aAAeJ,EAAKC,GAAGE,OAC5Bd,EAAYW,EAAKC,GAAGI,oBAChBL,GAAKC,GAAGI,YACZhB,EAAYW,EAAKC,GAAGK,qBAChBN,GAAKC,GAAGK,YAGjBlC,WAAUa,GAASsB,OAAwBhB,SAAfH,EAAImB,QAAuB,EAAOnB,EAAImB,OACrBhB,SAA1CnB,UAAUoC,OAAOC,OAAO1B,EAAM,UAChCX,UAAUoC,OAAOC,OAAO1B,EAAM,QAAUX,UAAUa,GAASyB,OAAStC,UAAUoC,OAAOC,OAAOE,UAE7FvC,UAAUa,GAAS2B,kBAEnBxC,UAAUQ,KAAKG,EAAK,UAAU,SAAS8B,GACtC,MAAGzC,WAAUQ,KAAKQ,EAAIU,KAAK,UACnB1B,UAAUQ,KAAKQ,EAAIU,KAAK,UAAUe,GAElC;EAETzC,UAAUQ,KAAK,OAASG,GAAQ,SAASH,EAAMkC,GAC9C,MAAO1C,WAAUQ,KAAKmC,IAAInC,EAAMkC,EAAI1C,UAAUa,GAASc,KAAM3B,UAAUa,GAASa,OAGjF1B,UAAU4C,UAAUjC,EAAK,SAAW,SAASkC,EAAOC,GACnD,MAAO9C,WAAU4C,UAAUG,SAASF,GAAO,MAAM7C,UAAU4C,UAAUG,SAASD,IAE/E9C,UAAU4C,UAAUjC,EAAO,cAAgB,SAASkC,EAAMC,EAAIE,GAC7D,MAAIhD,WAAUiD,cAAcD,GACpBE,KAAKvC,EAAO,gBAAgBkC,GAE5B7C,UAAU4C,UAAUG,SAASF,GAAO,YAAY7C,UAAU4C,UAAUG,SAASD,IAEtF9C,UAAU4C,UAAUjC,EAAO,gBAAkB,SAASH,GACrD,MAAOR,WAAU4C,UAAUG,SAASvC,GAAM,IAAI0C,KAAKC,WAAW3C;EAE/DR,UAAU4C,UAAUjC,EAAO,UAAY,SAASyC,EAAYC,GAC3D,MAAOA,GAAMD,IAGdpD,UAAUsD,YAAY,mBAAmB,WAExCtD,UAAUsD,YAAY,aAAa,SAASC,GAC3C,MAAGL,MAAKM,OAAS7C,GAChBX,UAAUyD,OAAOC,QAAiB,QAAEH,IAC7B,IAED,IAGRvD,UAAUsD,YAAY,UAAU,SAASC,EAAUI,GAClD,MAAGT,MAAKM,OAAS7C,GAAQX,UAAUa,GAASsB,QAC3CnC,UAAUC,MAAM2D,cAAc,GAAIjD,GAClCX,UAAUC,MAAM4D,YAAYN,EAAU5C,EAAMgD,IACrC,IAED,IAGR3D,UAAUsD,YAAY,oBAAqB,WAC1C,MAAIJ,MAAKM,OAAS7C,GACjBuC,KAAKvC,EAAO,UAAS,GAErBmD,OAAOC,WAAW,WAEjB/D,UAAUgE,UAAU;EACnB,IACK,IAED,GAIR,IAAIC,GAAMjE,UAAUkE,WACpBlE,WAAUkE,YAAY,WACrB,MAAIhB,MAAKM,OAAS7C,EAGVsD,EAAIE,MAAMjB,KAAKkB,eAFtBpE,WAAUC,MAAMoE,eAAexD,GAKjC,IAAIyD,GAAuBtE,UAAUuE,gBACrCvE,WAAUuE,iBAAiB,WAS1B,MARGrB,MAAKM,OAAS7C,GAChBX,UAAUC,MAAMuE,eAAiBxE,UAAUyE,KAAmB,aAAE,GAAGC,WAAW,GAAGC,UACjF3E,UAAUyE,KAAmB,aAAE,GAAGC,WAAW,GAAGC,UAAY,EAC5D3E,UAAUyE,KAAmB,aAAE,GAAGG,MAAMC,UAAY,QAGpD7E,UAAUyE,KAAmB,aAAE,GAAGG,MAAMC,UAAY,OAE9CP,EAAqBH,MAAMjB,KAAKkB;IAKzCpE,UAAUW,EAAK,SAAS,SAASmE,GAChC,GAAIA,EAAK,CACR,GAAIC,GAAM,KACTC,EAAM,KACHC,EAAOjF,UAAUa,EAClBoE,GAAKC,QACPH,EAAM/E,UAAUQ,KAAKG,EAAK,UAAU,GAAIF,MAAKT,UAAUmF,QACvDH,EAAMhF,UAAUQ,KAAK,OAAOG,GAAMoE,EAAK,KAEvCA,EAAM/E,UAAUoB,OAAOT,EAAO,UAC9BqE,EAAMhF,UAAUoB,OAAOT,EAAO,SAG/BX,UAAUoF,UAAYL,EACtB/E,UAAUqF,UAAYL,EAEtBhF,UAAUC,MAAMqF,cAAczE,EAE9B,IAAI0E,GAAS,IACTR,GAAO,GAAItE,MAAK,KAAOuE,GAAO,GAAKvE,MAAK,KAAK,EAAE,KAClD8E,EAASvF,UAAU4C,UAAUjC,EAAK,SAASoE,EAAKC,IAEjDhF,UAAUyE,KAAmB,aAAE,GAAGe,UAAYD,EAG9CvF,UAAUyF,UAAY5E,MAEtBb,WAAUC,MAAMyF,aAAe,WACxB1F,WAAUyF,UACjBzF,UAAU2F,aACV3F,UAAUa,GAAS2B;GAStBxC,UAAU4F,uBAAuB,YAC3B1C,KAAK9B,OAAOyE,UAAY3C,KAAK9B,OAAO0E,iBACxC5C,KAAK6C,eAGJ/F,UAAUyD,OAAOuC,iBAClBhG,UAAUiG,kBAAoBjG,UAAUyD,OAAOuC,gBAEjDhG,UAAUyD,OAAOuC,eAAe,SAASE,GACxC,GAAGlG,UAAUyF,UAAU,CACtB,GAAIpC,GAAQ6C,GAAGpC,OAAOT,MAClB8C,EAASnG,UAAUC,MAAMmG,gBAAgB/C,EAAOrD,UAAUyF,UAE9DzF,WAAUC,MAAMoG,iBAAiBhD,EAAMiD,gBAAkBjD,EAAMkD,WAAYJ,EAAOK,KAElFxG,UAAUyG,aACVzG,UAAUC,MAAMoE,eAAerE,UAAUyF,UAAWU;KAEhD,IAAGnG,UAAUiG,kBACjB,MAAOjG,WAAUiG,kBAAkB9B,MAAMjB,KAAKkB,YAGhDpE,UAAUC,MAAM4D,YAAc,SAAS6C,EAAIC,EAAWhD,GACrD,GAAG3D,UAAUgE,UAAU,qBAAqB0C,EAAG/C,IAAsB,CACpE,GAAI9C,GAAUb,UAAUC,MAAMS,YAAYiG,EAE1C3G,WAAU4G,aAAaF,EAAI,SAASG,GACnCA,EAAUC,WAAa,2BACvB9G,UAAUa,GAAS2B,eAAeuE,KAAKF,KAExC7G,UAAUgH,WAAaN,IAIzB1G,UAAUC,MAAMgH,aAAc,SAASC,GACtCA,EAAIJ,UAAYI,EAAIJ,UAAUhG,QAAQ,2BAA2B,KAElEd,UAAUC,MAAM2D,cAAgB,SAAS8C,EAAIC,GAC5C,GAAI9F,GAAUb,UAAUC,MAAMS,YAAYiG,EAC1C;GAAI9F,GAAYb,UAAUa,GAAS2B,eAGnC,GAAIkE,GAOH,IAAI,GAAI7E,GAAE,EAAGA,EAAE7B,UAAUa,GAAS2B,eAAeV,OAAQD,IACxD,GAAG7B,UAAUa,GAAS2B,eAAeX,GAAGsF,aAAa,aAAeT,EAAG,CACtE1G,UAAUC,MAAMgH,aAAajH,UAAUa,GAAS2B,eAAeX,IAC/D7B,UAAUa,GAAS2B,eAAe4E,MAAMvF,EAAE,EAC1C,YAXI,CACN,IAAI,GAAIA,GAAE,EAAGA,EAAE7B,UAAUa,GAAS2B,eAAeV,OAAQD,IACxD7B,UAAUC,MAAMgH,aAAajH,UAAUa,GAAS2B,eAAeX,GAEhE7B,WAAUa,GAAS2B,oBAarBxC,UAAUC,MAAMmG,gBAAkB,SAAS/C,EAAOxC,GACjD,GAAIwG,GAAOhE,EAAMiD,gBAAkBjD,EAAMkD,WACrCe,EAAY,MACK;sBAAlBD,EAAKP,YACPO,EAAOA,EAAKE,YACTF,EAAKP,WAA4D,IAA/CO,EAAKP,UAAUU,QAAQ,uBAC5CF,EAAY,MAGb,KAAI,GADAG,GAAQ,EACJ5F,EAAG,EAAGA,EAAIwF,EAAKE,WAAW7C,WAAW5C,OAAQD,IACpD,GAAGwF,EAAKE,WAAW7C,WAAW7C,IAAMwF,EAAK,CACxCI,EAAQ5F,CACR,OAIF,GAAI6F,GAAQ,IACZ,IAAG1H,UAAUa,GAASW,QAAQiG,GAAOE,SAAS,CAC7C,GAAIA,GAAW3H,UAAUa,GAASW,QAAQiG,GAAOE,QACjDD,GAAQ,SAAS1E,GAChB,MAAO2E,GAAS3E,EAAG4E,WAAY5E,EAAG6E,SAAU7E,QAEzC,CACJ,GAAI8E,GAAQ9H,UAAUa,GAASW,QAAQiG,GAAOf,EAClC,SAAToB,IACFA,EAAQ,cACTJ,EAAQ,SAAS1E,GAAK,MAAOA,GAAG8E,IAGjC,GAAIC,GAAO/H,UAAUa,GAASW,QAAQiG,GAAOO,IAM7C,OAJkB,kBAARD,KACTA,EAAO/H,UAAUC,MAAMC,WAAW6H,IAAS/H,UAAUC,MAAMC,WAAgB,MAGpEsG,IAAIc,EAAWI,MAAMA,EAAOK,KAAKA;EAG1C/H,UAAUC,MAAMoG,iBAAmB,SAAS4B,EAAMX,GAC5B,sBAAlBW,EAAKnB,YACPmB,EAAOA,EAAKV,YAEVvH,UAAUC,MAAMyF,eAClB1F,UAAUC,MAAMyF,aAAaoB,UAAY9G,UAAUC,MAAMyF,aAAaoB,UAAUhG,QAAQ,+BAAgC,IACxHd,UAAUC,MAAMyF,aAAawC,YAAYlI,UAAUC,MAAMyF,aAAayC,YAGvEF,EAAKnB,WAAa,kBAAkBQ,EACpCtH,UAAUC,MAAMyF,aAAeuC,CAC/B,IAAIG,GAAO,iDAAiDH,EAAKrD,MAAM7C,MAAMjB,QAAQ,KAAK,IAAK,GAAGmH,EAAKI,YAAY,kBACnHJ;EAAKzC,WAAa4C,GAInBpI,UAAUC,MAAMqI,UAAU,SAASN,GAElC,GAAIA,GAAOA,IAASxB,IAAI,OAAQkB,MAAM,SAAS1E,GAAI,MAAOA,GAAG4E,YAAcG,KAAK/H,UAAUC,MAAMC,WAAiB,MAE7GqI,EAASvI,UAAUwI,oBAMvB,OAHCD,GAAOP,KADO,QAAZA,EAAKxB,IACK,SAASpG,EAAEC,GAAG,MAAO2H,GAAKD,KAAK3H,EAAEC,EAAE2H,EAAKN,QAExC,SAAStH,EAAEC,GAAG,OAAQ2H,EAAKD,KAAK3H,EAAEC,EAAG2H,EAAKN,SAChDa,GAKRvI,UAAUC,MAAMqF,cAAgB,SAASR,GACxC,GAAIA,EAAK,CACR,GACIsD,IADIpI,UAAUoC,OAAOC,OACfrC,UAAUC,MAAMwI,mBAAmB3D,GAE7C9E,WAAUyE,KAAqB,eAAE,GAAGe,UAAW4C,EAC/CpI,UAAU0I,aAAY,EACtB1I,UAAU2I;GAGZ3I,UAAUC,MAAM2I,aAAe,SAASC,EAAQC,GAC/C,GAAIC,IAAkC5H,SAAvB0H,EAAO5G,YAA4B,EAAE4G,EAAO5G,YAAcjC,UAAU8I,GAAQvH,aAC/DJ,SAAxB0H,EAAO3G,aAA6B,EAAE2G,EAAO3G,aAAelC,UAAU8I,GAAQvH,WAClF,OAAOwH,IAGR/I,UAAUC,MAAM+I,WAAa,SAASH,EAAQI,GAE7C,IAAI,GADAC,MAAiBtE,EAAQ,GACrB/C,EAAE,EAAGoH,EAAMpH,GAAIA,IAEnB,OADH+C,EAAQqE,EAAMpH,GAAK,IACRoH,EAAMpH,IAChB,IAAK,aACDgH,EAAOM,OACTD,EAAWnC,KAAKnC,EAAMiE,EAAOM,MAC9B,MACD,KAAK,iBACDN,EAAOO,QACTF,EAAWnC,KAAKnC,EAAMiE,EAAOO,OAC9B,MACD,KAAK,eACsBjI,SAAvB0H,EAAO5G,aACTiH,EAAWnC,KAAKnC,GAAOiE,EAAO5G,aAAa,KAAO,KACnD,MACD,KAAK,gBACuBd,SAAxB0H,EAAO3G,cACTgH,EAAWnC,KAAKnC,GAAOiE,EAAO3G,cAAc,KAAO;CAIvD,MAAOgH,IAGRlJ,UAAUC,MAAMoE,eAAiB,SAASxD,EAASmH,GAWlD,IAAI,GAPAO,IAFOvI,UAAUmF,MAERnF,UAAUC,MAAMqI,UAAUN,IAGnCxG,EAAUxB,UAAUa,GAASW,QAE7B4G,EAAO,QACPiB,EAAO,GACHxH,EAAE,EAAGA,EAAIL,EAAQM,OAAQD,IAAI,CACpC,GAAIkH,GAAU/I,UAAUC,MAAM2I,aAAapH,EAAQK,GAAIhB,EACvDwI,IAAO7H,EAAQK,GAAGE,MAAQgH,EACvBlH,EAAIL,EAAQM,OAAS,IACvBsG,GAAQ,8CAA8C,EAAO,cAE/DA,GAAQ,SACRA,GAAO,oCAEP,KAAK,GAAIvG,GAAE,EAAGA,EAAE0G,EAAOzG,OAAQD,IAC9BuG,GAAQpI,UAAUC,MAAMqJ,iBAAiBf,EAAO1G,GAAIhB,EAGrDuH,IAAO,iBAEPpI,UAAUyE,KAAmB,aAAE,GAAGe,UAAY4C,EAC9CpI,UAAUyE,KAAmB,aAAE,GAAGE,UAAY3E,UAAUC,MAAMuE,gBAAgB,CAE9E;GAAI+E,GAAEvJ,UAAUyE,KAAmB,aAAE,GAAG+E,qBAAqB,KAE7DxJ,WAAU2F,YACV,KAAK,GAAI9D,GAAE,EAAGA,EAAI0H,EAAEzH,OAAQD,IAC3B7B,UAAU2F,UAAU9D,GAAG0H,EAAE1H,IAI3B7B,UAAUC,MAAMqJ,iBAAmB,SAAStG,EAAInC,GAE/C,GAAI4I,KACDzG,GAAG0G,OACLD,EAAO1C,KAAK,cAAc/D,EAAG0G,OAC3B1G,EAAG2G,WACLF,EAAO1C,KAAK,SAAS/D,EAAG2G,WACtB3G,EAAG4G,aACLH,EAAO1C,KAAK/D,EAAG4G,aACb5J,UAAUa,GAAoB,WAC/B4I,EAAO1C,KAAK,UAAU/G,UAAUa,GAAoB,UAAI,KAE1D,IAAI+D,GAAQ,EACT6E,GAAO3H,SACT8C,EAAQ,UAAU6E,EAAOI,KAAK,KAAK,IAUpC,KAAI,GAPArI,GAAUxB,UAAUa,GAASW,QAC7BsI,EAAW9J,UAAU4C,UAAUmH,YAAY/G,EAAG4E,WAAY5E,EAAG6E,SAAU7E,GAEvEoF,EAAM,6BAA6B0B,EAAU,IAAIA,EAAS,IAAI,eAAe9G,EAAG0D,GAAG,KAAO9B,EAAQ,IAElGjE,EAAOX,UAAUC,MAAMW,aAAaC,GACpCmJ,GAAe,aAAc,iBAAkB,eAAe,iBAC1DnI,EAAG,EAAGA,EAAIL,EAAQM,OAAQD,IAAI,CACrC,GAAI6F,EAEHA;EADElG,EAAQK,GAAG8F,SACLnG,EAAQK,GAAG8F,SAAS3E,EAAG4E,WAAY5E,EAAG6E,SAAU7E,GAC/B,QAAjBxB,EAAQK,GAAG6E,GACX1G,UAAU4C,UAAUjC,EAAO,cAAcqC,EAAG4E,WAAY5E,EAAG6E,SAAU7E,GACpD,cAAjBxB,EAAQK,GAAG6E,IAAuC,YAAjBlF,EAAQK,GAAG6E,GACtC1G,UAAU4C,UAAUjC,EAAO,gBAAgBqC,EAAGxB,EAAQK,GAAG6E,KAE/D1G,UAAU4C,UAAUjC,EAAO,UAAUa,EAAQK,GAAG6E,GAAI1D,EAG7D,IAAIkG,GAAalJ,UAAUC,MAAM+I,WAAWxH,EAAQK,GAAImI,GAEpDlD,EAAYtF,EAAQK,GAAGoI,IAAO,WAAYzI,EAAQK,GAAGoI,IAAI,IAAQ,EAErE7B,IAAO,oBAAsB5G,EAAQK,GAAS,MAAE,MAAMqH,EAAWW,KAAK,KAAK,KAAK/C,EAAU,IAAIY,EAAM,QAKrG,MAFAU,IAAM,yCAKPpI,UAAUC,MAAMwI,mBAAqB,SAAS5H,GAQ7C,IAAI,GAPAqJ,GAAO,8BAEP1I,EAAUxB,UAAUa,GAASW,QAC7B2I,KAEAC,EAAkB5I,EAAQM,OAC1BuI,EAAcrK,UAAUsK,KAAKC,YAAc,EAAE/I,EAAQM,OAAQ,GACzD0I,EAAI,EAAGA,EAAMhJ,EAAQM,OAAQ0I,IAAM,CAE1C,GAAIC,GAAgC,EAA1BjJ,EAAQgJ,GAAKxI,YACnB0I;MAAMD,IAAsC,KAA9BjJ,EAAQgJ,GAAKxI,cAAqD,OAA9BR,EAAQgJ,GAAKxI,cAA6D,iBAA7BR,GAAQgJ,GAAKxI,aAM/GmI,EAAOK,GAAO,MAJdJ,IACAC,GAAeI,EACfN,EAAOK,GAAOC,GAQhB,IAAI,GAFAE,GAAgBC,KAAKC,MAAMR,EAAcD,GACzCJ,GAAe,aAAe,eAAe,iBACzCnI,EAAE,EAAGA,EAAIL,EAAQM,OAAQD,IAAI,CACpC,GAAIiJ,GAAgBX,EAAOtI,GAAqBsI,EAAOtI,GAAvB8I,CAChCnJ,GAAQK,GAAGE,MAAQ+I,EAAe9K,UAAUC,MAAM2I,aAAapH,EAAQK,GAAIhB,EAC3E,IAAIqI,GAAalJ,UAAUC,MAAM+I,WAAWxH,EAAQK,GAAImI,EACxDE,IAAQ,sBAAsB1I,EAAQK,GAAGE,MAAO,GAAG,MAAMmH,EAAWW,KAAK,KAAK,MAA6B1I,SAArBK,EAAQK,GAAGS,MAAsBd,EAAQK,GAAG6E,GAAKlF,EAAQK,GAAGS,OAAS,SAI5J,MAFA4H,IAAO"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_html_templates.js b/codebase/sources/ext/dhtmlxscheduler_html_templates.js
new file mode 100644
index 0000000..713c6d4
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_html_templates.js
@@ -0,0 +1,22 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTemplatesReady",function(){
+ var els = document.body.getElementsByTagName("DIV");
+ for (var i=0; i < els.length; i++) {
+ var cs = els[i].className||"";
+ cs = cs.split(":");
+ if (cs.length == 2 && cs[0] == "template"){
+ var code = "return \""+(els[i].innerHTML||"").replace(/\"/g,"\\\"").replace(/[\n\r]+/g,"")+"\";";
+ code = unescape(code).replace(/\{event\.([a-z]+)\}/g,function(all,mask){
+ return '"+ev.'+mask+'+"';
+ });
+ scheduler.templates[cs[1]]=Function("start","end","ev",code);
+ els[i].style.display='none';
+ }
+ }
+}); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map b/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map
new file mode 100644
index 0000000..e10ce27
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_html_templates.js.map","sources":["dhtmlxscheduler_html_templates.js"],"names":["scheduler","attachEvent","els","document","body","getElementsByTagName","i","length","cs","className","split","code","innerHTML","replace","unescape","all","mask","templates","Function","style","display"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WAExC,IAAK,GADDC,GAAMC,SAASC,KAAKC,qBAAqB,OACpCC,EAAE,EAAGA,EAAIJ,EAAIK,OAAQD,IAAK,CAClC,GAAIE,GAAKN,EAAII,GAAGG,WAAW,EAE3B,IADAD,EAAKA,EAAGE,MAAM,KACG,GAAbF,EAAGD,QAAwB,YAATC,EAAG,GAAiB,CACzC,GAAIG,GAAO,YAAaT,EAAII,GAAGM,WAAW,IAAIC,QAAQ,MAAM,OAAQA,QAAQ,WAAW,IAAI,IAC3FF,GAAOG,SAASH,GAAME,QAAQ,uBAAuB,SAASE,EAAIC,GACjE,MAAO,QAAQA,EAAK,OAErBhB,UAAUiB,UAAUT,EAAG,IAAIU,SAAS,QAAQ,MAAM,KAAKP,GACvDT,EAAII,GAAGa,MAAMC,QAAQ"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_key_nav.js b/codebase/sources/ext/dhtmlxscheduler_key_nav.js
new file mode 100644
index 0000000..33fb417
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_key_nav.js
@@ -0,0 +1,115 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+//Initial idea and implementation by Steve MC
+scheduler._temp_key_scope = function (){
+
+scheduler.config.key_nav = true;
+
+var date; // used for copy and paste operations
+var section; // used for copy and paste operations
+var isCopy = null;
+
+
+scheduler.attachEvent("onMouseMove", function(id,e){
+ date = scheduler.getActionData(e).date;
+ section = scheduler.getActionData(e).section;
+});
+
+function clear_event_after(ev){
+ delete ev.rec_type; delete ev.rec_pattern;
+ delete ev.event_pid; delete ev.event_length;
+}
+scheduler._make_pasted_event = function(ev){
+ var event_duration = ev.end_date-ev.start_date;
+
+ var copy = scheduler._lame_copy({}, ev);
+ clear_event_after(copy);
+ copy.start_date = new Date(date);
+ copy.end_date = new Date(copy.start_date.valueOf() + event_duration);
+
+ if(section){
+ var state = scheduler.getState().mode,
+ property = null;
+
+ if(scheduler.matrix[state]){
+ property = scheduler.matrix[state].y_property;
+ }else if(scheduler._props[state]){
+ property = scheduler._props[state].property;
+ }
+ copy[property] = section;
+ }
+ return copy;
+};
+scheduler._do_paste = function(is_copy, modified_ev, original_ev){
+ scheduler.addEvent(modified_ev);
+ scheduler.callEvent("onEventPasted", [is_copy, modified_ev, original_ev]);
+};
+
+scheduler._is_key_nav_active = function(){
+ if(this._is_initialized() && !this._is_lightbox_open() && this.config.key_nav){
+ return true;
+ }
+ return false;
+};
+
+dhtmlxEvent(document,(_isOpera?"keypress":"keydown"),function(e){
+ if(!scheduler._is_key_nav_active()) return true;
+
+ e=e||event;
+
+ if (e.keyCode == 37 || e.keyCode == 39) { // Left, Right arrows
+ e.cancelBubble = true;
+
+ var next = scheduler.date.add(scheduler._date,(e.keyCode == 37 ? -1 : 1 ),scheduler._mode);
+ scheduler.setCurrentView(next);
+ return true;
+ }
+
+ var select_id = scheduler._select_id;
+ if (e.ctrlKey && e.keyCode == 67) { // CTRL+C
+ if (select_id) {
+ scheduler._buffer_id = select_id;
+ isCopy = true;
+ scheduler.callEvent("onEventCopied", [scheduler.getEvent(select_id)]);
+ }
+ return true;
+ }
+ if (e.ctrlKey && e.keyCode == 88) { // CTRL+X
+ if (select_id) {
+ isCopy = false;
+ scheduler._buffer_id = select_id;
+ var ev = scheduler.getEvent(select_id);
+ scheduler.updateEvent(ev.id);
+ scheduler.callEvent("onEventCut", [ev]);
+ }
+ }
+
+ if (e.ctrlKey && e.keyCode == 86) { // CTRL+V
+ var ev = scheduler.getEvent(scheduler._buffer_id);
+ if (ev) {
+ var new_ev = scheduler._make_pasted_event(ev);
+ if (isCopy) {
+ new_ev.id = scheduler.uid();
+ scheduler._do_paste(isCopy, new_ev, ev);
+ }
+ else { // cut operation
+ var res = scheduler.callEvent("onBeforeEventChanged",[new_ev, e, false, ev]);
+ if (res) {
+ scheduler._do_paste(isCopy, new_ev, ev);
+ isCopy = true; // switch to copy after first paste operation
+ }
+ }
+
+ }
+ return true;
+ }
+
+});
+
+};
+scheduler._temp_key_scope();
diff --git a/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map b/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map
new file mode 100644
index 0000000..4aa116c
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_key_nav.js.map","sources":["dhtmlxscheduler_key_nav.js"],"names":["scheduler","_temp_key_scope","clear_event_after","ev","rec_type","rec_pattern","event_pid","event_length","config","key_nav","date","section","isCopy","attachEvent","id","e","getActionData","_make_pasted_event","event_duration","end_date","start_date","copy","_lame_copy","Date","valueOf","state","getState","mode","property","matrix","y_property","_props","_do_paste","is_copy","modified_ev","original_ev","addEvent","callEvent","_is_key_nav_active","this","_is_initialized","_is_lightbox_open","dhtmlxEvent","document","_isOpera","event","keyCode","cancelBubble","next","add","_date","_mode","setCurrentView","select_id","_select_id","ctrlKey","_buffer_id","getEvent","updateEvent","new_ev","uid","res"],"mappings":"AACAA,UAAUC,gBAAkB,WAc5B,QAASC,GAAkBC,SACnBA,GAAGC,eAAiBD,GAAGE,kBACvBF,GAAGG,gBAAkBH,GAAGI,aAdhCP,UAAUQ,OAAOC,SAAU,CAE3B,IAAIC,GACAC,EACAC,EAAS,IAGbZ,WAAUa,YAAY,cAAe,SAASC,EAAGC,GAChDL,EAAOV,UAAUgB,cAAcD,GAAGL,KAClCC,EAAUX,UAAUgB,cAAcD,GAAGJ,UAOtCX,UAAUiB,mBAAqB,SAASd,GACvC,GAAIe,GAAiBf,EAAGgB,SAAShB,EAAGiB,WAEhCC,EAAOrB,UAAUsB,cAAenB,EAKpC,IAJAD,EAAkBmB,GAClBA,EAAKD,WAAa,GAAIG,MAAKb,GAC3BW,EAAKF,SAAW,GAAII,MAAKF,EAAKD,WAAWI,UAAYN,GAElDP,EAAQ,CACV,GAAIc,GAAQzB,UAAU0B,WAAWC,KAChCC,EAAW,IAET5B;UAAU6B,OAAOJ,GACnBG,EAAW5B,UAAU6B,OAAOJ,GAAOK,WAC3B9B,UAAU+B,OAAON,KACzBG,EAAW5B,UAAU+B,OAAON,GAAOG,UAEpCP,EAAKO,GAAYjB,EAElB,MAAOU,IAERrB,UAAUgC,UAAY,SAASC,EAASC,EAAaC,GACpDnC,UAAUoC,SAASF,GACnBlC,UAAUqC,UAAU,iBAAkBJ,EAASC,EAAaC,KAG7DnC,UAAUsC,mBAAqB,WAC9B,MAAGC,MAAKC,oBAAsBD,KAAKE,qBAAuBF,KAAK/B,OAAOC,SAC9D,GAED,GAGRiC,YAAYC,SAAUC,SAAS,WAAW,UAAW,SAAS7B,GAC7D,IAAIf,UAAUsC,qBAAsB,OAAO,CAI3C,IAFAvB,EAAEA,GAAG8B,MAEY,IAAb9B,EAAE+B,SAA8B,IAAb/B,EAAE+B,QAAe,CACvC/B,EAAEgC,cAAe,CAEjB;GAAIC,GAAOhD,UAAUU,KAAKuC,IAAIjD,UAAUkD,MAAoB,IAAbnC,EAAE+B,QAAgB,GAAK,EAAI9C,UAAUmD,MAEpF,OADAnD,WAAUoD,eAAeJ,IAClB,EAGR,GAAIK,GAAYrD,UAAUsD,UAC1B,IAAIvC,EAAEwC,SAAwB,IAAbxC,EAAE+B,QAMlB,MALIO,KACHrD,UAAUwD,WAAaH,EACvBzC,GAAS,EACTZ,UAAUqC,UAAU,iBAAkBrC,UAAUyD,SAASJ,OAEnD,CAER,IAAItC,EAAEwC,SAAwB,IAAbxC,EAAE+B,SACdO,EAAW,CACdzC,GAAS,EACTZ,UAAUwD,WAAaH,CACvB,IAAIlD,GAAKH,UAAUyD,SAASJ,EAC5BrD,WAAU0D,YAAYvD,EAAGW,IACzBd,UAAUqC,UAAU,cAAelC,IAIrC,GAAIY,EAAEwC,SAAwB,IAAbxC,EAAE+B,QAAe,CACjC,GAAI3C,GAAKH,UAAUyD,SAASzD,UAAUwD,WACtC;GAAIrD,EAAI,CACP,GAAIwD,GAAS3D,UAAUiB,mBAAmBd,EAC1C,IAAIS,EACH+C,EAAO7C,GAAKd,UAAU4D,MACtB5D,UAAUgC,UAAUpB,EAAQ+C,EAAQxD,OAEhC,CACJ,GAAI0D,GAAM7D,UAAUqC,UAAU,wBAAwBsB,EAAQ5C,GAAG,EAAOZ,GACpE0D,KACH7D,UAAUgC,UAAUpB,EAAQ+C,EAAQxD,GACpCS,GAAS,IAKZ,OAAO,MAMTZ,UAAUC"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_layer.js b/codebase/sources/ext/dhtmlxscheduler_layer.js
new file mode 100644
index 0000000..dcaa362
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_layer.js
@@ -0,0 +1,407 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTemplatesReady",function(){
+
+ this.layers.sort(function(a, b){
+ return a.zIndex - b.zIndex;
+ });
+
+ scheduler._dp_init=function(dp){
+ dp._methods=["_set_event_text_style","","changeEventId","deleteEvent"];
+
+ this.attachEvent("onEventAdded",function(id){
+ if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer)
+ dp.setUpdated(id,true,"inserted");
+ });
+ this.attachEvent("onBeforeEventDelete",function(id){
+ if(this.getEvent(id) && this.getEvent(id).layer == dp.layer) {
+ if (!this.validId(id)) return;
+ var z=dp.getState(id);
+
+ if (z=="inserted" || this._new_event) { dp.setUpdated(id,false); return true; }
+ if (z=="deleted") return false;
+ if (z=="true_deleted") return true;
+
+ dp.setUpdated(id,true,"deleted");
+ return false;
+ }
+ else return true;
+ });
+ this.attachEvent("onEventChanged",function(id){
+ if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer)
+ dp.setUpdated(id,true,"updated");
+ });
+
+ dp._getRowData=function(id,pref){
+ var ev=this.obj.getEvent(id);
+ var data = {};
+
+ for (var a in ev){
+ if (a.indexOf("_")===0) continue;
+ if (ev[a] && ev[a].getUTCFullYear) //not very good, but will work
+ data[a] = this.obj.templates.xml_format(ev[a]);
+ else
+ data[a] = ev[a];
+ }
+ return data;
+ };
+ dp._clearUpdateFlag=function(){};
+
+ dp.attachEvent("insertCallback", scheduler._update_callback);
+ dp.attachEvent("updateCallback", scheduler._update_callback);
+ dp.attachEvent("deleteCallback", function(upd, id) {
+ this.obj.setUserData(id, this.action_param, "true_deleted");
+ this.obj.deleteEvent(id);
+ });
+ };
+
+ (function() {
+ var _cloneObj = function(obj){
+ if(obj === null || typeof(obj) != 'object')
+ return obj;
+ var temp = new obj.constructor();
+ for(var key in obj)
+ temp[key] = _cloneObj(obj[key]);
+ return temp;
+ };
+
+ scheduler._dataprocessors = [];
+ scheduler._layers_zindex = {};
+ for(var i=0; i<scheduler.layers.length; i++) {
+ scheduler.config['lightbox_'+scheduler.layers[i].name] = { };
+ scheduler.config['lightbox_'+scheduler.layers[i].name].sections = _cloneObj(scheduler.config.lightbox.sections);
+ scheduler._layers_zindex[scheduler.layers[i].name] = scheduler.config.inital_layer_zindex||5 + i*3;
+ if(scheduler.layers[i].url) {
+ var dp = new dataProcessor(scheduler.layers[i].url);
+ dp.layer = scheduler.layers[i].name;
+ scheduler._dataprocessors.push(dp);
+ scheduler._dataprocessors[i].init(scheduler);
+ }
+ if(scheduler.layers[i].isDefault)
+ scheduler.defaultLayer = scheduler.layers[i].name;
+ }
+ })();
+
+
+ scheduler.showLayer = function(tlayer) {
+ this.toggleLayer(tlayer, true);
+ };
+
+ scheduler.hideLayer = function(tlayer) {
+ this.toggleLayer(tlayer, false);
+ };
+
+ scheduler.toggleLayer = function(tlayer, visible) { // visible is optional
+ var layer = this.getLayer(tlayer);
+
+ if(typeof visible != 'undefined')
+ layer.visible = !!visible;
+ else
+ layer.visible = !layer.visible;
+
+ this.setCurrentView(this._date, this._mode);
+ };
+
+ scheduler.getLayer = function(tlayer) { // either string with layer name or event with layer property
+ var layer,
+ layer_name;
+ if(typeof tlayer == 'string')
+ layer_name = tlayer;
+ if(typeof tlayer == 'object')
+ layer_name = tlayer.layer;
+ for (var i=0; i<scheduler.layers.length; i++) {
+ if(scheduler.layers[i].name == layer_name)
+ layer = scheduler.layers[i];
+ }
+ return layer;
+ };
+
+ scheduler.attachEvent("onBeforeLightbox", function (event_id){
+ var ev = this.getEvent(event_id);
+ this.config.lightbox.sections = this.config['lightbox_'+ev.layer].sections;
+ scheduler.resetLightbox();
+ return true;
+ });
+
+ scheduler.attachEvent("onClick", function (event_id, native_event_object){
+ var ev = scheduler.getEvent(event_id);
+ return !scheduler.getLayer(ev.layer).noMenu;
+ });
+
+ scheduler.attachEvent('onEventCollision', function(ev, evs) {
+ var layer = this.getLayer(ev);
+ if(!layer.checkCollision)
+ return false;
+ var count = 0;
+ for(var i = 0; i<evs.length; i++) {
+ if(evs[i].layer == layer.name && evs[i].id != ev.id)
+ count++;
+ }
+ return (count >= scheduler.config.collision_limit);
+ });
+
+ scheduler.addEvent=function(start_date,end_date,text,id,extra_data){
+ var ev=start_date;
+ if (arguments.length!=1){
+ ev=extra_data||{};
+ ev.start_date=start_date;
+ ev.end_date=end_date;
+ ev.text=text;
+ ev.id=id;
+ ev.layer = this.defaultLayer;
+ }
+ ev.id = ev.id||scheduler.uid();
+ ev.text = ev.text||"";
+
+
+ if (typeof ev.start_date == "string") ev.start_date=this.templates.api_date(ev.start_date);
+ if (typeof ev.end_date == "string") ev.end_date=this.templates.api_date(ev.end_date);
+ ev._timed=this.isOneDayEvent(ev);
+
+ var is_new=!this._events[ev.id];
+ this._events[ev.id]=ev;
+ this.event_updated(ev);
+ if (!this._loading)
+ this.callEvent(is_new?"onEventAdded":"onEventChanged",[ev.id,ev]);
+ };
+
+ this._evs_layer = {};
+ for (var i = 0; i < this.layers.length; i++) { // array in object for each layer
+ this._evs_layer[this.layers[i].name] = [];
+ }
+
+ scheduler.addEventNow=function(start,end,e){
+ var base = {};
+ if (typeof start == "object"){
+ base = start;
+ start = null;
+ }
+
+ var d = (this.config.event_duration||this.config.time_step)*60000;
+ if (!start) start = Math.round((scheduler._currentDate()).valueOf()/d)*d;
+ var start_date = new Date(start);
+ if (!end){
+ var start_hour = this.config.first_hour;
+ if (start_hour > start_date.getHours()){
+ start_date.setHours(start_hour);
+ start = start_date.valueOf();
+ }
+ end = start+d;
+ }
+
+
+ base.start_date = base.start_date||start_date;
+ base.end_date = base.end_date||new Date(end);
+ base.text = base.text||this.locale.labels.new_event;
+ base.id = this._drag_id = this.uid();
+ base.layer = this.defaultLayer;
+ this._drag_mode="new-size";
+
+ this._loading=true;
+ this.addEvent(base);
+ this.callEvent("onEventCreated",[this._drag_id,e]);
+ this._loading=false;
+
+ this._drag_event={}; //dummy , to trigger correct event updating logic
+ this._on_mouse_up(e);
+ };
+
+ scheduler._t_render_view_data = function(events) { // helper
+ if (this.config.multi_day && !this._table_view) {
+ var tvs = [];
+ var tvd = [];
+ for (var k = 0; k < events.length; k++) {
+ if (events[k]._timed)
+ tvs.push(events[k]);
+ else
+ tvd.push(events[k]);
+ }
+ this._table_view = true;
+ this.render_data(tvd);
+ this._table_view = false;
+ this.render_data(tvs);
+ }
+ else
+ this.render_data(events);
+ };
+
+ scheduler.render_view_data = function(){
+ if (this._not_render) {
+ this._render_wait = true;
+ return;
+ }
+ this._render_wait = false;
+
+ this.clear_view();
+
+ this._evs_layer = {};
+ for (var i = 0; i < this.layers.length; i++) { // array in object for each layer
+ this._evs_layer[this.layers[i].name] = [];
+ }
+
+ var evs = this.get_visible_events();
+ for (var i = 0; i < evs.length; i++) { // filling layer arrays with events
+ if(this._evs_layer[evs[i].layer])
+ this._evs_layer[evs[i].layer].push(evs[i]);
+ }
+
+ if(this._mode == 'month') { // old logic is used
+ var tevs = [];
+ for (var i = 0; i < this.layers.length; i++) {
+ if (this.layers[i].visible)
+ tevs = tevs.concat(this._evs_layer[this.layers[i].name]);
+ }
+ this._t_render_view_data(tevs);
+ }
+ else { // week, day; should use new logic
+ for (var i = 0; i < this.layers.length; i++) {
+ if (this.layers[i].visible) {
+ var evs_layer = this._evs_layer[this.layers[i].name];
+ this._t_render_view_data(evs_layer);
+ }
+ }
+ }
+ };
+
+ scheduler._render_v_bar=function(ev,x,y,w,h,style,contentA,contentB,bottom){
+ var id = ev.id;
+ if(contentA.indexOf('<div class=') == -1)
+ contentA = (scheduler.templates['event_header_'+ev.layer])?scheduler.templates['event_header_'+ev.layer](ev.start_date,ev.end_date,ev):contentA;
+ if(contentB.indexOf('<div class=') == -1)
+ contentB = (scheduler.templates['event_text_'+ev.layer])?scheduler.templates['event_text_'+ev.layer](ev.start_date,ev.end_date,ev):contentB;
+
+ var d=document.createElement("DIV");
+
+
+ var cs = "dhx_cal_event";
+ var cse = (scheduler.templates['event_class_'+ev.layer])?scheduler.templates['event_class_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_class(ev.start_date,ev.end_date,ev);
+ if (cse) cs=cs+" "+cse;
+
+ var html='<div event_id="'+id+'" class="'+cs+'" style="position:absolute; top:'+y+'px; left:'+x+'px; width:'+(w-4)+'px; height:'+h+'px;'+(style||"")+'">';
+ html+='<div class="dhx_header" style=" width:'+(w-6)+'px;" >&nbsp;</div>';
+ html+='<div class="dhx_title">'+contentA+'</div>';
+ html+='<div class="dhx_body" style=" width:'+(w-(this._quirks?4:14))+'px; height:'+(h-(this._quirks?20:30))+'px;">'+contentB+'</div>';
+ html+='<div class="dhx_footer" style=" width:'+(w-8)+'px;'+(bottom?' margin-top:-1px;':'')+'" ></div></div>';
+
+ d.innerHTML=html;
+ d.style.zIndex = 100;
+ return d.firstChild;
+ };
+
+ scheduler.render_event_bar=function(ev){
+ var parent=this._els["dhx_cal_data"][0];
+
+ var x=this._colsS[ev._sday];
+ var x2=this._colsS[ev._eday];
+ if (x2==x) x2=this._colsS[ev._eday+1];
+ var hb = this.xy.bar_height;
+
+ var y=this._colsS.heights[ev._sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)+ev._sorder*hb;
+
+ var d=document.createElement("DIV");
+ var cs = ev._timed?"dhx_cal_event_clear":"dhx_cal_event_line";
+ var cse = (scheduler.templates['event_class_'+ev.layer])?scheduler.templates['event_class_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_class(ev.start_date,ev.end_date,ev);
+ if (cse) cs=cs+" "+cse;
+
+ var html='<div event_id="'+ev.id+'" class="'+cs+'" style="position:absolute; top:'+y+'px; left:'+x+'px; width:'+(x2-x-15)+'px;'+(ev._text_style||"")+'">';
+
+ if (ev._timed)
+ html+=(scheduler.templates['event_bar_date_'+ev.layer])?scheduler.templates['event_bar_date_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_date(ev.start_date,ev.end_date,ev);
+ html+=( (scheduler.templates['event_bar_text_'+ev.layer])?scheduler.templates['event_bar_text_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev) + '</div>)');
+ html+='</div>';
+
+ d.innerHTML=html;
+
+ this._rendered.push(d.firstChild);
+ parent.appendChild(d.firstChild);
+ };
+
+ scheduler.render_event=function(ev){
+ var menu = scheduler.xy.menu_width;
+ if(scheduler.getLayer(ev.layer).noMenu)
+ menu = 0;
+
+ if (ev._sday<0) return; //can occur in case of recurring event during time shift
+ var parent=scheduler.locate_holder(ev._sday);
+ if (!parent) return; //attempt to render non-visible event
+ var sm = ev.start_date.getHours()*60+ev.start_date.getMinutes();
+ var em = (ev.end_date.getHours()*60+ev.end_date.getMinutes())||(scheduler.config.last_hour*60);
+
+ var top = (Math.round((sm*60*1000-this.config.first_hour*60*60*1000)*this.config.hour_size_px/(60*60*1000)))%(this.config.hour_size_px*24)+1; //42px/hour
+ var height = Math.max(scheduler.xy.min_event_height,(em-sm)*this.config.hour_size_px/60)+1; //42px/hour
+ //var height = Math.max(25,Math.round((ev.end_date.valueOf()-ev.start_date.valueOf())*(this.config.hour_size_px+(this._quirks?1:0))/(60*60*1000))); //42px/hour
+ var width=Math.floor((parent.clientWidth-menu)/ev._count);
+ var left=ev._sorder*width+1;
+ if (!ev._inner) width=width*(ev._count-ev._sorder);
+
+
+
+ var d=this._render_v_bar(ev.id,menu+left,top,width,height,ev._text_style,scheduler.templates.event_header(ev.start_date,ev.end_date,ev),scheduler.templates.event_text(ev.start_date,ev.end_date,ev));
+
+ this._rendered.push(d);
+ parent.appendChild(d);
+
+ left=left+parseInt(parent.style.left,10)+menu;
+
+ top+=this._dy_shift; //corrupt top, to include possible multi-day shift
+ d.style.zIndex = this._layers_zindex[ev.layer];
+
+ if (this._edit_id==ev.id){
+ d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue
+ var new_zIndex = d.style.zIndex;
+ width=Math.max(width-4,scheduler.xy.editor_width);
+ var d=document.createElement("DIV");
+ d.setAttribute("event_id",ev.id);
+ this.set_xy(d,width,height-20,left,top+14);
+ d.className="dhx_cal_editor";
+ d.style.zIndex = new_zIndex;
+ var d2=document.createElement("DIV");
+ this.set_xy(d2,width-6,height-26);
+ d2.style.cssText+=";margin:2px 2px 2px 2px;overflow:hidden;";
+
+
+ d2.style.zIndex = new_zIndex;
+ d.appendChild(d2);
+ this._els["dhx_cal_data"][0].appendChild(d);
+ this._rendered.push(d);
+
+ d2.innerHTML="<textarea class='dhx_cal_editor'>"+ev.text+"</textarea>";
+ if (this._quirks7) d2.firstChild.style.height=height-12+"px"; //IEFIX
+ this._editor=d2.firstChild;
+ this._editor.onkeypress=function(e){
+ if ((e||event).shiftKey) return true;
+ var code=(e||event).keyCode;
+ if (code==scheduler.keys.edit_save) scheduler.editStop(true);
+ if (code==scheduler.keys.edit_cancel) scheduler.editStop(false);
+ };
+ this._editor.onselectstart=function(e){ (e||event).cancelBubble=true; return true; };
+ d2.firstChild.focus();
+ //IE and opera can add x-scroll during focusing
+ this._els["dhx_cal_data"][0].scrollLeft=0;
+ d2.firstChild.select();
+ }
+ if (this._select_id==ev.id){
+ d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue
+ var icons=this.config["icons_"+((this._edit_id==ev.id)?"edit":"select")];
+ var icons_str="";
+ for (var i=0; i<icons.length; i++)
+ icons_str+="<div class='dhx_menu_icon "+icons[i]+"' title='"+this.locale.labels[icons[i]]+"'></div>";
+ var obj = this._render_v_bar(ev.id,left-menu+1,top,menu,icons.length*20+26,"","<div class='dhx_menu_head'></div>",icons_str,true);
+ obj.style.left=left-menu+1;
+ obj.style.zIndex = d.style.zIndex;
+ this._els["dhx_cal_data"][0].appendChild(obj);
+ this._rendered.push(obj);
+ }
+
+ };
+
+ scheduler.filter_agenda = function(id, event) {
+ var layer = scheduler.getLayer(event.layer);
+ return (layer && layer.visible);
+ };
+});
diff --git a/codebase/sources/ext/dhtmlxscheduler_layer.js.map b/codebase/sources/ext/dhtmlxscheduler_layer.js.map
new file mode 100644
index 0000000..0483f36
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_layer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_layer.js.map","sources":["dhtmlxscheduler_layer.js"],"names":["scheduler","attachEvent","this","layers","sort","a","b","zIndex","_dp_init","dp","_methods","id","_loading","validId","getEvent","layer","setUpdated","z","getState","_new_event","_getRowData","ev","obj","data","indexOf","getUTCFullYear","templates","xml_format","_clearUpdateFlag","_update_callback","upd","setUserData","action_param","deleteEvent","_cloneObj","temp","constructor","key","_dataprocessors","_layers_zindex","i","length","config","name","sections","lightbox","inital_layer_zindex","url","dataProcessor","push","init","isDefault","defaultLayer","showLayer","tlayer","toggleLayer","hideLayer","visible","getLayer","setCurrentView","_date","_mode","layer_name","event_id","resetLightbox","noMenu","evs","checkCollision","count","collision_limit","addEvent","start_date","end_date","text","extra_data","arguments","uid","api_date","_timed","isOneDayEvent","is_new","_events","event_updated","callEvent","_evs_layer","addEventNow","start","end","e","base","d","event_duration","time_step","Math","round","_currentDate","valueOf","Date","start_hour","first_hour","getHours","setHours","locale","labels","new_event","_drag_id","_drag_mode","_drag_event","_on_mouse_up","_t_render_view_data","events","multi_day","_table_view","tvs","tvd","k","render_data","render_view_data","_not_render","_render_wait","clear_view","get_visible_events","tevs","concat","evs_layer","_render_v_bar","x","y","w","h","style","contentA","contentB","bottom","document","createElement","cs","cse","event_class","html","_quirks","innerHTML","firstChild","render_event_bar","parent","_els","_colsS","_sday","x2","_eday","hb","xy","bar_height","heights","_sweek","height","month_scale_height","_sorder","_text_style","event_bar_date","event_bar_text","_rendered","appendChild","render_event","menu","menu_width","locate_holder","sm","getMinutes","em","last_hour","top","hour_size_px","max","min_event_height","width","floor","clientWidth","_count","left","_inner","event_header","event_text","parseInt","_dy_shift","_edit_id","new_zIndex","editor_width","setAttribute","set_xy","className","d2","cssText","_quirks7","_editor","onkeypress","event","shiftKey","code","keyCode","keys","edit_save","editStop","edit_cancel","onselectstart","cancelBubble","focus","scrollLeft","select","_select_id","icons","icons_str","filter_agenda"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_limit.js b/codebase/sources/ext/dhtmlxscheduler_limit.js
new file mode 100644
index 0000000..e56abc5
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_limit.js
@@ -0,0 +1,965 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.config.limit_start = null;
+scheduler.config.limit_end = null;
+scheduler.config.limit_view = false;
+scheduler.config.check_limits = true;
+scheduler.config.mark_now = true;
+scheduler.config.display_marked_timespans = true;
+
+scheduler._temp_limit_scope = function(){
+ var before = null;
+ var dhx_time_block = "dhx_time_block";
+ var default_timespan_type = "default";
+ var fix_options = function(options, days, zones) {
+ if (days instanceof Date && zones instanceof Date) {
+ options.start_date = days;
+ options.end_date = zones;
+ } else {
+ options.days = days;
+ options.zones = zones;
+ }
+ return options;
+ };
+ var get_resulting_options = function(days, zones, sections) {
+ var options = (typeof days == "object") ? days : { days: days };
+ options.type = dhx_time_block;
+ options.css = "";
+ if (zones) {
+ if (sections)
+ options.sections = sections;
+ options = fix_options(options, days, zones);
+ }
+ return options;
+ };
+ scheduler.blockTime = function(days, zones, sections){
+ var options = get_resulting_options(days, zones, sections);
+ return scheduler.addMarkedTimespan(options);
+ };
+ scheduler.unblockTime = function(days, zones, sections) {
+ zones = zones || "fullday";
+ var options = get_resulting_options(days, zones, sections);
+ return scheduler.deleteMarkedTimespan(options);
+ };
+ scheduler.attachEvent("onBeforeViewChange",function(om,od,nm,nd){
+ if (scheduler.config.limit_view){
+ nd = nd||od; nm = nm||om;
+ if (nd.valueOf()>scheduler.config.limit_end.valueOf() || this.date.add(nd,1,nm)<=scheduler.config.limit_start.valueOf()){
+ setTimeout(function(){
+ scheduler.setCurrentView((od || scheduler.config.limit_start), nm);
+ },1);
+ return false;
+ }
+ }
+ return true;
+ });
+ scheduler.checkInMarkedTimespan = function(ev, timespan_type, on_overlap){
+ timespan_type = timespan_type || default_timespan_type;
+
+ var res = true;
+ var temp_start_date = new Date(ev.start_date.valueOf());
+ var temp_end_date = scheduler.date.add(temp_start_date, 1, "day");
+ var timespans = scheduler._marked_timespans;
+ for (; temp_start_date < ev.end_date; temp_start_date = scheduler.date.date_part(temp_end_date), temp_end_date = scheduler.date.add(temp_start_date, 1, "day") ) {
+ var day_value = +scheduler.date.date_part( new Date(temp_start_date) ); // the first part of event not necessarily contains only date part
+ var day_index = temp_start_date.getDay();
+
+ var zones = getZones(ev, timespans, day_index, day_value, timespan_type);
+ if (zones){
+ for (var i = 0; i < zones.length; i+=2) {
+
+ // they may change for new event if it passes limit zone
+ var sm = scheduler._get_zone_minutes(temp_start_date);
+ var em = ( ev.end_date>temp_end_date || ev.end_date.getDate() != temp_start_date.getDate() ) ? 1440 : scheduler._get_zone_minutes(ev.end_date);
+
+ var sz = zones[i];
+ var ez = zones[i+1];
+ if (sz<em && ez>sm) {
+ if(typeof on_overlap == "function"){
+ //handler allows to cancel overlapping
+ //actually needed only to keep default behavior of limits
+ res = on_overlap(ev, sm, em, sz, ez);//event object, event start/end minutes in 'zones' format, zone start/end minutes
+ }else{
+ res = false;
+ }
+ if(!res)
+ break;
+ }
+ }
+ }
+ }
+ return !res;
+ };
+ var blocker = scheduler.checkLimitViolation = function(event){
+ if(!event)
+ return true;
+ if (!scheduler.config.check_limits)
+ return true;
+ var s = scheduler;
+ var c = s.config;
+ var evs = [];
+ if (event.rec_type) {
+ var dates = scheduler.getRecDates(event);
+ for(var i=0; i < dates.length; i++){
+ var ev = scheduler._copy_event(event);
+ scheduler._lame_copy(ev, dates[i]);
+ evs.push(ev);
+ }
+
+ } else {
+ evs = [event];
+ }
+
+ var complete_res = true;
+ for (var p=0; p<evs.length; p++) {
+ var res = true;
+ var ev = evs[p];
+ // Event could have old _timed property (e.g. we are creating event with DND on timeline view and crossed day)
+ ev._timed = scheduler.isOneDayEvent(ev);
+
+ res = (c.limit_start && c.limit_end) ? (ev.start_date.valueOf() >= c.limit_start.valueOf() && ev.end_date.valueOf() <= c.limit_end.valueOf()) : true;
+ if (res){
+ res = !scheduler.checkInMarkedTimespan(ev, dhx_time_block, function(ev, sm, em, sz, ez){
+ //try crop event to allow placing
+ var allow = true;
+ if (sm<=ez && sm >=sz){
+ if (ez == 24*60 || em<ez){
+ allow = false;
+ }
+ if(ev._timed && s._drag_id && s._drag_mode == "new-size"){
+ ev.start_date.setHours(0);
+ ev.start_date.setMinutes(ez);
+ }
+ else {
+ allow = false;
+ }
+ }
+ if ((em>=sz && em<ez) || (sm < sz && em > ez)){
+ if(ev._timed && s._drag_id && s._drag_mode == "new-size"){
+ ev.end_date.setHours(0);
+ ev.end_date.setMinutes(sz);
+ }
+ else {
+ allow = false;
+ }
+ }
+ return allow;
+ });
+ }
+ if (!res) {
+ res = (s.checkEvent("onLimitViolation")) ? s.callEvent("onLimitViolation",[ev.id, ev]) : res;
+ }
+ complete_res = complete_res && res;
+ }
+ if(!complete_res){
+ s._drag_id = null;
+ s._drag_mode = null;
+ }
+ return complete_res;
+
+
+ };
+ scheduler._get_blocked_zones = function(timespans, property, day_index, day_value, timespan_type){
+ var zones =[];
+ if (timespans && timespans[property]) {
+ var timeline_zones = timespans[property];
+ var blocked_timeline_zones = this._get_relevant_blocked_zones(day_index, day_value, timeline_zones, timespan_type);
+ for (var i=0; i<blocked_timeline_zones.length; i++) {
+ zones = this._add_timespan_zones(zones, blocked_timeline_zones[i].zones);
+ }
+ }
+ return zones;
+ };
+ scheduler._get_relevant_blocked_zones = function(day_index, day_value, zones, timespan_type) {
+ var relevant_zones = (zones[day_value] && zones[day_value][timespan_type]) ? zones[day_value][timespan_type] :
+ (zones[day_index] && zones[day_index][timespan_type]) ? zones[day_index][timespan_type] : [];
+ return relevant_zones;
+ };
+ function getZones(ev, timespans, day_index, day_value, timespan_type){
+ var s = scheduler;
+ //containers for 'unit' and 'timeline' views, and related 'section_id' properties
+ var zones = [];
+ var containers = {
+ '_props':'map_to',
+ 'matrix':'y_property'};
+ //check blocked sections in all units and timelines
+ for(var container in containers){
+ var property = containers[container];
+ if(s[container]){
+ for(var view in s[container]){
+ var view_config = s[container][view];
+ var linker = view_config[property];
+ if(!ev[linker]) continue;
+ zones = s._add_timespan_zones(zones,
+ scheduler._get_blocked_zones(timespans[view], ev[linker], day_index, day_value, timespan_type));
+ }
+ }
+ }
+ // now need to add day blocks
+ zones = s._add_timespan_zones(zones, scheduler._get_blocked_zones(timespans, 'global', day_index, day_value, timespan_type));
+ return zones;
+ }
+
+ scheduler.attachEvent("onMouseDown", function(classname) {
+ return !(classname == dhx_time_block);
+ });
+ scheduler.attachEvent("onBeforeDrag",function(id){
+ if (!id) return true;
+ return blocker(scheduler.getEvent(id));
+ });
+ scheduler.attachEvent("onClick", function (event_id, native_event_object){
+ return blocker(scheduler.getEvent(event_id));
+ });
+ scheduler.attachEvent("onBeforeLightbox",function(id){
+
+ var ev = scheduler.getEvent(id);
+ before = [ev.start_date, ev.end_date];
+ return blocker(ev);
+ });
+ scheduler.attachEvent("onEventSave", function(id, data, is_new_event) {
+
+ //lightbox may not have 'time' section
+ if(!(data.start_date && data.end_date)){
+ var ev = scheduler.getEvent(id);
+ data.start_date = new Date(ev.start_date);
+ data.end_date = new Date(ev.end_date);
+ }
+
+ if(data.rec_type){
+ //_roll_back_dates modifies start_date of recurring event, need to check limits after modification
+ // use a copy to keep original event unchanged
+ var data_copy = scheduler._lame_clone(data);
+ scheduler._roll_back_dates(data_copy);
+ return blocker(data_copy);
+ }
+ return blocker(data);
+ });
+ scheduler.attachEvent("onEventAdded",function(id){
+ if (!id) return true;
+ var ev = scheduler.getEvent(id);
+ if (!blocker(ev) && scheduler.config.limit_start && scheduler.config.limit_end) {
+ //if newly created event is outside of limited time - crop it, leaving only allowed time
+ if (ev.start_date < scheduler.config.limit_start) {
+ ev.start_date = new Date(scheduler.config.limit_start);
+ }
+ if (ev.start_date.valueOf() >= scheduler.config.limit_end.valueOf()) {
+ ev.start_date = this.date.add(scheduler.config.limit_end, -1, "day");
+ }
+ if (ev.end_date < scheduler.config.limit_start) {
+ ev.end_date = new Date(scheduler.config.limit_start);
+ }
+ if (ev.end_date.valueOf() >= scheduler.config.limit_end.valueOf()) {
+ ev.end_date = this.date.add(scheduler.config.limit_end, -1, "day");
+ }
+ if (ev.start_date.valueOf() >= ev.end_date.valueOf()) {
+ ev.end_date = this.date.add(ev.start_date, (this.config.event_duration||this.config.time_step), "minute");
+ }
+ ev._timed=this.isOneDayEvent(ev);
+ }
+ return true;
+ });
+ scheduler.attachEvent("onEventChanged",function(id){
+ if (!id) return true;
+ var ev = scheduler.getEvent(id);
+ if (!blocker(ev)){
+ if (!before) return false;
+ ev.start_date = before[0];
+ ev.end_date = before[1];
+ ev._timed=this.isOneDayEvent(ev);
+ }
+ return true;
+ });
+ scheduler.attachEvent("onBeforeEventChanged",function(ev, native_object, is_new){
+ return blocker(ev);
+ });
+ scheduler.attachEvent("onBeforeEventCreated", function(ev) { // native event
+ var start_date = scheduler.getActionData(ev).date;
+ var event = {
+ _timed: true,
+ start_date: start_date,
+ end_date: scheduler.date.add(start_date, scheduler.config.time_step, "minute")
+ };
+ return blocker(event);
+ });
+
+ scheduler.attachEvent("onViewChange", function(){
+ scheduler._mark_now();
+ });
+ scheduler.attachEvent("onSchedulerResize", function(){
+ window.setTimeout(function(){ scheduler._mark_now(); }, 1);
+ return true;
+ });
+ scheduler.attachEvent("onTemplatesReady", function() {
+ scheduler._mark_now_timer = window.setInterval(function() {
+ if(!scheduler._is_initialized())
+ return;
+ scheduler._mark_now();
+ }, 60000);
+ });
+ scheduler._mark_now = function(hide) {
+ // day, week, units views
+ var dhx_now_time = 'dhx_now_time';
+ if (!this._els[dhx_now_time]) {
+ this._els[dhx_now_time] = [];
+ }
+ var now = scheduler._currentDate();
+ var cfg = this.config;
+ scheduler._remove_mark_now(); // delete previous marks if they exist
+ if (!hide && cfg.mark_now && now < this._max_date && now > this._min_date && now.getHours() >= cfg.first_hour && now.getHours()<cfg.last_hour) {
+ var day_index = this.locate_holder_day(now);
+ this._els[dhx_now_time] = scheduler._append_mark_now(day_index, now);
+ }
+ };
+ scheduler._append_mark_now = function(day_index, now) {
+ var dhx_now_time = 'dhx_now_time';
+ var zone_start= scheduler._get_zone_minutes(now);
+ var options = {
+ zones: [zone_start, zone_start+1],
+ css: dhx_now_time,
+ type: dhx_now_time
+ };
+ if (!this._table_view) {
+ if (this._props && this._props[this._mode]) { // units view
+ var day_divs = this._els["dhx_cal_data"][0].childNodes;
+ var r_divs = [];
+
+ for (var i=0; i<day_divs.length-1; i++) {
+ var t_day = day_index+i; // as each unit is actually considered +1 day
+ options.days = t_day;
+ var t_div = scheduler._render_marked_timespan(options, null, t_day)[0];
+ r_divs.push(t_div);
+ }
+ return r_divs;
+ } else { // day/week views
+ options.days = day_index;
+ return scheduler._render_marked_timespan(options, null, day_index);
+ }
+ } else {
+ if (this._mode == "month") {
+ options.days = +scheduler.date.date_part(now);
+ return scheduler._render_marked_timespan(options, null, null);
+ }
+ }
+ };
+ scheduler._remove_mark_now = function() {
+ var dhx_now_time = 'dhx_now_time';
+ var els = this._els[dhx_now_time];
+ for (var i=0; i<els.length; i++) {
+ var div = els[i];
+ var parent = div.parentNode;
+ if (parent) {
+ parent.removeChild(div);
+ }
+ }
+ this._els[dhx_now_time] = [];
+ };
+
+ /*
+ scheduler._marked_timespans = {
+ "global": {
+ "0": {
+ "default": [
+ { // sunday
+ zones: [0, 100, 500, 600],
+ css: "yellow_box",
+ type: "default",
+ view: "global",
+ day: 0
+ }
+ ]
+ }
+ "112121312": {
+ "my_special_type": [
+ {
+ zones: [600, 900],
+ type: "block",
+ css: "some_class",
+ view: "global",
+ day: 112121312
+ },
+ {}
+ ]
+ }
+ },
+ "units": {
+ "5_id": {
+ "3": {
+ "special_type": [ {}, {}, {} ],
+ "another_type": [ {} ]
+ }
+ },
+ "6_id": {
+ "11212127": {
+ ...
+ }
+ }
+ }
+ }
+ */
+ scheduler._marked_timespans = { global: {} };
+
+ scheduler._get_zone_minutes = function(date) {
+ return date.getHours()*60 + date.getMinutes();
+ };
+ scheduler._prepare_timespan_options = function(config) { // receives 1 option, returns array of options
+ var r_configs = []; // resulting configs
+ var temp_configs = [];
+
+ if (config.days == "fullweek")
+ config.days = [0,1,2,3,4,5,6];
+
+ if (config.days instanceof Array) {
+ var t_days = config.days.slice();
+ for (var i=0; i<t_days.length; i++) {
+ var cloned_config = scheduler._lame_clone(config);
+ cloned_config.days = t_days[i];
+ r_configs.push.apply(r_configs, scheduler._prepare_timespan_options(cloned_config));
+ }
+ return r_configs;
+ }
+
+ if ( !config || !((config.start_date && config.end_date && config.end_date > config.start_date) || (config.days !== undefined && config.zones)) )
+ return r_configs; // incorrect config was provided
+
+ var min = 0;
+ var max = 24*60;
+ if (config.zones == "fullday")
+ config.zones = [min, max];
+ if (config.zones && config.invert_zones) {
+ config.zones = scheduler.invertZones(config.zones);
+ }
+
+ config.id = scheduler.uid();
+ config.css = config.css||"";
+ config.type = config.type||default_timespan_type;
+
+ var sections = config.sections;
+ if (sections) {
+ for (var view_key in sections) {
+ if (sections.hasOwnProperty(view_key)) {
+ var ids = sections[view_key];
+ if (!(ids instanceof Array))
+ ids = [ids];
+ for (var i=0; i<ids.length; i++) {
+ var t_config = scheduler._lame_copy({}, config);
+ t_config.sections = {};
+ t_config.sections[view_key] = ids[i];
+ temp_configs.push(t_config);
+ }
+ }
+ }
+ } else {
+ temp_configs.push(config);
+ }
+
+ for (var k=0; k<temp_configs.length; k++) {
+ var c_config = temp_configs[k]; // config to be checked
+
+ var start_date = c_config.start_date;
+ var end_date = c_config.end_date;
+
+ if (start_date && end_date) {
+ var t_sd = scheduler.date.date_part(new Date(start_date)); // e.g. 05 october
+ var t_ed= scheduler.date.add(t_sd, 1, "day"); // 06 october, will both be incremented in the loop
+
+ while (t_sd < end_date) {
+ var t_config = scheduler._lame_copy({}, c_config);
+ delete t_config.start_date;
+ delete t_config.end_date;
+ t_config.days = t_sd.valueOf();
+ var zone_start = (start_date > t_sd) ? scheduler._get_zone_minutes(start_date) : min;
+ var zone_end = ( end_date>t_ed || end_date.getDate() != t_sd.getDate() ) ? max : scheduler._get_zone_minutes(end_date);
+ t_config.zones = [zone_start, zone_end];
+ r_configs.push(t_config);
+
+ t_sd = t_ed;
+ t_ed = scheduler.date.add(t_ed, 1, "day");
+ }
+ } else {
+ if (c_config.days instanceof Date)
+ c_config.days = (scheduler.date.date_part(c_config.days)).valueOf();
+ c_config.zones = config.zones.slice();
+ r_configs.push(c_config);
+ }
+ }
+ return r_configs;
+ };
+ scheduler._get_dates_by_index = function(index, start, end) {
+ var dates = [];
+ start = scheduler.date.date_part(new Date(start||scheduler._min_date));
+ end = new Date(end||scheduler._max_date);
+ var start_day = start.getDay();
+ var delta = (index-start_day >= 0) ? (index-start_day) : (7-start.getDay()+index);
+ var t_date = scheduler.date.add(start, delta, "day");
+ for (; t_date < end; t_date = scheduler.date.add(t_date, 1, "week")) {
+ dates.push(t_date);
+ }
+ return dates;
+ };
+ scheduler._get_css_classes_by_config = function(config) {
+ var css_classes = [];
+ if (config.type == dhx_time_block) {
+ css_classes.push(dhx_time_block);
+ if (config.css)
+ css_classes.push(dhx_time_block+"_reset");
+ }
+ css_classes.push("dhx_marked_timespan", config.css);
+ return css_classes.join(" ");
+ };
+ scheduler._get_block_by_config = function(config) {
+ var block = document.createElement("DIV");
+ if (config.html) {
+ if (typeof config.html == "string")
+ block.innerHTML = config.html;
+ else
+ block.appendChild(config.html);
+ }
+ return block;
+ };
+ scheduler._render_marked_timespan = function(options, area, day) {
+ var blocks = []; // resulting block which will be rendered and returned
+ var c = scheduler.config;
+ var min_date = this._min_date;
+ var max_date = this._max_date;
+ var day_value = false; // if timespan for specific date should be displayed
+
+ if (!c.display_marked_timespans)
+ return blocks;
+
+ // in case of markTimespan
+ if (!day && day !== 0) {
+ if (options.days < 7)
+ day = options.days;
+ else {
+ var date_to_display = new Date(options.days);
+ day_value = +date_to_display;
+
+ // in case of markTimespan date could be not in the viewing range, need to return
+ if ( !(+max_date > +date_to_display && +min_date <= +date_to_display) )
+ return blocks;
+
+ day = date_to_display.getDay();
+ }
+
+ // convert day default index (Sun - 0, Sat - 6) to index of hourscales (depends on week_start and config.start_on_monday)
+ var min_day = min_date.getDay();
+ if (min_day > day) {
+ day = 7 - (min_day-day);
+ } else {
+ day = day - min_day;
+ }
+ }
+ var zones = options.zones;
+ var css_classes = scheduler._get_css_classes_by_config(options);
+
+ if (scheduler._table_view && scheduler._mode == "month") {
+ var areas = [];
+ var days = [];
+
+
+ if (!area) {
+ days = (day_value) ? [day_value] : scheduler._get_dates_by_index(day);
+ for (var i=0; i < days.length; i++) {
+ areas.push( this._scales[days[i]] );
+ }
+ } else {
+ areas.push(area);
+ days.push(day);
+ }
+
+ for (var i=0; i < areas.length; i++) {
+ area = areas[i];
+ day = days[i];
+
+ var sweek = Math.floor((this._correct_shift(day,1)-min_date.valueOf())/(60*60*1000*24*this._cols.length)),
+ sday = this.locate_holder_day(day, false) % this._cols.length;
+
+ if(this._ignores[sday]) continue;
+
+ var block_proto = scheduler._get_block_by_config(options),
+ height = Math.max(area.offsetHeight - 1, 0), // 1 for bottom border
+ width = Math.max(area.offsetWidth - 1, 0), // 1 for left border
+ left = this._colsS[sday],
+ top = this._colsS.heights[sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)-1;
+
+ block_proto.className = css_classes;
+ block_proto.style.top = top + "px";
+ block_proto.style.lineHeight = block_proto.style.height = height + "px";
+
+ for (var k=0; k < zones.length; k+=2) {
+ var start = zones[i];
+ var end = zones[i+1];
+ if (end <= start)
+ return [];
+
+ var block = block_proto.cloneNode(true);
+
+ block.style.left = (left + Math.round( (start)/(24*60) * width)) + "px";
+ block.style.width = Math.round( (end-start)/(24*60) * width) + "px";
+
+ area.appendChild(block);
+ blocks.push(block);
+ }
+ }
+ } else {
+ var index = day;
+
+ if(this._ignores[this.locate_holder_day(day, false)]) return blocks;
+
+ if (this._props && this._props[this._mode] && options.sections && options.sections[this._mode]) {
+ var view = this._props[this._mode];
+ index = view.order[options.sections[this._mode]];
+ if (view.size && (index > view.position+view.size)) {
+ index = 0;
+ }
+ }
+ area = area ? area : scheduler.locate_holder(index);
+
+ for (var i = 0; i < zones.length; i+=2){
+ var start = Math.max(zones[i], c.first_hour*60);
+ var end = Math.min(zones[i+1], c.last_hour*60);
+ if (end <= start) {
+ if (i+2 < zones.length)
+ continue;
+ else
+ return [];
+ }
+
+ var block = scheduler._get_block_by_config(options);
+ block.className = css_classes;
+
+ // +1 for working with section which really takes up whole height (as % would be == 0)
+ var all_hours_height = this.config.hour_size_px*24 + 1;
+ var hour_ms = 60*60*1000;
+ block.style.top = (Math.round((start*60*1000-this.config.first_hour*hour_ms)*this.config.hour_size_px/hour_ms) % all_hours_height) + "px";
+ block.style.lineHeight = block.style.height = Math.max((Math.round(((end-start)*60*1000)*this.config.hour_size_px/hour_ms)) % all_hours_height, 1)+"px";
+
+ area.appendChild(block);
+ blocks.push(block);
+ }
+ }
+
+ return blocks;
+ };
+ // just marks timespan, will be cleaned after refresh
+ scheduler.markTimespan = function(configuration) {
+ var configs = scheduler._prepare_timespan_options(configuration);
+ if (!configs.length)
+ return;
+ var divs = [];
+ for (var i=0; i<configs.length; i++) {
+ var config = configs[i];
+ var blocks = scheduler._render_marked_timespan(config, null, null);
+ if(blocks.length)
+ divs.push.apply(divs, blocks);
+ }
+ return divs;
+ };
+ scheduler.unmarkTimespan = function(divs) {
+ if (!divs)
+ return;
+ for (var i=0; i<divs.length; i++) {
+ var div = divs[i];
+ // parent may no longer be present if we switched views, navigated
+ if (div.parentNode) {
+ div.parentNode.removeChild(div);
+ }
+ }
+ };
+
+ scheduler._marked_timespans_ids = {};
+ // adds marked timespan to collections, persistent
+ scheduler.addMarkedTimespan = function(configuration) {
+ var configs = scheduler._prepare_timespan_options(configuration);
+ var global = "global";
+
+ if (!configs.length)
+ return; // options are incorrect, nothing to mark
+
+ var id = configs[0].id;
+ var timespans = scheduler._marked_timespans;
+ var ids = scheduler._marked_timespans_ids;
+ if (!ids[id])
+ ids[id] = [];
+
+ for (var i=0; i<configs.length; i++) {
+ var config = configs[i];
+ var day = config.days;
+ var zones = config.zones;
+ var css = config.css;
+ var sections = config.sections;
+ var type = config.type; // default or specified
+ config.id = id;
+
+ if (sections) {
+ for (var view_key in sections) {
+ if (sections.hasOwnProperty(view_key)) {
+ if (!timespans[view_key])
+ timespans[view_key] = {};
+ var unit_id = sections[view_key];
+ var timespans_view = timespans[view_key];
+ if (!timespans_view[unit_id])
+ timespans_view[unit_id] = {};
+ if (!timespans_view[unit_id][day])
+ timespans_view[unit_id][day] = {};
+ if (!timespans_view[unit_id][day][type]){
+ timespans_view[unit_id][day][type] = [];
+ if(!scheduler._marked_timespans_types)
+ scheduler._marked_timespans_types = {};
+ if(!scheduler._marked_timespans_types[type])
+ scheduler._marked_timespans_types[type] = true;
+ }
+ var day_configs = timespans_view[unit_id][day][type];
+ config._array = day_configs;
+ day_configs.push(config);
+ ids[id].push(config);
+ }
+ }
+ } else {
+ if (!timespans[global][day])
+ timespans[global][day] = {};
+ if (!timespans[global][day][type])
+ timespans[global][day][type] = [];
+
+ if(!scheduler._marked_timespans_types)
+ scheduler._marked_timespans_types = {};
+ if(!scheduler._marked_timespans_types[type])
+ scheduler._marked_timespans_types[type] = true;
+
+
+ var day_configs = timespans[global][day][type];
+ config._array = day_configs;
+ day_configs.push(config);
+ ids[id].push(config);
+ }
+ }
+ return id;
+ };
+ // not used for now
+ scheduler._add_timespan_zones = function(current_zones, zones) {
+ var resulting_zones = current_zones.slice();
+ zones = zones.slice();
+
+ if (!resulting_zones.length)
+ return zones;
+
+ for (var i=0; i<resulting_zones.length; i+=2) {
+ var c_zone_start = resulting_zones[i];
+ var c_zone_end = resulting_zones[i+1];
+ var isLast = (i+2 == resulting_zones.length);
+
+ for (var k=0; k<zones.length; k+=2) {
+ var zone_start = zones[k];
+ var zone_end = zones[k+1];
+ if ((zone_end > c_zone_end && zone_start <= c_zone_end) || (zone_start < c_zone_start && zone_end >= c_zone_start)) {
+ resulting_zones[i] = Math.min(c_zone_start, zone_start);
+ resulting_zones[i+1] = Math.max(c_zone_end, zone_end);
+ i -= 2;
+ } else {
+ if (!isLast) // do nothing, maybe next current zone will match or will be last
+ continue;
+
+ var offset = (c_zone_start > zone_start)?0:2;
+ resulting_zones.splice(i+offset, 0, zone_start, zone_end); // last current zone, need to add another
+ }
+ zones.splice(k--,2); // zone was merged or added, need to exclude it
+ break;
+ }
+ }
+ return resulting_zones;
+ };
+ scheduler._subtract_timespan_zones = function(current_zones, zones) {
+ var resulting_zones = current_zones.slice();
+ for (var i=0; i<resulting_zones.length; i+=2 ) {
+ var c_zone_start = resulting_zones[i];// current_zone_start
+ var c_zone_end = resulting_zones[i+1];
+ for (var k=0; k<zones.length; k+=2) {
+ var zone_start = zones[k];
+ var zone_end = zones[k+1];
+ if (zone_end > c_zone_start && zone_start < c_zone_end) {
+ var is_modified = false;
+ if (c_zone_start >= zone_start && c_zone_end <= zone_end) {
+ resulting_zones.splice(i, 2);
+ }
+ if (c_zone_start < zone_start) {
+ resulting_zones.splice(i, 2, c_zone_start, zone_start);
+ is_modified = true;
+ }
+ if (c_zone_end > zone_end) {
+ resulting_zones.splice( (is_modified)?(i+2):i, (is_modified)?0:2, zone_end, c_zone_end);
+ }
+ i -= 2;
+ break;
+ } else {
+ continue;
+ }
+ }
+ }
+ return resulting_zones;
+ };
+ scheduler.invertZones = function(zones) {
+ return scheduler._subtract_timespan_zones([0, 1440], zones.slice());
+ };
+ scheduler._delete_marked_timespan_by_id = function(id) {
+ var configs = scheduler._marked_timespans_ids[id];
+ if (configs) {
+ for (var i=0; i<configs.length; i++) {
+ var config = configs[i];
+ var parent_array = config._array;
+ for (var k=0; k<parent_array.length; k++) {
+ if (parent_array[k] == config) {
+ parent_array.splice(k, 1);
+ break;
+ }
+ }
+ }
+ }
+ };
+ scheduler._delete_marked_timespan_by_config = function(config) {
+ var timespans = scheduler._marked_timespans;
+ var sections = config.sections;
+ var day = config.days;
+ var type = config.type||default_timespan_type;
+ var day_timespans = []; // array of timespans to subtract our config
+ if (sections) {
+ for (var view_key in sections) {
+ if (sections.hasOwnProperty(view_key) && timespans[view_key]) {
+ var unit_id = sections[view_key];
+ if (timespans[view_key][unit_id] && timespans[view_key][unit_id][day] && timespans[view_key][unit_id][day][type])
+ day_timespans = timespans[view_key][unit_id][day][type];
+ }
+ }
+ } else {
+ if (timespans.global[day] && timespans.global[day][type])
+ day_timespans = timespans.global[day][type];
+ }
+ for (var i=0; i<day_timespans.length; i++) {
+ var d_t = day_timespans[i];
+ var zones = scheduler._subtract_timespan_zones(d_t.zones, config.zones);
+ if (zones.length)
+ d_t.zones = zones;
+ else {
+ day_timespans.splice(i,1);
+ i--;
+ // need to update ids collection
+ var related_zones = scheduler._marked_timespans_ids[d_t.id];
+ for (var k=0; k<related_zones.length; k++) {
+ if (related_zones[k] == d_t) {
+ related_zones.splice(k, 1);
+ break;
+ }
+ }
+ }
+ }
+ };
+ scheduler.deleteMarkedTimespan = function(configuration) {
+ // delete everything
+ if (!arguments.length) {
+ scheduler._marked_timespans = { global: {} };
+ scheduler._marked_timespans_ids = {};
+ scheduler._marked_timespans_types = {};
+ }
+
+ if (typeof configuration != "object") { // id was passed
+ scheduler._delete_marked_timespan_by_id(configuration);
+ } else { // normal configuration was passed
+
+ if(!(configuration.start_date && configuration.end_date)){
+ if(!configuration.days)
+ configuration.days = "fullweek";
+ if(!configuration.zones)
+ configuration.zones = "fullday";
+ }
+
+ var types = [];
+ if(!configuration.type){
+ //if type not specified - delete timespans of all types
+ for(var type in scheduler._marked_timespans_types){
+ types.push(type);
+ }
+ }else{
+ types.push(configuration.type);
+ }
+
+
+ var configs = scheduler._prepare_timespan_options(configuration);
+
+ for (var i=0; i<configs.length; i++) {
+
+ var config = configs[i];
+ for( var t=0; t < types.length; t++){
+ var typedConfig = scheduler._lame_clone(config);
+ typedConfig.type = types[t];
+ scheduler._delete_marked_timespan_by_config(typedConfig);
+ }
+ }
+
+ }
+ };
+ scheduler._get_types_to_render = function(common, specific) {
+ var types_to_render = (common) ? scheduler._lame_copy({},common) : {};
+ for (var type in specific||{} ) {
+ if (specific.hasOwnProperty(type)) {
+ types_to_render[type] = specific[type];
+ }
+ }
+ return types_to_render;
+ };
+ scheduler._get_configs_to_render = function(types) {
+ var configs = [];
+ for (var type in types) {
+ if (types.hasOwnProperty(type)) {
+ configs.push.apply(configs, types[type]);
+ }
+ }
+ return configs;
+ };
+ scheduler.attachEvent("onScaleAdd", function(area, day) {
+ if (scheduler._table_view && scheduler._mode != "month")
+ return;
+
+ var day_index = day.getDay();
+ var day_value = day.valueOf();
+ var mode = this._mode;
+ var timespans = scheduler._marked_timespans;
+ var r_configs = [];
+
+ if (this._props && this._props[mode]) { // we are in the units view and need to draw it's sections as well
+ var view = this._props[mode]; // units view object
+ var units = view.options;
+ var index = scheduler._get_unit_index(view, day);
+ var unit = units[index]; // key, label
+ day = scheduler.date.date_part(new Date(this._date)); // for units view actually only 1 day is displayed yet the day variable will change, need to use this._date for all calls
+ day_index = day.getDay();
+ day_value = day.valueOf();
+
+ if (timespans[mode] && timespans[mode][unit.key]) {
+ var unit_zones = timespans[mode][unit.key];
+ var unit_types = scheduler._get_types_to_render(unit_zones[day_index], unit_zones[day_value]);
+ r_configs.push.apply(r_configs, scheduler._get_configs_to_render(unit_types));
+ }
+ }
+
+ var global_data = timespans["global"];
+ var day_types = global_data[day_value]||global_data[day_index];
+ r_configs.push.apply(r_configs, scheduler._get_configs_to_render(day_types));
+
+ for (var i=0; i<r_configs.length; i++) {
+ scheduler._render_marked_timespan(r_configs[i], area, day);
+ }
+ });
+
+ scheduler.dblclick_dhx_marked_timespan = function(e,src){
+ if (!scheduler.config.dblclick_create){
+ scheduler.callEvent("onScaleDblClick",[scheduler.getActionData(e).date,src,e]);
+ }
+ scheduler.addEventNow(scheduler.getActionData(e).date,null,e);
+ };
+
+};
+scheduler._temp_limit_scope();
diff --git a/codebase/sources/ext/dhtmlxscheduler_limit.js.map b/codebase/sources/ext/dhtmlxscheduler_limit.js.map
new file mode 100644
index 0000000..96d0ed7
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_limit.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_limit.js.map","sources":["dhtmlxscheduler_limit.js"],"names":["scheduler","config","limit_start","limit_end","limit_view","check_limits","mark_now","display_marked_timespans","_temp_limit_scope","getZones","ev","timespans","day_index","day_value","timespan_type","s","zones","containers","_props","matrix","container","property","view","view_config","linker","_add_timespan_zones","_get_blocked_zones","before","dhx_time_block","default_timespan_type","fix_options","options","days","Date","start_date","end_date","get_resulting_options","sections","type","css","blockTime","addMarkedTimespan","unblockTime","deleteMarkedTimespan","attachEvent","om","od","nm","nd","valueOf","this","date","add","setTimeout","setCurrentView","checkInMarkedTimespan","on_overlap","res","temp_start_date","temp_end_date","_marked_timespans","date_part","getDay","i","length","sm","_get_zone_minutes","em","getDate","sz","ez","blocker","checkLimitViolation","event","c","evs","rec_type","dates","getRecDates","_copy_event","_lame_copy","push","complete_res","p","_timed","isOneDayEvent","allow","_drag_id","_drag_mode","setHours","setMinutes","checkEvent","callEvent","id","timeline_zones","blocked_timeline_zones","_get_relevant_blocked_zones","relevant_zones","classname","getEvent","event_id","data","data_copy","_lame_clone","_roll_back_dates","event_duration","time_step","getActionData","_mark_now","window","_mark_now_timer","setInterval","_is_initialized","hide","dhx_now_time","_els","now","_currentDate","cfg","_remove_mark_now","_max_date","_min_date","getHours","first_hour","last_hour","locate_holder_day","_append_mark_now","zone_start","_table_view","_mode","day_divs","childNodes","r_divs","t_day","t_div","_render_marked_timespan","els","div","parent","parentNode","removeChild","global","getMinutes","_prepare_timespan_options","r_configs","temp_configs","Array","t_days","slice","cloned_config","apply","undefined","min","max","invert_zones","invertZones","uid","view_key","hasOwnProperty","ids","t_config","k","c_config","t_sd","t_ed","zone_end","_get_dates_by_index","index","start","end","start_day","delta","t_date","_get_css_classes_by_config","css_classes","join","_get_block_by_config","block","document","createElement","html","innerHTML","appendChild","area","day","blocks","min_date","max_date","date_to_display","min_day","areas","_scales","sweek","Math","floor","_correct_shift","_cols","sday","_ignores","block_proto","height","offsetHeight","width","offsetWidth","left","_colsS","top","heights","xy","month_scale_height","className","style","lineHeight","cloneNode","round","order","size","position","locate_holder","all_hours_height","hour_size_px","hour_ms","markTimespan","configuration","configs","divs","unmarkTimespan","_marked_timespans_ids","unit_id","timespans_view","_marked_timespans_types","day_configs","_array","current_zones","resulting_zones","c_zone_start","c_zone_end","isLast","offset","splice","_subtract_timespan_zones","is_modified","_delete_marked_timespan_by_id","parent_array","_delete_marked_timespan_by_config","day_timespans","d_t","related_zones","arguments","types","t","typedConfig","_get_types_to_render","common","specific","types_to_render","_get_configs_to_render","mode","units","_get_unit_index","unit","_date","key","unit_zones","unit_types","global_data","day_types","dblclick_dhx_marked_timespan","e","src","dblclick_create","addEventNow"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_map_view.js b/codebase/sources/ext/dhtmlxscheduler_map_view.js
new file mode 100644
index 0000000..2ea6044
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_map_view.js
@@ -0,0 +1,492 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.xy.map_date_width = 188; // date column width
+scheduler.xy.map_description_width = 400; // description column width
+
+scheduler.config.map_resolve_event_location = true; // if events in database doesn't have lat and lng values there will be an attempt to resolve them on event loading, useful for migration
+scheduler.config.map_resolve_user_location = true; // if user will be promted to share his location to display it on the map
+
+scheduler.config.map_initial_position = new google.maps.LatLng(48.724, 8.215); // inital position of the map
+scheduler.config.map_error_position = new google.maps.LatLng(15, 15); // this position will be displayed in case if event doesn't have corresponding coordinates
+
+scheduler.config.map_infowindow_max_width = 300;
+
+scheduler.config.map_type = google.maps.MapTypeId.ROADMAP;
+
+scheduler.config.map_zoom_after_resolve = 15;
+
+scheduler.locale.labels.marker_geo_success = "It seems you are here.";
+scheduler.locale.labels.marker_geo_fail = "Sorry, could not get your current position using geolocation.";
+
+scheduler.templates.marker_date = scheduler.date.date_to_str("%Y-%m-%d %H:%i"); // date for map's infowindow will be formated following way
+
+scheduler.templates.marker_text = function(start, end, ev) {
+ return "<div><b>" + ev.text + "</b><br/><br/>" + (ev.event_location || '') + "<br/><br/>" + scheduler.templates.marker_date(start) + " - " + scheduler.templates.marker_date(end) + "</div>";
+};
+scheduler.dblclick_dhx_map_area = function() {
+ if (!this.config.readonly && this.config.dblclick_create)
+ this.addEventNow({
+ start_date: scheduler._date,
+ end_date: scheduler.date.add(scheduler._date, scheduler.config.time_step, "minute")
+ });
+};
+scheduler.templates.map_time = function(start, end, ev) {
+ if (ev._timed)
+ return this.day_date(ev.start_date, ev.end_date, ev) + " " + this.event_date(start);
+ else
+ return scheduler.templates.day_date(start) + " &ndash; " + scheduler.templates.day_date(end);
+};
+scheduler.templates.map_text = function(start, end, ev) {
+ return ev.text;
+};
+
+scheduler.date.map_start = function(d) {
+ return d;
+};
+scheduler.date.add_map = function(date, inc, mode) {
+ return (new Date(date.valueOf()));
+};
+
+scheduler.templates.map_date = function(dd, ed, mode) {
+ return '';
+};
+
+scheduler._latLngUpdate = false; // flag for not displaying event second time in case of coordinates update
+
+scheduler.attachEvent("onSchedulerReady", function() {
+ scheduler._isMapPositionSet = false; // if user actual (geolocation) position was set on the map
+
+ var gmap = document.createElement('div');
+ gmap.className = 'dhx_map';
+ gmap.id = 'dhx_gmap';
+ gmap.style.dispay = "none";
+
+ var node = scheduler._obj;
+
+ node.appendChild(gmap);
+
+ scheduler._els.dhx_gmap = [];
+ scheduler._els.dhx_gmap.push(gmap);
+
+ _setMapSize('dhx_gmap');
+
+ var mapOptions = {
+ zoom: scheduler.config.map_inital_zoom || 10,
+ center: scheduler.config.map_initial_position,
+ mapTypeId: scheduler.config.map_type || google.maps.MapTypeId.ROADMAP
+ };
+ var map = new google.maps.Map(document.getElementById('dhx_gmap'), mapOptions);
+ map.disableDefaultUI = false;
+ map.disableDoubleClickZoom = !scheduler.config.readonly;
+
+ google.maps.event.addListener(map, "dblclick", function(event) {
+ if (!scheduler.config.readonly && scheduler.config.dblclick_create) {
+ var point = event.latLng;
+ geocoder.geocode(
+ { 'latLng': point },
+ function(results, status) {
+ if (status == google.maps.GeocoderStatus.OK) {
+ point = results[0].geometry.location;
+ scheduler.addEventNow({
+ lat: point.lat(),
+ lng: point.lng(),
+ event_location: results[0].formatted_address,
+ start_date: scheduler._date,
+ end_date: scheduler.date.add(scheduler._date, scheduler.config.time_step, "minute")
+ });
+ }
+ }
+ );
+ }
+ });
+
+ var infoWindowOptions = {
+ content: ''
+ };
+
+ if (scheduler.config.map_infowindow_max_width) {
+ infoWindowOptions.maxWidth = scheduler.config.map_infowindow_max_width;
+ }
+
+ scheduler.map = {
+ _points: [],
+ _markers: [],
+ _infowindow: new google.maps.InfoWindow(infoWindowOptions),
+ _infowindows_content: [],
+ _initialization_count: -1,
+ _obj: map
+ };
+
+ geocoder = new google.maps.Geocoder();
+
+ if (scheduler.config.map_resolve_user_location) {
+ if (navigator.geolocation) {
+ if (!scheduler._isMapPositionSet) {
+ navigator.geolocation.getCurrentPosition(function(position) {
+ var _userLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
+ map.setCenter(_userLocation);
+ map.setZoom(scheduler.config.map_zoom_after_resolve || 10);
+ scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_success);
+ scheduler.map._infowindow.position = map.getCenter();
+ scheduler.map._infowindow.open(map);
+
+ scheduler._isMapPositionSet = true;
+ },
+ function() {
+ scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_fail);
+ scheduler.map._infowindow.setPosition(map.getCenter());
+ scheduler.map._infowindow.open(map);
+ scheduler._isMapPositionSet = true;
+ });
+ }
+ }
+ }
+ google.maps.event.addListener(map, "resize", function(event) {
+ gmap.style.zIndex = '5';
+ map.setZoom(map.getZoom());
+
+ });
+ google.maps.event.addListener(map, "tilesloaded", function(event) {
+ gmap.style.zIndex = '5';
+ });
+
+ gmap.style.display = 'none'; // property was changed after attaching map
+
+
+ scheduler.attachEvent("onSchedulerResize", function() {
+ if (this._mode == "map") {
+ this.map_view(true);
+ return false;
+ }
+ return true;
+ });
+
+ var old = scheduler.render_data;
+ scheduler.render_data = function(evs, hold) {
+ if (this._mode == "map") {
+ fill_map_tab();
+ var events = scheduler.get_visible_events();
+ for (var i = 0; i < events.length; i++) {
+ if (!scheduler.map._markers[events[i].id]) {
+ showAddress(events[i], false, false);
+ }
+ }
+ } else
+ return old.apply(this, arguments);
+ };
+
+ function set_full_view(mode) {
+ if (mode) {
+ var l = scheduler.locale.labels;
+ scheduler._els["dhx_cal_header"][0].innerHTML = "<div class='dhx_map_line' style='width: " + (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 2) + "px;' ><div class='headline_date' style='width: " + scheduler.xy.map_date_width + "px;'>" + l.date + "</div><div class='headline_description' style='width: " + scheduler.xy.map_description_width + "px;'>" + l.description + "</div></div>";
+ scheduler._table_view = true;
+ scheduler.set_sizes();
+ }
+ }
+
+ function clear_map_tab() {
+ scheduler._selected_event_id = null;
+ scheduler.map._infowindow.close();
+ var markers = scheduler.map._markers;
+ for (var key in markers) {
+ if (markers.hasOwnProperty(key)) {
+ markers[key].setMap(null);
+ delete scheduler.map._markers[key];
+ if (scheduler.map._infowindows_content[key])
+ delete scheduler.map._infowindows_content[key];
+ }
+ }
+ }
+
+ function fill_map_tab() {
+ //select events for which data need to be printed
+ var events = scheduler.get_visible_events();
+ events.sort(function(a, b) {
+ if(a.start_date.valueOf()==b.start_date.valueOf())
+ return a.id>b.id?1:-1;
+ return a.start_date>b.start_date?1:-1;
+ });
+
+ //generate html for the view
+ var html = "<div class='dhx_map_area'>";
+ for (var i = 0; i < events.length; i++) {
+ var ev = events[i];
+ var event_class = (ev.id == scheduler._selected_event_id) ? 'dhx_map_line highlight' : 'dhx_map_line';
+ var bg_color = (ev.color ? ("background:" + ev.color + ";") : "");
+ var color = (ev.textColor ? ("color:" + ev.textColor + ";") : "");
+ html += "<div class='" + event_class + "' event_id='" + ev.id + "' style='" + bg_color + "" + color + "" + (ev._text_style || "") + " width: " + (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 2) + "px;'><div style='width: " + scheduler.xy.map_date_width + "px;' >" + scheduler.templates.map_time(ev.start_date, ev.end_date, ev) + "</div>";
+ html += "<div class='dhx_event_icon icon_details'>&nbsp</div>";
+ html += "<div class='line_description' style='width:" + (scheduler.xy.map_description_width - 25) + "px;'>" + scheduler.templates.map_text(ev.start_date, ev.end_date, ev) + "</div></div>"; // -25 = icon size 20 and padding 5
+ }
+ html += "<div class='dhx_v_border' style='left: " + (scheduler.xy.map_date_width - 2) + "px;'></div><div class='dhx_v_border_description'></div></div>";
+
+ //render html
+ scheduler._els["dhx_cal_data"][0].scrollTop = 0; //fix flickering in FF
+ scheduler._els["dhx_cal_data"][0].innerHTML = html;
+ scheduler._els["dhx_cal_data"][0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px';
+
+ var t = scheduler._els["dhx_cal_data"][0].firstChild.childNodes;
+ scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode + "_date"](scheduler._min_date, scheduler._max_date, scheduler._mode);
+
+ scheduler._rendered = [];
+ for (var i = 0; i < t.length - 2; i++) {
+ scheduler._rendered[i] = t[i];
+ }
+ }
+
+ function _setMapSize(elem_id) { //input - map's div id
+ var map = document.getElementById(elem_id);
+ var height = scheduler._y - scheduler.xy.nav_height;
+ if (height < 0)
+ height = 0;
+ var width = scheduler._x - scheduler.xy.map_date_width - scheduler.xy.map_description_width - 1;
+ if (width < 0)
+ width = 0;
+ map.style.height = height + 'px';
+ map.style.width = width + 'px';
+ map.style.marginLeft = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px';
+ map.style.marginTop = (scheduler.xy.nav_height + 2) + 'px';
+ }
+
+ scheduler.map_view = function(mode) {
+ scheduler.map._initialization_count++;
+ var gmap = scheduler._els.dhx_gmap[0];
+ var temp_center;
+ scheduler._els.dhx_cal_data[0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px';
+
+ scheduler._min_date = scheduler.config.map_start || (scheduler._currentDate());
+ scheduler._max_date = scheduler.config.map_end || scheduler.date.add(scheduler._currentDate(), 1, "year");
+
+ scheduler._table_view = true;
+ set_full_view(mode);
+
+ if (mode) { //map tab activated
+ clear_map_tab();
+ fill_map_tab();
+ gmap.style.display = 'block';
+
+ // need to resize block everytime window is resized
+ _setMapSize('dhx_gmap');
+ temp_center = scheduler.map._obj.getCenter();
+
+ var events = scheduler.get_visible_events();
+ for (var i = 0; i < events.length; i++) {
+ if (!scheduler.map._markers[events[i].id]) {
+ showAddress(events[i]);
+ }
+ }
+
+ } else { //map tab de-activated
+ gmap.style.display = 'none';
+ }
+ google.maps.event.trigger(scheduler.map._obj, 'resize');
+
+ if (scheduler.map._initialization_count === 0 && temp_center) { // if tab is activated for the first time need to fix position
+ scheduler.map._obj.setCenter(temp_center);
+ }
+
+ if (scheduler._selected_event_id) {
+ selectEvent(scheduler._selected_event_id);
+ }
+ };
+
+ var selectEvent = function(event_id) {
+ scheduler.map._obj.setCenter(scheduler.map._points[event_id]);
+ scheduler.callEvent("onClick", [event_id]);
+ };
+
+ var showAddress = function(event, setCenter, performClick) { // what if event have incorrect position from the start?
+ var point = scheduler.config.map_error_position;
+ if (event.lat && event.lng) {
+ point = new google.maps.LatLng(event.lat, event.lng);
+ }
+ var message = scheduler.templates.marker_text(event.start_date, event.end_date, event);
+ if (!scheduler._new_event) {
+
+ scheduler.map._infowindows_content[event.id] = message;
+
+ if (scheduler.map._markers[event.id])
+ scheduler.map._markers[event.id].setMap(null);
+
+ scheduler.map._markers[event.id] = new google.maps.Marker({
+ position: point,
+ map: scheduler.map._obj
+ });
+
+ google.maps.event.addListener(scheduler.map._markers[event.id], 'click', function() {
+ scheduler.map._infowindow.setContent(scheduler.map._infowindows_content[event.id]);
+ scheduler.map._infowindow.open(scheduler.map._obj, scheduler.map._markers[event.id]);
+ scheduler._selected_event_id = event.id;
+ scheduler.render_data();
+ });
+ scheduler.map._points[event.id] = point;
+
+ if (setCenter) scheduler.map._obj.setCenter(scheduler.map._points[event.id]);
+ if (performClick) scheduler.callEvent("onClick", [event.id]);
+ }
+ };
+
+ scheduler.attachEvent("onClick", function(event_id, native_event_object) {
+ if (this._mode == "map") {
+ scheduler._selected_event_id = event_id;
+ for (var i = 0; i < scheduler._rendered.length; i++) {
+ scheduler._rendered[i].className = 'dhx_map_line';
+ if (scheduler._rendered[i].getAttribute("event_id") == event_id) {
+ scheduler._rendered[i].className += " highlight";
+ }
+ }
+ if (scheduler.map._points[event_id] && scheduler.map._markers[event_id]) {
+ scheduler.map._obj.setCenter(scheduler.map._points[event_id]); // was panTo
+ google.maps.event.trigger(scheduler.map._markers[event_id], 'click');
+ }
+ }
+ return true;
+ });
+
+ var _displayEventOnMap = function(event) {
+ if (event.event_location && geocoder) {
+ geocoder.geocode(
+ {
+ 'address': event.event_location,
+ 'language': scheduler.uid().toString()
+ },
+ function(results, status) {
+ var point = {};
+ if (status != google.maps.GeocoderStatus.OK) {
+ point = scheduler.callEvent("onLocationError", [event.id]);
+ if (!point || point === true)
+ point = scheduler.config.map_error_position;
+ } else {
+ point = results[0].geometry.location;
+ }
+ event.lat = point.lat();
+ event.lng = point.lng();
+
+ scheduler._selected_event_id = event.id;
+
+ scheduler._latLngUpdate = true;
+ scheduler.callEvent("onEventChanged", [event.id, event]);
+ showAddress(event, true, true);
+ }
+ );
+ } else {
+ showAddress(event, true, true);
+ }
+ };
+
+ var _updateEventLocation = function(event) { // update lat and lng in database
+ if (event.event_location && geocoder) {
+ geocoder.geocode(
+ {
+ 'address': event.event_location,
+ 'language': scheduler.uid().toString()
+ },
+ function(results, status) {
+ var point = {};
+ if (status != google.maps.GeocoderStatus.OK) {
+ point = scheduler.callEvent("onLocationError", [event.id]);
+ if (!point || point === true)
+ point = scheduler.config.map_error_position;
+ } else {
+ point = results[0].geometry.location;
+ }
+ event.lat = point.lat();
+ event.lng = point.lng();
+ scheduler._latLngUpdate = true;
+ scheduler.callEvent("onEventChanged", [event.id, event]);
+ }
+ );
+ }
+ };
+
+ var _delay = function(method, object, params, delay) {
+ setTimeout(function() {
+ var ret = method.apply(object, params);
+ method = object = params = null;
+ return ret;
+ }, delay || 1);
+ };
+
+ scheduler.attachEvent("onEventChanged", function(event_id, event_object) {
+ if (!this._latLngUpdate) {
+ var event = scheduler.getEvent(event_id);
+ if ((event.start_date < scheduler._min_date && event.end_date > scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) {
+ if (scheduler.map._markers[event_id])
+ scheduler.map._markers[event_id].setMap(null);
+ _displayEventOnMap(event);
+ } else { // event no longer should be displayed on the map view
+ scheduler._selected_event_id = null;
+ scheduler.map._infowindow.close();
+ if (scheduler.map._markers[event_id])
+ scheduler.map._markers[event_id].setMap(null);
+ }
+ }
+ else
+ this._latLngUpdate = false;
+ return true;
+ });
+
+
+ scheduler.attachEvent("onEventIdChange", function(old_event_id, new_event_id) {
+ var event = scheduler.getEvent(new_event_id);
+ if ((event.start_date < scheduler._min_date && event.end_date > scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) {
+ if (scheduler.map._markers[old_event_id]) {
+ scheduler.map._markers[old_event_id].setMap(null);
+ delete scheduler.map._markers[old_event_id];
+ }
+ if (scheduler.map._infowindows_content[old_event_id])
+ delete scheduler.map._infowindows_content[old_event_id];
+ _displayEventOnMap(event);
+ }
+ return true;
+ });
+
+ scheduler.attachEvent("onEventAdded", function(event_id, event_object) {
+ if (!scheduler._dataprocessor) {
+ if ((event_object.start_date < scheduler._min_date && event_object.end_date > scheduler._min_date) || (event_object.start_date < scheduler._max_date && event_object.end_date > scheduler._max_date) || (event_object.start_date.valueOf() >= scheduler._min_date && event_object.end_date.valueOf() <= scheduler._max_date)) {
+ if (scheduler.map._markers[event_id])
+ scheduler.map._markers[event_id].setMap(null);
+ _displayEventOnMap(event_object);
+ }
+ }
+ return true;
+ });
+
+ /* Test/example
+ scheduler.attachEvent("onLocationError", function(event_id,event_object){
+ return new google.maps.LatLng(8, 8);
+ });
+ */
+
+ scheduler.attachEvent("onBeforeEventDelete", function(event_id, event_object) {
+ if (scheduler.map._markers[event_id]) {
+ scheduler.map._markers[event_id].setMap(null); // if new event is deleted tab != map then it doesn't have marker yet
+ }
+ scheduler._selected_event_id = null;
+ scheduler.map._infowindow.close();
+ return true;
+ });
+
+ scheduler._event_resolve_delay = 1500;
+ scheduler.attachEvent("onEventLoading", function(event) {
+ if (scheduler.config.map_resolve_event_location && event.event_location && !event.lat && !event.lng) { // don't delete !event.lat && !event.lng as location could change
+ scheduler._event_resolve_delay += 1500;
+ _delay(_updateEventLocation, this, [event], scheduler._event_resolve_delay);
+ }
+ return true;
+ });
+
+ scheduler.attachEvent("onEventCancel", function(event_id, is_new) {
+ if (is_new) {
+ if (scheduler.map._markers[event_id])
+ scheduler.map._markers[event_id].setMap(null);
+ scheduler.map._infowindow.close();
+ }
+ return true;
+ });
+});
diff --git a/codebase/sources/ext/dhtmlxscheduler_map_view.js.map b/codebase/sources/ext/dhtmlxscheduler_map_view.js.map
new file mode 100644
index 0000000..e7bcadb
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_map_view.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_map_view.js.map","sources":["dhtmlxscheduler_map_view.js"],"names":["scheduler","xy","map_date_width","map_description_width","config","map_resolve_event_location","map_resolve_user_location","map_initial_position","google","maps","LatLng","map_error_position","map_infowindow_max_width","map_type","MapTypeId","ROADMAP","map_zoom_after_resolve","locale","labels","marker_geo_success","marker_geo_fail","templates","marker_date","date","date_to_str","marker_text","start","end","ev","text","event_location","dblclick_dhx_map_area","this","readonly","dblclick_create","addEventNow","start_date","_date","end_date","add","time_step","map_time","_timed","day_date","event_date","map_text","map_start","d","add_map","Date","valueOf","map_date","_latLngUpdate","attachEvent","set_full_view","mode","l","_els","innerHTML","description","_table_view","set_sizes","clear_map_tab","_selected_event_id","map","_infowindow","close","markers","_markers","key","hasOwnProperty","setMap","_infowindows_content","fill_map_tab","events","get_visible_events","sort","a","b","id","html","i","length","event_class","bg_color","color","textColor","_text_style","scrollTop","style","width","t","firstChild","childNodes","_mode","_min_date","_max_date","_rendered","_setMapSize","elem_id","document","getElementById","height","_y","nav_height","_x","marginLeft","marginTop","_isMapPositionSet","gmap","createElement","className","dispay","node","_obj","appendChild","dhx_gmap","push","mapOptions","zoom","map_inital_zoom","center","mapTypeId","Map","disableDefaultUI","disableDoubleClickZoom","event","addListener","point","latLng","geocoder","geocode","results","status","GeocoderStatus","OK","geometry","location","lat","lng","formatted_address","infoWindowOptions","content","maxWidth","_points","InfoWindow","_initialization_count","Geocoder","navigator","geolocation","getCurrentPosition","position","_userLocation","coords","latitude","longitude","setCenter","setZoom","setContent","getCenter","open","setPosition","zIndex","getZoom","display","map_view","old","render_data","apply","arguments","showAddress","temp_center","dhx_cal_data","_currentDate","map_end","trigger","selectEvent","event_id","callEvent","performClick","message","_new_event","Marker","getAttribute","_displayEventOnMap","address","language","uid","toString","_updateEventLocation","_delay","method","object","params","delay","setTimeout","ret","getEvent","old_event_id","new_event_id","event_object","_dataprocessor","_event_resolve_delay","is_new"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_minical.js b/codebase/sources/ext/dhtmlxscheduler_minical.js
new file mode 100644
index 0000000..262c7cb
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_minical.js
@@ -0,0 +1,472 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.templates.calendar_month = scheduler.date.date_to_str("%F %Y");
+scheduler.templates.calendar_scale_date = scheduler.date.date_to_str("%D");
+scheduler.templates.calendar_date = scheduler.date.date_to_str("%d");
+scheduler.config.minicalendar = {
+ mark_events: true
+};
+scheduler._synced_minicalendars = [];
+scheduler.renderCalendar = function(obj, _prev, is_refresh) {
+ var cal = null;
+ var date = obj.date || (scheduler._currentDate());
+ if (typeof date == "string")
+ date = this.templates.api_date(date);
+
+ if (!_prev) {
+ var cont = obj.container;
+ var pos = obj.position;
+
+ if (typeof cont == "string")
+ cont = document.getElementById(cont);
+
+ if (typeof pos == "string")
+ pos = document.getElementById(pos);
+ if (pos && (typeof pos.left == "undefined")) {
+ var tpos = getOffset(pos);
+ pos = {
+ top: tpos.top + pos.offsetHeight,
+ left: tpos.left
+ };
+ }
+ if (!cont)
+ cont = scheduler._get_def_cont(pos);
+
+ cal = this._render_calendar(cont, date, obj);
+ cal.onclick = function(e) {
+ e = e || event;
+ var src = e.target || e.srcElement;
+
+ if (src.className.indexOf("dhx_month_head") != -1) {
+ var pname = src.parentNode.className;
+ if (pname.indexOf("dhx_after") == -1 && pname.indexOf("dhx_before") == -1) {
+ var newdate = scheduler.templates.xml_date(this.getAttribute("date"));
+ newdate.setDate(parseInt(src.innerHTML, 10));
+ scheduler.unmarkCalendar(this);
+ scheduler.markCalendar(this, newdate, "dhx_calendar_click");
+ this._last_date = newdate;
+ if (this.conf.handler) this.conf.handler.call(scheduler, newdate, this);
+ }
+ }
+ };
+ } else {
+ cal = this._render_calendar(_prev.parentNode, date, obj, _prev);
+ scheduler.unmarkCalendar(cal);
+ }
+
+ if (scheduler.config.minicalendar.mark_events) {
+ var start = scheduler.date.month_start(date);
+ var end = scheduler.date.add(start, 1, "month");
+ var evs = this.getEvents(start, end);
+ var filter = this["filter_" + this._mode];
+ for (var i = 0; i < evs.length; i++) {
+ var ev = evs[i];
+ if (filter && !filter(ev.id, ev))
+ continue;
+ var d = ev.start_date;
+ if (d.valueOf() < start.valueOf())
+ d = start;
+ d = scheduler.date.date_part(new Date(d.valueOf()));
+ while (d < ev.end_date) {
+ this.markCalendar(cal, d, "dhx_year_event");
+ d = this.date.add(d, 1, "day");
+ if (d.valueOf() >= end.valueOf())
+ break;
+ }
+ }
+ }
+
+ this._markCalendarCurrentDate(cal);
+
+ cal.conf = obj;
+ if (obj.sync && !is_refresh)
+ this._synced_minicalendars.push(cal);
+
+ return cal;
+};
+scheduler._get_def_cont = function(pos) {
+ if (!this._def_count) {
+ this._def_count = document.createElement("DIV");
+ this._def_count.className = "dhx_minical_popup";
+ this._def_count.onclick = function(e) { (e || event).cancelBubble = true; };
+ document.body.appendChild(this._def_count);
+ }
+
+ this._def_count.style.left = pos.left + "px";
+ this._def_count.style.top = pos.top + "px";
+ this._def_count._created = new Date();
+
+ return this._def_count;
+};
+scheduler._locateCalendar = function(cal, date) {
+ if (typeof date == "string")
+ date = scheduler.templates.api_date(date);
+
+ if(+date > +cal._max_date || +date < +cal._min_date)
+ return null;
+
+ var table = cal.childNodes[2].childNodes[0];
+
+ var weekNum = 0;
+ var dat = new Date(cal._min_date);
+ while(+this.date.add(dat, 1, "week") <= +date){
+ dat = this.date.add(dat, 1, "week");
+ weekNum++;
+ }
+
+ var sm = scheduler.config.start_on_monday;
+ var day = (date.getDay() || (sm ? 7 : 0)) - (sm ? 1 : 0);
+ return table.rows[weekNum].cells[day].firstChild;
+};
+scheduler.markCalendar = function(cal, date, css) {
+ var div = this._locateCalendar(cal, date);
+ if(!div)
+ return;
+
+ div.className += " " + css;
+};
+scheduler.unmarkCalendar = function(cal, date, css) {
+ date = date || cal._last_date;
+ css = css || "dhx_calendar_click";
+ if (!date) return;
+ var el = this._locateCalendar(cal, date);
+ if(!el)
+ return;
+ el.className = (el.className || "").replace(RegExp(css, "g"));
+};
+scheduler._week_template = function(width) {
+ var summ = (width || 250);
+ var left = 0;
+
+ var week_template = document.createElement("div");
+ var dummy_date = this.date.week_start(scheduler._currentDate());
+ for (var i = 0; i < 7; i++) {
+ this._cols[i] = Math.floor(summ / (7 - i));
+ this._render_x_header(i, left, dummy_date, week_template);
+ dummy_date = this.date.add(dummy_date, 1, "day");
+ summ -= this._cols[i];
+ left += this._cols[i];
+ }
+ week_template.lastChild.className += " dhx_scale_bar_last";
+ return week_template;
+};
+scheduler.updateCalendar = function(obj, sd) {
+ obj.conf.date = sd;
+ this.renderCalendar(obj.conf, obj, true);
+};
+scheduler._mini_cal_arrows = ["&nbsp", "&nbsp"];
+scheduler._render_calendar = function(obj, sd, conf, previous) {
+ /*store*/
+ var ts = scheduler.templates;
+ var temp = this._cols;
+ this._cols = [];
+ var temp2 = this._mode;
+ this._mode = "calendar";
+ var temp3 = this._colsS;
+ this._colsS = {height: 0};
+ var temp4 = new Date(this._min_date);
+ var temp5 = new Date(this._max_date);
+ var temp6 = new Date(scheduler._date);
+ var temp7 = ts.month_day;
+ var temp8 = this._ignores_detected; this._ignores_detected = 0;
+ ts.month_day = ts.calendar_date;
+
+ sd = this.date.month_start(sd);
+ var week_template = this._week_template(obj.offsetWidth - 1 - this.config.minicalendar.padding );
+
+ var d;
+ if (previous)
+ d = previous; else {
+ d = document.createElement("DIV");
+ d.className = "dhx_cal_container dhx_mini_calendar";
+ }
+ d.setAttribute("date", this.templates.xml_format(sd));
+ d.innerHTML = "<div class='dhx_year_month'></div><div class='dhx_year_week'>" + week_template.innerHTML + "</div><div class='dhx_year_body'></div>";
+
+ d.childNodes[0].innerHTML = this.templates.calendar_month(sd);
+ if (conf.navigation) {
+ var move_minicalendar_date = function(calendar, diff) {
+ var date = scheduler.date.add(calendar._date, diff, "month");
+ scheduler.updateCalendar(calendar, date);
+ if (scheduler._date.getMonth() == calendar._date.getMonth() && scheduler._date.getFullYear() == calendar._date.getFullYear()) {
+ scheduler._markCalendarCurrentDate(calendar);
+ }
+ };
+
+ var css_classnames = ["dhx_cal_prev_button", "dhx_cal_next_button"];
+ var css_texts = ["left:1px;top:2px;position:absolute;", "left:auto; right:1px;top:2px;position:absolute;"];
+ var diffs = [-1, 1];
+ var handler = function(diff) {
+ return function() {
+ if (conf.sync) {
+ var calendars = scheduler._synced_minicalendars;
+ for (var k = 0; k < calendars.length; k++) {
+ move_minicalendar_date(calendars[k], diff);
+ }
+ } else {
+ move_minicalendar_date(d, diff);
+ }
+ };
+ };
+ for (var j = 0; j < 2; j++) {
+ var arrow = document.createElement("DIV");
+ //var diff = diffs[j];
+ arrow.className = css_classnames[j];
+ arrow.style.cssText = css_texts[j];
+ arrow.innerHTML = this._mini_cal_arrows[j];
+ d.firstChild.appendChild(arrow);
+ arrow.onclick = handler(diffs[j]);
+ }
+ }
+ d._date = new Date(sd);
+
+ d.week_start = (sd.getDay() - (this.config.start_on_monday ? 1 : 0) + 7) % 7;
+
+ var dd = d._min_date = this.date.week_start(sd);
+ d._max_date = this.date.add(d._min_date, 6, "week");
+
+ this._reset_month_scale(d.childNodes[2], sd, dd);
+
+ var r = d.childNodes[2].firstChild.rows;
+ for (var k = r.length; k < 6; k++) {
+ var last_row = r[r.length - 1];
+ r[0].parentNode.appendChild(last_row.cloneNode(true));
+ var last_day_number = parseInt(last_row.childNodes[last_row.childNodes.length - 1].childNodes[0].innerHTML);
+ last_day_number = (last_day_number < 10) ? last_day_number : 0; // previous week could end on 28-31, so we should start with 0
+ for (var ri = 0; ri < r[k].childNodes.length; ri++) {
+ r[k].childNodes[ri].className = "dhx_after";
+ r[k].childNodes[ri].childNodes[0].innerHTML = scheduler.date.to_fixed(++last_day_number);
+ }
+ }
+
+ if (!previous)
+ obj.appendChild(d);
+
+ d.childNodes[1].style.height = (d.childNodes[1].childNodes[0].offsetHeight - 1) + "px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name)
+
+ /*restore*/
+ this._cols = temp;
+ this._mode = temp2;
+ this._colsS = temp3;
+ this._min_date = temp4;
+ this._max_date = temp5;
+ scheduler._date = temp6;
+ ts.month_day = temp7;
+ this._ignores_detected = temp8;
+ return d;
+};
+scheduler.destroyCalendar = function(cal, force) {
+ if (!cal && this._def_count && this._def_count.firstChild) {
+ if (force || (new Date()).valueOf() - this._def_count._created.valueOf() > 500)
+ cal = this._def_count.firstChild;
+ }
+ if (!cal) return;
+ cal.onclick = null;
+ cal.innerHTML = "";
+ if (cal.parentNode)
+ cal.parentNode.removeChild(cal);
+ if (this._def_count)
+ this._def_count.style.top = "-1000px";
+};
+scheduler.isCalendarVisible = function() {
+ if (this._def_count && parseInt(this._def_count.style.top, 10) > 0)
+ return this._def_count;
+ return false;
+};
+
+scheduler._attach_minical_events = function(){
+ dhtmlxEvent(document.body, "click", function() { scheduler.destroyCalendar(); });
+ scheduler._attach_minical_events = function(){};
+};
+
+scheduler.attachEvent("onTemplatesReady", function() {
+ scheduler._attach_minical_events();
+});
+
+scheduler.templates.calendar_time = scheduler.date.date_to_str("%d-%m-%Y");
+
+scheduler.form_blocks.calendar_time = {
+ render: function() {
+ var html = "<input class='dhx_readonly' type='text' readonly='true'>";
+
+ var cfg = scheduler.config;
+ var dt = this.date.date_part(scheduler._currentDate());
+
+ var last = 24 * 60, first = 0;
+ if (cfg.limit_time_select) {
+ first = 60 * cfg.first_hour;
+ last = 60 * cfg.last_hour + 1; // to include "17:00" option if time select is limited
+ }
+ dt.setHours(first / 60);
+
+ html += " <select>";
+ for (var i = first; i < last; i += this.config.time_step * 1) { // `<` to exclude last "00:00" option
+ var time = this.templates.time_picker(dt);
+ html += "<option value='" + i + "'>" + time + "</option>";
+ dt = this.date.add(dt, this.config.time_step, "minute");
+ }
+ html += "</select>";
+
+ var full_day = scheduler.config.full_day;
+
+ return "<div style='height:30px;padding-top:0; font-size:inherit;' class='dhx_section_time'>" + html + "<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>" + html + "</div>";
+ },
+ set_value: function(node, value, ev) {
+
+ var inputs = node.getElementsByTagName("input");
+ var selects = node.getElementsByTagName("select");
+ var start_date,
+ end_date;
+
+ var _init_once = function(inp, date, number) {
+ inp.onclick = function() {
+ scheduler.destroyCalendar(null, true);
+ scheduler.renderCalendar({
+ position: inp,
+ date: new Date(this._date),
+ navigation: true,
+ handler: function(new_date) {
+ inp.value = scheduler.templates.calendar_time(new_date);
+ inp._date = new Date(new_date);
+ scheduler.destroyCalendar();
+ if (scheduler.config.event_duration && scheduler.config.auto_end_date && number === 0) { //first element = start date
+ _update_minical_select();
+ }
+ }
+ });
+ };
+ };
+
+ if (scheduler.config.full_day) {
+ if (!node._full_day) {
+ var html = "<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> " + scheduler.locale.labels.full_day + "&nbsp;</label></input>";
+ if (!scheduler.config.wide_form)
+ html = node.previousSibling.innerHTML + html;
+ node.previousSibling.innerHTML = html;
+ node._full_day = true;
+ }
+ var input = node.previousSibling.getElementsByTagName("input")[0];
+
+ var isFulldayEvent = (scheduler.date.time_part(ev.start_date) === 0 && scheduler.date.time_part(ev.end_date) === 0);
+ input.checked = isFulldayEvent;
+
+ selects[0].disabled = input.checked;
+ selects[1].disabled = input.checked;
+
+ input.onclick = function() {
+ if (input.checked === true) {
+ var obj = {};
+ scheduler.form_blocks.calendar_time.get_value(node, obj);
+
+ start_date = scheduler.date.date_part(obj.start_date);
+ end_date = scheduler.date.date_part(obj.end_date);
+
+ if (+end_date == +start_date || (+end_date >= +start_date && (ev.end_date.getHours() !== 0 || ev.end_date.getMinutes() !== 0)))
+ end_date = scheduler.date.add(end_date, 1, "day");
+ }
+
+ var start = start_date || ev.start_date;
+ var end = end_date || ev.end_date;
+ _attach_action(inputs[0], start);
+ _attach_action(inputs[1], end);
+ selects[0].value = start.getHours() * 60 + start.getMinutes();
+ selects[1].value = end.getHours() * 60 + end.getMinutes();
+
+ selects[0].disabled = input.checked;
+ selects[1].disabled = input.checked;
+
+ };
+ }
+
+ if (scheduler.config.event_duration && scheduler.config.auto_end_date) {
+
+ var _update_minical_select = function () {
+ start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute");
+ end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000));
+
+ inputs[1].value = scheduler.templates.calendar_time(end_date);
+ inputs[1]._date = scheduler.date.date_part(new Date(end_date));
+
+ selects[1].value = end_date.getHours() * 60 + end_date.getMinutes();
+ };
+
+ selects[0].onchange = _update_minical_select; // only update on first select should trigger update so user could define other end date if he wishes too
+ }
+
+ function _attach_action(inp, date, number) {
+ _init_once(inp, date, number);
+ inp.value = scheduler.templates.calendar_time(date);
+ inp._date = scheduler.date.date_part(new Date(date));
+ }
+
+ _attach_action(inputs[0], ev.start_date, 0);
+ _attach_action(inputs[1], ev.end_date, 1);
+ _init_once = function() {};
+
+ selects[0].value = ev.start_date.getHours() * 60 + ev.start_date.getMinutes();
+ selects[1].value = ev.end_date.getHours() * 60 + ev.end_date.getMinutes();
+
+ },
+ get_value: function(node, ev) {
+ var inputs = node.getElementsByTagName("input");
+ var selects = node.getElementsByTagName("select");
+
+ ev.start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute");
+ ev.end_date = scheduler.date.add(inputs[1]._date, selects[1].value, "minute");
+
+ if (ev.end_date <= ev.start_date)
+ ev.end_date = scheduler.date.add(ev.start_date, scheduler.config.time_step, "minute");
+ return {
+ start_date: new Date(ev.start_date),
+ end_date: new Date(ev.end_date)
+ };
+ },
+ focus: function(node) {
+ }
+};
+scheduler.linkCalendar = function(calendar, datediff) {
+ var action = function() {
+ var date = scheduler._date;
+ var dateNew = new Date(date.valueOf());
+ if (datediff) dateNew = datediff(dateNew);
+ dateNew.setDate(1);
+ scheduler.updateCalendar(calendar, dateNew);
+ return true;
+ };
+
+ scheduler.attachEvent("onViewChange", action);
+ scheduler.attachEvent("onXLE", action);
+ scheduler.attachEvent("onEventAdded", action);
+ scheduler.attachEvent("onEventChanged", action);
+ scheduler.attachEvent("onAfterEventDelete", action);
+ action();
+};
+
+scheduler._markCalendarCurrentDate = function(calendar) {
+ var date = scheduler._date;
+ var mode = scheduler._mode;
+ var month_start = scheduler.date.month_start(new Date(calendar._date));
+ var month_end = scheduler.date.add(month_start, 1, "month");
+
+ if (mode == 'day' || (this._props && !!this._props[mode])) { // if day or units view
+ if (month_start.valueOf() <= date.valueOf() && month_end > date) {
+ scheduler.markCalendar(calendar, date, "dhx_calendar_click");
+ }
+ } else if (mode == 'week') {
+ var dateNew = scheduler.date.week_start(new Date(date.valueOf()));
+ for (var i = 0; i < 7; i++) {
+ if (month_start.valueOf() <= dateNew.valueOf() && month_end > dateNew) // >= would mean mark first day of the next month
+ scheduler.markCalendar(calendar, dateNew, "dhx_calendar_click");
+ dateNew = scheduler.date.add(dateNew, 1, "day");
+ }
+ }
+};
+
+scheduler.attachEvent("onEventCancel", function(){
+ scheduler.destroyCalendar(null, true);
+}); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_minical.js.map b/codebase/sources/ext/dhtmlxscheduler_minical.js.map
new file mode 100644
index 0000000..f5838fb
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_minical.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_minical.js.map","sources":["dhtmlxscheduler_minical.js"],"names":["scheduler","templates","calendar_month","date","date_to_str","calendar_scale_date","calendar_date","config","minicalendar","mark_events","_synced_minicalendars","renderCalendar","obj","_prev","is_refresh","cal","_currentDate","this","api_date","_render_calendar","parentNode","unmarkCalendar","cont","container","pos","position","document","getElementById","left","tpos","getOffset","top","offsetHeight","_get_def_cont","onclick","e","event","src","target","srcElement","className","indexOf","pname","newdate","xml_date","getAttribute","setDate","parseInt","innerHTML","markCalendar","_last_date","conf","handler","call","start","month_start","end","add","evs","getEvents","filter","_mode","i","length","ev","id","d","start_date","valueOf","date_part","Date","end_date","_markCalendarCurrentDate","sync","push","_def_count","createElement","cancelBubble","body","appendChild","style","_created","_locateCalendar","_max_date","_min_date","table","childNodes","weekNum","dat","sm","start_on_monday","day","getDay","rows","cells","firstChild","css","div","el","replace","RegExp","_week_template","width","summ","week_template","dummy_date","week_start","_cols","Math","floor","_render_x_header","lastChild","updateCalendar","sd","_mini_cal_arrows","previous","ts","temp","temp2","temp3","_colsS","height","temp4","temp5","temp6","_date","temp7","month_day","temp8","_ignores_detected","offsetWidth","padding","setAttribute","xml_format","navigation","move_minicalendar_date","calendar","diff","getMonth","getFullYear","css_classnames","css_texts","diffs","calendars","k","j","arrow","cssText","dd","_reset_month_scale","r","last_row","cloneNode","last_day_number","ri","to_fixed","destroyCalendar","force","removeChild","isCalendarVisible","_attach_minical_events","dhtmlxEvent","attachEvent","calendar_time","form_blocks","render","html","cfg","dt","last","first","limit_time_select","first_hour","last_hour","setHours","time_step","time","time_picker","full_day","set_value","node","value","_attach_action","inp","number","_init_once","inputs","getElementsByTagName","selects","new_date","event_duration","auto_end_date","_update_minical_select","_full_day","locale","labels","wide_form","previousSibling","input","isFulldayEvent","time_part","checked","disabled","get_value","getHours","getMinutes","getTime","onchange","focus","linkCalendar","datediff","action","dateNew","mode","month_end","_props"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_monthheight.js b/codebase/sources/ext/dhtmlxscheduler_monthheight.js
new file mode 100644
index 0000000..ccf6611
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_monthheight.js
@@ -0,0 +1,34 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTemplatesReady",function(){
+ scheduler.xy.scroll_width = 0;
+
+ var old = scheduler.render_view_data;
+ scheduler.render_view_data=function(){
+ var data = this._els["dhx_cal_data"][0];
+ data.firstChild._h_fix = true;
+
+ old.apply(scheduler,arguments);
+
+
+
+ var height = parseInt(data.style.height);
+ data.style.height="1px";
+ data.style.height=data.scrollHeight+"px";
+
+ this._obj.style.height = this._obj.clientHeight + data.scrollHeight - height + "px";
+ };
+
+ var old_s=scheduler._reset_month_scale;
+ scheduler._reset_month_scale=function(a,b,c){
+ var dummy = {clientHeight:100};
+ old_s.apply(scheduler,[dummy,b,c]);
+ a.innerHTML = dummy.innerHTML;
+ };
+
+}); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map b/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map
new file mode 100644
index 0000000..47ff310
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_monthheight.js.map","sources":["dhtmlxscheduler_monthheight.js"],"names":["scheduler","attachEvent","xy","scroll_width","old","render_view_data","data","this","_els","firstChild","_h_fix","apply","arguments","height","parseInt","style","scrollHeight","_obj","clientHeight","old_s","_reset_month_scale","a","b","c","dummy","innerHTML"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WACxCD,UAAUE,GAAGC,aAAe,CAE5B,IAAIC,GAAMJ,UAAUK,gBACpBL,WAAUK,iBAAiB,WAC1B,GAAIC,GAAOC,KAAKC,KAAmB,aAAE,EACrCF,GAAKG,WAAWC,QAAS,EAEzBN,EAAIO,MAAMX,UAAUY,UAIpB,IAAIC,GAASC,SAASR,EAAKS,MAAMF,OACjCP,GAAKS,MAAMF,OAAO,MAClBP,EAAKS,MAAMF,OAAOP,EAAKU,aAAa,KAEpCT,KAAKU,KAAKF,MAAMF,OAASN,KAAKU,KAAKC,aAAeZ,EAAKU,aAAeH,EAAS,KAGhF,IAAIM,GAAMnB,UAAUoB,kBACpBpB,WAAUoB,mBAAmB,SAASC,EAAEC,EAAEC,GACzC,GAAIC,IAASN,aAAa,IAC1BC,GAAMR,MAAMX,WAAWwB,EAAMF,EAAEC,IAC/BF,EAAEI,UAAYD,EAAMC"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_multisection.js b/codebase/sources/ext/dhtmlxscheduler_multisection.js
new file mode 100644
index 0000000..90c59e0
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_multisection.js
@@ -0,0 +1,254 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.config.multisection = true;
+scheduler.config.section_delemiter = ",";
+scheduler.attachEvent("onSchedulerReady", function(){
+
+
+ var old_unit = scheduler._update_unit_section;
+ scheduler._update_unit_section = function(action){
+ return scheduler._update_sections(action, old_unit);
+ };
+ var old_timeline = scheduler._update_timeline_section;
+ scheduler._update_timeline_section =function(action){
+ return scheduler._update_sections(action, old_timeline);
+ };
+
+
+ scheduler.isMultisectionEvent = function(ev){
+ if(ev && this._get_multisection_view()){
+ var units = this._get_event_sections(ev);
+ return (units.length > 1);
+ }
+ return false;
+ };
+
+ scheduler._get_event_sections = function(event){
+ var mapping = this._get_section_property();
+ var units = event[mapping] || "";
+ return this._parse_event_sections(units);
+ };
+ scheduler._parse_event_sections = function(value){
+ if(value instanceof Array){
+ return value;
+ }else{
+ return value.toString().split(scheduler.config.section_delemiter);
+ }
+ };
+
+ scheduler._register_copies_array = function(evs){
+ for(var i=0; i < evs.length; i++)
+ this._register_copy(evs[i]);
+ };
+ scheduler._register_copy = function(copy){
+ if(!this._multisection_copies[copy.id]){
+ this._multisection_copies[copy.id] = {};
+ }
+ var section = copy[this._get_section_property()];
+ var evs = this._multisection_copies[copy.id];
+ if(!evs[section]){
+ evs[section] = copy;
+ }
+ };
+ scheduler._get_copied_event = function(event_id, section){
+ if(!this._multisection_copies[event_id])
+ return null;
+
+ if(this._multisection_copies[event_id][section])
+ return this._multisection_copies[event_id][section];
+
+ var parts = this._multisection_copies[event_id];
+ //multisection event has not been rendered in this section, need retrieve state of one of rendered events
+ if(scheduler._drag_event && scheduler._drag_event._orig_section && parts[scheduler._drag_event._orig_section]){
+ return parts[scheduler._drag_event._orig_section];
+ }else{
+ var min_sorder = Infinity,
+ ev = null;
+ for(var i in parts){
+ if(parts[i]._sorder < min_sorder){
+ ev = parts[i];
+ min_sorder = parts[i]._sorder;
+ }
+ }
+ return ev;
+ }
+ };
+ scheduler._clear_copied_events = function(){
+ this._multisection_copies = {};
+ };
+ scheduler._clear_copied_events();
+
+ scheduler._split_events = function(evs) {
+ var stack = [];
+ var pr = this._get_multisection_view();
+ var mapping = this._get_section_property();
+ if(pr) {
+ for (var i=0; i<evs.length; i++) {
+ var units = this._get_event_sections(evs[i]);
+
+ if(units.length > 1) {
+ for (var j=0; j<units.length; j++) {
+ if(typeof pr.order[units[j]] === "undefined")
+ continue;
+ var ev = this._lame_copy({}, evs[i]);
+ ev[mapping] = units[j];
+ stack.push(ev);
+ }
+ } else {
+ stack.push(evs[i]);
+ }
+
+ }
+ }else{
+ stack = evs;
+ }
+ return stack;
+ };
+
+
+ scheduler._get_multisection_view = function(){
+ if(!this.config.multisection){
+ return false;
+ }else{
+ return scheduler._get_section_view();
+ }
+ };
+
+ var vis_evs = scheduler.get_visible_events;
+ scheduler.get_visible_events = function(only_timed) {
+ this._clear_copied_events();
+ var evs = vis_evs.apply(this,arguments);
+ var pr = this._get_multisection_view();
+ if (this._get_multisection_view()){
+ evs = this._split_events(evs);
+ this._register_copies_array(evs);
+ }
+
+ return evs;
+ };
+
+ scheduler._rendered_events = {};
+ var old_view_data = scheduler.render_view_data;
+ scheduler.render_view_data = function(evs, hold) {
+ if (this._get_multisection_view() && evs) {
+ //render single event during dnd, restore flags that were calculated during full render
+ evs = this._split_events(evs);
+ this._restore_render_flags(evs);
+ }
+
+ return old_view_data.apply(this,[evs, hold]);
+ };
+ scheduler._restore_render_flags = function(section_evs){
+ var map_to = this._get_section_property();
+ for(var i=0; i < section_evs.length; i++){
+ var ev = section_evs[i];
+ var prev_state = scheduler._get_copied_event(ev.id, ev[map_to]);
+ if(prev_state){
+ for(var p in prev_state){
+ if(p.indexOf("_") === 0){
+ ev[p] = prev_state[p];
+ }
+ }
+ }
+ }
+ };
+ scheduler._update_sections = function(action, def_handler){
+ var view = action.view,
+ event = action.event,
+ pos = action.pos;
+ //view - timeline or units view object. both stores displayed sections in 'view.order' hash
+ // pos - mouse position, calculated in _mouse_coords method
+ // event - scheduler event
+
+ if(!scheduler.isMultisectionEvent(event)){
+ def_handler.apply(scheduler, [action]);
+ }else{
+ if(!scheduler._drag_event._orig_section){
+ scheduler._drag_event._orig_section = pos.section;
+ }
+
+ if(scheduler._drag_event._orig_section != pos.section){
+ var shift = (view.order[pos.section] - view.order[scheduler._drag_event._orig_section]);
+ if(shift){
+ var sections = this._get_event_sections(event);
+ var new_sections = [];
+ var shifted = true;
+ for(var i=0; i<sections.length; i++){
+ var new_section = scheduler._shift_sections(view, sections[i], shift);
+ if(new_section !== null){
+ new_sections[i] = new_section;
+ }else{
+ new_sections = sections;
+ shifted = false;
+ break;
+
+ }
+ }
+ if(shifted)
+ scheduler._drag_event._orig_section = pos.section;
+
+ event[scheduler._get_section_property()] = new_sections.join(",");
+ }
+
+ }
+ }
+ };
+
+ scheduler._shift_sections = function(matrix, orig_section, shift){
+ for(var i in matrix.order){
+ if(matrix.order[i] - matrix.order[orig_section] == shift){
+ return i;
+ }
+ }
+ return null;
+ };
+
+
+ // limit extension
+
+ var old_get_blocked_zones = scheduler._get_blocked_zones;
+ scheduler._get_blocked_zones = function(timespans, property, day_index, day_value, timespan_type){
+ if(property && this.config.multisection){
+ property = this._parse_event_sections(property);
+ var zones = [];
+ for(var i =0; i < property.length; i++){
+ zones = zones.concat(old_get_blocked_zones.apply(this, [timespans, property[i], day_index, day_value, timespan_type]));
+ }
+ return zones;
+ }else{
+ return old_get_blocked_zones.apply(this, arguments);
+ }
+ };
+
+
+ // collision extension
+ var old_check_secions_collision = scheduler._check_sections_collision;
+
+ scheduler._check_sections_collision = function(a, b){
+ if(this.config.multisection && this._get_section_view()){
+ a = this._split_events([a]);
+ b = this._split_events([b]);
+
+ var collision = false;
+ for(var a_ind = 0, a_len = a.length; a_ind < a_len; a_ind++){
+ if(collision){
+ break;
+ }
+ for(var b_ind = 0, b_len = b.length; b_ind < b_len; b_ind++){
+ if(old_check_secions_collision.apply(this, [a[a_ind], b[b_ind]])){
+ collision = true;
+ break;
+ }
+ }
+ }
+ return collision;
+ }else{
+ return old_check_secions_collision.apply(this, arguments);
+ }
+ };
+}); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_multisection.js.map b/codebase/sources/ext/dhtmlxscheduler_multisection.js.map
new file mode 100644
index 0000000..1645dcd
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_multisection.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_multisection.js.map","sources":["dhtmlxscheduler_multisection.js"],"names":["scheduler","config","multisection","section_delemiter","attachEvent","old_unit","_update_unit_section","action","_update_sections","old_timeline","_update_timeline_section","isMultisectionEvent","ev","this","_get_multisection_view","units","_get_event_sections","length","event","mapping","_get_section_property","_parse_event_sections","value","Array","toString","split","_register_copies_array","evs","i","_register_copy","copy","_multisection_copies","id","section","_get_copied_event","event_id","parts","_drag_event","_orig_section","min_sorder","Infinity","_sorder","_clear_copied_events","_split_events","stack","pr","j","order","_lame_copy","push","_get_section_view","vis_evs","get_visible_events","apply","arguments","_rendered_events","old_view_data","render_view_data","hold","_restore_render_flags","section_evs","map_to","prev_state","p","indexOf","def_handler","view","pos","shift","sections","new_sections","shifted","new_section","_shift_sections","join","matrix","orig_section","old_get_blocked_zones","_get_blocked_zones","timespans","property","day_index","day_value","timespan_type","zones","concat","old_check_secions_collision","_check_sections_collision","a","b","collision","a_ind","a_len","b_ind","b_len"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_multiselect.js b/codebase/sources/ext/dhtmlxscheduler_multiselect.js
new file mode 100644
index 0000000..c797198
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_multiselect.js
@@ -0,0 +1,69 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.form_blocks["multiselect"]={
+ render:function(sns) {
+ var _result = "<div class='dhx_multi_select_"+sns.name+"' style='overflow: auto; height: "+sns.height+"px; position: relative;' >";
+ for (var i=0; i<sns.options.length; i++) {
+ _result += "<label><input type='checkbox' value='"+sns.options[i].key+"'/>"+sns.options[i].label+"</label>";
+ if(convertStringToBoolean(sns.vertical)) _result += '<br/>';
+ }
+ _result += "</div>";
+ return _result;
+ },
+ set_value:function(node,value,ev,config){
+
+ var _children = node.getElementsByTagName('input');
+ for(var i=0;i<_children.length;i++) {
+ _children[i].checked = false; //unchecking all inputs on the form
+ }
+
+ function _mark_inputs(ids) { // ids = [ 0: undefined, 1: undefined, 2: true ... ]
+ var _children = node.getElementsByTagName('input');
+ for(var i=0;i<_children.length; i++) {
+ _children[i].checked = !! ids[_children[i].value];
+ }
+ }
+
+ var _ids = [];
+ if (ev[config.map_to]) {
+ var results = (ev[config.map_to] + "").split(',');
+ for (var i = 0; i < results.length; i++) {
+ _ids[results[i]] = true;
+ }
+ _mark_inputs(_ids);
+ } else {
+ if (scheduler._new_event || !config.script_url)
+ return;
+ var divLoading = document.createElement('div');
+ divLoading.className = 'dhx_loading';
+ divLoading.style.cssText = "position: absolute; top: 40%; left: 40%;";
+ node.appendChild(divLoading);
+ dhtmlxAjax.get(config.script_url + '?dhx_crosslink_' + config.map_to + '=' + ev.id + '&uid=' + scheduler.uid(), function(loader) {
+ var _result = loader.doXPath("//data/item");
+ var _ids = [];
+ for (var i = 0; i < _result.length; i++) {
+ _ids[_result[i].getAttribute(config.map_to)] = true;
+ }
+ _mark_inputs(_ids);
+ node.removeChild(divLoading);
+ });
+ }
+ },
+ get_value:function(node,ev,config){
+ var _result = [];
+ var _children = node.getElementsByTagName("input");
+ for(var i=0;i<_children.length;i++) {
+ if(_children[i].checked)
+ _result.push(_children[i].value);
+ }
+ return _result.join(',');
+ },
+
+ focus:function(node){
+ }
+}; \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map b/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map
new file mode 100644
index 0000000..c9b43ed
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_multiselect.js.map","sources":["dhtmlxscheduler_multiselect.js"],"names":["scheduler","form_blocks","render","sns","_result","name","height","i","options","length","key","label","convertStringToBoolean","vertical","set_value","node","value","ev","config","_mark_inputs","ids","_children","getElementsByTagName","checked","_ids","map_to","results","split","_new_event","script_url","divLoading","document","createElement","className","style","cssText","appendChild","dhtmlxAjax","get","id","uid","loader","doXPath","getAttribute","removeChild","get_value","push","join","focus"],"mappings":"AAAAA,UAAUC,YAAyB,aAClCC,OAAO,SAASC,GAEf,IAAK,GADDC,GAAU,gCAAgCD,EAAIE,KAAK,oCAAoCF,EAAIG,OAAO,6BAC7FC,EAAE,EAAGA,EAAEJ,EAAIK,QAAQC,OAAQF,IACnCH,GAAW,wCAAwCD,EAAIK,QAAQD,GAAGG,IAAI,MAAMP,EAAIK,QAAQD,GAAGI,MAAM,WAC9FC,uBAAuBT,EAAIU,YAAWT,GAAW,QAGrD,OADAA,IAAW,UAGZU,UAAU,SAASC,EAAKC,EAAMC,EAAGC,GAOhC,QAASC,GAAaC,GAErB,IAAI,GADAC,GAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAQF,IAC/Bc,EAAUd,GAAGgB,UAAaH,EAAIC,EAAUd,GAAGS,OAP7C,IAAI,GADAK,GAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAOF,IAC9Bc,EAAUd,GAAGgB,SAAU,CAUxB;GAAIC,KACJ,IAAIP,EAAGC,EAAOO,QAAS,CAEtB,IAAK,GADDC,IAAWT,EAAGC,EAAOO,QAAU,IAAIE,MAAM,KACpCpB,EAAI,EAAGA,EAAImB,EAAQjB,OAAQF,IACnCiB,EAAKE,EAAQnB,KAAM,CAEpBY,GAAaK,OACP,CACN,GAAIxB,UAAU4B,aAAeV,EAAOW,WACnC,MACD,IAAIC,GAAaC,SAASC,cAAc,MACxCF,GAAWG,UAAY,cACvBH,EAAWI,MAAMC,QAAU,2CAC3BpB,EAAKqB,YAAYN,GACjBO,WAAWC,IAAIpB,EAAOW,WAAa,kBAAoBX,EAAOO,OAAS,IAAMR,EAAGsB,GAAK,QAAUvC,UAAUwC,MAAO,SAASC,GAGxH,IAAK,GAFDrC,GAAUqC,EAAOC,QAAQ,eACzBlB,KACKjB,EAAI,EAAGA,EAAIH,EAAQK,OAAQF,IACnCiB,EAAKpB,EAAQG,GAAGoC,aAAazB,EAAOO,UAAW,CAEhDN,GAAaK,GACbT,EAAK6B,YAAYd;KAIpBe,UAAU,SAAS9B,GAGlB,IAAI,GAFAX,MACAiB,EAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAOF,IAC3Bc,EAAUd,GAAGgB,SACfnB,EAAQ0C,KAAKzB,EAAUd,GAAGS,MAE5B,OAAOZ,GAAQ2C,KAAK,MAGrBC,MAAM"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_multisource.js b/codebase/sources/ext/dhtmlxscheduler_multisource.js
new file mode 100644
index 0000000..09194bc
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_multisource.js
@@ -0,0 +1,29 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function(){
+
+ function backup(obj){
+ var t = function(){};
+ t.prototype = obj;
+ return t;
+ }
+
+ var old = scheduler._load;
+ scheduler._load=function(url,from){
+ url=url||this._load_url;
+ if (typeof url == "object"){
+ var t = backup(this._loaded);
+ for (var i=0; i < url.length; i++) {
+ this._loaded=new t();
+ old.call(this,url[i],from);
+ }
+ } else
+ old.apply(this,arguments);
+ };
+
+})(); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_multisource.js.map b/codebase/sources/ext/dhtmlxscheduler_multisource.js.map
new file mode 100644
index 0000000..910606c
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_multisource.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_multisource.js.map","sources":["dhtmlxscheduler_multisource.js"],"names":["backup","obj","t","prototype","old","scheduler","_load","url","from","this","_load_url","_loaded","i","length","call","apply","arguments"],"mappings":"CAAA,WAEC,QAASA,GAAOC,GACf,GAAIC,GAAI,YAER,OADAA,GAAEC,UAAYF,EACPC,EAGR,GAAIE,GAAMC,UAAUC,KACpBD,WAAUC,MAAM,SAASC,EAAIC,GAE5B,GADAD,EAAIA,GAAKE,KAAKC,UACI,gBAAPH,GAEV,IAAK,GADDL,GAAIF,EAAOS,KAAKE,SACXC,EAAE,EAAGA,EAAIL,EAAIM,OAAQD,IAC7BH,KAAKE,QAAQ,GAAIT,GACjBE,EAAIU,KAAKL,KAAKF,EAAIK,GAAGJ,OAGtBJ,GAAIW,MAAMN,KAAKO"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_mvc.js b/codebase/sources/ext/dhtmlxscheduler_mvc.js
new file mode 100644
index 0000000..f3009cd
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_mvc.js
@@ -0,0 +1,147 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function(){
+
+ var cfg = {
+ use_id : false
+ };
+
+ //remove private properties
+ function sanitize(ev){
+ var obj = {};
+ for (var key in ev)
+ if (key.indexOf("_") !== 0)
+ obj[key] = ev[key];
+
+ if (!cfg.use_id)
+ delete obj.id;
+
+ return obj;
+ }
+
+ var update_timer;
+ function update_view(){
+ clearTimeout(update_timer);
+ update_timer = setTimeout(function(){
+ scheduler.updateView();
+ },1);
+ }
+
+ function _start_ext_load(cal){
+ cal._loading = true;
+ cal._not_render = true;
+
+ cal.callEvent("onXLS", []);
+ }
+ function _finish_ext_load(cal){
+ cal._not_render = false;
+ if (cal._render_wait)
+ cal.render_view_data();
+ cal._loading = false;
+
+ cal.callEvent("onXLE", []);
+ }
+
+
+ function _get_id(model){
+ return cfg.use_id ? model.id : model.cid;
+ }
+
+scheduler.backbone = function(events, config){
+ if (config) cfg = config;
+
+ events.bind("change", function(model, info){
+ var cid = _get_id(model);
+ var ev = scheduler._events[cid] = model.toJSON();
+ ev.id = cid;
+
+ scheduler._init_event(ev);
+ update_view();
+ });
+ events.bind("remove", function(model, changes){
+ var cid = _get_id(model);
+ if (scheduler._events[cid])
+ scheduler.deleteEvent(cid);
+ });
+
+ var queue = [];
+ function add_from_queue(){
+ if (queue.length){
+ scheduler.parse(queue, "json");
+ queue = [];
+ }
+ }
+
+ events.bind("add", function(model, changes){
+ var cid = _get_id(model);
+ if (!scheduler._events[cid]){
+ var ev = model.toJSON();
+ ev.id = cid;
+ scheduler._init_event(ev);
+
+ queue.push(ev);
+ if (queue.length == 1)
+ setTimeout(add_from_queue,1);
+ }
+ });
+
+ events.bind("request", function(obj){
+ if (obj instanceof Backbone.Collection)
+ _start_ext_load(scheduler);
+ });
+ events.bind("sync", function(obj){
+ if (obj instanceof Backbone.Collection)
+ _finish_ext_load(scheduler);
+ });
+ events.bind("error", function(obj){
+ if (obj instanceof Backbone.Collection)
+ _finish_ext_load(scheduler);
+ });
+
+
+ scheduler.attachEvent("onEventCreated", function(id){
+ var ev = new events.model(scheduler.getEvent(id));
+ scheduler._events[id] = ev.toJSON();
+ scheduler._events[id].id = id;
+
+ return true;
+ });
+
+ scheduler.attachEvent("onEventAdded", function(id){
+ if (!events.get(id)){
+ var data = sanitize(scheduler.getEvent(id));
+ var model = new events.model(data);
+
+ var cid = _get_id(model);
+ if (cid != id)
+ this.changeEventId(id, cid);
+ events.add(model);
+ events.trigger("scheduler:add", model);
+ }
+ return true;
+ });
+ scheduler.attachEvent("onEventChanged", function(id){
+ var ev = events.get(id);
+ var upd = sanitize(scheduler.getEvent(id));
+
+ ev.set(upd);
+ events.trigger("scheduler:change", ev);
+
+ return true;
+ });
+ scheduler.attachEvent("onEventDeleted", function(id){
+ var model = events.get(id);
+ if (model){
+ events.trigger("scheduler:remove", model);
+ events.remove(id);
+ }
+ return true;
+ });
+};
+
+})(); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_mvc.js.map b/codebase/sources/ext/dhtmlxscheduler_mvc.js.map
new file mode 100644
index 0000000..668f82d
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_mvc.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_mvc.js.map","sources":["dhtmlxscheduler_mvc.js"],"names":["sanitize","ev","obj","key","indexOf","cfg","use_id","id","update_view","clearTimeout","update_timer","setTimeout","scheduler","updateView","_start_ext_load","cal","_loading","_not_render","callEvent","_finish_ext_load","_render_wait","render_view_data","_get_id","model","cid","backbone","events","config","add_from_queue","queue","length","parse","bind","_events","toJSON","_init_event","deleteEvent","push","Backbone","Collection","attachEvent","getEvent","get","data","this","changeEventId","add","trigger","upd","set","remove"],"mappings":"CAAA,WAOC,QAASA,GAASC,GACjB,GAAIC,KACJ,KAAK,GAAIC,KAAOF,GACU,IAArBE,EAAIC,QAAQ,OACfF,EAAIC,GAAOF,EAAGE,GAKhB,OAHKE,GAAIC,cACDJ,GAAIK,GAELL,EAIR,QAASM,KACRC,aAAaC,GACbA,EAAeC,WAAW,WACzBC,UAAUC,cACT,GAGH,QAASC,GAAgBC,GACxBA,EAAIC,UAAW,EACfD,EAAIE,aAAc,EAElBF,EAAIG,UAAU,YAEf,QAASC,GAAiBJ,GACzBA,EAAIE,aAAc,EACdF,EAAIK,cACPL,EAAIM,mBACLN,EAAIC,UAAW,EAEfD,EAAIG,UAAU,YAIf,QAASI,GAAQC,GAChB,MAAOlB,GAAIC,OAASiB,EAAMhB,GAAKgB,EAAMC,IA1CtC,GAiBId,GAjBAL,GACHC,QAAS,EA4CXM,WAAUa,SAAW,SAASC,EAAQC,GAkBrC,QAASC,KACJC,EAAMC,SACTlB,UAAUmB,MAAMF,EAAO,QACvBA;CApBEF,IAAQtB,EAAMsB,GAElBD,EAAOM,KAAK,SAAU,SAAST,GAC9B,GAAIC,GAAMF,EAAQC,GACdtB,EAAKW,UAAUqB,QAAQT,GAAOD,EAAMW,QACxCjC,GAAGM,GAAKiB,EAERZ,UAAUuB,YAAYlC,GACtBO,MAEDkB,EAAOM,KAAK,SAAU,SAAST,GAC9B,GAAIC,GAAMF,EAAQC,EACdX,WAAUqB,QAAQT,IACrBZ,UAAUwB,YAAYZ,IAGxB,IAAIK,KAQJH,GAAOM,KAAK,MAAO,SAAST,GAC3B,GAAIC,GAAMF,EAAQC,EAClB,KAAKX,UAAUqB,QAAQT,GAAK,CAC3B,GAAIvB,GAAMsB,EAAMW,QAChBjC,GAAGM,GAAKiB,EACRZ,UAAUuB,YAAYlC,GAEtB4B,EAAMQ,KAAKpC,GACS,GAAhB4B,EAAMC,QACTnB,WAAWiB,EAAe,MAI7BF,EAAOM,KAAK,UAAW,SAAS9B,GAC3BA,YAAeoC,UAASC,YAC3BzB,EAAgBF,aAElBc,EAAOM,KAAK,OAAQ,SAAS9B,GACxBA,YAAeoC,UAASC,YAC3BpB,EAAiBP;GAEnBc,EAAOM,KAAK,QAAS,SAAS9B,GACzBA,YAAeoC,UAASC,YAC3BpB,EAAiBP,aAInBA,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIN,GAAK,GAAIyB,GAAOH,MAAMX,UAAU6B,SAASlC,GAI7C,OAHAK,WAAUqB,QAAQ1B,GAAMN,EAAGiC,SAC3BtB,UAAUqB,QAAQ1B,GAAIA,GAAKA,GAEpB,IAGRK,UAAU4B,YAAY,eAAgB,SAASjC,GAC9C,IAAKmB,EAAOgB,IAAInC,GAAI,CACnB,GAAIoC,GAAO3C,EAASY,UAAU6B,SAASlC,IACnCgB,EAAQ,GAAIG,GAAOH,MAAMoB,GAEzBnB,EAAMF,EAAQC,EACdC,IAAOjB,GACVqC,KAAKC,cAActC,EAAIiB,GACxBE,EAAOoB,IAAIvB,GACXG,EAAOqB,QAAQ,gBAAiBxB,GAEjC,OAAO,IAERX,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIN,GAAKyB,EAAOgB,IAAInC,GAChByC,EAAMhD,EAASY,UAAU6B,SAASlC,GAKtC;MAHAN,GAAGgD,IAAID,GACPtB,EAAOqB,QAAQ,mBAAoB9C,IAE5B,IAERW,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIgB,GAAQG,EAAOgB,IAAInC,EAKvB,OAJIgB,KACHG,EAAOqB,QAAQ,mBAAoBxB,GACnCG,EAAOwB,OAAO3C,KAER"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_offline.js b/codebase/sources/ext/dhtmlxscheduler_offline.js
new file mode 100644
index 0000000..8f18cce
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_offline.js
@@ -0,0 +1,83 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.load=function(url,call){
+ var type;
+ if (typeof call == "string"){
+ this._process=call;
+ type = call;
+ call = arguments[2];
+ }
+
+ this._load_url=url;
+ this._after_call=call;
+ if (url.$proxy) {
+ url.load(this, typeof type == "string" ? type : null);
+ return;
+ }
+
+ this._load(url,this._date);
+};
+
+scheduler._dp_init_backup = scheduler._dp_init;
+scheduler._dp_init = function(dp) {
+ dp._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();
+ if (this.serverProcessor.$proxy) {
+ var mode = this._tMode!="POST" ? 'get' : 'post';
+ var to_send = [];
+ for (var i in a1)
+ to_send.push({ id: i, data: a1[i], operation: this.getState(i)});
+ this.serverProcessor._send(to_send, mode, this);
+ return;
+ }
+
+ 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++;
+ };
+
+ dp._updatesToParams = function(items) {
+ var stack = {};
+ for (var i = 0; i < items.length; i++)
+ stack[items[i].id] = items[i].data;
+ return this.serialize(stack);
+ };
+
+ dp._processResult = function(text, xml, loader) {
+ if (loader.status != 200) {
+ for (var i in this._in_progress) {
+ var state = this.getState(i);
+ this.afterUpdateCallback(i, i, state, null);
+ }
+ return;
+ }
+ xml = new dtmlXMLLoaderObject(function() {},this,true);
+ xml.loadXMLString(text);
+ xml.xmlDoc = loader;
+
+ this.afterUpdate(this, null, null, null, xml);
+ };
+ this._dp_init_backup(dp);
+};
+
+if (window.dataProcessor)
+ dataProcessor.prototype.init=function(obj){
+ this.init_original(obj);
+ obj._dataprocessor=this;
+
+ this.setTransactionMode("POST",true);
+ if (!this.serverProcessor.$proxy)
+ this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true";
+ }; \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_offline.js.map b/codebase/sources/ext/dhtmlxscheduler_offline.js.map
new file mode 100644
index 0000000..aa628e5
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_offline.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_offline.js.map","sources":["dhtmlxscheduler_offline.js"],"names":["scheduler","load","url","call","type","this","_process","arguments","_load_url","_after_call","$proxy","_load","_date","_dp_init_backup","_dp_init","dp","_sendData","a1","rowId","callEvent","getState","_in_progress","Date","valueOf","serverProcessor","mode","_tMode","to_send","i","push","id","data","operation","_send","a2","dtmlXMLLoaderObject","afterUpdate","a3","_user","getUrlSymbol","obj","getUserData","join","loadXML","indexOf","serialize","_waitMode","_updatesToParams","items","stack","length","_processResult","text","xml","loader","status","loadXMLString","xmlDoc","state","afterUpdateCallback","window","dataProcessor","prototype","init","init_original","_dataprocessor","setTransactionMode"],"mappings":"AAAAA,UAAUC,KAAK,SAASC,EAAIC,GAC3B,GAAIC,EASJ,OARmB,gBAARD,KACVE,KAAKC,SAASH,EACdC,EAAOD,EACPA,EAAOI,UAAU,IAGlBF,KAAKG,UAAUN,EACfG,KAAKI,YAAYN,EACbD,EAAIQ,WACPR,GAAID,KAAKI,KAAqB,gBAARD,GAAmBA,EAAO,UAIjDC,MAAKM,MAAMT,EAAIG,KAAKO,QAGrBZ,UAAUa,gBAAkBb,UAAUc,SACtCd,UAAUc,SAAW,SAASC,GAC7BA,EAAGC,UAAY,SAASC,EAAGC,GACvB,GAAKD,EAAL,CACH,IAAKZ,KAAKc,UAAU,sBAAsBD,GAAOA,EAAMb,KAAKe,SAASF,GAAOD,IAAK,KAAM,KAAMA,IAAM,OAAO,CAG1G,IAFOC,IACNb,KAAKgB,aAAaH,IAAO,GAAKI,OAAQC,WACnClB,KAAKmB,gBAAgBd,OAAQ,CAChC,GAAIe,GAAoB,QAAbpB,KAAKqB,OAAiB,MAAQ,OACrCC,IACJ;IAAK,GAAIC,KAAKX,GACbU,EAAQE,MAAOC,GAAIF,EAAGG,KAAMd,EAAGW,GAAII,UAAW3B,KAAKe,SAASQ,IAE7D,YADAvB,MAAKmB,gBAAgBS,MAAMN,EAASF,EAAMpB,MAI3C,GAAI6B,GAAG,GAAIC,qBAAoB9B,KAAK+B,YAAY/B,MAAK,GACjDgC,EAAKhC,KAAKmB,iBAAiBnB,KAAKiC,MAAOC,aAAalC,KAAKmB,kBAAkB,YAAYnB,KAAKiC,MAAM,eAAejC,KAAKmC,IAAIC,YAAY,EAAE,YAAYC,KAAK,KAAM,GAClJ,SAAbrC,KAAKqB,OACFQ,EAAGS,QAAQN,GAAsB,IAAjBA,EAAGO,QAAQ,KAAU,IAAI,KAAKvC,KAAKwC,UAAU5B,EAAGC,IAEhEgB,EAAGS,QAAQN,GAAG,EAAKhC,KAAKwC,UAAU5B,EAAGC,IAC5Cb,KAAKyC,cAGN/B,EAAGgC,iBAAmB,SAASC,GAE9B,IAAK,GADDC,MACKrB,EAAI,EAAGA,EAAIoB,EAAME,OAAQtB,IACjCqB,EAAMD,EAAMpB,GAAGE,IAAMkB,EAAMpB,GAAGG,IAC/B;MAAO1B,MAAKwC,UAAUI,IAGvBlC,EAAGoC,eAAiB,SAASC,EAAMC,EAAKC,GACvC,GAAqB,KAAjBA,EAAOC,OAOXF,EAAM,GAAIlB,qBAAoB,aAAc9B,MAAK,GACjDgD,EAAIG,cAAcJ,GAClBC,EAAII,OAASH,EAEbjD,KAAK+B,YAAY/B,KAAM,KAAM,KAAM,KAAMgD,OAVxC,KAAK,GAAIzB,KAAKvB,MAAKgB,aAAc,CAChC,GAAIqC,GAAQrD,KAAKe,SAASQ,EAC1BvB,MAAKsD,oBAAoB/B,EAAGA,EAAG8B,EAAO,QAUzCrD,KAAKQ,gBAAgBE,IAGlB6C,OAAOC,gBACVA,cAAcC,UAAUC,KAAK,SAASvB,GACrCnC,KAAK2D,cAAcxB,GACnBA,EAAIyB,eAAe5D,KAEnBA,KAAK6D,mBAAmB,QAAO,GAC1B7D,KAAKmB,gBAAgBd,SACzBL,KAAKmB,kBAAqD,IAAnCnB,KAAKmB,gBAAgBoB,QAAQ,KAAS,IAAI,KAAK"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_outerdrag.js b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js
new file mode 100644
index 0000000..9a2f640
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js
@@ -0,0 +1,60 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+// lame old code doesn't provide raw event object
+scheduler.attachEvent("onTemplatesReady", function() {
+ var dragger = (new dhtmlDragAndDropObject());
+ var old = dragger.stopDrag;
+ var last_event;
+ dragger.stopDrag = function(e) {
+ last_event = e || event;
+ return old.apply(this, arguments);
+ };
+ dragger.addDragLanding(scheduler._els["dhx_cal_data"][0], {
+ _drag: function(sourceHtmlObject, dhtmlObject, targetHtmlObject, targetHtml) {
+
+ if (scheduler.checkEvent("onBeforeExternalDragIn") && !scheduler.callEvent("onBeforeExternalDragIn", [sourceHtmlObject, dhtmlObject, targetHtmlObject, targetHtml, last_event]))
+ return;
+
+ var temp = scheduler.attachEvent("onEventCreated", function(id) {
+ if (!scheduler.callEvent("onExternalDragIn", [id, sourceHtmlObject, last_event])) {
+ this._drag_mode = this._drag_id = null;
+ this.deleteEvent(id);
+ }
+ });
+
+ var action_data = scheduler.getActionData(last_event);
+ var event_data = {
+ start_date: new Date(action_data.date)
+ };
+
+ // custom views, need to assign section id, fix dates
+ if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ var view_options = scheduler.matrix[scheduler._mode];
+ event_data[view_options.y_property] = action_data.section;
+
+ var pos = scheduler._locate_cell_timeline(last_event);
+ event_data.start_date = view_options._trace_x[pos.x];
+ event_data.end_date = scheduler.date.add(event_data.start_date, view_options.x_step, view_options.x_unit);
+ }
+ if (scheduler._props && scheduler._props[scheduler._mode]) {
+ event_data[scheduler._props[scheduler._mode].map_to] = action_data.section;
+ }
+
+ scheduler.addEventNow(event_data);
+
+ scheduler.detachEvent(temp);
+
+ },
+ _dragIn: function(htmlObject, shtmlObject) {
+ return htmlObject;
+ },
+ _dragOut: function(htmlObject) {
+ return this;
+ }
+ });
+});
diff --git a/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map
new file mode 100644
index 0000000..d928376
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_outerdrag.js.map","sources":["dhtmlxscheduler_outerdrag.js"],"names":["scheduler","attachEvent","last_event","dragger","dhtmlDragAndDropObject","old","stopDrag","e","event","apply","this","arguments","addDragLanding","_els","_drag","sourceHtmlObject","dhtmlObject","targetHtmlObject","targetHtml","checkEvent","callEvent","temp","id","_drag_mode","_drag_id","deleteEvent","action_data","getActionData","event_data","start_date","Date","date","matrix","_mode","view_options","y_property","section","pos","_locate_cell_timeline","_trace_x","x","end_date","add","x_step","x_unit","_props","map_to","addEventNow","detachEvent","_dragIn","htmlObject","_dragOut"],"mappings":"AACAA,UAAUC,YAAY,mBAAoB,WACzC,GAEIC,GAFAC,EAAU,GAAKC,wBACfC,EAAMF,EAAQG,QAElBH,GAAQG,SAAW,SAASC,GAE3B,MADAL,GAAaK,GAAKC,MACXH,EAAII,MAAMC,KAAMC,YAExBR,EAAQS,eAAeZ,UAAUa,KAAmB,aAAE,IACrDC,MAAO,SAASC,EAAkBC,EAAaC,EAAkBC,GAEhE,IAAIlB,UAAUmB,WAAW,2BAA8BnB,UAAUoB,UAAU,0BAA2BL,EAAkBC,EAAaC,EAAkBC,EAAYhB,IAAnK,CAGA,GAAImB,GAAOrB,UAAUC,YAAY,iBAAkB,SAASqB,GACtDtB,UAAUoB,UAAU,oBAAqBE,EAAIP,EAAkBb,MACnEQ,KAAKa,WAAab,KAAKc,SAAW,KAClCd,KAAKe,YAAYH;GAIfI,EAAc1B,UAAU2B,cAAczB,GACtC0B,GACHC,WAAY,GAAIC,MAAKJ,EAAYK,MAIlC,IAAI/B,UAAUgC,QAAUhC,UAAUgC,OAAOhC,UAAUiC,OAAQ,CAC1D,GAAIC,GAAelC,UAAUgC,OAAOhC,UAAUiC,MAC9CL,GAAWM,EAAaC,YAAcT,EAAYU,OAElD,IAAIC,GAAMrC,UAAUsC,sBAAsBpC,EAC1C0B,GAAWC,WAAaK,EAAaK,SAASF,EAAIG,GAClDZ,EAAWa,SAAWzC,UAAU+B,KAAKW,IAAId,EAAWC,WAAYK,EAAaS,OAAQT,EAAaU,QAE/F5C,UAAU6C,QAAU7C,UAAU6C,OAAO7C,UAAUiC,SAClDL,EAAW5B,UAAU6C,OAAO7C,UAAUiC,OAAOa,QAAUpB,EAAYU,SAGpEpC,UAAU+C,YAAYnB,GAEtB5B,UAAUgD,YAAY3B,KAGvB4B,QAAS,SAASC,GACjB,MAAOA;EAERC,SAAU,WACT,MAAOzC"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_pdf.js b/codebase/sources/ext/dhtmlxscheduler_pdf.js
new file mode 100644
index 0000000..77c9a73
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_pdf.js
@@ -0,0 +1,363 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.
+
+(c) Dinamenta, UAB.
+*/
+(function() {
+ var dx, dy,
+ html_regexp = new RegExp("<[^>]*>", "g"),
+ newline_regexp = new RegExp("<br[^>]*>", "g");
+
+ function clean_html(val) {
+ return val.replace(newline_regexp, "\n").replace(html_regexp, "");
+ }
+
+ function x_norm(x, offset) {
+ x = parseFloat(x);
+ offset = parseFloat(offset);
+ if (!isNaN(offset)) x -= offset;
+
+ var w = colsWidth(x);
+ x = x - w.width + w.cols*dx;
+ return isNaN(x)?"auto":(100*x/(dx));
+ }
+
+ function x_norm_event(x, offset, is_left) {
+ x = parseFloat(x);
+ offset = parseFloat(offset);
+ if (!isNaN(offset) && is_left) x -= offset;
+
+ var w = colsWidth(x);
+ x = x - w.width + w.cols*dx;
+ return isNaN(x)?"auto":(100*x/(dx-(!isNaN(offset)?offset:0)));
+ }
+ function colsWidth(width) {
+ var r = 0;
+ var header = scheduler._els.dhx_cal_header[0].childNodes;
+ var els = header[1] ? header[1].childNodes : header[0].childNodes;
+ for (var i = 0; i < els.length; i++) {
+ var el = els[i].style ? els[i] : els[i].parentNode;
+ var w = parseFloat(el.style.width);
+ if (width > w){
+ width -= (w+1);
+ r+=(w+1);
+ }
+ else
+ break;
+ }
+ return { width: r, cols: i };
+ }
+
+ function y_norm(y) {
+ y = parseFloat(y);
+ if (isNaN(y)) return "auto";
+ return 100 * y / dy;
+ }
+
+ function get_style(node, style){
+ return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||"";
+ }
+
+ function de_day(node, n) {
+ var x = parseInt(node.style.left, 10);
+
+ for (var dx = 0; dx < scheduler._cols.length; dx++) {
+ x -= scheduler._cols[dx];
+ if (x < 0) return dx;
+ }
+ return n;
+ }
+
+ function de_week(node, n) {
+ var y = parseInt(node.style.top, 10);
+ for (var dy = 0; dy < scheduler._colsS.heights.length; dy++)
+ if (scheduler._colsS.heights[dy] > y) return dy;
+ return n;
+ }
+
+ function xml_start(tag) {
+ return tag ? "<"+tag+">" : "";
+ }
+ function xml_end(tag) {
+ return tag ? "</"+tag+">" : "";
+ }
+
+ function xml_top(tag, profile, header, footer) {
+ var xml = "<"+tag+" profile='" + profile + "'";
+ if (header)
+ xml += " header='" + header + "'";
+ if (footer)
+ xml += " footer='" + footer + "'";
+ xml += ">";
+ return xml;
+ }
+
+ function xml_body_header() {
+ var xml = "";
+ // detects if current mode is timeline
+ var mode = scheduler._mode;
+ if (scheduler.matrix && scheduler.matrix[scheduler._mode])
+ mode = (scheduler.matrix[scheduler._mode].render == "cell") ? "matrix" : "timeline";
+ xml += "<scale mode='" + mode + "' today='" + scheduler._els.dhx_cal_date[0].innerHTML + "'>";
+
+ if (scheduler._mode == "week_agenda") {
+ var xh = scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV");
+ for (var i = 0; i < xh.length; i++)
+ if (xh[i].className == "dhx_wa_scale_bar")
+ xml += "<column>" + clean_html(xh[i].innerHTML) + "</column>";
+ } else if (scheduler._mode == "agenda" || scheduler._mode == "map") {
+ var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes;
+
+ xml += "<column>" + clean_html(xh[0].innerHTML) + "</column><column>" + clean_html(xh[1].innerHTML) + "</column>";
+ } else if (scheduler._mode == "year") {
+ var xh = scheduler._els.dhx_cal_data[0].childNodes;
+ for (var i = 0; i < xh.length; i++) {
+ xml += "<month label='" + clean_html(xh[i].childNodes[0].innerHTML) + "'>";
+ xml += xml_month_scale(xh[i].childNodes[1].childNodes);
+ xml += xml_month(xh[i].childNodes[2]);
+ xml += "</month>";
+ }
+ } else {
+ xml += "<x>";
+ var xh = scheduler._els.dhx_cal_header[0].childNodes;
+ xml += xml_month_scale(xh);
+ xml += "</x>";
+
+ var yh = scheduler._els.dhx_cal_data[0];
+ if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ xml += "<y>";
+ for (var i = 0; i < yh.firstChild.rows.length; i++) {
+ var el = yh.firstChild.rows[i];
+ xml += "<row><![CDATA[" + clean_html(el.cells[0].innerHTML) + "]]></row>";
+ }
+ xml += "</y>";
+ dy = yh.firstChild.rows[0].cells[0].offsetHeight;
+ } else if (yh.firstChild.tagName == "TABLE") {
+ xml += xml_month(yh);
+ } else {
+ yh = yh.childNodes[yh.childNodes.length - 1];
+ while (yh.className.indexOf("dhx_scale_holder") == -1)
+ yh = yh.previousSibling;
+ yh = yh.childNodes;
+
+ xml += "<y>";
+ for (var i = 0; i < yh.length; i++)
+ xml += "\n<row><![CDATA[" + clean_html(yh[i].innerHTML) + "]]></row>";
+ xml += "</y>";
+ dy = yh[0].offsetHeight;
+ }
+ }
+ xml += "</scale>";
+ return xml;
+ }
+
+ function xml_month(yh) {
+ var xml = "";
+ var r = yh.firstChild.rows;
+ for (var i = 0; i < r.length; i++) {
+ var days = [];
+ for (var j = 0; j < r[i].cells.length; j++)
+ days.push(r[i].cells[j].firstChild.innerHTML);
+
+ xml += "\n<row height='" + yh.firstChild.rows[i].cells[0].offsetHeight + "'><![CDATA[" + clean_html(days.join("|")) + "]]></row>";
+ dy = yh.firstChild.rows[0].cells[0].offsetHeight;
+ }
+ return xml;
+ }
+
+ function xml_month_scale(xh) {
+ var xhs,
+ xml = "";
+ if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ if (scheduler.matrix[scheduler._mode].second_scale)
+ xhs = xh[1].childNodes;
+
+ xh = xh[0].childNodes;
+ }
+
+ for (var i = 0; i < xh.length; i++)
+ xml += "\n<column><![CDATA[" + clean_html(xh[i].innerHTML) + "]]></column>";
+ dx = xh[0].offsetWidth;
+
+ if (xhs) {
+ var width = 0;
+ var top_width = xh[0].offsetWidth;
+ var top_col = 1;
+ for (var i = 0; i < xhs.length; i++) {
+ xml += "\n<column second_scale='" + top_col + "'><![CDATA[" + clean_html(xhs[i].innerHTML) + "]]></column>";
+ width += xhs[i].offsetWidth;
+ if (width >= top_width) {
+ top_width += (xh[top_col] ? xh[top_col].offsetWidth : 0);
+ top_col++;
+ }
+ dx = xhs[0].offsetWidth;
+ }
+ }
+ return xml;
+ }
+
+ function xml_body(colors) {
+ var xml = "";
+ var evs = scheduler._rendered;
+ var matrix = scheduler.matrix && scheduler.matrix[scheduler._mode];
+
+ if (scheduler._mode == "agenda" || scheduler._mode == "map") {
+
+ for (var i = 0; i < evs.length; i++)
+ xml += "<event><head><![CDATA[" + clean_html(evs[i].childNodes[0].innerHTML) + "]]></head><body><![CDATA[" + clean_html(evs[i].childNodes[2].innerHTML) + "]]></body></event>";
+
+ } else if (scheduler._mode == "week_agenda") {
+
+ for (var i = 0; i < evs.length; i++)
+ xml += "<event day='" + evs[i].parentNode.getAttribute("day") + "'><body>" + clean_html(evs[i].innerHTML) + "</body></event>";
+
+ } else if (scheduler._mode == "year") {
+
+ var evs = scheduler.get_visible_events();
+ for (var i = 0; i < evs.length; i++) {
+ var d = evs[i].start_date;
+ if (d.valueOf() < scheduler._min_date.valueOf())
+ d = scheduler._min_date;
+
+ while (d < evs[i].end_date) {
+ var m = d.getMonth() + 12 * (d.getFullYear() - scheduler._min_date.getFullYear()) - scheduler.week_starts._month;
+ var day = scheduler.week_starts[m] + d.getDate() - 1;
+ var text_color = colors ? get_style(scheduler._get_year_cell(d), "color") : "";
+ var bg_color = colors ? get_style(scheduler._get_year_cell(d), "backgroundColor") : "";
+
+ xml += "<event day='" + (day % 7) + "' week='" + Math.floor(day / 7) + "' month='" + m + "' backgroundColor='" + bg_color + "' color='" + text_color + "'></event>";
+ d = scheduler.date.add(d, 1, "day");
+ if (d.valueOf() >= scheduler._max_date.valueOf())
+ break;
+ }
+ }
+ } else if (matrix && matrix.render == "cell") {
+ var evs = scheduler._els.dhx_cal_data[0].getElementsByTagName("TD");
+ for (var i = 0; i < evs.length; i++) {
+ var text_color = colors ? get_style(evs[i], "color") : "";
+ var bg_color = colors ? get_style(evs[i], "backgroundColor") : "";
+ xml += "\n<event><body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body></event>";
+ }
+ } else {
+ for (var i = 0; i < evs.length; i++) {
+ var zx, zdx;
+ if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ // logic for timeline view
+ zx = x_norm(evs[i].style.left);
+ zdx = x_norm(evs[i].offsetWidth)-1;
+ } else {
+ // we should use specific logic for day/week/units view
+ var left_norm = scheduler.config.use_select_menu_space ? 0 : 26;
+ zx = x_norm_event(evs[i].style.left, left_norm, true);
+ zdx = x_norm_event(evs[i].style.width, left_norm)-1;
+ }
+ if (isNaN(zdx * 1)) continue;
+ var zy = y_norm(evs[i].style.top);
+ var zdy = y_norm(evs[i].style.height);
+
+ var e_type = evs[i].className.split(" ")[0].replace("dhx_cal_", "");
+ if (e_type === 'dhx_tooltip_line') continue;
+
+ var dets = scheduler.getEvent(evs[i].getAttribute("event_id"));
+ if (!dets) continue;
+ var day = dets._sday;
+ var week = dets._sweek;
+ var length = dets._length || 0;
+
+ if (scheduler._mode == "month") {
+ zdy = parseInt(evs[i].offsetHeight, 10);
+ zy = parseInt(evs[i].style.top, 10) - scheduler.xy.month_head_height;
+
+ day = de_day(evs[i], day);
+ week = de_week(evs[i], week);
+ } else if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ day = 0;
+ var el = evs[i].parentNode.parentNode.parentNode;
+ week = el.rowIndex;
+ var dy_copy = dy;
+ dy = evs[i].parentNode.offsetHeight;
+ zy = y_norm(evs[i].style.top);
+ zy -= zy * 0.2;
+ dy = dy_copy;
+ } else {
+ if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue;
+ var parent = scheduler._els["dhx_cal_data"][0].childNodes[0];
+ var offset = parseFloat(parent.className.indexOf("dhx_scale_holder") != -1 ? parent.style.left : 0);
+ zx += x_norm(evs[i].parentNode.style.left, offset);
+ }
+
+ xml += "\n<event week='" + week + "' day='" + day + "' type='" + e_type + "' x='" + zx + "' y='" + zy + "' width='" + zdx + "' height='" + zdy + "' len='" + length + "'>";
+
+ if (e_type == "event") {
+ xml += "<header><![CDATA[" + clean_html(evs[i].childNodes[1].innerHTML) + "]]></header>";
+ var text_color = colors ? get_style(evs[i].childNodes[2], "color") : "";
+ var bg_color = colors ? get_style(evs[i].childNodes[2], "backgroundColor") : "";
+ xml += "<body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].childNodes[2].innerHTML) + "]]></body>";
+ } else {
+ var text_color = colors ? get_style(evs[i], "color") : "";
+ var bg_color = colors ? get_style(evs[i], "backgroundColor") : "";
+ xml += "<body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body>";
+ }
+ xml += "</event>";
+ }
+ }
+
+ return xml;
+ }
+
+ function to_pdf(start, end, view, url, mode, header, footer) {
+ var colors = false;
+ if (mode == "fullcolor") {
+ colors = true;
+ mode = "color";
+ }
+
+ mode = mode || "color";
+
+ var uid = scheduler.uid();
+ var d = document.createElement("div");
+ d.style.display = "none";
+ document.body.appendChild(d);
+
+ d.innerHTML = '<form id="' + uid + '" method="post" target="_blank" action="' + url + '" accept-charset="utf-8" enctype="application/x-www-form-urlencoded"><input type="hidden" name="mycoolxmlbody"/> </form>';
+
+
+ var xml = "";
+ if (start) {
+ var original_date = scheduler._date;
+ var original_mode = scheduler._mode;
+ end = scheduler.date[view+"_start"](end);
+ end = scheduler.date["get_"+view+"_end"] ? scheduler.date["get_"+view+"_end"](end) : scheduler.date.add(end, 1, view);
+
+ xml = xml_top("pages", mode, header, footer);
+ for (var temp_date = new Date(start); +temp_date < +end; temp_date = scheduler.date.add(temp_date, 1, view)) {
+ scheduler.setCurrentView(temp_date, view);
+ xml += xml_start("page") + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("page");
+ }
+ xml += xml_end("pages");
+
+ scheduler.setCurrentView(original_date, original_mode);
+ } else {
+ xml = xml_top("data", mode, header, footer) + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("data");
+ }
+
+
+ document.getElementById(uid).firstChild.value = encodeURIComponent(xml);
+ document.getElementById(uid).submit();
+ d.parentNode.removeChild(d);
+ }
+
+ scheduler.toPDF = function(url, mode, header, footer) {
+ return to_pdf.apply(this, [null, null, null, url, mode, header, footer]);
+ };
+ scheduler.toPDFRange = function(start, end, view, url, mode, header, footer) {
+ if (typeof start == "string") {
+ start = scheduler.templates.api_date(start);
+ end = scheduler.templates.api_date(end);
+ }
+
+ return to_pdf.apply(this, arguments);
+ };
+})();
diff --git a/codebase/sources/ext/dhtmlxscheduler_pdf.js.map b/codebase/sources/ext/dhtmlxscheduler_pdf.js.map
new file mode 100644
index 0000000..0d4607e
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_pdf.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_pdf.js.map","sources":["dhtmlxscheduler_pdf.js"],"names":["clean_html","val","replace","newline_regexp","html_regexp","x_norm","x","offset","parseFloat","isNaN","w","colsWidth","width","cols","dx","x_norm_event","is_left","r","header","scheduler","_els","dhx_cal_header","childNodes","els","i","length","el","style","parentNode","y_norm","y","dy","get_style","node","window","getComputedStyle","currentStyle","de_day","n","parseInt","left","_cols","de_week","top","_colsS","heights","xml_start","tag","xml_end","xml_top","profile","footer","xml","xml_body_header","mode","_mode","matrix","render","dhx_cal_date","innerHTML","xh","dhx_cal_data","getElementsByTagName","className","xml_month_scale","xml_month","yh","firstChild","rows","cells","offsetHeight","tagName","indexOf","previousSibling","days","j","push","join","xhs","second_scale","offsetWidth","top_width","top_col","xml_body","colors","evs","_rendered","getAttribute","get_visible_events","d","start_date","valueOf","_min_date","end_date","m","getMonth","getFullYear","week_starts","_month","day","getDate","text_color","_get_year_cell","bg_color","Math","floor","date","add","_max_date","zx","zdx","left_norm","config","use_select_menu_space","zy","zdy","height","e_type","split","dets","getEvent","_sday","week","_sweek","_length","xy","month_head_height","rowIndex","dy_copy","parent","to_pdf","start","end","view","url","uid","document","createElement","display","body","appendChild","original_date","_date","original_mode","temp_date","Date","setCurrentView","getElementById","value","encodeURIComponent","submit","removeChild","RegExp","toPDF","apply","this","toPDFRange","templates","api_date","arguments"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_quick_info.js b/codebase/sources/ext/dhtmlxscheduler_quick_info.js
new file mode 100644
index 0000000..08fc7bb
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_quick_info.js
@@ -0,0 +1,199 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.config.icons_select = ["icon_details", "icon_delete"];
+scheduler.config.details_on_create = true;
+scheduler.xy.menu_width = 0;
+
+scheduler.attachEvent("onClick", function(id){
+ scheduler.showQuickInfo(id);
+ return true;
+});
+
+(function(){
+ var events = ["onEmptyClick", "onViewChange", "onLightbox", "onBeforeEventDelete", "onBeforeDrag"];
+ var hiding_function = function(){
+ scheduler._hideQuickInfo();
+ return true;
+ };
+ for (var i=0; i<events.length; i++)
+ scheduler.attachEvent(events[i], hiding_function);
+})();
+
+scheduler.templates.quick_info_title = function(start, end, ev){ return ev.text.substr(0,50); };
+scheduler.templates.quick_info_content = function(start, end, ev){ return ev.details || ev.text; };
+scheduler.templates.quick_info_date = function(start, end, ev){
+ if (scheduler.isOneDayEvent(ev))
+ return scheduler.templates.day_date(start, end, ev) + " " +scheduler.templates.event_header(start, end, ev);
+ else
+ return scheduler.templates.week_date(start, end, ev);
+};
+
+scheduler.showQuickInfo = function(id){
+ if (id == this._quick_info_box_id) return;
+ this.hideQuickInfo(true);
+
+ var pos = this._get_event_counter_part(id);
+
+ if (pos){
+ this._quick_info_box = this._init_quick_info(pos);
+ this._fill_quick_data(id);
+ this._show_quick_info(pos);
+ }
+};
+scheduler._hideQuickInfo = function(){
+ scheduler.hideQuickInfo();
+};
+scheduler.hideQuickInfo = function(forced){
+ var qi = this._quick_info_box;
+ this._quick_info_box_id = 0;
+
+ if (qi && qi.parentNode){
+ if (scheduler.config.quick_info_detached)
+ return qi.parentNode.removeChild(qi);
+
+ if (qi.style.right == "auto")
+ qi.style.left = "-350px";
+ else
+ qi.style.right = "-350px";
+
+ if (forced)
+ qi.parentNode.removeChild(qi);
+ }
+};
+dhtmlxEvent(window, "keydown", function(e){
+ if (e.keyCode == 27)
+ scheduler.hideQuickInfo();
+});
+
+scheduler._show_quick_info = function(pos){
+ var qi = scheduler._quick_info_box;
+
+ if (scheduler.config.quick_info_detached){
+ scheduler._obj.appendChild(qi);
+ var width = qi.offsetWidth;
+ var height = qi.offsetHeight;
+
+ qi.style.left = pos.left - pos.dx*(width - pos.width) + "px";
+ qi.style.top = pos.top - (pos.dy?height:-pos.height) + "px";
+ } else {
+ qi.style.top = this.xy.scale_height+this.xy.nav_height + 20 + "px";
+ if (pos.dx == 1){
+ qi.style.right = "auto";
+ qi.style.left = "-300px";
+
+ setTimeout(function(){
+ qi.style.left = "-10px";
+ },1);
+ } else {
+ qi.style.left = "auto";
+ qi.style.right = "-300px";
+
+ setTimeout(function(){
+ qi.style.right = "-10px";
+ },1);
+ }
+ qi.className = qi.className.replace("dhx_qi_left","").replace("dhx_qi_left","")+" dhx_qi_"+(pos==1?"left":"right");
+ scheduler._obj.appendChild(qi);
+ }
+};
+scheduler.attachEvent("onTemplatesReady", function(){
+ scheduler.hideQuickInfo();
+ if(this._quick_info_box){
+ var box = this._quick_info_box;
+ if(box.parentNode){
+ box.parentNode.removeChild(box);
+ }
+ this._quick_info_box = null;
+ }
+});
+scheduler._quick_info_onscroll_handler = function(e){
+ scheduler.hideQuickInfo();
+};
+scheduler._init_quick_info = function(){
+ if (!this._quick_info_box){
+ var sizes = scheduler.xy;
+
+ var qi = this._quick_info_box = document.createElement("div");
+ qi.className = "dhx_cal_quick_info";
+ if (scheduler.$testmode)
+ qi.className += " dhx_no_animate";
+ //title
+ var html = "<div class=\"dhx_cal_qi_title\" style=\"height:"+sizes.quick_info_title+"px\">" +
+ "<div class=\"dhx_cal_qi_tcontent\"></div><div class=\"dhx_cal_qi_tdate\"></div>" +
+ "</div>" +
+ "<div class=\"dhx_cal_qi_content\"></div>";
+
+ //buttons
+ html += "<div class=\"dhx_cal_qi_controls\" style=\"height:"+sizes.quick_info_buttons+"px\">";
+ var buttons = scheduler.config.icons_select;
+ for (var i = 0; i < buttons.length; i++)
+ html += "<div class=\"dhx_qi_big_icon "+buttons[i]+"\" title=\""+scheduler.locale.labels[buttons[i]]+"\"><div class='dhx_menu_icon " + buttons[i] + "'></div><div>"+scheduler.locale.labels[buttons[i]]+"</div></div>";
+ html += "</div>";
+
+ qi.innerHTML = html;
+ dhtmlxEvent(qi, "click", function(ev){
+ ev = ev || event;
+ scheduler._qi_button_click(ev.target || ev.srcElement);
+ });
+ if (scheduler.config.quick_info_detached){
+ scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "scroll", scheduler._quick_info_onscroll_handler);
+ dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "scroll", scheduler._quick_info_onscroll_handler);
+ }
+ }
+
+ return this._quick_info_box;
+};
+
+scheduler._qi_button_click = function(node){
+ var box = scheduler._quick_info_box;
+ if (!node || node == box) return;
+
+ var mask = node.className;
+ if (mask.indexOf("_icon")!=-1){
+ var id = scheduler._quick_info_box_id;
+ scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id);
+ } else
+ scheduler._qi_button_click(node.parentNode);
+};
+scheduler._get_event_counter_part = function(id){
+ var domEv = scheduler.getRenderedEvent(id);
+ var left = 0;
+ var top = 0;
+
+ var node = domEv;
+ while (node && node != scheduler._obj){
+ left += node.offsetLeft;
+ top += node.offsetTop-node.scrollTop;
+ node = node.offsetParent;
+ }
+ if(node){
+ var dx = (left + domEv.offsetWidth/2) > (scheduler._x/2) ? 1 : 0;
+ var dy = (top + domEv.offsetHeight/2) > (scheduler._y/2) ? 1 : 0;
+
+ return { left:left, top:top, dx:dx, dy:dy,
+ width:domEv.offsetWidth, height:domEv.offsetHeight };
+ }
+ return 0;
+};
+
+scheduler._fill_quick_data = function(id){
+ var ev = scheduler.getEvent(id);
+ var qi = scheduler._quick_info_box;
+
+ scheduler._quick_info_box_id = id;
+
+//title content
+ var titleContent = qi.firstChild.firstChild;
+ titleContent.innerHTML = scheduler.templates.quick_info_title(ev.start_date, ev.end_date, ev);
+ var titleDate = titleContent.nextSibling;
+ titleDate.innerHTML = scheduler.templates.quick_info_date(ev.start_date, ev.end_date, ev);
+
+//main content
+ var main = qi.firstChild.nextSibling;
+ main.innerHTML = scheduler.templates.quick_info_content(ev.start_date, ev.end_date, ev);
+};
diff --git a/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map b/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map
new file mode 100644
index 0000000..65165d0
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_quick_info.js.map","sources":["dhtmlxscheduler_quick_info.js"],"names":["scheduler","config","icons_select","details_on_create","xy","menu_width","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","isOneDayEvent","day_date","event_header","week_date","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","quick_info_detached","removeChild","style","right","left","dhtmlxEvent","window","e","keyCode","_obj","appendChild","width","offsetWidth","height","offsetHeight","dx","top","dy","scale_height","nav_height","setTimeout","className","replace","box","_quick_info_onscroll_handler","sizes","document","createElement","$testmode","html","quick_info_buttons","buttons","locale","labels","innerHTML","event","_qi_button_click","target","srcElement","_detachDomEvent","_els","node","mask","indexOf","_click","split","domEv","getRenderedEvent","offsetLeft","offsetTop","scrollTop","offsetParent","_x","_y","getEvent","titleContent","firstChild","start_date","end_date","titleDate","nextSibling","main"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_readonly.js b/codebase/sources/ext/dhtmlxscheduler_readonly.js
new file mode 100644
index 0000000..462d878
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_readonly.js
@@ -0,0 +1,160 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTemplatesReady", function() {
+ var original_sns = scheduler.config.lightbox.sections.slice();
+ var original_left_buttons = scheduler.config.buttons_left.slice();
+ var original_right_buttons = scheduler.config.buttons_right.slice();
+
+
+ scheduler.attachEvent("onBeforeLightbox", function(id) {
+ if (this.config.readonly_form || this.getEvent(id).readonly) {
+ this.config.readonly_active = true;
+
+ for (var i = 0; i < this.config.lightbox.sections.length; i++) {
+ this.config.lightbox.sections[i].focus = false;
+ }
+ }
+ else {
+ this.config.readonly_active = false;
+ scheduler.config.lightbox.sections = original_sns.slice(); // restore original list of sections including recurring
+ scheduler.config.buttons_left = original_left_buttons.slice();
+ scheduler.config.buttons_right = original_right_buttons.slice();
+ }
+
+ var sns = this.config.lightbox.sections;
+ if (this.config.readonly_active) {
+ for (var i = 0; i < sns.length; i++) {
+ if (sns[i].type == 'recurring') {
+ if (this.config.readonly_active) {
+ sns.splice(i, 1);
+ }
+ break;
+ }
+ }
+
+ var forbidden_buttons = ["dhx_delete_btn", "dhx_save_btn"];
+ var button_arrays = [scheduler.config.buttons_left, scheduler.config.buttons_right];
+ for (var i = 0; i < forbidden_buttons.length; i++) {
+ var forbidden_button = forbidden_buttons[i];
+ for (var k = 0; k < button_arrays.length; k++) {
+ var button_array = button_arrays[k];
+ var index = -1;
+ for (var p = 0; p < button_array.length; p++) {
+ if (button_array[p] == forbidden_button) {
+ index = p;
+ break;
+ }
+ }
+ if (index != -1) {
+ button_array.splice(index, 1);
+ }
+ }
+ }
+
+
+ }
+
+ this.resetLightbox();
+
+ return true;
+ });
+
+ function txt_replace(tag, d, n, text) {
+ var txts = d.getElementsByTagName(tag);
+ var txtt = n.getElementsByTagName(tag);
+ for (var i = txtt.length - 1; i >= 0; i--) {
+ var n = txtt[i];
+ if (!text){
+ n.disabled = true;
+ //radio and checkboxes loses state after .cloneNode in IE
+ if(d.checked)
+ n.checked = true;
+ }else {
+ var t = document.createElement("SPAN");
+ t.className = "dhx_text_disabled";
+ t.innerHTML = text(txts[i]);
+ n.parentNode.insertBefore(t, n);
+ n.parentNode.removeChild(n);
+ }
+ }
+ }
+
+ var old = scheduler._fill_lightbox;
+ scheduler._fill_lightbox = function() {
+
+ var lb = this.getLightbox();
+ if (this.config.readonly_active) {
+ lb.style.visibility = 'hidden';
+ // lightbox should have actual sizes before rendering controls
+ // currently only matters for dhtmlxCombo
+ lb.style.display = 'block';
+ }
+ var res = old.apply(this, arguments);
+ if (this.config.readonly_active) {
+ //reset visibility and display
+ lb.style.visibility = '';
+ lb.style.display = 'none';
+ }
+
+ if (this.config.readonly_active) {
+
+ var d = this.getLightbox();
+ var n = this._lightbox_r = d.cloneNode(true);
+ n.id = scheduler.uid();
+
+ txt_replace("textarea", d, n, function(a) {
+ return a.value;
+ });
+ txt_replace("input", d, n, false);
+ txt_replace("select", d, n, function(a) {
+ if(!a.options.length) return "";
+ return a.options[Math.max((a.selectedIndex || 0), 0)].text;
+ });
+
+ d.parentNode.insertBefore(n, d);
+
+ olds.call(this, n);
+ if (scheduler._lightbox)
+ scheduler._lightbox.parentNode.removeChild(scheduler._lightbox);
+ this._lightbox = n;
+
+ if (scheduler.config.drag_lightbox)
+ n.firstChild.onmousedown = scheduler._ready_to_dnd;
+ this.setLightboxSize();
+ n.onclick = function(e) {
+ var src = e ? e.target : event.srcElement;
+ if (!src.className) src = src.previousSibling;
+ if (src && src.className)
+ switch (src.className) {
+ case "dhx_cancel_btn":
+ scheduler.callEvent("onEventCancel", [scheduler._lightbox_id]);
+ scheduler._edit_stop_event(scheduler.getEvent(scheduler._lightbox_id), false);
+ scheduler.hide_lightbox();
+ break;
+ }
+ };
+ }
+ return res;
+ };
+
+ var olds = scheduler.showCover;
+ scheduler.showCover = function() {
+ if (!this.config.readonly_active)
+ olds.apply(this, arguments);
+ };
+
+ var hold = scheduler.hide_lightbox;
+ scheduler.hide_lightbox = function() {
+ if (this._lightbox_r) {
+ this._lightbox_r.parentNode.removeChild(this._lightbox_r);
+ this._lightbox_r = this._lightbox = null;
+ }
+
+ return hold.apply(this, arguments);
+ };
+});
diff --git a/codebase/sources/ext/dhtmlxscheduler_readonly.js.map b/codebase/sources/ext/dhtmlxscheduler_readonly.js.map
new file mode 100644
index 0000000..8ce874d
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_readonly.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_readonly.js.map","sources":["dhtmlxscheduler_readonly.js"],"names":["scheduler","attachEvent","txt_replace","tag","d","n","text","txts","getElementsByTagName","txtt","i","length","t","document","createElement","className","innerHTML","parentNode","insertBefore","removeChild","disabled","checked","original_sns","config","lightbox","sections","slice","original_left_buttons","buttons_left","original_right_buttons","buttons_right","id","this","readonly_form","getEvent","readonly","readonly_active","focus","sns","type","splice","forbidden_buttons","button_arrays","forbidden_button","k","button_array","index","p","resetLightbox","old","_fill_lightbox","lb","getLightbox","style","visibility","display","res","apply","arguments","_lightbox_r","cloneNode","uid","a","value","options","Math","max","selectedIndex","olds","call","_lightbox","drag_lightbox","firstChild","onmousedown","_ready_to_dnd","setLightboxSize","onclick","e","src","target","event","srcElement","previousSibling","callEvent","_lightbox_id","_edit_stop_event","hide_lightbox","showCover","hold"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js b/codebase/sources/ext/dhtmlxscheduler_recurring.js
new file mode 100644
index 0000000..ad4a7a0
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js
@@ -0,0 +1,818 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.config.occurrence_timestamp_in_utc = false;
+scheduler.config.recurring_workdays = [1,2,3,4,5];
+scheduler.form_blocks["recurring"] = {
+ render:function(sns) {
+ return scheduler.__recurring_template;
+ },
+ _ds: {},
+ _init_set_value:function(node, value, ev) {
+ scheduler.form_blocks["recurring"]._ds = {start:ev.start_date, end:ev._end_date};
+
+ var str_date_format = scheduler.date.str_to_date(scheduler.config.repeat_date);
+ var str_date = function(str_date) {
+ var date = str_date_format(str_date);
+ if (scheduler.config.include_end_by)
+ date = scheduler.date.add(date, 1, 'day');
+ return date;
+ };
+
+ var date_str = scheduler.date.date_to_str(scheduler.config.repeat_date);
+
+ var top = node.getElementsByTagName("FORM")[0];
+ var els = [];
+
+ function register_els(inps) {
+ for (var i = 0; i < inps.length; i++) {
+ var inp = inps[i];
+ if (inp.type == "checkbox" || inp.type == "radio") {
+ if (!els[inp.name])
+ els[inp.name] = [];
+ els[inp.name].push(inp);
+ } else
+ els[inp.name] = inp;
+ }
+ }
+
+ register_els(top.getElementsByTagName("INPUT"));
+ register_els(top.getElementsByTagName("SELECT"));
+
+ if (!scheduler.config.repeat_date_of_end) {
+ var formatter = scheduler.date.date_to_str(scheduler.config.repeat_date);
+ scheduler.config.repeat_date_of_end = formatter(scheduler.date.add(scheduler._currentDate(), 30, "day"));
+ }
+ els["date_of_end"].value = scheduler.config.repeat_date_of_end;
+
+ var $ = function(a) {
+ return document.getElementById(a);
+ };
+
+ function get_radio_value(name) {
+ var col = els[name];
+ for (var i = 0; i < col.length; i++)
+ if (col[i].checked) return col[i].value;
+ }
+
+ function change_current_view() {
+ $("dhx_repeat_day").style.display = "none";
+ $("dhx_repeat_week").style.display = "none";
+ $("dhx_repeat_month").style.display = "none";
+ $("dhx_repeat_year").style.display = "none";
+ $("dhx_repeat_" + this.value).style.display = "block";
+ }
+
+ function get_repeat_code(dates) {
+ var code = [get_radio_value("repeat")];
+ get_rcode[code[0]](code, dates);
+
+ while (code.length < 5) code.push("");
+ var repeat = "";
+ if (els["end"][0].checked) {
+ dates.end = new Date(9999, 1, 1);
+ repeat = "no";
+ }
+ else if (els["end"][2].checked) {
+ dates.end = str_date(els["date_of_end"].value);
+ }
+ else {
+ scheduler.transpose_type(code.join("_"));
+ repeat = Math.max(1, els["occurences_count"].value);
+ var transp = ((code[0] == "week" && code[4] && code[4].toString().indexOf(scheduler.config.start_on_monday ? 1 : 0) == -1) ? 1 : 0);
+ dates.end = scheduler.date.add(new Date(dates.start), repeat + transp, code.join("_"));
+ }
+
+ return code.join("_") + "#" + repeat;
+ }
+
+ scheduler.form_blocks["recurring"]._get_repeat_code = get_repeat_code;
+ var get_rcode = {
+ month:function(code, dates) {
+ if (get_radio_value("month_type") == "d") {
+ code.push(Math.max(1, els["month_count"].value));
+ dates.start.setDate(els["month_day"].value);
+ } else {
+ code.push(Math.max(1, els["month_count2"].value));
+ code.push(els["month_day2"].value);
+ code.push(Math.max(1, els["month_week2"].value));
+ if (!scheduler.config.repeat_precise){
+ dates.start.setDate(1);
+ }
+ }
+ dates._start = true;
+ },
+ week:function(code, dates) {
+ code.push(Math.max(1, els["week_count"].value));
+ code.push("");
+ code.push("");
+ var t = [];
+ var col = els["week_day"];
+ var day = dates.start.getDay();
+ var start_exists = false;
+
+ for (var i = 0; i < col.length; i++){
+ if (col[i].checked) {
+ t.push(col[i].value);
+ start_exists = start_exists || col[i].value == day;
+ }
+ }
+ if (!t.length){
+ t.push(day);
+ start_exists = true;
+ }
+ t.sort();
+
+
+ if (!scheduler.config.repeat_precise){
+ dates.start = scheduler.date.week_start(dates.start);
+ dates._start = true;
+ } else if (!start_exists){
+ scheduler.transpose_day_week(dates.start, t, 1, 7);
+ dates._start = true;
+ }
+
+ code.push(t.join(","));
+ },
+ day:function(code) {
+ if (get_radio_value("day_type") == "d") {
+ code.push(Math.max(1, els["day_count"].value));
+ }
+ else {
+ code.push("week");
+ code.push(1);
+ code.push("");
+ code.push("");
+ code.push(scheduler.config.recurring_workdays.join(","));
+ code.splice(0, 1);
+ }
+ },
+ year:function(code, dates) {
+ if (get_radio_value("year_type") == "d") {
+ code.push("1");
+ dates.start.setMonth(0);
+ dates.start.setDate(els["year_day"].value);
+ dates.start.setMonth(els["year_month"].value);
+
+ } else {
+ code.push("1");
+ code.push(els["year_day2"].value);
+ code.push(els["year_week2"].value);
+ dates.start.setDate(1);
+ dates.start.setMonth(els["year_month2"].value);
+ }
+ dates._start = true;
+ }
+ };
+ var set_rcode = {
+ week:function(code, dates) {
+ els["week_count"].value = code[1];
+ var col = els["week_day"];
+ var t = code[4].split(",");
+ var d = {};
+ for (var i = 0; i < t.length; i++) d[t[i]] = true;
+ for (var i = 0; i < col.length; i++)
+ col[i].checked = (!!d[col[i].value]);
+ },
+ month:function(code, dates) {
+ if (code[2] === "") {
+ els["month_type"][0].checked = true;
+ els["month_count"].value = code[1];
+ els["month_day"].value = dates.start.getDate();
+ } else {
+ els["month_type"][1].checked = true;
+ els["month_count2"].value = code[1];
+ els["month_week2"].value = code[3];
+ els["month_day2"].value = code[2];
+ }
+ },
+ day:function(code, dates) {
+ els["day_type"][0].checked = true;
+ els["day_count"].value = code[1];
+ },
+ year:function(code, dates) {
+ if (code[2] === "") {
+ els["year_type"][0].checked = true;
+ els["year_day"].value = dates.start.getDate();
+ els["year_month"].value = dates.start.getMonth();
+ } else {
+ els["year_type"][1].checked = true;
+ els["year_week2"].value = code[3];
+ els["year_day2"].value = code[2];
+ els["year_month2"].value = dates.start.getMonth();
+ }
+ }
+ };
+
+ function set_repeat_code(code, dates) {
+ var data = code.split("#");
+ code = data[0].split("_");
+ set_rcode[code[0]](code, dates);
+ var e = els["repeat"][({day:0, week:1, month:2, year:3})[code[0]]];
+ switch (data[1]) {
+ case "no":
+ els["end"][0].checked = true;
+ break;
+ case "":
+ els["end"][2].checked = true;
+
+ var end_date = dates.end;
+ if (scheduler.config.include_end_by){
+ end_date = scheduler.date.add(end_date, -1, 'day');
+ }
+
+ els["date_of_end"].value = date_str(end_date);
+ break;
+ default:
+ els["end"][1].checked = true;
+ els["occurences_count"].value = data[1];
+ break;
+ }
+
+ e.checked = true;
+ e.onclick();
+ }
+
+ scheduler.form_blocks["recurring"]._set_repeat_code = set_repeat_code;
+
+ for (var i = 0; i < top.elements.length; i++) {
+ var el = top.elements[i];
+ switch (el.name) {
+ case "repeat":
+ el.onclick = change_current_view;
+ break;
+ }
+ }
+ scheduler._lightbox._rec_init_done = true;
+ },
+ set_value:function(node, value, ev) {
+ var rf = scheduler.form_blocks["recurring"];
+ if (!scheduler._lightbox._rec_init_done)
+ rf._init_set_value(node, value, ev);
+ node.open = !ev.rec_type;
+ if (this._is_modified_occurence(ev))
+ node.blocked = true;
+ else node.blocked = false;
+
+ var ds = rf._ds;
+ ds.start = ev.start_date;
+ ds.end = ev._end_date;
+
+ rf.button_click(0, node.previousSibling.firstChild.firstChild, node, node);
+ if (value)
+ rf._set_repeat_code(value, ds);
+ },
+ get_value:function(node, ev) {
+ if (node.open) {
+ var ds = scheduler.form_blocks["recurring"]._ds;
+ var actual_dates = {};
+ this.formSection('time').getValue(actual_dates);
+ ds.start = actual_dates.start_date;
+ ev.rec_type = scheduler.form_blocks["recurring"]._get_repeat_code(ds);
+ if (ds._start) {
+ ev.start_date = new Date(ds.start);
+ ev._start_date = new Date(ds.start);
+ ds._start = false;
+ } else
+ ev._start_date = null;
+
+ ev._end_date = ds.end;
+ ev.rec_pattern = ev.rec_type.split("#")[0];
+ } else {
+ ev.rec_type = ev.rec_pattern = "";
+ ev._end_date = ev.end_date;
+ }
+ return ev.rec_type;
+ },
+ focus:function(node) {
+ },
+ button_click:function(index, el, section, cont) {
+ if (!cont.open && !cont.blocked) {
+ cont.style.height = "115px";
+ el.style.backgroundPosition = "-5px 0px";
+ el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring_open;
+ } else {
+ cont.style.height = "0px";
+ el.style.backgroundPosition = "-5px 20px";
+ el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring;
+ }
+ cont.open = !cont.open;
+
+ scheduler.setLightboxSize();
+ }
+};
+
+
+//problem may occur if we will have two repeating events in the same moment of time
+scheduler._rec_markers = {};
+scheduler._rec_markers_pull = {};
+scheduler._add_rec_marker = function(ev, time) {
+ ev._pid_time = time;
+ this._rec_markers[ev.id] = ev;
+ if (!this._rec_markers_pull[ev.event_pid]) this._rec_markers_pull[ev.event_pid] = {};
+ this._rec_markers_pull[ev.event_pid][time] = ev;
+};
+scheduler._get_rec_marker = function(time, id) {
+ var ch = this._rec_markers_pull[id];
+ if (ch) return ch[time];
+ return null;
+};
+scheduler._get_rec_markers = function(id) {
+ return (this._rec_markers_pull[id] || []);
+};
+scheduler._rec_temp = [];
+(function() {
+ var old_add_event = scheduler.addEvent;
+ scheduler.addEvent = function(start_date, end_date, text, id, extra_data) {
+ var ev_id = old_add_event.apply(this, arguments);
+
+ if (ev_id) {
+ var ev = scheduler.getEvent(ev_id);
+ if (this._is_modified_occurence(ev))
+ scheduler._add_rec_marker(ev, ev.event_length * 1000);
+ if (ev.rec_type)
+ ev.rec_pattern = ev.rec_type.split("#")[0];
+ }
+ return ev_id;
+ };
+})();
+scheduler.attachEvent("onEventIdChange", function(id, new_id) {
+ if (this._ignore_call) return;
+ this._ignore_call = true;
+
+ if(scheduler._rec_markers[id]){
+ //important for for correct work of scheduler.getEvents(from, to) and collision detection
+ scheduler._rec_markers[new_id] = scheduler._rec_markers[id];
+ delete scheduler._rec_markers[id];
+ }
+
+ for (var i = 0; i < this._rec_temp.length; i++) {
+ var tev = this._rec_temp[i];
+ if (tev.event_pid == id) {
+ tev.event_pid = new_id;
+ this.changeEventId(tev.id, new_id + "#" + tev.id.split("#")[1]);
+ }
+ }
+
+ delete this._ignore_call;
+});
+scheduler.attachEvent("onConfirmedBeforeEventDelete", function(id) {
+ var ev = this.getEvent(id);
+ if (this._is_virtual_event(id) || (this._is_modified_occurence(ev) && ev.rec_type && ev.rec_type != 'none')) {
+ id = id.split("#");
+ var nid = this.uid();
+ var tid = (id[1]) ? id[1] : (ev._pid_time / 1000);
+
+ var nev = this._copy_event(ev);
+ nev.id = nid;
+ nev.event_pid = ev.event_pid || id[0];
+ var timestamp = tid;
+ nev.event_length = timestamp;
+ nev.rec_type = nev.rec_pattern = "none";
+ this.addEvent(nev);
+
+ this._add_rec_marker(nev, timestamp * 1000);
+ } else {
+ if (ev.rec_type && this._lightbox_id)
+ this._roll_back_dates(ev);
+ var sub = this._get_rec_markers(id);
+ for (var i in sub) {
+ if (sub.hasOwnProperty(i)) {
+ id = sub[i].id;
+ if (this.getEvent(id))
+ this.deleteEvent(id, true);
+ }
+ }
+ }
+ return true;
+});
+scheduler.attachEvent("onEventDeleted", function(id, ev){
+ if(!this._is_virtual_event(id) && this._is_modified_occurence(ev)){
+ if(!scheduler._events[id]){
+ ev.rec_type = ev.rec_pattern = "none";
+ this.setEvent(id, ev);
+ }
+ }
+});
+scheduler.attachEvent("onEventChanged", function(id) {
+ if (this._loading) return true;
+
+ var ev = this.getEvent(id);
+
+ if (this._is_virtual_event(id)) {
+ var id = id.split("#");
+ var nid = this.uid();
+ this._not_render = true;
+
+ var nev = this._copy_event(ev);
+ nev.id = nid;
+ nev.event_pid = id[0];
+ var timestamp = id[1];
+ nev.event_length = timestamp;
+ nev.rec_type = nev.rec_pattern = "";
+
+ this._add_rec_marker(nev, timestamp * 1000);
+ this.addEvent(nev);
+
+ this._not_render = false;
+
+ } else {
+ if (ev.rec_type && this._lightbox_id)
+ this._roll_back_dates(ev);
+ var sub = this._get_rec_markers(id);
+ for (var i in sub) {
+ if (sub.hasOwnProperty(i)) {
+ delete this._rec_markers[sub[i].id];
+ this.deleteEvent(sub[i].id, true);
+ }
+ }
+ delete this._rec_markers_pull[id];
+
+ // it's possible that after editing event is no longer exists, in such case we need to remove _select_id flag
+ var isEventFound = false;
+ for (var k = 0; k < this._rendered.length; k++) {
+ if (this._rendered[k].getAttribute('event_id') == id)
+ isEventFound = true;
+ }
+ if (!isEventFound)
+ this._select_id = null;
+ }
+ return true;
+});
+scheduler.attachEvent("onEventAdded", function(id) {
+ if (!this._loading) {
+ var ev = this.getEvent(id);
+ if (ev.rec_type && !ev.event_length)
+ this._roll_back_dates(ev);
+ }
+ return true;
+});
+scheduler.attachEvent("onEventSave", function(id, data, is_new_event) {
+ var ev = this.getEvent(id);
+ if (!ev.rec_type && data.rec_type && !this._is_virtual_event(id))
+ this._select_id = null;
+ return true;
+});
+scheduler.attachEvent("onEventCreated", function(id) {
+ var ev = this.getEvent(id);
+ if (!ev.rec_type)
+ ev.rec_type = ev.rec_pattern = ev.event_length = ev.event_pid = "";
+ return true;
+});
+scheduler.attachEvent("onEventCancel", function(id) {
+ var ev = this.getEvent(id);
+ if (ev.rec_type) {
+ this._roll_back_dates(ev);
+ // a bit expensive, but we need to be sure that event re-rendered, because view can be corrupted by resize , during edit process
+ this.render_view_data();
+ }
+});
+scheduler._roll_back_dates = function(ev) {
+ ev.event_length = (ev.end_date.valueOf() - ev.start_date.valueOf()) / 1000;
+ ev.end_date = ev._end_date;
+ if (ev._start_date) {
+ ev.start_date.setMonth(0);
+ ev.start_date.setDate(ev._start_date.getDate());
+ ev.start_date.setMonth(ev._start_date.getMonth());
+ ev.start_date.setFullYear(ev._start_date.getFullYear());
+
+ }
+};
+
+scheduler._is_virtual_event = function(id){
+ return id.toString().indexOf("#") != -1;
+};
+scheduler._is_modified_occurence = function(ev){
+ return (ev.event_pid && ev.event_pid != "0");
+};
+
+scheduler._validId = function(id) {
+ return !this._is_virtual_event(id);
+};
+
+scheduler.showLightbox_rec = scheduler.showLightbox;
+scheduler.showLightbox = function(id) {
+ var locale = this.locale;
+ var c = scheduler.config.lightbox_recurring;
+ var ev = this.getEvent(id);
+ var pid = ev.event_pid;
+ var isVirtual = this._is_virtual_event(id);
+ if (isVirtual)
+ pid = id.split("#")[0];
+
+ // show series
+ var showSeries = function(id) {
+ var event = scheduler.getEvent(id);
+ event._end_date = event.end_date;
+ event.end_date = new Date(event.start_date.valueOf() + event.event_length * 1000);
+ return scheduler.showLightbox_rec(id); // editing series
+ };
+
+ if ( (pid || pid*1 === 0) && ev.rec_type) {
+ // direct API call on series id
+ return showSeries(id);
+ }
+ if ( !pid || pid === '0' || ( (!locale.labels.confirm_recurring || c == 'instance') || (c == 'series' && !isVirtual)) ) {
+ // editing instance or non recurring event
+ return this.showLightbox_rec(id);
+ }
+ if (c == 'ask') {
+ var that = this;
+ dhtmlx.modalbox({
+ text: locale.labels.confirm_recurring,
+ title: locale.labels.title_confirm_recurring,
+ width: "500px",
+ position: "middle",
+ buttons:[locale.labels.button_edit_series, locale.labels.button_edit_occurrence, locale.labels.icon_cancel],
+ callback: function(index) {
+ switch(+index) {
+ case 0:
+ return showSeries(pid);
+ case 1:
+ return that.showLightbox_rec(id);
+ case 2:
+ return;
+ }
+ }
+ });
+ } else {
+ showSeries(pid);
+ }
+};
+
+
+scheduler.get_visible_events_rec = scheduler.get_visible_events;
+scheduler.get_visible_events = function(only_timed) {
+ for (var i = 0; i < this._rec_temp.length; i++)
+ delete this._events[this._rec_temp[i].id];
+ this._rec_temp = [];
+
+ var stack = this.get_visible_events_rec(only_timed);
+ var out = [];
+ for (var i = 0; i < stack.length; i++) {
+ if (stack[i].rec_type) {
+ //deleted element of serie
+ if (stack[i].rec_pattern != "none")
+ this.repeat_date(stack[i], out);
+ }
+ else out.push(stack[i]);
+ }
+ return out;
+};
+
+
+(function() {
+ var old = scheduler.isOneDayEvent;
+ scheduler.isOneDayEvent = function(ev) {
+ if (ev.rec_type) return true;
+ return old.call(this, ev);
+ };
+ var old_update_event = scheduler.updateEvent;
+ scheduler.updateEvent = function(id) {
+ var ev = scheduler.getEvent(id);
+ if(ev && ev.rec_type){
+ //rec_type can be changed without the lightbox,
+ // make sure rec_pattern updated as well
+ ev.rec_pattern = (ev.rec_type || "").split("#")[0];
+ }
+ if (ev && ev.rec_type && !this._is_virtual_event(id)) {
+ scheduler.update_view();
+ } else {
+ old_update_event.call(this, id);
+ }
+ };
+})();
+
+scheduler.transponse_size = {
+ day:1, week:7, month:1, year:12
+};
+scheduler.date.day_week = function(sd, day, week) {
+ sd.setDate(1);
+ week = (week - 1) * 7;
+ var cday = sd.getDay();
+ var nday = day * 1 + week - cday + 1;
+ sd.setDate(nday <= week ? (nday + 7) : nday);
+};
+scheduler.transpose_day_week = function(sd, list, cor, size, cor2) {
+ var cday = (sd.getDay() || (scheduler.config.start_on_monday ? 7 : 0)) - cor;
+ for (var i = 0; i < list.length; i++) {
+ if (list[i] > cday)
+ return sd.setDate(sd.getDate() + list[i] * 1 - cday - (size ? cor : cor2));
+ }
+ this.transpose_day_week(sd, list, cor + size, null, cor);
+};
+scheduler.transpose_type = function(type) {
+ var f = "transpose_" + type;
+ if (!this.date[f]) {
+ var str = type.split("_");
+ var day = 60 * 60 * 24 * 1000;
+ var gf = "add_" + type;
+ var step = this.transponse_size[str[0]] * str[1];
+
+ if (str[0] == "day" || str[0] == "week") {
+ var days = null;
+ if (str[4]) {
+ days = str[4].split(",");
+ if (scheduler.config.start_on_monday) {
+ for (var i = 0; i < days.length; i++)
+ days[i] = (days[i] * 1) || 7;
+ days.sort();
+ }
+ }
+
+ this.date[f] = function(nd, td) {
+ var delta = Math.floor((td.valueOf() - nd.valueOf()) / (day * step));
+ if (delta > 0)
+ nd.setDate(nd.getDate() + delta * step);
+ if (days)
+ scheduler.transpose_day_week(nd, days, 1, step);
+ };
+ this.date[gf] = function(sd, inc) {
+ var nd = new Date(sd.valueOf());
+ if (days) {
+ for (var count = 0; count < inc; count++)
+ scheduler.transpose_day_week(nd, days, 0, step);
+ } else
+ nd.setDate(nd.getDate() + inc * step);
+
+ return nd;
+ };
+ }
+ else if (str[0] == "month" || str[0] == "year") {
+ this.date[f] = function(nd, td) {
+ var delta = Math.ceil(((td.getFullYear() * 12 + td.getMonth() * 1) - (nd.getFullYear() * 12 + nd.getMonth() * 1)) / (step));
+ if (delta >= 0)
+ nd.setMonth(nd.getMonth() + delta * step);
+ if (str[3])
+ scheduler.date.day_week(nd, str[2], str[3]);
+ };
+ this.date[gf] = function(sd, inc) {
+ var nd = new Date(sd.valueOf());
+ nd.setMonth(nd.getMonth() + inc * step);
+ if (str[3])
+ scheduler.date.day_week(nd, str[2], str[3]);
+ return nd;
+ };
+ }
+ }
+};
+scheduler.repeat_date = function(ev, stack, non_render, from, to) {
+
+ from = from || this._min_date;
+ to = to || this._max_date;
+
+ var td = new Date(ev.start_date.valueOf());
+
+ if (!ev.rec_pattern && ev.rec_type)
+ ev.rec_pattern = ev.rec_type.split("#")[0];
+
+ this.transpose_type(ev.rec_pattern);
+ scheduler.date["transpose_" + ev.rec_pattern](td, from);
+ while (td < ev.start_date || scheduler._fix_daylight_saving_date(td,from,ev,td,new Date(td.valueOf() + ev.event_length * 1000)).valueOf() <= from.valueOf() || td.valueOf() + ev.event_length * 1000 <= from.valueOf())
+ td = this.date.add(td, 1, ev.rec_pattern);
+ while (td < to && td < ev.end_date) {
+ var timestamp = (scheduler.config.occurrence_timestamp_in_utc) ? Date.UTC(td.getFullYear(), td.getMonth(), td.getDate(), td.getHours(), td.getMinutes(), td.getSeconds()) : td.valueOf();
+ var ch = this._get_rec_marker(timestamp, ev.id);
+ if (!ch) { // unmodified element of series
+ var ted = new Date(td.valueOf() + ev.event_length * 1000);
+ var copy = this._copy_event(ev);
+ //copy._timed = ev._timed;
+ copy.text = ev.text;
+ copy.start_date = td;
+ copy.event_pid = ev.id;
+ copy.id = ev.id + "#" + Math.ceil(timestamp / 1000);
+ copy.end_date = ted;
+
+ copy.end_date = scheduler._fix_daylight_saving_date(copy.start_date, copy.end_date, ev, td, copy.end_date);
+
+ copy._timed = this.isOneDayEvent(copy);
+
+ if (!copy._timed && !this._table_view && !this.config.multi_day) return;
+ stack.push(copy);
+
+ if (!non_render) {
+ this._events[copy.id] = copy;
+ this._rec_temp.push(copy);
+ }
+
+ } else
+ if (non_render) stack.push(ch);
+
+ td = this.date.add(td, 1, ev.rec_pattern);
+ }
+};
+scheduler._fix_daylight_saving_date = function(start_date, end_date, ev, counter, default_date) {
+ var shift = start_date.getTimezoneOffset() - end_date.getTimezoneOffset();
+ if (shift) {
+ if (shift > 0) {
+ // e.g. 24h -> 23h
+ return new Date(counter.valueOf() + ev.event_length * 1000 - shift * 60 * 1000);
+ }
+ else {
+ // e.g. 24h -> 25h
+ return new Date(end_date.valueOf() - shift * 60 * 1000);
+ }
+ }
+ return new Date(default_date.valueOf());
+};
+scheduler.getRecDates = function(id, max) {
+ var ev = typeof id == "object" ? id : scheduler.getEvent(id);
+ var count = 0;
+ var result = [];
+ max = max || 100;
+
+ var td = new Date(ev.start_date.valueOf());
+ var from = new Date(td.valueOf());
+
+ if (!ev.rec_type) {
+ return [
+ { start_date: ev.start_date, end_date: ev.end_date }
+ ];
+ }
+ if (ev.rec_type == "none") {
+ return [];
+ }
+ this.transpose_type(ev.rec_pattern);
+ scheduler.date["transpose_" + ev.rec_pattern](td, from);
+
+ while (td < ev.start_date || (td.valueOf() + ev.event_length * 1000) <= from.valueOf())
+ td = this.date.add(td, 1, ev.rec_pattern);
+ while (td < ev.end_date) {
+ var ch = this._get_rec_marker(td.valueOf(), ev.id);
+ var res = true;
+ if (!ch) { // unmodified element of series
+ var sed = new Date(td);
+ var ted = new Date(td.valueOf() + ev.event_length * 1000);
+
+ ted = scheduler._fix_daylight_saving_date(sed, ted, ev, td, ted);
+
+ result.push({start_date:sed, end_date:ted});
+ } else if(ch.rec_type == "none") {
+ res = false;
+ } else {
+ result.push({ start_date: ch.start_date, end_date: ch.end_date });
+ }
+
+ td = this.date.add(td, 1, ev.rec_pattern);
+ if (res) {
+ count++;
+ if (count == max)
+ break;
+ }
+ }
+ return result;
+};
+scheduler.getEvents = function(from, to) {
+ var result = [];
+ for (var a in this._events) {
+ var ev = this._events[a];
+ if (ev && ev.start_date < to && ev.end_date > from) {
+ if (ev.rec_pattern) {
+ if (ev.rec_pattern == "none") continue;
+ var sev = [];
+ this.repeat_date(ev, sev, true, from, to);
+ for (var i = 0; i < sev.length; i++) {
+ // if event is in rec_markers then it will be checked by himself, here need to skip it
+ if (!sev[i].rec_pattern && sev[i].start_date < to && sev[i].end_date > from && !this._rec_markers[sev[i].id]) {
+ result.push(sev[i]);
+ }
+ }
+ } else if (!this._is_virtual_event(ev.id)) { // if it's virtual event we can skip it
+ result.push(ev);
+ }
+ }
+ }
+ return result;
+};
+
+scheduler.config.repeat_date = "%m.%d.%Y";
+scheduler.config.lightbox.sections = [
+ {name:"description", height:130, map_to:"text", type:"textarea" , focus:true},
+ {name:"recurring", type:"recurring", map_to:"rec_type", button:"recurring"},
+ {name:"time", height:72, type:"time", map_to:"auto"}
+];
+
+
+//drop secondary attributes
+scheduler._copy_dummy = function(ev) {
+ var start_date = new Date(this.start_date);
+ var end_date = new Date(this.end_date);
+ this.start_date = start_date;
+ this.end_date = end_date;
+ this.event_length = this.event_pid = this.rec_pattern = this.rec_type = null;
+};
+
+scheduler.config.include_end_by = false;
+scheduler.config.lightbox_recurring = 'ask'; // series, instance
+
+scheduler.attachEvent("onClearAll", function(){
+ scheduler._rec_markers = {}; //clear recurring events data
+ scheduler._rec_markers_pull = {};
+ scheduler._rec_temp = [];
+});
+
+scheduler.__recurring_template='<div class="dhx_form_repeat"> <form> <div class="dhx_repeat_left"> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="day" />Daily</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="week"/>Weekly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="month" checked />Monthly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="year" />Yearly</label> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_center"> <div style="display:none;" id="dhx_repeat_day"> <label><input class="dhx_repeat_radio" type="radio" name="day_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="day_count" value="1" />day<br /> <label><input class="dhx_repeat_radio" type="radio" name="day_type" checked value="w"/>Every workday</label> </div> <div style="display:none;" id="dhx_repeat_week"> Repeat every<input class="dhx_repeat_text" type="text" name="week_count" value="1" />week next days:<br /> <table class="dhx_repeat_days"> <tr> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="1" />Monday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="4" />Thursday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="2" />Tuesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="5" />Friday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="3" />Wednesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="6" />Saturday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="0" />Sunday</label><br /><br /> </td> </tr> </table> </div> <div id="dhx_repeat_month"> <label><input class="dhx_repeat_radio" type="radio" name="month_type" value="d"/>Repeat</label><input class="dhx_repeat_text" type="text" name="month_day" value="1" />day every<input class="dhx_repeat_text" type="text" name="month_count" value="1" />month<br /> <label><input class="dhx_repeat_radio" type="radio" name="month_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="month_week2" value="1" /><select name="month_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="0">Sunday</select>every<input class="dhx_repeat_text" type="text" name="month_count2" value="1" />month<br /> </div> <div style="display:none;" id="dhx_repeat_year"> <label><input class="dhx_repeat_radio" type="radio" name="year_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="year_day" value="1" />day<select name="year_month"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select>month<br /> <label><input class="dhx_repeat_radio" type="radio" name="year_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="year_week2" value="1" /><select name="year_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="7">Sunday</select>of<select name="year_month2"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select><br /> </div> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_right"> <label><input class="dhx_repeat_radio" type="radio" name="end" checked/>No end date</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />After</label><input class="dhx_repeat_text" type="text" name="occurences_count" value="1" />occurrences<br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />End by</label><input class="dhx_repeat_date" type="text" name="date_of_end" value="'+scheduler.config.repeat_date_of_end+'" /><br /> </div> </form> </div> <div style="clear:both"> </div>';
diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js.map b/codebase/sources/ext/dhtmlxscheduler_recurring.js.map
new file mode 100644
index 0000000..d69ba82
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_recurring.js.map","sources":["dhtmlxscheduler_recurring.js"],"names":["scheduler","config","occurrence_timestamp_in_utc","recurring_workdays","form_blocks","render","__recurring_template","_ds","_init_set_value","node","value","ev","register_els","inps","i","length","inp","type","els","name","push","get_radio_value","col","checked","change_current_view","$","style","display","this","get_repeat_code","dates","code","get_rcode","repeat","end","Date","str_date","transpose_type","join","Math","max","transp","toString","indexOf","start_on_monday","date","add","start","set_repeat_code","data","split","set_rcode","e","day","week","month","year","end_date","include_end_by","date_str","onclick","start_date","_end_date","str_date_format","str_to_date","repeat_date","date_to_str","top","getElementsByTagName","repeat_date_of_end","formatter","_currentDate","a","document","getElementById","_get_repeat_code","setDate","repeat_precise","_start","t","getDay","start_exists","sort","transpose_day_week","week_start","splice","setMonth","d","getDate","getMonth","_set_repeat_code","elements","el","_lightbox","_rec_init_done","set_value","rf","open","rec_type","blocked","_is_modified_occurence","ds","button_click","previousSibling","firstChild","get_value","actual_dates","formSection","getValue","_start_date","rec_pattern","focus","index","section","cont","height","backgroundPosition","nextSibling","innerHTML","locale","labels","button_recurring","button_recurring_open","setLightboxSize","_rec_markers","_rec_markers_pull","_add_rec_marker","time","_pid_time","id","event_pid","_get_rec_marker","ch","_get_rec_markers","_rec_temp","old_add_event","addEvent","ev_id","apply","arguments","getEvent","event_length","attachEvent","new_id","_ignore_call","tev","changeEventId","_is_virtual_event","nid","uid","tid","nev","_copy_event","timestamp","_lightbox_id","_roll_back_dates","sub","hasOwnProperty","deleteEvent","_events","setEvent","_loading","_not_render","isEventFound","k","_rendered","getAttribute","_select_id","render_view_data","valueOf","setFullYear","getFullYear","_validId","showLightbox_rec","showLightbox","c","lightbox_recurring","pid","isVirtual","showSeries","event","confirm_recurring","that","dhtmlx","modalbox","text","title","title_confirm_recurring","width","position","buttons","button_edit_series","button_edit_occurrence","icon_cancel","callback","get_visible_events_rec","get_visible_events","only_timed","stack","out","old","isOneDayEvent","call","old_update_event","updateEvent","update_view","transponse_size","day_week","sd","cday","nday","list","cor","size","cor2","f","str","gf","step","days","nd","td","delta","floor","inc","count","ceil","non_render","from","to","_min_date","_max_date","_fix_daylight_saving_date","UTC","getHours","getMinutes","getSeconds","ted","copy","_timed","_table_view","multi_day","counter","default_date","shift","getTimezoneOffset","getRecDates","result","res","sed","getEvents","sev","lightbox","sections","map_to","button","_copy_dummy"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_serialize.js b/codebase/sources/ext/dhtmlxscheduler_serialize.js
new file mode 100644
index 0000000..88b70ef
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_serialize.js
@@ -0,0 +1,110 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler._get_serializable_data = function(){
+ var res = {};
+ for (var a in this._events){
+ var ev = this._events[a];
+ if (ev.id.toString().indexOf("#") == -1){
+ res[ev.id] = ev;
+ }
+ }
+ return res;
+};
+
+//redefine this method, if you want to provide a custom set of attributes for serialization
+scheduler.data_attributes=function(){
+ var attrs = [];
+ var format = scheduler.templates.xml_format;
+ var all_events = this._get_serializable_data();
+ for (var a in all_events){
+ var ev = all_events[a];
+ for (var name in ev)
+ if (name.substr(0,1) !="_")
+ attrs.push([name,((name == "start_date" || name == "end_date")?format:null)]);
+ break;
+ }
+ return attrs;
+};
+
+scheduler.toXML = function(header){
+ var xml = [];
+ var attrs = this.data_attributes();
+
+ var all_events = this._get_serializable_data();
+ for (var a in all_events){
+ var ev = all_events[a];
+
+ xml.push("<event>");
+ for (var i=0; i < attrs.length; i++)
+ xml.push("<"+attrs[i][0]+"><![CDATA["+(attrs[i][1]?attrs[i][1](ev[attrs[i][0]]):ev[attrs[i][0]])+"]]></"+attrs[i][0]+">");
+
+ xml.push("</event>");
+ }
+ return (header||"")+"<data>"+xml.join("\n")+"</data>";
+};
+
+scheduler._serialize_json_value = function(value){
+ if(value === null || typeof value === "boolean"){
+ value = "" + value;
+ }else{
+ if(!value && value !== 0){
+ value = "";
+ }
+ value = '"' + value.toString().
+ replace(/\n/g,"").
+ replace(/\\/g,"\\\\").
+ replace(/\"/g, '\\"') + '"';
+ }
+ return value;
+};
+
+scheduler.toJSON = function(){
+ var json = [], value = "";
+ var attrs = this.data_attributes();
+ var all_events = this._get_serializable_data();
+ for (var a in all_events){
+ var ev = all_events[a];
+
+ var line =[];
+ for (var i=0; i < attrs.length; i++){
+ value = (attrs[i][1]) ? attrs[i][1](ev[attrs[i][0]]) : ev[attrs[i][0]];
+
+ line.push(' "'+attrs[i][0]+'": '+ this._serialize_json_value(value));
+ }
+ json.push("{"+line.join(",")+"}");
+ }
+ return "["+json.join(",\n")+"]";
+};
+
+
+scheduler.toICal = function(header){
+ var start = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//dhtmlXScheduler//NONSGML v2.2//EN\nDESCRIPTION:";
+ var end = "END:VCALENDAR";
+ var format = scheduler.date.date_to_str("%Y%m%dT%H%i%s");
+ var full_day_format = scheduler.date.date_to_str("%Y%m%d");
+
+ var ical = [];
+ var all_events = this._get_serializable_data();
+ for (var a in all_events){
+ var ev = all_events[a];
+
+
+ ical.push("BEGIN:VEVENT");
+ if (!ev._timed || (!ev.start_date.getHours() && !ev.start_date.getMinutes()))
+ ical.push("DTSTART:"+full_day_format(ev.start_date));
+ else
+ ical.push("DTSTART:"+format(ev.start_date));
+ if (!ev._timed || (!ev.end_date.getHours() && !ev.end_date.getMinutes()))
+ ical.push("DTEND:"+full_day_format(ev.end_date));
+ else
+ ical.push("DTEND:"+format(ev.end_date));
+ ical.push("SUMMARY:"+ev.text);
+ ical.push("END:VEVENT");
+ }
+ return start+(header||"")+"\n"+ical.join("\n")+"\n"+end;
+}; \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_serialize.js.map b/codebase/sources/ext/dhtmlxscheduler_serialize.js.map
new file mode 100644
index 0000000..6ad3a60
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_serialize.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_serialize.js.map","sources":["dhtmlxscheduler_serialize.js"],"names":["scheduler","_get_serializable_data","res","a","this","_events","ev","id","toString","indexOf","data_attributes","attrs","format","templates","xml_format","all_events","name","substr","push","toXML","header","xml","i","length","join","_serialize_json_value","value","replace","toJSON","json","line","toICal","start","end","date","date_to_str","full_day_format","ical","_timed","start_date","getHours","getMinutes","end_date","text"],"mappings":"AAAAA,UAAUC,uBAAyB,WAClC,GAAIC,KACJ,KAAK,GAAIC,KAAKC,MAAKC,QAAQ,CAC1B,GAAIC,GAAKF,KAAKC,QAAQF,EACe,KAAjCG,EAAGC,GAAGC,WAAWC,QAAQ,OAC5BP,EAAII,EAAGC,IAAMD,GAGf,MAAOJ,IAIRF,UAAUU,gBAAgB,WACzB,GAAIC,MACAC,EAASZ,UAAUa,UAAUC,WAC7BC,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EACpB,KAAK,GAAIa,KAAQV,GACO,KAAnBU,EAAKC,OAAO,EAAE,IACjBN,EAAMO,MAAMF,EAAe,cAARA,GAAgC,YAARA,EAAoBJ,EAAO,MACxE,OAED,MAAOD,IAGRX,UAAUmB,MAAQ,SAASC,GAC1B,GAAIC,MACAV,EAAQP,KAAKM,kBAEbK,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EAEpBkB;EAAIH,KAAK,UACT,KAAK,GAAII,GAAE,EAAGA,EAAIX,EAAMY,OAAQD,IAC/BD,EAAIH,KAAK,IAAIP,EAAMW,GAAG,GAAG,cAAcX,EAAMW,GAAG,GAAGX,EAAMW,GAAG,GAAGhB,EAAGK,EAAMW,GAAG,KAAKhB,EAAGK,EAAMW,GAAG,KAAK,QAAQX,EAAMW,GAAG,GAAG,IAEtHD,GAAIH,KAAK,YAEV,OAAQE,GAAQ,IAAI,SAASC,EAAIG,KAAK,MAAM,WAG7CxB,UAAUyB,sBAAwB,SAASC,GAY1C,MAXa,QAAVA,GAAmC,iBAAVA,GAC3BA,EAAQ,GAAKA,GAETA,GAAmB,IAAVA,IACZA,EAAQ,IAETA,EAAQ,IAAMA,EAAMlB,WACnBmB,QAAQ,MAAM,IACdA,QAAQ,MAAM,QACdA,QAAQ,MAAO,OAAS,KAEnBD,GAGR1B,UAAU4B,OAAS,WAClB,GAAIC,MAAWH,EAAQ,GACnBf,EAAQP,KAAKM,kBACbK,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CAIxB,IAAK,GAHDT,GAAKS,EAAWZ,GAEhB2B,KACKR,EAAE,EAAGA,EAAIX,EAAMY,OAAQD,IAC/BI,EAASf,EAAMW,GAAG,GAAMX,EAAMW,GAAG,GAAGhB,EAAGK,EAAMW,GAAG,KAAOhB,EAAGK,EAAMW,GAAG,IAEnEQ,EAAKZ,KAAK,KAAKP,EAAMW,GAAG,GAAG,MAAOlB,KAAKqB,sBAAsBC,GAE9DG;EAAKX,KAAK,IAAIY,EAAKN,KAAK,KAAK,KAE9B,MAAO,IAAIK,EAAKL,KAAK,OAAO,KAI7BxB,UAAU+B,OAAS,SAASX,GAC3B,GAAIY,GAAQ,0FACRC,EAAM,gBACNrB,EAASZ,UAAUkC,KAAKC,YAAY,iBACpCC,EAAkBpC,UAAUkC,KAAKC,YAAY,UAE7CE,KACAtB,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EAGpBkC,GAAKnB,KAAK,gBAITmB,EAAKnB,KAHDZ,EAAGgC,SAAYhC,EAAGiC,WAAWC,YAAelC,EAAGiC,WAAWE,cAGpD,WAAW7B,EAAON,EAAGiC,YAFrB,WAAWH,EAAgB9B,EAAGiC,aAMxCF,EAAKnB,KAHDZ,EAAGgC,SAAYhC,EAAGoC,SAASF,YAAelC,EAAGoC,SAASD,cAGhD,SAAS7B,EAAON,EAAGoC,UAFnB,SAASN,EAAgB9B,EAAGoC,WAGvCL,EAAKnB,KAAK,WAAWZ,EAAGqC,MACxBN,EAAKnB,KAAK;CAEX,MAAOc,IAAOZ,GAAQ,IAAI,KAAKiB,EAAKb,KAAK,MAAM,KAAKS"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_timeline.js b/codebase/sources/ext/dhtmlxscheduler_timeline.js
new file mode 100644
index 0000000..2f60f9f
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_timeline.js
@@ -0,0 +1,1277 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler._temp_matrix_scope = function(){
+
+
+
+scheduler.matrix = {};
+scheduler._merge=function(a,b){
+ for (var c in b)
+ if (typeof a[c] == "undefined")
+ a[c]=b[c];
+};
+scheduler.createTimelineView=function(obj){
+ scheduler._skin_init();
+
+ scheduler._merge(obj,{
+ section_autoheight: true,
+ name:"matrix",
+ x:"time",
+ y:"time",
+ x_step:1,
+ x_unit:"hour",
+ y_unit:"day",
+ y_step:1,
+ x_start:0,
+ x_size:24,
+ y_start:0,
+ y_size: 7,
+ render:"cell",
+ dx:200,
+ dy:50,
+ event_dy: scheduler.xy.bar_height-5,
+ event_min_dy: scheduler.xy.bar_height-5,
+ resize_events: true,
+ fit_events: true,
+ show_unassigned: false,
+ second_scale: false,
+ round_position: false,
+ _logic: function(render_name, y_unit, timeline) {
+ var res = {};
+ if(scheduler.checkEvent("onBeforeSectionRender")) {
+ res = scheduler.callEvent("onBeforeSectionRender", [render_name, y_unit, timeline]);
+ }
+ return res;
+ }
+ });
+ obj._original_x_start = obj.x_start;
+
+ //first and last hours are applied only to day based timeline
+ if (obj.x_unit != "day") obj.first_hour = obj.last_hour = 0;
+ //correction for first and last hour
+ obj._start_correction = obj.first_hour?obj.first_hour*60*60*1000:0;
+ obj._end_correction = obj.last_hour?(24-obj.last_hour)*60*60*1000:0;
+
+ if (scheduler.checkEvent("onTimelineCreated")) {
+ scheduler.callEvent("onTimelineCreated", [obj]);
+ }
+
+ var old = scheduler.render_data;
+ scheduler.render_data = function(evs, mode) {
+ if (this._mode == obj.name) {
+ //repaint single event, precision is not necessary
+ if (mode && !obj.show_unassigned && obj.render != "cell") {
+ for (var i = 0; i < evs.length; i++) {
+ this.clear_event(evs[i]);
+ this.render_timeline_event.call(this.matrix[this._mode], evs[i], true);
+ }
+ } else {
+ scheduler._renderMatrix.call(obj, true, true);
+ }
+ } else
+ return old.apply(this, arguments);
+ };
+
+ scheduler.matrix[obj.name]=obj;
+ scheduler.templates[obj.name+"_cell_value"] = function(ar){ return ar?ar.length:""; };
+ scheduler.templates[obj.name+"_cell_class"] = function(arr){ return ""; };
+ scheduler.templates[obj.name+"_scalex_class"] = function(date){ return ""; };
+ scheduler.templates[obj.name+"_second_scalex_class"] = function(date){ return ""; };
+
+ scheduler.templates[obj.name+"_scaley_class"] = function(section_id, section_label, section_options){ return ""; };
+ scheduler.templates[obj.name+"_scale_label"] = function(section_id, section_label, section_options){ return section_label; };
+
+ scheduler.templates[obj.name+"_tooltip"] = function(a,b,e){ return e.text; };
+ scheduler.templates[obj.name+"_date"] = function(datea, dateb){
+ if ( (datea.getDay()==dateb.getDay() && dateb-datea < (24*60*60*1000)) ||
+ +datea == +scheduler.date.date_part(new Date(dateb)) ||
+ (+scheduler.date.add(datea, 1, "day") == +dateb && dateb.getHours() === 0 && dateb.getMinutes() === 0) )
+ return scheduler.templates.day_date(datea);
+ if ( (datea.getDay() != dateb.getDay() && dateb-datea < (24*60*60*1000)) ) {
+ return scheduler.templates.day_date(datea)+" &ndash; "+scheduler.templates.day_date(dateb);
+ }
+ return scheduler.templates.week_date(datea, dateb);
+ };
+
+ scheduler.templates[obj.name+"_scale_date"] = scheduler.date.date_to_str(obj.x_date||scheduler.config.hour_date);
+ scheduler.templates[obj.name+"_second_scale_date"] = scheduler.date.date_to_str((obj.second_scale && obj.second_scale.x_date)?obj.second_scale.x_date:scheduler.config.hour_date);
+
+ scheduler.date["add_" + obj.name] = function(date, step, c) {
+ var resulting_date = scheduler.date.add(date, (obj.x_length || obj.x_size) * step * obj.x_step, obj.x_unit);
+ if (obj.x_unit == "minute" || obj.x_unit == "hour") {
+ var size = (obj.x_length || obj.x_size);
+ var converted_step = (obj.x_unit == "hour") ? obj.x_step*60 : obj.x_step;
+ if((converted_step * size) % (24 * 60)){
+ //if scroll hours within the day
+ if ( +scheduler.date.date_part(new Date(date)) == +scheduler.date.date_part(new Date(resulting_date )) ) {
+ obj.x_start += step*size;
+ } else {
+ // total steps starting from 0
+ var total_steps = ( (24 * 60) / (size * converted_step) ) - 1;
+ var steps_offset = Math.round(total_steps * size);
+
+ if (step > 0) {
+ obj.x_start = obj.x_start - steps_offset;
+ } else {
+ obj.x_start = steps_offset + obj.x_start;
+ }
+ }
+ }
+ }
+ return resulting_date;
+ };
+ scheduler.date[obj.name+"_start"] = function(date) {
+ var func = scheduler.date[obj.x_unit+"_start"] || scheduler.date.day_start;
+ var start_date = func.call(scheduler.date, date);
+ start_date = scheduler.date.add(start_date, obj.x_step*obj.x_start, obj.x_unit);
+ return start_date;
+ };
+
+
+ scheduler.callEvent("onOptionsLoad",[obj]);
+
+ //init custom wrappers
+ scheduler[obj.name+"_view"]=function(){
+ scheduler._renderMatrix.apply(obj, arguments);
+ };
+
+ //enable drag for non-cell modes
+ var temp_date = new Date();
+ var step_diff = (scheduler.date.add(temp_date, obj.x_step, obj.x_unit).valueOf() - temp_date.valueOf()); // "minute" + step in ms
+ scheduler["mouse_"+obj.name]=function(pos){ //mouse_coord handler
+ //get event object
+ var ev = this._drag_event;
+ if (this._drag_id){
+ ev = this.getEvent(this._drag_id);
+ this._drag_event._dhx_changed = true;
+ }
+
+ pos.x-=obj.dx;
+ var summ = 0, xind = 0;
+ var ratio,
+ column_width;
+ for (xind; xind <= this._cols.length-1; xind++) {
+
+ column_width = this._cols[xind];
+ summ += column_width;
+ if (summ>pos.x){ //index of section
+ ratio = (pos.x-(summ-column_width))/column_width;
+ ratio = (ratio < 0) ? 0 : ratio;
+ break;
+ }
+ }
+
+ if(obj.round_position){
+ // in case of click, mouse position will be always rounded to start date of the cell
+ // when dragging - position can be rounded to the start date of the next column, in order to improve the usability
+ // edge = 1 - always return start date of current cell
+ // 0.5 - round to next cell if mouse in the right half of cell
+ var edge = 1;
+ if(scheduler.getState().drag_mode && scheduler.getState().drag_mode != "move"){
+ edge = 0.5;//rounding for resize
+ }
+ if(ratio >= edge){
+ xind++;
+ }
+ ratio = 0;
+ }
+
+ //border cases
+ if (xind === 0 && this._ignores[0]) {
+ xind = 1; ratio = 0;
+ while (this._ignores[xind]) xind++;
+ } else if ( xind == this._cols.length && this._ignores[xind-1]) {
+ xind = this._cols.length-1; ratio = 0;
+ while (this._ignores[xind]) xind--;
+ xind++;
+ }
+
+
+ pos.x = 0;
+ pos.force_redraw = true;
+ pos.custom = true;
+
+ var end_date;
+ // if our event is at the end of the view
+ if(xind >= obj._trace_x.length) {
+ end_date = scheduler.date.add(obj._trace_x[obj._trace_x.length-1], obj.x_step, obj.x_unit);
+ if (obj._end_correction)
+ end_date = new Date(end_date-obj._end_correction);
+ } else {
+ var timestamp_diff = ratio * column_width * obj._step + obj._start_correction;
+ end_date = new Date(+obj._trace_x[xind]+timestamp_diff);
+ }
+
+ // as we can simply be calling _locate_cell_timeline
+ if (this._drag_mode == "move" && this._drag_id && this._drag_event) {
+ var ev = this.getEvent(this._drag_id);
+ var drag_event = this._drag_event;
+
+ pos._ignores = (this._ignores_detected || obj._start_correction || obj._end_correction);
+ if (!drag_event._move_delta) {
+ drag_event._move_delta = (ev.start_date-end_date)/60000;
+ if (this.config.preserve_length && pos._ignores){
+ drag_event._move_delta = this._get_real_event_length(ev.start_date,end_date, obj);
+ drag_event._event_length = this._get_real_event_length(ev.start_date,ev.end_date, obj);
+ }
+ }
+
+
+
+
+ //preserve visible size of event
+ if (this.config.preserve_length && pos._ignores){
+ var ev_length = drag_event._event_length;//this._get_real_event_length(ev.start_date, ev.end_date, obj);
+ var current_back_shift = this._get_fictional_event_length(end_date, drag_event._move_delta, obj, true);
+ end_date = new Date(end_date - current_back_shift);
+ } else {
+ // converting basically to start_date
+ end_date = scheduler.date.add(end_date, drag_event._move_delta, "minute");
+ }
+ }
+
+ if (this._drag_mode == "resize" && ev){
+ if(this._drag_from_start && +end_date> +ev.end_date){
+ this._drag_from_start = false;
+ }else if(!this._drag_from_start && +end_date < +ev.start_date){
+ this._drag_from_start = true;
+ }
+ pos.resize_from_start = this._drag_from_start;
+ }
+
+ if (obj.round_position) {
+ switch(this._drag_mode) {
+ case "move":
+ if (!this.config.preserve_length){
+ end_date = get_rounded_date.call(obj, end_date, false);
+ // to preserve original start and end dates
+ if(obj.x_unit == "day")//only make sense for whole-day cells
+ pos.custom = false;
+ }
+ break;
+ case "resize":
+ if(this._drag_event){
+ // will save and use resize position only once
+ if (this._drag_event._resize_from_start === null || this._drag_event._resize_from_start === undefined) {
+ this._drag_event._resize_from_start = pos.resize_from_start;
+ }
+ pos.resize_from_start = this._drag_event._resize_from_start;
+ end_date = get_rounded_date.call(obj, end_date, !this._drag_event._resize_from_start);
+ }
+ break;
+ }
+ }
+
+ this._resolve_timeline_section(obj, pos);
+ if(pos.section){
+ // update draggable event with current section
+ this._update_timeline_section({pos:pos, event:this.getEvent(this._drag_id), view:obj});
+ }
+ pos.y = Math.round((end_date-this._min_date)/(1000*60*this.config.time_step));
+ pos.shift = this.config.time_step; //step_diff;
+
+
+ return pos;
+ };
+};
+
+scheduler._get_timeline_event_height = function(ev, config){
+ var section = ev[config.y_property]; // section id
+ var event_height = config.event_dy;
+ if (config.event_dy == "full") {
+ if (config.section_autoheight) {
+ event_height = config._section_height[section] - 6;
+ } else {
+ event_height = config.dy - 3;
+ }
+ }
+
+ if (config.resize_events) {
+ event_height = Math.max(Math.floor(event_height / ev._count), config.event_min_dy);
+ }
+ return event_height;
+};
+scheduler._get_timeline_event_y = function(order, event_height){
+ var sorder = order;
+ var y = 2+sorder*event_height+(sorder?(sorder*2):0); // original top + number_of_events * event_dy + default event top/bottom borders
+ if (scheduler.config.cascade_event_display) {
+ y =2+sorder*scheduler.config.cascade_event_margin+(sorder?(sorder*2):0);
+ }
+ return y;
+};
+
+scheduler.render_timeline_event = function(ev, attach){
+ var section = ev[this.y_property]; // section id
+ if (!section)
+ return ""; // as we may await html
+
+ var sorder = ev._sorder;
+
+ var x_start = _getX(ev, false, this);
+ var x_end = _getX(ev, true, this);
+
+ var event_height = scheduler._get_timeline_event_height(ev, this);
+
+ var hb = event_height - 2;// takes into account css sizes (border/padding)
+ if (!ev._inner && this.event_dy == "full") {
+ hb=(hb+2)*(ev._count-sorder)-2;
+ }
+
+ var y = scheduler._get_timeline_event_y(ev._sorder, event_height);
+
+ var section_height = event_height+y+2;
+ if(!this._events_height[section] || (this._events_height[section] < section_height)){
+ this._events_height[section] = section_height;
+ }
+
+ var cs = scheduler.templates.event_class(ev.start_date,ev.end_date,ev);
+ cs = "dhx_cal_event_line "+(cs||"");
+
+ var bg_color = (ev.color?("background:"+ev.color+";"):"");
+ var color = (ev.textColor?("color:"+ev.textColor+";"):"");
+ var text = scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev);
+
+ var html='<div event_id="'+ev.id+'" class="'+cs+'" style="'+bg_color+''+color+'position:absolute; top:'+y+'px; height: '+hb+'px; left:'+x_start+'px; width:'+Math.max(0,x_end-x_start)+'px;'+(ev._text_style||"")+'">';
+ if (scheduler.config.drag_resize && !scheduler.config.readonly) {
+ var dhx_event_resize = 'dhx_event_resize';
+ html += ("<div class='"+dhx_event_resize+" "+dhx_event_resize+"_start' style='height: "+hb+"px;'></div><div class='"+dhx_event_resize+" "+dhx_event_resize+"_end' style='height: "+hb+"px;'></div>");
+ }
+ html += (text+'</div>');
+
+ if (!attach)
+ return html;
+ else {
+ var d = document.createElement("DIV");
+ d.innerHTML = html;
+ var ind = this.order[section];
+ var parent = scheduler._els["dhx_cal_data"][0].firstChild.rows[ind].cells[1].firstChild;
+
+ scheduler._rendered.push(d.firstChild);
+ parent.appendChild(d.firstChild);
+ }
+};
+function trace_events(){
+ //minimize event set
+ var evs = scheduler.get_visible_events();
+ var matrix =[];
+ for (var i=0; i < this.y_unit.length; i++)
+ matrix[i]=[];
+
+ //next code defines row for undefined key
+ //most possible it is an artifact of incorrect configuration
+ if (!matrix[y])
+ matrix[y]=[];
+
+ for (var i=0; i < evs.length; i++) {
+ var y = this.order[evs[i][this.y_property]];
+ var x = 0;
+ while (this._trace_x[x+1] && evs[i].start_date>=this._trace_x[x+1]) x++;
+ while (this._trace_x[x] && evs[i].end_date>this._trace_x[x]) {
+ if (!matrix[y][x]) matrix[y][x]=[];
+ matrix[y][x].push(evs[i]);
+ x++;
+ }
+ }
+ return matrix;
+}
+// function used to get X (both start and end) coordinates for timeline bar view
+function _getX(ev, isEndPoint, config) {
+ var x = 0;
+ var step = config._step;
+ var round_position = config.round_position;
+
+ var column_offset = 0;
+ var date = (isEndPoint) ? ev.end_date : ev.start_date;
+
+ if(date.valueOf()>scheduler._max_date.valueOf())
+ date = scheduler._max_date;
+ var delta = date - scheduler._min_date_timeline;
+
+ if (delta > 0){
+ var index = scheduler._get_date_index(config, date);
+ if (scheduler._ignores[index])
+ round_position=true;
+
+ for (var i = 0; i < index; i++) {
+ x += scheduler._cols[i];
+ }
+
+ var column_date = scheduler.date.add(scheduler._min_date_timeline, scheduler.matrix[scheduler._mode].x_step*index, scheduler.matrix[scheduler._mode].x_unit);
+ if (!round_position) {
+ delta = date - column_date;
+ if (config.first_hour || config.last_hour){
+ delta = delta - config._start_correction;
+ if (delta < 0) delta = 0;
+ column_offset = Math.round(delta/step);
+ if (column_offset > scheduler._cols[index])
+ column_offset = scheduler._cols[index];
+ } else {
+ column_offset = Math.round(delta/step);
+ }
+ } else {
+ if (+date > +column_date && isEndPoint) {
+ column_offset = scheduler._cols[index];
+ }
+ }
+ }
+ if (isEndPoint) {
+ // special handling for "round" dates which match columns and usual ones
+ if (delta !== 0 && !round_position) {
+ x += column_offset-12;
+ } else {
+ x += column_offset-14;
+ }
+ } else {
+ x += column_offset+1;
+ }
+ return x;
+}
+function get_rounded_date(date, isEndDate) {
+ var index = scheduler._get_date_index(this, date);
+ var rounded_date = this._trace_x[index];
+ if (isEndDate && (+date != +this._trace_x[index])) {
+ rounded_date = (this._trace_x[index+1]) ? this._trace_x[index+1] : scheduler.date.add(this._trace_x[index], this.x_step, this.x_unit);
+ }
+ return new Date(rounded_date);
+}
+function get_events_html(evs) {
+ var html = "";
+ if (evs && this.render != "cell"){
+ evs.sort(this.sort || function(a,b){
+ if(a.start_date.valueOf()==b.start_date.valueOf())
+ return a.id>b.id?1:-1;
+ return a.start_date>b.start_date?1:-1;
+ });
+ var stack=[];
+ var evs_length = evs.length;
+ // prepare events for render
+ for (var j=0; j<evs_length; j++){
+ var ev = evs[j];
+ ev._inner = false;
+
+ var ev_start_date = (this.round_position) ? get_rounded_date.apply(this, [ev.start_date, false]) : ev.start_date;
+ var ev_end_date = (this.round_position) ? get_rounded_date.apply(this, [ev.end_date, true]) : ev.end_date;
+
+ // cutting stack from the last -> first event side
+ while (stack.length) {
+ var stack_ev = stack[stack.length-1];
+ if (stack_ev.end_date.valueOf() <= ev_start_date.valueOf()) {
+ stack.splice(stack.length-1,1);
+ } else {
+ break;
+ }
+ }
+
+ // cutting stack from the first -> last event side
+ var sorderSet = false;
+ for(var p=0; p<stack.length; p++){
+ var t_ev = stack[p];
+ if(t_ev.end_date.valueOf() <= ev_start_date.valueOf()){
+ sorderSet = true;
+ ev._sorder=t_ev._sorder;
+ stack.splice(p,1);
+ ev._inner=true;
+ break;
+ }
+ }
+
+
+ if (stack.length)
+ stack[stack.length-1]._inner=true;
+
+
+ if (!sorderSet) {
+ if (stack.length) {
+ if (stack.length <= stack[stack.length - 1]._sorder) {
+ if (!stack[stack.length - 1]._sorder)
+ ev._sorder = 0;
+ else
+ for (var h = 0; h < stack.length; h++) {
+ var _is_sorder = false;
+ for (var t = 0; t < stack.length; t++) {
+ if (stack[t]._sorder == h) {
+ _is_sorder = true;
+ break;
+ }
+ }
+ if (!_is_sorder) {
+ ev._sorder = h;
+ break;
+ }
+ }
+ ev._inner = true;
+ }
+ else {
+ var _max_sorder = stack[0]._sorder;
+ for (var w = 1; w < stack.length; w++)
+ if (stack[w]._sorder > _max_sorder)
+ _max_sorder = stack[w]._sorder;
+ ev._sorder = _max_sorder + 1;
+ ev._inner = false;
+ }
+ }
+ else
+ ev._sorder = 0;
+ }
+
+ stack.push(ev);
+
+ if (stack.length>(stack.max_count||0)) {
+ stack.max_count=stack.length;
+ ev._count=stack.length;
+ }
+ else {
+ ev._count=(ev._count)?ev._count:1;
+ }
+ }
+ // fix _count for every event
+ for (var m=0; m < evs.length; m++) {
+ evs[m]._count = stack.max_count;
+ }
+ // render events
+ for (var v=0; v<evs_length; v++) {
+ html+=scheduler.render_timeline_event.call(this, evs[v], false);
+ }
+ }
+ return html;
+}
+
+
+function y_scale(d) {
+ var html = "<table style='table-layout:fixed;' cellspacing='0' cellpadding='0'>";
+ var evs=[];
+ if(scheduler._load_mode)
+ scheduler._load();
+ if (this.render == "cell")
+ evs = trace_events.call(this);
+ else {
+ var tevs = scheduler.get_visible_events();
+ var order = this.order;
+
+ for (var j = 0; j < tevs.length; j++) {
+ var tev = tevs[j];
+ var tev_section = tev[this.y_property];
+ var index = this.order[ tev_section ];
+
+ if (this.show_unassigned && !tev_section) {
+ for (var key in order) {
+ if (order.hasOwnProperty(key)) {
+ index = order[key];
+ if (!evs[index]) evs[index] = [];
+ var clone = scheduler._lame_copy({}, tev);
+ clone[this.y_property] = key;
+ evs[index].push(clone);
+ }
+ }
+ } else {
+ // required as we could have index of not displayed section or "undefined"
+ if (!evs[index]) evs[index] = [];
+ evs[index].push(tev);
+ }
+ }
+ }
+
+ var summ = 0;
+ for (var i=0; i < scheduler._cols.length; i++)
+ summ+=scheduler._cols[i];
+
+ var step = new Date();
+ var realcount = scheduler._cols.length-scheduler._ignores_detected;
+ step = ((scheduler.date.add(step, this.x_step*realcount, this.x_unit)-step)-(this._start_correction + this._end_correction)*realcount)/summ;
+ this._step = step;
+ this._summ = summ;
+
+ var heights = scheduler._colsS.heights=[];
+
+ this._events_height = {};
+ this._section_height = {};
+ for (var i=0; i<this.y_unit.length; i++){
+
+ var stats = this._logic(this.render, this.y_unit[i], this); // obj with custom style
+
+ scheduler._merge(stats, {
+ height: this.dy
+ });
+
+ //autosize height, if we have a free space
+ if(this.section_autoheight) {
+ if (this.y_unit.length * stats.height < d.offsetHeight) {
+ stats.height = Math.max(stats.height, Math.floor((d.offsetHeight - 1) / this.y_unit.length));
+ }
+ this._section_height[this.y_unit[i].key] = stats.height;
+ }
+
+ scheduler._merge(stats, {
+ //section 1
+ tr_className: "",
+ style_height: "height:"+stats.height+"px;",
+ style_width: "width:"+(this.dx-1)+"px;",
+ td_className: "dhx_matrix_scell"+((scheduler.templates[this.name+"_scaley_class"](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]))?" "+scheduler.templates[this.name+"_scaley_class"](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]):''),
+ td_content: scheduler.templates[this.name+'_scale_label'](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]),
+ //section 2
+ summ_width: "width:"+summ+"px;",
+ //section 3
+ table_className: ''
+ });
+
+ // generating events html in a temporary file, calculating their height
+ var events_html = get_events_html.call(this, evs[i]);
+
+ if(this.fit_events){
+ var rendered_height = this._events_height[this.y_unit[i].key]||0;
+ stats.height = (rendered_height>stats.height)?rendered_height:stats.height;
+ stats.style_height = "height:"+stats.height+"px;";
+ this._section_height[this.y_unit[i].key] = stats.height;
+ }
+
+ // section 1
+ html+="<tr class='"+stats.tr_className+"' style='"+stats.style_height+"'><td class='"+stats.td_className+"' style='"+stats.style_width+" height:"+(stats.height-1)+"px;'>"+stats.td_content+"</td>";
+
+ if (this.render == "cell"){
+ for (var j=0; j < scheduler._cols.length; j++) {
+ if (scheduler._ignores[j])
+ html+="<td></td>";
+ else
+ html+="<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](evs[i][j],this._trace_x[j],this.y_unit[i])+"' style='width:"+(scheduler._cols[j]-1)+"px'><div style='width:"+(scheduler._cols[j]-1)+"px'>"+scheduler.templates[this.name+"_cell_value"](evs[i][j],this._trace_x[j],this.y_unit[i])+"</div></td>";
+ }
+ } else {
+ //section 2
+ html+="<td><div style='"+stats.summ_width+" "+stats.style_height+" position:relative;' class='dhx_matrix_line'>";
+
+ // adding events
+ html += events_html;
+
+ //section 3
+ html+="<table class='"+stats.table_className+"' cellpadding='0' cellspacing='0' style='"+stats.summ_width+" "+stats.style_height+"' >";
+ for (var j=0; j < scheduler._cols.length; j++){
+ if (scheduler._ignores[j])
+ html+="<td></td>";
+ else
+ html+="<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](evs[i],this._trace_x[j],this.y_unit[i])+"' style='width:"+(scheduler._cols[j]-1)+"px'><div style='width:"+(scheduler._cols[j]-1)+"px'></div></td>";
+ }
+ html+="</table>";
+ html+="</div></td>";
+ }
+ html+="</tr>";
+ }
+ html += "</table>";
+ this._matrix = evs;
+ //d.scrollTop = 0; //fix flickering in FF; disabled as it was impossible to create dnd event if scroll was used (window jumped to the top)
+ d.innerHTML = html;
+
+ scheduler._rendered = [];
+ var divs = scheduler._obj.getElementsByTagName("DIV");
+ for (var i=0; i < divs.length; i++)
+ if (divs[i].getAttribute("event_id"))
+ scheduler._rendered.push(divs[i]);
+
+ this._scales = {};
+ for (var i=0; i < d.firstChild.rows.length; i++) {
+ heights.push(d.firstChild.rows[i].offsetHeight);
+ var unit_key = this.y_unit[i].key;
+ var scale = this._scales[unit_key] = (scheduler._isRender('cell')) ? d.firstChild.rows[i] : d.firstChild.rows[i].childNodes[1].getElementsByTagName('div')[0];
+ scheduler.callEvent("onScaleAdd", [scale, unit_key]);
+ }
+}
+function x_scale(h){
+ var current_sh = scheduler.xy.scale_height;
+ var original_sh = this._header_resized||scheduler.xy.scale_height;
+ scheduler._cols=[]; //store for data section, each column width
+ scheduler._colsS={height:0}; // heights of the y sections
+ this._trace_x =[]; // list of dates per cells
+ var summ = scheduler._x - this.dx - scheduler.xy.scroll_width; //border delta, whole width
+ var left = [this.dx]; // left margins, initial left margin
+ var header = scheduler._els['dhx_cal_header'][0];
+ header.style.width = (left[0]+summ)+'px';
+
+ scheduler._min_date_timeline = scheduler._min_date;
+
+ var preserve = scheduler.config.preserve_scale_length;
+ var start = scheduler._min_date;
+ scheduler._process_ignores(start, this.x_size, this.x_unit, this.x_step, preserve);
+
+ var size = this.x_size + (preserve ? scheduler._ignores_detected : 0);
+ if (size != this.x_size)
+ scheduler._max_date = scheduler.date.add(scheduler._min_date, size*this.x_step, this.x_unit);
+
+ var realcount = size - scheduler._ignores_detected;
+ for (var k=0; k<size; k++){
+ // dates calculation
+ this._trace_x[k]=new Date(start);
+ start = scheduler.date.add(start, this.x_step, this.x_unit);
+
+ // position calculation
+ if (scheduler._ignores[k]){
+ scheduler._cols[k]=0;
+ realcount++;
+ } else {
+ scheduler._cols[k]=Math.floor(summ/(realcount-k));
+ }
+
+ summ -= scheduler._cols[k];
+ left[k+1] = left[k] + scheduler._cols[k];
+ }
+ h.innerHTML = "<div></div>";
+
+ if(this.second_scale){
+ // additional calculations
+ var mode = this.second_scale.x_unit;
+ var control_dates = [this._trace_x[0]]; // first control date
+ var second_cols = []; // each column width of the secondary row
+ var second_left = [this.dx, this.dx]; // left margins of the secondary row
+ var t_index = 0; // temp index
+ for (var l = 0; l < this._trace_x.length; l++) {
+ var date = this._trace_x[l];
+ var res = is_new_interval(mode, date, control_dates[t_index]);
+
+ if(res) { // new interval
+ ++t_index; // starting new interval
+ control_dates[t_index] = date; // updating control date as we moved to the new interval
+ second_left[t_index+1] = second_left[t_index];
+ }
+ var t = t_index+1;
+ second_cols[t_index] = scheduler._cols[l] + (second_cols[t_index]||0);
+ second_left[t] += scheduler._cols[l];
+ }
+
+ h.innerHTML = "<div></div><div></div>";
+ var top = h.firstChild;
+ top.style.height = (original_sh)+'px'; // actually bottom header takes 21px
+ var bottom = h.lastChild;
+ bottom.style.position = "relative";
+
+ for (var m = 0; m < control_dates.length; m++) {
+ var tdate = control_dates[m];
+ var scs = scheduler.templates[this.name+"_second_scalex_class"](tdate);
+ var head=document.createElement("DIV"); head.className="dhx_scale_bar dhx_second_scale_bar"+((scs)?(" "+scs):"");
+ scheduler.set_xy(head,second_cols[m]-1,original_sh-3,second_left[m],0); //-1 for border, -3 = -2 padding -1 border bottom
+ head.innerHTML = scheduler.templates[this.name+"_second_scale_date"](tdate);
+ top.appendChild(head);
+ }
+ }
+
+ scheduler.xy.scale_height = original_sh; // fix for _render_x_header which uses current scale_height value
+ h = h.lastChild; // h - original scale
+ for (var i=0; i<this._trace_x.length; i++){
+ if (scheduler._ignores[i])
+ continue;
+
+ start = this._trace_x[i];
+ scheduler._render_x_header(i, left[i], start, h);
+ var cs = scheduler.templates[this.name+"_scalex_class"](start);
+ if (cs)
+ h.lastChild.className += " "+cs;
+ }
+ scheduler.xy.scale_height = current_sh; // restoring current value
+
+ var trace = this._trace_x;
+ h.onclick = function(e){
+ var pos = locate_hcell(e);
+ if (pos)
+ scheduler.callEvent("onXScaleClick",[pos.x, trace[pos.x], e||event]);
+ };
+ h.ondblclick = function(e){
+ var pos = locate_hcell(e);
+ if (pos)
+ scheduler.callEvent("onXScaleDblClick",[pos.x, trace[pos.x], e||event]);
+ };
+}
+function is_new_interval(mode, date, control_date){ // mode, date to check, control_date for which period should be checked
+ switch(mode) {
+ case "hour":
+ return ((date.getHours() != control_date.getHours()) || is_new_interval("day", date, control_date));
+ case "day":
+ return !(date.getDate() == control_date.getDate() && date.getMonth() == control_date.getMonth() && date.getFullYear() == control_date.getFullYear());
+ case "week":
+ return !(scheduler.date.getISOWeek(date) == scheduler.date.getISOWeek(control_date) && date.getFullYear() == control_date.getFullYear());
+ case "month":
+ return !(date.getMonth() == control_date.getMonth() && date.getFullYear() == control_date.getFullYear());
+ case "year":
+ return !(date.getFullYear() == control_date.getFullYear());
+ default:
+ return false; // same interval
+ }
+}
+function set_full_view(mode){
+ if (mode){
+ scheduler.set_sizes();
+ scheduler._init_matrix_tooltip();
+
+ //we need to have day-rounded scales for navigation
+ //in same time, during rendering scales may be shifted
+ var temp = scheduler._min_date;
+ x_scale.call(this,scheduler._els["dhx_cal_header"][0]);
+ y_scale.call(this,scheduler._els["dhx_cal_data"][0]);
+ scheduler._min_date = temp;
+ scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates[this.name+"_date"](scheduler._min_date, scheduler._max_date);
+ if (scheduler._mark_now) {
+ scheduler._mark_now();
+ }
+ }
+
+ // hide tooltip if it is displayed
+ hideToolTip();
+}
+
+
+function hideToolTip(){
+ if (scheduler._tooltip){
+ scheduler._tooltip.style.display = "none";
+ scheduler._tooltip.date = "";
+ }
+}
+function showToolTip(obj,pos,offset){
+ if (obj.render != "cell") return;
+ var mark = pos.x+"_"+pos.y;
+ var evs = obj._matrix[pos.y][pos.x];
+
+ if (!evs) return hideToolTip();
+
+ evs.sort(function(a,b){ return a.start_date>b.start_date?1:-1; });
+
+ if (scheduler._tooltip){
+ if (scheduler._tooltip.date == mark) return;
+ scheduler._tooltip.innerHTML="";
+ } else {
+ var t = scheduler._tooltip = document.createElement("DIV");
+ t.className = "dhx_year_tooltip";
+ document.body.appendChild(t);
+ t.onclick = scheduler._click.dhx_cal_data;
+ }
+
+ var html = "";
+
+ for (var i=0; i<evs.length; i++){
+ var bg_color = (evs[i].color?("background-color:"+evs[i].color+";"):"");
+ var color = (evs[i].textColor?("color:"+evs[i].textColor+";"):"");
+ html+="<div class='dhx_tooltip_line' event_id='"+evs[i].id+"' style='"+bg_color+""+color+"'>";
+ html+="<div class='dhx_tooltip_date'>"+(evs[i]._timed?scheduler.templates.event_date(evs[i].start_date):"")+"</div>";
+ html+="<div class='dhx_event_icon icon_details'>&nbsp;</div>";
+ html+=scheduler.templates[obj.name+"_tooltip"](evs[i].start_date, evs[i].end_date,evs[i])+"</div>";
+ }
+
+ scheduler._tooltip.style.display="";
+ scheduler._tooltip.style.top = "0px";
+
+ if (document.body.offsetWidth-offset.left-scheduler._tooltip.offsetWidth < 0)
+ scheduler._tooltip.style.left = offset.left-scheduler._tooltip.offsetWidth+"px";
+ else
+ scheduler._tooltip.style.left = offset.left+pos.src.offsetWidth+"px";
+
+ scheduler._tooltip.date = mark;
+ scheduler._tooltip.innerHTML = html;
+
+ if (document.body.offsetHeight-offset.top-scheduler._tooltip.offsetHeight < 0)
+ scheduler._tooltip.style.top= offset.top-scheduler._tooltip.offsetHeight+pos.src.offsetHeight+"px";
+ else
+ scheduler._tooltip.style.top= offset.top+"px";
+}
+
+scheduler._matrix_tooltip_handler = function(e){
+ var obj = scheduler.matrix[scheduler._mode];
+ if (!obj || obj.render != "cell")
+ return;
+ if (obj){
+ var pos = scheduler._locate_cell_timeline(e);
+ var e = e || event;
+ var src = e.target||e.srcElement;
+ if (pos)
+ return showToolTip(obj,pos,getOffset(pos.src));
+ }
+ hideToolTip();
+};
+scheduler._init_matrix_tooltip = function() {
+ scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._matrix_tooltip_handler);
+ dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._matrix_tooltip_handler);
+};
+
+scheduler._renderMatrix = function(mode, refresh) {
+ if (!refresh)
+ scheduler._els['dhx_cal_data'][0].scrollTop=0;
+
+ scheduler._min_date = scheduler.date[this.name+"_start"](scheduler._date);
+ scheduler._max_date = scheduler.date.add(scheduler._min_date, this.x_size*this.x_step, this.x_unit);
+ scheduler._table_view = true;
+ if (this.second_scale) {
+ if (mode && !this._header_resized) {
+ this._header_resized = scheduler.xy.scale_height;
+ scheduler.xy.scale_height *= 2;
+ scheduler._els['dhx_cal_header'][0].className += " dhx_second_cal_header";
+ }
+ if (!mode && this._header_resized) {
+ scheduler.xy.scale_height /= 2;
+ this._header_resized = false;
+ var header = scheduler._els['dhx_cal_header'][0];
+ header.className = header.className.replace(/ dhx_second_cal_header/gi,"");
+ }
+ }
+ set_full_view.call(this,mode);
+};
+
+function html_index(el) {
+ var p = el.parentNode.childNodes;
+ for (var i=0; i < p.length; i++)
+ if (p[i] == el) return i;
+ return -1;
+}
+function locate_hcell(e){
+ e = e||event;
+ var trg = e.target?e.target:e.srcElement;
+ while (trg && trg.tagName != "DIV")
+ trg=trg.parentNode;
+ if (trg && trg.tagName == "DIV"){
+ var cs = trg.className.split(" ")[0];
+ if (cs == "dhx_scale_bar")
+ return { x:html_index(trg), y:-1, src:trg, scale:true };
+ }
+}
+scheduler._locate_cell_timeline = function(e){
+ e = e||event;
+ var trg = e.target?e.target:e.srcElement;
+
+ var res = {};
+ var view = scheduler.matrix[scheduler._mode];
+ var pos = scheduler.getActionData(e);
+
+ for (var xind = 0; xind < view._trace_x.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.date < view._trace_x[xind+1])
+ break;
+ }
+
+ res.x = xind;
+ res.y = view.order[pos.section];
+ var diff = scheduler._isRender('cell') ? 1 : 0;
+ res.src = view._scales[pos.section] ? view._scales[pos.section].getElementsByTagName('td')[xind+diff] : null;
+
+ var isScale = false;
+ while (res.x === 0 && trg.className != "dhx_cal_data" && trg.parentNode) {
+ if (trg.className.split(" ")[0] == "dhx_matrix_scell") {
+ isScale = true;
+ break;
+ } else {
+ trg = trg.parentNode;
+ }
+ }
+ if (isScale) { // Y scale
+ res.x = -1;
+ res.src = trg;
+ res.scale = true;
+ }
+
+ return res;
+};
+
+var old_click = scheduler._click.dhx_cal_data;
+scheduler._click.dhx_marked_timespan = scheduler._click.dhx_cal_data = function(e){
+ var ret = old_click.apply(this,arguments);
+ var obj = scheduler.matrix[scheduler._mode];
+ if (obj){
+ var pos = scheduler._locate_cell_timeline(e);
+ if (pos){
+ if (pos.scale)
+ scheduler.callEvent("onYScaleClick",[pos.y, obj.y_unit[pos.y], e||event]);
+ else
+ scheduler.callEvent("onCellClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]);
+ }
+ }
+ return ret;
+};
+
+scheduler.dblclick_dhx_matrix_cell = function(e){
+ var obj = scheduler.matrix[scheduler._mode];
+ if (obj){
+ var pos = scheduler._locate_cell_timeline(e);
+ if (pos){
+ if (pos.scale)
+ scheduler.callEvent("onYScaleDblClick",[pos.y, obj.y_unit[pos.y], e||event]);
+ else
+ scheduler.callEvent("onCellDblClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]);
+ }
+ }
+};
+
+var old_dblclick_marked_timespan = scheduler.dblclick_dhx_marked_timespan || function(){};
+scheduler.dblclick_dhx_marked_timespan = function(e){
+ var obj = scheduler.matrix[scheduler._mode];
+ if (obj)
+ return scheduler.dblclick_dhx_matrix_cell(e);
+ else
+ return old_dblclick_marked_timespan.apply(this,arguments);
+};
+
+scheduler.dblclick_dhx_matrix_scell = function(e){
+ return scheduler.dblclick_dhx_matrix_cell(e);
+};
+
+scheduler._isRender = function(mode){
+ return (scheduler.matrix[scheduler._mode] && scheduler.matrix[scheduler._mode].render == mode);
+};
+
+scheduler.attachEvent("onCellDblClick", function (x, y, a, b, event){
+ if (this.config.readonly|| (event.type == "dblclick" && !this.config.dblclick_create)) return;
+
+ var obj = scheduler.matrix[scheduler._mode];
+ var event_options = {};
+ event_options.start_date = obj._trace_x[x];
+ event_options.end_date = (obj._trace_x[x+1]) ? obj._trace_x[x+1] : scheduler.date.add(obj._trace_x[x], obj.x_step, obj.x_unit);
+
+ if (obj._start_correction)
+ event_options.start_date = new Date(event_options.start_date*1 + obj._start_correction);
+ if (obj._end_correction)
+ event_options.end_date = new Date(event_options.end_date - obj._end_correction);
+
+ event_options[obj.y_property] = obj.y_unit[y].key;
+ scheduler.addEventNow(event_options, null, event);
+});
+
+scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){
+ return !scheduler._isRender("cell");
+});
+scheduler.attachEvent("onEventChanged", function(id, ev) {
+ ev._timed = this.isOneDayEvent(ev);
+});
+var old_render_marked_timespan = scheduler._render_marked_timespan;
+scheduler._render_marked_timespan = function(options, area, unit_id, min_date, max_date) {
+ if (!scheduler.config.display_marked_timespans)
+ return [];
+
+ if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ if (scheduler._isRender('cell'))
+ return;
+
+ var view_opts = scheduler._lame_copy({}, scheduler.matrix[scheduler._mode]);
+ //timespans must always use actual position, not rounded
+ view_opts.round_position = false;
+ var blocks = [];
+
+ var units = [];
+ var areas = [];
+ var section = options.sections ? (options.sections.units || options.sections.timeline) : null;
+ if (!unit_id) { // should draw for every unit...
+ var order = view_opts.order;
+ if (section) { // ...or for only section if mentioned in configuration of timespan
+ if (order.hasOwnProperty(section)) {
+ units.push(section);
+ areas.push(view_opts._scales[section]);
+ }
+ }else{
+ for (var key in order) {
+ if (order.hasOwnProperty(key)) {
+ units.push(key);
+ areas.push(view_opts._scales[key]);
+ }
+ }
+ }
+ } else {
+ areas = [area];
+ units = [unit_id];
+ }
+
+ var min_date = min_date ? new Date(min_date) : scheduler._min_date;
+ var max_date = max_date ? new Date(max_date) : scheduler._max_date;
+ var dates = [];
+
+ if (options.days > 6) {
+ var specific_date = new Date(options.days);
+ if (scheduler.date.date_part(new Date(min_date)) <= +specific_date && +max_date >= +specific_date)
+ dates.push(specific_date);
+ } else {
+ dates.push.apply(dates, scheduler._get_dates_by_index(options.days));
+ }
+
+ var zones = options.zones;
+ var css_classes = scheduler._get_css_classes_by_config(options);
+
+ for (var j=0; j<units.length; j++) {
+ area = areas[j];
+ unit_id = units[j];
+
+ for (var i=0; i<dates.length; i++) {
+ var date = dates[i];
+ for (var k=0; k<zones.length; k += 2) {
+ var zone_start = zones[k];
+ var zone_end = zones[k+1];
+ var start_date = new Date(+date + zone_start*60*1000);
+ var end_date = new Date(+date + zone_end*60*1000);
+
+ if (!(min_date < end_date && max_date > start_date))
+ continue;
+
+ var block = scheduler._get_block_by_config(options);
+ block.className = css_classes;
+
+ var start_pos = _getX({start_date: start_date}, false, view_opts)-1;
+ var end_pos = _getX({start_date: end_date}, false, view_opts)-1;
+ var width = Math.max(1, end_pos - start_pos - 1);
+ var height = view_opts._section_height[unit_id]-1;
+
+ block.style.cssText = "height: "+height+"px; left: "+start_pos+"px; width: "+width+"px; top: 0;";
+
+ area.insertBefore(block, area.firstChild);
+ blocks.push(block);
+ }
+ }
+ }
+
+ return blocks;
+
+ } else {
+ return old_render_marked_timespan.apply(scheduler, [options, area, unit_id]);
+ }
+};
+
+var old_append_mark_now = scheduler._append_mark_now;
+scheduler._append_mark_now = function(day_index, now) {
+ if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ var n_date = scheduler._currentDate();
+ var zone_start = scheduler._get_zone_minutes(n_date);
+ var options = {
+ days: +scheduler.date.date_part(n_date),
+ zones: [zone_start, zone_start+1],
+ css: "dhx_matrix_now_time",
+ type: "dhx_now_time"
+ };
+ return scheduler._render_marked_timespan(options);
+ } else {
+ return old_append_mark_now.apply(scheduler, [day_index, now]);
+ }
+};
+
+scheduler.attachEvent("onScaleAdd", function(scale, unit_key) {
+ var timespans = scheduler._marked_timespans;
+
+ if (timespans && scheduler.matrix && scheduler.matrix[scheduler._mode]) {
+ var mode = scheduler._mode;
+
+ var min_date = scheduler._min_date;
+ var max_date = scheduler._max_date;
+ var global_data = timespans["global"];
+
+ for (var t_date = scheduler.date.date_part(new Date(min_date)); t_date < max_date; t_date = scheduler.date.add(t_date, 1, "day")) {
+ var day_value = +t_date;
+ var day_index = t_date.getDay();
+ var r_configs = [];
+
+ var day_types = global_data[day_value]||global_data[day_index];
+ r_configs.push.apply(r_configs, scheduler._get_configs_to_render(day_types));
+
+ if (timespans[mode] && timespans[mode][unit_key]) {
+ var z_config = [];
+ var unit_types = scheduler._get_types_to_render(timespans[mode][unit_key][day_index], timespans[mode][unit_key][day_value]);
+ z_config.push.apply(z_config, scheduler._get_configs_to_render(unit_types));
+ if(z_config.length)
+ r_configs = z_config;
+ }
+
+ for (var i=0; i<r_configs.length; i++) {
+ var config = r_configs[i];
+ var day = config.days;
+ if (day < 7) {
+ day = day_value;
+ //specify min/max timespan dates, otherwise it can be rendered multiple times in some configurations
+ scheduler._render_marked_timespan(config, scale, unit_key, t_date, scheduler.date.add(t_date, 1, "day"));
+ day = day_index;
+ } else {
+ scheduler._render_marked_timespan(config, scale, unit_key, t_date, scheduler.date.add(t_date, 1, "day"));
+ }
+ }
+ }
+ }
+});
+
+scheduler._resolve_timeline_section = function(view, pos){
+ var yind = 0;
+ var summ = 0;
+ for (yind; yind < this._colsS.heights.length; yind++) {
+ summ += this._colsS.heights[yind];
+ if (summ > pos.y)
+ break;
+ }
+
+ if(!view.y_unit[yind]) {
+ yind=view.y_unit.length-1;
+ }
+ if(this._drag_event && !this._drag_event._orig_section){
+ this._drag_event._orig_section = view.y_unit[yind].key;
+ }
+
+ pos.fields = {};
+ if (yind >= 0 && view.y_unit[yind]) {
+ pos.section = pos.fields[view.y_property] = view.y_unit[yind].key;
+ }
+};
+scheduler._update_timeline_section = function(action){
+ var view = action.view,
+ event = action.event,
+ pos = action.pos;
+
+ if (event) {
+ if(event[view.y_property] != pos.section){
+ var line_height = this._get_timeline_event_height(event, view);
+ event._sorder = this._get_dnd_order(event._sorder, line_height, view._section_height[pos.section]);
+ }
+ event[view.y_property] = pos.section;
+ }
+};
+scheduler._get_date_index=function(config, date) {
+ var index = 0;
+ var trace_x = config._trace_x;
+ while (index < trace_x.length-1 && +date >= +trace_x[index+1]) {
+ index++;
+ }
+ return index;
+};
+
+scheduler.attachEvent("onBeforeTodayDisplayed", function() {
+ for(var i in scheduler.matrix){
+ var obj = scheduler.matrix[i];
+ obj.x_start = obj._original_x_start;
+ }
+ return true;
+});
+
+scheduler.attachEvent("onOptionsLoad",function(){
+ for(var i in scheduler.matrix){
+ var obj = scheduler.matrix[i];
+
+ obj.order = {};
+ scheduler.callEvent('onOptionsLoadStart', []);
+ for(var i=0; i<obj.y_unit.length;i++)
+ obj.order[obj.y_unit[i].key]=i;
+ scheduler.callEvent('onOptionsLoadFinal', []);
+ if (scheduler._date && obj.name == scheduler._mode)
+ scheduler.setCurrentView(scheduler._date, scheduler._mode);
+ }
+});
+
+scheduler.attachEvent("onSchedulerResize",function(){
+ if (scheduler.matrix[this._mode]){
+ var obj = scheduler.matrix[this._mode];
+ scheduler._renderMatrix.call(obj, true, true);
+ return false;
+ }
+ return true;
+});
+
+scheduler.attachEvent("onBeforeDrag",function(id, drag_mode, e){
+ if(drag_mode == 'resize'){
+ var trg = e.target || e.srcElement;
+ if((trg.className||"").indexOf("dhx_event_resize_end") < 0){
+ scheduler._drag_from_start = true;
+ }else{
+ scheduler._drag_from_start = false;
+ }
+ }
+
+ return true;
+});
+
+};
+scheduler._temp_matrix_scope();
diff --git a/codebase/sources/ext/dhtmlxscheduler_timeline.js.map b/codebase/sources/ext/dhtmlxscheduler_timeline.js.map
new file mode 100644
index 0000000..62bc255
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_timeline.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_timeline.js.map","sources":["dhtmlxscheduler_timeline.js"],"names":["scheduler","_temp_matrix_scope","trace_events","evs","get_visible_events","matrix","i","this","y_unit","length","y","order","y_property","x","_trace_x","start_date","end_date","push","_getX","ev","isEndPoint","config","step","_step","round_position","column_offset","date","valueOf","_max_date","delta","_min_date_timeline","index","_get_date_index","_ignores","_cols","column_date","add","_mode","x_step","x_unit","first_hour","last_hour","_start_correction","Math","round","get_rounded_date","isEndDate","rounded_date","Date","get_events_html","html","render","sort","a","b","id","stack","evs_length","j","_inner","ev_start_date","apply","stack_ev","splice","sorderSet","p","t_ev","_sorder","h","_is_sorder","t","_max_sorder","w","max_count","_count","m","v","render_timeline_event","call","y_scale","d","_load_mode","_load","tevs","tev","tev_section","show_unassigned","key","hasOwnProperty","clone","_lame_copy","summ","realcount","_ignores_detected","_end_correction","_summ","heights","_colsS","_events_height","_section_height","stats","_logic","_merge","height","dy","section_autoheight","offsetHeight","max","floor","tr_className","style_height","style_width","dx","td_className","templates","name","label","td_content","summ_width","table_className","events_html","fit_events","rendered_height","_matrix","innerHTML","_rendered","divs","_obj","getElementsByTagName","getAttribute","_scales","firstChild","rows","unit_key","scale","_isRender","childNodes","callEvent","x_scale","current_sh","xy","scale_height","original_sh","_header_resized","_x","scroll_width","left","header","_els","style","width","_min_date","preserve","preserve_scale_length","start","_process_ignores","x_size","size","k","second_scale","mode","control_dates","second_cols","second_left","t_index","l","res","is_new_interval","top","bottom","lastChild","position","tdate","scs","head","document","createElement","className","set_xy","appendChild","_render_x_header","cs","trace","onclick","e","pos","locate_hcell","event","ondblclick","control_date","getHours","getDate","getMonth","getFullYear","getISOWeek","set_full_view","set_sizes","_init_matrix_tooltip","temp","_mark_now","hideToolTip","_tooltip","display","showToolTip","obj","offset","mark","body","_click","dhx_cal_data","bg_color","color","textColor","_timed","event_date","offsetWidth","src","html_index","el","parentNode","trg","target","srcElement","tagName","split","c","createTimelineView","_skin_init","y_step","x_start","y_start","y_size","event_dy","bar_height","event_min_dy","resize_events","render_name","timeline","checkEvent","_original_x_start","old","render_data","arguments","clear_event","_renderMatrix","ar","section_id","section_label","text","datea","dateb","getDay","date_part","getMinutes","day_date","week_date","date_to_str","x_date","hour_date","resulting_date","x_length","converted_step","total_steps","steps_offset","func","day_start","temp_date","_drag_event","_drag_id","getEvent","_dhx_changed","ratio","column_width","xind","edge","getState","drag_mode","force_redraw","custom","timestamp_diff","_drag_mode","drag_event","_move_delta","preserve_length","_get_real_event_length","_event_length","current_back_shift","_get_fictional_event_length","_drag_from_start","resize_from_start","_resize_from_start","undefined","_resolve_timeline_section","section","_update_timeline_section","view","time_step","shift","_get_timeline_event_height","event_height","_get_timeline_event_y","sorder","cascade_event_display","cascade_event_margin","attach","x_end","hb","section_height","event_class","event_bar_text","_text_style","drag_resize","readonly","dhx_event_resize","ind","parent","cells","_matrix_tooltip_handler","_locate_cell_timeline","getOffset","_detachDomEvent","dhtmlxEvent","refresh","scrollTop","_date","_table_view","replace","getActionData","diff","isScale","old_click","dhx_marked_timespan","ret","dblclick_dhx_matrix_cell","old_dblclick_marked_timespan","dblclick_dhx_marked_timespan","dblclick_dhx_matrix_scell","attachEvent","type","dblclick_create","event_options","addEventNow","isOneDayEvent","old_render_marked_timespan","_render_marked_timespan","options","area","unit_id","min_date","max_date","display_marked_timespans","view_opts","blocks","units","areas","sections","dates","days","specific_date","_get_dates_by_index","zones","css_classes","_get_css_classes_by_config","zone_start","zone_end","block","_get_block_by_config","start_pos","end_pos","cssText","insertBefore","old_append_mark_now","_append_mark_now","day_index","now","n_date","_currentDate","_get_zone_minutes","css","timespans","_marked_timespans","global_data","t_date","day_value","r_configs","day_types","_get_configs_to_render","z_config","unit_types","_get_types_to_render","day","yind","_orig_section","fields","action","line_height","_get_dnd_order","trace_x","setCurrentView","indexOf"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_tooltip.js b/codebase/sources/ext/dhtmlxscheduler_tooltip.js
new file mode 100644
index 0000000..1dbad28
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_tooltip.js
@@ -0,0 +1,223 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+window.dhtmlXTooltip = scheduler.dhtmlXTooltip = window.dhtmlxTooltip = {};
+
+dhtmlXTooltip.config = {
+ className: 'dhtmlXTooltip tooltip',
+ timeout_to_display: 50,
+ timeout_to_hide: 50,
+ delta_x: 15,
+ delta_y: -20
+};
+
+dhtmlXTooltip.tooltip = document.createElement('div');
+dhtmlXTooltip.tooltip.className = dhtmlXTooltip.config.className;
+
+dhtmlXTooltip.show = function(event, text) { //browser event, text to display
+ if (scheduler.config.touch && !scheduler.config.touch_tooltip) return;
+
+ var dhxTooltip = dhtmlXTooltip;
+ var tooltip_div = this.tooltip;
+ var tooltip_div_style = tooltip_div.style;
+ dhxTooltip.tooltip.className = dhxTooltip.config.className;
+ var pos = this.position(event);
+
+ var target = event.target || event.srcElement;
+ // if we are over tooltip -- do nothing, just return (so tooltip won't move)
+ if (this.isTooltip(target)) {
+ return;
+ }
+
+ var actual_x = pos.x + (dhxTooltip.config.delta_x || 0);
+ var actual_y = pos.y - (dhxTooltip.config.delta_y || 0);
+
+ tooltip_div_style.visibility = "hidden";
+
+ if (tooltip_div_style.removeAttribute) {
+ tooltip_div_style.removeAttribute("right");
+ tooltip_div_style.removeAttribute("bottom");
+ } else {
+ tooltip_div_style.removeProperty("right");
+ tooltip_div_style.removeProperty("bottom");
+ }
+
+ tooltip_div_style.left = "0";
+ tooltip_div_style.top = "0";
+
+ this.tooltip.innerHTML = text;
+ document.body.appendChild(this.tooltip);
+
+ var tooltip_width = this.tooltip.offsetWidth;
+ var tooltip_height = this.tooltip.offsetHeight;
+
+ if ((document.body.offsetWidth - actual_x - tooltip_width) < 0) { // tooltip is out of the right page bound
+ if(tooltip_div_style.removeAttribute)
+ tooltip_div_style.removeAttribute("left");
+ else
+ tooltip_div_style.removeProperty("left");
+ tooltip_div_style.right = (document.body.offsetWidth - actual_x + 2 * (dhxTooltip.config.delta_x||0)) + "px";
+ } else {
+ if (actual_x < 0) {
+ // tooltips is out of the left page bound
+ tooltip_div_style.left = (pos.x + Math.abs(dhxTooltip.config.delta_x||0)) + "px";
+ } else {
+ // normal situation
+ tooltip_div_style.left = actual_x + "px";
+ }
+ }
+
+ if ((document.body.offsetHeight - actual_y - tooltip_height) < 0) { // tooltip is below bottom of the page
+ if(tooltip_div_style.removeAttribute)
+ tooltip_div_style.removeAttribute("top");
+ else
+ tooltip_div_style.removeProperty("top");
+ tooltip_div_style.bottom = (document.body.offsetHeight - actual_y - 2 * (dhxTooltip.config.delta_y||0)) + "px";
+ } else {
+ if (actual_y < 0) {
+ // tooltip is higher then top of the page
+ tooltip_div_style.top = (pos.y + Math.abs(dhxTooltip.config.delta_y||0)) + "px";
+ } else {
+ // normal situation
+ tooltip_div_style.top = actual_y + "px";
+ }
+ }
+
+ tooltip_div_style.visibility = "visible";
+ this.tooltip.onmouseleave = function(e){
+ /*
+ A rare but reported scenario, when tooltip appears at the edge of the scheduler (e.g. left part inside cal, right part - outside).
+ User moves mouse from the scheduler into the tooltip, and then from the tooltip to the page outside the calendar.
+ As a result - tooltip freezes and no longer reacts until mouse reenters the calendar.
+ */
+ var tooltip = scheduler.dhtmlXTooltip;
+
+ var node = e.relatedTarget;
+ while (node != scheduler._obj && node) {
+ node = node.parentNode;
+ }
+
+ if(node != scheduler._obj)
+ tooltip.delay(tooltip.hide, tooltip, [], tooltip.config.timeout_to_hide);
+ };
+
+ scheduler.callEvent("onTooltipDisplayed", [this.tooltip, this.tooltip.event_id]);
+};
+dhtmlXTooltip._clearTimeout = function(){
+ if(this.tooltip._timeout_id) {
+ window.clearTimeout(this.tooltip._timeout_id);
+ }
+};
+
+dhtmlXTooltip.hide = function() {
+ if (this.tooltip.parentNode) {
+ var event_id = this.tooltip.event_id;
+ this.tooltip.event_id = null;
+ this.tooltip.onmouseleave = null;
+ this.tooltip.parentNode.removeChild(this.tooltip);
+ scheduler.callEvent("onAfterTooltip", [event_id]);
+ }
+ this._clearTimeout();
+};
+dhtmlXTooltip.delay = function(method, object, params, delay) {
+ this._clearTimeout();
+ this.tooltip._timeout_id = setTimeout(function() {
+ var ret = method.apply(object, params);
+ method = object = params = null;
+ return ret;
+ }, delay || this.config.timeout_to_display);
+};
+
+dhtmlXTooltip.isTooltip = function(node) {
+ var res = false;
+ if (node.className.split(" ")[0] == "dhtmlXTooltip") {
+ //debugger;
+ }
+ while (node && !res) {
+ res = (node.className == this.tooltip.className);
+ node = node.parentNode;
+ }
+ return res;
+};
+
+dhtmlXTooltip.position = function(ev) {
+ ev = ev || window.event;
+ if (ev.pageX || ev.pageY) //FF, KHTML
+ return {x:ev.pageX, y:ev.pageY};
+ //IE
+ var d = ((window._isIE) && (document.compatMode != "BackCompat")) ? document.documentElement : document.body;
+ return {
+ x:ev.clientX + d.scrollLeft - d.clientLeft,
+ y:ev.clientY + d.scrollTop - d.clientTop
+ };
+};
+
+scheduler.attachEvent("onMouseMove", function(event_id, e) { // (scheduler event_id, browser event)
+ var ev = window.event || e;
+ var target = ev.target || ev.srcElement;
+ var dhxTooltip = dhtmlXTooltip;
+
+ var is_tooltip = dhxTooltip.isTooltip(target);
+ var is_tooltip_target = (dhxTooltip.isTooltipTarget && dhxTooltip.isTooltipTarget(target));
+
+ // if we are over event or tooltip or custom target for tooltip
+ if (event_id || is_tooltip || is_tooltip_target) {
+ var text;
+
+ if (event_id || dhxTooltip.tooltip.event_id) {
+ var event = scheduler.getEvent(event_id) || scheduler.getEvent(dhxTooltip.tooltip.event_id);
+ if (!event)
+ return;
+
+ dhxTooltip.tooltip.event_id = event.id;
+ text = scheduler.templates.tooltip_text(event.start_date, event.end_date, event);
+ if (!text)
+ return dhxTooltip.hide();
+ }
+ if (is_tooltip_target) {
+ text = "";
+ }
+
+ var evt;
+ if (_isIE) {
+ //make a copy of event, will be used in timed call
+
+ evt = {'pageX':undefined,
+ 'pageY':undefined,
+ 'clientX':undefined,
+ 'clientY':undefined,
+ 'target':undefined,
+ 'srcElement':undefined
+ };
+ for(var i in evt){
+ evt[i] = ev[i];
+ }
+ }
+
+ if (!scheduler.callEvent("onBeforeTooltip", [event_id]) || !text)
+ return;
+
+ dhxTooltip.delay(dhxTooltip.show, dhxTooltip, [(evt || ev), text]); // showing tooltip
+ } else {
+ dhxTooltip.delay(dhxTooltip.hide, dhxTooltip, [], dhxTooltip.config.timeout_to_hide);
+ }
+});
+scheduler.attachEvent("onBeforeDrag", function() {
+ dhtmlXTooltip.hide();
+ return true;
+});
+scheduler.attachEvent("onEventDeleted", function() {
+ dhtmlXTooltip.hide();
+ return true;
+});
+
+/* Could be redifined */
+scheduler.templates.tooltip_date_format = scheduler.date.date_to_str("%Y-%m-%d %H:%i");
+
+scheduler.templates.tooltip_text = function(start, end, event) {
+ return "<b>Event:</b> " + event.text + "<br/><b>Start date:</b> " + scheduler.templates.tooltip_date_format(start) + "<br/><b>End date:</b> " + scheduler.templates.tooltip_date_format(end);
+};
diff --git a/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map b/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map
new file mode 100644
index 0000000..76751fa
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_tooltip.js.map","sources":["dhtmlxscheduler_tooltip.js"],"names":["window","dhtmlXTooltip","scheduler","dhtmlxTooltip","config","className","timeout_to_display","timeout_to_hide","delta_x","delta_y","tooltip","document","createElement","show","event","text","touch","touch_tooltip","dhxTooltip","tooltip_div","this","tooltip_div_style","style","pos","position","target","srcElement","isTooltip","actual_x","x","actual_y","y","visibility","removeAttribute","removeProperty","left","top","innerHTML","body","appendChild","tooltip_width","offsetWidth","tooltip_height","offsetHeight","right","Math","abs","bottom","onmouseleave","e","node","relatedTarget","_obj","parentNode","delay","hide","callEvent","event_id","_clearTimeout","_timeout_id","clearTimeout","removeChild","method","object","params","setTimeout","ret","apply","res","split","ev","pageX","pageY","d","compatMode","documentElement","clientX","scrollLeft","clientLeft","clientY","scrollTop","clientTop","attachEvent","is_tooltip","is_tooltip_target","isTooltipTarget","getEvent","id","templates","tooltip_text","start_date","end_date","evt","_isIE","undefined","i","tooltip_date_format","date","date_to_str","start","end"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_treetimeline.js b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js
new file mode 100644
index 0000000..706e1bd
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js
@@ -0,0 +1,313 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTimelineCreated", function (obj){
+
+ if(obj.render == "tree") {
+ obj.y_unit_original = obj.y_unit;
+ obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original);
+
+ scheduler.attachEvent('onOptionsLoadStart', function(){
+ obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original);
+ });
+
+ scheduler.form_blocks[obj.name]={
+ render:function(sns) {
+ var _result = "<div class='dhx_section_timeline' style='overflow: hidden; height: "+sns.height+"px'></div>";
+ return _result;
+ },
+ set_value:function(node,value,ev,config){
+ var options = scheduler._getArrayForSelect(scheduler.matrix[config.type].y_unit_original, config.type);
+ node.innerHTML = '';
+ var temp_select = document.createElement('select');
+ node.appendChild(temp_select);
+
+ var select = node.getElementsByTagName('select')[0];
+
+ if (!select._dhx_onchange && config.onchange) {
+ select.onchange = config.onchange;
+ select._dhx_onchange = true;
+ }
+
+ for (var i = 0; i < options.length; i++) {
+ var temp_option = document.createElement('option');
+ temp_option.value = options[i].key;
+ if(temp_option.value == ev[scheduler.matrix[config.type].y_property])
+ temp_option.selected = true;
+ temp_option.innerHTML = options[i].label;
+ select.appendChild(temp_option);
+ }
+ },
+ get_value:function(node,ev,config){
+ return node.firstChild.value;
+ },
+ focus:function(node){
+ }
+ };
+
+
+ }
+});
+
+scheduler.attachEvent("onBeforeSectionRender", function (render_name, y_unit, timeline){
+ var res = {};
+ if(render_name == "tree"){
+ var height;
+ // section 1
+ var tr_className, style_height, td_className;
+ var div_expand;
+ // section 3
+ var table_className;
+ if(y_unit.children) {
+ height = timeline.folder_dy||timeline.dy;
+ if(timeline.folder_dy && !timeline.section_autoheight) {
+ style_height = "height:"+timeline.folder_dy+"px;";
+ }
+ tr_className = "dhx_row_folder";
+ td_className = "dhx_matrix_scell folder";
+ div_expand = "<div class='dhx_scell_expand'>"+((y_unit.open)?'-':'+')+"</div>";
+ table_className = (timeline.folder_events_available)?"dhx_data_table folder_events":"dhx_data_table folder";
+ } else {
+ height = timeline.dy;
+ tr_className = "dhx_row_item";
+ td_className = "dhx_matrix_scell item"+(scheduler.templates[timeline.name+"_scaley_class"](y_unit.key, y_unit.label, y_unit) ?
+ " "+scheduler.templates[timeline.name+"_scaley_class"](y_unit.key, y_unit.label, y_unit) : '');
+ div_expand = '';
+ table_className = "dhx_data_table";
+ }
+ var td_content = "<div class='dhx_scell_level"+y_unit.level+"'>"+div_expand+"<div class='dhx_scell_name'>"+(scheduler.templates[timeline.name+'_scale_label'](y_unit.key, y_unit.label, y_unit)||y_unit.label)+"</div></div>";
+
+ res = {
+ height: height,
+ style_height: style_height,
+ //section 1
+ tr_className: tr_className,
+ td_className: td_className,
+ td_content: td_content,
+ //section 3
+ table_className: table_className
+ };
+ }
+ return res;
+});
+
+var section_id_before; // section id of the event before dragging (to bring it back if user drop's event on folder without folder_events_available)
+
+scheduler.attachEvent("onBeforeEventChanged", function(event_object, native_event, is_new) {
+ if (scheduler._isRender("tree")) { // if mode's render == tree
+ var section = scheduler.getSection(event_object[scheduler.matrix[scheduler._mode].y_property]);
+ if (section && typeof section.children != 'undefined' && !scheduler.matrix[scheduler._mode].folder_events_available) { // section itself could be not defined in case of new event (addEventNow)
+ if (!is_new) { //if old - move back
+ event_object[scheduler.matrix[scheduler._mode].y_property] = section_id_before;
+ }
+ return false;
+ }
+ }
+ return true;
+});
+
+scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){
+ if(scheduler._isRender("tree")) {
+ var cell = scheduler._locate_cell_timeline(native_event_object);
+ var section_id;
+ if(cell) {
+ section_id = scheduler.matrix[scheduler._mode].y_unit[cell.y].key;
+ if(typeof scheduler.matrix[scheduler._mode].y_unit[cell.y].children != "undefined" && !scheduler.matrix[scheduler._mode].folder_events_available) {
+ return false;
+ }
+ }
+
+ var ev = scheduler.getEvent(event_id);
+ section_id_before = section_id||ev[scheduler.matrix[scheduler._mode].y_property]; // either event id or section_id will be available
+ }
+ return true;
+});
+
+scheduler._getArrayToDisplay = function(array){ // function to flatten out hierarhical array, used for tree view
+ var result = [];
+ var fillResultArray = function(array, lvl){
+ var level = lvl||0;
+ for(var i=0; i<array.length; i++) {
+ array[i].level = level;
+ if(typeof array[i].children != "undefined" && typeof array[i].key == "undefined")
+ array[i].key=scheduler.uid();
+ result.push(array[i]);
+ if(array[i].open && array[i].children) {
+ fillResultArray(array[i].children, level+1);
+ }
+ }
+ };
+ fillResultArray(array);
+ return result;
+};
+
+
+scheduler._getArrayForSelect = function(array, mode){ // function to flatten out hierarhical array, used for tree view
+ var result = [];
+ var fillResultArray = function(array){
+ for(var i=0; i<array.length; i++) {
+ if(scheduler.matrix[mode].folder_events_available) {
+ result.push(array[i]);
+ }
+ else {
+ if(typeof array[i].children == "undefined") {
+ result.push(array[i]);
+ }
+ }
+ if(array[i].children)
+ fillResultArray(array[i].children, mode);
+ }
+ };
+ fillResultArray(array);
+ return result;
+};
+
+
+/*
+scheduler._toggleFolderDisplay(4) -- toggle display of the section with key 4 (closed -> open)
+scheduler._toggleFolderDisplay(4, true) -- open section with the key 4 (doesn't matter what status was before). False - close.
+scheduler._toggleFolderDisplay(4, false, true) -- close ALL sections. Key is not used in such condition.
+*/
+scheduler._toggleFolderDisplay = function(key, status, all_sections){ // used for tree view
+ var marked;
+ var toggleElement = function(key, array, status, all_sections) {
+ for (var i=0; i<array.length; i++) {
+ if((array[i].key == key || all_sections) && array[i].children) {
+ array[i].open = (typeof status != "undefined") ? status : !array[i].open;
+ marked = true;
+ if(!all_sections && marked)
+ break;
+ }
+ if(array[i].children) {
+ toggleElement(key,array[i].children, status, all_sections);
+ }
+ }
+ };
+ var section = scheduler.getSection(key);
+
+ if((typeof status == "undefined") && !all_sections){
+ //toggle
+ status = !section.open;
+ }
+ if (scheduler.callEvent("onBeforeFolderToggle", [section, status, all_sections])) {
+ toggleElement(key,scheduler.matrix[scheduler._mode].y_unit_original, status, all_sections);
+ scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);
+ scheduler.callEvent("onOptionsLoad",[]);
+ scheduler.callEvent("onAfterFolderToggle", [section, status, all_sections]);
+ }
+};
+
+scheduler.attachEvent("onCellClick", function (x, y, a, b, event){
+ if(scheduler._isRender("tree")) {
+ if(!scheduler.matrix[scheduler._mode].folder_events_available) {
+ if(typeof scheduler.matrix[scheduler._mode].y_unit[y] != "undefined" &&
+ typeof scheduler.matrix[scheduler._mode].y_unit[y].children != "undefined") {
+ scheduler._toggleFolderDisplay(scheduler.matrix[scheduler._mode].y_unit[y].key);
+ }
+ }
+ }
+});
+
+scheduler.attachEvent("onYScaleClick", function (index, value, event){
+ if(scheduler._isRender("tree")) {
+ if(typeof value.children != "undefined") {
+ scheduler._toggleFolderDisplay(value.key);
+ }
+ }
+});
+
+scheduler.getSection = function(id){
+ if(scheduler._isRender("tree")) {
+ var obj;
+ var findElement = function(key, array) {
+ for (var i=0; i<array.length; i++) {
+ if(array[i].key == key)
+ obj = array[i];
+ if(array[i].children)
+ findElement(key,array[i].children);
+ }
+ };
+ findElement(id, scheduler.matrix[scheduler._mode].y_unit_original);
+ return obj||null;
+ }
+};
+
+scheduler.deleteSection = function(id){
+ if(scheduler._isRender("tree")) {
+ var result = false;
+ var deleteElement = function(key, array) {
+ for (var i=0; i<array.length; i++) {
+ if(array[i].key == key) {
+ array.splice(i,1);
+ result = true;
+ }
+ if(result)
+ break;
+ if(array[i].children)
+ deleteElement(key,array[i].children);
+ }
+ };
+ deleteElement(id, scheduler.matrix[scheduler._mode].y_unit_original);
+ scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);
+ scheduler.callEvent("onOptionsLoad",[]);
+ return result;
+ }
+};
+
+scheduler.deleteAllSections = function(){
+ if(scheduler._isRender("tree")) {
+ scheduler.matrix[scheduler._mode].y_unit_original = [];
+ scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);
+ scheduler.callEvent("onOptionsLoad",[]);
+ }
+};
+
+scheduler.addSection = function(obj, parent_id){
+ if(scheduler._isRender("tree")) {
+ var result = false;
+ var addElement = function(obj, parent_key, array) {
+ if(!parent_id) {
+ array.push(obj);
+ result = true;
+ }
+ else {
+ for (var i=0; i<array.length; i++) {
+ if(array[i].key == parent_key && typeof array[i].children != "undefined") {
+ array[i].children.push(obj);
+ result = true;
+ }
+ if(result)
+ break;
+ if(array[i].children)
+ addElement(obj,parent_key,array[i].children);
+ }
+ }
+ };
+ addElement(obj, parent_id, scheduler.matrix[scheduler._mode].y_unit_original);
+ scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);
+ scheduler.callEvent("onOptionsLoad",[]);
+ return result;
+ }
+};
+
+
+scheduler.openAllSections = function() {
+ if(scheduler._isRender("tree"))
+ scheduler._toggleFolderDisplay(1, true, true);
+};
+scheduler.closeAllSections = function() {
+ if(scheduler._isRender("tree"))
+ scheduler._toggleFolderDisplay(1, false, true);
+};
+scheduler.openSection = function(section_id){
+ if(scheduler._isRender("tree"))
+ scheduler._toggleFolderDisplay(section_id, true);
+};
+scheduler.closeSection = function(section_id){
+ if(scheduler._isRender("tree"))
+ scheduler._toggleFolderDisplay(section_id, false);
+};
diff --git a/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map
new file mode 100644
index 0000000..fa99384
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_treetimeline.js.map","sources":["dhtmlxscheduler_treetimeline.js"],"names":["scheduler","attachEvent","obj","render","y_unit_original","y_unit","_getArrayToDisplay","form_blocks","name","sns","_result","height","set_value","node","value","ev","config","options","_getArrayForSelect","matrix","type","innerHTML","temp_select","document","createElement","appendChild","select","getElementsByTagName","_dhx_onchange","onchange","i","length","temp_option","key","y_property","selected","label","get_value","firstChild","focus","render_name","timeline","res","tr_className","style_height","td_className","div_expand","table_className","children","folder_dy","dy","section_autoheight","templates","td_content","level","section_id_before","event_object","native_event","is_new","_isRender","section","getSection","_mode","folder_events_available","event_id","mode","native_event_object","section_id","cell","_locate_cell_timeline","y","getEvent","array","result","fillResultArray","lvl","uid","push","open","_toggleFolderDisplay","status","all_sections","marked","toggleElement","callEvent","x","index","id","findElement","deleteSection","deleteElement","splice","deleteAllSections","addSection","parent_id","addElement","parent_key","openAllSections","closeAllSections","openSection","closeSection"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_units.js b/codebase/sources/ext/dhtmlxscheduler_units.js
new file mode 100644
index 0000000..c6a94d3
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_units.js
@@ -0,0 +1,259 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler._props = {};
+scheduler.createUnitsView=function(name,property,list,size,step,skip_incorrect){
+ if (typeof name == "object"){
+ list = name.list;
+ property = name.property;
+ size = name.size||0;
+ step = name.step||1;
+ skip_incorrect = name.skip_incorrect;
+ name = name.name;
+ }
+
+ scheduler._props[name]={map_to:property, options:list, step:step, position:0 };
+ if(size>scheduler._props[name].options.length){
+ scheduler._props[name]._original_size = size;
+ size = 0;
+ }
+ scheduler._props[name].size = size;
+ scheduler._props[name].skip_incorrect = skip_incorrect||false;
+
+ scheduler.date[name+"_start"]= scheduler.date.day_start;
+ scheduler.templates[name+"_date"] = function(date){
+ return scheduler.templates.day_date(date);
+ };
+
+ scheduler._get_unit_index = function(unit_view, date) {
+ var original_position = unit_view.position || 0;
+ var date_position = Math.floor((scheduler._correct_shift(+date, 1) - +scheduler._min_date) / (60 * 60 * 24 * 1000));
+ return original_position + date_position;
+ };
+ scheduler.templates[name + "_scale_text"] = function(id, label, option) {
+ if (option.css) {
+ return "<span class='" + option.css + "'>" + label + "</span>";
+ } else {
+ return label;
+ }
+ };
+ scheduler.templates[name+"_scale_date"] = function(date) {
+ var unit_view = scheduler._props[name];
+ var list = unit_view.options;
+ if (!list.length) return "";
+ var index = scheduler._get_unit_index(unit_view, date);
+ var option = list[index];
+ return scheduler.templates[name + "_scale_text"](option.key, option.label, option);
+ };
+
+ scheduler.date["add_"+name]=function(date,inc){ return scheduler.date.add(date,inc,"day"); };
+ scheduler.date["get_"+name+"_end"]=function(date){
+ return scheduler.date.add(date,scheduler._props[name].size||scheduler._props[name].options.length,"day");
+ };
+
+ scheduler.attachEvent("onOptionsLoad",function(){
+ var pr = scheduler._props[name];
+ var order = pr.order = {};
+ var list = pr.options;
+ for(var i=0; i<list.length;i++)
+ order[list[i].key]=i;
+ if(pr._original_size && pr.size===0){
+ pr.size = pr._original_size;
+ delete pr.original_size;
+ }
+ if(pr.size > list.length) {
+ pr._original_size = pr.size;
+ pr.size = 0;
+ }
+ else
+ pr.size = pr._original_size||pr.size;
+ if (scheduler._date && scheduler._mode == name)
+ scheduler.setCurrentView(scheduler._date, scheduler._mode);
+ });
+
+ scheduler["mouse_"+ name] = function(pos){ //mouse_coord handler
+ var pr = scheduler._props[this._mode];
+
+ if (pr){
+ pos = this._week_indexes_from_pos(pos);
+ if(!this._drag_event) this._drag_event = {};
+
+ if (this._drag_id && this._drag_mode){
+ this._drag_event._dhx_changed = true;
+ }
+ var unit_ind = Math.min(pos.x+pr.position,pr.options.length-1);
+ pos.section = (pr.options[unit_ind]||{}).key;
+ pos.x = 0;
+
+ var ev = this.getEvent(this._drag_id);
+ this._update_unit_section({view:pr, event:ev, pos:pos});
+ }
+ pos.force_redraw = true;
+
+ return pos;
+ };
+
+
+
+ scheduler.callEvent("onOptionsLoad",[]);
+};
+
+scheduler._update_unit_section = function(action){
+ var view = action.view,
+ event = action.event,
+ pos = action.pos;
+ if(event) {
+ event[view.map_to] = pos.section;
+ }
+};
+
+scheduler.scrollUnit=function(step){
+ var pr = scheduler._props[this._mode];
+ if (pr){
+ pr.position=Math.min(Math.max(0,pr.position+step),pr.options.length-pr.size);
+ this.update_view();
+ }
+};
+(function(){
+ var _removeIncorrectEvents = function(evs) {
+ var pr = scheduler._props[scheduler._mode];
+ if(pr && pr.order && pr.skip_incorrect) {
+ var correct_events = [];
+ for(var i=0; i<evs.length; i++) {
+ if(typeof pr.order[evs[i][pr.map_to]] != "undefined") {
+ correct_events.push(evs[i]);
+ }
+ }
+ evs.splice(0,evs.length);
+ evs.push.apply(evs,correct_events);
+ }
+ return evs;
+ };
+ var old_pre_render_events_table = scheduler._pre_render_events_table;
+ scheduler._pre_render_events_table=function(evs,hold) {
+ evs = _removeIncorrectEvents(evs);
+ return old_pre_render_events_table.apply(this, [evs, hold]);
+ };
+ var old_pre_render_events_line = scheduler._pre_render_events_line;
+ scheduler._pre_render_events_line = function(evs,hold){
+ evs = _removeIncorrectEvents(evs);
+ return old_pre_render_events_line.apply(this, [evs, hold]);
+ };
+ var fix_und=function(pr,ev){
+ if (pr && typeof pr.order[ev[pr.map_to]] == "undefined"){
+ var s = scheduler;
+ var dx = 24*60*60*1000;
+ var ind = Math.floor((ev.end_date - s._min_date)/dx);
+ //ev.end_date = new Date(s.date.time_part(ev.end_date)*1000+s._min_date.valueOf());
+ //ev.start_date = new Date(s.date.time_part(ev.start_date)*1000+s._min_date.valueOf());
+ ev[pr.map_to] = pr.options[Math.min(ind+pr.position,pr.options.length-1)].key;
+ return true;
+ }
+ };
+ var t = scheduler._reset_scale;
+
+ var oldive = scheduler.is_visible_events;
+ scheduler.is_visible_events = function(e){
+ var res = oldive.apply(this,arguments);
+ if (res){
+ var pr = scheduler._props[this._mode];
+ if (pr && pr.size){
+ var val = pr.order[e[pr.map_to]];
+ if (val < pr.position || val >= pr.size+pr.position )
+ return false;
+ }
+ }
+ return res;
+ };
+ scheduler._reset_scale = function(){
+ var pr = scheduler._props[this._mode];
+ var ret = t.apply(this,arguments);
+ if (pr){
+ this._max_date=this.date.add(this._min_date,1,"day");
+
+ var d = this._els["dhx_cal_data"][0].childNodes;
+ for (var i=0; i < d.length; i++)
+ d[i].className = d[i].className.replace("_now",""); //clear now class
+
+ if (pr.size && pr.size < pr.options.length){
+
+ var h = this._els["dhx_cal_header"][0];
+ var arrow = document.createElement("DIV");
+ if (pr.position){
+ arrow.className = "dhx_cal_prev_button";
+ arrow.style.cssText="left:1px;top:2px;position:absolute;";
+ arrow.innerHTML = "&nbsp;";
+ h.firstChild.appendChild(arrow);
+ arrow.onclick=function(){
+ scheduler.scrollUnit(pr.step*-1);
+ };
+ }
+ if (pr.position+pr.size<pr.options.length){
+ arrow = document.createElement("DIV");
+ arrow.className = "dhx_cal_next_button";
+ arrow.style.cssText="left:auto; right:0px;top:2px;position:absolute;";
+ arrow.innerHTML = "&nbsp;";
+ h.lastChild.appendChild(arrow);
+ arrow.onclick=function(){
+ scheduler.scrollUnit(pr.step);
+ };
+ }
+ }
+ }
+ return ret;
+
+ };
+ var r = scheduler._get_event_sday;
+ scheduler._get_event_sday=function(ev){
+ var pr = scheduler._props[this._mode];
+ if (pr){
+ fix_und(pr,ev);
+ return pr.order[ev[pr.map_to]]-pr.position;
+ }
+ return r.call(this,ev);
+ };
+ var l = scheduler.locate_holder_day;
+ scheduler.locate_holder_day=function(a,b,ev){
+ var pr = scheduler._props[this._mode];
+ if (pr && ev) {
+ fix_und(pr,ev);
+ return pr.order[ev[pr.map_to]]*1+(b?1:0)-pr.position;
+ }
+ return l.apply(this,arguments);
+ };
+
+ var o = scheduler._time_order;
+ scheduler._time_order = function(evs){
+ var pr = scheduler._props[this._mode];
+ if (pr){
+ evs.sort(function(a,b){
+ return pr.order[a[pr.map_to]]>pr.order[b[pr.map_to]]?1:-1;
+ });
+ } else
+ o.apply(this,arguments);
+ };
+ scheduler.attachEvent("onEventAdded",function(id,ev){
+ if (this._loading) return true;
+ for (var a in scheduler._props){
+ var pr = scheduler._props[a];
+ if (typeof ev[pr.map_to] == "undefined")
+ ev[pr.map_to] = pr.options[0].key;
+ }
+ return true;
+ });
+ scheduler.attachEvent("onEventCreated",function(id,n_ev){
+ var pr = scheduler._props[this._mode];
+ if (pr && n_ev){
+ var ev = this.getEvent(id);
+ var pos = this._mouse_coords(n_ev);
+ this._update_unit_section({view:pr, event:ev, pos:pos});
+ fix_und(pr,ev);
+ this.event_updated(ev);
+ }
+ return true;
+ });
+})();
diff --git a/codebase/sources/ext/dhtmlxscheduler_units.js.map b/codebase/sources/ext/dhtmlxscheduler_units.js.map
new file mode 100644
index 0000000..b53e25b
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_units.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_units.js.map","sources":["dhtmlxscheduler_units.js"],"names":["scheduler","_props","createUnitsView","name","property","list","size","step","skip_incorrect","map_to","options","position","length","_original_size","date","day_start","templates","day_date","_get_unit_index","unit_view","original_position","date_position","Math","floor","_correct_shift","_min_date","id","label","option","css","index","key","inc","add","attachEvent","pr","order","i","original_size","_date","_mode","setCurrentView","pos","this","_week_indexes_from_pos","_drag_event","_drag_id","_drag_mode","_dhx_changed","unit_ind","min","x","section","ev","getEvent","_update_unit_section","view","event","force_redraw","callEvent","action","scrollUnit","max","update_view","_removeIncorrectEvents","evs","correct_events","push","splice","apply","old_pre_render_events_table","_pre_render_events_table","hold","old_pre_render_events_line","_pre_render_events_line","fix_und","s","dx","ind","end_date","t","_reset_scale","oldive","is_visible_events","e","res","arguments","val","ret","_max_date","d","_els","childNodes","className","replace","h","arrow","document","createElement","style","cssText","innerHTML","firstChild","appendChild","onclick","lastChild","r","_get_event_sday","call","l","locate_holder_day","a","b","o","_time_order","sort","_loading","n_ev","_mouse_coords","event_updated"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_url.js b/codebase/sources/ext/dhtmlxscheduler_url.js
new file mode 100644
index 0000000..2a98978
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_url.js
@@ -0,0 +1,37 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onTemplatesReady",function(){
+ var first = true;
+ var s2d = scheduler.date.str_to_date("%Y-%m-%d");
+ var d2s = scheduler.date.date_to_str("%Y-%m-%d");
+ scheduler.attachEvent("onBeforeViewChange",function(om,od,m,d){
+ if (first){
+ first = false;
+ var p={};
+ var data=(document.location.hash||"").replace("#","").split(",");
+ for (var i=0; i < data.length; i++) {
+ var s = data[i].split("=");
+ if (s.length==2)
+ p[s[0]]=s[1];
+ }
+
+ if (p.date || p.mode){
+ try{
+ this.setCurrentView((p.date?s2d(p.date):null),(p.mode||null));
+ } catch(e){
+ //assuming that mode is not available anymore
+ this.setCurrentView((p.date?s2d(p.date):null),m);
+ }
+ return false;
+ }
+ }
+ var text = "#date="+d2s(d||od)+",mode="+(m||om);
+ document.location.hash = text;
+ return true;
+ });
+}); \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_url.js.map b/codebase/sources/ext/dhtmlxscheduler_url.js.map
new file mode 100644
index 0000000..6814ae0
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_url.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_url.js.map","sources":["dhtmlxscheduler_url.js"],"names":["scheduler","attachEvent","first","s2d","date","str_to_date","d2s","date_to_str","om","od","m","d","p","data","document","location","hash","replace","split","i","length","s","mode","this","setCurrentView","e","text"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WACtC,GAAIC,IAAQ,EACRC,EAAMH,UAAUI,KAAKC,YAAY,YACjCC,EAAMN,UAAUI,KAAKG,YAAY,WACrCP,WAAUC,YAAY,qBAAqB,SAASO,EAAGC,EAAGC,EAAEC,GACzD,GAAIT,EAAM,CACPA,GAAQ,CAGR,KAAK,GAFDU,MACAC,GAAMC,SAASC,SAASC,MAAM,IAAIC,QAAQ,IAAI,IAAIC,MAAM,KACnDC,EAAE,EAAGA,EAAIN,EAAKO,OAAQD,IAAK,CACnC,GAAIE,GAAIR,EAAKM,GAAGD,MAAM,IACR,IAAVG,EAAED,SACNR,EAAES,EAAE,IAAIA,EAAE,IAGX,GAAIT,EAAER,MAAQQ,EAAEU,KAAK,CACpB,IACGC,KAAKC,eAAgBZ,EAAER,KAAKD,EAAIS,EAAER,MAAM,KAAOQ,EAAEU,MAAM,MACzD,MAAMG,GAEPF,KAAKC,eAAgBZ,EAAER,KAAKD,EAAIS,EAAER,MAAM,KAAMM,GAE5C,OAAO,GAGb,GAAIgB,GAAO,SAASpB,EAAIK,GAAGF,GAAI,UAAUC,GAAGF,EAE5C;MADAM,UAASC,SAASC,KAAOU,GAClB"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_week_agenda.js b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js
new file mode 100644
index 0000000..fad882e
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js
@@ -0,0 +1,261 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler._wa = {};
+scheduler.xy.week_agenda_scale_height = 20;
+scheduler.templates.week_agenda_event_text = function(start_date, end_date, event, date) {
+ return scheduler.templates.event_date(start_date) + " " + event.text;
+};
+scheduler.date.week_agenda_start = scheduler.date.week_start;
+scheduler.date.week_agenda_end = function(date) {
+ return scheduler.date.add(date, 7, "day");
+};
+scheduler.date.add_week_agenda = function(date, inc) {
+ return scheduler.date.add(date, inc * 7, "day");
+};
+
+scheduler.attachEvent("onSchedulerReady", function() {
+ var t = scheduler.templates;
+ if (!t.week_agenda_date)
+ t.week_agenda_date = t.week_date;
+});
+
+(function() {
+ var scale_date_format = scheduler.date.date_to_str("%l, %F %d");
+ scheduler.templates.week_agenda_scale_date = function(date) {
+ return scale_date_format(date);
+ };
+})();
+
+scheduler.attachEvent("onTemplatesReady", function() {
+
+ scheduler.attachEvent("onSchedulerResize", function() {
+ if (this._mode == "week_agenda") {
+ this.week_agenda_view(true);
+ return false;
+ }
+ return true;
+ });
+
+ var old = scheduler.render_data;
+ scheduler.render_data = function(evs) {
+ if (this._mode == "week_agenda") {
+ scheduler.week_agenda_view(true);
+ } else
+ return old.apply(this, arguments);
+ };
+
+ var getColumnSizes = function() {
+ // widths
+ scheduler._cols = [];
+ var twidth = parseInt(scheduler._els['dhx_cal_data'][0].style.width);
+ scheduler._cols.push(Math.floor(twidth / 2));
+ scheduler._cols.push(twidth - scheduler._cols[0] - 1); // To add border between columns
+
+ // heights
+ scheduler._colsS = {
+ 0: [],
+ 1: []
+ };
+ var theight = parseInt(scheduler._els['dhx_cal_data'][0].style.height);
+ for (var i = 0; i < 3; i++) {
+ scheduler._colsS[0].push(Math.floor(theight / (3 - scheduler._colsS[0].length)));
+ theight -= scheduler._colsS[0][i];
+ }
+ scheduler._colsS[1].push(scheduler._colsS[0][0]);
+ scheduler._colsS[1].push(scheduler._colsS[0][1]);
+ // last two days
+ theight = scheduler._colsS[0][scheduler._colsS[0].length - 1];
+ scheduler._colsS[1].push(Math.floor(theight / 2));
+ scheduler._colsS[1].push(theight - scheduler._colsS[1][scheduler._colsS[1].length - 1]);
+ };
+ var fillWeekAgendaTab = function() {
+ getColumnSizes();
+ scheduler._els["dhx_cal_data"][0].innerHTML = '';
+ scheduler._rendered = [];
+ var html = '';
+ for (var i = 0; i < 2; i++) {
+ var width = scheduler._cols[i];
+ var column_css = 'dhx_wa_column';
+ if (i == 1)
+ column_css += ' dhx_wa_column_last';
+ html += "<div class='" + column_css + "' style='width: " + width + "px;'>";
+ for (var k = 0; k < scheduler._colsS[i].length; k++) {
+ var scale_height = scheduler.xy.week_agenda_scale_height - 2;
+ var height = scheduler._colsS[i][k] - scale_height - 2;
+ var day = Math.min(6, k * 2 + i);
+ html += "<div class='dhx_wa_day_cont'><div style='height:" + scale_height + "px; line-height:" + scale_height + "px;' class='dhx_wa_scale_bar'></div><div style='height:" + height + "px;' class='dhx_wa_day_data' day='" + day + "'></div></div>";
+ }
+ html += "</div>";
+ }
+ scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode + "_date"](scheduler._min_date, scheduler._max_date, scheduler._mode);
+ scheduler._els["dhx_cal_data"][0].innerHTML = html;
+ var all_divs = scheduler._els["dhx_cal_data"][0].getElementsByTagName('div');
+ var day_divs = [];
+ for (var i = 0; i < all_divs.length; i++) {
+ if (all_divs[i].className == 'dhx_wa_day_cont')
+ day_divs.push(all_divs[i]);
+ }
+ scheduler._wa._selected_divs = [];
+ var events = scheduler.get_visible_events(); // list of events to be displayed in current week
+ var tstart = scheduler.date.week_start(scheduler._date);
+ var tend = scheduler.date.add(tstart, 1, "day");
+ for (var i = 0; i < 7; i++) {
+ day_divs[i]._date = tstart;
+ var scale_bar = day_divs[i].childNodes[0];
+ var events_div = day_divs[i].childNodes[1];
+ scale_bar.innerHTML = scheduler.templates.week_agenda_scale_date(tstart);
+ var evs = []; // events which will be displayed in the current day
+ for (var j = 0; j < events.length; j++) {
+ var tev = events[j];
+ if (tev.start_date < tend && tev.end_date > tstart)
+ evs.push(tev);
+ }
+ evs.sort(function(a, b) {
+ if (a.start_date.valueOf() == b.start_date.valueOf())
+ return a.id > b.id ? 1 : -1;
+ return a.start_date > b.start_date ? 1 : -1;
+ });
+ for (var k = 0; k < evs.length; k++) {
+ var ev = evs[k];
+ var ev_div = document.createElement('div');
+ scheduler._rendered.push(ev_div);
+ var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev);
+ ev_div.className = 'dhx_wa_ev_body' + (ev_class ? (' ' + ev_class) : '');
+ if (ev._text_style)
+ ev_div.style.cssText = ev._text_style;
+ if (ev.color)
+ ev_div.style.background = ev.color;
+ if (ev.textColor)
+ ev_div.style.color = ev.textColor;
+ if (scheduler._select_id && ev.id == scheduler._select_id && !(!scheduler.config.week_agenda_select && scheduler.config.week_agenda_select !== undefined)) {
+ ev_div.className += " dhx_cal_event_selected";
+ scheduler._wa._selected_divs.push(ev_div);
+ }
+ var position = "";
+ if (!ev._timed) {
+ position = "middle";
+ if (ev.start_date.valueOf() >= tstart.valueOf() && ev.start_date.valueOf() <= tend.valueOf())
+ position = "start";
+ if (ev.end_date.valueOf() >= tstart.valueOf() && ev.end_date.valueOf() <= tend.valueOf())
+ position = "end";
+ }
+ ev_div.innerHTML = scheduler.templates.week_agenda_event_text(ev.start_date, ev.end_date, ev, tstart, position);
+ ev_div.setAttribute('event_id', ev.id);
+ events_div.appendChild(ev_div);
+ }
+ tstart = scheduler.date.add(tstart, 1, "day");
+ tend = scheduler.date.add(tend, 1, "day");
+ }
+ };
+ scheduler.week_agenda_view = function(mode) {
+ scheduler._min_date = scheduler.date.week_start(scheduler._date);
+ scheduler._max_date = scheduler.date.add(scheduler._min_date, 1, "week");
+ scheduler.set_sizes();
+ if (mode) { // mode enabled
+ scheduler._table_view = scheduler._allow_dnd = true;
+
+ // hiding default top border from dhx_cal_data
+ scheduler._wa._prev_data_border = scheduler._els['dhx_cal_data'][0].style.borderTop;
+ scheduler._els['dhx_cal_data'][0].style.borderTop = 0;
+ scheduler._els['dhx_cal_data'][0].style.overflowY = 'hidden';
+
+ // cleaning dhx_cal_date from the previous date
+ scheduler._els['dhx_cal_date'][0].innerHTML = "";
+
+ // 1 to make navline to be over data
+ scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top) - 20 - 1) + 'px';
+ scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height) + 20 + 1) + 'px';
+
+ scheduler._els['dhx_cal_header'][0].style.display = 'none';
+ fillWeekAgendaTab();
+ } else { // leaving week_agenda mode
+ scheduler._table_view = scheduler._allow_dnd = false;
+
+ // restoring default top border to dhx_cal_data
+ if (scheduler._wa._prev_data_border)
+ scheduler._els['dhx_cal_data'][0].style.borderTop = scheduler._wa._prev_data_border;
+
+ scheduler._els['dhx_cal_data'][0].style.overflowY = 'auto';
+ scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top) + 20) + 'px';
+ scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height) - 20) + 'px';
+ scheduler._els['dhx_cal_header'][0].style.display = 'block';
+ }
+ };
+ scheduler.mouse_week_agenda = function(pos) {
+ var native_event = pos.ev;
+ var src = native_event.srcElement || native_event.target;
+ var date;
+ while (src.parentNode) {
+ if (src._date)
+ date = src._date;
+ src = src.parentNode;
+ }
+ if (!date)
+ return pos;
+ pos.x = 0;
+ var diff = date.valueOf() - scheduler._min_date.valueOf();
+ pos.y = Math.ceil(( diff / (1000 * 60) ) / this.config.time_step);
+ if (this._drag_mode == 'move') {
+ var event_div;
+ this._drag_event._dhx_changed = true;
+ this._select_id = this._drag_id;
+ for (var i = 0; i < scheduler._rendered.length; i++) {
+ if (scheduler._drag_id == this._rendered[i].getAttribute('event_id'))
+ event_div = this._rendered[i];
+ }
+ if (!scheduler._wa._dnd) {
+ var div = event_div.cloneNode(true);
+ this._wa._dnd = div;
+ div.className = event_div.className;
+ div.id = 'dhx_wa_dnd';
+ div.className += ' dhx_wa_dnd';
+ document.body.appendChild(div);
+ }
+ var dnd_div = document.getElementById('dhx_wa_dnd');
+ dnd_div.style.top = ((native_event.pageY || native_event.clientY) + 20) + "px";
+ dnd_div.style.left = ((native_event.pageX || native_event.clientX) + 20) + "px";
+ }
+ return pos;
+ };
+ scheduler.attachEvent('onBeforeEventChanged', function(event_object, native_event, is_new) {
+ if (this._mode == 'week_agenda') {
+ if (this._drag_mode == 'move') {
+ var dnd = document.getElementById('dhx_wa_dnd');
+ dnd.parentNode.removeChild(dnd);
+ scheduler._wa._dnd = false;
+ }
+ }
+ return true;
+ });
+
+ scheduler.attachEvent("onEventSave", function(id, data, is_new_event) {
+ if (is_new_event && this._mode == 'week_agenda')
+ this._select_id = id;
+ return true;
+ });
+
+ scheduler._wa._selected_divs = [];
+
+ scheduler.attachEvent("onClick", function(event_id, native_event_object) {
+ if (this._mode == 'week_agenda' && !(!scheduler.config.week_agenda_select && scheduler.config.week_agenda_select !== undefined)) {
+ if (scheduler._wa._selected_divs) {
+ for (var i = 0; i < this._wa._selected_divs.length; i++) {
+ var div = this._wa._selected_divs[i];
+ div.className = div.className.replace(/ dhx_cal_event_selected/, '');
+ }
+ }
+ this.for_rendered(event_id, function(event_div) {
+ event_div.className += " dhx_cal_event_selected";
+ scheduler._wa._selected_divs.push(event_div);
+ });
+ scheduler.select(event_id);
+ return false;
+ }
+ return true;
+ });
+});
diff --git a/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map
new file mode 100644
index 0000000..696e0d2
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_week_agenda.js.map","sources":["dhtmlxscheduler_week_agenda.js"],"names":["scheduler","_wa","xy","week_agenda_scale_height","templates","week_agenda_event_text","start_date","end_date","event","event_date","text","date","week_agenda_start","week_start","week_agenda_end","add","add_week_agenda","inc","attachEvent","t","week_agenda_date","week_date","scale_date_format","date_to_str","week_agenda_scale_date","this","_mode","week_agenda_view","old","render_data","apply","arguments","getColumnSizes","_cols","twidth","parseInt","_els","style","width","push","Math","floor","_colsS",1,"theight","height","i","length","fillWeekAgendaTab","innerHTML","_rendered","html","column_css","k","scale_height","day","min","_min_date","_max_date","all_divs","getElementsByTagName","day_divs","className","_selected_divs","events","get_visible_events","tstart","_date","tend","scale_bar","childNodes","events_div","evs","j","tev","sort","a","b","valueOf","id","ev","ev_div","document","createElement","ev_class","event_class","_text_style","cssText","color","background","textColor","_select_id","config","week_agenda_select","undefined","position","_timed","setAttribute","appendChild","mode","set_sizes","_table_view","_allow_dnd","_prev_data_border","borderTop","overflowY","top","display","mouse_week_agenda","pos","native_event","src","srcElement","target","parentNode","x","diff","y","ceil","time_step","_drag_mode","event_div","_drag_event","_dhx_changed","_drag_id","getAttribute","_dnd","div","cloneNode","body","dnd_div","getElementById","pageY","clientY","left","pageX","clientX","dnd","removeChild","data","is_new_event","event_id","replace","for_rendered","select"],"mappings":"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"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_wp.js b/codebase/sources/ext/dhtmlxscheduler_wp.js
new file mode 100644
index 0000000..89da447
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_wp.js
@@ -0,0 +1,20 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.attachEvent("onLightBox",function(){
+ if (this._cover){
+ try{
+ this._cover.style.height = this.expanded ? "100%" : ((document.body.parentNode||document.body).scrollHeight+"px");
+ } catch(e) {}
+ }
+});
+
+scheduler.form_blocks.select.set_value=function(node,value,ev){
+ if (typeof value == "undefined" || value === "")
+ value = (node.firstChild.options[0]||{}).value;
+ node.firstChild.value=value||"";
+}; \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_wp.js.map b/codebase/sources/ext/dhtmlxscheduler_wp.js.map
new file mode 100644
index 0000000..1175527
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_wp.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_wp.js.map","sources":["dhtmlxscheduler_wp.js"],"names":["scheduler","attachEvent","this","_cover","style","height","expanded","document","body","parentNode","scrollHeight","e","form_blocks","select","set_value","node","value","firstChild","options"],"mappings":"AAAAA,UAAUC,YAAY,aAAa,WAClC,GAAIC,KAAKC,OACR,IACCD,KAAKC,OAAOC,MAAMC,OAASH,KAAKI,SAAW,QAAWC,SAASC,KAAKC,YAAYF,SAASC,MAAME,aAAa,KAC3G,MAAMC,OAIVX,UAAUY,YAAYC,OAAOC,UAAU,SAASC,EAAKC,IAChC,mBAATA,IAAkC,KAAVA,KAClCA,GAASD,EAAKE,WAAWC,QAAQ,QAAQF,OAC1CD,EAAKE,WAAWD,MAAMA,GAAO"} \ No newline at end of file
diff --git a/codebase/sources/ext/dhtmlxscheduler_year_view.js b/codebase/sources/ext/dhtmlxscheduler_year_view.js
new file mode 100644
index 0000000..ca2f5a4
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_year_view.js
@@ -0,0 +1,391 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+scheduler.config.year_x = 4;
+scheduler.config.year_y = 3;
+scheduler.xy.year_top = 0;
+
+scheduler.templates.year_date = function(date) {
+ return scheduler.date.date_to_str(scheduler.locale.labels.year_tab + " %Y")(date);
+};
+scheduler.templates.year_month = scheduler.date.date_to_str("%F");
+scheduler.templates.year_scale_date = scheduler.date.date_to_str("%D");
+scheduler.templates.year_tooltip = function(s, e, ev) {
+ return ev.text;
+};
+
+(function() {
+ var is_year_mode = function() {
+ return scheduler._mode == "year";
+ };
+
+ scheduler.dblclick_dhx_month_head = function(e) {
+ if (is_year_mode()) {
+ var t = (e.target || e.srcElement);
+ if (t.parentNode.className.indexOf("dhx_before") != -1 || t.parentNode.className.indexOf("dhx_after") != -1) return false;
+ var start = this.templates.xml_date(t.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("date"));
+ start.setDate(parseInt(t.innerHTML, 10));
+ var end = this.date.add(start, 1, "day");
+ if (!this.config.readonly && this.config.dblclick_create)
+ this.addEventNow(start.valueOf(), end.valueOf(), e);
+ }
+ };
+
+ var chid = scheduler.changeEventId;
+ scheduler.changeEventId = function() {
+ chid.apply(this, arguments);
+ if (is_year_mode())
+ this.year_view(true);
+ };
+
+
+ var old = scheduler.render_data;
+ var to_attr = scheduler.date.date_to_str("%Y/%m/%d");
+ var from_attr = scheduler.date.str_to_date("%Y/%m/%d");
+ scheduler.render_data = function(evs) {
+ if (!is_year_mode()) return old.apply(this, arguments);
+ for (var i = 0; i < evs.length; i++)
+ this._year_render_event(evs[i]);
+ };
+
+ var clear = scheduler.clear_view;
+ scheduler.clear_view = function() {
+ if (!is_year_mode()) return clear.apply(this, arguments);
+ var dates = scheduler._year_marked_cells,
+ div = null;
+ for (var date in dates) {
+ if (dates.hasOwnProperty(date)) {
+ div = dates[date];
+ div.className = "dhx_month_head";
+ div.setAttribute("date", "");
+ }
+ }
+ scheduler._year_marked_cells = {};
+ };
+
+ scheduler._hideToolTip = function() {
+ if (this._tooltip) {
+ this._tooltip.style.display = "none";
+ this._tooltip.date = new Date(9999, 1, 1);
+ }
+ };
+
+ scheduler._showToolTip = function(date, pos, e, src) {
+ if (this._tooltip) {
+ if (this._tooltip.date.valueOf() == date.valueOf()) return;
+ this._tooltip.innerHTML = "";
+ } else {
+ var t = this._tooltip = document.createElement("DIV");
+ t.className = "dhx_year_tooltip";
+ document.body.appendChild(t);
+ t.onclick = scheduler._click.dhx_cal_data;
+ }
+ var evs = this.getEvents(date, this.date.add(date, 1, "day"));
+ var html = "";
+
+ for (var i = 0; i < evs.length; i++) {
+ var ev = evs[i];
+ if(!this.filter_event(ev.id, ev))
+ continue;
+
+ var bg_color = (ev.color ? ("background:" + ev.color + ";") : "");
+ var color = (ev.textColor ? ("color:" + ev.textColor + ";") : "");
+
+ html += "<div class='dhx_tooltip_line' style='" + bg_color + "" + color + "' event_id='" + evs[i].id + "'>";
+ html += "<div class='dhx_tooltip_date' style='" + bg_color + "" + color + "'>" + (evs[i]._timed ? this.templates.event_date(evs[i].start_date) : "") + "</div>";
+ html += "<div class='dhx_event_icon icon_details'>&nbsp;</div>";
+ html += this.templates.year_tooltip(evs[i].start_date, evs[i].end_date, evs[i]) + "</div>";
+ }
+
+ this._tooltip.style.display = "";
+ this._tooltip.style.top = "0px";
+
+
+ if (document.body.offsetWidth - pos.left - this._tooltip.offsetWidth < 0)
+ this._tooltip.style.left = pos.left - this._tooltip.offsetWidth + "px";
+ else
+ this._tooltip.style.left = pos.left + src.offsetWidth + "px";
+
+ this._tooltip.date = date;
+ this._tooltip.innerHTML = html;
+
+ if (document.body.offsetHeight - pos.top - this._tooltip.offsetHeight < 0)
+ this._tooltip.style.top = pos.top - this._tooltip.offsetHeight + src.offsetHeight + "px";
+ else
+ this._tooltip.style.top = pos.top + "px";
+ };
+
+ scheduler._year_view_tooltip_handler = function(e){
+ if (!is_year_mode()) return;
+
+ var e = e || event;
+ var src = e.target || e.srcElement;
+ if (src.tagName.toLowerCase() == 'a') // fix for active links extension (it adds links to the date in the cell)
+ src = src.parentNode;
+ if ((src.className || "").indexOf("dhx_year_event") != -1)
+ scheduler._showToolTip(from_attr(src.getAttribute("date")), getOffset(src), e, src);
+ else
+ scheduler._hideToolTip();
+ };
+ scheduler._init_year_tooltip = function() {
+ scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._year_view_tooltip_handler);
+ dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._year_view_tooltip_handler);
+ };
+
+ scheduler.attachEvent("onSchedulerResize", function() {
+ if (is_year_mode()) {
+ this.year_view(true);
+ return false;
+ }
+ return true;
+ });
+ scheduler._get_year_cell = function(d) {
+ //there can be more than 1 year in view
+ //year can start not from January
+ var m = d.getMonth() + 12 * (d.getFullYear() - this._min_date.getFullYear()) - this.week_starts._month;
+ var t = this._els["dhx_cal_data"][0].childNodes[m];
+ var d = this.week_starts[m] + d.getDate() - 1;
+
+
+ return t.childNodes[2].firstChild.rows[Math.floor(d / 7)].cells[d % 7].firstChild;
+ };
+
+ scheduler._year_marked_cells = {};
+ scheduler._mark_year_date = function(d, ev) {
+ var date = to_attr(d);
+ var c = this._get_year_cell(d);
+ var ev_class = this.templates.event_class(ev.start_date, ev.end_date, ev);
+ if (!scheduler._year_marked_cells[date]) {
+ c.className = "dhx_month_head dhx_year_event";
+ c.setAttribute("date", date);
+ scheduler._year_marked_cells[date] = c;
+ }
+ c.className += (ev_class) ? (" "+ev_class) : "";
+ };
+ scheduler._unmark_year_date = function(d) {
+ this._get_year_cell(d).className = "dhx_month_head";
+ };
+ scheduler._year_render_event = function(ev) {
+ var d = ev.start_date;
+ if (d.valueOf() < this._min_date.valueOf())
+ d = this._min_date;
+ else d = this.date.date_part(new Date(d));
+
+ while (d < ev.end_date) {
+ this._mark_year_date(d, ev);
+ d = this.date.add(d, 1, "day");
+ if (d.valueOf() >= this._max_date.valueOf())
+ return;
+ }
+ };
+
+ scheduler.year_view = function(mode) {
+ var temp;
+ if (mode) {
+ temp = scheduler.xy.scale_height;
+ scheduler.xy.scale_height = -1;
+ }
+
+ scheduler._els["dhx_cal_header"][0].style.display = mode ? "none" : "";
+ scheduler.set_sizes();
+
+ if (mode)
+ scheduler.xy.scale_height = temp;
+
+
+ scheduler._table_view = mode;
+ if (this._load_mode && this._load()) return;
+
+ if (mode) {
+ scheduler._init_year_tooltip();
+ scheduler._reset_year_scale();
+ if (scheduler._load_mode && scheduler._load()){
+ scheduler._render_wait = true;
+ return;
+ }
+ scheduler.render_view_data();
+ } else {
+ scheduler._hideToolTip();
+ }
+ };
+ scheduler._reset_year_scale = function() {
+ this._cols = [];
+ this._colsS = {};
+ var week_starts = []; //start day of first week in each month
+ var b = this._els["dhx_cal_data"][0];
+
+ var c = this.config;
+ b.scrollTop = 0; //fix flickering in FF
+ b.innerHTML = "";
+
+ var dx = Math.floor(parseInt(b.style.width) / c.year_x);
+ var dy = Math.floor((parseInt(b.style.height) - scheduler.xy.year_top) / c.year_y);
+ if (dy < 190) {
+ dy = 190;
+ dx = Math.floor((parseInt(b.style.width) - scheduler.xy.scroll_width) / c.year_x);
+ }
+
+ var summ = dx - 11;
+ var left = 0;
+ var week_template = document.createElement("div");
+ var dummy_date = this.date.week_start(scheduler._currentDate());
+ for (var i = 0; i < 7; i++) {
+ this._cols[i] = Math.floor(summ / (7 - i));
+ this._render_x_header(i, left, dummy_date, week_template);
+ dummy_date = this.date.add(dummy_date, 1, "day");
+ summ -= this._cols[i];
+ left += this._cols[i];
+ }
+ week_template.lastChild.className += " dhx_scale_bar_last";
+
+ var sd = this.date[this._mode + "_start"](this.date.copy(this._date));
+ var ssd = sd;
+ var d = null;
+ for (var i = 0; i < c.year_y; i++)
+ for (var j = 0; j < c.year_x; j++) {
+ d = document.createElement("DIV");
+ d.style.cssText = "position:absolute;";
+ d.setAttribute("date", this.templates.xml_format(sd));
+ d.innerHTML = "<div class='dhx_year_month'></div><div class='dhx_year_week'>" + week_template.innerHTML + "</div><div class='dhx_year_body'></div>";
+ d.childNodes[0].innerHTML = this.templates.year_month(sd);
+
+ var dd = this.date.week_start(sd);
+ var ed = this._reset_month_scale(d.childNodes[2], sd, dd);
+
+ var r = d.childNodes[2].firstChild.rows;
+ for (var k=r.length; k<6; k++) {
+ r[0].parentNode.appendChild(r[0].cloneNode(true));
+ for (var ri= 0, len = r[k].childNodes.length; ri < len; ri++) {
+ r[k].childNodes[ri].className = "dhx_after";
+ r[k].childNodes[ri].firstChild.innerHTML = scheduler.templates.month_day(ed);
+ ed = scheduler.date.add(ed,1,"day");
+ }
+ }
+ b.appendChild(d);
+
+ d.childNodes[1].style.height = d.childNodes[1].childNodes[0].offsetHeight + "px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name)
+ var dt = Math.round((dy - 190) / 2);
+ d.style.marginTop = dt + "px";
+ this.set_xy(d, dx - 10, dy - dt - 10, dx * j + 5, dy * i + 5 + scheduler.xy.year_top);
+
+ week_starts[i * c.year_x + j] = (sd.getDay() - (this.config.start_on_monday ? 1 : 0) + 7) % 7;
+ sd = this.date.add(sd, 1, "month");
+
+ }
+ this._els["dhx_cal_date"][0].innerHTML = this.templates[this._mode + "_date"](ssd, sd, this._mode);
+ this.week_starts = week_starts;
+ week_starts._month = ssd.getMonth();
+ this._min_date = ssd;
+ this._max_date = sd;
+ };
+
+ var getActionData = scheduler.getActionData;
+ scheduler.getActionData = function(n_ev) {
+ if(!is_year_mode())
+ return getActionData.apply(scheduler, arguments);
+
+ var trg = n_ev?n_ev.target:event.srcElement;
+ var date = scheduler._get_year_month_date(trg);
+
+ var day = scheduler._get_year_month_cell(trg);
+ var pos = scheduler._get_year_day_indexes(day);
+
+ if(pos && date){
+ date = scheduler.date.add(date, pos.week, "week");
+ date = scheduler.date.add(date, pos.day, "day");
+ }else{
+ date = null;
+ }
+
+ return {
+ date:date,
+ section:null
+ };
+
+ };
+ scheduler._get_year_day_indexes = function(targetCell){
+ var month = scheduler._locate_year_month_table(targetCell);
+ if(!month)
+ return null;
+
+ var week = 0, day = 0;
+ for(var week = 0, weeks = month.rows.length; week < weeks;week ++){
+ var w = month.rows[week].getElementsByTagName("td");
+ for(var day = 0, days = w.length; day < days; day++){
+ if(w[day] == targetCell)
+ break;
+ }
+ if(day < days)
+ break;
+ }
+
+ if(week < weeks)
+ return {day:day, week:week};
+ else
+ return null;
+ };
+ scheduler._get_year_month_date = function (node){
+ var node = scheduler._locate_year_month_root(node);
+ if(!node)
+ return null;
+
+ var date = node.getAttribute("date");
+ if(!date)
+ return null;
+
+ return scheduler.date.week_start(scheduler.templates.xml_date(date));
+ };
+ scheduler._locate_year_month_day = function(n){
+ return n.className && n.className.indexOf("dhx_year_event") != -1 && n.hasAttribute && n.hasAttribute("date");
+ };
+
+ var locateEvent = scheduler._locate_event;
+ scheduler._locate_event = function(node) {
+ var id = locateEvent.apply(scheduler, arguments);
+ if(!id){
+ var day = scheduler._get_year_el_node(node, scheduler._locate_year_month_day);
+
+ if(!day || !day.hasAttribute("date")) return null;
+
+ var dat = scheduler.templates.xml_date(day.getAttribute("date"));
+ var evs = scheduler.getEvents(dat, scheduler.date.add(dat, 1, "day"));
+ if(!evs.length) return null;
+
+ //can be multiple events in the cell, return any single one
+ id = evs[0].id;
+ }
+ return id;
+ };
+ scheduler._locate_year_month_cell = function(n){
+ return n.nodeName.toLowerCase() == "td";
+ };
+ scheduler._locate_year_month_table = function(n){
+ return n.nodeName.toLowerCase() == "table";
+ };
+ scheduler._locate_year_month_root = function(n){
+ return n.hasAttribute && n.hasAttribute("date");
+ };
+
+ scheduler._get_year_month_cell = function(node){
+ return this._get_year_el_node(node, this._locate_year_month_cell);
+ };
+
+ scheduler._get_year_month_table = function(node){
+ return this._get_year_el_node (node, this._locate_year_month_table);
+ };
+ scheduler._get_year_month_root = function(node){
+ return this._get_year_el_node(this._get_year_month_table(node), this._locate_year_month_root);
+ };
+ scheduler._get_year_el_node = function(node, condition){
+ while(node && !condition(node)){
+ node = node.parentNode;
+ }
+ return node;
+ };
+
+
+})();
diff --git a/codebase/sources/ext/dhtmlxscheduler_year_view.js.map b/codebase/sources/ext/dhtmlxscheduler_year_view.js.map
new file mode 100644
index 0000000..303c604
--- /dev/null
+++ b/codebase/sources/ext/dhtmlxscheduler_year_view.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dhtmlxscheduler_year_view.js.map","sources":["dhtmlxscheduler_year_view.js"],"names":["scheduler","config","year_x","year_y","xy","year_top","templates","year_date","date","date_to_str","locale","labels","year_tab","year_month","year_scale_date","year_tooltip","s","e","ev","text","is_year_mode","_mode","dblclick_dhx_month_head","t","target","srcElement","parentNode","className","indexOf","start","this","xml_date","getAttribute","setDate","parseInt","innerHTML","end","add","readonly","dblclick_create","addEventNow","valueOf","chid","changeEventId","apply","arguments","year_view","old","render_data","to_attr","from_attr","str_to_date","evs","i","length","_year_render_event","clear","clear_view","dates","_year_marked_cells","div","hasOwnProperty","setAttribute","_hideToolTip","_tooltip","style","display","Date","_showToolTip","pos","src","document","createElement","body","appendChild","onclick","_click","dhx_cal_data","getEvents","html","filter_event","id","bg_color","color","textColor","_timed","event_date","start_date","end_date","top","left","offsetWidth","offsetHeight","_year_view_tooltip_handler","event","tagName","toLowerCase","getOffset","_init_year_tooltip","_detachDomEvent","_els","dhtmlxEvent","attachEvent","_get_year_cell","d","m","getMonth","getFullYear","_min_date","week_starts","_month","childNodes","getDate","firstChild","rows","Math","floor","cells","_mark_year_date","c","ev_class","event_class","_unmark_year_date","date_part","_max_date","mode","temp","scale_height","set_sizes","_table_view","_load_mode","_load","_reset_year_scale","_render_wait","render_view_data","_cols","_colsS","b","scrollTop","dx","width","dy","height","scroll_width","summ","week_template","dummy_date","week_start","_currentDate","_render_x_header","lastChild","sd","copy","_date","ssd","j","cssText","xml_format","dd","ed","_reset_month_scale","r","k","cloneNode","ri","len","month_day","dt","round","marginTop","set_xy","getDay","start_on_monday","getActionData","n_ev","trg","_get_year_month_date","day","_get_year_month_cell","_get_year_day_indexes","week","section","targetCell","month","_locate_year_month_table","weeks","w","getElementsByTagName","days","node","_locate_year_month_root","_locate_year_month_day","n","hasAttribute","locateEvent","_locate_event","_get_year_el_node","dat","_locate_year_month_cell","nodeName","_get_year_month_table","_get_year_month_root","condition"],"mappings":"AAAAA,UAAUC,OAAOC,OAAS,EAC1BF,UAAUC,OAAOE,OAAS,EAC1BH,UAAUI,GAAGC,SAAW,EAExBL,UAAUM,UAAUC,UAAY,SAASC,GACxC,MAAOR,WAAUQ,KAAKC,YAAYT,UAAUU,OAAOC,OAAOC,SAAW,OAAOJ,IAE7ER,UAAUM,UAAUO,WAAab,UAAUQ,KAAKC,YAAY,MAC5DT,UAAUM,UAAUQ,gBAAkBd,UAAUQ,KAAKC,YAAY,MACjET,UAAUM,UAAUS,aAAe,SAASC,EAAGC,EAAGC,GACjD,MAAOA,GAAGC,MAGX,WACC,GAAIC,GAAe,WAClB,MAA0B,QAAnBpB,UAAUqB,MAGlBrB,WAAUsB,wBAA0B,SAASL,GAC5C,GAAIG,IAAgB,CACnB,GAAIG,GAAKN,EAAEO,QAAUP,EAAEQ,UACvB;GAAoD,IAAhDF,EAAEG,WAAWC,UAAUC,QAAQ,eAAsE,IAA/CL,EAAEG,WAAWC,UAAUC,QAAQ,aAAoB,OAAO,CACpH,IAAIC,GAAQC,KAAKxB,UAAUyB,SAASR,EAAEG,WAAWA,WAAWA,WAAWA,WAAWA,WAAWA,WAAWM,aAAa,QACrHH,GAAMI,QAAQC,SAASX,EAAEY,UAAW,IACpC,IAAIC,GAAMN,KAAKtB,KAAK6B,IAAIR,EAAO,EAAG,QAC7BC,KAAK7B,OAAOqC,UAAYR,KAAK7B,OAAOsC,iBACxCT,KAAKU,YAAYX,EAAMY,UAAWL,EAAIK,UAAWxB,IAIpD,IAAIyB,GAAO1C,UAAU2C,aACrB3C,WAAU2C,cAAgB,WACzBD,EAAKE,MAAMd,KAAMe,WACbzB,KACHU,KAAKgB,WAAU;CAIjB,IAAIC,GAAM/C,UAAUgD,YAChBC,EAAUjD,UAAUQ,KAAKC,YAAY,YACrCyC,EAAYlD,UAAUQ,KAAK2C,YAAY,WAC3CnD,WAAUgD,YAAc,SAASI,GAChC,IAAKhC,IAAgB,MAAO2B,GAAIH,MAAMd,KAAMe,UAC5C,KAAK,GAAIQ,GAAI,EAAGA,EAAID,EAAIE,OAAQD,IAC/BvB,KAAKyB,mBAAmBH,EAAIC,IAG9B,IAAIG,GAAQxD,UAAUyD,UACtBzD,WAAUyD,WAAa,WACtB,IAAKrC,IAAgB,MAAOoC,GAAMZ,MAAMd,KAAMe,UAC9C,IAAIa,GAAQ1D,UAAU2D,mBACrBC,EAAM,IACP,KAAK,GAAIpD,KAAQkD,GACZA,EAAMG,eAAerD,KACxBoD,EAAMF,EAAMlD,GACZoD,EAAIjC,UAAY,iBAChBiC,EAAIE,aAAa,OAAQ,IAG3B9D,WAAU2D;EAGX3D,UAAU+D,aAAe,WACpBjC,KAAKkC,WACRlC,KAAKkC,SAASC,MAAMC,QAAU,OAC9BpC,KAAKkC,SAASxD,KAAO,GAAI2D,MAAK,KAAM,EAAG,KAIzCnE,UAAUoE,aAAe,SAAS5D,EAAM6D,EAAKpD,EAAGqD,GAC/C,GAAIxC,KAAKkC,SAAU,CAClB,GAAIlC,KAAKkC,SAASxD,KAAKiC,WAAajC,EAAKiC,UAAW,MACpDX,MAAKkC,SAAS7B,UAAY,OACpB,CACN,GAAIZ,GAAIO,KAAKkC,SAAWO,SAASC,cAAc,MAC/CjD,GAAEI,UAAY,mBACd4C,SAASE,KAAKC,YAAYnD,GAC1BA,EAAEoD,QAAU3E,UAAU4E,OAAOC,aAK9B,IAAK,GAHDzB,GAAMtB,KAAKgD,UAAUtE,EAAMsB,KAAKtB,KAAK6B,IAAI7B,EAAM,EAAG,QAClDuE,EAAO,GAEF1B,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACpC,GAAInC,GAAKkC,EAAIC,EACb;GAAIvB,KAAKkD,aAAa9D,EAAG+D,GAAI/D,GAA7B,CAGA,GAAIgE,GAAYhE,EAAGiE,MAAS,cAAgBjE,EAAGiE,MAAQ,IAAO,GAC1DA,EAASjE,EAAGkE,UAAa,SAAWlE,EAAGkE,UAAY,IAAO,EAE9DL,IAAQ,wCAA0CG,EAAgBC,EAAQ,eAAiB/B,EAAIC,GAAG4B,GAAK,KACvGF,GAAQ,wCAA0CG,EAAgBC,EAAQ,MAAQ/B,EAAIC,GAAGgC,OAASvD,KAAKxB,UAAUgF,WAAWlC,EAAIC,GAAGkC,YAAc,IAAM,SACvJR,GAAQ,wDACRA,GAAQjD,KAAKxB,UAAUS,aAAaqC,EAAIC,GAAGkC,WAAYnC,EAAIC,GAAGmC,SAAUpC,EAAIC,IAAM,UAGnFvB,KAAKkC,SAASC,MAAMC,QAAU,GAC9BpC,KAAKkC,SAASC,MAAMwB,IAAM,MAIzB3D,KAAKkC,SAASC,MAAMyB,KADjBnB,SAASE,KAAKkB,YAActB,EAAIqB,KAAO5D,KAAKkC,SAAS2B,YAAc,EAC3CtB,EAAIqB,KAAO5D,KAAKkC,SAAS2B,YAAc,KAEvCtB,EAAIqB,KAAOpB,EAAIqB,YAAc,KAEzD7D,KAAKkC,SAASxD,KAAOA,EACrBsB,KAAKkC,SAAS7B,UAAY4C,EAGzBjD,KAAKkC,SAASC,MAAMwB,IADjBlB,SAASE,KAAKmB,aAAevB,EAAIoB,IAAM3D,KAAKkC,SAAS4B,aAAe,EAC7CvB,EAAIoB,IAAM3D,KAAKkC,SAAS4B,aAAetB,EAAIsB,aAAe,KAE1DvB,EAAIoB,IAAM;EAGtCzF,UAAU6F,2BAA6B,SAAS5E,GAC/C,GAAKG,IAAL,CAEA,GAAIH,GAAIA,GAAK6E,MACTxB,EAAMrD,EAAEO,QAAUP,EAAEQ,UACS,MAA7B6C,EAAIyB,QAAQC,gBACf1B,EAAMA,EAAI5C,YAC4C,KAAlD4C,EAAI3C,WAAa,IAAIC,QAAQ,kBACjC5B,UAAUoE,aAAalB,EAAUoB,EAAItC,aAAa,SAAUiE,UAAU3B,GAAMrD,EAAGqD,GAE/EtE,UAAU+D,iBAEZ/D,UAAUkG,mBAAqB,WAC9BlG,UAAUmG,gBAAgBnG,UAAUoG,KAAmB,aAAE,GAAI,YAAapG,UAAU6F,4BACpFQ,YAAYrG,UAAUoG,KAAmB,aAAE,GAAI,YAAapG,UAAU6F;EAGvE7F,UAAUsG,YAAY,oBAAqB,WAC1C,MAAIlF,MACHU,KAAKgB,WAAU,IACR,IAED,IAER9C,UAAUuG,eAAiB,SAASC,GAGnC,GAAIC,GAAID,EAAEE,WAAa,IAAMF,EAAEG,cAAgB7E,KAAK8E,UAAUD,eAAiB7E,KAAK+E,YAAYC,OAC5FvF,EAAIO,KAAKsE,KAAmB,aAAE,GAAGW,WAAWN,GAC5CD,EAAI1E,KAAK+E,YAAYJ,GAAKD,EAAEQ,UAAY,CAG5C,OAAOzF,GAAEwF,WAAW,GAAGE,WAAWC,KAAKC,KAAKC,MAAMZ,EAAI,IAAIa,MAAMb,EAAI,GAAGS,YAGxEjH,UAAU2D,sBACV3D,UAAUsH,gBAAkB,SAASd,EAAGtF,GACvC,GAAIV,GAAOyC,EAAQuD,GACfe,EAAIzF,KAAKyE,eAAeC,GACxBgB,EAAW1F,KAAKxB,UAAUmH,YAAYvG,EAAGqE,WAAYrE,EAAGsE,SAAUtE,EACjElB;UAAU2D,mBAAmBnD,KACjC+G,EAAE5F,UAAY,gCACd4F,EAAEzD,aAAa,OAAQtD,GACvBR,UAAU2D,mBAAmBnD,GAAQ+G,GAEtCA,EAAE5F,WAAa,EAAc,IAAI6F,EAAY,IAE9CxH,UAAU0H,kBAAoB,SAASlB,GACtC1E,KAAKyE,eAAeC,GAAG7E,UAAY,kBAEpC3B,UAAUuD,mBAAqB,SAASrC,GACvC,GAAIsF,GAAItF,EAAGqE,UAKX,KAHCiB,EADGA,EAAE/D,UAAYX,KAAK8E,UAAUnE,UAC5BX,KAAK8E,UACD9E,KAAKtB,KAAKmH,UAAU,GAAIxD,MAAKqC,IAE/BA,EAAItF,EAAGsE,UAGb,GAFA1D,KAAKwF,gBAAgBd,EAAGtF,GACxBsF,EAAI1E,KAAKtB,KAAK6B,IAAImE,EAAG,EAAG,OACpBA,EAAE/D,WAAaX,KAAK8F,UAAUnF,UACjC;EAIHzC,UAAU8C,UAAY,SAAS+E,GAC9B,GAAIC,EAcJ,IAbID,IACHC,EAAO9H,UAAUI,GAAG2H,aACpB/H,UAAUI,GAAG2H,aAAe,IAG7B/H,UAAUoG,KAAqB,eAAE,GAAGnC,MAAMC,QAAU2D,EAAO,OAAS,GACpE7H,UAAUgI,YAENH,IACH7H,UAAUI,GAAG2H,aAAeD,GAG7B9H,UAAUiI,YAAcJ,GACpB/F,KAAKoG,aAAcpG,KAAKqG,QAE5B,GAAIN,EAAM,CAGT,GAFA7H,UAAUkG,qBACVlG,UAAUoI,oBACNpI,UAAUkI,YAAclI,UAAUmI,QAErC,YADAnI,UAAUqI,cAAe,EAG1BrI,WAAUsI,uBAEVtI,WAAU+D,gBAGZ/D,UAAUoI,kBAAoB,WAC7BtG,KAAKyG,SACLzG,KAAK0G,SACL;GAAI3B,MACA4B,EAAI3G,KAAKsE,KAAmB,aAAE,GAE9BmB,EAAIzF,KAAK7B,MACbwI,GAAEC,UAAY,EACdD,EAAEtG,UAAY,EAEd,IAAIwG,GAAKxB,KAAKC,MAAMlF,SAASuG,EAAExE,MAAM2E,OAASrB,EAAErH,QAC5C2I,EAAK1B,KAAKC,OAAOlF,SAASuG,EAAExE,MAAM6E,QAAU9I,UAAUI,GAAGC,UAAYkH,EAAEpH,OAClE,KAAL0I,IACHA,EAAK,IACLF,EAAKxB,KAAKC,OAAOlF,SAASuG,EAAExE,MAAM2E,OAAS5I,UAAUI,GAAG2I,cAAgBxB,EAAErH,QAO3E,KAAK,GAJD8I,GAAOL,EAAK,GACZjD,EAAO,EACPuD,EAAgB1E,SAASC,cAAc,OACvC0E,EAAapH,KAAKtB,KAAK2I,WAAWnJ,UAAUoJ,gBACvC/F,EAAI,EAAO,EAAJA,EAAOA,IACtBvB,KAAKyG,MAAMlF,GAAK8D,KAAKC,MAAM4B,GAAQ,EAAI3F,IACvCvB,KAAKuH,iBAAiBhG,EAAGqC,EAAMwD,EAAYD,GAC3CC,EAAapH,KAAKtB,KAAK6B,IAAI6G,EAAY,EAAG,OAC1CF,GAAQlH,KAAKyG,MAAMlF,GACnBqC,GAAQ5D,KAAKyG,MAAMlF,EAEpB4F;EAAcK,UAAU3H,WAAa,qBAKrC,KAAK,GAHD4H,GAAKzH,KAAKtB,KAAKsB,KAAKT,MAAQ,UAAUS,KAAKtB,KAAKgJ,KAAK1H,KAAK2H,QAC1DC,EAAMH,EACN/C,EAAI,KACCnD,EAAI,EAAGA,EAAIkE,EAAEpH,OAAQkD,IAC7B,IAAK,GAAIsG,GAAI,EAAGA,EAAIpC,EAAErH,OAAQyJ,IAAK,CAClCnD,EAAIjC,SAASC,cAAc,OAC3BgC,EAAEvC,MAAM2F,QAAU,qBAClBpD,EAAE1C,aAAa,OAAQhC,KAAKxB,UAAUuJ,WAAWN,IACjD/C,EAAErE,UAAY,gEAAkE8G,EAAc9G,UAAY,0CAC1GqE,EAAEO,WAAW,GAAG5E,UAAYL,KAAKxB,UAAUO,WAAW0I,EAMtD,KAAK,GAJDO,GAAKhI,KAAKtB,KAAK2I,WAAWI,GAC1BQ,EAAKjI,KAAKkI,mBAAmBxD,EAAEO,WAAW,GAAIwC,EAAIO,GAElDG,EAAIzD,EAAEO,WAAW,GAAGE,WAAWC,KAC1BgD,EAAED,EAAE3G,OAAU,EAAF4G,EAAKA,IAAK,CAC9BD,EAAE,GAAGvI,WAAWgD,YAAYuF,EAAE,GAAGE,WAAU,GAC3C;IAAK,GAAIC,GAAI,EAAGC,EAAMJ,EAAEC,GAAGnD,WAAWzD,OAAa+G,EAALD,EAAUA,IACrDH,EAAEC,GAAGnD,WAAWqD,GAAIzI,UAAY,YAChCsI,EAAEC,GAAGnD,WAAWqD,GAAInD,WAAW9E,UAAYnC,UAAUM,UAAUgK,UAAUP,GACzEA,EAAK/J,UAAUQ,KAAK6B,IAAI0H,EAAG,EAAE,OAGjCtB,EAAE/D,YAAY8B,GAEdA,EAAEO,WAAW,GAAG9C,MAAM6E,OAAStC,EAAEO,WAAW,GAAGA,WAAW,GAAGnB,aAAe,IAC5E,IAAI2E,GAAKpD,KAAKqD,OAAO3B,EAAK,KAAO,EACjCrC,GAAEvC,MAAMwG,UAAYF,EAAK,KACzBzI,KAAK4I,OAAOlE,EAAGmC,EAAK,GAAIE,EAAK0B,EAAK,GAAI5B,EAAKgB,EAAI,EAAGd,EAAKxF,EAAI,EAAIrD,UAAUI,GAAGC,UAE5EwG,EAAYxD,EAAIkE,EAAErH,OAASyJ,IAAMJ,EAAGoB,UAAY7I,KAAK7B,OAAO2K,gBAAkB,EAAI,GAAK,GAAK,EAC5FrB,EAAKzH,KAAKtB,KAAK6B,IAAIkH,EAAI,EAAG,SAG5BzH,KAAKsE,KAAmB,aAAE,GAAGjE,UAAYL,KAAKxB,UAAUwB,KAAKT,MAAQ,SAASqI,EAAKH,EAAIzH,KAAKT,OAC5FS,KAAK+E,YAAcA,EACnBA,EAAYC,OAAS4C,EAAIhD,WACzB5E,KAAK8E,UAAY8C,EACjB5H,KAAK8F,UAAY2B;CAGlB,IAAIsB,GAAgB7K,UAAU6K,aAC9B7K,WAAU6K,cAAgB,SAASC,GAClC,IAAI1J,IACH,MAAOyJ,GAAcjI,MAAM5C,UAAW6C,UAEvC,IAAIkI,GAAMD,EAAKA,EAAKtJ,OAAOsE,MAAMrE,WAC7BjB,EAAOR,UAAUgL,qBAAqBD,GAEtCE,EAAMjL,UAAUkL,qBAAqBH,GACrC1G,EAAMrE,UAAUmL,sBAAsBF,EAS1C,OAPG5G,IAAO7D,GACTA,EAAOR,UAAUQ,KAAK6B,IAAI7B,EAAM6D,EAAI+G,KAAM,QAC1C5K,EAAOR,UAAUQ,KAAK6B,IAAI7B,EAAM6D,EAAI4G,IAAK,QAEzCzK,EAAO,MAIPA,KAAKA,EACL6K,QAAQ,OAIVrL,UAAUmL,sBAAwB,SAASG,GAC1C,GAAIC,GAAQvL,UAAUwL,yBAAyBF,EAC/C,KAAIC,EACH,MAAO,KAGR,KAAI,GADAH,GAAO,EAAGH,EAAM,EACZG,EAAO,EAAGK,EAAQF,EAAMrE,KAAK5D,OAAemI,EAAPL,EAAaA,IAAQ,CAEjE,IAAI,GADAM,GAAIH,EAAMrE,KAAKkE,GAAMO,qBAAqB,MACtCV,EAAM,EAAGW,EAAOF,EAAEpI,OAAcsI,EAANX,GAC9BS,EAAET,IAAQK,EADgCL,KAI9C,GAASW,EAANX,EACF;CAGF,MAAUQ,GAAPL,GACMH,IAAIA,EAAKG,KAAKA,GAEf,MAETpL,UAAUgL,qBAAuB,SAAUa,GAC1C,GAAIA,GAAO7L,UAAU8L,wBAAwBD,EAC7C,KAAIA,EACH,MAAO,KAER,IAAIrL,GAAOqL,EAAK7J,aAAa,OAC7B,OAAIxB,GAGGR,UAAUQ,KAAK2I,WAAWnJ,UAAUM,UAAUyB,SAASvB,IAFtD,MAITR,UAAU+L,uBAAyB,SAASC,GAC3C,MAAOA,GAAErK,WAAsD,IAAzCqK,EAAErK,UAAUC,QAAQ,mBAA2BoK,EAAEC,cAAgBD,EAAEC,aAAa,QAGvG,IAAIC,GAAclM,UAAUmM,aAC5BnM,WAAUmM,cAAgB,SAASN,GAClC,GAAI5G,GAAKiH,EAAYtJ,MAAM5C,UAAW6C,UACtC,KAAIoC,EAAG,CACN,GAAIgG,GAAMjL,UAAUoM,kBAAkBP,EAAM7L,UAAU+L,uBAEtD;IAAId,IAAQA,EAAIgB,aAAa,QAAS,MAAO,KAE7C,IAAII,GAAMrM,UAAUM,UAAUyB,SAASkJ,EAAIjJ,aAAa,SACpDoB,EAAMpD,UAAU8E,UAAUuH,EAAKrM,UAAUQ,KAAK6B,IAAIgK,EAAK,EAAG,OAC9D,KAAIjJ,EAAIE,OAAQ,MAAO,KAGvB2B,GAAK7B,EAAI,GAAG6B,GAEb,MAAOA,IAERjF,UAAUsM,wBAA0B,SAASN,GAC5C,MAAmC,MAA5BA,EAAEO,SAASvG,eAEnBhG,UAAUwL,yBAA2B,SAASQ,GAC7C,MAAmC,SAA5BA,EAAEO,SAASvG,eAEnBhG,UAAU8L,wBAA0B,SAASE,GAC5C,MAAOA,GAAEC,cAAgBD,EAAEC,aAAa,SAGzCjM,UAAUkL,qBAAuB,SAASW,GACzC,MAAO/J,MAAKsK,kBAAkBP,EAAM/J,KAAKwK;EAG1CtM,UAAUwM,sBAAwB,SAASX,GAC1C,MAAO/J,MAAKsK,kBAAmBP,EAAM/J,KAAK0J,2BAE3CxL,UAAUyM,qBAAuB,SAASZ,GACzC,MAAO/J,MAAKsK,kBAAkBtK,KAAK0K,sBAAsBX,GAAO/J,KAAKgK,0BAEtE9L,UAAUoM,kBAAoB,SAASP,EAAMa,GAC5C,KAAMb,IAASa,EAAUb,IACxBA,EAAOA,EAAKnK,UAEb,OAAOmK"} \ No newline at end of file
diff --git a/codebase/sources/skins/dhtmlxscheduler.css b/codebase/sources/skins/dhtmlxscheduler.css
new file mode 100644
index 0000000..8c5fdb5
--- /dev/null
+++ b/codebase/sources/skins/dhtmlxscheduler.css
@@ -0,0 +1,2238 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+.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;
+ overflow: hidden;
+ 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: 300px;
+ width: 300px;
+ text-align: center;
+ position: fixed;
+ background-color: #fff;
+ background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ box-shadow: 0px 0px 14px #888;
+ font-family: Tahoma;
+ z-index: 20000;
+ border-radius: 6px;
+ border: 1px solid #ffffff;
+}
+.dhtmlx_popup_title {
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ border-width: 0px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+}
+.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: 5px;
+}
+.dhtmlx_popup_button,
+.dhtmlx_button {
+ height: 30px;
+ line-height: 30px;
+ display: inline-block;
+ margin: 0 5px;
+ border-radius: 6px;
+ color: #FFF;
+}
+.dhtmlx_popup_button {
+ min-width: 120px;
+}
+div.dhx_modal_cover {
+ background-color: #000;
+ cursor: default;
+ filter: 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_popup_title,
+.dhtmlx-confirm-error .dhtmlx_popup_title {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);
+}
+.dhtmlx-alert-error,
+.dhtmlx-confirm-error {
+ border: 1px solid #ff0000;
+}
+/*Skin section*/
+.dhtmlx_button,
+.dhtmlx_popup_button {
+ box-shadow: 0px 0px 4px #888;
+ border: 1px solid #838383;
+}
+.dhtmlx_button input,
+.dhtmlx_popup_button div {
+ border: 1px solid #FFF;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ border-radius: 6px;
+ font-size: 15px;
+ font-weight: normal;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ color: #fff;
+ padding: 0px;
+ margin: 0px;
+ vertical-align: top;
+ height: 28px;
+ line-height: 28px;
+}
+.dhtmlx_button input:focus,
+.dhtmlx_button input:active,
+.dhtmlx_popup_button div:active,
+.dhtmlx_popup_button div:focus {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+}
+.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: 0px 0px 10px #888;
+ 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 #B8B8B8;
+}
+.dhtmlx-error {
+ background-color: #d81b1b;
+ border: 1px solid #ff3c3c;
+ box-shadow: 0px 0px 10px #000;
+}
+.dhtmlx-error div {
+ background-color: #d81b1b;
+ border: 1px solid #940000;
+ color: #FFF;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event .dhx_title,
+.dhx_cal_event .dhx_body,
+.dhx_cal_event .dhx_footer {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ color: #887A2E;
+ overflow: hidden;
+ width: 100%;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_move_denied .dhx_cal_event .dhx_header,
+.dhx_move_denied .dhx_cal_event .dhx_title {
+ cursor: default;
+}
+.dhx_cal_event .dhx_header {
+ height: 1px;
+ margin-left: 1px;
+ border-width: 1px 1px 0px 1px;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_title {
+ height: 12px;
+ border-width: 0px 1px 1px 1px;
+ border-bottom-style: dotted;
+ font-size: 7pt;
+ font-weight: bold;
+ text-align: center;
+ background-position: right;
+ background-repeat: no-repeat;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event.dhx_cal_select_menu .dhx_body {
+ border-width: 0 1px 1px 1px;
+ padding: 5px;
+}
+.dhx_cal_event.dhx_cal_select_menu {
+ -webkit-box-shadow: 0 0 1px #FFF;
+ -moz-box-shadow: 0 0 1px #FFF;
+ box-shadow: 0 0 1px #FFF;
+}
+.dhx_resize_denied,
+.dhx_resize_denied .dhx_event_resize {
+ cursor: default !important;
+}
+.dhx_cal_event .dhx_event_resize {
+ cursor: s-resize;
+}
+.dhx_cal_event .dhx_footer,
+.dhx_cal_event .dhx_select_menu_footer {
+ height: 1px;
+ margin-left: 2px;
+ border-width: 0px 1px 1px 1px;
+ position: relative;
+}
+.dhx_cal_event_line {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ border-radius: 3px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 10px;
+ color: #887A2E;
+ cursor: pointer;
+ overflow: hidden;
+}
+.dhx_cal_event_clear {
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 2px;
+ color: #887A2E;
+ white-space: nowrap;
+ overflow: hidden;
+ cursor: pointer;
+}
+.dhx_in_move {
+ background-color: #FFFF80;
+}
+.dhx_cal_event.dhx_cal_editor {
+ border: 1px solid #B7A543;
+ border-top-style: dotted;
+ z-index: 999;
+ position: absolute;
+ overflow: hidden;
+}
+textarea.dhx_cal_editor {
+ width: 100%;
+ height: 100%;
+ border: 0 solid black;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+}
+div.dhx_menu_head {
+ background-image: url(imgs/controls.gif);
+ background-position: 0px -43px;
+ width: 10px;
+ height: 10px;
+ margin-left: 5px;
+ margin-top: 1px;
+ border: none;
+ cursor: default;
+}
+div.dhx_menu_icon {
+ background-image: url(imgs/controls.gif);
+ width: 20px;
+ height: 20px;
+ margin-left: -5px;
+ margin-top: 0px;
+ border: none;
+ cursor: pointer;
+}
+div.icon_details {
+ background-position: 0px 0px;
+}
+div.icon_edit {
+ background-position: -22px 0px;
+}
+div.icon_save {
+ background-position: -84px -1px;
+}
+div.icon_cancel {
+ background-position: -62px 0px;
+}
+div.icon_delete {
+ background-position: -42px 0px;
+}
+/*view more link in month view*/
+.dhx_month_link {
+ position: absolute;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ text-align: right;
+ cursor: pointer;
+ padding-right: 10px;
+}
+.dhx_month_link a {
+ color: blue;
+}
+.dhx_month_link a:hover {
+ text-decoration: underline;
+}
+.dhx_global_tip {
+ font-family: Tahoma, Helvetica;
+ text-align: center;
+ font-size: 20px;
+ position: fixed;
+ top: 60px;
+ right: 20px;
+ background-color: rgba(255, 255, 255, 0.7);
+ color: #000;
+ z-index: 10000;
+ padding: 20px 30px;
+ width: 190px;
+}
+.dhx_global_tip div {
+ font-size: 30px;
+}
+@media (-moz-touch-enabled) {
+ .dhx_cal_container {
+ user-select: none;
+ -moz-user-select: none;
+ }
+}
+.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: #FFE763;
+ border-radius: 5px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ border: 1px solid #B7A64B;
+ color: #887A2E;
+ position: absolute;
+ z-index: 10001;
+ width: 580px;
+ height: 300px;
+ box-shadow: 5px 5px 5px #888;
+}
+.dhx_cal_light_wide {
+ width: 650px;
+}
+.dhx_mark {
+ position: relative;
+ top: 3px;
+ background-image: url('imgs/controls.gif');
+ background-position: 0px -43px;
+ padding-left: 10px;
+}
+.dhx_ie6 .dhx_mark {
+ background-position: 6px -41px;
+}
+.dhx_cal_light select {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+ padding: 2px;
+ margin: 0px;
+}
+.dhx_cal_ltitle {
+ padding: 2px 0px 2px 5px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+.dhx_cal_ltitle span {
+ white-space: nowrap;
+}
+.dhx_cal_lsection {
+ background-color: #DBCF8C;
+ color: #FFF4B5;
+ font-weight: bold;
+ padding: 5px 0px 3px 10px;
+}
+.dhx_section_time {
+ background-color: #DBCF8C;
+ white-space: nowrap;
+}
+.dhx_cal_lsection .dhx_fullday {
+ float: right;
+ margin-right: 5px;
+ color: #887A2E;
+ font-size: 12px;
+ font-weight: normal;
+ line-height: 20px;
+ vertical-align: top;
+ cursor: pointer;
+}
+.dhx_cal_lsection {
+ font-size: 18px;
+ font-family: Arial;
+}
+.dhx_cal_ltext {
+ padding: 2px 0px 2px 10px;
+ overflow: hidden;
+}
+.dhx_cal_ltext textarea {
+ background-color: #FFF4B5;
+ /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */
+ overflow: auto;
+ border: none;
+ color: #887A2E;
+ 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 #DCC43E;
+ background-color: #FFF4B5;
+ overflow: hidden;
+ margin-left: 3px;
+ width: 572px;
+ height: 1px;
+}
+.dhx_btn_set {
+ padding: 5px 10px 0px 10px;
+ float: left;
+}
+.dhx_btn_set div {
+ float: left;
+ height: 21px;
+ line-height: 21px;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.dhx_save_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -84px 0px;
+ width: 21px;
+}
+.dhx_cancel_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -63px 0px;
+ width: 20px;
+}
+.dhx_delete_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -42px 0px;
+ 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: alpha(opacity=10);
+}
+.dhx_custom_button {
+ padding: 0px 3px 0px 3px;
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+ background-color: #FFE763;
+ 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 .dhx_cal_larea {
+ border-top-width: 0px;
+}
+.dhx_cal_light_wide .dhx_cal_lsection {
+ border: 0px;
+ float: left;
+ text-align: right;
+ width: 100px;
+ height: 20px;
+ font-size: 16px;
+ padding: 5px 0px 0px 10px;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ border-top: 1px solid #DBCF8C;
+ position: relative;
+ background-color: #DBCF8C;
+ overflow: hidden;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ padding-top: 2px !important;
+ height: 20px !important;
+}
+.dhx_section_time {
+ text-align: center;
+}
+.dhx_cal_light_wide .dhx_cal_larea {
+ width: 730px;
+}
+.dhx_cal_light_wide {
+ width: 738px;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ background: transparent;
+}
+.dhx_cal_light_wide .dhx_cal_checkbox label {
+ padding-left: 0px;
+}
+.dhx_cal_wide_checkbox input {
+ margin-top: 8px;
+ margin-left: 14px;
+}
+.dhx_cal_light input {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+}
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday {
+ float: none;
+ margin-right: 0px;
+ color: #FFF4B5;
+ font-weight: bold;
+ font-size: 16px;
+ font-family: Arial;
+ cursor: pointer;
+}
+.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_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_minical_popup {
+ position: absolute;
+ z-index: 10100;
+ width: 251px;
+ height: 175px;
+}
+.dhx_scale_bar_header {
+ position: absolute;
+ border-bottom: 1px dotted #8894A3;
+ width: 100%;
+}
+.dhx_expand_icon {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ background-image: url(imgs/collapse_expand_icon.gif);
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ background-position: 0px 18px;
+ z-index: 16;
+}
+.dhx_scheduler_agenda .dhx_cal_data {
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_area {
+ width: 100%;
+ overflow-y: auto;
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_agenda_line div {
+ float: left;
+ width: 188px;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_agenda_area .dhx_agenda_line div {
+ border-right: 0px dotted #8894A3;
+}
+.dhx_v_border {
+ position: absolute;
+ left: 187px;
+ top: 0;
+ border-right: 1px dotted #8894A3;
+ width: 1px;
+ height: 100%;
+}
+.dhx_agenda_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_agenda_line span {
+ padding-left: 5px;
+ line-height: 21px;
+}
+.dhx_year_body {
+ border-left: 1px dotted #586A7E;
+}
+.dhx_year_week {
+ position: relative;
+}
+.dhx_scale_bar_last {
+ border-right: 1px dotted #586A7E;
+}
+.dhx_year_month {
+ height: 18px;
+ padding-top: 3px;
+ border: 1px dotted #586A7E;
+ text-align: center;
+ vertical-align: middle;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head,
+.dhx_year_body .dhx_before .dhx_month_head a,
+.dhx_year_body .dhx_after .dhx_month_head a {
+ color: #E2E3E6 !important;
+}
+.dhx_year_body .dhx_month_body {
+ height: 0px;
+ overflow: hidden;
+}
+.dhx_month_head.dhx_year_event {
+ background-color: #FFE763;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head {
+ cursor: default;
+}
+.dhx_year_tooltip {
+ border: 1px solid #BBBBBB;
+ background-image: url(imgs/databg.png);
+ position: absolute;
+ z-index: 9998;
+ width: 300px;
+ height: auto;
+ font-family: Tahoma;
+ font-size: 8pt;
+ overflow: hidden;
+}
+.dhx_tooltip_line {
+ line-height: 20px;
+ height: 20px;
+ overflow: hidden;
+}
+.dhx_tooltip_line .dhx_event_icon {
+ width: 20px;
+ height: 20px;
+ padding-right: 10px;
+ float: left;
+ border-width: 0px;
+ position: relative;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_tooltip_date {
+ float: left;
+ width: auto;
+ padding-left: 5px;
+ text-align: center;
+}
+.dhx_text_disabled {
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_mini_calendar {
+ -moz-box-shadow: 5px 5px 5px #888;
+ /*Doesn't work in IE*/
+ -khtml-box-shadow: 5px 5px 5px #888;
+ -moz-user-select: -moz-none;
+ -webkit-user-select: none;
+ -user-select: none;
+}
+.dhx_mini_calendar .dhx_month_head {
+ cursor: pointer;
+}
+.dhx_mini_calendar .dhx_calendar_click {
+ background-color: #C2D5FC;
+}
+.dhx_cal_navline div.dhx_minical_icon {
+ width: 18px;
+ height: 18px;
+ left: 190px;
+ top: 1px;
+ cursor: pointer;
+ background-image: url(imgs/calendar.gif);
+}
+.dhx_matrix_scell {
+ height: 100%;
+}
+.dhx_matrix_cell,
+.dhx_matrix_scell {
+ overflow: hidden;
+ text-align: center;
+ vertical-align: middle;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_matrix_cell {
+ background-color: white;
+}
+.dhx_matrix_line {
+ overflow: hidden;
+}
+.dhx_matrix_cell div,
+.dhx_matrix_scell div {
+ overflow: hidden;
+ text-align: center;
+ height: auto;
+}
+.dhx_cal_lsection .dhx_readonly {
+ font-size: 9pt;
+ font-size: 8pt;
+ padding: 2px;
+ color: #887A2E;
+}
+.dhx_cal_event_line .dhx_event_resize {
+ cursor: w-resize;
+ background: url(imgs/resize_dots.png) repeat-y;
+ position: absolute;
+ top: 0;
+ width: 4px;
+ height: 100%;
+}
+.dhx_event_resize_start {
+ left: 0;
+}
+.dhx_event_resize_end {
+ right: 0;
+}
+/* Tree view */
+.dhx_matrix_scell.folder,
+.dhx_data_table.folder .dhx_matrix_cell {
+ background-color: #969394;
+ cursor: pointer;
+}
+.dhx_matrix_scell .dhx_scell_level0 {
+ padding-left: 5px;
+}
+.dhx_matrix_scell .dhx_scell_level1 {
+ padding-left: 20px;
+}
+.dhx_matrix_scell .dhx_scell_level2 {
+ padding-left: 35px;
+}
+.dhx_matrix_scell .dhx_scell_level3 {
+ padding-left: 50px;
+}
+.dhx_matrix_scell .dhx_scell_level4 {
+ padding-left: 65px;
+}
+.dhx_matrix_scell.folder {
+ font-weight: bold;
+ text-align: left;
+}
+.dhx_matrix_scell.folder .dhx_scell_expand {
+ float: left;
+ width: 10px;
+ padding-right: 3px;
+}
+.dhx_matrix_scell.folder .dhx_scell_name {
+ float: left;
+ width: auto;
+}
+.dhx_matrix_scell.item .dhx_scell_name {
+ padding-left: 15px;
+ text-align: left;
+}
+.dhx_data_table.folder .dhx_matrix_cell {
+ border-right: 0;
+}
+.dhx_section_timeline {
+ overflow: hidden;
+ padding: 4px 0 2px 10px;
+}
+.dhx_section_timeline select {
+ width: 552px;
+}
+/* Tree view end*/
+/* Map view */
+.dhx_map_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+ background-image: url(imgs/databg.png);
+}
+.dhx_map_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_map_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_map {
+ position: absolute;
+}
+.dhx_map_line div {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .dhx_map_description {
+ float: left;
+ border-right: 0 dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_date,
+.dhx_map_line .headline_description {
+ border-left: 0;
+}
+.dhx_map_line .line_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: left;
+ padding-left: 5px;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line.highlight {
+ background-color: #C4C5CC;
+}
+.dhx_map_area .dhx_map_line div {
+ border-right: 0px dotted #8894A3;
+}
+/* Map view end */
+/* dhtmlXTooltip start */
+.dhtmlXTooltip.tooltip {
+ -moz-box-shadow: 3px 3px 3px #888888;
+ -webkit-box-shadow: 3px 3px 3px #888888;
+ -o-box-shadow: 3px 3px 3px #888888;
+ box-shadow: 3px 3px 3px #888888;
+ filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);
+ background-color: white;
+ border-left: 1px dotted #887A2E;
+ border-top: 1px dotted #887A2E;
+ color: #887A2E;
+ cursor: default;
+ padding: 10px;
+ position: absolute;
+ z-index: 500;
+ font-family: Tahoma;
+ font-size: 8pt;
+ opacity: 1;
+}
+/* dhtmlXTooltip end */
+/* Lightbox checkbox section */
+.dhx_cal_checkbox label {
+ padding-left: 5px;
+}
+/* Lightbox checkbox section end */
+/* Lightbox radiobuttons section */
+.dhx_cal_light .radio {
+ padding: 2px 0px 2px 10px;
+}
+.dhx_cal_light .radio input,
+.dhx_cal_light .radio label {
+ line-height: 15px;
+}
+.dhx_cal_light .radio input {
+ vertical-align: middle;
+ margin: 0px;
+ padding: 0px;
+}
+.dhx_cal_light .radio label {
+ vertical-align: middle;
+ padding-right: 10px;
+}
+/* Lightbox radiobuttons section end */
+/* Lightbox dhtmlx combo section */
+.dhx_cal_light .combo {
+ padding: 4px;
+}
+.dhx_cal_light_wide .dhx_combo_box {
+ width: 608px !important;
+ left: 10px;
+}
+/* Lightbox dhtmlx combo section end */
+/* Agenda week start */
+.dhx_wa_column {
+ float: left;
+}
+.dhx_wa_column_last .dhx_wa_day_cont {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_wa_scale_bar {
+ font-family: Tahoma;
+ padding-left: 10px;
+ font-size: 11px;
+ border-top: 1px dotted #8894A3;
+ border-bottom: 1px dotted #8894A3;
+}
+.dhx_wa_day_data {
+ background-color: #FCFEFC;
+ overflow-y: auto;
+}
+.dhx_wa_ev_body {
+ border-bottom: 1px dotted #778899;
+ font-size: 12px;
+ padding: 5px 0 5px 7px;
+}
+.dhx_wa_dnd {
+ font-family: Tahoma;
+ position: absolute;
+ padding-right: 7px;
+ color: #887AE2 !important;
+ background-color: #FFE763 !important;
+ border: 1px solid #B7A543;
+}
+.dhx_cal_event_selected {
+ background-color: #9cc1db;
+ color: white;
+}
+/* Agenda week end */
+/* timeline second scale start */
+.dhx_second_scale_bar {
+ border-bottom: 1px dotted #586A7E;
+ padding-top: 2px;
+}
+/* timeline second scale end */
+/* grid view */
+.dhx_cal_header div div {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_grid_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ background-color: #FCFEFC;
+}
+.dhx_grid_area table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ width: 100%;
+ table-layout: fixed;
+}
+.dhx_grid_area td {
+ table-layout: fixed;
+ text-align: center;
+}
+.dhx_grid_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_grid_line div {
+ float: left;
+ cursor: default;
+ padding-top: 0;
+ padding-bottom: 0;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_grid_area td,
+.dhx_grid_line div {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.dhx_grid_area tr.dhx_grid_event {
+ height: 21px;
+ overflow: hidden;
+ margin: 0 0 1px 0;
+}
+.dhx_grid_area tr.dhx_grid_event td {
+ /*borders for old ies*/
+ border-bottom: 1px solid #ECEEF4;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td {
+ border-bottom-width: 0px;
+ border-bottom-style: none;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) {
+ background-color: #ECEEF4;
+}
+.dhx_grid_area .dhx_grid_dummy {
+ table-layout: auto;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+.dhx_grid_v_border {
+ position: absolute;
+ border-right: 1px solid #A4BED4;
+ width: 1px;
+ height: 100%;
+}
+.dhx_grid_event_selected {
+ background-color: #9cc1db !important;
+ color: white !important;
+}
+.dhx_grid_sort_desc .dhx_grid_view_sort {
+ background-position: 0 -55px;
+}
+.dhx_grid_sort_asc .dhx_grid_view_sort {
+ background-position: 0 -66px;
+}
+.dhx_grid_view_sort {
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ border: none !important;
+ top: 5px;
+ background-repeat: no-repeat;
+ background-image: url(imgs/images.png);
+}
+/* end grid */
+/* marked timespans */
+.dhx_marked_timespan {
+ position: absolute;
+ width: 100%;
+}
+.dhx_time_block {
+ position: absolute;
+ width: 100%;
+ background: silver;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+ z-index: 1;
+}
+.dhx_time_block_reset {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.dhx_scheduler_month .dhx_marked_timespan {
+ display: none;
+}
+.dhx_mini_calendar .dhx_marked_timespan {
+ display: none;
+}
+/* now time */
+.dhx_now_time {
+ width: 100%;
+ border-bottom: 2px solid red;
+ z-index: 1;
+}
+.dhx_scheduler_month .dhx_now_time {
+ border-bottom: 0;
+ border-left: 2px solid red;
+}
+.dhx_matrix_now_time {
+ border-left: 2px solid red;
+ z-index: 1;
+}
+.dhx_now_time,
+.dhx_matrix_now_time {
+ opacity: 0.5;
+}
+/* Quick info */
+.dhx_cal_quick_info {
+ border: 2px solid #888;
+ border-radius: 5px;
+ position: absolute;
+ z-index: 300;
+ background-color: #8e99ae;
+ background-color: rgba(98, 107, 127, 0.5);
+ padding-left: 7px;
+ 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 {
+ padding: 5px 0px 10px 5px;
+ color: #FFF;
+ letter-spacing: 1px;
+}
+.dhx_cal_qi_tdate {
+ font-size: 14px;
+}
+.dhx_cal_qi_tcontent {
+ font-size: 18px;
+ font-weight: bold;
+}
+.dhx_cal_qi_content {
+ border: 1px solid #888;
+ background-color: #fefefe;
+ padding: 16px 8px;
+ font-size: 14px;
+ color: #444;
+ width: 275px;
+ overflow: hidden;
+}
+.dhx_qi_big_icon {
+ border-radius: 3px;
+ color: #444;
+ margin: 5px 9px 5px 0px;
+ min-width: 60px;
+ line-height: 20px;
+ vertical-align: middle;
+ padding: 5px 10px 5px 5px;
+ cursor: pointer;
+ background-color: #fefefe;
+ border-bottom: 1px solid #666;
+ border-right: 1px solid #666;
+ float: left;
+}
+.dhx_cal_qi_controls div {
+ float: left;
+ height: 20px;
+ text-align: center;
+ line-height: 20px;
+}
+.dhx_qi_big_icon .dhx_menu_icon {
+ margin: 0 8px 0 0px;
+}
+.dhx_drag_marker {
+ width: 100%;
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+ opacity: 0.5;
+ background-color: #FFE763;
+ position: absolute;
+ box-sizing: border-box !important;
+ border-top: 1px solid #B6B6B6;
+ border-bottom: 1px solid #b6b6b6;
+}
+/* bootstrap CSS fix start */
+.dhx_cal_navline div,
+.dhx_cal_header,
+.dhx_cal_header div,
+.dhx_cal_data div,
+.dhx_cal_light,
+.dhx_cal_light div {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+.dhx_cal_light .dhx_cal_radio label {
+ margin-bottom: 0;
+}
+.dhx_cal_event div {
+ line-height: normal;
+}
+/* bootstrap CSS fix end */
+.dhx_cal_container {
+ background-color: #C2D5FC;
+ font-family: Tahoma;
+ font-size: 8pt;
+ position: relative;
+ overflow: hidden;
+}
+.dhx_cal_container div {
+ -moz-user-select: none;
+ -moz-user-select: -moz-none;
+}
+.dhx_cal_navline {
+ height: 20px;
+ position: absolute;
+ z-index: 3;
+ width: 750px;
+ color: #2F3A48;
+}
+.dhx_cal_navline div {
+ position: absolute;
+ top: 2px;
+ white-space: nowrap;
+}
+.dhx_cal_navline .dhx_cal_date {
+ font-weight: 600;
+ left: 210px;
+ padding-top: 1px;
+}
+.dhx_cal_button .dhx_left_bg {
+ width: 1px;
+ overflow: hidden;
+ height: 17px;
+ z-index: 20;
+ top: 0px;
+}
+.dhx_cal_prev_button {
+ background-image: url(imgs/buttons.png);
+ background-position: 0px 0px;
+ width: 29px;
+ height: 17px;
+ left: 50px;
+ cursor: pointer;
+}
+.dhx_cal_next_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -30px 0px;
+ width: 29px;
+ height: 17px;
+ left: 80px;
+ cursor: pointer;
+}
+.dhx_cal_today_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -60px 0px;
+ width: 75px;
+ height: 17px;
+ left: 112px;
+ cursor: pointer;
+ text-align: center;
+ text-decoration: underline;
+}
+.dhx_cal_tab {
+ width: 59px;
+ height: 19px;
+ text-align: center;
+ text-decoration: underline;
+ padding-top: 2px;
+ cursor: pointer;
+ background-color: #D8E1EA;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.dhx_cal_tab.active {
+ text-decoration: none;
+ cursor: default;
+ font-weight: bold;
+ border: 1px dotted #586A7E;
+ border-bottom: 0;
+ background-color: #C2D5FC;
+}
+.dhx_cal_header {
+ position: absolute;
+ left: 10px;
+ top: 23px;
+ width: 750px;
+ border-top: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+ z-index: 2;
+ overflow: hidden;
+ color: #2F3A48;
+}
+.dhx_cal_data {
+ -webkit-tap-highlight-color: transparent;
+ border-top: 1px dotted #8894A3;
+ position: absolute;
+ top: 44px;
+ width: 600px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ -webkit-overflow-scrolling: touch;
+}
+.dhx_cal_data {
+ -ms-touch-action: pan-y;
+}
+.dhx_cal_event,
+.dhx_cal_event_line,
+.dhx_cal_event_clear {
+ -ms-touch-action: none;
+}
+.dhx_scale_bar {
+ position: absolute;
+ text-align: center;
+ background-color: #C2D5FC;
+ padding-top: 3px;
+ border-left: 1px dotted #586A7E;
+}
+.dhx_scale_holder {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg.png);
+}
+.dhx_scale_holder_now {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg_now.png);
+}
+.dhx_scale_hour {
+ height: 41px;
+ width: 50px;
+ border-bottom: 1px dotted #8894A3;
+ background-color: #C2D5FC;
+ text-align: center;
+ line-height: 40px;
+ color: #586A7E;
+ overflow: hidden;
+}
+.dhx_month_head {
+ background-color: #EBEFF4;
+ color: #2F3A48;
+ height: 18px;
+ padding-right: 5px;
+ padding-top: 3px;
+ text-align: right;
+ border-right: 1px dotted #586A7E;
+}
+.dhx_month_body {
+ border-right: 1px dotted #586A7E;
+ border-bottom: 1px dotted #586A7E;
+ background-color: #FFFFFF;
+}
+.dhx_now .dhx_month_body {
+ background-color: #E2EDFF;
+}
+.dhx_after .dhx_month_body,
+.dhx_before .dhx_month_body {
+ background-color: #ECECEC;
+}
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head {
+ background-color: #E2E3E6;
+ color: #94A6BB;
+}
+.dhx_now .dhx_month_head {
+ background-color: #D1DEF4;
+ font-weight: bold;
+}
+.dhx_scale_ignore {
+ display: none;
+}
+.dhx_cal_drag {
+ position: absolute;
+ z-index: 9999;
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+.dhx_loading {
+ position: absolute;
+ width: 128px;
+ height: 15px;
+ background-image: url(imgs/loading.gif);
+ z-index: 9999;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day {
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day {
+ position: absolute;
+ border-top: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ background-position: center center;
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon {
+ background-image: url(imgs/clock_big.gif);
+}
+.dhx_multi_day_icon_small {
+ background-image: url(imgs/clock_small.gif);
+}
+.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container {
+ background-color: #d0e5ff;
+}
+/* left border config option support */
+.dhx_scale_hour_border,
+.dhx_month_body_border,
+.dhx_scale_bar_border,
+.dhx_month_head_border {
+ border-left: 1px dotted #8894A3;
+}
+/* export to PDF and iCal buttons start */
+.dhx_cal_navline .dhx_cal_export {
+ width: 18px;
+ height: 18px;
+ margin: 2px;
+ cursor: pointer;
+ top: 0px;
+}
+.dhx_cal_navline .dhx_cal_export.pdf {
+ left: 2px;
+ background-image: url('imgs/export_pdf.png');
+}
+.dhx_cal_navline .dhx_cal_export.ical {
+ left: 24px;
+ background-image: url('imgs/export_ical.png');
+}
+/* export to PDF and iCal buttons end */
+/*All*/
+.dhx_form_repeat,
+.dhx_form_repeat input {
+ padding: 0;
+ margin: 0;
+ padding-left: 5px;
+ font-family: Tahoma, Verdana;
+ font-size: 11px;
+ line-height: 24px;
+}
+.dhx_form_repeat {
+ overflow: hidden;
+ /*height:115px;*/
+ height: 0px;
+ background-color: #FFF4B5;
+ /*border: 1px solid #DCC43E;*/
+}
+.dhx_cal_light_wide .dhx_form_repeat {
+ background-color: transparent;
+}
+.dhx_repeat_center,
+.dhx_repeat_left {
+ height: 115px;
+ padding: 10px 0 10px 10px;
+ float: left;
+}
+.dhx_repeat_left {
+ width: 95px;
+}
+.dhx_repeat_center {
+ width: 335px;
+ margin-top: 12px;
+}
+.dhx_repeat_divider {
+ float: left;
+ height: 115px;
+ border-left: 1px dotted #DCC43E;
+ /*background-color: #DCC43E;*/
+ width: 1px;
+}
+.dhx_repeat_right {
+ float: right;
+ height: 115px;
+ width: 160px;
+ padding: 10px 3px 10px 10px;
+ margin-top: 7px;
+}
+input.dhx_repeat_text {
+ height: 16px;
+ width: 27px;
+ margin: 0 4px 0 4px;
+ line-height: 18px;
+ padding: 0 0 0 2px;
+}
+.dhx_form_repeat select {
+ height: 20px;
+ width: 87px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+}
+input.dhx_repeat_date {
+ height: 18px;
+ width: 80px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+ background-repeat: no-repeat;
+ background-position: 64px 0;
+ border: 1px #7f9db9 solid;
+ line-height: 18px;
+}
+input.dhx_repeat_radio {
+ margin-right: 4px;
+}
+input.dhx_repeat_checkbox {
+ margin: 4px 4px 0 0;
+}
+.dhx_repeat_days td {
+ padding-right: 5px;
+}
+.dhx_repeat_days label {
+ font-size: 10px;
+}
+.dhx_custom_button {
+ width: 90px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+.dhx_custom_button_recurring {
+ background-image: url(imgs/but_repeat.gif);
+ background-position: -5px 20px;
+ width: 20px;
+ margin-right: 10px;
+}
+/* increase width of lightbox */
+.dhx_cal_light_rec {
+ width: 640px;
+}
+.dhx_cal_light_rec .dhx_cal_larea {
+ width: 632px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide {
+ width: 816px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea {
+ width: 808px;
+}
+/* bootstrap CSS fix */
+.dhx_cal_navline div,
+.dhx_cal_header,
+.dhx_cal_header div,
+.dhx_cal_data div {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+.dhx_cal_event div {
+ line-height: normal;
+}
+/* event start */
+.dhx_cal_event .dhx_title {
+ border-width: 1px 1px 0 1px;
+ padding-top: 1px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ font-family: arial;
+ font-weight: bold;
+ font-size: 12px;
+ line-height: 12px;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event.dhx_cal_select_menu .dhx_body {
+ padding-bottom: 8px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event.dhx_cal_select_menu .dhx_footer {
+ display: none;
+}
+.dhx_cal_event .dhx_footer {
+ height: 5px;
+ border: 0;
+ margin-top: -6px;
+ background: url(imgs_dhx_terrace/resizing.png) no-repeat center center;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event .dhx_footer,
+.dhx_cal_event .dhx_body,
+.dhx_cal_event .dhx_title {
+ background-color: #1796b0;
+ border-color: transparent;
+ color: white;
+}
+.dhx_cal_event.dhx_cal_editor {
+ border: 1px solid transparent;
+}
+.dhx_cal_editor {
+ font-size: 12px;
+ font-family: Arial, sans-serif;
+}
+div.dhx_menu_head,
+div.dhx_menu_icon {
+ background-image: url(imgs_dhx_terrace/controls.png);
+}
+.dhx_cal_event_line {
+ border: 1px solid transparent;
+ background-color: #1796b0;
+ color: white;
+ height: 17px;
+ line-height: 17px;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+}
+.dhx_cal_event_line_start {
+ -webkit-border-top-left-radius: 9px;
+ -webkit-border-bottom-left-radius: 9px;
+ -moz-border-radius-topleft: 9px;
+ -moz-border-radius-bottomleft: 9px;
+ border-top-left-radius: 9px;
+ border-bottom-left-radius: 9px;
+}
+.dhx_cal_event_line_end {
+ -webkit-border-top-right-radius: 9px;
+ -webkit-border-bottom-right-radius: 9px;
+ -moz-border-radius-topright: 9px;
+ -moz-border-radius-bottomright: 9px;
+ border-top-right-radius: 9px;
+ border-bottom-right-radius: 9px;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event_line {
+ font-size: 12px;
+ font-family: Arial, sans-serif;
+}
+/* event end */
+/* scales, containers start */
+.dhx_cal_container {
+ background-color: white;
+}
+.dhx_cal_data {
+ border-top: 1px solid #CECECE;
+}
+.dhx_scale_holder {
+ background-image: url(imgs_dhx_terrace/databg.png);
+ border-right: 1px solid #CECECE;
+}
+.dhx_scale_holder_now {
+ background-image: url(imgs_dhx_terrace/databg_now.png);
+ border-right: 1px solid #CECECE;
+}
+.dhx_scale_hour {
+ border-bottom: 1px solid #CECECE;
+ background-color: white;
+ font: 11px/44px Arial;
+ color: #767676;
+}
+.dhx_cal_header {
+ border: 1px solid #CECECE;
+ border-left: 0;
+ border-bottom: 0;
+}
+.dhx_scale_bar {
+ border-left: 1px solid #CECECE;
+}
+.dhx_scale_bar {
+ font: 11px/16px Arial;
+ color: #767676;
+ padding-top: 2px;
+ background-color: white;
+}
+/* scales, containers end */
+/* navigation start */
+.dhx_cal_navline div {
+ top: 14px;
+}
+.dhx_cal_tab,
+.dhx_cal_date,
+.dhx_cal_today_button,
+.dhx_cal_prev_button,
+.dhx_cal_next_button {
+ color: #454544;
+ height: 30px;
+ line-height: 30px;
+ background: none;
+ border: 1px solid #CECECE;
+}
+.dhx_cal_navline .dhx_cal_date {
+ border: 0;
+ font-size: 18px;
+ font-weight: normal;
+ font-family: arial;
+ width: 100%;
+ top: 14px;
+ text-align: center;
+ position: absolute;
+ left: 0;
+ z-index: -1;
+}
+.dhx_cal_today_button {
+ color: #747473;
+ left: auto;
+ right: 123px;
+ background: none;
+ text-decoration: none;
+ width: 80px;
+ font-size: 12px;
+ font-weight: bold;
+ font-family: arial;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.dhx_cal_prev_button,
+.dhx_cal_next_button {
+ left: auto;
+ width: 46px;
+}
+.dhx_cal_prev_button {
+ right: 61px;
+ background: url(imgs_dhx_terrace/arrow_left.png) no-repeat center center;
+ -webkit-border-top-left-radius: 5px;
+ -webkit-border-bottom-left-radius: 5px;
+ -moz-border-radius-topleft: 5px;
+ -moz-border-radius-bottomleft: 5px;
+ border-top-left-radius: 5px;
+ border-bottom-left-radius: 5px;
+}
+.dhx_cal_next_button {
+ right: 14px;
+ background: url(imgs_dhx_terrace/arrow_right.png) no-repeat center center;
+ -webkit-border-top-right-radius: 5px;
+ -webkit-border-bottom-right-radius: 5px;
+ -moz-border-radius-topright: 5px;
+ -moz-border-radius-bottomright: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
+.dhx_cal_tab {
+ color: #747473;
+ width: 60px;
+ padding-top: 0;
+ text-decoration: none;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+ font-weight: bold;
+ font-family: arial;
+ font-size: 12px;
+}
+.dhx_cal_tab.active {
+ background-color: #F0EDE7;
+ color: #454544;
+ border: 1px solid #CECECE;
+ text-shadow: 0px 1px 0px white;
+}
+.dhx_cal_tab_first {
+ -webkit-border-top-left-radius: 5px;
+ -webkit-border-bottom-left-radius: 5px;
+ -moz-border-radius-topleft: 5px;
+ -moz-border-radius-bottomleft: 5px;
+ border-top-left-radius: 5px;
+ border-bottom-left-radius: 5px;
+}
+.dhx_cal_tab_last {
+ -webkit-border-top-right-radius: 5px;
+ -webkit-border-bottom-right-radius: 5px;
+ -moz-border-radius-topright: 5px;
+ -moz-border-radius-bottomright: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
+.dhx_cal_tab_standalone {
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ padding: 0 5px;
+}
+.dhx_multi_day,
+.dhx_multi_day_icon_small,
+.dhx_multi_day_icon {
+ background-color: white;
+}
+.dhx_multi_day {
+ border-top: 1px solid #CECECE;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ border-bottom: 1px solid #CECECE;
+ border-right: 1px solid #CECECE;
+}
+.dhx_multi_day_icon_small {
+ background-image: url(imgs_dhx_terrace/clock_small.gif);
+}
+.dhx_multi_day_icon {
+ background-image: url(imgs_dhx_terrace/clock_big.gif);
+}
+/* navigation end */
+/* month view start */
+.dhx_month_head,
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head,
+.dhx_after .dhx_month_body,
+.dhx_before .dhx_month_body {
+ background-color: white;
+}
+.dhx_month_head {
+ height: 21px;
+ padding-top: 0;
+ font: 12px/21px Arial;
+ color: #362d26;
+ border-right: 1px solid #CECECE;
+}
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head,
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head {
+ color: #bbbbbb;
+}
+.dhx_month_body {
+ border-right: 1px solid #CECECE;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_now .dhx_month_head,
+.dhx_now .dhx_month_body {
+ background-color: #FFF3A1;
+ font-weight: normal;
+}
+.dhx_cal_event_clear {
+ color: #0E64A0;
+}
+/* month view end */
+/* lightbox start */
+.dhx_cal_larea {
+ margin-left: 0;
+}
+.dhx_cal_light_wide .dhx_cal_larea {
+ margin-left: 3px;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ padding: 5px 0;
+}
+.dhx_cal_light,
+.dhx_cal_larea,
+.dhx_cal_lsection,
+.dhx_wrap_section,
+.dhx_cal_light_wide .dhx_wrap_section,
+.dhx_cal_ltext textarea {
+ background-color: white;
+}
+.dhx_cal_lsection,
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,
+.dhx_cal_lsection .dhx_fullday,
+.dhx_cal_light input {
+ color: #747473;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ border-top: 0;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_cal_larea {
+ border: 1px solid transparent;
+}
+.dhx_cal_ltext textarea,
+.dhx_cal_light select,
+.dhx_cal_light {
+ color: #2E2E2E;
+}
+.dhx_cal_light {
+ border: 1px solid #CECECE;
+}
+.dhx_cal_light_wide .dhx_cal_lsection,
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday {
+ font-size: 13px;
+}
+.dhx_section_time {
+ background-color: transparent;
+}
+.dhx_save_btn,
+.dhx_cancel_btn,
+.dhx_delete_btn,
+.dhx_btn_set div:first-child {
+ display: none;
+}
+.dhx_btn_set,
+.dhx_btn_set div {
+ height: 30px;
+ padding: 0 20px;
+ line-height: 30px;
+}
+.dhx_btn_set {
+ margin: 12px 0 0 0;
+ padding: 0;
+ font-size: 12px;
+ color: #454544;
+ font-weight: bold;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.dhx_left_btn_set {
+ margin-left: 20px;
+}
+.dhx_right_btn_set {
+ margin-right: 20px;
+}
+.dhx_save_btn_set {
+ border: 1px solid #22A1BC;
+ color: white;
+ text-shadow: 0px -1px 0px #6f6f6f;
+ background-color: #22A1BC;
+}
+.dhx_btn_set,
+.dhx_cancel_btn_set {
+ border: 1px solid #CECECE;
+}
+.dhx_delete_btn_set {
+ border: 1px solid #FF8831;
+ background-color: #FF8831;
+ color: white;
+ text-shadow: 0px -1px 0px #93755f;
+}
+.dhx_cal_ltitle {
+ height: 30px;
+ line-height: 30px;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_cal_ltitle span {
+ float: left;
+}
+.dhx_cal_light .dhx_title {
+ padding-left: 13px;
+}
+.dhx_mark {
+ display: none;
+}
+.dhx_time {
+ padding-left: 10px;
+}
+.dhx_close_icon {
+ float: right;
+ width: 9px;
+ height: 9px;
+ background: url(imgs_dhx_terrace/close_icon.png) no-repeat center center;
+ padding: 10px;
+ margin-top: 1px;
+}
+.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template {
+ line-height: 22px;
+}
+.dhx_cal_ltext textarea {
+ line-height: 20px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ border: 1px solid #CECECE;
+ background-color: #F9F9F9;
+}
+/* lightbox end */
+/* modal box */
+.dhtmlx_modal_box {
+ background: white;
+ width: 330px;
+}
+.dhtmlx_popup_controls {
+ padding-bottom: 9px;
+}
+.dhtmlx_popup_button,
+.dhtmlx_popup_button:active,
+.dhtmlx_popup_button div,
+.dhtmlx_popup_button div:active {
+ color: #444;
+ background: white;
+ box-shadow: none;
+}
+.dhtmlx_popup_button.dhtmlx_ok_button {
+ border: 1px solid #22A1BC;
+ background-color: #22A1BC;
+}
+.dhtmlx_popup_button.dhtmlx_ok_button div {
+ background: #22A1BC;
+ border: 1px solid #22A1BC;
+ color: white;
+ text-shadow: 0px -1px 0px #6f6f6f;
+}
+/* mobdal box end */
+/* minicalendar */
+.dhx_cal_container.dhx_mini_calendar {
+ box-sizing: border-box;
+ border: 1px solid #CECECE;
+ box-shadow: 2px 2px 5px #CCC;
+ border-radius: 3px;
+}
+.dhx_mini_calendar .dhx_year_month {
+ border: 1px solid #CECECE;
+ font-family: Arial;
+}
+.dhx_mini_calendar .dhx_month_head,
+.dhx_mini_calendar .dhx_year_month,
+.dhx_mini_calendar .dhx_month_body,
+.dhx_mini_calendar .dhx_scale_bar,
+.dhx_mini_calendar .dhx_year_body {
+ border-color: transparent;
+}
+.dhx_mini_calendar .dhx_year_body {
+ padding-top: 1px;
+}
+.dhx_mini_calendar .dhx_scale_bar {
+ border-width: 0;
+}
+.dhx_mini_calendar .dhx_year_week {
+ border-bottom: 1px solid #CECECE;
+ padding-top: 1px;
+}
+.dhx_mini_calendar .dhx_month_head {
+ padding-right: 0;
+ margin-right: 1px;
+ text-align: center;
+}
+.dhx_mini_calendar .dhx_cal_prev_button,
+.dhx_mini_calendar .dhx_cal_next_button {
+ border: 0;
+ height: 20px;
+}
+/* minicalendar end */
+.dhx_cal_navline div.dhx_minical_icon {
+ left: 210px;
+ top: 14px;
+ width: 30px;
+ height: 30px;
+ background: url(imgs_dhx_terrace/calendar.gif) no-repeat;
+ background-position: 3px 5px;
+}
+/* timeline */
+.dhx_cal_event_line .dhx_event_resize {
+ background: url(imgs_dhx_terrace/resize_dots.png) repeat-y;
+}
+.dhx_matrix_scell,
+.dhx_matrix_cell {
+ border-bottom: 1px solid #CECECE;
+ border-right: 1px solid #CECECE;
+}
+.dhx_cal_header div div {
+ border-left: 1px solid #CECECE;
+}
+.dhx_matrix_scell.folder {
+ border-right: 0;
+}
+.dhx_second_scale_bar {
+ border-bottom: 1px solid #CECECE;
+}
+/* timeline end */
+/* recurring */
+.dhx_repeat_divider {
+ border-left: 1px solid #CECECE;
+}
+.dhx_custom_button {
+ background-color: white;
+ border: 1px solid #CECECE;
+ color: #747473;
+}
+.dhx_cal_light_wide .dhx_custom_button {
+ margin-top: 6px;
+}
+.dhx_custom_button_recurring {
+ background-image: url(imgs_dhx_terrace/but_repeat.gif);
+}
+/* recurring end */
+/* agenda */
+.dhx_v_border,
+.dhx_agenda_line div {
+ border-right: 1px solid #CECECE;
+}
+/* agenda end */
+/* year */
+.dhx_year_month {
+ border: 1px solid #CECECE;
+}
+.dhx_scale_bar_last {
+ border-right: 1px solid #CECECE;
+}
+.dhx_year_body {
+ border-left: 1px solid #CECECE;
+}
+/* year end */
+/* expand */
+.dhx_expand_icon {
+ top: -3px;
+}
+/* expand end */
+/* units view */
+.dhx_scale_bar .dhx_cal_next_button,
+.dhx_scale_bar .dhx_cal_prev_button {
+ width: 20px;
+ height: 20px;
+ top: 0px !important;
+ border: 0;
+}
+.dhx_scale_bar .dhx_cal_next_button {
+ right: 1px !important;
+ border-left: 1px solid #CECECE;
+}
+.dhx_scale_bar .dhx_cal_prev_button {
+ left: 1px !important;
+ border-right: 1px solid #CECECE;
+}
+/* units view end */
+/* map view */
+.dhx_map_line .headline_date,
+.dhx_map_line .headline_description {
+ border: 0;
+}
+.dhx_map_line .headline_date {
+ border-right: 1px solid #CECECE;
+}
+/* map view end */
+/* tooltip start */
+.dhtmlXTooltip.tooltip {
+ border-left: 1px solid #CECECE;
+ border-top: 1px solid #CECECE;
+ color: #747473;
+ font-size: 12px;
+ line-height: 16px;
+}
+/* tooltip end */
+/* week agenda start */
+.dhx_wa_scale_bar {
+ border-top: 1px solid #CECECE;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_wa_column_last .dhx_wa_day_cont {
+ border-left: 1px solid #CECECE;
+}
+.dhx_wa_ev_body {
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_wa_scale_bar {
+ background-color: #f0ede7;
+}
+.dhx_wa_ev_body.dhx_cal_event_selected {
+ background-color: #fff3a1;
+ color: #362d26;
+}
+.dhx_wa_dnd {
+ background-color: #fddb93 !important;
+ color: #747473 !important;
+ border: 1px solid #ccb177;
+}
+/* week agenda end */
+/* readonly start */
+.dhx_text_disabled {
+ color: #2E2E2E;
+}
+.dhx_cal_ltext .dhx_text_disabled {
+ line-height: 22px;
+}
+/* readonly end */
+/* grid view start */
+.dhx_grid_v_border {
+ border-right-color: #CECECE;
+}
+/* grid view end*/
+/* left border support */
+.dhx_scale_hour_border,
+.dhx_month_body_border,
+.dhx_scale_bar_border,
+.dhx_month_head_border {
+ border-left: 1px solid #CECECE;
+}
+.dhx_cal_quick_info {
+ background: rgba(50, 50, 50, 0.5);
+}
+.dhx_qi_big_icon {
+ background: #1796b0;
+ color: white;
+}
+/* export to PDF and iCal buttons start */
+.dhx_cal_navline .dhx_cal_export {
+ width: 32px;
+ height: 32px;
+ margin: 2px;
+ cursor: pointer;
+ top: 12px;
+}
+.dhx_cal_navline .dhx_cal_export.pdf {
+ left: auto;
+ right: 249px;
+ background-image: url('imgs_dhx_terrace/export_pdf.png');
+}
+.dhx_cal_navline .dhx_cal_export.ical {
+ left: auto;
+ right: 210px;
+ background-image: url('imgs_dhx_terrace/export_ical.png');
+}
+/* export to PDF and iCal buttons end */
+/* minicalendar */
+.dhx_mini_calendar {
+ padding: 5px;
+}
+.dhx_mini_calendar .dhx_year_event,
+.dhx_mini_calendar .dhx_calendar_click {
+ border-radius: 7px;
+}
+.dhx_mini_calendar .dhx_month_head {
+ margin: 2px 2px;
+}
+.dhx_mini_calendar .dhx_year_month {
+ line-height: 20px;
+ height: 25px;
+ font-size: 14px;
+}
+.dhx_mini_calendar .dhx_cal_prev_button {
+ top: 8px !important;
+}
+.dhx_mini_calendar .dhx_cal_next_button {
+ top: 8px !important;
+}
diff --git a/codebase/sources/skins/dhtmlxscheduler_classic.css b/codebase/sources/skins/dhtmlxscheduler_classic.css
new file mode 100644
index 0000000..e322e05
--- /dev/null
+++ b/codebase/sources/skins/dhtmlxscheduler_classic.css
@@ -0,0 +1,1560 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+.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;
+ overflow: hidden;
+ 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: 300px;
+ width: 300px;
+ text-align: center;
+ position: fixed;
+ background-color: #fff;
+ background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ box-shadow: 0px 0px 14px #888;
+ font-family: Tahoma;
+ z-index: 20000;
+ border-radius: 6px;
+ border: 1px solid #ffffff;
+}
+.dhtmlx_popup_title {
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ border-width: 0px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+}
+.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: 5px;
+}
+.dhtmlx_popup_button,
+.dhtmlx_button {
+ height: 30px;
+ line-height: 30px;
+ display: inline-block;
+ margin: 0 5px;
+ border-radius: 6px;
+ color: #FFF;
+}
+.dhtmlx_popup_button {
+ min-width: 120px;
+}
+div.dhx_modal_cover {
+ background-color: #000;
+ cursor: default;
+ filter: 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_popup_title,
+.dhtmlx-confirm-error .dhtmlx_popup_title {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);
+}
+.dhtmlx-alert-error,
+.dhtmlx-confirm-error {
+ border: 1px solid #ff0000;
+}
+/*Skin section*/
+.dhtmlx_button,
+.dhtmlx_popup_button {
+ box-shadow: 0px 0px 4px #888;
+ border: 1px solid #838383;
+}
+.dhtmlx_button input,
+.dhtmlx_popup_button div {
+ border: 1px solid #FFF;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ border-radius: 6px;
+ font-size: 15px;
+ font-weight: normal;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ color: #fff;
+ padding: 0px;
+ margin: 0px;
+ vertical-align: top;
+ height: 28px;
+ line-height: 28px;
+}
+.dhtmlx_button input:focus,
+.dhtmlx_button input:active,
+.dhtmlx_popup_button div:active,
+.dhtmlx_popup_button div:focus {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+}
+.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: 0px 0px 10px #888;
+ 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 #B8B8B8;
+}
+.dhtmlx-error {
+ background-color: #d81b1b;
+ border: 1px solid #ff3c3c;
+ box-shadow: 0px 0px 10px #000;
+}
+.dhtmlx-error div {
+ background-color: #d81b1b;
+ border: 1px solid #940000;
+ color: #FFF;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event .dhx_title,
+.dhx_cal_event .dhx_body,
+.dhx_cal_event .dhx_footer {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ color: #887A2E;
+ overflow: hidden;
+ width: 100%;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_move_denied .dhx_cal_event .dhx_header,
+.dhx_move_denied .dhx_cal_event .dhx_title {
+ cursor: default;
+}
+.dhx_cal_event .dhx_header {
+ height: 1px;
+ margin-left: 1px;
+ border-width: 1px 1px 0px 1px;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_title {
+ height: 12px;
+ border-width: 0px 1px 1px 1px;
+ border-bottom-style: dotted;
+ font-size: 7pt;
+ font-weight: bold;
+ text-align: center;
+ background-position: right;
+ background-repeat: no-repeat;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event.dhx_cal_select_menu .dhx_body {
+ border-width: 0 1px 1px 1px;
+ padding: 5px;
+}
+.dhx_cal_event.dhx_cal_select_menu {
+ -webkit-box-shadow: 0 0 1px #FFF;
+ -moz-box-shadow: 0 0 1px #FFF;
+ box-shadow: 0 0 1px #FFF;
+}
+.dhx_resize_denied,
+.dhx_resize_denied .dhx_event_resize {
+ cursor: default !important;
+}
+.dhx_cal_event .dhx_event_resize {
+ cursor: s-resize;
+}
+.dhx_cal_event .dhx_footer,
+.dhx_cal_event .dhx_select_menu_footer {
+ height: 1px;
+ margin-left: 2px;
+ border-width: 0px 1px 1px 1px;
+ position: relative;
+}
+.dhx_cal_event_line {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ border-radius: 3px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 10px;
+ color: #887A2E;
+ cursor: pointer;
+ overflow: hidden;
+}
+.dhx_cal_event_clear {
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 2px;
+ color: #887A2E;
+ white-space: nowrap;
+ overflow: hidden;
+ cursor: pointer;
+}
+.dhx_in_move {
+ background-color: #FFFF80;
+}
+.dhx_cal_event.dhx_cal_editor {
+ border: 1px solid #B7A543;
+ border-top-style: dotted;
+ z-index: 999;
+ position: absolute;
+ overflow: hidden;
+}
+textarea.dhx_cal_editor {
+ width: 100%;
+ height: 100%;
+ border: 0 solid black;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+}
+div.dhx_menu_head {
+ background-image: url(imgs/controls.gif);
+ background-position: 0px -43px;
+ width: 10px;
+ height: 10px;
+ margin-left: 5px;
+ margin-top: 1px;
+ border: none;
+ cursor: default;
+}
+div.dhx_menu_icon {
+ background-image: url(imgs/controls.gif);
+ width: 20px;
+ height: 20px;
+ margin-left: -5px;
+ margin-top: 0px;
+ border: none;
+ cursor: pointer;
+}
+div.icon_details {
+ background-position: 0px 0px;
+}
+div.icon_edit {
+ background-position: -22px 0px;
+}
+div.icon_save {
+ background-position: -84px -1px;
+}
+div.icon_cancel {
+ background-position: -62px 0px;
+}
+div.icon_delete {
+ background-position: -42px 0px;
+}
+/*view more link in month view*/
+.dhx_month_link {
+ position: absolute;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ text-align: right;
+ cursor: pointer;
+ padding-right: 10px;
+}
+.dhx_month_link a {
+ color: blue;
+}
+.dhx_month_link a:hover {
+ text-decoration: underline;
+}
+.dhx_global_tip {
+ font-family: Tahoma, Helvetica;
+ text-align: center;
+ font-size: 20px;
+ position: fixed;
+ top: 60px;
+ right: 20px;
+ background-color: rgba(255, 255, 255, 0.7);
+ color: #000;
+ z-index: 10000;
+ padding: 20px 30px;
+ width: 190px;
+}
+.dhx_global_tip div {
+ font-size: 30px;
+}
+@media (-moz-touch-enabled) {
+ .dhx_cal_container {
+ user-select: none;
+ -moz-user-select: none;
+ }
+}
+.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: #FFE763;
+ border-radius: 5px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ border: 1px solid #B7A64B;
+ color: #887A2E;
+ position: absolute;
+ z-index: 10001;
+ width: 580px;
+ height: 300px;
+ box-shadow: 5px 5px 5px #888;
+}
+.dhx_cal_light_wide {
+ width: 650px;
+}
+.dhx_mark {
+ position: relative;
+ top: 3px;
+ background-image: url('imgs/controls.gif');
+ background-position: 0px -43px;
+ padding-left: 10px;
+}
+.dhx_ie6 .dhx_mark {
+ background-position: 6px -41px;
+}
+.dhx_cal_light select {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+ padding: 2px;
+ margin: 0px;
+}
+.dhx_cal_ltitle {
+ padding: 2px 0px 2px 5px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+.dhx_cal_ltitle span {
+ white-space: nowrap;
+}
+.dhx_cal_lsection {
+ background-color: #DBCF8C;
+ color: #FFF4B5;
+ font-weight: bold;
+ padding: 5px 0px 3px 10px;
+}
+.dhx_section_time {
+ background-color: #DBCF8C;
+ white-space: nowrap;
+}
+.dhx_cal_lsection .dhx_fullday {
+ float: right;
+ margin-right: 5px;
+ color: #887A2E;
+ font-size: 12px;
+ font-weight: normal;
+ line-height: 20px;
+ vertical-align: top;
+ cursor: pointer;
+}
+.dhx_cal_lsection {
+ font-size: 18px;
+ font-family: Arial;
+}
+.dhx_cal_ltext {
+ padding: 2px 0px 2px 10px;
+ overflow: hidden;
+}
+.dhx_cal_ltext textarea {
+ background-color: #FFF4B5;
+ /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */
+ overflow: auto;
+ border: none;
+ color: #887A2E;
+ 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 #DCC43E;
+ background-color: #FFF4B5;
+ overflow: hidden;
+ margin-left: 3px;
+ width: 572px;
+ height: 1px;
+}
+.dhx_btn_set {
+ padding: 5px 10px 0px 10px;
+ float: left;
+}
+.dhx_btn_set div {
+ float: left;
+ height: 21px;
+ line-height: 21px;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.dhx_save_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -84px 0px;
+ width: 21px;
+}
+.dhx_cancel_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -63px 0px;
+ width: 20px;
+}
+.dhx_delete_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -42px 0px;
+ 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: alpha(opacity=10);
+}
+.dhx_custom_button {
+ padding: 0px 3px 0px 3px;
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+ background-color: #FFE763;
+ 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 .dhx_cal_larea {
+ border-top-width: 0px;
+}
+.dhx_cal_light_wide .dhx_cal_lsection {
+ border: 0px;
+ float: left;
+ text-align: right;
+ width: 100px;
+ height: 20px;
+ font-size: 16px;
+ padding: 5px 0px 0px 10px;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ border-top: 1px solid #DBCF8C;
+ position: relative;
+ background-color: #DBCF8C;
+ overflow: hidden;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ padding-top: 2px !important;
+ height: 20px !important;
+}
+.dhx_section_time {
+ text-align: center;
+}
+.dhx_cal_light_wide .dhx_cal_larea {
+ width: 730px;
+}
+.dhx_cal_light_wide {
+ width: 738px;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ background: transparent;
+}
+.dhx_cal_light_wide .dhx_cal_checkbox label {
+ padding-left: 0px;
+}
+.dhx_cal_wide_checkbox input {
+ margin-top: 8px;
+ margin-left: 14px;
+}
+.dhx_cal_light input {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+}
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday {
+ float: none;
+ margin-right: 0px;
+ color: #FFF4B5;
+ font-weight: bold;
+ font-size: 16px;
+ font-family: Arial;
+ cursor: pointer;
+}
+.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_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_minical_popup {
+ position: absolute;
+ z-index: 10100;
+ width: 251px;
+ height: 175px;
+}
+.dhx_scale_bar_header {
+ position: absolute;
+ border-bottom: 1px dotted #8894A3;
+ width: 100%;
+}
+.dhx_expand_icon {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ background-image: url(imgs/collapse_expand_icon.gif);
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ background-position: 0px 18px;
+ z-index: 16;
+}
+.dhx_scheduler_agenda .dhx_cal_data {
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_area {
+ width: 100%;
+ overflow-y: auto;
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_agenda_line div {
+ float: left;
+ width: 188px;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_agenda_area .dhx_agenda_line div {
+ border-right: 0px dotted #8894A3;
+}
+.dhx_v_border {
+ position: absolute;
+ left: 187px;
+ top: 0;
+ border-right: 1px dotted #8894A3;
+ width: 1px;
+ height: 100%;
+}
+.dhx_agenda_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_agenda_line span {
+ padding-left: 5px;
+ line-height: 21px;
+}
+.dhx_year_body {
+ border-left: 1px dotted #586A7E;
+}
+.dhx_year_week {
+ position: relative;
+}
+.dhx_scale_bar_last {
+ border-right: 1px dotted #586A7E;
+}
+.dhx_year_month {
+ height: 18px;
+ padding-top: 3px;
+ border: 1px dotted #586A7E;
+ text-align: center;
+ vertical-align: middle;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head,
+.dhx_year_body .dhx_before .dhx_month_head a,
+.dhx_year_body .dhx_after .dhx_month_head a {
+ color: #E2E3E6 !important;
+}
+.dhx_year_body .dhx_month_body {
+ height: 0px;
+ overflow: hidden;
+}
+.dhx_month_head.dhx_year_event {
+ background-color: #FFE763;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head {
+ cursor: default;
+}
+.dhx_year_tooltip {
+ border: 1px solid #BBBBBB;
+ background-image: url(imgs/databg.png);
+ position: absolute;
+ z-index: 9998;
+ width: 300px;
+ height: auto;
+ font-family: Tahoma;
+ font-size: 8pt;
+ overflow: hidden;
+}
+.dhx_tooltip_line {
+ line-height: 20px;
+ height: 20px;
+ overflow: hidden;
+}
+.dhx_tooltip_line .dhx_event_icon {
+ width: 20px;
+ height: 20px;
+ padding-right: 10px;
+ float: left;
+ border-width: 0px;
+ position: relative;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_tooltip_date {
+ float: left;
+ width: auto;
+ padding-left: 5px;
+ text-align: center;
+}
+.dhx_text_disabled {
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_mini_calendar {
+ -moz-box-shadow: 5px 5px 5px #888;
+ /*Doesn't work in IE*/
+ -khtml-box-shadow: 5px 5px 5px #888;
+ -moz-user-select: -moz-none;
+ -webkit-user-select: none;
+ -user-select: none;
+}
+.dhx_mini_calendar .dhx_month_head {
+ cursor: pointer;
+}
+.dhx_mini_calendar .dhx_calendar_click {
+ background-color: #C2D5FC;
+}
+.dhx_cal_navline div.dhx_minical_icon {
+ width: 18px;
+ height: 18px;
+ left: 190px;
+ top: 1px;
+ cursor: pointer;
+ background-image: url(imgs/calendar.gif);
+}
+.dhx_matrix_scell {
+ height: 100%;
+}
+.dhx_matrix_cell,
+.dhx_matrix_scell {
+ overflow: hidden;
+ text-align: center;
+ vertical-align: middle;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_matrix_cell {
+ background-color: white;
+}
+.dhx_matrix_line {
+ overflow: hidden;
+}
+.dhx_matrix_cell div,
+.dhx_matrix_scell div {
+ overflow: hidden;
+ text-align: center;
+ height: auto;
+}
+.dhx_cal_lsection .dhx_readonly {
+ font-size: 9pt;
+ font-size: 8pt;
+ padding: 2px;
+ color: #887A2E;
+}
+.dhx_cal_event_line .dhx_event_resize {
+ cursor: w-resize;
+ background: url(imgs/resize_dots.png) repeat-y;
+ position: absolute;
+ top: 0;
+ width: 4px;
+ height: 100%;
+}
+.dhx_event_resize_start {
+ left: 0;
+}
+.dhx_event_resize_end {
+ right: 0;
+}
+/* Tree view */
+.dhx_matrix_scell.folder,
+.dhx_data_table.folder .dhx_matrix_cell {
+ background-color: #969394;
+ cursor: pointer;
+}
+.dhx_matrix_scell .dhx_scell_level0 {
+ padding-left: 5px;
+}
+.dhx_matrix_scell .dhx_scell_level1 {
+ padding-left: 20px;
+}
+.dhx_matrix_scell .dhx_scell_level2 {
+ padding-left: 35px;
+}
+.dhx_matrix_scell .dhx_scell_level3 {
+ padding-left: 50px;
+}
+.dhx_matrix_scell .dhx_scell_level4 {
+ padding-left: 65px;
+}
+.dhx_matrix_scell.folder {
+ font-weight: bold;
+ text-align: left;
+}
+.dhx_matrix_scell.folder .dhx_scell_expand {
+ float: left;
+ width: 10px;
+ padding-right: 3px;
+}
+.dhx_matrix_scell.folder .dhx_scell_name {
+ float: left;
+ width: auto;
+}
+.dhx_matrix_scell.item .dhx_scell_name {
+ padding-left: 15px;
+ text-align: left;
+}
+.dhx_data_table.folder .dhx_matrix_cell {
+ border-right: 0;
+}
+.dhx_section_timeline {
+ overflow: hidden;
+ padding: 4px 0 2px 10px;
+}
+.dhx_section_timeline select {
+ width: 552px;
+}
+/* Tree view end*/
+/* Map view */
+.dhx_map_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+ background-image: url(imgs/databg.png);
+}
+.dhx_map_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_map_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_map {
+ position: absolute;
+}
+.dhx_map_line div {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .dhx_map_description {
+ float: left;
+ border-right: 0 dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_date,
+.dhx_map_line .headline_description {
+ border-left: 0;
+}
+.dhx_map_line .line_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: left;
+ padding-left: 5px;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line.highlight {
+ background-color: #C4C5CC;
+}
+.dhx_map_area .dhx_map_line div {
+ border-right: 0px dotted #8894A3;
+}
+/* Map view end */
+/* dhtmlXTooltip start */
+.dhtmlXTooltip.tooltip {
+ -moz-box-shadow: 3px 3px 3px #888888;
+ -webkit-box-shadow: 3px 3px 3px #888888;
+ -o-box-shadow: 3px 3px 3px #888888;
+ box-shadow: 3px 3px 3px #888888;
+ filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);
+ background-color: white;
+ border-left: 1px dotted #887A2E;
+ border-top: 1px dotted #887A2E;
+ color: #887A2E;
+ cursor: default;
+ padding: 10px;
+ position: absolute;
+ z-index: 500;
+ font-family: Tahoma;
+ font-size: 8pt;
+ opacity: 1;
+}
+/* dhtmlXTooltip end */
+/* Lightbox checkbox section */
+.dhx_cal_checkbox label {
+ padding-left: 5px;
+}
+/* Lightbox checkbox section end */
+/* Lightbox radiobuttons section */
+.dhx_cal_light .radio {
+ padding: 2px 0px 2px 10px;
+}
+.dhx_cal_light .radio input,
+.dhx_cal_light .radio label {
+ line-height: 15px;
+}
+.dhx_cal_light .radio input {
+ vertical-align: middle;
+ margin: 0px;
+ padding: 0px;
+}
+.dhx_cal_light .radio label {
+ vertical-align: middle;
+ padding-right: 10px;
+}
+/* Lightbox radiobuttons section end */
+/* Lightbox dhtmlx combo section */
+.dhx_cal_light .combo {
+ padding: 4px;
+}
+.dhx_cal_light_wide .dhx_combo_box {
+ width: 608px !important;
+ left: 10px;
+}
+/* Lightbox dhtmlx combo section end */
+/* Agenda week start */
+.dhx_wa_column {
+ float: left;
+}
+.dhx_wa_column_last .dhx_wa_day_cont {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_wa_scale_bar {
+ font-family: Tahoma;
+ padding-left: 10px;
+ font-size: 11px;
+ border-top: 1px dotted #8894A3;
+ border-bottom: 1px dotted #8894A3;
+}
+.dhx_wa_day_data {
+ background-color: #FCFEFC;
+ overflow-y: auto;
+}
+.dhx_wa_ev_body {
+ border-bottom: 1px dotted #778899;
+ font-size: 12px;
+ padding: 5px 0 5px 7px;
+}
+.dhx_wa_dnd {
+ font-family: Tahoma;
+ position: absolute;
+ padding-right: 7px;
+ color: #887AE2 !important;
+ background-color: #FFE763 !important;
+ border: 1px solid #B7A543;
+}
+.dhx_cal_event_selected {
+ background-color: #9cc1db;
+ color: white;
+}
+/* Agenda week end */
+/* timeline second scale start */
+.dhx_second_scale_bar {
+ border-bottom: 1px dotted #586A7E;
+ padding-top: 2px;
+}
+/* timeline second scale end */
+/* grid view */
+.dhx_cal_header div div {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_grid_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ background-color: #FCFEFC;
+}
+.dhx_grid_area table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ width: 100%;
+ table-layout: fixed;
+}
+.dhx_grid_area td {
+ table-layout: fixed;
+ text-align: center;
+}
+.dhx_grid_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_grid_line div {
+ float: left;
+ cursor: default;
+ padding-top: 0;
+ padding-bottom: 0;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_grid_area td,
+.dhx_grid_line div {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.dhx_grid_area tr.dhx_grid_event {
+ height: 21px;
+ overflow: hidden;
+ margin: 0 0 1px 0;
+}
+.dhx_grid_area tr.dhx_grid_event td {
+ /*borders for old ies*/
+ border-bottom: 1px solid #ECEEF4;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td {
+ border-bottom-width: 0px;
+ border-bottom-style: none;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) {
+ background-color: #ECEEF4;
+}
+.dhx_grid_area .dhx_grid_dummy {
+ table-layout: auto;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+.dhx_grid_v_border {
+ position: absolute;
+ border-right: 1px solid #A4BED4;
+ width: 1px;
+ height: 100%;
+}
+.dhx_grid_event_selected {
+ background-color: #9cc1db !important;
+ color: white !important;
+}
+.dhx_grid_sort_desc .dhx_grid_view_sort {
+ background-position: 0 -55px;
+}
+.dhx_grid_sort_asc .dhx_grid_view_sort {
+ background-position: 0 -66px;
+}
+.dhx_grid_view_sort {
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ border: none !important;
+ top: 5px;
+ background-repeat: no-repeat;
+ background-image: url(imgs/images.png);
+}
+/* end grid */
+/* marked timespans */
+.dhx_marked_timespan {
+ position: absolute;
+ width: 100%;
+}
+.dhx_time_block {
+ position: absolute;
+ width: 100%;
+ background: silver;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+ z-index: 1;
+}
+.dhx_time_block_reset {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.dhx_scheduler_month .dhx_marked_timespan {
+ display: none;
+}
+.dhx_mini_calendar .dhx_marked_timespan {
+ display: none;
+}
+/* now time */
+.dhx_now_time {
+ width: 100%;
+ border-bottom: 2px solid red;
+ z-index: 1;
+}
+.dhx_scheduler_month .dhx_now_time {
+ border-bottom: 0;
+ border-left: 2px solid red;
+}
+.dhx_matrix_now_time {
+ border-left: 2px solid red;
+ z-index: 1;
+}
+.dhx_now_time,
+.dhx_matrix_now_time {
+ opacity: 0.5;
+}
+/* Quick info */
+.dhx_cal_quick_info {
+ border: 2px solid #888;
+ border-radius: 5px;
+ position: absolute;
+ z-index: 300;
+ background-color: #8e99ae;
+ background-color: rgba(98, 107, 127, 0.5);
+ padding-left: 7px;
+ 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 {
+ padding: 5px 0px 10px 5px;
+ color: #FFF;
+ letter-spacing: 1px;
+}
+.dhx_cal_qi_tdate {
+ font-size: 14px;
+}
+.dhx_cal_qi_tcontent {
+ font-size: 18px;
+ font-weight: bold;
+}
+.dhx_cal_qi_content {
+ border: 1px solid #888;
+ background-color: #fefefe;
+ padding: 16px 8px;
+ font-size: 14px;
+ color: #444;
+ width: 275px;
+ overflow: hidden;
+}
+.dhx_qi_big_icon {
+ border-radius: 3px;
+ color: #444;
+ margin: 5px 9px 5px 0px;
+ min-width: 60px;
+ line-height: 20px;
+ vertical-align: middle;
+ padding: 5px 10px 5px 5px;
+ cursor: pointer;
+ background-color: #fefefe;
+ border-bottom: 1px solid #666;
+ border-right: 1px solid #666;
+ float: left;
+}
+.dhx_cal_qi_controls div {
+ float: left;
+ height: 20px;
+ text-align: center;
+ line-height: 20px;
+}
+.dhx_qi_big_icon .dhx_menu_icon {
+ margin: 0 8px 0 0px;
+}
+.dhx_drag_marker {
+ width: 100%;
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+ opacity: 0.5;
+ background-color: #FFE763;
+ position: absolute;
+ box-sizing: border-box !important;
+ border-top: 1px solid #B6B6B6;
+ border-bottom: 1px solid #b6b6b6;
+}
+/* bootstrap CSS fix start */
+.dhx_cal_navline div,
+.dhx_cal_header,
+.dhx_cal_header div,
+.dhx_cal_data div,
+.dhx_cal_light,
+.dhx_cal_light div {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+.dhx_cal_light .dhx_cal_radio label {
+ margin-bottom: 0;
+}
+.dhx_cal_event div {
+ line-height: normal;
+}
+/* bootstrap CSS fix end */
+.dhx_cal_container {
+ background-color: #C2D5FC;
+ font-family: Tahoma;
+ font-size: 8pt;
+ position: relative;
+ overflow: hidden;
+}
+.dhx_cal_container div {
+ -moz-user-select: none;
+ -moz-user-select: -moz-none;
+}
+.dhx_cal_navline {
+ height: 20px;
+ position: absolute;
+ z-index: 3;
+ width: 750px;
+ color: #2F3A48;
+}
+.dhx_cal_navline div {
+ position: absolute;
+ top: 2px;
+ white-space: nowrap;
+}
+.dhx_cal_navline .dhx_cal_date {
+ font-weight: 600;
+ left: 210px;
+ padding-top: 1px;
+}
+.dhx_cal_button .dhx_left_bg {
+ width: 1px;
+ overflow: hidden;
+ height: 17px;
+ z-index: 20;
+ top: 0px;
+}
+.dhx_cal_prev_button {
+ background-image: url(imgs/buttons.png);
+ background-position: 0px 0px;
+ width: 29px;
+ height: 17px;
+ left: 50px;
+ cursor: pointer;
+}
+.dhx_cal_next_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -30px 0px;
+ width: 29px;
+ height: 17px;
+ left: 80px;
+ cursor: pointer;
+}
+.dhx_cal_today_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -60px 0px;
+ width: 75px;
+ height: 17px;
+ left: 112px;
+ cursor: pointer;
+ text-align: center;
+ text-decoration: underline;
+}
+.dhx_cal_tab {
+ width: 59px;
+ height: 19px;
+ text-align: center;
+ text-decoration: underline;
+ padding-top: 2px;
+ cursor: pointer;
+ background-color: #D8E1EA;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.dhx_cal_tab.active {
+ text-decoration: none;
+ cursor: default;
+ font-weight: bold;
+ border: 1px dotted #586A7E;
+ border-bottom: 0;
+ background-color: #C2D5FC;
+}
+.dhx_cal_header {
+ position: absolute;
+ left: 10px;
+ top: 23px;
+ width: 750px;
+ border-top: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+ z-index: 2;
+ overflow: hidden;
+ color: #2F3A48;
+}
+.dhx_cal_data {
+ -webkit-tap-highlight-color: transparent;
+ border-top: 1px dotted #8894A3;
+ position: absolute;
+ top: 44px;
+ width: 600px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ -webkit-overflow-scrolling: touch;
+}
+.dhx_cal_data {
+ -ms-touch-action: pan-y;
+}
+.dhx_cal_event,
+.dhx_cal_event_line,
+.dhx_cal_event_clear {
+ -ms-touch-action: none;
+}
+.dhx_scale_bar {
+ position: absolute;
+ text-align: center;
+ background-color: #C2D5FC;
+ padding-top: 3px;
+ border-left: 1px dotted #586A7E;
+}
+.dhx_scale_holder {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg.png);
+}
+.dhx_scale_holder_now {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg_now.png);
+}
+.dhx_scale_hour {
+ height: 41px;
+ width: 50px;
+ border-bottom: 1px dotted #8894A3;
+ background-color: #C2D5FC;
+ text-align: center;
+ line-height: 40px;
+ color: #586A7E;
+ overflow: hidden;
+}
+.dhx_month_head {
+ background-color: #EBEFF4;
+ color: #2F3A48;
+ height: 18px;
+ padding-right: 5px;
+ padding-top: 3px;
+ text-align: right;
+ border-right: 1px dotted #586A7E;
+}
+.dhx_month_body {
+ border-right: 1px dotted #586A7E;
+ border-bottom: 1px dotted #586A7E;
+ background-color: #FFFFFF;
+}
+.dhx_now .dhx_month_body {
+ background-color: #E2EDFF;
+}
+.dhx_after .dhx_month_body,
+.dhx_before .dhx_month_body {
+ background-color: #ECECEC;
+}
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head {
+ background-color: #E2E3E6;
+ color: #94A6BB;
+}
+.dhx_now .dhx_month_head {
+ background-color: #D1DEF4;
+ font-weight: bold;
+}
+.dhx_scale_ignore {
+ display: none;
+}
+.dhx_cal_drag {
+ position: absolute;
+ z-index: 9999;
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+.dhx_loading {
+ position: absolute;
+ width: 128px;
+ height: 15px;
+ background-image: url(imgs/loading.gif);
+ z-index: 9999;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day {
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day {
+ position: absolute;
+ border-top: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ background-position: center center;
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon {
+ background-image: url(imgs/clock_big.gif);
+}
+.dhx_multi_day_icon_small {
+ background-image: url(imgs/clock_small.gif);
+}
+.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container {
+ background-color: #d0e5ff;
+}
+/* left border config option support */
+.dhx_scale_hour_border,
+.dhx_month_body_border,
+.dhx_scale_bar_border,
+.dhx_month_head_border {
+ border-left: 1px dotted #8894A3;
+}
+/* export to PDF and iCal buttons start */
+.dhx_cal_navline .dhx_cal_export {
+ width: 18px;
+ height: 18px;
+ margin: 2px;
+ cursor: pointer;
+ top: 0px;
+}
+.dhx_cal_navline .dhx_cal_export.pdf {
+ left: 2px;
+ background-image: url('imgs/export_pdf.png');
+}
+.dhx_cal_navline .dhx_cal_export.ical {
+ left: 24px;
+ background-image: url('imgs/export_ical.png');
+}
+/* export to PDF and iCal buttons end */
+/*All*/
+.dhx_form_repeat,
+.dhx_form_repeat input {
+ padding: 0;
+ margin: 0;
+ padding-left: 5px;
+ font-family: Tahoma, Verdana;
+ font-size: 11px;
+ line-height: 24px;
+}
+.dhx_form_repeat {
+ overflow: hidden;
+ /*height:115px;*/
+ height: 0px;
+ background-color: #FFF4B5;
+ /*border: 1px solid #DCC43E;*/
+}
+.dhx_cal_light_wide .dhx_form_repeat {
+ background-color: transparent;
+}
+.dhx_repeat_center,
+.dhx_repeat_left {
+ height: 115px;
+ padding: 10px 0 10px 10px;
+ float: left;
+}
+.dhx_repeat_left {
+ width: 95px;
+}
+.dhx_repeat_center {
+ width: 335px;
+ margin-top: 12px;
+}
+.dhx_repeat_divider {
+ float: left;
+ height: 115px;
+ border-left: 1px dotted #DCC43E;
+ /*background-color: #DCC43E;*/
+ width: 1px;
+}
+.dhx_repeat_right {
+ float: right;
+ height: 115px;
+ width: 160px;
+ padding: 10px 3px 10px 10px;
+ margin-top: 7px;
+}
+input.dhx_repeat_text {
+ height: 16px;
+ width: 27px;
+ margin: 0 4px 0 4px;
+ line-height: 18px;
+ padding: 0 0 0 2px;
+}
+.dhx_form_repeat select {
+ height: 20px;
+ width: 87px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+}
+input.dhx_repeat_date {
+ height: 18px;
+ width: 80px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+ background-repeat: no-repeat;
+ background-position: 64px 0;
+ border: 1px #7f9db9 solid;
+ line-height: 18px;
+}
+input.dhx_repeat_radio {
+ margin-right: 4px;
+}
+input.dhx_repeat_checkbox {
+ margin: 4px 4px 0 0;
+}
+.dhx_repeat_days td {
+ padding-right: 5px;
+}
+.dhx_repeat_days label {
+ font-size: 10px;
+}
+.dhx_custom_button {
+ width: 90px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+.dhx_custom_button_recurring {
+ background-image: url(imgs/but_repeat.gif);
+ background-position: -5px 20px;
+ width: 20px;
+ margin-right: 10px;
+}
+/* increase width of lightbox */
+.dhx_cal_light_rec {
+ width: 640px;
+}
+.dhx_cal_light_rec .dhx_cal_larea {
+ width: 632px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide {
+ width: 816px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea {
+ width: 808px;
+}
diff --git a/codebase/sources/skins/dhtmlxscheduler_flat.css b/codebase/sources/skins/dhtmlxscheduler_flat.css
new file mode 100644
index 0000000..c2b8ee3
--- /dev/null
+++ b/codebase/sources/skins/dhtmlxscheduler_flat.css
@@ -0,0 +1,2343 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+.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;
+ overflow: hidden;
+ 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: 300px;
+ width: 300px;
+ text-align: center;
+ position: fixed;
+ background-color: #fff;
+ background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ box-shadow: 0px 0px 14px #888;
+ font-family: Tahoma;
+ z-index: 20000;
+ border-radius: 6px;
+ border: 1px solid #ffffff;
+}
+.dhtmlx_popup_title {
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ border-width: 0px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+}
+.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: 5px;
+}
+.dhtmlx_popup_button,
+.dhtmlx_button {
+ height: 30px;
+ line-height: 30px;
+ display: inline-block;
+ margin: 0 5px;
+ border-radius: 6px;
+ color: #FFF;
+}
+.dhtmlx_popup_button {
+ min-width: 120px;
+}
+div.dhx_modal_cover {
+ background-color: #000;
+ cursor: default;
+ filter: 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_popup_title,
+.dhtmlx-confirm-error .dhtmlx_popup_title {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);
+}
+.dhtmlx-alert-error,
+.dhtmlx-confirm-error {
+ border: 1px solid #ff0000;
+}
+/*Skin section*/
+.dhtmlx_button,
+.dhtmlx_popup_button {
+ box-shadow: 0px 0px 4px #888;
+ border: 1px solid #838383;
+}
+.dhtmlx_button input,
+.dhtmlx_popup_button div {
+ border: 1px solid #FFF;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ border-radius: 6px;
+ font-size: 15px;
+ font-weight: normal;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ color: #fff;
+ padding: 0px;
+ margin: 0px;
+ vertical-align: top;
+ height: 28px;
+ line-height: 28px;
+}
+.dhtmlx_button input:focus,
+.dhtmlx_button input:active,
+.dhtmlx_popup_button div:active,
+.dhtmlx_popup_button div:focus {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+}
+.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: 0px 0px 10px #888;
+ 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 #B8B8B8;
+}
+.dhtmlx-error {
+ background-color: #d81b1b;
+ border: 1px solid #ff3c3c;
+ box-shadow: 0px 0px 10px #000;
+}
+.dhtmlx-error div {
+ background-color: #d81b1b;
+ border: 1px solid #940000;
+ color: #FFF;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event .dhx_title,
+.dhx_cal_event .dhx_body,
+.dhx_cal_event .dhx_footer {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ color: #887A2E;
+ overflow: hidden;
+ width: 100%;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_move_denied .dhx_cal_event .dhx_header,
+.dhx_move_denied .dhx_cal_event .dhx_title {
+ cursor: default;
+}
+.dhx_cal_event .dhx_header {
+ height: 1px;
+ margin-left: 1px;
+ border-width: 1px 1px 0px 1px;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_title {
+ height: 12px;
+ border-width: 0px 1px 1px 1px;
+ border-bottom-style: dotted;
+ font-size: 7pt;
+ font-weight: bold;
+ text-align: center;
+ background-position: right;
+ background-repeat: no-repeat;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event.dhx_cal_select_menu .dhx_body {
+ border-width: 0 1px 1px 1px;
+ padding: 5px;
+}
+.dhx_cal_event.dhx_cal_select_menu {
+ -webkit-box-shadow: 0 0 1px #FFF;
+ -moz-box-shadow: 0 0 1px #FFF;
+ box-shadow: 0 0 1px #FFF;
+}
+.dhx_resize_denied,
+.dhx_resize_denied .dhx_event_resize {
+ cursor: default !important;
+}
+.dhx_cal_event .dhx_event_resize {
+ cursor: s-resize;
+}
+.dhx_cal_event .dhx_footer,
+.dhx_cal_event .dhx_select_menu_footer {
+ height: 1px;
+ margin-left: 2px;
+ border-width: 0px 1px 1px 1px;
+ position: relative;
+}
+.dhx_cal_event_line {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ border-radius: 3px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 10px;
+ color: #887A2E;
+ cursor: pointer;
+ overflow: hidden;
+}
+.dhx_cal_event_clear {
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 2px;
+ color: #887A2E;
+ white-space: nowrap;
+ overflow: hidden;
+ cursor: pointer;
+}
+.dhx_in_move {
+ background-color: #FFFF80;
+}
+.dhx_cal_event.dhx_cal_editor {
+ border: 1px solid #B7A543;
+ border-top-style: dotted;
+ z-index: 999;
+ position: absolute;
+ overflow: hidden;
+}
+textarea.dhx_cal_editor {
+ width: 100%;
+ height: 100%;
+ border: 0 solid black;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+}
+div.dhx_menu_head {
+ background-image: url(imgs/controls.gif);
+ background-position: 0px -43px;
+ width: 10px;
+ height: 10px;
+ margin-left: 5px;
+ margin-top: 1px;
+ border: none;
+ cursor: default;
+}
+div.dhx_menu_icon {
+ background-image: url(imgs/controls.gif);
+ width: 20px;
+ height: 20px;
+ margin-left: -5px;
+ margin-top: 0px;
+ border: none;
+ cursor: pointer;
+}
+div.icon_details {
+ background-position: 0px 0px;
+}
+div.icon_edit {
+ background-position: -22px 0px;
+}
+div.icon_save {
+ background-position: -84px -1px;
+}
+div.icon_cancel {
+ background-position: -62px 0px;
+}
+div.icon_delete {
+ background-position: -42px 0px;
+}
+/*view more link in month view*/
+.dhx_month_link {
+ position: absolute;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ text-align: right;
+ cursor: pointer;
+ padding-right: 10px;
+}
+.dhx_month_link a {
+ color: blue;
+}
+.dhx_month_link a:hover {
+ text-decoration: underline;
+}
+.dhx_global_tip {
+ font-family: Tahoma, Helvetica;
+ text-align: center;
+ font-size: 20px;
+ position: fixed;
+ top: 60px;
+ right: 20px;
+ background-color: rgba(255, 255, 255, 0.7);
+ color: #000;
+ z-index: 10000;
+ padding: 20px 30px;
+ width: 190px;
+}
+.dhx_global_tip div {
+ font-size: 30px;
+}
+@media (-moz-touch-enabled) {
+ .dhx_cal_container {
+ user-select: none;
+ -moz-user-select: none;
+ }
+}
+.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: #FFE763;
+ border-radius: 5px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ border: 1px solid #B7A64B;
+ color: #887A2E;
+ position: absolute;
+ z-index: 10001;
+ width: 580px;
+ height: 300px;
+ box-shadow: 5px 5px 5px #888;
+}
+.dhx_cal_light_wide {
+ width: 650px;
+}
+.dhx_mark {
+ position: relative;
+ top: 3px;
+ background-image: url('imgs/controls.gif');
+ background-position: 0px -43px;
+ padding-left: 10px;
+}
+.dhx_ie6 .dhx_mark {
+ background-position: 6px -41px;
+}
+.dhx_cal_light select {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+ padding: 2px;
+ margin: 0px;
+}
+.dhx_cal_ltitle {
+ padding: 2px 0px 2px 5px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+.dhx_cal_ltitle span {
+ white-space: nowrap;
+}
+.dhx_cal_lsection {
+ background-color: #DBCF8C;
+ color: #FFF4B5;
+ font-weight: bold;
+ padding: 5px 0px 3px 10px;
+}
+.dhx_section_time {
+ background-color: #DBCF8C;
+ white-space: nowrap;
+}
+.dhx_cal_lsection .dhx_fullday {
+ float: right;
+ margin-right: 5px;
+ color: #887A2E;
+ font-size: 12px;
+ font-weight: normal;
+ line-height: 20px;
+ vertical-align: top;
+ cursor: pointer;
+}
+.dhx_cal_lsection {
+ font-size: 18px;
+ font-family: Arial;
+}
+.dhx_cal_ltext {
+ padding: 2px 0px 2px 10px;
+ overflow: hidden;
+}
+.dhx_cal_ltext textarea {
+ background-color: #FFF4B5;
+ /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */
+ overflow: auto;
+ border: none;
+ color: #887A2E;
+ 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 #DCC43E;
+ background-color: #FFF4B5;
+ overflow: hidden;
+ margin-left: 3px;
+ width: 572px;
+ height: 1px;
+}
+.dhx_btn_set {
+ padding: 5px 10px 0px 10px;
+ float: left;
+}
+.dhx_btn_set div {
+ float: left;
+ height: 21px;
+ line-height: 21px;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.dhx_save_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -84px 0px;
+ width: 21px;
+}
+.dhx_cancel_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -63px 0px;
+ width: 20px;
+}
+.dhx_delete_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -42px 0px;
+ 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: alpha(opacity=10);
+}
+.dhx_custom_button {
+ padding: 0px 3px 0px 3px;
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+ background-color: #FFE763;
+ 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 .dhx_cal_larea {
+ border-top-width: 0px;
+}
+.dhx_cal_light_wide .dhx_cal_lsection {
+ border: 0px;
+ float: left;
+ text-align: right;
+ width: 100px;
+ height: 20px;
+ font-size: 16px;
+ padding: 5px 0px 0px 10px;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ border-top: 1px solid #DBCF8C;
+ position: relative;
+ background-color: #DBCF8C;
+ overflow: hidden;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ padding-top: 2px !important;
+ height: 20px !important;
+}
+.dhx_section_time {
+ text-align: center;
+}
+.dhx_cal_light_wide .dhx_cal_larea {
+ width: 730px;
+}
+.dhx_cal_light_wide {
+ width: 738px;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ background: transparent;
+}
+.dhx_cal_light_wide .dhx_cal_checkbox label {
+ padding-left: 0px;
+}
+.dhx_cal_wide_checkbox input {
+ margin-top: 8px;
+ margin-left: 14px;
+}
+.dhx_cal_light input {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+}
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday {
+ float: none;
+ margin-right: 0px;
+ color: #FFF4B5;
+ font-weight: bold;
+ font-size: 16px;
+ font-family: Arial;
+ cursor: pointer;
+}
+.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_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_minical_popup {
+ position: absolute;
+ z-index: 10100;
+ width: 251px;
+ height: 175px;
+}
+.dhx_scale_bar_header {
+ position: absolute;
+ border-bottom: 1px dotted #8894A3;
+ width: 100%;
+}
+.dhx_expand_icon {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ background-image: url(imgs/collapse_expand_icon.gif);
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ background-position: 0px 18px;
+ z-index: 16;
+}
+.dhx_scheduler_agenda .dhx_cal_data {
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_area {
+ width: 100%;
+ overflow-y: auto;
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_agenda_line div {
+ float: left;
+ width: 188px;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_agenda_area .dhx_agenda_line div {
+ border-right: 0px dotted #8894A3;
+}
+.dhx_v_border {
+ position: absolute;
+ left: 187px;
+ top: 0;
+ border-right: 1px dotted #8894A3;
+ width: 1px;
+ height: 100%;
+}
+.dhx_agenda_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_agenda_line span {
+ padding-left: 5px;
+ line-height: 21px;
+}
+.dhx_year_body {
+ border-left: 1px dotted #586A7E;
+}
+.dhx_year_week {
+ position: relative;
+}
+.dhx_scale_bar_last {
+ border-right: 1px dotted #586A7E;
+}
+.dhx_year_month {
+ height: 18px;
+ padding-top: 3px;
+ border: 1px dotted #586A7E;
+ text-align: center;
+ vertical-align: middle;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head,
+.dhx_year_body .dhx_before .dhx_month_head a,
+.dhx_year_body .dhx_after .dhx_month_head a {
+ color: #E2E3E6 !important;
+}
+.dhx_year_body .dhx_month_body {
+ height: 0px;
+ overflow: hidden;
+}
+.dhx_month_head.dhx_year_event {
+ background-color: #FFE763;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head {
+ cursor: default;
+}
+.dhx_year_tooltip {
+ border: 1px solid #BBBBBB;
+ background-image: url(imgs/databg.png);
+ position: absolute;
+ z-index: 9998;
+ width: 300px;
+ height: auto;
+ font-family: Tahoma;
+ font-size: 8pt;
+ overflow: hidden;
+}
+.dhx_tooltip_line {
+ line-height: 20px;
+ height: 20px;
+ overflow: hidden;
+}
+.dhx_tooltip_line .dhx_event_icon {
+ width: 20px;
+ height: 20px;
+ padding-right: 10px;
+ float: left;
+ border-width: 0px;
+ position: relative;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_tooltip_date {
+ float: left;
+ width: auto;
+ padding-left: 5px;
+ text-align: center;
+}
+.dhx_text_disabled {
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_mini_calendar {
+ -moz-box-shadow: 5px 5px 5px #888;
+ /*Doesn't work in IE*/
+ -khtml-box-shadow: 5px 5px 5px #888;
+ -moz-user-select: -moz-none;
+ -webkit-user-select: none;
+ -user-select: none;
+}
+.dhx_mini_calendar .dhx_month_head {
+ cursor: pointer;
+}
+.dhx_mini_calendar .dhx_calendar_click {
+ background-color: #C2D5FC;
+}
+.dhx_cal_navline div.dhx_minical_icon {
+ width: 18px;
+ height: 18px;
+ left: 190px;
+ top: 1px;
+ cursor: pointer;
+ background-image: url(imgs/calendar.gif);
+}
+.dhx_matrix_scell {
+ height: 100%;
+}
+.dhx_matrix_cell,
+.dhx_matrix_scell {
+ overflow: hidden;
+ text-align: center;
+ vertical-align: middle;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_matrix_cell {
+ background-color: white;
+}
+.dhx_matrix_line {
+ overflow: hidden;
+}
+.dhx_matrix_cell div,
+.dhx_matrix_scell div {
+ overflow: hidden;
+ text-align: center;
+ height: auto;
+}
+.dhx_cal_lsection .dhx_readonly {
+ font-size: 9pt;
+ font-size: 8pt;
+ padding: 2px;
+ color: #887A2E;
+}
+.dhx_cal_event_line .dhx_event_resize {
+ cursor: w-resize;
+ background: url(imgs/resize_dots.png) repeat-y;
+ position: absolute;
+ top: 0;
+ width: 4px;
+ height: 100%;
+}
+.dhx_event_resize_start {
+ left: 0;
+}
+.dhx_event_resize_end {
+ right: 0;
+}
+/* Tree view */
+.dhx_matrix_scell.folder,
+.dhx_data_table.folder .dhx_matrix_cell {
+ background-color: #969394;
+ cursor: pointer;
+}
+.dhx_matrix_scell .dhx_scell_level0 {
+ padding-left: 5px;
+}
+.dhx_matrix_scell .dhx_scell_level1 {
+ padding-left: 20px;
+}
+.dhx_matrix_scell .dhx_scell_level2 {
+ padding-left: 35px;
+}
+.dhx_matrix_scell .dhx_scell_level3 {
+ padding-left: 50px;
+}
+.dhx_matrix_scell .dhx_scell_level4 {
+ padding-left: 65px;
+}
+.dhx_matrix_scell.folder {
+ font-weight: bold;
+ text-align: left;
+}
+.dhx_matrix_scell.folder .dhx_scell_expand {
+ float: left;
+ width: 10px;
+ padding-right: 3px;
+}
+.dhx_matrix_scell.folder .dhx_scell_name {
+ float: left;
+ width: auto;
+}
+.dhx_matrix_scell.item .dhx_scell_name {
+ padding-left: 15px;
+ text-align: left;
+}
+.dhx_data_table.folder .dhx_matrix_cell {
+ border-right: 0;
+}
+.dhx_section_timeline {
+ overflow: hidden;
+ padding: 4px 0 2px 10px;
+}
+.dhx_section_timeline select {
+ width: 552px;
+}
+/* Tree view end*/
+/* Map view */
+.dhx_map_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+ background-image: url(imgs/databg.png);
+}
+.dhx_map_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_map_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_map {
+ position: absolute;
+}
+.dhx_map_line div {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .dhx_map_description {
+ float: left;
+ border-right: 0 dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_date,
+.dhx_map_line .headline_description {
+ border-left: 0;
+}
+.dhx_map_line .line_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: left;
+ padding-left: 5px;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line.highlight {
+ background-color: #C4C5CC;
+}
+.dhx_map_area .dhx_map_line div {
+ border-right: 0px dotted #8894A3;
+}
+/* Map view end */
+/* dhtmlXTooltip start */
+.dhtmlXTooltip.tooltip {
+ -moz-box-shadow: 3px 3px 3px #888888;
+ -webkit-box-shadow: 3px 3px 3px #888888;
+ -o-box-shadow: 3px 3px 3px #888888;
+ box-shadow: 3px 3px 3px #888888;
+ filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);
+ background-color: white;
+ border-left: 1px dotted #887A2E;
+ border-top: 1px dotted #887A2E;
+ color: #887A2E;
+ cursor: default;
+ padding: 10px;
+ position: absolute;
+ z-index: 500;
+ font-family: Tahoma;
+ font-size: 8pt;
+ opacity: 1;
+}
+/* dhtmlXTooltip end */
+/* Lightbox checkbox section */
+.dhx_cal_checkbox label {
+ padding-left: 5px;
+}
+/* Lightbox checkbox section end */
+/* Lightbox radiobuttons section */
+.dhx_cal_light .radio {
+ padding: 2px 0px 2px 10px;
+}
+.dhx_cal_light .radio input,
+.dhx_cal_light .radio label {
+ line-height: 15px;
+}
+.dhx_cal_light .radio input {
+ vertical-align: middle;
+ margin: 0px;
+ padding: 0px;
+}
+.dhx_cal_light .radio label {
+ vertical-align: middle;
+ padding-right: 10px;
+}
+/* Lightbox radiobuttons section end */
+/* Lightbox dhtmlx combo section */
+.dhx_cal_light .combo {
+ padding: 4px;
+}
+.dhx_cal_light_wide .dhx_combo_box {
+ width: 608px !important;
+ left: 10px;
+}
+/* Lightbox dhtmlx combo section end */
+/* Agenda week start */
+.dhx_wa_column {
+ float: left;
+}
+.dhx_wa_column_last .dhx_wa_day_cont {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_wa_scale_bar {
+ font-family: Tahoma;
+ padding-left: 10px;
+ font-size: 11px;
+ border-top: 1px dotted #8894A3;
+ border-bottom: 1px dotted #8894A3;
+}
+.dhx_wa_day_data {
+ background-color: #FCFEFC;
+ overflow-y: auto;
+}
+.dhx_wa_ev_body {
+ border-bottom: 1px dotted #778899;
+ font-size: 12px;
+ padding: 5px 0 5px 7px;
+}
+.dhx_wa_dnd {
+ font-family: Tahoma;
+ position: absolute;
+ padding-right: 7px;
+ color: #887AE2 !important;
+ background-color: #FFE763 !important;
+ border: 1px solid #B7A543;
+}
+.dhx_cal_event_selected {
+ background-color: #9cc1db;
+ color: white;
+}
+/* Agenda week end */
+/* timeline second scale start */
+.dhx_second_scale_bar {
+ border-bottom: 1px dotted #586A7E;
+ padding-top: 2px;
+}
+/* timeline second scale end */
+/* grid view */
+.dhx_cal_header div div {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_grid_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ background-color: #FCFEFC;
+}
+.dhx_grid_area table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ width: 100%;
+ table-layout: fixed;
+}
+.dhx_grid_area td {
+ table-layout: fixed;
+ text-align: center;
+}
+.dhx_grid_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_grid_line div {
+ float: left;
+ cursor: default;
+ padding-top: 0;
+ padding-bottom: 0;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_grid_area td,
+.dhx_grid_line div {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.dhx_grid_area tr.dhx_grid_event {
+ height: 21px;
+ overflow: hidden;
+ margin: 0 0 1px 0;
+}
+.dhx_grid_area tr.dhx_grid_event td {
+ /*borders for old ies*/
+ border-bottom: 1px solid #ECEEF4;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td {
+ border-bottom-width: 0px;
+ border-bottom-style: none;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) {
+ background-color: #ECEEF4;
+}
+.dhx_grid_area .dhx_grid_dummy {
+ table-layout: auto;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+.dhx_grid_v_border {
+ position: absolute;
+ border-right: 1px solid #A4BED4;
+ width: 1px;
+ height: 100%;
+}
+.dhx_grid_event_selected {
+ background-color: #9cc1db !important;
+ color: white !important;
+}
+.dhx_grid_sort_desc .dhx_grid_view_sort {
+ background-position: 0 -55px;
+}
+.dhx_grid_sort_asc .dhx_grid_view_sort {
+ background-position: 0 -66px;
+}
+.dhx_grid_view_sort {
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ border: none !important;
+ top: 5px;
+ background-repeat: no-repeat;
+ background-image: url(imgs/images.png);
+}
+/* end grid */
+/* marked timespans */
+.dhx_marked_timespan {
+ position: absolute;
+ width: 100%;
+}
+.dhx_time_block {
+ position: absolute;
+ width: 100%;
+ background: silver;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+ z-index: 1;
+}
+.dhx_time_block_reset {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.dhx_scheduler_month .dhx_marked_timespan {
+ display: none;
+}
+.dhx_mini_calendar .dhx_marked_timespan {
+ display: none;
+}
+/* now time */
+.dhx_now_time {
+ width: 100%;
+ border-bottom: 2px solid red;
+ z-index: 1;
+}
+.dhx_scheduler_month .dhx_now_time {
+ border-bottom: 0;
+ border-left: 2px solid red;
+}
+.dhx_matrix_now_time {
+ border-left: 2px solid red;
+ z-index: 1;
+}
+.dhx_now_time,
+.dhx_matrix_now_time {
+ opacity: 0.5;
+}
+/* Quick info */
+.dhx_cal_quick_info {
+ border: 2px solid #888;
+ border-radius: 5px;
+ position: absolute;
+ z-index: 300;
+ background-color: #8e99ae;
+ background-color: rgba(98, 107, 127, 0.5);
+ padding-left: 7px;
+ 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 {
+ padding: 5px 0px 10px 5px;
+ color: #FFF;
+ letter-spacing: 1px;
+}
+.dhx_cal_qi_tdate {
+ font-size: 14px;
+}
+.dhx_cal_qi_tcontent {
+ font-size: 18px;
+ font-weight: bold;
+}
+.dhx_cal_qi_content {
+ border: 1px solid #888;
+ background-color: #fefefe;
+ padding: 16px 8px;
+ font-size: 14px;
+ color: #444;
+ width: 275px;
+ overflow: hidden;
+}
+.dhx_qi_big_icon {
+ border-radius: 3px;
+ color: #444;
+ margin: 5px 9px 5px 0px;
+ min-width: 60px;
+ line-height: 20px;
+ vertical-align: middle;
+ padding: 5px 10px 5px 5px;
+ cursor: pointer;
+ background-color: #fefefe;
+ border-bottom: 1px solid #666;
+ border-right: 1px solid #666;
+ float: left;
+}
+.dhx_cal_qi_controls div {
+ float: left;
+ height: 20px;
+ text-align: center;
+ line-height: 20px;
+}
+.dhx_qi_big_icon .dhx_menu_icon {
+ margin: 0 8px 0 0px;
+}
+.dhx_drag_marker {
+ width: 100%;
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+ opacity: 0.5;
+ background-color: #FFE763;
+ position: absolute;
+ box-sizing: border-box !important;
+ border-top: 1px solid #B6B6B6;
+ border-bottom: 1px solid #b6b6b6;
+}
+/* bootstrap CSS fix start */
+.dhx_cal_navline div,
+.dhx_cal_header,
+.dhx_cal_header div,
+.dhx_cal_data div,
+.dhx_cal_light,
+.dhx_cal_light div {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+.dhx_cal_light .dhx_cal_radio label {
+ margin-bottom: 0;
+}
+.dhx_cal_event div {
+ line-height: normal;
+}
+/* bootstrap CSS fix end */
+.dhx_cal_container {
+ background-color: #C2D5FC;
+ font-family: Tahoma;
+ font-size: 8pt;
+ position: relative;
+ overflow: hidden;
+}
+.dhx_cal_container div {
+ -moz-user-select: none;
+ -moz-user-select: -moz-none;
+}
+.dhx_cal_navline {
+ height: 20px;
+ position: absolute;
+ z-index: 3;
+ width: 750px;
+ color: #2F3A48;
+}
+.dhx_cal_navline div {
+ position: absolute;
+ top: 2px;
+ white-space: nowrap;
+}
+.dhx_cal_navline .dhx_cal_date {
+ font-weight: 600;
+ left: 210px;
+ padding-top: 1px;
+}
+.dhx_cal_button .dhx_left_bg {
+ width: 1px;
+ overflow: hidden;
+ height: 17px;
+ z-index: 20;
+ top: 0px;
+}
+.dhx_cal_prev_button {
+ background-image: url(imgs/buttons.png);
+ background-position: 0px 0px;
+ width: 29px;
+ height: 17px;
+ left: 50px;
+ cursor: pointer;
+}
+.dhx_cal_next_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -30px 0px;
+ width: 29px;
+ height: 17px;
+ left: 80px;
+ cursor: pointer;
+}
+.dhx_cal_today_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -60px 0px;
+ width: 75px;
+ height: 17px;
+ left: 112px;
+ cursor: pointer;
+ text-align: center;
+ text-decoration: underline;
+}
+.dhx_cal_tab {
+ width: 59px;
+ height: 19px;
+ text-align: center;
+ text-decoration: underline;
+ padding-top: 2px;
+ cursor: pointer;
+ background-color: #D8E1EA;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.dhx_cal_tab.active {
+ text-decoration: none;
+ cursor: default;
+ font-weight: bold;
+ border: 1px dotted #586A7E;
+ border-bottom: 0;
+ background-color: #C2D5FC;
+}
+.dhx_cal_header {
+ position: absolute;
+ left: 10px;
+ top: 23px;
+ width: 750px;
+ border-top: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+ z-index: 2;
+ overflow: hidden;
+ color: #2F3A48;
+}
+.dhx_cal_data {
+ -webkit-tap-highlight-color: transparent;
+ border-top: 1px dotted #8894A3;
+ position: absolute;
+ top: 44px;
+ width: 600px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ -webkit-overflow-scrolling: touch;
+}
+.dhx_cal_data {
+ -ms-touch-action: pan-y;
+}
+.dhx_cal_event,
+.dhx_cal_event_line,
+.dhx_cal_event_clear {
+ -ms-touch-action: none;
+}
+.dhx_scale_bar {
+ position: absolute;
+ text-align: center;
+ background-color: #C2D5FC;
+ padding-top: 3px;
+ border-left: 1px dotted #586A7E;
+}
+.dhx_scale_holder {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg.png);
+}
+.dhx_scale_holder_now {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg_now.png);
+}
+.dhx_scale_hour {
+ height: 41px;
+ width: 50px;
+ border-bottom: 1px dotted #8894A3;
+ background-color: #C2D5FC;
+ text-align: center;
+ line-height: 40px;
+ color: #586A7E;
+ overflow: hidden;
+}
+.dhx_month_head {
+ background-color: #EBEFF4;
+ color: #2F3A48;
+ height: 18px;
+ padding-right: 5px;
+ padding-top: 3px;
+ text-align: right;
+ border-right: 1px dotted #586A7E;
+}
+.dhx_month_body {
+ border-right: 1px dotted #586A7E;
+ border-bottom: 1px dotted #586A7E;
+ background-color: #FFFFFF;
+}
+.dhx_now .dhx_month_body {
+ background-color: #E2EDFF;
+}
+.dhx_after .dhx_month_body,
+.dhx_before .dhx_month_body {
+ background-color: #ECECEC;
+}
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head {
+ background-color: #E2E3E6;
+ color: #94A6BB;
+}
+.dhx_now .dhx_month_head {
+ background-color: #D1DEF4;
+ font-weight: bold;
+}
+.dhx_scale_ignore {
+ display: none;
+}
+.dhx_cal_drag {
+ position: absolute;
+ z-index: 9999;
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+.dhx_loading {
+ position: absolute;
+ width: 128px;
+ height: 15px;
+ background-image: url(imgs/loading.gif);
+ z-index: 9999;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day {
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day {
+ position: absolute;
+ border-top: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ background-position: center center;
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon {
+ background-image: url(imgs/clock_big.gif);
+}
+.dhx_multi_day_icon_small {
+ background-image: url(imgs/clock_small.gif);
+}
+.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container {
+ background-color: #d0e5ff;
+}
+/* left border config option support */
+.dhx_scale_hour_border,
+.dhx_month_body_border,
+.dhx_scale_bar_border,
+.dhx_month_head_border {
+ border-left: 1px dotted #8894A3;
+}
+/* export to PDF and iCal buttons start */
+.dhx_cal_navline .dhx_cal_export {
+ width: 18px;
+ height: 18px;
+ margin: 2px;
+ cursor: pointer;
+ top: 0px;
+}
+.dhx_cal_navline .dhx_cal_export.pdf {
+ left: 2px;
+ background-image: url('imgs/export_pdf.png');
+}
+.dhx_cal_navline .dhx_cal_export.ical {
+ left: 24px;
+ background-image: url('imgs/export_ical.png');
+}
+/* export to PDF and iCal buttons end */
+/*All*/
+.dhx_form_repeat,
+.dhx_form_repeat input {
+ padding: 0;
+ margin: 0;
+ padding-left: 5px;
+ font-family: Tahoma, Verdana;
+ font-size: 11px;
+ line-height: 24px;
+}
+.dhx_form_repeat {
+ overflow: hidden;
+ /*height:115px;*/
+ height: 0px;
+ background-color: #FFF4B5;
+ /*border: 1px solid #DCC43E;*/
+}
+.dhx_cal_light_wide .dhx_form_repeat {
+ background-color: transparent;
+}
+.dhx_repeat_center,
+.dhx_repeat_left {
+ height: 115px;
+ padding: 10px 0 10px 10px;
+ float: left;
+}
+.dhx_repeat_left {
+ width: 95px;
+}
+.dhx_repeat_center {
+ width: 335px;
+ margin-top: 12px;
+}
+.dhx_repeat_divider {
+ float: left;
+ height: 115px;
+ border-left: 1px dotted #DCC43E;
+ /*background-color: #DCC43E;*/
+ width: 1px;
+}
+.dhx_repeat_right {
+ float: right;
+ height: 115px;
+ width: 160px;
+ padding: 10px 3px 10px 10px;
+ margin-top: 7px;
+}
+input.dhx_repeat_text {
+ height: 16px;
+ width: 27px;
+ margin: 0 4px 0 4px;
+ line-height: 18px;
+ padding: 0 0 0 2px;
+}
+.dhx_form_repeat select {
+ height: 20px;
+ width: 87px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+}
+input.dhx_repeat_date {
+ height: 18px;
+ width: 80px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+ background-repeat: no-repeat;
+ background-position: 64px 0;
+ border: 1px #7f9db9 solid;
+ line-height: 18px;
+}
+input.dhx_repeat_radio {
+ margin-right: 4px;
+}
+input.dhx_repeat_checkbox {
+ margin: 4px 4px 0 0;
+}
+.dhx_repeat_days td {
+ padding-right: 5px;
+}
+.dhx_repeat_days label {
+ font-size: 10px;
+}
+.dhx_custom_button {
+ width: 90px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+.dhx_custom_button_recurring {
+ background-image: url(imgs/but_repeat.gif);
+ background-position: -5px 20px;
+ width: 20px;
+ margin-right: 10px;
+}
+/* increase width of lightbox */
+.dhx_cal_light_rec {
+ width: 640px;
+}
+.dhx_cal_light_rec .dhx_cal_larea {
+ width: 632px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide {
+ width: 816px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea {
+ width: 808px;
+}
+/* event start */
+.dhx_cal_event .dhx_title {
+ border-width: 1px 1px 0 1px;
+ -webkit-border-top-left-radius: 1px;
+ -webkit-border-top-right-radius: 1px;
+ -moz-border-radius-topleft: 1px;
+ -moz-border-radius-topright: 1px;
+ border-top-left-radius: 1px;
+ border-top-right-radius: 1px;
+ font-family: "Segoe UI", Arial;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ line-height: 14px;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event.dhx_cal_select_menu .dhx_body {
+ padding-bottom: 8px;
+ -webkit-border-bottom-right-radius: 1px;
+ -webkit-border-bottom-left-radius: 1px;
+ -moz-border-radius-bottomright: 1px;
+ -moz-border-radius-bottomleft: 1px;
+ border-bottom-right-radius: 1px;
+ border-bottom-left-radius: 1px;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event.dhx_cal_select_menu .dhx_footer {
+ display: none;
+}
+.dhx_cal_event .dhx_footer {
+ height: 15px;
+ border: 0;
+ background-color: transparent !important;
+ margin-top: -11px;
+}
+.dhx_cal_event .dhx_footer:hover {
+ background: url(imgs_flat/resizing.png) no-repeat center center;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event .dhx_body,
+.dhx_cal_event .dhx_title {
+ background-color: #5B9BE0;
+ border-color: transparent;
+ color: white;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event.dhx_cal_select_menu .dhx_body {
+ border-bottom: 1px solid white;
+ border-bottom-left-radius: 2px;
+ border-bottom-right-radius: 2px;
+}
+.dhx_cal_event.dhx_cal_editor {
+ border: 1px solid transparent;
+}
+.dhx_cal_editor {
+ font-size: 12px;
+ font-family: "Segoe UI", Arial;
+}
+div.dhx_menu_head,
+div.dhx_menu_icon {
+ background-image: url(imgs_flat/controls.png);
+}
+.dhx_cal_event_line {
+ border: 1px solid transparent;
+ background-color: #5B9BE0;
+ color: #FFF;
+ height: 17px;
+ line-height: 17px;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ border-radius: 1px;
+}
+.dhx_cal_event_line:hover div {
+ background: url(imgs_flat/resize_dots.png) repeat-y;
+}
+.dhx_cal_event_line_start {
+ -webkit-border-top-left-radius: 1px;
+ -webkit-border-bottom-left-radius: 1px;
+ -moz-border-radius-topleft: 1px;
+ -moz-border-radius-bottomleft: 1px;
+ border-top-left-radius: 1px;
+ border-bottom-left-radius: 1px;
+}
+.dhx_cal_event_line_end {
+ -webkit-border-top-right-radius: 1px;
+ -webkit-border-bottom-right-radius: 1px;
+ -moz-border-radius-topright: 1px;
+ -moz-border-radius-bottomright: 1px;
+ border-top-right-radius: 1px;
+ border-bottom-right-radius: 1px;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event_line {
+ font-size: 12px;
+ font-family: "Segoe UI", Arial;
+}
+.dhx_cal_event:hover .dhx_footer {
+ background: url(imgs_flat/resizing.png) no-repeat center center;
+}
+/* event end */
+/* scales, containers start */
+.dhx_cal_container {
+ background-color: white;
+ font-family: "Segoe UI", Arial;
+}
+.dhx_cal_data {
+ border-top: 1px solid #CECECE;
+}
+.dhx_scale_holder {
+ background-image: url(imgs_flat/databg.png);
+ border-right: 1px solid #CECECE;
+}
+.dhx_scale_holder_now {
+ background-image: url(imgs_flat/databg_now.png);
+ border-right: 1px solid #CECECE;
+}
+.dhx_scale_hour {
+ border-bottom: 1px solid #CECECE;
+ background-color: white;
+ font: 11px/44px Arial;
+ font-family: "Segoe UI", Arial;
+ font-weight: lighter;
+ color: #767676;
+}
+.dhx_scale_h {
+ display: inline-block;
+ font-size: 22px;
+}
+.dhx_scale_m {
+ display: inline-block;
+ font-size: 11px;
+ line-height: 35px;
+ vertical-align: top;
+}
+.dhx_cal_header {
+ border: 1px solid #CECECE;
+ border-left: 0;
+ border-bottom: 0;
+}
+.dhx_scale_bar {
+ border-left: 1px solid #CECECE;
+ font: 12px/16px "Segoe UI", Arial;
+ color: #767676;
+ line-height: 30px;
+ padding-top: 2px;
+ background-color: white;
+}
+.dhx_scale_bar > a {
+ color: #5780AD;
+ text-decoration: none;
+}
+.dhx_scale_bar > a:hover {
+ text-decoration: underline;
+}
+.dhx_month_head > a {
+ color: #5780AD;
+ text-decoration: none;
+}
+.dhx_month_head > a:hover {
+ text-decoration: underline;
+}
+/* scales, containers end */
+/* navigation start */
+.dhx_cal_navline div {
+ top: 14px;
+}
+.dhx_cal_tab,
+.dhx_cal_date,
+.dhx_cal_today_button,
+.dhx_cal_prev_button,
+.dhx_cal_next_button {
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+ border: none;
+ color: #454544;
+ height: 30px;
+ line-height: 30px;
+ background: none;
+ font-family: "Segoe UI", Arial;
+ font-weight: lighter;
+}
+.dhx_cal_navline .dhx_cal_date {
+ border: 0;
+ color: #454544;
+ font-family: "Segoe UI", Arial;
+ font-weight: lighter;
+ font-size: 22px;
+ text-align: center;
+ top: 14px;
+ position: absolute;
+ left: 0;
+ width: 100%;
+ z-index: -1;
+}
+.dhx_cal_today_button {
+ background: none;
+ color: #5780AD;
+ font-size: 13px;
+ font-weight: bolder;
+ left: auto;
+ right: 123px;
+ text-decoration: none;
+ width: 80px;
+}
+.dhx_cal_prev_button,
+.dhx_cal_next_button {
+ left: auto;
+ width: 46px;
+}
+.dhx_cal_prev_button {
+ right: 61px;
+ background: url(imgs_flat/arrow_left.png) no-repeat center center;
+}
+.dhx_cal_next_button {
+ right: 14px;
+ background: url(imgs_flat/arrow_right.png) no-repeat center center;
+}
+.dhx_cal_tab {
+ color: #5780AD;
+ font-size: 13px;
+ font-weight: bolder;
+ padding-top: 0;
+ text-decoration: none;
+ width: 60px;
+}
+.dhx_cal_tab:hover,
+.dhx_cal_today_button:hover {
+ text-decoration: underline;
+}
+.dhx_cal_tab.active {
+ background-color: #5780AD;
+ border: none;
+ color: #FFFFFF;
+ font-family: "Segoe UI", Arial;
+ font-weight: lighter;
+ text-decoration: none;
+}
+.dhx_cal_tab_standalone {
+ padding: 0 5px;
+}
+.dhx_multi_day,
+.dhx_multi_day_icon_small,
+.dhx_multi_day_icon {
+ background-color: white;
+}
+.dhx_multi_day {
+ border-top: 1px solid #CECECE;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ border-bottom: 1px solid #CECECE;
+ border-right: 1px solid #CECECE;
+}
+.dhx_multi_day_icon_small {
+ background-image: url(imgs_flat/clock.png);
+}
+.dhx_multi_day_icon {
+ background-image: url(imgs_flat/clock_big.gif);
+}
+/* navigation end */
+/* month view start */
+.dhx_month_head,
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head,
+.dhx_after .dhx_month_body,
+.dhx_before .dhx_month_body {
+ background-color: white;
+}
+.dhx_month_head {
+ height: 21px;
+ padding-top: 0;
+ font: 12px/21px "Segoe UI", Arial;
+ color: #5780AD;
+ border-right: 1px solid #CECECE;
+}
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head,
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head {
+ color: #bbbbbb;
+}
+.dhx_month_body {
+ border-right: 1px solid #CECECE;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_now .dhx_month_head,
+.dhx_now .dhx_month_body {
+ background-color: #FFF3A1;
+ font-weight: normal;
+}
+.dhx_cal_event_clear {
+ color: #0E64A0;
+}
+/* month view end */
+/* lightbox start */
+.dhx_cal_larea {
+ margin-left: 0;
+}
+.dhx_cal_light_wide .dhx_cal_larea {
+ margin-left: 3px;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ padding: 5px 0;
+}
+.dhx_cal_light,
+.dhx_cal_larea,
+.dhx_cal_lsection,
+.dhx_wrap_section,
+.dhx_cal_light_wide .dhx_wrap_section,
+.dhx_cal_ltext textarea {
+ background-color: white;
+ font-family: "Segoe UI", Arial;
+}
+.dhx_cal_lsection,
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,
+.dhx_cal_lsection .dhx_fullday,
+.dhx_cal_light input {
+ color: #747473;
+ font-family: "Segoe UI", Arial;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ border-top: 0;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_cal_larea {
+ border: 1px solid transparent;
+}
+.dhx_cal_ltext textarea,
+.dhx_cal_light select,
+.dhx_cal_light {
+ color: #2E2E2E;
+}
+.dhx_cal_light {
+ border: none;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+}
+.dhx_cal_light_wide .dhx_cal_lsection,
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday {
+ font-family: "Segoe UI", Arial;
+ font-size: 13px;
+ font-weight: bold;
+}
+.dhx_section_time {
+ background-color: transparent;
+}
+.dhx_save_btn,
+.dhx_cancel_btn,
+.dhx_delete_btn,
+.dhx_btn_set div:first-child {
+ display: none;
+}
+.dhx_btn_set,
+.dhx_btn_set div {
+ height: 30px;
+ padding: 0 20px;
+ line-height: 30px;
+}
+.dhx_btn_set {
+ margin: 12px 0 0 0;
+ padding: 0;
+ font-size: 13px;
+ color: #454544;
+ font-weight: normal;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+}
+.dhx_left_btn_set {
+ margin-left: 20px;
+}
+.dhx_right_btn_set {
+ margin-right: 20px;
+}
+.dhx_save_btn_set {
+ border: none;
+ color: #FFF;
+ background-color: #5B9BE0;
+}
+.dhx_cancel_btn_set {
+ background-color: #FE7510;
+ color: #FFF;
+}
+.dhx_delete_btn_set {
+ border: 1px solid #A4A4A4;
+ color: #747473;
+}
+.dhx_cal_ltitle {
+ height: 30px;
+ line-height: 30px;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_cal_ltitle span {
+ float: left;
+}
+.dhx_cal_light .dhx_title {
+ font-size: 13px;
+ padding-left: 13px;
+}
+.dhx_mark {
+ display: none;
+}
+.dhx_time {
+ font-size: 12px;
+ padding-left: 10px;
+}
+.dhx_close_icon {
+ float: right;
+ width: 9px;
+ height: 9px;
+ background: url(imgs_flat/close_icon.png) no-repeat center center;
+ padding: 10px;
+ margin-top: 1px;
+}
+.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template {
+ line-height: 22px;
+}
+.dhx_cal_ltext textarea {
+ line-height: 20px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ border: 1px solid #CECECE;
+ background-color: #F9F9F9;
+}
+/* lightbox end */
+/* modal box */
+.dhtmlx_modal_box {
+ border: none;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+ background: white;
+ font-family: "Segoe UI", Arial;
+ width: 330px;
+}
+.dhtmlx_popup_text {
+ font-size: 16px;
+}
+.dhtmlx_popup_controls {
+ padding-bottom: 9px;
+}
+.dhtmlx_popup_button,
+.dhtmlx_popup_button:active,
+.dhtmlx_popup_button div,
+.dhtmlx_popup_button div:active {
+ color: #444;
+ background: white;
+ box-shadow: none;
+ border: none;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+}
+.dhtmlx_popup_button.dhtmlx_ok_button {
+ border: none;
+ background-color: #5B9BE0;
+}
+.dhtmlx_popup_button.dhtmlx_ok_button div {
+ background: #5B9BE0;
+ border: none;
+ color: #FFF;
+}
+.dhtmlx_popup_button.dhtmlx_cancel_button {
+ border: none;
+ background-color: #FE7510;
+}
+.dhtmlx_popup_button.dhtmlx_cancel_button div {
+ background: #FE7510;
+ border: none;
+ color: #FFF;
+}
+/* mobdal box end */
+/* minicalendar */
+.dhx_cal_container.dhx_mini_calendar {
+ box-sizing: border-box;
+ border: none;
+ box-shadow: 0px 2px 10px 0px #AAA;
+ border-radius: 0px;
+}
+.dhx_mini_calendar .dhx_year_month {
+ border: 1px solid #CECECE;
+ font-family: "Segoe UI", Arial;
+}
+.dhx_mini_calendar .dhx_month_head,
+.dhx_mini_calendar .dhx_year_month,
+.dhx_mini_calendar .dhx_month_body,
+.dhx_mini_calendar .dhx_scale_bar,
+.dhx_mini_calendar .dhx_year_body {
+ border-color: transparent;
+}
+.dhx_mini_calendar .dhx_year_body {
+ padding-top: 1px;
+}
+.dhx_mini_calendar .dhx_scale_bar {
+ border-width: 0;
+}
+.dhx_mini_calendar .dhx_year_week {
+ border-bottom: 1px solid #CECECE;
+ padding-top: 1px;
+}
+.dhx_mini_calendar .dhx_month_head {
+ padding-right: 0;
+ margin-right: 1px;
+ text-align: center;
+}
+.dhx_mini_calendar .dhx_cal_prev_button,
+.dhx_mini_calendar .dhx_cal_next_button {
+ border: 0;
+ height: 20px;
+}
+/* minicalendar end */
+.dhx_cal_navline div.dhx_minical_icon {
+ left: 210px;
+ top: 14px;
+ width: 30px;
+ height: 30px;
+ background: url(imgs_flat/calendar.gif) no-repeat;
+ background-position: 3px 5px;
+}
+/* timeline */
+.dhx_cal_event_line .dhx_event_resize {
+ background: none;
+}
+.dhx_cal_event_line .dhx_event_resize:hover {
+ background: url(imgs_flat/resize_dots.png) repeat-y;
+}
+.dhx_matrix_scell,
+.dhx_matrix_cell {
+ border-bottom: 1px solid #CECECE;
+ border-right: 1px solid #CECECE;
+}
+.dhx_cal_header div div {
+ border-left: 1px solid #CECECE;
+}
+.dhx_matrix_scell {
+ font-size: 13px;
+}
+.dhx_matrix_scell.folder {
+ border-right: 0;
+}
+.dhx_second_scale_bar {
+ border-bottom: 1px solid #CECECE;
+}
+/* timeline end */
+/* recurring */
+.dhx_repeat_divider {
+ border-left: 1px solid #CECECE;
+}
+.dhx_custom_button {
+ background-color: white;
+ border: 1px solid #CECECE;
+ color: #747473;
+}
+.dhx_cal_light_wide .dhx_custom_button {
+ margin-top: 6px;
+}
+.dhx_custom_button_recurring {
+ background-image: url(imgs_flat/but_repeat.gif);
+}
+.dhx_form_repeat {
+ background-color: transparent;
+}
+/* recurring end */
+/* agenda */
+.dhx_v_border,
+.dhx_agenda_line div {
+ border-right: 1px solid #CECECE;
+}
+.dhx_cal_header .dhx_agenda_line {
+ height: 100%;
+ line-height: 35px;
+}
+.dhx_cal_header .dhx_agenda_line div {
+ height: 100%;
+ line-height: 35px;
+}
+/* agenda end */
+/* year */
+.dhx_year_month {
+ border: 1px solid #CECECE;
+}
+.dhx_scale_bar_last {
+ border-right: 1px solid #CECECE;
+}
+.dhx_year_body {
+ border-left: 1px solid #CECECE;
+}
+/* year end */
+/* expand */
+.dhx_expand_icon {
+ top: -3px;
+}
+/* expand end */
+/* units view */
+.dhx_scale_bar .dhx_cal_next_button,
+.dhx_scale_bar .dhx_cal_prev_button {
+ width: 20px;
+ height: 100%;
+ top: 0px !important;
+ border: 0;
+}
+.dhx_scale_bar .dhx_cal_next_button {
+ right: 1px !important;
+ border-left: 1px solid #CECECE;
+}
+.dhx_scale_bar .dhx_cal_prev_button {
+ left: 1px !important;
+ border-right: 1px solid #CECECE;
+}
+/* units view end */
+/* map view */
+.dhx_map_line .headline_date,
+.dhx_map_line .headline_description {
+ border: 0;
+}
+.dhx_map_line .headline_date {
+ border-right: 1px solid #CECECE;
+}
+.dhx_cal_header .dhx_map_line {
+ height: 100%;
+}
+.dhx_cal_header .dhx_map_line .headline_date,
+.dhx_cal_header .dhx_map_line .headline_description {
+ height: 100%;
+ line-height: 35px;
+}
+/* map view end */
+/* tooltip start */
+.dhtmlXTooltip.tooltip {
+ border-left: 1px solid #CECECE;
+ border-top: 1px solid #CECECE;
+ color: #747473;
+ font-size: 12px;
+ line-height: 16px;
+}
+/* tooltip end */
+/* week agenda start */
+.dhx_wa_scale_bar {
+ border-top: 1px solid #CECECE;
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_wa_column_last .dhx_wa_day_cont {
+ border-left: 1px solid #CECECE;
+}
+.dhx_wa_ev_body {
+ border-bottom: 1px solid #CECECE;
+}
+.dhx_wa_scale_bar {
+ background-color: #f0ede7;
+}
+.dhx_wa_ev_body.dhx_cal_event_selected {
+ background-color: #fff3a1;
+ color: #362d26;
+}
+.dhx_wa_dnd {
+ background-color: #fddb93 !important;
+ color: #747473 !important;
+ border: 1px solid #ccb177;
+}
+/* week agenda end */
+/* readonly start */
+.dhx_text_disabled {
+ color: #2E2E2E;
+}
+.dhx_cal_ltext .dhx_text_disabled {
+ line-height: 22px;
+}
+/* readonly end */
+/* grid view start */
+.dhx_grid_v_border {
+ border-right-color: #CECECE;
+}
+.dhx_cal_header .dhx_grid_line,
+.dhx_cal_header .dhx_grid_line div {
+ height: 100%;
+ line-height: 35px;
+}
+/* grid view end*/
+/* left border support */
+.dhx_scale_hour_border,
+.dhx_month_body_border,
+.dhx_scale_bar_border,
+.dhx_month_head_border {
+ border-left: 1px solid #CECECE;
+}
+.dhx_cal_quick_info {
+ background: rgba(204, 204, 204, 0.8);
+ border: none;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+ font-family: "Segoe UI", Arial;
+ width: 280px;
+}
+.dhx_cal_qi_title {
+ color: #000;
+}
+.dhx_cal_qi_tdate {
+ color: #444;
+}
+.dhx_cal_qi_content {
+ background: none;
+ border: none;
+ padding: 10px 8px;
+}
+.dhx_qi_big_icon {
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+ border: none;
+ color: #FFF;
+ float: none;
+ font-size: 13px;
+}
+.dhx_qi_big_icon .dhx_menu_icon {
+ display: none !important;
+}
+.dhx_cal_quick_info .icon_details {
+ background: #5B9BE0;
+ margin-left: 100px;
+}
+.dhx_cal_quick_info .icon_details div {
+ padding-left: 12px;
+}
+.dhx_cal_quick_info .icon_delete {
+ background: #FE7510;
+}
+.dhx_cal_quick_info .icon_delete div {
+ padding-left: 12px;
+}
+/* export to PDF and iCal buttons start */
+.dhx_cal_navline .dhx_cal_export {
+ width: 32px;
+ height: 32px;
+ margin: 2px;
+ cursor: pointer;
+ top: 12px;
+}
+.dhx_cal_navline .dhx_cal_export.pdf {
+ left: auto;
+ right: 249px;
+ background-image: url('imgs_flat/export_pdf.png');
+}
+.dhx_cal_navline .dhx_cal_export.ical {
+ left: auto;
+ right: 210px;
+ background-image: url('imgs_flat/export_ical.png');
+}
+/* export to PDF and iCal buttons end */
+/* minicalendar */
+.dhx_mini_calendar {
+ font-family: "Segoe UI", Arial;
+ padding: 5px;
+}
+.dhx_mini_calendar .dhx_year_event,
+.dhx_mini_calendar .dhx_calendar_click {
+ border-radius: 0px;
+}
+.dhx_mini_calendar .dhx_month_head {
+ color: #363636;
+ font-family: "Segoe UI", Arial;
+ font-size: 13px;
+ margin: 2px 2px;
+}
+.dhx_mini_calendar .dhx_year_month {
+ color: #454544;
+ line-height: 20px;
+ height: 25px;
+ font-size: 20px;
+ font-weight: lighter;
+}
+.dhx_mini_calendar .dhx_cal_prev_button {
+ top: 8px !important;
+}
+.dhx_mini_calendar .dhx_cal_next_button {
+ top: 8px !important;
+}
+.dhx_mini_calendar .dhx_scale_bar {
+ font-family: "Segoe UI", Arial;
+ font-size: 11px;
+}
diff --git a/codebase/sources/skins/dhtmlxscheduler_glossy.css b/codebase/sources/skins/dhtmlxscheduler_glossy.css
new file mode 100644
index 0000000..1bd718c
--- /dev/null
+++ b/codebase/sources/skins/dhtmlxscheduler_glossy.css
@@ -0,0 +1,1882 @@
+/*
+dhtmlxScheduler v.4.1.0 Stardard
+
+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.
+*/
+.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;
+ overflow: hidden;
+ 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: 300px;
+ width: 300px;
+ text-align: center;
+ position: fixed;
+ background-color: #fff;
+ background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%);
+ box-shadow: 0px 0px 14px #888;
+ font-family: Tahoma;
+ z-index: 20000;
+ border-radius: 6px;
+ border: 1px solid #ffffff;
+}
+.dhtmlx_popup_title {
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ border-width: 0px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%);
+}
+.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: 5px;
+}
+.dhtmlx_popup_button,
+.dhtmlx_button {
+ height: 30px;
+ line-height: 30px;
+ display: inline-block;
+ margin: 0 5px;
+ border-radius: 6px;
+ color: #FFF;
+}
+.dhtmlx_popup_button {
+ min-width: 120px;
+}
+div.dhx_modal_cover {
+ background-color: #000;
+ cursor: default;
+ filter: 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_popup_title,
+.dhtmlx-confirm-error .dhtmlx_popup_title {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);
+}
+.dhtmlx-alert-error,
+.dhtmlx-confirm-error {
+ border: 1px solid #ff0000;
+}
+/*Skin section*/
+.dhtmlx_button,
+.dhtmlx_popup_button {
+ box-shadow: 0px 0px 4px #888;
+ border: 1px solid #838383;
+}
+.dhtmlx_button input,
+.dhtmlx_popup_button div {
+ border: 1px solid #FFF;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%);
+ border-radius: 6px;
+ font-size: 15px;
+ font-weight: normal;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ color: #fff;
+ padding: 0px;
+ margin: 0px;
+ vertical-align: top;
+ height: 28px;
+ line-height: 28px;
+}
+.dhtmlx_button input:focus,
+.dhtmlx_button input:active,
+.dhtmlx_popup_button div:active,
+.dhtmlx_popup_button div:focus {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);
+ background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+ background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%);
+}
+.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: 0px 0px 10px #888;
+ 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 #B8B8B8;
+}
+.dhtmlx-error {
+ background-color: #d81b1b;
+ border: 1px solid #ff3c3c;
+ box-shadow: 0px 0px 10px #000;
+}
+.dhtmlx-error div {
+ background-color: #d81b1b;
+ border: 1px solid #940000;
+ color: #FFF;
+}
+.dhx_cal_event .dhx_header,
+.dhx_cal_event .dhx_title,
+.dhx_cal_event .dhx_body,
+.dhx_cal_event .dhx_footer {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ color: #887A2E;
+ overflow: hidden;
+ width: 100%;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_move_denied .dhx_cal_event .dhx_header,
+.dhx_move_denied .dhx_cal_event .dhx_title {
+ cursor: default;
+}
+.dhx_cal_event .dhx_header {
+ height: 1px;
+ margin-left: 1px;
+ border-width: 1px 1px 0px 1px;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_title {
+ height: 12px;
+ border-width: 0px 1px 1px 1px;
+ border-bottom-style: dotted;
+ font-size: 7pt;
+ font-weight: bold;
+ text-align: center;
+ background-position: right;
+ background-repeat: no-repeat;
+ cursor: pointer;
+}
+.dhx_cal_event .dhx_body,
+.dhx_cal_event.dhx_cal_select_menu .dhx_body {
+ border-width: 0 1px 1px 1px;
+ padding: 5px;
+}
+.dhx_cal_event.dhx_cal_select_menu {
+ -webkit-box-shadow: 0 0 1px #FFF;
+ -moz-box-shadow: 0 0 1px #FFF;
+ box-shadow: 0 0 1px #FFF;
+}
+.dhx_resize_denied,
+.dhx_resize_denied .dhx_event_resize {
+ cursor: default !important;
+}
+.dhx_cal_event .dhx_event_resize {
+ cursor: s-resize;
+}
+.dhx_cal_event .dhx_footer,
+.dhx_cal_event .dhx_select_menu_footer {
+ height: 1px;
+ margin-left: 2px;
+ border-width: 0px 1px 1px 1px;
+ position: relative;
+}
+.dhx_cal_event_line {
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ border-radius: 3px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 10px;
+ color: #887A2E;
+ cursor: pointer;
+ overflow: hidden;
+}
+.dhx_cal_event_clear {
+ font-family: Tahoma;
+ font-size: 8pt;
+ height: 13px;
+ padding-left: 2px;
+ color: #887A2E;
+ white-space: nowrap;
+ overflow: hidden;
+ cursor: pointer;
+}
+.dhx_in_move {
+ background-color: #FFFF80;
+}
+.dhx_cal_event.dhx_cal_editor {
+ border: 1px solid #B7A543;
+ border-top-style: dotted;
+ z-index: 999;
+ position: absolute;
+ overflow: hidden;
+}
+textarea.dhx_cal_editor {
+ width: 100%;
+ height: 100%;
+ border: 0 solid black;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+}
+div.dhx_menu_head {
+ background-image: url(imgs/controls.gif);
+ background-position: 0px -43px;
+ width: 10px;
+ height: 10px;
+ margin-left: 5px;
+ margin-top: 1px;
+ border: none;
+ cursor: default;
+}
+div.dhx_menu_icon {
+ background-image: url(imgs/controls.gif);
+ width: 20px;
+ height: 20px;
+ margin-left: -5px;
+ margin-top: 0px;
+ border: none;
+ cursor: pointer;
+}
+div.icon_details {
+ background-position: 0px 0px;
+}
+div.icon_edit {
+ background-position: -22px 0px;
+}
+div.icon_save {
+ background-position: -84px -1px;
+}
+div.icon_cancel {
+ background-position: -62px 0px;
+}
+div.icon_delete {
+ background-position: -42px 0px;
+}
+/*view more link in month view*/
+.dhx_month_link {
+ position: absolute;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ text-align: right;
+ cursor: pointer;
+ padding-right: 10px;
+}
+.dhx_month_link a {
+ color: blue;
+}
+.dhx_month_link a:hover {
+ text-decoration: underline;
+}
+.dhx_global_tip {
+ font-family: Tahoma, Helvetica;
+ text-align: center;
+ font-size: 20px;
+ position: fixed;
+ top: 60px;
+ right: 20px;
+ background-color: rgba(255, 255, 255, 0.7);
+ color: #000;
+ z-index: 10000;
+ padding: 20px 30px;
+ width: 190px;
+}
+.dhx_global_tip div {
+ font-size: 30px;
+}
+@media (-moz-touch-enabled) {
+ .dhx_cal_container {
+ user-select: none;
+ -moz-user-select: none;
+ }
+}
+.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: #FFE763;
+ border-radius: 5px;
+ font-family: Tahoma;
+ font-size: 8pt;
+ border: 1px solid #B7A64B;
+ color: #887A2E;
+ position: absolute;
+ z-index: 10001;
+ width: 580px;
+ height: 300px;
+ box-shadow: 5px 5px 5px #888;
+}
+.dhx_cal_light_wide {
+ width: 650px;
+}
+.dhx_mark {
+ position: relative;
+ top: 3px;
+ background-image: url('imgs/controls.gif');
+ background-position: 0px -43px;
+ padding-left: 10px;
+}
+.dhx_ie6 .dhx_mark {
+ background-position: 6px -41px;
+}
+.dhx_cal_light select {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+ padding: 2px;
+ margin: 0px;
+}
+.dhx_cal_ltitle {
+ padding: 2px 0px 2px 5px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+.dhx_cal_ltitle span {
+ white-space: nowrap;
+}
+.dhx_cal_lsection {
+ background-color: #DBCF8C;
+ color: #FFF4B5;
+ font-weight: bold;
+ padding: 5px 0px 3px 10px;
+}
+.dhx_section_time {
+ background-color: #DBCF8C;
+ white-space: nowrap;
+}
+.dhx_cal_lsection .dhx_fullday {
+ float: right;
+ margin-right: 5px;
+ color: #887A2E;
+ font-size: 12px;
+ font-weight: normal;
+ line-height: 20px;
+ vertical-align: top;
+ cursor: pointer;
+}
+.dhx_cal_lsection {
+ font-size: 18px;
+ font-family: Arial;
+}
+.dhx_cal_ltext {
+ padding: 2px 0px 2px 10px;
+ overflow: hidden;
+}
+.dhx_cal_ltext textarea {
+ background-color: #FFF4B5;
+ /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */
+ overflow: auto;
+ border: none;
+ color: #887A2E;
+ 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 #DCC43E;
+ background-color: #FFF4B5;
+ overflow: hidden;
+ margin-left: 3px;
+ width: 572px;
+ height: 1px;
+}
+.dhx_btn_set {
+ padding: 5px 10px 0px 10px;
+ float: left;
+}
+.dhx_btn_set div {
+ float: left;
+ height: 21px;
+ line-height: 21px;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.dhx_save_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -84px 0px;
+ width: 21px;
+}
+.dhx_cancel_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -63px 0px;
+ width: 20px;
+}
+.dhx_delete_btn {
+ background-image: url('imgs/controls.gif');
+ background-position: -42px 0px;
+ 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: alpha(opacity=10);
+}
+.dhx_custom_button {
+ padding: 0px 3px 0px 3px;
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+ background-color: #FFE763;
+ 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 .dhx_cal_larea {
+ border-top-width: 0px;
+}
+.dhx_cal_light_wide .dhx_cal_lsection {
+ border: 0px;
+ float: left;
+ text-align: right;
+ width: 100px;
+ height: 20px;
+ font-size: 16px;
+ padding: 5px 0px 0px 10px;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ border-top: 1px solid #DBCF8C;
+ position: relative;
+ background-color: #DBCF8C;
+ overflow: hidden;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ padding-top: 2px !important;
+ height: 20px !important;
+}
+.dhx_section_time {
+ text-align: center;
+}
+.dhx_cal_light_wide .dhx_cal_larea {
+ width: 730px;
+}
+.dhx_cal_light_wide {
+ width: 738px;
+}
+.dhx_cal_light_wide .dhx_section_time {
+ background: transparent;
+}
+.dhx_cal_light_wide .dhx_cal_checkbox label {
+ padding-left: 0px;
+}
+.dhx_cal_wide_checkbox input {
+ margin-top: 8px;
+ margin-left: 14px;
+}
+.dhx_cal_light input {
+ font-family: Tahoma;
+ font-size: 8pt;
+ color: #887A2E;
+}
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday {
+ float: none;
+ margin-right: 0px;
+ color: #FFF4B5;
+ font-weight: bold;
+ font-size: 16px;
+ font-family: Arial;
+ cursor: pointer;
+}
+.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_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_minical_popup {
+ position: absolute;
+ z-index: 10100;
+ width: 251px;
+ height: 175px;
+}
+.dhx_scale_bar_header {
+ position: absolute;
+ border-bottom: 1px dotted #8894A3;
+ width: 100%;
+}
+.dhx_expand_icon {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ background-image: url(imgs/collapse_expand_icon.gif);
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ background-position: 0px 18px;
+ z-index: 16;
+}
+.dhx_scheduler_agenda .dhx_cal_data {
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_area {
+ width: 100%;
+ overflow-y: auto;
+ background-image: url(imgs/databg.png);
+}
+.dhx_agenda_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_agenda_line div {
+ float: left;
+ width: 188px;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_agenda_area .dhx_agenda_line div {
+ border-right: 0px dotted #8894A3;
+}
+.dhx_v_border {
+ position: absolute;
+ left: 187px;
+ top: 0;
+ border-right: 1px dotted #8894A3;
+ width: 1px;
+ height: 100%;
+}
+.dhx_agenda_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_agenda_line span {
+ padding-left: 5px;
+ line-height: 21px;
+}
+.dhx_year_body {
+ border-left: 1px dotted #586A7E;
+}
+.dhx_year_week {
+ position: relative;
+}
+.dhx_scale_bar_last {
+ border-right: 1px dotted #586A7E;
+}
+.dhx_year_month {
+ height: 18px;
+ padding-top: 3px;
+ border: 1px dotted #586A7E;
+ text-align: center;
+ vertical-align: middle;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head,
+.dhx_year_body .dhx_before .dhx_month_head a,
+.dhx_year_body .dhx_after .dhx_month_head a {
+ color: #E2E3E6 !important;
+}
+.dhx_year_body .dhx_month_body {
+ height: 0px;
+ overflow: hidden;
+}
+.dhx_month_head.dhx_year_event {
+ background-color: #FFE763;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head {
+ cursor: default;
+}
+.dhx_year_tooltip {
+ border: 1px solid #BBBBBB;
+ background-image: url(imgs/databg.png);
+ position: absolute;
+ z-index: 9998;
+ width: 300px;
+ height: auto;
+ font-family: Tahoma;
+ font-size: 8pt;
+ overflow: hidden;
+}
+.dhx_tooltip_line {
+ line-height: 20px;
+ height: 20px;
+ overflow: hidden;
+}
+.dhx_tooltip_line .dhx_event_icon {
+ width: 20px;
+ height: 20px;
+ padding-right: 10px;
+ float: left;
+ border-width: 0px;
+ position: relative;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_tooltip_date {
+ float: left;
+ width: auto;
+ padding-left: 5px;
+ text-align: center;
+}
+.dhx_text_disabled {
+ color: #887A2E;
+ font-family: Tahoma;
+ font-size: 8pt;
+}
+.dhx_mini_calendar {
+ -moz-box-shadow: 5px 5px 5px #888;
+ /*Doesn't work in IE*/
+ -khtml-box-shadow: 5px 5px 5px #888;
+ -moz-user-select: -moz-none;
+ -webkit-user-select: none;
+ -user-select: none;
+}
+.dhx_mini_calendar .dhx_month_head {
+ cursor: pointer;
+}
+.dhx_mini_calendar .dhx_calendar_click {
+ background-color: #C2D5FC;
+}
+.dhx_cal_navline div.dhx_minical_icon {
+ width: 18px;
+ height: 18px;
+ left: 190px;
+ top: 1px;
+ cursor: pointer;
+ background-image: url(imgs/calendar.gif);
+}
+.dhx_matrix_scell {
+ height: 100%;
+}
+.dhx_matrix_cell,
+.dhx_matrix_scell {
+ overflow: hidden;
+ text-align: center;
+ vertical-align: middle;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_matrix_cell {
+ background-color: white;
+}
+.dhx_matrix_line {
+ overflow: hidden;
+}
+.dhx_matrix_cell div,
+.dhx_matrix_scell div {
+ overflow: hidden;
+ text-align: center;
+ height: auto;
+}
+.dhx_cal_lsection .dhx_readonly {
+ font-size: 9pt;
+ font-size: 8pt;
+ padding: 2px;
+ color: #887A2E;
+}
+.dhx_cal_event_line .dhx_event_resize {
+ cursor: w-resize;
+ background: url(imgs/resize_dots.png) repeat-y;
+ position: absolute;
+ top: 0;
+ width: 4px;
+ height: 100%;
+}
+.dhx_event_resize_start {
+ left: 0;
+}
+.dhx_event_resize_end {
+ right: 0;
+}
+/* Tree view */
+.dhx_matrix_scell.folder,
+.dhx_data_table.folder .dhx_matrix_cell {
+ background-color: #969394;
+ cursor: pointer;
+}
+.dhx_matrix_scell .dhx_scell_level0 {
+ padding-left: 5px;
+}
+.dhx_matrix_scell .dhx_scell_level1 {
+ padding-left: 20px;
+}
+.dhx_matrix_scell .dhx_scell_level2 {
+ padding-left: 35px;
+}
+.dhx_matrix_scell .dhx_scell_level3 {
+ padding-left: 50px;
+}
+.dhx_matrix_scell .dhx_scell_level4 {
+ padding-left: 65px;
+}
+.dhx_matrix_scell.folder {
+ font-weight: bold;
+ text-align: left;
+}
+.dhx_matrix_scell.folder .dhx_scell_expand {
+ float: left;
+ width: 10px;
+ padding-right: 3px;
+}
+.dhx_matrix_scell.folder .dhx_scell_name {
+ float: left;
+ width: auto;
+}
+.dhx_matrix_scell.item .dhx_scell_name {
+ padding-left: 15px;
+ text-align: left;
+}
+.dhx_data_table.folder .dhx_matrix_cell {
+ border-right: 0;
+}
+.dhx_section_timeline {
+ overflow: hidden;
+ padding: 4px 0 2px 10px;
+}
+.dhx_section_timeline select {
+ width: 552px;
+}
+/* Tree view end*/
+/* Map view */
+.dhx_map_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+ background-image: url(imgs/databg.png);
+}
+.dhx_map_line .dhx_event_icon {
+ width: 20px;
+ border-width: 0px;
+ background: url(imgs/icon.png) no-repeat;
+ background-position: 5px 4px;
+ cursor: pointer;
+}
+.dhx_map_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_map {
+ position: absolute;
+}
+.dhx_map_line div {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .dhx_map_description {
+ float: left;
+ border-right: 0 dotted #8894A3;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line .headline_date,
+.dhx_map_line .headline_description {
+ border-left: 0;
+}
+.dhx_map_line .line_description {
+ float: left;
+ border-right: 1px dotted #8894A3;
+ text-align: left;
+ padding-left: 5px;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_map_line.highlight {
+ background-color: #C4C5CC;
+}
+.dhx_map_area .dhx_map_line div {
+ border-right: 0px dotted #8894A3;
+}
+/* Map view end */
+/* dhtmlXTooltip start */
+.dhtmlXTooltip.tooltip {
+ -moz-box-shadow: 3px 3px 3px #888888;
+ -webkit-box-shadow: 3px 3px 3px #888888;
+ -o-box-shadow: 3px 3px 3px #888888;
+ box-shadow: 3px 3px 3px #888888;
+ filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);
+ background-color: white;
+ border-left: 1px dotted #887A2E;
+ border-top: 1px dotted #887A2E;
+ color: #887A2E;
+ cursor: default;
+ padding: 10px;
+ position: absolute;
+ z-index: 500;
+ font-family: Tahoma;
+ font-size: 8pt;
+ opacity: 1;
+}
+/* dhtmlXTooltip end */
+/* Lightbox checkbox section */
+.dhx_cal_checkbox label {
+ padding-left: 5px;
+}
+/* Lightbox checkbox section end */
+/* Lightbox radiobuttons section */
+.dhx_cal_light .radio {
+ padding: 2px 0px 2px 10px;
+}
+.dhx_cal_light .radio input,
+.dhx_cal_light .radio label {
+ line-height: 15px;
+}
+.dhx_cal_light .radio input {
+ vertical-align: middle;
+ margin: 0px;
+ padding: 0px;
+}
+.dhx_cal_light .radio label {
+ vertical-align: middle;
+ padding-right: 10px;
+}
+/* Lightbox radiobuttons section end */
+/* Lightbox dhtmlx combo section */
+.dhx_cal_light .combo {
+ padding: 4px;
+}
+.dhx_cal_light_wide .dhx_combo_box {
+ width: 608px !important;
+ left: 10px;
+}
+/* Lightbox dhtmlx combo section end */
+/* Agenda week start */
+.dhx_wa_column {
+ float: left;
+}
+.dhx_wa_column_last .dhx_wa_day_cont {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_wa_scale_bar {
+ font-family: Tahoma;
+ padding-left: 10px;
+ font-size: 11px;
+ border-top: 1px dotted #8894A3;
+ border-bottom: 1px dotted #8894A3;
+}
+.dhx_wa_day_data {
+ background-color: #FCFEFC;
+ overflow-y: auto;
+}
+.dhx_wa_ev_body {
+ border-bottom: 1px dotted #778899;
+ font-size: 12px;
+ padding: 5px 0 5px 7px;
+}
+.dhx_wa_dnd {
+ font-family: Tahoma;
+ position: absolute;
+ padding-right: 7px;
+ color: #887AE2 !important;
+ background-color: #FFE763 !important;
+ border: 1px solid #B7A543;
+}
+.dhx_cal_event_selected {
+ background-color: #9cc1db;
+ color: white;
+}
+/* Agenda week end */
+/* timeline second scale start */
+.dhx_second_scale_bar {
+ border-bottom: 1px dotted #586A7E;
+ padding-top: 2px;
+}
+/* timeline second scale end */
+/* grid view */
+.dhx_cal_header div div {
+ border-left: 1px dotted #8894A3;
+}
+.dhx_grid_area {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ background-color: #FCFEFC;
+}
+.dhx_grid_area table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ width: 100%;
+ table-layout: fixed;
+}
+.dhx_grid_area td {
+ table-layout: fixed;
+ text-align: center;
+}
+.dhx_grid_line {
+ height: 21px;
+ clear: both;
+ overflow: hidden;
+}
+.dhx_grid_line div {
+ float: left;
+ cursor: default;
+ padding-top: 0;
+ padding-bottom: 0;
+ text-align: center;
+ line-height: 21px;
+ overflow: hidden;
+}
+.dhx_grid_area td,
+.dhx_grid_line div {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.dhx_grid_area tr.dhx_grid_event {
+ height: 21px;
+ overflow: hidden;
+ margin: 0 0 1px 0;
+}
+.dhx_grid_area tr.dhx_grid_event td {
+ /*borders for old ies*/
+ border-bottom: 1px solid #ECEEF4;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td {
+ border-bottom-width: 0px;
+ border-bottom-style: none;
+}
+.dhx_grid_area tr.dhx_grid_event:nth-child(2n) {
+ background-color: #ECEEF4;
+}
+.dhx_grid_area .dhx_grid_dummy {
+ table-layout: auto;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+.dhx_grid_v_border {
+ position: absolute;
+ border-right: 1px solid #A4BED4;
+ width: 1px;
+ height: 100%;
+}
+.dhx_grid_event_selected {
+ background-color: #9cc1db !important;
+ color: white !important;
+}
+.dhx_grid_sort_desc .dhx_grid_view_sort {
+ background-position: 0 -55px;
+}
+.dhx_grid_sort_asc .dhx_grid_view_sort {
+ background-position: 0 -66px;
+}
+.dhx_grid_view_sort {
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ border: none !important;
+ top: 5px;
+ background-repeat: no-repeat;
+ background-image: url(imgs/images.png);
+}
+/* end grid */
+/* marked timespans */
+.dhx_marked_timespan {
+ position: absolute;
+ width: 100%;
+}
+.dhx_time_block {
+ position: absolute;
+ width: 100%;
+ background: silver;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+ z-index: 1;
+}
+.dhx_time_block_reset {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.dhx_scheduler_month .dhx_marked_timespan {
+ display: none;
+}
+.dhx_mini_calendar .dhx_marked_timespan {
+ display: none;
+}
+/* now time */
+.dhx_now_time {
+ width: 100%;
+ border-bottom: 2px solid red;
+ z-index: 1;
+}
+.dhx_scheduler_month .dhx_now_time {
+ border-bottom: 0;
+ border-left: 2px solid red;
+}
+.dhx_matrix_now_time {
+ border-left: 2px solid red;
+ z-index: 1;
+}
+.dhx_now_time,
+.dhx_matrix_now_time {
+ opacity: 0.5;
+}
+/* Quick info */
+.dhx_cal_quick_info {
+ border: 2px solid #888;
+ border-radius: 5px;
+ position: absolute;
+ z-index: 300;
+ background-color: #8e99ae;
+ background-color: rgba(98, 107, 127, 0.5);
+ padding-left: 7px;
+ 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 {
+ padding: 5px 0px 10px 5px;
+ color: #FFF;
+ letter-spacing: 1px;
+}
+.dhx_cal_qi_tdate {
+ font-size: 14px;
+}
+.dhx_cal_qi_tcontent {
+ font-size: 18px;
+ font-weight: bold;
+}
+.dhx_cal_qi_content {
+ border: 1px solid #888;
+ background-color: #fefefe;
+ padding: 16px 8px;
+ font-size: 14px;
+ color: #444;
+ width: 275px;
+ overflow: hidden;
+}
+.dhx_qi_big_icon {
+ border-radius: 3px;
+ color: #444;
+ margin: 5px 9px 5px 0px;
+ min-width: 60px;
+ line-height: 20px;
+ vertical-align: middle;
+ padding: 5px 10px 5px 5px;
+ cursor: pointer;
+ background-color: #fefefe;
+ border-bottom: 1px solid #666;
+ border-right: 1px solid #666;
+ float: left;
+}
+.dhx_cal_qi_controls div {
+ float: left;
+ height: 20px;
+ text-align: center;
+ line-height: 20px;
+}
+.dhx_qi_big_icon .dhx_menu_icon {
+ margin: 0 8px 0 0px;
+}
+.dhx_drag_marker {
+ width: 100%;
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+ opacity: 0.5;
+ background-color: #FFE763;
+ position: absolute;
+ box-sizing: border-box !important;
+ border-top: 1px solid #B6B6B6;
+ border-bottom: 1px solid #b6b6b6;
+}
+/* bootstrap CSS fix start */
+.dhx_cal_navline div,
+.dhx_cal_header,
+.dhx_cal_header div,
+.dhx_cal_data div,
+.dhx_cal_light,
+.dhx_cal_light div {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+.dhx_cal_light .dhx_cal_radio label {
+ margin-bottom: 0;
+}
+.dhx_cal_event div {
+ line-height: normal;
+}
+/* bootstrap CSS fix end */
+.dhx_cal_container {
+ background-color: #C2D5FC;
+ font-family: Tahoma;
+ font-size: 8pt;
+ position: relative;
+ overflow: hidden;
+}
+.dhx_cal_container div {
+ -moz-user-select: none;
+ -moz-user-select: -moz-none;
+}
+.dhx_cal_navline {
+ height: 20px;
+ position: absolute;
+ z-index: 3;
+ width: 750px;
+ color: #2F3A48;
+}
+.dhx_cal_navline div {
+ position: absolute;
+ top: 2px;
+ white-space: nowrap;
+}
+.dhx_cal_navline .dhx_cal_date {
+ font-weight: 600;
+ left: 210px;
+ padding-top: 1px;
+}
+.dhx_cal_button .dhx_left_bg {
+ width: 1px;
+ overflow: hidden;
+ height: 17px;
+ z-index: 20;
+ top: 0px;
+}
+.dhx_cal_prev_button {
+ background-image: url(imgs/buttons.png);
+ background-position: 0px 0px;
+ width: 29px;
+ height: 17px;
+ left: 50px;
+ cursor: pointer;
+}
+.dhx_cal_next_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -30px 0px;
+ width: 29px;
+ height: 17px;
+ left: 80px;
+ cursor: pointer;
+}
+.dhx_cal_today_button {
+ background-image: url(imgs/buttons.png);
+ background-position: -60px 0px;
+ width: 75px;
+ height: 17px;
+ left: 112px;
+ cursor: pointer;
+ text-align: center;
+ text-decoration: underline;
+}
+.dhx_cal_tab {
+ width: 59px;
+ height: 19px;
+ text-align: center;
+ text-decoration: underline;
+ padding-top: 2px;
+ cursor: pointer;
+ background-color: #D8E1EA;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.dhx_cal_tab.active {
+ text-decoration: none;
+ cursor: default;
+ font-weight: bold;
+ border: 1px dotted #586A7E;
+ border-bottom: 0;
+ background-color: #C2D5FC;
+}
+.dhx_cal_header {
+ position: absolute;
+ left: 10px;
+ top: 23px;
+ width: 750px;
+ border-top: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+ z-index: 2;
+ overflow: hidden;
+ color: #2F3A48;
+}
+.dhx_cal_data {
+ -webkit-tap-highlight-color: transparent;
+ border-top: 1px dotted #8894A3;
+ position: absolute;
+ top: 44px;
+ width: 600px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ -webkit-overflow-scrolling: touch;
+}
+.dhx_cal_data {
+ -ms-touch-action: pan-y;
+}
+.dhx_cal_event,
+.dhx_cal_event_line,
+.dhx_cal_event_clear {
+ -ms-touch-action: none;
+}
+.dhx_scale_bar {
+ position: absolute;
+ text-align: center;
+ background-color: #C2D5FC;
+ padding-top: 3px;
+ border-left: 1px dotted #586A7E;
+}
+.dhx_scale_holder {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg.png);
+}
+.dhx_scale_holder_now {
+ position: absolute;
+ border-right: 1px dotted #586A7E;
+ background-image: url(imgs/databg_now.png);
+}
+.dhx_scale_hour {
+ height: 41px;
+ width: 50px;
+ border-bottom: 1px dotted #8894A3;
+ background-color: #C2D5FC;
+ text-align: center;
+ line-height: 40px;
+ color: #586A7E;
+ overflow: hidden;
+}
+.dhx_month_head {
+ background-color: #EBEFF4;
+ color: #2F3A48;
+ height: 18px;
+ padding-right: 5px;
+ padding-top: 3px;
+ text-align: right;
+ border-right: 1px dotted #586A7E;
+}
+.dhx_month_body {
+ border-right: 1px dotted #586A7E;
+ border-bottom: 1px dotted #586A7E;
+ background-color: #FFFFFF;
+}
+.dhx_now .dhx_month_body {
+ background-color: #E2EDFF;
+}
+.dhx_after .dhx_month_body,
+.dhx_before .dhx_month_body {
+ background-color: #ECECEC;
+}
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head {
+ background-color: #E2E3E6;
+ color: #94A6BB;
+}
+.dhx_now .dhx_month_head {
+ background-color: #D1DEF4;
+ font-weight: bold;
+}
+.dhx_scale_ignore {
+ display: none;
+}
+.dhx_cal_drag {
+ position: absolute;
+ z-index: 9999;
+ background-color: #FFE763;
+ border: 1px solid #B7A543;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+.dhx_loading {
+ position: absolute;
+ width: 128px;
+ height: 15px;
+ background-image: url(imgs/loading.gif);
+ z-index: 9999;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day {
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day {
+ position: absolute;
+ border-top: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ background-position: center center;
+ background-color: #E1E6FF;
+ background-repeat: no-repeat;
+ border-bottom: 1px dotted #8894A3;
+ border-right: 1px dotted #8894A3;
+}
+.dhx_multi_day_icon {
+ background-image: url(imgs/clock_big.gif);
+}
+.dhx_multi_day_icon_small {
+ background-image: url(imgs/clock_small.gif);
+}
+.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container {
+ background-color: #d0e5ff;
+}
+/* left border config option support */
+.dhx_scale_hour_border,
+.dhx_month_body_border,
+.dhx_scale_bar_border,
+.dhx_month_head_border {
+ border-left: 1px dotted #8894A3;
+}
+/* export to PDF and iCal buttons start */
+.dhx_cal_navline .dhx_cal_export {
+ width: 18px;
+ height: 18px;
+ margin: 2px;
+ cursor: pointer;
+ top: 0px;
+}
+.dhx_cal_navline .dhx_cal_export.pdf {
+ left: 2px;
+ background-image: url('imgs/export_pdf.png');
+}
+.dhx_cal_navline .dhx_cal_export.ical {
+ left: 24px;
+ background-image: url('imgs/export_ical.png');
+}
+/* export to PDF and iCal buttons end */
+/*All*/
+.dhx_form_repeat,
+.dhx_form_repeat input {
+ padding: 0;
+ margin: 0;
+ padding-left: 5px;
+ font-family: Tahoma, Verdana;
+ font-size: 11px;
+ line-height: 24px;
+}
+.dhx_form_repeat {
+ overflow: hidden;
+ /*height:115px;*/
+ height: 0px;
+ background-color: #FFF4B5;
+ /*border: 1px solid #DCC43E;*/
+}
+.dhx_cal_light_wide .dhx_form_repeat {
+ background-color: transparent;
+}
+.dhx_repeat_center,
+.dhx_repeat_left {
+ height: 115px;
+ padding: 10px 0 10px 10px;
+ float: left;
+}
+.dhx_repeat_left {
+ width: 95px;
+}
+.dhx_repeat_center {
+ width: 335px;
+ margin-top: 12px;
+}
+.dhx_repeat_divider {
+ float: left;
+ height: 115px;
+ border-left: 1px dotted #DCC43E;
+ /*background-color: #DCC43E;*/
+ width: 1px;
+}
+.dhx_repeat_right {
+ float: right;
+ height: 115px;
+ width: 160px;
+ padding: 10px 3px 10px 10px;
+ margin-top: 7px;
+}
+input.dhx_repeat_text {
+ height: 16px;
+ width: 27px;
+ margin: 0 4px 0 4px;
+ line-height: 18px;
+ padding: 0 0 0 2px;
+}
+.dhx_form_repeat select {
+ height: 20px;
+ width: 87px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+}
+input.dhx_repeat_date {
+ height: 18px;
+ width: 80px;
+ padding: 0 0 0 2px;
+ margin: 0 4px 0 4px;
+ background-repeat: no-repeat;
+ background-position: 64px 0;
+ border: 1px #7f9db9 solid;
+ line-height: 18px;
+}
+input.dhx_repeat_radio {
+ margin-right: 4px;
+}
+input.dhx_repeat_checkbox {
+ margin: 4px 4px 0 0;
+}
+.dhx_repeat_days td {
+ padding-right: 5px;
+}
+.dhx_repeat_days label {
+ font-size: 10px;
+}
+.dhx_custom_button {
+ width: 90px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+.dhx_custom_button_recurring {
+ background-image: url(imgs/but_repeat.gif);
+ background-position: -5px 20px;
+ width: 20px;
+ margin-right: 10px;
+}
+/* increase width of lightbox */
+.dhx_cal_light_rec {
+ width: 640px;
+}
+.dhx_cal_light_rec .dhx_cal_larea {
+ width: 632px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide {
+ width: 816px;
+}
+.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea {
+ width: 808px;
+}
+.dhx_cal_tab.active {
+ border: none;
+}
+.dhx_multi_day {
+ border: none;
+ border-top: 1px solid #A4BED4;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ border-right: none;
+}
+.dhx_cal_container {
+ background-image: url(imgs_glossy/top-days-bg.png);
+ background-position: 0 24px;
+ background-repeat: repeat-x;
+ background-color: #EBEBEB;
+}
+.dhx_cal_navline {
+ background-color: #EBEBEB;
+ height: 23px !important;
+}
+.dhx_cal_prev_button {
+ background-image: url(imgs_glossy/buttons.gif);
+ width: 30px;
+ height: 20px;
+}
+.dhx_cal_next_button {
+ background-image: url(imgs_glossy/buttons.gif);
+ width: 30px;
+ height: 20px;
+}
+.dhx_cal_today_button {
+ padding-top: 3px;
+ background-image: url(imgs_glossy/buttons.gif);
+ width: 67px;
+ left: 110px;
+ text-decoration: none;
+}
+.dhx_cal_navline .dhx_cal_date {
+ padding-top: 4px;
+ left: 230px;
+}
+.dhx_cal_tab {
+ background-image: url(imgs_glossy/white_tab.png);
+ width: 60px;
+ height: 15px;
+ text-decoration: none;
+ padding-top: 4px;
+ margin-top: 4px;
+}
+.dhx_cal_tab.active {
+ background-image: url(imgs_glossy/blue_tab.png);
+ height: 18px;
+ width: 60px;
+ padding-top: 4px;
+ margin-top: 2px;
+}
+.dhx_cal_data {
+ border-top: 1px solid #A4BED4;
+}
+.dhx_cal_header {
+ background-image: url(imgs_glossy/top-days-bg.png);
+ background-repeat: repeat-x;
+ border-top: 0px;
+ border-right: 0px;
+}
+.dhx_scale_bar {
+ background-image: url(imgs_glossy/top-separator.gif);
+ background-position: 0px 0px;
+ background-repeat: no-repeat;
+ background-color: transparent;
+ padding-top: 3px;
+ border-left: 0px;
+}
+.dhx_scale_holder {
+ border-right: 1px solid #A4BED4;
+}
+.dhx_scale_holder_now {
+ border-right: 1px solid #A4BED4;
+}
+.dhx_scale_hour {
+ background-image: url(imgs_glossy/left-time-bg.png);
+ border-bottom: 1px solid #A4BED4;
+ color: #2F3A48;
+}
+.dhx_multi_day {
+ background-image: url(imgs_glossy/multi-days-bg.png);
+ background-repeat: repeat;
+ border-bottom: 1px solid #A4BED4;
+ border-left: 0px;
+}
+.dhx_multi_day_icon,
+.dhx_multi_day_icon_small {
+ background-image: url(imgs_glossy/clock_big.png);
+ border-bottom: 1px solid #A4BED4;
+ border-left: 1px solid #ffffff;
+ background-color: transparent;
+ background-repeat: no-repeat;
+}
+.dhx_multi_day_icon_small {
+ background-image: url(imgs_glossy/clock_small.png);
+}
+.dhx_month_head {
+ background-color: #FFFFFF;
+}
+.dhx_after .dhx_month_head,
+.dhx_before .dhx_month_head {
+ background-color: #EFEDE2;
+}
+.dhx_now .dhx_month_head {
+ background-color: #E4EFFF;
+}
+.dhx_after .dhx_month_body,
+.dhx_before .dhx_month_body {
+ background-color: #EFEDE2;
+}
+.dhx_cal_event div {
+ border: 1px solid #FFBD51;
+ background-color: #FFE4AB;
+ color: #000000;
+}
+.dhx_cal_event_clear {
+ color: #000000;
+}
+.dhx_cal_event_line {
+ background-image: url(imgs_glossy/event-bg.png);
+ border: 1px solid #FFBD51;
+ color: #000000;
+}
+.dhx_in_move {
+ background-image: url(imgs_glossy/move.png);
+}
+.dhx_cal_event .dhx_body {
+ background-color: #FFE4AB;
+}
+.dhx_cal_event .dhx_title {
+ background-color: #FFE4AB;
+}
+.dhx_cal_light {
+ -moz-box-shadow: 5px 5px 5px #888888;
+ -khtml-box-shadow: 5px 5px 5px #888;
+ background-color: #EBEBEB;
+ border: 2px solid #A4BED4;
+ color: #000000;
+}
+.dhx_cal_larea {
+ border: 1px solid #A4BED4;
+ border-width: 0 1px 1px;
+ background-color: #FFFFFF;
+}
+.dhx_cal_lsection {
+ background-image: url(imgs_glossy/lightbox.png);
+ font-size: 14px;
+ padding: 5px 0 5px 10px;
+ color: #000000;
+}
+.dhx_cal_light_wide .dhx_cal_lsection {
+ background-image: url(imgs_glossy/multi-days-bg.png);
+}
+.dhx_cal_ltext textarea {
+ background-color: #ffffff;
+ color: #000000;
+}
+.dhx_cal_light select,
+.dhx_cal_light input {
+ color: #000000;
+}
+.dhx_save_btn {
+ background-image: url(imgs_glossy/controlls5.png);
+}
+.dhx_cancel_btn {
+ background-image: url(imgs_glossy/controlls5.png);
+}
+.dhx_delete_btn {
+ background-image: url(imgs_glossy/controlls5.png);
+}
+div.dhx_menu_head {
+ background-image: url(imgs_glossy/controlls5.png);
+ border: 1px solid #FFE4AB;
+}
+div.dhx_menu_icon {
+ background-image: url(imgs_glossy/controlls5.png);
+ border: medium none;
+}
+.dhx_section_time {
+ height: 20px !important;
+ padding: 7px 0 !important;
+ text-align: center;
+ background: white;
+}
+.dhx_year_month {
+ background-image: url(imgs_glossy/top-days-bg.png);
+ border: 0px;
+}
+.dhx_year_week {
+ background-image: url(imgs_glossy/top-days-bg.png);
+}
+.dhx_month_head {
+ border-right: 1px solid #A4BED4;
+}
+.dhx_month_body,
+.dhx_matrix_cell,
+.dhx_matrix_scell {
+ border-right: 1px solid #A4BED4;
+ border-bottom: 1px solid #A4BED4;
+}
+.dhx_year_body {
+ border-left: 1px solid #A4BED4;
+}
+.dhx_scale_bar_last {
+ border-right: none;
+}
+.dhx_month_head.dhx_year_event {
+ background-color: #FFE4AB;
+}
+.dhx_year_body .dhx_before .dhx_month_head,
+.dhx_year_body .dhx_after .dhx_month_head,
+.dhx_year_body .dhx_before .dhx_month_head a,
+.dhx_year_body .dhx_after .dhx_month_head a {
+ color: #EFEDE2 !important;
+}
+.dhx_cal_lsection .dhx_readonly {
+ color: #000000;
+}
+.dhx_year_tooltip {
+ -moz-box-shadow: 2px 2px 2px #888;
+ /*Doesn't work in IE*/
+ -khtml-box-shadow: 2px 2px 2px #888;
+}
+.dhx_custom_button {
+ margin-top: -2px;
+}
+/*2.3*/
+.dhx_cal_lsection .dhx_fullday {
+ color: #000000;
+}
+.dhx_cal_lsection.dhx_cal_checkbox {
+ height: 16px;
+ line-height: 18px;
+}
+.dhx_cal_light_wide .dhx_cal_lsection.dhx_cal_checkbox {
+ height: 20px;
+}
+.dhx_cal_light_wide .dhx_combo_box {
+ width: 602px !important;
+ left: 0px;
+}
+.dhx_cal_checkbox label {
+ vertical-align: top;
+}
+.dhx_cal_light_wide .dhx_cal_lsection {
+ color: black;
+}
+.dhx_cal_light_wide .dhx_wrap_section {
+ border-top: 1px solid #A4BED4;
+ background-image: url(imgs_glossy/multi-days-bg.png);
+}
+.dhx_cal_light_wide .dhx_cal_ltext {
+ border-left: 1px solid #A4BED4;
+}
+.dhx_cal_light_wide .dhx_cal_ltext {
+ background-color: white;
+}
+.dhx_custom_button {
+ background: white;
+ color: black;
+}
+.dhx_form_repeat {
+ background: white;
+}
+.dhx_repeat_divider {
+ border-left: 1px solid #A4BED4;
+}
+/* timeline second scale start */
+.dhx_cal_header.dhx_second_cal_header {
+ background-image: url("imgs_glossy/second-top-days-bg.png");
+ padding-right: 20px;
+}
+.dhx_cal_header div div {
+ border-left: 0;
+}
+.dhx_scale_bar {
+ padding-top: 4px;
+}
+.dhx_second_scale_bar {
+ border-bottom: 0;
+ padding-top: 4px;
+}
+/* timeline second scale end */
+.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,
+.dhx_cal_lsection .dhx_fullday {
+ color: #000000;
+ font-size: 14px;
+}
+.dhx_cal_light_wide .dhx_cal_lsection {
+ font-size: 14px;
+ padding-right: 10px;
+}
+/* left border config option support */
+.dhx_scale_hour_border,
+.dhx_month_body_border,
+.dhx_scale_bar_border,
+.dhx_month_head_border {
+ border-left: 1px solid #A4BED4;
+}
+/* export to PDF and iCal buttons start */
+.dhx_cal_navline .dhx_cal_export {
+ width: 18px;
+ height: 18px;
+ margin: 2px;
+ cursor: pointer;
+ top: 1px;
+}
+.dhx_cal_navline .dhx_cal_export.pdf {
+ left: 2px;
+ background-image: url('imgs_glossy/export_pdf.png');
+}
+.dhx_cal_navline .dhx_cal_export.ical {
+ left: 24px;
+ background-image: url('imgs_glossy/export_ical.png');
+}
+/* export to PDF and iCal buttons end */