source: trunk/calendar_new/js/common_functions.js @ 457

Revision 457, 11.4 KB checked in by niltonneto, 16 years ago (diff)

Alterações feitas por Alexandre Muller.
Melhorias e correção na versão AJAX da Agenda.
Email: amuller@…

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[2].id-eventDiv.childNodes[1].id)/120000+"px";
21        var end_ = timeStamp2id(eventDiv.childNodes[2].id).substr(8);
22        var start_ = parseInt(timeStamp2id(eventDiv.childNodes[1].id).substr(8),10);
23
24        if (viewType == "Day"){
25                if (!screenTable[weekDay])
26                        screenTable[weekDay] = new Array();
27                eventDiv.style.width = "190px";
28
29                currentPos = 1;
30                for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30){
31                        if (!screenTable[weekDay][hour])
32                                screenTable[weekDay][hour] = 0;
33
34                        if (currentPos <= screenTable[weekDay][hour])
35                                currentPos = screenTable[weekDay][hour]+1;
36                }
37                for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
38                        screenTable[weekDay][hour] = currentPos;
39                eventDiv.style.left  = 90+(205*(currentPos-1)) + "px" ;
40                eventDiv.onmouseover = function(){ createButtons(eventDiv); };
41                eventDiv.onmouseout = function(){ removeButtons(eventDiv); };
42                var resizeDiv = document.createElement('DIV');
43                resizeDiv.id = "resize_" + eventDiv.id;
44                resizeDiv.className = 'resize_div';
45                resizeDiv.style.right = ((parseInt(eventDiv.style.width)-10)*-1)+"px";
46                resizeDiv.style.bottom = ((parseInt(eventDiv.style.height)-24)*-1)+"px";
47                resizeDiv.onmousedown = function() { resizeEvent(eventDiv); };
48                eventDiv.appendChild(resizeDiv);
49        }
50        if (viewType == "Week"){
51                var tempDate = new Date;
52                tempDate.setTime(eventDiv.childNodes[2].id);
53                if (!screenTable[tempDate.getDay()])
54                        screenTable[tempDate.getDay()] = new Array();
55                currentPos = 1;
56                if (!screenTable[tempDate.getDay()][start_])
57                        screenTable[tempDate.getDay()][start_] = 0;
58
59                if (currentPos <= screenTable[tempDate.getDay()][start_])
60                        currentPos = screenTable[tempDate.getDay()][start_]+1;
61                screenTable[tempDate.getDay()][start_] = currentPos;
62
63                var widthValue = 100;
64                eventDiv.style.width = widthValue+"px";
65
66                var headerElement = document.getElementById('weekHeader_'+timeStamp2id(eventDiv.childNodes[2].id).substr(0,8));
67                if (currentPos > 1)
68                        eventDiv.style.left = (10+(tempDate.getDay()*122)+(widthValue*currentPos))+"px";
69                headerElement.style.width = (widthValue*currentPos)+"px";
70                eventDiv.style.height = "20px";
71                eventDiv.style.cursor = "pointer";
72                eventDiv.onmouseover = function () { this.style.height = (parseInt(this.style.height)+40)+"px"; this.style.zIndex = 2; };
73                eventDiv.onmouseout = function () { this.style.height = (parseInt(this.style.height)-40)+"px"; this.style.zIndex = 1; };
74                eventDiv.onclick = function () { calendar.getView('div_main','Day','&time='+timeStamp2id(eventDiv.childNodes[2].id).substr(0,8)); };
75        }
76
77        var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[1].id));
78
79        if (viewType == "Month"){
80                var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[1].id).substr(0,8)+'0000');
81                eventDiv.style.width = "60px";
82                eventDiv.style.height = "15px";
83                eventDiv.onclick = function () { calendar.getView('div_main','Day','&time='+timeStamp2id(eventDiv.childNodes[2].id).substr(0,8)); };
84                eventDiv.style.cursor = "pointer";
85
86                tdElement.style.height = (tdElement.childNodes.length * 10) + "px";
87       
88                if (tdElement.childNodes.length > 3)
89                        eventDiv.style.margin = "20 0 0 "+(20+(tdElement.childNodes.length-4)*25);     
90                else
91                        eventDiv.style.margin = "0 0 0 "+(20+(tdElement.childNodes.length-1)*25);
92        }
93
94        eventDiv.style.top  =  (tdElement.offsetTop + 145) + "px";
95        tdElement.appendChild(eventDiv);
96}
97
98function createButtons(eventDiv) {
99        var lnk = document.getElementById('remove_'+eventDiv.id);
100        var lnk2 = document.getElementById('details_'+eventDiv.id);
101        if (!lnk){
102                var removeLink = document.createElement('a');
103                removeLink.id = "remove_" + eventDiv.id;
104                removeLink.href = "javascript:removeEvent("+eventDiv.id.substr(6)+");";
105                removeLink.innerHTML = '<img onmouseover="this.setAttribute(\'width\', \'15\');"'+
106                        'onmouseout="this.setAttribute(\'width\', \'10\');"'+
107                        ' title="'+get_lang('remove')+'" alt="'+get_lang('remove')+'"'+
108                        ' src="templates/default/images/min.png"></img>';
109                removeLink.style.position = "absolute";
110                removeLink.style.top = "0px";
111                removeLink.style.left = "175px";
112                var showDetailLink = document.createElement('a');
113                showDetailLink.id = "details_" + eventDiv.id;
114                showDetailLink.href = "javascript:showDetails("+eventDiv.id+");";
115                showDetailLink.innerHTML = '<img onmouseover="this.setAttribute(\'width\', \'15\');"'+
116                        'onmouseout="this.setAttribute(\'width\', \'10\');"'+
117                        ' title="'+get_lang('details')+'" alt="'+get_lang('details')+'"'+
118                        ' src="templates/default/images/plus.png"></img>';
119                showDetailLink.style.position = "absolute";
120                showDetailLink.style.top = "0px";
121                showDetailLink.style.left = "160px";
122
123                eventDiv.appendChild(showDetailLink);
124                eventDiv.appendChild(removeLink);
125        }
126        else{
127                lnk.style.visibility="visible";
128                lnk2.style.visibility="visible";
129        }
130}
131function showDetails(eventId){
132        var handler_getDetails = function (data)
133        {
134                var xtools = new XTools;
135                var divAddDialog = document.getElementById("divAddDialog");
136                var xsl = XMLTools.load('xsl/detailsDialog.xsl?'+ Date.parse(new Date));
137                if(!divAddDialog) {
138                        divAddDialog = document.createElement("DIV");
139                        divAddDialog.id = 'divAddDialog';
140                        divAddDialog.style.zIndex = "10";
141                        divAddDialog.style.position = "absolute";
142                        divAddDialog.style.display = "none";
143                        document.body.appendChild(divAddDialog);
144                }
145                divAddDialog.style.left = "300px";
146                divAddDialog.style.top  = "200px";
147                divAddDialog.innerHTML = xtools.parse(data, xsl);
148                divAddDialog.style.display = "block";
149        }
150        XMLTools.__RETURN_MODE__ = 'XML';
151        XMLTools.request('$this.uicalendar.getDetails&id='+eventId.id.substr(6), 'GET', handler_getDetails);
152}
153function removeButtons(eventDiv){
154        var lnk = document.getElementById('remove_'+eventDiv.id);
155        var lnk2 = document.getElementById('details_'+eventDiv.id);
156        if (lnk){
157                lnk.style.visibility="hidden";
158                lnk2.style.visibility="hidden";
159        }
160}
161
162function removeEvent (id) {
163        var handler_removeEvent = function (data) {
164                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
165                var serverRet = XMLTools.transform(data, xsl);
166                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
167                var retStatus = serverRet.substr(0,5);
168                if (retStatus == "false")
169                        write_msg(get_lang("Error") + ": " + serverRet)
170                else{
171                        var eventDiv = document.getElementById("event_"+id);
172                        if (viewType == "Day"){
173                                init_ = timeStamp2id(eventDiv.childNodes[1].id).substr(8);
174                                end_ = timeStamp2id(eventDiv.childNodes[2].id).substr(8);
175                                for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
176                                        screenTable[weekDay][hour]--;
177                        }
178                        eventDiv.parentNode.removeChild(eventDiv);
179                        write_msg(get_lang("Event were deleted"));
180                }
181        }
182        XMLTools.request('$this.uicalendar.removeEvent&id='+id, 'GET', handler_removeEvent);
183}
184
185function quickAddEvent (title, startTime, endTime)
186{
187        var endDate = new Date();
188        endDate.setTime(id2timeStamp(endTime)+1800000);
189
190        var handler_quickAdd = function (data) {
191                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
192                var serverRet = XMLTools.transform(data, xsl);
193                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
194                calendar.dialog('infowindow');
195                var retStatus = serverRet.substr(0,5);
196                if (retStatus == "false")
197                        write_msg(get_lang("Error") + ": " +get_lang(serverRet.substr(6)));
198                else{
199                        var tdElement = document.getElementById(startTime);
200                        var eventDiv = document.createElement('DIV');
201                        eventDiv.id = "event_" + serverRet.substr(6,serverRet.length);
202                        eventDiv.innerHTML = title;
203                        var endDateDiv = document.createElement('DIV');
204                        var startDateDiv = document.createElement('DIV');
205                        endDateDiv.id = endDate.getTime();
206                        startDateDiv.id = id2timeStamp(startTime);
207                        eventDiv.appendChild(startDateDiv);
208                        eventDiv.appendChild(endDateDiv);
209
210                        createEventDiv(eventDiv);
211                        write_msg(get_lang("Event were added successfully!"));
212                }
213
214        }
215        XMLTools.request('$this.uicalendar.quickAdd&start='+parseInt(id2timeStamp(startTime)/1000)+'&end='+parseInt(endDate.getTime()/1000)+'&title='+title, 'GET', handler_quickAdd);
216}
217
218function changeEvent(objEvent,field,value){
219        init_ = timeStamp2id(objEvent.childNodes[1].id).substr(8);
220        end_ = timeStamp2id(objEvent.childNodes[2].id).substr(8);
221
222        var handler_changeEvent = function (data){
223                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
224                var serverRet = XMLTools.transform(data, xsl);
225                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
226                var retStatus = serverRet.substr(1,5);
227                if (retStatus == "false")
228                        write_msg(get_lang("Error") + ": " + serverRet)
229                else
230                        switch (field) {
231                                case 'edatetime':
232                                        for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
233                                                screenTable[weekDay][hour]--;
234
235                                        objEvent.childNodes[2].id = value*1000;
236                                        var resizeIcon = document.getElementById("resize_"+objEvent.id);
237                                        resizeIcon.parentNode.removeChild(resizeIcon);
238
239                                        createEventDiv(objEvent);
240                                        break;
241                                default:
242                                        alert('not implemented');
243                        }
244        }
245        XMLTools.request('$this.uicalendar.changeEvent&cal_id='+objEvent.id.substr(6)+'&field='+field+'&value='+value, 'GET', handler_changeEvent);
246}
247
248// Convert Unix Time Stamp to Div Id used in calendar
249function timeStamp2id(timeStamp){
250        var tmpDate = new Date();
251        tmpDate.setTime(timeStamp);
252        return (tmpDate.getYear()+(is_ie?0:1900))+""+
253                (tmpDate.getDate()<10?"0"+tmpDate.getDate():tmpDate.getDate())+
254                (tmpDate.getMonth()<9?"0"+(tmpDate.getMonth()+1):(tmpDate.getMonth()+1))+
255                (tmpDate.getHours()<10?"0"+tmpDate.getHours():tmpDate.getHours())+
256                (tmpDate.getMinutes()<10?"0"+tmpDate.getMinutes():tmpDate.getMinutes());
257}
258
259// Convert the opposite of function above
260function id2timeStamp(id){
261        objDate = new Date();
262        objDate.setYear(id.substr(0,4));
263        objDate.setMonth(id.substr(6,2)-1);
264        objDate.setDate(id.substr(4,2));
265        objDate.setHours(id.substr(8,2));
266        objDate.setMinutes(id.substr(10,2));
267        return objDate.getTime();
268}
269
270
271function get_lang(_key,_arg1,_arg2,_arg3,_arg4){
272        if (_key.length == 0)
273                return '';
274        if(!array_lang[0]){
275                return _key+"*";
276        }
277        _value = "";
278        for(i = 0; i < array_lang[0].length;i++){
279                if(array_lang[0][i] == _key.toLowerCase()) {
280                        _value = array_lang[1][i];
281                        break;
282                }
283        }
284
285        if(!_value)
286                return _key+"*";
287
288        if(_arg1 || _arg2 ||_arg3 || _arg4) {
289                for(j = 1; j <= 4; j++){
290                        if(eval("_arg"+j)) {
291                                var regExp = new RegExp("%"+j+"");
292                                _value = _value.replace(regExp,eval("_arg"+j));
293                        }
294                }
295        }
296        return _value;
297}
298
299function resizeEvent (eventDiv) {
300        _dragArea.pressed = 1;
301        _dragArea.initEvent = eventDiv.parentNode.id;
302        _dragArea.resizing = 1;
303        _dragArea.currentEvent = eventDiv;
304}
305
306refreshLang();
Note: See TracBrowser for help on using the repository browser.