/*
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
*/
dhx.protoUI({
name:"dayevents",
defaults:{
hourFormat:"%H",
hourClock:12,
firstHour:0,
lastHour:24,
timeScaleWidth:45,
timeScaleHeight: 30,
scroll:true,
scaleBorder:1,
eventOffset:5,
width:"auto",
date: new Date()
},
$init:function(config){
this.name = "DayEvents";
this._dataobj.style.position = "relative";
this.data.provideApi(this,true);
this.data.attachEvent("onStoreUpdated",dhx.bind(this.render,this));
this.attachEvent("onBeforeRender", function(){
this._renderScale();
this.type.color = this.config.color;
this.type.textColor = this.config.textColor;
this._renderobj = this._dataobj.firstChild;
this._prepareEvents();
if(window.scheduler)
this.type.template = scheduler.templates.day_event;
});
if(window.scheduler){
config.hourFormat = scheduler.config.scale_hour;
config.timeScaleWidth = scheduler.xy.scale_width;
config.timeScaleHeight = scheduler.xy.scale_height*2;
}
},
_renderScale:function(){
var html = "
";
for(var h = this.config.firstHour; h";
html += ""+hour+"
";
html += "";
html += "
"+top+"
";
html += "
"+bottom+"
";
html += "
";
html += "";
html += "
";
html += "
";
html += "
";
html += "";
return html;
},
type:{
templateStart:dhx.Template(""),
template:scheduler.templates.day_event,
templateEnd:dhx.Template("
"),
templateCss:dhx.Template(""),
templateColor:dhx.Template("#color#"),
templateTextColor:dhx.Template("#textColor#"),
padding:2
},
_prepareEvents:function(){
var evs = this.data.getRange();
var stack = [];
var ev,i,j,k,_is_sorder,_max_sorder,_sorder_set;
for(i=0; i< evs.length;i++){
ev=evs[i];
ev.$inner=false;
while (stack.length && stack[stack.length-1].end_date.valueOf()<=ev.start_date.valueOf()){
stack.splice(stack.length-1,1);
}
_sorder_set = false;
for(j=0;j< stack.length;j++){
if(stack[j].end_date.valueOf()<=ev.start_date.valueOf()){
_sorder_set = true;
ev.$sorder=stack[j].$sorder;
stack.splice(j,1);
ev.$inner=true;
break;
}
}
if (stack.length) stack[stack.length-1].$inner=true;
if(!_sorder_set){
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_max_sorder)
_max_sorder = stack[j].$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;
}
for (var i=0; i < evs.length; i++){
evs[i].$count=stack.max_count;
this._setPosition(evs[i]);
}
},
_setPosition:function(ev){
var date = this.config.date.getValue?this.config.date.getValue():this.config.date;
var start = dhx.Date.copy(ev.start_date);
var end = dhx.Date.copy(ev.end_date);
var sh = start.getHours();
var eh = end.getHours();
if(dhx.Date.datePart(start).valueOf()>dhx.Date.datePart(end).valueOf()){
end = start;
}
if(dhx.Date.datePart(start).valueOf()dhx.Date.datePart(date).valueOf()){
end = dhx.Date.datePart(date);
end.setMinutes(0);
end.setHours(this.config.lastHour);
}
if (sh < this.config.firstHour || eh >= this.config.lastHour){
if (sh < this.config.firstHour){
end.setHours(this.config.firstHour);
ev.start_date.setMinutes(0);
}
if (eh >= this.config.lastHour){
end.setMinutes(0);
end.setHours(this.config.lastHour);
}
}
var temp_width = Math.floor((this._content_width-this.config.timeScaleWidth-this.config.eventOffset-8)/ev.$count);
ev.$left=ev.$sorder*(temp_width)+this.config.timeScaleWidth+this.config.eventOffset;
if (!ev.$inner) temp_width=temp_width*(ev.$count-ev.$sorder);
ev.$width = temp_width-this.config.eventOffset-this.type.padding*2;
var sm = start.getHours()*60+start.getMinutes();
var em = (end.getHours()*60+end.getMinutes())||(this.config.lastHour*60);
ev.$top = Math.round((sm-this.config.firstHour/60)*(this.config.timeScaleHeight+1)/60); //42px/hour
ev.$height = Math.max(10,(em-sm)*(this.config.timeScaleHeight+1)/60-2)-this.type.padding*2;
}
}, dhx.MouseEvents, dhx.SelectionModel, dhx.Scrollable, dhx.RenderStack, dhx.DataLoader, dhx.ui.view, dhx.EventSystem, dhx.Settings);