source: trunk/expressoCalendar/js/common_functions.js @ 632

Revision 632, 14.8 KB checked in by niltonneto, 15 years ago (diff)

Modulo calendar_new renomeado para expressoCalendar

Line 
1var headerMsgLock = false;
2function write_msg (message){
3        if (headerMsgLock){
4                setTimeout('write_msg("'+message+'");', 300);
5                return;
6        }
7        headerMsgLock = true;
8        headerDiv = document.getElementById("divAppboxHeader");
9        var labelBefore = headerDiv.innerHTML;
10        headerDiv.innerHTML = '<table width=100% cellspacing="0" cellpadding="0" border="0"><tbody><tr><th width="40%"></th><th noWrap class="action_info_th">'+message+'</th><th width="40%"></th></tr></tbody></table>';
11        setTimeout('headerMsgLock = false; document.getElementById("divAppboxHeader").innerHTML = \"'+labelBefore+'\";', 2000);
12}
13
14// This array stores the events in table to avoid conflict in screen
15var screenTable = new Array();
16var today = new Date();
17var weekDay = today.getDay();
18function createEventDiv(eventDiv){
19        eventDiv.className = "event_div";
20        eventDiv.style.height = parseInt(eventDiv.childNodes[1].id-eventDiv.childNodes[0].id)/120000+"px";
21        var end_ = timeStamp2id(eventDiv.childNodes[1].id).substr(8);
22        var start_ = parseInt(timeStamp2id(eventDiv.childNodes[0].id).substr(8),10);
23        if (viewType == "Day"){
24                if (!screenTable[weekDay])
25                        screenTable[weekDay] = new Array();
26                eventDiv.style.width = "190px";
27
28                currentPos = 1;
29                for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30){
30                        if (!screenTable[weekDay][hour])
31                                screenTable[weekDay][hour] = 0;
32
33                        if (currentPos <= screenTable[weekDay][hour])
34                                currentPos = screenTable[weekDay][hour]+1;
35                }
36                for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
37                        screenTable[weekDay][hour] = currentPos;
38                eventDiv.style.left  = 90+(205*(currentPos-1)) + "px" ;
39                eventDiv.onmouseover = function(){ createButtons(eventDiv); };
40                eventDiv.onmouseout = function(){ removeButtons(eventDiv); };
41                var resizeDiv = document.createElement('DIV');
42                resizeDiv.id = "resize_" + eventDiv.id;
43                resizeDiv.className = 'resize_div';
44                resizeDiv.onmousedown = function() { resizeEvent(eventDiv); };
45                eventDiv.appendChild(resizeDiv);
46        }
47        if (viewType == "Week"){
48                var tempDate = new Date;
49                tempDate.setTime(eventDiv.childNodes[1].id);
50                if (!screenTable[tempDate.getDay()])
51                        screenTable[tempDate.getDay()] = new Array();
52                currentPos = 1;
53                if (!screenTable[tempDate.getDay()][start_])
54                        screenTable[tempDate.getDay()][start_] = 0;
55
56                if (currentPos <= screenTable[tempDate.getDay()][start_])
57                        currentPos = screenTable[tempDate.getDay()][start_]+1;
58                screenTable[tempDate.getDay()][start_] = currentPos;
59
60                var widthValue = 100;
61                eventDiv.style.width = widthValue+"px";
62
63                var headerElement = document.getElementById('weekHeader_'+timeStamp2id(eventDiv.childNodes[1].id).substr(0,8));
64                if (currentPos > 1)
65                        eventDiv.style.left = (10+(tempDate.getDay()*122)+(widthValue*currentPos))+"px";
66                headerElement.style.width = (widthValue*currentPos)+"px";
67                eventDiv.style.height = "20px";
68                eventDiv.style.cursor = "pointer";
69                eventDiv.onmouseover = function () { this.style.height = "auto"; this.style.zIndex = 2;};
70                eventDiv.onmouseout = function () { this.style.height = "20px"; this.style.zIndex = 1; };
71                eventDiv.onclick = function () { calendar.getView('div_main','Day','&time='+timeStamp2id(eventDiv.childNodes[1].id).substr(0,8)); };
72        }
73
74        var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[0].id));
75
76        if (viewType == "Month"){
77                var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[0].id).substr(0,8)+'0000');
78                eventDiv.style.width = "60px";
79                eventDiv.style.height = "15px";
80                eventDiv.onmouseover = function () { if (this.childNodes[2].length > 9) this.style.width = "auto"; this.style.zIndex = 2; };
81                eventDiv.onmouseout = function () { this.style.width = "60px"; this.style.zIndex = 1; };
82                eventDiv.onclick = function () { calendar.getView('div_main','Day','&time='+timeStamp2id(eventDiv.childNodes[1].id).substr(0,8)); };
83                eventDiv.style.cursor = "pointer";
84
85                tdElement.style.height = (tdElement.childNodes.length * 10) + "px";
86
87                if (tdElement.childNodes.length > 3)
88                        eventDiv.style.margin = "20 0 0 "+(20+(tdElement.childNodes.length-4)*25);
89                else
90                        eventDiv.style.margin = "0 0 0 "+(20+(tdElement.childNodes.length-1)*25);
91        }
92
93        eventDiv.style.top  =  (tdElement.offsetTop + 145) + "px";
94        tdElement.appendChild(eventDiv);
95}
96
97function createButtons(eventDiv) {
98        var lnk = document.getElementById('remove_'+eventDiv.id);
99        var lnk2 = document.getElementById('details_'+eventDiv.id);
100        if (!lnk){
101                var removeLink = document.createElement('a');
102                removeLink.id = "remove_" + eventDiv.id;
103                removeLink.href = "javascript:removeEvent("+eventDiv.id.substr(6)+");";
104                removeLink.innerHTML = '<img onmouseover="this.setAttribute(\'width\', \'15\');"'+
105                        'onmouseout="this.setAttribute(\'width\', \'10\');"'+
106                        ' title="'+get_lang('remove')+'" alt="'+get_lang('remove')+'"'+
107                        ' src="templates/default/images/min.png"></img>';
108                removeLink.style.position = "absolute";
109                removeLink.style.top = "0px";
110                removeLink.style.left = "175px";
111                var showDetailLink = document.createElement('a');
112                showDetailLink.id = "details_" + eventDiv.id;
113                showDetailLink.href = "javascript:showDetails("+eventDiv.id+");";
114                showDetailLink.innerHTML = '<img onmouseover="this.setAttribute(\'width\', \'15\');"'+
115                        'onmouseout="this.setAttribute(\'width\', \'10\');"'+
116                        ' title="'+get_lang('details')+'" alt="'+get_lang('details')+'"'+
117                        ' src="templates/default/images/plus.png"></img>';
118                showDetailLink.style.position = "absolute";
119                showDetailLink.style.top = "0px";
120                showDetailLink.style.left = "160px";
121
122                eventDiv.appendChild(showDetailLink);
123                eventDiv.appendChild(removeLink);
124        }
125        else{
126                lnk.style.visibility="visible";
127                lnk2.style.visibility="visible";
128        }
129}
130
131function addDetails(title,description,datetime,edatetime){
132        if (!edatetime)
133                edatetime = "";
134        if (!datetime || datetime.length == 0)
135                datetime = edatetime;
136        data="<retorno>"+
137        "<title>"+title+"</title>"+
138        "<description>"+description+"</description>"+
139        "<datetime>"+datetime.substr(4,2)+"/"+datetime.substr(6,2)+"/"+datetime.substr(0,4)+"</datetime>"+
140        "<datehour>"+datetime.substr(8,2)+"</datehour>"+
141        "<dateminute>"+datetime.substr(10,2)+"</dateminute>"+
142        "<edatetime>"+edatetime.substr(4,2)+"/"+edatetime.substr(6,2)+"/"+edatetime.substr(0,4)+"</edatetime>"+
143        "<edatehour>"+edatetime.substr(8,2)+"</edatehour>"+
144        "<edateminute>"+edatetime.substr(10,2)+"</edateminute>"+
145        "</retorno>";
146
147        var divAddDialog = document.getElementById("divAddDialog");
148        var xsl = XMLTools.load('xsl/detailsDialog.xsl?'+ Date.parse(new Date));
149        if(!divAddDialog) {
150                divAddDialog = document.createElement("DIV");
151                divAddDialog.id = 'divAddDialog';
152                divAddDialog.style.zIndex = "10";
153                divAddDialog.style.position = "absolute";
154                divAddDialog.style.display = "none";
155                document.body.appendChild(divAddDialog);
156        }
157        divAddDialog.style.left = "300px";
158        divAddDialog.style.top  = "200px";
159        divAddDialog.innerHTML = xtools.parse(data, xsl);
160        divAddDialog.style.display = "block";
161}
162
163function showDetails(eventId){
164        var handler_getDetails = function (data)
165        {
166                var divAddDialog = document.getElementById("divAddDialog");
167                var xsl = XMLTools.load('xsl/detailsDialog.xsl?'+ Date.parse(new Date));
168                if(!divAddDialog) {
169                        divAddDialog = document.createElement("DIV");
170                        divAddDialog.id = 'divAddDialog';
171                        divAddDialog.style.zIndex = "10";
172                        divAddDialog.style.position = "absolute";
173                        divAddDialog.style.display = "none";
174                        document.body.appendChild(divAddDialog);
175                }
176                divAddDialog.style.left = "300px";
177                divAddDialog.style.top  = "200px";
178                divAddDialog.innerHTML = xtools.parse(data, xsl);
179                divAddDialog.style.display = "block";
180                var saveBut = document.getElementById("saveLink");
181                saveBut.onclick = function () { saveEvent(eventId); }
182                var startDate = document.getElementById('startstr');
183                var endDate = document.getElementById('endstr');
184                var startHour = document.getElementById('starthour');
185                var startMin = document.getElementById('startmin');
186                var endHour = document.getElementById('endhour');
187                var endMin = document.getElementById('endmin');
188                objDate = new Date();
189                objDate.setTime(startDate.value*1000);
190                startDate.value = objDate.getDate()+"/"+(objDate.getMonth()+1)+"/"+objDate.getFullYear();
191                startHour.value = objDate.getHours();
192                startMin.value = objDate.getMinutes();
193                if (startMin.value.length < 2)
194                        startMin.value += "0";
195                objDate.setTime(endDate.value*1000);
196                endDate.value = objDate.getDate()+"/"+(objDate.getMonth()+1)+"/"+objDate.getFullYear();
197                endHour.value = objDate.getHours();
198                endMin.value = objDate.getMinutes();
199                if (endMin.value.length < 2)
200                        endMin.value += "0";
201                }
202        XMLTools.__RETURN_MODE__ = 'XML';
203        XMLTools.request('$this.uicalendar.getDetails&id='+eventId.id.substr(6), 'GET', handler_getDetails);
204}
205function removeButtons(eventDiv){
206        var lnk = document.getElementById('remove_'+eventDiv.id);
207        var lnk2 = document.getElementById('details_'+eventDiv.id);
208        if (lnk){
209                lnk.style.visibility="hidden";
210                lnk2.style.visibility="hidden";
211        }
212}
213
214function removeEvent (id) {
215        var handler_removeEvent = function (data) {
216                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
217                var serverRet = xtools.parse(data, xsl);
218                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
219                var retStatus = serverRet.substr(0,5);
220                if (retStatus == "false")
221                        write_msg(get_lang("Error") + ": " + serverRet)
222                else{
223                        var eventDiv = document.getElementById("event_"+id);
224                        if (viewType == "Day"){
225                                init_ = timeStamp2id(eventDiv.childNodes[1].id).substr(8);
226                                end_ = timeStamp2id(eventDiv.childNodes[2].id).substr(8);
227                                for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
228                                        screenTable[weekDay][hour]--;
229                        }
230                        eventDiv.parentNode.removeChild(eventDiv);
231                        write_msg(get_lang("Event were deleted"));
232                }
233        }
234        XMLTools.request('$this.uicalendar.removeEvent&id='+id, 'GET', handler_removeEvent);
235}
236
237function saveEvent (id, title, description, locat, startTime, endTime){
238        if (id != null){
239                return changeEvent(id,'all_fields',locat);
240        }
241
242        var endDate = new Date();
243        endDate.setTime(id2timeStamp(endTime)+1800000);
244
245        var handler_Add = function (data) {
246                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
247                var serverRet = xtools.parse(data, xsl);
248                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
249                calendar.dialog('infowindow');
250                var retStatus = serverRet.substr(0,5);
251                if (retStatus == "false")
252                        write_msg(get_lang("Error") + ": " +get_lang(serverRet.substr(6)));
253                else{
254                        var tdElement = document.getElementById(startTime);
255                        var eventDiv = document.createElement('DIV');
256                        eventDiv.id = "event_" + serverRet.substr(6,serverRet.length);
257                        var endDateDiv = document.createElement('DIV');
258                        var startDateDiv = document.createElement('DIV');
259                        endDateDiv.id = endDate.getTime();
260                        startDateDiv.id = id2timeStamp(startTime);
261                        eventDiv.appendChild(startDateDiv);
262                        eventDiv.appendChild(endDateDiv);
263                        eventDiv.innerHTML += title+"<br>"+description;
264
265                        createEventDiv(eventDiv);
266                        write_msg(get_lang("Event were added successfully!"));
267                }
268        }
269        XMLTools.request('$this.uicalendar.saveEvent&start='+parseInt(id2timeStamp(startTime)/1000)+'&end='+parseInt(endDate.getTime()/1000)+'&title='+title+'&desc='+description+'&location='+locat, 'GET', handler_Add);
270}
271
272function quickAddEvent (title, description, startTime, endTime)
273{
274        var endDate = new Date();
275        endDate.setTime(id2timeStamp(endTime)+1800000);
276
277        var handler_quickAdd = function (data) {
278                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
279                var serverRet = xtools.parse(data, xsl);
280                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
281                calendar.dialog('infowindow');
282                var retStatus = serverRet.substr(0,5);
283                if (retStatus == "false")
284                        write_msg(get_lang("Error") + ": " +get_lang(serverRet.substr(6)));
285                else{
286                        var tdElement = document.getElementById(startTime);
287                        var eventDiv = document.createElement('DIV');
288                        eventDiv.id = "event_" + serverRet.substr(6,serverRet.length);
289                        var endDateDiv = document.createElement('DIV');
290                        var startDateDiv = document.createElement('DIV');
291                        endDateDiv.id = endDate.getTime();
292                        startDateDiv.id = id2timeStamp(startTime);
293                        eventDiv.appendChild(startDateDiv);
294                        eventDiv.appendChild(endDateDiv);
295                        eventDiv.innerHTML += title+"<br>"+description;
296
297                        createEventDiv(eventDiv);
298                        write_msg(get_lang("Event were added successfully!"));
299                }
300
301        }
302        XMLTools.request('$this.uicalendar.quickAdd&start='+parseInt(id2timeStamp(startTime)/1000)+'&end='+parseInt(endDate.getTime()/1000)+'&title='+title+'&desc='+description, 'GET', handler_quickAdd);
303}
304
305function changeEvent(objEvent,field,value){
306        init_ = timeStamp2id(objEvent.childNodes[0].id).substr(8);
307        end_ = timeStamp2id(objEvent.childNodes[1].id).substr(8);
308
309        var handler_changeEvent = function (data){
310                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
311                var serverRet = xtools.parse(data, xsl);
312                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
313                var retStatus = serverRet.substr(1,5);
314                if (retStatus == "false")
315                        write_msg(get_lang("Error") + ": " + serverRet)
316                else
317                        switch (field) {
318                                case 'edatetime':
319                                        for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
320                                                screenTable[weekDay][hour]--;
321
322                                        objEvent.childNodes[1].id = value*1000;
323                                        var resizeIcon = document.getElementById("resize_"+objEvent.id);
324                                        resizeIcon.parentNode.removeChild(resizeIcon);
325
326                                        createEventDiv(objEvent);
327                                        break;
328                                case 'all_fields':
329                                default:
330                                        alert(field+': not implemented');
331                        }
332        }
333        XMLTools.request('$this.uicalendar.changeEvent&cal_id='+objEvent.id.substr(6)+'&field='+field+'&value='+value, 'GET', handler_changeEvent);
334}
335
336// Convert Unix Time Stamp to Div Id used in calendar
337function timeStamp2id(timeStamp){
338        var tmpDate = new Date();
339        tmpDate.setTime(timeStamp);
340        return (tmpDate.getYear()+(is_ie?0:1900))+""+
341                normDec(tmpDate.getDate())+
342                normDec(tmpDate.getMonth()+1)+
343                normDec(tmpDate.getHours())+
344                normDec(tmpDate.getMinutes());
345}
346
347// Convert the opposite of function above
348function id2timeStamp(id){
349        objDate = new Date();
350        objDate.setHours(id.substr(8,2));
351        objDate.setMinutes(id.substr(10,2));
352        objDate.setYear(id.substr(0,4));
353        objDate.setDate(id.substr(4,2));
354        objDate.setMonth(id.substr(6,2)-1);
355        return objDate.getTime();
356}
357
358function get_lang(_key)
359{
360        if (_key == '')
361                return '';
362        var key = _key.toLowerCase();
363        if(array_lang[key])
364                var _value = array_lang[key];
365        else
366                var _value = _key+"*";
367
368        if(arguments.length > 1)
369                for(j = 1; typeof(arguments[j]) != 'undefined'; j++)
370                        _value = _value.replace("%"+j,arguments[j]);
371        return _value;
372}
373
374// Normalize decimal number string
375function normDec(value)
376{
377        if (value > 9)
378                return value.toString();
379        else
380                return "0"+value;
381}
382
383function resizeEvent (eventDiv) {
384        _dragArea.pressed = 1;
385        _dragArea.initEvent = eventDiv.parentNode.id;
386        _dragArea.resizing = 1;
387        _dragArea.currentEvent = eventDiv;
388}
389
390refreshLang();
Note: See TracBrowser for help on using the repository browser.