source: sandbox/2.3-MailArchiver/calendar/js/dhtmlx/sources/scheduler.js @ 6779

Revision 6779, 20.5 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado Expresso(branch 2.3) integrado ao MailArchiver?.

Line 
1window.dhtmlXScheduler=window.scheduler={version:2.2};
2dhtmlxEventable(scheduler);
3scheduler.init=function(id,date,mode){
4        date=date||(new Date());
5        mode=mode||"week";
6       
7        this._obj=(typeof id == "string")?document.getElementById(id):id;
8        this._els=[];
9        this._scroll=true;
10        this._quirks=(_isIE && document.compatMode == "BackCompat");
11        this._quirks7=(_isIE && navigator.appVersion.indexOf("MSIE 8")==-1);
12       
13        this.get_elements();
14        this.init_templates();
15        this.set_actions();
16        dhtmlxEvent(window,"resize",function(){
17                window.clearTimeout(scheduler._resize_timer);
18                scheduler._resize_timer=window.setTimeout(function(){
19                        if (scheduler.callEvent("onSchedulerResize",[]))
20                                scheduler.update_view();
21                }, 100);
22        })
23       
24        this.set_sizes();
25        this.setCurrentView(date,mode);
26};
27scheduler.xy={
28        nav_height:22,
29        min_event_height:40,
30        scale_width:50,
31        bar_height:20,
32        scroll_width:18,
33        scale_height:20,
34        month_scale_height:20,
35        menu_width:25,
36        margin_top:0,
37        margin_left:0,
38        editor_width:140
39};
40scheduler.keys={
41        edit_save:13,
42        edit_cancel:27
43};
44scheduler.set_sizes=function(){
45        var w = this._x = this._obj.clientWidth-this.xy.margin_left;
46        var h = this._y = this._obj.clientHeight-this.xy.margin_top;
47       
48        //not-table mode always has scroll - need to be fixed in future
49        var scale_x=this._table_view?0:(this.xy.scale_width+this.xy.scroll_width);
50        var scale_s=this._table_view?-1:this.xy.scale_width;
51       
52        this.set_xy(this._els["dhx_cal_navline"][0],w,this.xy.nav_height,0,0);
53        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));
54        //to support alter-skin, we need a way to alter height directly from css
55        var actual_height = this._els["dhx_cal_navline"][0].offsetHeight;
56        if (actual_height > 0) this.xy.nav_height = actual_height;
57       
58        var data_y=this.xy.scale_height+this.xy.nav_height+(this._quirks?-2:0);
59        this.set_xy(this._els["dhx_cal_data"][0],w,h-(data_y+2),0,data_y+2);
60}
61scheduler.set_xy=function(node,w,h,x,y){
62        node.style.width=Math.max(0,w)+"px";
63        node.style.height=Math.max(0,h)+"px";
64        if (arguments.length>3){
65                node.style.left=x+"px";
66                node.style.top=y+"px"; 
67        }
68}
69scheduler.get_elements=function(){
70        //get all child elements as named hash
71        var els=this._obj.getElementsByTagName("DIV");
72        for (var i=0; i < els.length; i++){
73                var name=els[i].className;
74                if (!this._els[name]) this._els[name]=[];
75                this._els[name].push(els[i]);
76               
77                //check if name need to be changed
78                var t=scheduler.locale.labels[els[i].getAttribute("name")||name];
79                if (t) els[i].innerHTML=t;
80        }
81}
82scheduler.set_actions=function(){
83        for (var a in this._els)
84                if (this._click[a])
85                        for (var i=0; i < this._els[a].length; i++)
86                                this._els[a][i].onclick=scheduler._click[a];
87        this._obj.onselectstart=function(e){ return false; }
88        this._obj.onmousemove=function(e){
89                scheduler._on_mouse_move(e||event);
90        }
91        this._obj.onmousedown=function(e){
92                scheduler._on_mouse_down(e||event);
93        }
94        this._obj.onmouseup=function(e){
95                scheduler._on_mouse_up(e||event);
96        }
97        this._obj.ondblclick=function(e){
98                scheduler._on_dbl_click(e||event);
99        }
100}
101scheduler.select=function(id){
102        if (this._table_view || !this.getEvent(id)._timed) return; //temporary block
103        if (this._select_id==id) return;
104        this.editStop(false);
105        this.unselect();
106        this._select_id = id;
107        this.updateEvent(id);
108}
109scheduler.unselect=function(id){
110        if (id && id!=this._select_id) return;
111        var t=this._select_id;
112        this._select_id = null;
113        if (t) this.updateEvent(t);
114}
115scheduler.getState=function(){
116        return {
117                mode: this._mode,
118                date: this._date,
119                min_date: this._min_date,
120                max_date: this._max_date,
121                editor_id: this._edit_id,
122                lightbox_id: this._lightbox_id
123        };
124}
125scheduler._click={
126        dhx_cal_data:function(e){
127                var trg = e?e.target:event.srcElement;
128                var id = scheduler._locate_event(trg);
129               
130                e = e || event;
131                if ((id && !scheduler.callEvent("onClick",[id,e])) ||scheduler.config.readonly) return;
132               
133                if (id) {               
134                        scheduler.select(id);
135                        var mask = trg.className;
136                        if (mask.indexOf("_icon")!=-1)
137                                scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id);
138                } else
139                        scheduler._close_not_saved();
140        },
141        dhx_cal_prev_button:function(){
142                scheduler._click.dhx_cal_next_button(0,-1);
143        },
144        dhx_cal_next_button:function(dummy,step){
145                scheduler.setCurrentView(scheduler.date.add( //next line changes scheduler._date , but seems it has not side-effects
146                        scheduler.date[scheduler._mode+"_start"](scheduler._date),(step||1),scheduler._mode));
147        },
148        dhx_cal_today_button:function(){
149                scheduler.setCurrentView(new Date());
150        },
151        dhx_cal_tab:function(){
152                var mode = this.getAttribute("name").split("_")[0];
153                scheduler.setCurrentView(scheduler._date,mode);
154        },
155        buttons:{
156                "delete":function(id){ var c=scheduler.locale.labels.confirm_deleting; if (!c||confirm(c)) scheduler.deleteEvent(id); },
157                edit:function(id){ scheduler.edit(id); },
158                save:function(id){ scheduler.editStop(true); },
159                details:function(id){ scheduler.showLightbox(id); },
160                cancel:function(id){ scheduler.editStop(false); }
161        }
162}
163
164scheduler.addEventNow=function(start,end,e){
165        var base = {};
166        if (typeof start == "object"){
167                base = start;
168                start = null;
169        }
170       
171        var d = (this.config.event_duration||this.config.time_step)*60000;
172        if (!start) start = Math.round((new Date()).valueOf()/d)*d;
173        var start_date = new Date(start);
174        if (!end){
175                var start_hour = this.config.first_hour;
176                if (start_hour > start_date.getHours()){
177                        start_date.setHours(start_hour);
178                        start = start_date.valueOf();
179                }
180                end = start+d;
181        }
182       
183       
184        base.start_date = base.start_date||start_date;
185        base.end_date =  base.end_date||new Date(end);
186        base.text = base.text||this.locale.labels.new_event;
187        base.id = this._drag_id = this.uid();
188        this._drag_mode="new-size";
189       
190        this._loading=true;
191        this.addEvent(base);
192        this.callEvent("onEventCreated",[this._drag_id,e]);
193        this._loading=false;
194       
195        this._drag_event={}; //dummy , to trigger correct event updating logic
196        this._on_mouse_up(e);   
197}
198scheduler._on_dbl_click=function(e,src){
199        src = src||(e.target||e.srcElement);
200        if (this.config.readonly) return;
201        var name = src.className.split(" ")[0];
202        switch(name){
203                case "dhx_scale_holder":
204                case "dhx_scale_holder_now":
205                case "dhx_month_body":
206                        if (!scheduler.config.dblclick_create) break;
207                        var pos=this._mouse_coords(e);
208                        var start=this._min_date.valueOf()+(pos.y*this.config.time_step+(this._table_view?0:pos.x)*24*60)*60000;
209                        start = this._correct_shift(start);
210                        this.addEventNow(start,null,e);
211                        break;
212                case "dhx_body":
213                case "dhx_cal_event_line":
214                case "dhx_cal_event_clear":
215                        var id = this._locate_event(src);
216                        if (!this.callEvent("onDblClick",[id,e])) return;
217                        if (this.config.details_on_dblclick || this._table_view || !this.getEvent(id)._timed)
218                                this.showLightbox(id);
219                        else
220                                this.edit(id);
221                        break;
222                case "":
223                        if (src.parentNode)
224                                return scheduler._on_dbl_click(e,src.parentNode);                       
225                default:
226                        var t = this["dblclick_"+name];
227                        if (t) t.call(this,e);
228                        break;
229        }
230}
231
232scheduler._mouse_coords=function(ev){
233        var pos;
234        var b=document.body;
235        var d = document.documentElement;
236        if(ev.pageX || ev.pageY)
237            pos={x:ev.pageX, y:ev.pageY};
238        else pos={
239            x:ev.clientX + (b.scrollLeft||d.scrollLeft||0) - b.clientLeft,
240            y:ev.clientY + (b.scrollTop||d.scrollTop||0) - b.clientTop
241        }
242
243        //apply layout
244        pos.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);
245        pos.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els["dhx_cal_data"][0].scrollTop;
246        pos.ev = ev;
247       
248        var handler = this["mouse_"+this._mode];
249        if (handler)
250                return handler.call(this,pos);
251               
252        //transform to date
253        if (!this._table_view){
254                pos.x=Math.max(0,Math.ceil(pos.x/this._cols[0])-1);
255                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);
256        } else {
257                var dy=0;
258                for (dy=1; dy < this._colsS.heights.length; dy++)
259                        if (this._colsS.heights[dy]>pos.y) break;
260
261                pos.y=(Math.max(0,Math.ceil(pos.x/this._cols[0])-1)+Math.max(0,dy-1)*7)*24*60/this.config.time_step;
262                pos.x=0;
263        }
264
265        return pos;
266}
267scheduler._close_not_saved=function(){
268        if (new Date().valueOf()-(scheduler._new_event||0) > 500 && scheduler._edit_id){
269                var c=scheduler.locale.labels.confirm_closing;
270                if (!c || confirm(c))
271                        scheduler.editStop(scheduler.config.positive_closing);
272        }
273}
274scheduler._correct_shift=function(start, back){
275        return start-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(start)).getTimezoneOffset())*60000*(back?-1:1);   
276}
277scheduler._on_mouse_move=function(e){
278        if (this._drag_mode){
279                var pos=this._mouse_coords(e);
280                if (!this._drag_pos || this._drag_pos.x!=pos.x || this._drag_pos.y!=pos.y){
281                       
282                        if (this._edit_id!=this._drag_id)
283                                this._close_not_saved();
284                               
285                        this._drag_pos=pos;
286                       
287                        if (this._drag_mode=="create"){
288                                this._close_not_saved();
289                                this._loading=true; //will be ignored by dataprocessor
290                               
291                                var start=this._min_date.valueOf()+(pos.y*this.config.time_step+(this._table_view?0:pos.x)*24*60)*60000;
292                                //if (this._mode != "week" && this._mode != "day")
293                                start = this._correct_shift(start);
294                               
295                                if (!this._drag_start){
296                                        this._drag_start=start; return;
297                                }
298                                var end = start;
299                                if (end==this._drag_start) return;
300                               
301                                this._drag_id=this.uid();
302                                this.addEvent(new Date(this._drag_start), new Date(end),this.locale.labels.new_event,this._drag_id, pos.fields);
303                               
304                                this.callEvent("onEventCreated",[this._drag_id,e]);
305                                this._loading=false;
306                                this._drag_mode="new-size";
307                               
308                        }
309
310                        var ev=this.getEvent(this._drag_id);
311                        var start,end;
312                        if (this._drag_mode=="move"){
313                                start = this._min_date.valueOf()+(pos.y*this.config.time_step+pos.x*24*60)*60000;
314                                if (!pos.custom && this._table_view) start+=this.date.time_part(ev.start_date)*1000;
315                                start = this._correct_shift(start);
316                                end = ev.end_date.valueOf()-(ev.start_date.valueOf()-start);
317                        } else {
318                                start = ev.start_date.valueOf();
319                                if (this._table_view)
320                                        end = this._min_date.valueOf()+pos.y*this.config.time_step*60000 + (pos.custom?0:24*60*60000);
321                                else{
322                                        end = this.date.date_part(new Date(ev.end_date)).valueOf()+pos.y*this.config.time_step*60000;
323                                        this._els["dhx_cal_data"][0].style.cursor="s-resize";
324                                        if (this._mode == "week" || this._mode == "day")
325                                                end = this._correct_shift(end);
326                                }
327                                if (this._drag_mode == "new-size"){
328                                        if (end <= this._drag_start){
329                                                var shift = pos.shift||((this._table_view && !pos.custom)?24*60*60000:0);
330                                                start = end-shift;
331                                                end = this._drag_start+(shift||(this.config.time_step*60000));
332                                        } else {
333                                                start = this._drag_start;
334                                        }
335                                       
336                                } else if (end<=start)
337                                        end=start+this.config.time_step*60000;
338                        }
339                        var new_end = new Date(end-1);                 
340                        var new_start = new Date(start);
341                        //prevent out-of-borders situation for day|week view
342                        if (this._table_view || (new_end.getDate()==new_start.getDate() && new_end.getHours()<this.config.last_hour)){
343                                ev.start_date=new_start;
344                                ev.end_date=new Date(end);
345                                if (this.config.update_render)
346                                        this.update_view();
347                                else
348                                        this.updateEvent(this._drag_id);
349                        }
350                        if (this._table_view)
351                                this.for_rendered(this._drag_id,function(r){
352                                        r.className+=" dhx_in_move";
353                                })
354                }
355        }  else {
356                if (scheduler.checkEvent("onMouseMove")){
357                        var id = this._locate_event(e.target||e.srcElement);
358                        this.callEvent("onMouseMove",[id,e]);
359                }
360        }
361}
362scheduler._on_mouse_context=function(e,src){
363        return this.callEvent("onContextMenu",[this._locate_event(src),e]);
364}
365scheduler._on_mouse_down=function(e,src){
366        if (this.config.readonly || this._drag_mode) return;
367        src = src||(e.target||e.srcElement);
368        if (e.button==2||e.ctrlKey) return this._on_mouse_context(e,src);
369                switch(src.className.split(" ")[0]){
370                case "dhx_cal_event_line":
371                case "dhx_cal_event_clear":
372                        if (this._table_view)
373                                this._drag_mode="move"; //item in table mode
374                        break;
375                case "dhx_header":
376                case "dhx_title":
377                        this._drag_mode="move"; //item in table mode
378                        break;
379                case "dhx_footer":
380                        this._drag_mode="resize"; //item in table mode
381                        break;
382                case "dhx_scale_holder":
383                case "dhx_scale_holder_now":
384                case "dhx_month_body":
385                case "dhx_matrix_cell":
386                        this._drag_mode="create";
387                        break;
388                case "":
389                        if (src.parentNode)
390                                return scheduler._on_mouse_down(e,src.parentNode);
391                default:
392                        this._drag_mode=null;
393                        this._drag_id=null;
394        }
395        if (this._drag_mode){
396                var id = this._locate_event(src);
397                if (!this.config["drag_"+this._drag_mode] || !this.callEvent("onBeforeDrag",[id, this._drag_mode, e]))
398                        this._drag_mode=this._drag_id=0;
399                else {
400                        this._drag_id= id;
401                        this._drag_event=this._copy_event(this.getEvent(this._drag_id)||{});
402                }
403        }
404        this._drag_start=null;
405}
406scheduler._on_mouse_up=function(e){
407        if (this._drag_mode && this._drag_id){
408                this._els["dhx_cal_data"][0].style.cursor="default";
409                //drop
410                var ev=this.getEvent(this._drag_id);
411                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()){
412                        var is_new=(this._drag_mode=="new-size");
413                        if (!this.callEvent("onBeforeEventChanged",[ev,e,is_new])){
414                                if (is_new)
415                                        this.deleteEvent(ev.id, true);
416                                else {
417                                        ev.start_date = this._drag_event.start_date;
418                                        ev.end_date = this._drag_event.end_date;
419                                        this.updateEvent(ev.id);
420                                }
421                        } else {
422                                if (is_new && this.config.edit_on_create){
423                                        this.unselect();
424                                        this._new_event=new Date();//timestamp of creation
425                                        if (this._table_view || this.config.details_on_create) {
426                                                this._drag_mode=null;
427                                                return this.showLightbox(this._drag_id);
428                                        }
429                                        this._drag_pos=true; //set flag to trigger full redraw
430                                        this._select_id=this._edit_id=this._drag_id;
431                                } else if (!this._new_event)
432                                        this.callEvent(is_new?"onEventAdded":"onEventChanged",[this._drag_id,this.getEvent(this._drag_id)]);
433                        }
434                }
435                if (this._drag_pos) this.render_view_data(); //redraw even if there is no real changes - necessary for correct positioning item after drag
436        }
437        this._drag_mode=null;
438        this._drag_pos=null;
439}       
440scheduler.update_view=function(){
441        //this.set_sizes();
442        this._reset_scale();
443        if (this._load_mode && this._load()) return this._render_wait = true;
444        this.render_view_data();
445}
446scheduler.setCurrentView=function(date,mode){
447       
448        if (!this.callEvent("onBeforeViewChange",[this._mode,this._date,mode,date])) return;
449        //hide old custom view
450        if (this[this._mode+"_view"] && mode && this._mode!=mode)
451                this[this._mode+"_view"](false);
452               
453        this._close_not_saved();
454       
455        this._mode=mode||this._mode;
456        this._date=date;
457        this._table_view=(this._mode=="month");
458       
459        var tabs=this._els["dhx_cal_tab"];
460        for (var i=0; i < tabs.length; i++) {
461                tabs[i].className="dhx_cal_tab"+((tabs[i].getAttribute("name")==this._mode+"_tab")?" active":"");
462        };
463       
464        //show new view
465        var view=this[this._mode+"_view"];
466        view?view(true):this.update_view();
467       
468        this.callEvent("onViewChange",[this._mode,this._date]);
469}
470scheduler._render_x_header = function(i,left,d,h){
471        //header scale 
472        var head=document.createElement("DIV"); head.className="dhx_scale_bar";
473        this.set_xy(head,this._cols[i]-1,this.xy.scale_height-2,left,0);//-1 for border
474        head.innerHTML=this.templates[this._mode+"_scale_date"](d,this._mode); //TODO - move in separate method
475        h.appendChild(head);
476}
477scheduler._reset_scale=function(){
478        //current mode doesn't support scales
479        //we mustn't call reset_scale for such modes, so it just to be sure
480        if (!this.templates[this._mode+"_date"]) return;
481       
482        var h=this._els["dhx_cal_header"][0];
483        var b=this._els["dhx_cal_data"][0];
484        var c = this.config;
485       
486        h.innerHTML="";
487        b.scrollTop=0; //fix flickering in FF
488        b.innerHTML="";
489       
490       
491        var str=((c.readonly||(!c.drag_resize))?" dhx_resize_denied":"")+((c.readonly||(!c.drag_move))?" dhx_move_denied":"");
492        if (str) b.className = "dhx_cal_data"+str;
493               
494               
495        this._cols=[];  //store for data section
496        this._colsS={height:0};
497        this._dy_shift=0;
498       
499        this.set_sizes();
500        var summ=parseInt(h.style.width); //border delta
501        var left=0;
502       
503        var d,dd,sd,today;
504        dd=this.date[this._mode+"_start"](new Date(this._date.valueOf()));
505        d=sd=this._table_view?scheduler.date.week_start(dd):dd;
506        today=this.date.date_part(new Date());
507       
508        //reset date in header
509        var ed=scheduler.date.add(dd,1,this._mode);
510        var count = 7;
511       
512        if (!this._table_view){
513                var count_n = this.date["get_"+this._mode+"_end"];
514                if (count_n) ed = count_n(dd);
515                count = Math.round((ed.valueOf()-dd.valueOf())/(1000*60*60*24));
516        }
517       
518        this._min_date=d;
519        this._els["dhx_cal_date"][0].innerHTML=this.templates[this._mode+"_date"](dd,ed,this._mode);
520       
521       
522        for (var i=0; i<count; i++){
523                this._cols[i]=Math.floor(summ/(count-i));
524       
525                this._render_x_header(i,left,d,h);
526                if (!this._table_view){
527                        var scales=document.createElement("DIV");
528                        var cls = "dhx_scale_holder"
529                        if (d.valueOf()==today.valueOf()) cls = "dhx_scale_holder_now";
530                        scales.className=cls+" "+this.templates.week_date_class(d,today);
531                        this.set_xy(scales,this._cols[i]-1,c.hour_size_px*(c.last_hour-c.first_hour),left+this.xy.scale_width+1,0);//-1 for border
532                        b.appendChild(scales);
533                }
534               
535                d=this.date.add(d,1,"day")
536                summ-=this._cols[i];
537                left+=this._cols[i];
538                this._colsS[i]=(this._cols[i-1]||0)+(this._colsS[i-1]||(this._table_view?0:this.xy.scale_width+2));
539        }
540        this._max_date=d;
541        this._colsS[count]=this._cols[count-1]+this._colsS[count-1];
542       
543        if (this._table_view)
544                this._reset_month_scale(b,dd,sd);
545        else{
546                this._reset_hours_scale(b,dd,sd);
547                if (c.multi_day){
548                        var c1 = document.createElement("DIV");
549                        c1.className="dhx_multi_day";
550                        c1.style.visibility="hidden";
551                        this.set_xy(c1,parseInt(h.style.width),0,this.xy.scale_width,0);
552                        b.appendChild(c1);
553                        var c2 = c1.cloneNode(true);
554                        c2.className="dhx_multi_day_icon";
555                        c2.style.visibility="hidden";
556                        this.set_xy(c2,this.xy.scale_width-1,0,0,0);
557                        b.appendChild(c2);
558                       
559                        this._els["dhx_multi_day"]=[c1,c2];
560                }
561        }
562}
563scheduler._reset_hours_scale=function(b,dd,sd){
564        var c=document.createElement("DIV");
565        c.className="dhx_scale_holder";
566       
567        var date = new Date(1980,1,1,this.config.first_hour,0,0);
568        for (var i=this.config.first_hour*1; i < this.config.last_hour; i++) {
569                var cc=document.createElement("DIV");
570                cc.className="dhx_scale_hour";
571                cc.style.height=this.config.hour_size_px-(this._quirks?0:1)+"px";
572                cc.style.width=this.xy.scale_width+"px";
573                cc.innerHTML=scheduler.templates.hour_scale(date);
574               
575                c.appendChild(cc);
576                date=this.date.add(date,1,"hour");
577        };
578        b.appendChild(c);
579        if (this.config.scroll_hour)
580                b.scrollTop = this.config.hour_size_px*(this.config.scroll_hour-this.config.first_hour);
581}
582scheduler._reset_month_scale=function(b,dd,sd){
583        var ed=scheduler.date.add(dd,1,"month");
584       
585        //trim time part for comparation reasons
586        var cd=new Date();
587        this.date.date_part(cd);
588        this.date.date_part(sd);
589       
590        var rows=Math.ceil((ed.valueOf()-sd.valueOf())/(60*60*24*1000*7));
591        var tdcss=[];
592        var height=(Math.floor(b.clientHeight/rows)-22);
593       
594        this._colsS.height=height+22;
595        var h = this._colsS.heights = [];
596        for (var i=0; i<=7; i++)
597                tdcss[i]=" style='height:"+height+"px; width:"+((this._cols[i]||0)-1)+"px;' "
598
599       
600       
601        var cellheight = 0;
602        this._min_date=sd;
603        var html="<table cellpadding='0' cellspacing='0'>";
604        for (var i=0; i<rows; i++){
605                html+="<tr>";
606                        for (var j=0; j<7; j++){
607                                html+="<td";
608                                var cls = "";
609                                if (sd<dd)
610                                        cls='dhx_before';
611                                else if (sd>=ed)
612                                        cls='dhx_after';
613                                else if (sd.valueOf()==cd.valueOf())
614                                        cls='dhx_now';
615                                html+=" class='"+cls+" "+this.templates.month_date_class(sd,cd)+"' ";
616                                html+="><div class='dhx_month_head'>"+this.templates.month_day(sd)+"</div><div class='dhx_month_body' "+tdcss[j]+"></div></td>"
617                                sd=this.date.add(sd,1,"day");
618                        }
619                html+="</tr>";
620                h[i] = cellheight;
621                cellheight+=this._colsS.height;
622        }
623        html+="</table>";
624        this._max_date=sd;
625       
626        b.innerHTML=html;       
627        return sd;
628}
629scheduler.getLabel = function(property, key) {
630        var sections = this.config.lightbox.sections;
631        for (var i=0; i<sections.length; i++) {
632                if(sections[i].map_to == property) {
633                        var options = sections[i].options;
634                        for (var j=0; j<options.length; j++) {
635                                if(options[j].key == key) {
636                                        return options[j].label;
637                                }
638                        }
639                }
640        }
641        return "";
642};
Note: See TracBrowser for help on using the repository browser.