source: trunk/expressoCalendar/js/calendar_functions.js @ 748

Revision 748, 13.2 KB checked in by niltonneto, 15 years ago (diff)

Implementações para nova agenda. Desenvolvedor: Alexandre Muller.

Line 
1var viewType;
2var todayDate = new Date();
3
4function Calendar()
5{
6        this.idEl;
7        this.lastId;
8        this.colorCellSelected = "LIGHTYELLOW";
9        this.nextView;
10        this.previousView;
11        this.uid = calUid;
12        this.cat = '';
13        this.currentTime = new Date();
14}
15
16Calendar.prototype.dialog = function() {
17        var divAddDialog = document.getElementById("divAddDialog");
18        if (_dragArea.initEvent > _dragArea.endEvent){
19                var temp = _dragArea.initEvent;
20                _dragArea.initEvent = _dragArea.endEvent;
21                _dragArea.endEvent = temp;
22        }
23
24        if(divAddDialog && divAddDialog.style.display != "none"){
25                divAddDialog.style.display = "none";
26                for (var hour = parseInt(_dragArea.initEvent); hour <= parseInt(_dragArea.endEvent);(hour%100 == 30)?hour+=70:hour+=30)
27                        try  { document.getElementById(hour).style.background = ""; } catch (e) { break; };
28                _dragArea.initEvent = null;
29                _dragArea.endEvent = null;
30                try {
31                        document.getElementById("div_main").style.opacity = 1;
32                        document.getElementById("div_main").filters.alpha.opacity=100;
33                } catch (e) {};
34        return true;
35        }
36
37        var cell = document.getElementById(_dragArea.endEvent);
38        try {
39                document.getElementById("div_main").style.opacity = 0.5;
40                document.getElementById("div_main").filters.alpha.opacity=50;
41        } catch (e) {};
42
43        var data = '<text><date>'+calendar.parseDate(id2timeStamp(_dragArea.initEvent))+'</date><time>'+ calendar.parseTime(_dragArea.initEvent,_dragArea.endEvent)+'</time></text>';
44        var xsl = XMLTools.load('xsl/addDialog.xsl?'+ Date.parse(new Date));
45
46        if(!divAddDialog) {
47                divAddDialog = document.createElement("DIV");
48                divAddDialog.id = 'divAddDialog';
49                divAddDialog.style.zIndex = "10";
50                divAddDialog.style.position = "absolute";
51                divAddDialog.style.display = "none";
52                document.body.appendChild(divAddDialog);
53        }
54        divAddDialog.style.left = "300px"; //cell.offsetLeft + document.body.scrollLeft;
55        divAddDialog.style.top  = "200px"; //cell.offsetTop - 100 + document.getElementById('div_main').offsetTop;
56        divAddDialog.style.display = "block";
57        divAddDialog.innerHTML = xtools.parse(data, xsl);
58        var closeButton = document.getElementById('closeDialog');
59        if (is_ie)
60        {
61                closeButton.style.left = '285px';
62                closeButton.style.top = '5px';
63        }
64        else
65        {
66                closeButton.style.left = '320px';
67                closeButton.style.top = '25px';
68        }
69        document.getElementById('dragEventSubject').focus();
70        document.getElementById('addEventLink').innerHTML = get_lang("Add this event");
71        document.getElementById('addDetailsLink').innerHTML = get_lang("Add with details");
72
73
74        this.lastId = _dragArea.endEvent;
75
76}
77Calendar.prototype.getView = function(idEl, type, viewTime)
78{
79        if (typeof(type) == 'undefined')
80                return false;
81        if (typeof(viewTime) == 'undefined')
82                viewTime = calendar.currentTime.getTime();
83        if (type == 'Year'){
84                var handler = function (data) {
85                        var div_main = document.getElementById('div_main');
86                        div_main.innerHTML = data;
87                }
88                cExecute('../index.php?menuaction=calendar.uicalendar.year&plain=True',handler);
89                return;
90        }
91        this.idEl = idEl;
92        var _this = this;
93        this.lastId = null;
94
95        var handler_getView = function(XMLdata)
96        {
97                        _this.parseView(XMLdata,type);
98                        calendar.currentTime.setTime(id2timeStamp(document.getElementById('day').firstChild.id));
99                        var dayMS = (60*60*24*1000);
100                        if (viewType == "Week"){
101                                var previousWeek = new Date;
102                                previousWeek.setTime(calendar.currentTime.getTime()-(dayMS*7));
103                                this.previousView = previousWeek.getTime();
104                                var nextWeek = new Date;
105                                nextWeek.setTime(calendar.currentTime.getTime()+(dayMS*8));
106                                this.nextView = nextWeek.getTime();
107                        }
108                        if (viewType == "Day"){
109                                this.previousView = calendar.currentTime.getTime()-dayMS;
110                                this.nextView = calendar.currentTime.getTime()+dayMS;
111                        }
112                        if (viewType == 'Month'){
113                                var previousMonth = new Date;
114                                previousMonth.setTime(calendar.currentTime.getTime());
115                                previousMonth.setMonth(calendar.currentTime.getMonth()-1);
116                                this.previousView = previousMonth.getTime();
117                                var nextMonth = new Date;
118                                nextMonth.setTime(calendar.currentTime.getTime());
119                                nextMonth.setMonth(calendar.currentTime.getMonth()+1);
120                                this.nextView = nextMonth.getTime();
121                        }
122                        document.getElementById("l_date").innerHTML =  "<a href=\"javascript:calendar.getView('div_main','"+viewType+"',this.previousView);\">\<\<&nbsp;</a>";
123                        if (viewType == "Week")
124                                document.getElementById("l_date").innerHTML += calendar.parseWeek(id2timeStamp(document.getElementById('day').firstChild.id));
125                        if  (viewType == "Day")
126                                document.getElementById("l_date").innerHTML += calendar.parseDate(id2timeStamp(document.getElementById('day').firstChild.id));
127                        if (viewType == "Month")
128                                document.getElementById("l_date").innerHTML += calendar.parseMonth(id2timeStamp(document.getElementById('day').firstChild.id));
129                        document.getElementById("l_date").innerHTML += "<a href=\"javascript:calendar.getView('div_main','"+viewType+"',this.nextView);\">&nbsp;\>\></a>";
130
131                var getEventsDay = function (data)
132                {
133                        var xsl = XMLTools.load('xsl/events'+type+'.xsl');
134                        var div = document.getElementById('div_main');
135                        div.innerHTML += xtools.parse(data, xsl);
136                        var events = document.getElementById('returnEvents');
137                        while(typeof(events.firstChild.id) == 'string')
138                                createEventDiv(events.firstChild);
139                }
140                XMLTools.__RETURN_MODE__ = 'XML';
141                XMLTools.request('$this.uicalendar.getEvents'+type+"&time="+timeStamp2id(calendar.currentTime.getTime())+'&uid='+calendar.uid+'&cat='+calendar.cat, 'GET', getEventsDay);
142
143        };
144
145        XMLTools.__RETURN_MODE__ = 'XML';
146        viewType = type;
147        screenTable = new Array();
148        XMLTools.request('$this.uicalendar.getView'+type+"&time="+timeStamp2id(viewTime)+'&uid='+this.uid, 'GET', handler_getView);
149        };
150
151Calendar.prototype.resetView = function()
152{
153        document.getElementById("div_main").innerHTML = "";
154}
155
156Calendar.prototype.parseView = function(data,type)
157{
158        var _this = this;
159        var div = document.getElementById(this.idEl);
160        try {
161                var xsl = XMLTools.load('xsl/view'+type+'.xsl?'+ Date.parse(new Date));
162                div.innerHTML = xtools.parse(data, xsl);
163        }
164        catch(e){
165                alert(e);
166        }
167        document.getElementById('divAppbox').style.height = "100%";
168
169        if (type == 'Week' || type == 'Month')
170        {
171                var trWeek = document.getElementById('tr_week');
172                for (var i=0; i < trWeek.childNodes.length; i++)
173                        trWeek.childNodes[i].innerHTML = get_lang(trWeek.childNodes[i].innerHTML)+(type=='Week'?" "+id2String((trWeek.childNodes[i].id).substr(8)):"");
174        }
175};
176
177
178Calendar.prototype.parseTime = function (first, last) {
179
180        var hour        = first.substring(8,10);
181        var minute      = first.substring(10,12);
182        var startHour = hour+":"+minute;
183       
184        if(last && first != last) {
185                hour    = last.substring(8,10);
186                minute  = last.substring(10,12);
187        }
188
189        if(minute == "30") {
190                hour    = parseInt(hour,10);
191                hour    = normDec(hour+1);
192                minute  = "00";
193        }
194        else {
195                minute  = "30";
196        }
197        return startHour+ " - "+ hour+":"+minute;
198}
199Calendar.prototype.parseWeek = function (timeStamp) {
200        dateObj=new Date();
201        dateObj.setTime(timeStamp);
202        Year=dateObj.getYear();
203        if (Year < 70) { Year=Year*1+2000; }
204        if (Year < 1900) { Year=Year*1+1900; }
205        Then=new Date(Year, 0, 1);
206        Then_Day=Then.getDay();
207        Diff=dateObj*1-Then*1;
208        Days=Math.floor(Diff/(1000*60*60*24)+(1/24));
209        Week=Math.floor((Days+Then_Day)/7)+1;
210        return get_lang("Week Number %1 of %2",Week,Year);
211}
212Calendar.prototype.parseMonth = function (timeStamp) {
213        obj=new Date();
214        obj.setTime(timeStamp);
215        switch(obj.getMonth()) {
216                case 0: month = "January"; break;
217                case 1: month = "February"; break;
218                case 2: month = "March"; break;
219                case 3: month = "April"; break;
220                case 4: month = "May"; break;
221                case 5: month = "June"; break;
222                case 6: month = "July"; break;
223                case 7: month = "August"; break;
224                case 8: month = "September"; break;
225                case 9: month = "October"; break;
226                case 10: month = "November"; break;
227                case 11: month = "December"; break;
228                default: month = ""; break;
229        }
230        return get_lang("%1 of %2",get_lang(month),(obj.getYear()+1900));
231}
232Calendar.prototype.parseDate = function (timeStamp) {
233        var obj = new Date();
234        obj.setTime(timeStamp);
235
236        var day;
237        switch(obj.getDay()) { 
238                case 0: day = "Sunday"; break; 
239                case 1: day = "Monday"; break; 
240                case 2: day = "Tuesday"; break; 
241                case 3: day = "Wednesday"; break; 
242                case 4: day = "Thursday"; break; 
243                case 5: day = "Friday"; break; 
244                case 6: day = "Saturday"; break; 
245                default: day = ""; break;
246        }
247
248        var month;
249        switch(obj.getMonth()) { 
250                case 0: month = "January"; break; 
251                case 1: month = "February"; break; 
252                case 2: month = "March"; break; 
253                case 3: month = "April"; break; 
254                case 4: month = "May"; break; 
255                case 5: month = "June"; break; 
256                case 6: month = "July"; break; 
257                case 7: month = "August"; break; 
258                case 8: month = "September"; break; 
259                case 9: month = "October"; break; 
260                case 10: month = "November"; break; 
261                case 11: month = "December"; break; 
262                default: month = ""; break;
263        }
264
265        year = (is_ie?parseInt(obj.getYear()):parseInt(obj.getYear())+1900);
266       
267        return get_lang(day)+", "+obj.getDate()+" "+get_lang("of")+" "+get_lang(month)+" "+get_lang("of")+" "+year; // FIXME USE FORMAT DATE AS PREFERENCE
268}
269var calendar = new Calendar();
270
271// This array stores the events in table to avoid conflict in screen
272var screenTable = new Array();
273var today = new Date();
274var weekDay = today.getDay();
275function createEventDiv(eventDiv){
276        eventDiv.className = "event_div";
277        eventDiv.style.height = parseInt(eventDiv.childNodes[1].id-eventDiv.childNodes[0].id)/120000+"px";
278        var end_ = timeStamp2id(eventDiv.childNodes[1].id).substr(8);
279        var start_ = parseInt(timeStamp2id(eventDiv.childNodes[0].id).substr(8),10);
280        if (viewType == "Day"){
281                if (!screenTable[weekDay])
282                        screenTable[weekDay] = new Array();
283                eventDiv.style.width = "190px";
284
285                currentPos = 1;
286                for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30){
287                        if (!screenTable[weekDay][hour])
288                                screenTable[weekDay][hour] = 0;
289
290                        if (currentPos <= screenTable[weekDay][hour])
291                                currentPos = screenTable[weekDay][hour]+1;
292                }
293                for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
294                        screenTable[weekDay][hour] = currentPos;
295                eventDiv.style.left  = 90+(205*(currentPos-1)) + "px" ;
296                eventDiv.onmouseover = function(){ createButtons(eventDiv); };
297                eventDiv.onmouseout = function(){ removeButtons(eventDiv); };
298                var resizeDiv = document.createElement('DIV');
299                resizeDiv.id = "resize_" + eventDiv.id;
300                resizeDiv.className = 'resize_div';
301                resizeDiv.onmousedown = function() { resizeEvent(eventDiv); };
302                eventDiv.appendChild(resizeDiv);
303        }
304        if (viewType == "Week"){
305                var tempDate = new Date;
306                tempDate.setTime(eventDiv.childNodes[1].id);
307                if (!screenTable[tempDate.getDay()])
308                        screenTable[tempDate.getDay()] = new Array();
309                currentPos = 1;
310                if (!screenTable[tempDate.getDay()][start_])
311                        screenTable[tempDate.getDay()][start_] = 0;
312
313                if (currentPos <= screenTable[tempDate.getDay()][start_])
314                        currentPos = screenTable[tempDate.getDay()][start_]+1;
315                screenTable[tempDate.getDay()][start_] = currentPos;
316
317                var widthValue = 100;
318                eventDiv.style.width = widthValue+"px";
319
320                var headerElement = document.getElementById('weekday_'+timeStamp2id(eventDiv.childNodes[1].id).substr(0,8));
321                if (currentPos > 1)
322                        eventDiv.style.left = (10+(tempDate.getDay()*122)+(widthValue*currentPos))+"px";
323                headerElement.style.width = (widthValue*currentPos)+"px";
324                eventDiv.style.height = "20px";
325                eventDiv.style.cursor = "pointer";
326                eventDiv.onmouseover = function () { this.style.height = "auto"; this.style.zIndex = 2;};
327                eventDiv.onmouseout = function () { this.style.height = "20px"; this.style.zIndex = 1; };
328                eventDiv.onclick = function () { calendar.getView('div_main','Day',eventDiv.childNodes[1].id); };
329        }
330        var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[0].id));
331
332        if (viewType == "Month"){
333                var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[0].id).substr(0,8)+'0000');
334                eventDiv.style.width = "60px";
335                eventDiv.style.height = "15px";
336                eventDiv.onmouseover = function () { if (this.childNodes[2].length > 9) this.style.width = "auto"; this.style.zIndex = 2; };
337                eventDiv.onmouseout = function () { this.style.width = "60px"; this.style.zIndex = 1; };
338                eventDiv.onclick = function () { calendar.getView('div_main','Day',eventDiv.childNodes[1].id); };
339                eventDiv.style.cursor = "pointer";
340
341                tdElement.style.height = (tdElement.childNodes.length * 10) + "px";
342
343                if (tdElement.childNodes.length > 3)
344                        eventDiv.style.margin = "20 0 0 "+(20+(tdElement.childNodes.length-4)*25);
345                else
346                        eventDiv.style.margin = "0 0 0 "+(20+(tdElement.childNodes.length-1)*25);
347        }
348        if (tdElement == null)
349        {
350                orphan_table = document.getElementById('orphan_table');
351                if (!orphan_table)
352                {
353                        orphan_table = document.createElement('table');
354                        orphan_table.id = "orphan_table";
355                        orphan_table.className = "table_common";
356                        orphan_table.innerHTML = "<tbody></tbody>";
357                        document.getElementById('div_main').appendChild(orphan_table);
358
359                }
360                tr_el = document.createElement('TR');
361                td_el = document.createElement('TD');
362                td_el.className = "td_header";
363                td_el.innerHTML = get_lang("Out of table preferences");
364                tr_el.appendChild(td_el);
365                td_el = document.createElement('TD');
366                td_el.className = "td_common";
367                tr_el.appendChild(td_el);
368                eventDiv.style.position = "relative";
369                td_el.appendChild(eventDiv);
370                orphan_table.firstChild.appendChild(tr_el);
371        }
372        else
373        {
374                eventDiv.style.top  =  (tdElement.offsetTop + 160) + "px";
375                tdElement.appendChild(eventDiv);
376        }
377}
378
379
Note: See TracBrowser for help on using the repository browser.