source: sandbox/calendar/ajax_calendar/expressoCalendar/js/common_functions.js @ 748

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

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

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
14function write_error (message){
15        if (headerMsgLock){
16                setTimeout('write_error("'+message+'");', 300);
17                return;
18        }
19        headerMsgLock = true;
20        headerDiv = document.getElementById("divAppboxHeader");
21        var labelBefore = headerDiv.innerHTML;
22        headerDiv.innerHTML = '<table width=100% cellspacing="0" cellpadding="0" border="0"><tbody><tr><th width="40%"></th><th noWrap class="action_error_th">'+message+'</th><th width="40%"></th></tr></tbody></table>';
23        setTimeout('headerMsgLock = false; document.getElementById("divAppboxHeader").innerHTML = \"'+labelBefore+'\";', 2000);
24}
25
26function createButtons(eventDiv) {
27        var lnk = document.getElementById('remove_'+eventDiv.id);
28        var lnk2 = document.getElementById('details_'+eventDiv.id);
29        if (!lnk){
30                var removeLink = document.createElement('a');
31                removeLink.id = "remove_" + eventDiv.id;
32                removeLink.href = "javascript:removeEvent("+eventDiv.id.substr(6)+");";
33                removeLink.innerHTML = '<img onmouseover="this.setAttribute(\'width\', \'15\');"'+
34                        'onmouseout="this.setAttribute(\'width\', \'10\');"'+
35                        ' title="'+get_lang('remove')+'" alt="'+get_lang('remove')+'"'+
36                        ' src="templates/default/images/min.png"></img>';
37                removeLink.style.position = "absolute";
38                removeLink.style.top = "0px";
39                removeLink.style.left = "175px";
40                var showDetailLink = document.createElement('a');
41                showDetailLink.id = "details_" + eventDiv.id;
42                showDetailLink.href = "javascript:showDetails("+eventDiv.id+");";
43                showDetailLink.innerHTML = '<img onmouseover="this.setAttribute(\'width\', \'15\');"'+
44                        'onmouseout="this.setAttribute(\'width\', \'10\');"'+
45                        ' title="'+get_lang('details')+'" alt="'+get_lang('details')+'"'+
46                        ' src="templates/default/images/plus.png"></img>';
47                showDetailLink.style.position = "absolute";
48                showDetailLink.style.top = "0px";
49                showDetailLink.style.left = "160px";
50
51                eventDiv.appendChild(showDetailLink);
52                eventDiv.appendChild(removeLink);
53        }
54        else{
55                lnk.style.visibility="visible";
56                lnk2.style.visibility="visible";
57        }
58}
59function submitDetailsHandler () {
60        var iframe = document.getElementById('nullFrame');
61        var Fdoc = iframe.contentDocument || iframe.contentWindow;
62        statusSpan = Fdoc.getElementById('formStatus');
63        if (statusSpan)
64        {
65                var ErMessage = statusSpan.innerHTML.replace(/<[^>]*>/,'');
66                write_error(ErMessage);
67                divAddDialog = document.getElementById("divAddDialog");
68                divAddDialog.appendChild(Fdoc.getElementsByName('app_form')[0]);
69                divAddDialog.style.display = "block";
70        }
71        else
72        {
73                if (Fdoc.getElementById('calendar_overlap_table')){
74                        write_error(get_lang('scheduling conflict'));
75                        divAddDialog = document.getElementById("divAddDialog");
76                        document.getElementsByName('app_form')[0].innerHTML = Fdoc.getElementById('divAppbox').innerHTML;
77                        document.getElementById('ignore_button').style.display = "none";
78                        document.getElementById('redit_button').style.display = "none"; // TODO: Update the action to submit in background
79                        divAddDialog.style.display = "block";
80                }
81                else
82                        write_msg(get_lang('Event updated successfully'));
83        }
84        connector.hideProgressBar();
85}
86
87        function addDetails(title,description,datetime,edatetime){
88                if (!edatetime)
89                        edatetime = "";
90                if (!datetime || datetime.length == 0)
91                        datetime = edatetime;
92                var handler_embeddedHTML = function (data) {
93                        var divAddDialog = document.getElementById("divAddDialog");
94                        if(!divAddDialog)
95                        {
96                                divAddDialog = document.createElement("DIV");
97                                divAddDialog.id = 'divAddDialog';
98                                divAddDialog.style.zIndex = "10";
99                                divAddDialog.style.position = "absolute";
100                                divAddDialog.style.display = "none";
101                                document.body.appendChild(divAddDialog);
102                        }
103                        divAddDialog.style.left = "100px";
104                        divAddDialog.style.top  = "100px";
105                        var xsl = XMLTools.load('xsl/windowDialog.xsl');
106                        xml = "<return></return>";
107                        divAddDialog.innerHTML = xtools.parse(xml, xsl);
108                        document.getElementById('form_content').innerHTML = data;
109                        submitButton = document.getElementById('submit_button');
110                        submitButton.onclick = function () { cExecuteForm('/index.php?menuaction=calendar.bocalendar.update',document.getElementsByName('app_form')[0],'submitDetailsHandler'); return false; }
111                        cancelButton = document.getElementById('cancel_button');
112                        cancelButton.onclick = function () { calendar.dialog(); return false; }
113                        deleteButton = document.getElementById('delete_button');
114                        deleteButton.onclick = function () { removeEvent(eventId.id.substr(6)); calendar.dialog(); return false; }
115                        divAddDialog.style.display = "block";
116                }
117                cExecute('../index.php?menuaction=calendar.uicalendar.add&plain=True&date='+datetime.substr(0,4)+datetime.substr(6,2)+datetime.substr(4,2)+'&hour='+datetime.substr(8,2)+'&minute='+datetime.substr(10,2),handler_embeddedHTML);
118        }
119
120function showDetails(eventId){
121        var handler_embeddedHTML = function (data) {
122                var divAddDialog = document.getElementById("divAddDialog");
123                var xsl = XMLTools.load('xsl/windowDialog.xsl');
124                if(!divAddDialog)
125                {
126                        divAddDialog = document.createElement("DIV");
127                        divAddDialog.id = 'divAddDialog';
128                        divAddDialog.style.zIndex = "10";
129                        divAddDialog.style.position = "absolute";
130                        divAddDialog.style.display = "none";
131                        document.body.appendChild(divAddDialog);
132                }
133                divAddDialog.style.left = "100px";
134                divAddDialog.style.top  = "100px";
135                xml = "<return></return>";
136                divAddDialog.innerHTML = xtools.parse(xml, xsl);
137                document.getElementById('form_content').innerHTML = data;
138                submitButton = document.getElementById('submit_button');
139                submitButton.onclick = function () { cExecuteForm('/index.php?menuaction=calendar.bocalendar.update',document.getElementsByName('app_form')[0],'submitDetailsHandler'); calendar.dialog(); return false; }
140                try
141                {
142                        cancelButton = document.getElementById('cancel_button');
143                        cancelButton.onclick = function () { calendar.dialog(); return false; }
144                }
145                catch (e)
146                {
147                        cancelButton = document.createElement('INPUT');
148                        cancelButton.type = "submit";
149                        cancelButton.value = get_lang('cancel');
150                        cancelButton.onclick = function () { calendar.dialog(); return false; }
151                        document.getElementsByName('app_form')[0].appendChild(cancelButton);
152                };
153                deleteButton = document.getElementById('delete_button');
154                deleteButton.onclick = function () { removeEvent(eventId.id.substr(6)); calendar.dialog(); return false; }
155                divAddDialog.style.display = "block";
156        }
157        cExecute('../index.php?menuaction=calendar.uicalendar.edit&cal_id='+eventId.id.substr(6)+'&plain=True',handler_embeddedHTML);
158}
159function removeButtons(eventDiv){
160        var lnk = document.getElementById('remove_'+eventDiv.id);
161        var lnk2 = document.getElementById('details_'+eventDiv.id);
162        if (lnk){
163                lnk.style.visibility="hidden";
164                lnk2.style.visibility="hidden";
165        }
166}
167
168function removeEvent (id) {
169        var handler_removeEvent = function (data) {
170                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
171                var serverRet = xtools.parse(data, xsl);
172                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
173                var retStatus = serverRet.substr(0,5);
174                if (retStatus == "false")
175                        write_msg(get_lang("Error") + ": " + serverRet)
176                else{
177                        var eventDiv = document.getElementById("event_"+id);
178                        if (viewType == "Day"){
179                                init_ = timeStamp2id(eventDiv.childNodes[1].id).substr(8);
180                                end_ = timeStamp2id(eventDiv.childNodes[2].id).substr(8);
181                                for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
182                                        screenTable[weekDay][hour]--;
183                        }
184                        eventDiv.parentNode.removeChild(eventDiv);
185                        write_msg(get_lang("Event were deleted"));
186                }
187        }
188        XMLTools.request('$this.uicalendar.removeEvent&id='+id, 'GET', handler_removeEvent);
189}
190
191function saveEvent (id, title, description, locat, startTime, endTime){
192        if (id != null){
193                return changeEvent(id,'all_fields',locat);
194        }
195
196        var endDate = new Date();
197        endDate.setTime(id2timeStamp(endTime)+1800000);
198
199        var handler_Add = function (data) {
200                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
201                var serverRet = xtools.parse(data, xsl);
202                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
203                calendar.dialog('infowindow');
204                var retStatus = serverRet.substr(0,5);
205                if (retStatus == "false")
206                        write_msg(get_lang("Error") + ": " +get_lang(serverRet.substr(6)));
207                else{
208                        var tdElement = document.getElementById(startTime);
209                        var eventDiv = document.createElement('DIV');
210                        eventDiv.id = "event_" + serverRet.substr(6,serverRet.length);
211                        var endDateDiv = document.createElement('DIV');
212                        var startDateDiv = document.createElement('DIV');
213                        endDateDiv.id = endDate.getTime();
214                        startDateDiv.id = id2timeStamp(startTime);
215                        eventDiv.appendChild(startDateDiv);
216                        eventDiv.appendChild(endDateDiv);
217                        eventDiv.innerHTML += title+"<br>"+description;
218
219                        createEventDiv(eventDiv);
220                        write_msg(get_lang("Event were added successfully!"));
221                }
222        }
223        XMLTools.request('$this.uicalendar.saveEvent&start='+parseInt(id2timeStamp(startTime)/1000)+'&end='+parseInt(endDate.getTime()/1000)+'&title='+title+'&desc='+description+'&location='+locat, 'GET', handler_Add);
224}
225
226function quickAddEvent (title, description, startTime, endTime)
227{
228        var endDate = new Date();
229        endDate.setTime(id2timeStamp(endTime)+1800000);
230
231        var handler_quickAdd = function (data) {
232                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
233                var serverRet = xtools.parse(data, xsl);
234                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
235                calendar.dialog('infowindow');
236                var retStatus = serverRet.substr(0,5);
237                if (retStatus == "false")
238                        write_msg(get_lang("Error") + ": " +get_lang(serverRet.substr(6)));
239                else{
240                        var tdElement = document.getElementById(startTime);
241                        var eventDiv = document.createElement('DIV');
242                        eventDiv.id = "event_" + serverRet.substr(6,serverRet.length);
243                        var endDateDiv = document.createElement('DIV');
244                        var startDateDiv = document.createElement('DIV');
245                        endDateDiv.id = endDate.getTime();
246                        startDateDiv.id = id2timeStamp(startTime);
247                        eventDiv.appendChild(startDateDiv);
248                        eventDiv.appendChild(endDateDiv);
249                        eventDiv.innerHTML += title+"<br>"+description;
250
251                        createEventDiv(eventDiv);
252                        write_msg(get_lang("Event were added successfully!"));
253                }
254
255        }
256        XMLTools.request('$this.uicalendar.quickAdd&start='+parseInt(id2timeStamp(startTime)/1000)+'&end='+parseInt(endDate.getTime()/1000)+'&title='+title+'&desc='+description, 'GET', handler_quickAdd);
257}
258
259function changeEvent(objEvent,field,value){
260        init_ = timeStamp2id(objEvent.childNodes[0].id).substr(8);
261        end_ = timeStamp2id(objEvent.childNodes[1].id).substr(8);
262
263        var handler_changeEvent = function (data){
264                var xsl = XMLTools.load('xsl/returnData.xsl?'+ Date.parse(new Date));
265                var serverRet = xtools.parse(data, xsl);
266                serverRet = serverRet.substr(serverRet.indexOf('>')+1);
267                var retStatus = serverRet.substr(1,5);
268                if (retStatus == "false")
269                        write_msg(get_lang("Error") + ": " + serverRet)
270                else
271                        switch (field) {
272                                case 'edatetime':
273                                        for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
274                                                screenTable[weekDay][hour]--;
275
276                                        objEvent.childNodes[1].id = value*1000;
277                                        var resizeIcon = document.getElementById("resize_"+objEvent.id);
278                                        resizeIcon.parentNode.removeChild(resizeIcon);
279
280                                        createEventDiv(objEvent);
281                                        break;
282                                case 'all_fields':
283                                default:
284                                        alert(field+': not implemented');
285                        }
286        }
287        XMLTools.request('$this.uicalendar.changeEvent&cal_id='+objEvent.id.substr(6)+'&field='+field+'&value='+value, 'GET', handler_changeEvent);
288}
289
290// Convert Unix Time Stamp to Div Id used in calendar
291function timeStamp2id(timeStamp){
292        var tmpDate = new Date();
293        tmpDate.setTime(timeStamp);
294        return (tmpDate.getYear()+(is_ie?0:1900))+""+
295                normDec(tmpDate.getDate())+
296                normDec(tmpDate.getMonth()+1)+
297                normDec(tmpDate.getHours())+
298                normDec(tmpDate.getMinutes());
299}
300
301// Convert the opposite of function above
302function id2timeStamp(id){
303        objDate = new Date();
304        objDate.setHours(id.substr(8,2));
305        objDate.setMinutes(id.substr(10,2));
306        objDate.setYear(id.substr(0,4));
307        objDate.setDate(id.substr(4,2));
308        objDate.setMonth(id.substr(6,2)-1);
309        return objDate.getTime();
310}
311
312function id2String(id){
313        if (id < 1)
314                return "";
315        objDate = new Date();
316        objDate.setHours(id.substr(8,2));
317        objDate.setMinutes(id.substr(10,2));
318        objDate.setYear(id.substr(0,4));
319        objDate.setDate(id.substr(4,2));
320        objDate.setMonth(id.substr(6,2)-1);
321        return objDate.getDate()+"/"+(objDate.getMonth()+1);
322}
323
324function get_lang(_key)
325{
326        if (_key == '')
327                return '';
328        var key = _key.toLowerCase();
329        if(array_lang[key])
330                var _value = array_lang[key];
331        else
332                var _value = _key+"*";
333
334        if(arguments.length > 1)
335                for(j = 1; typeof(arguments[j]) != 'undefined'; j++)
336                        _value = _value.replace("%"+j,arguments[j]);
337        return _value;
338}
339
340// Normalize decimal number string
341function normDec(value)
342{
343        if (value > 9)
344                return value.toString();
345        else
346                return "0"+value;
347}
348
349function resizeEvent (eventDiv) {
350        _dragArea.pressed = 1;
351        _dragArea.initEvent = eventDiv.parentNode.id;
352        _dragArea.resizing = 1;
353        _dragArea.currentEvent = eventDiv;
354}
355
356refreshLang();
Note: See TracBrowser for help on using the repository browser.