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

Revision 665, 12.2 KB checked in by niltonneto, 15 years ago (diff)

Alterações feitas pelo desenvolvedor, referente ao expressoCalendar (nova agenda).
Alexandre MUller => amuller@…

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