source: trunk/expressoMail1_2/js/main.js @ 605

Revision 605, 54.4 KB checked in by niltonneto, 15 years ago (diff)

Resolve #398

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1// Tempo do auto refresh (em milisegundos)
2var time_refresh = 300000;
3// tempo do auto save (em milisegundos)
4// 20000 = 20 segundos
5var autosave_time = 20000;
6
7function init(){
8        if (!is_ie)
9                Element('tableDivAppbox').width = '100%';
10       
11        var save_contacts = function(data){
12                contacts = data;
13        }
14        var save_preferences = function(data){
15                preferences = data;
16                if(preferences.hide_folders == "1")
17                        Element('divAppboxHeader').innerHTML =  title_app_menu;
18
19                if (preferences.delete_trash_messages_after_n_days != 0)
20                        cExecute ("$this.imap_functions.automatic_trash_cleanness&before_date="+preferences.delete_trash_messages_after_n_days+"&cyrus_delimiter="+cyrus_delimiter, handler_automatic_trash_cleanness);
21
22                if(preferences.outoffice == "1")
23                        write_msg(get_lang("Attention, you are in out of office mode."), true);
24                ConstructMenuTools();
25                cExecute ("$this.imap_functions.get_folders_list", update_menu);
26        }
27        var handler_automatic_trash_cleanness = function(data){
28                if (data != false){
29                        write_msg(data.length +' '+ Element('txt_clear_trash').value);
30                }
31        }
32       
33        // Versão
34        Element('divAppboxHeader').innerHTML = title_app;
35       
36        // Get cyrus delimiter
37        cyrus_delimiter = Element('cyrus_delimiter').value;
38       
39        cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts);
40        cExecute ("$this.functions.get_preferences", save_preferences);
41        setTimeout('auto_refresh()', time_refresh);
42}
43
44function watch_changes_in_msg(border_id)
45{
46        if (document.getElementById('border_id_'+border_id))
47        {       
48                function keypress_handler ()
49                {
50                        away=false;
51                        var save_link = Element("save_message_options_"+border_id);
52                        save_link.onclick = function onclick(event) { openTab.toPreserve[border_id] = true; save_msg(border_id); } ;
53                        save_link.style.color = '#0000ff';
54                };
55               
56                var obj = document.getElementById('body_'+border_id).contentWindow.document;
57                if ( obj.addEventListener )
58                                obj.addEventListener('keypress', keypress_handler, false);
59                else if ( obj.attachEvent )
60                        obj.attachEvent('onkeypress', keypress_handler);
61                       
62                var subject_obj = document.getElementById('subject_'+border_id);
63                if ( subject_obj.addEventListener )
64                                subject_obj.addEventListener('keypress', keypress_handler, false);
65                else if ( subject_obj.attachEvent )
66                        subject_obj.attachEvent('onkeypress', keypress_handler);
67                       
68                var to_obj = document.getElementById('to_'+border_id);
69                if ( to_obj.addEventListener )
70                                to_obj.addEventListener('keypress', keypress_handler, false);
71                else if ( to_obj.attachEvent )
72                        to_obj.attachEvent('onkeypress', keypress_handler);
73               
74        }
75}
76
77
78
79function show_msg(msg_info){   
80        if(!verify_session(msg_info))
81                return;
82       
83        if (msg_info.status_get_msg_info == 'false')
84        {
85                write_msg(get_lang("Problems reading your message")+ ".");
86                return;
87        }
88       
89        var handler_sendNotification = function(data){
90                if (data)
91                        write_msg(get_lang("A read confirmation was sent."));
92                else
93                        write_msg(get_lang("Error in SMTP sending read confirmation."));
94        }
95       
96        if (msg_info.status == 'false'){
97                eval(msg_info.command_to_exec);
98        }
99        else{
100                if (preferences.use_shortcuts == '1')
101                        select_msg(msg_info.msg_number, 'null');
102                // Call function to draw message
103                var id_msg_read = msg_info.msg_number +"_r";
104                // If needed, delete old border
105                if (openTab.type[currentTab] == 2 || openTab.type[currentTab] == 3)
106                        delete_border(currentTab,'false');
107
108               
109                if(Element("border_id_" + id_msg_read))
110                        alternate_border(id_msg_read);         
111                else {
112                        var border_id = create_border(msg_info.subject, id_msg_read);
113                        if(border_id)
114                                draw_message(msg_info,border_id);
115                        else
116                                return;
117                }
118
119                var domains = "";
120                if ((msg_info.DispositionNotificationTo) && (!msg_is_read(msg_info.msg_number) || (msg_info.Recent == 'N')))
121                {                       
122                        if (preferences.notification_domains != undefined && preferences.notification_domains != "")
123                                domains = preferences.notification_domains.split(',');
124                        else
125                        {                               
126                                var confNotification = true;
127                         }
128                        for (var i = 0; i < domains.length; i++)
129                                if (msg_info.DispositionNotificationTo.match(domains[i]+">"))
130                                {
131                                        var confNotification = true;
132                                        break;
133                                }
134                                if (confNotification == undefined)
135                                        var confNotification = confirm(get_lang("The sender:\n%1\nwaits your notification of reading. Do you want to confirm this?",msg_info.DispositionNotificationTo), "");
136
137                        if (confNotification)
138                                cExecute ("$this.imap_functions.send_notification&notificationto="+msg_info.DispositionNotificationTo+"&subject="+url_encode(msg_info.subject), handler_sendNotification);
139                }
140                //Change msg class to read.
141                if (!msg_is_read(msg_info.msg_number))
142                {
143                        set_msg_as_read(msg_info['msg_number'], true);
144                        if (msg_info.cacheHit)
145                                set_message_flag(msg_info.msg_number, "seen"); // avoid caducous (lazy) data
146                }
147
148        }
149}
150
151function auto_refresh(){
152        refresh(preferences.alert_new_msg);
153        setTimeout('auto_refresh()', time_refresh);
154}
155
156function refresh(alert_new_msg){
157        var handler_refresh = function(data){
158                if(!verify_session(data))
159                        return;
160                if (data.length > 0){
161                        var msg_info = document.getElementById('msg_info')
162                        if (msg_info != null)
163                                main.removeChild(msg_info);
164
165                        table_element = Element("table_box");
166                        var box = Element("tbody_box");
167                        table_element.appendChild(box);
168                        for (var i=0; i<data.length; i++){
169                                var new_msg = this.make_tr_message(data[i], current_folder);
170                                _dragArea.makeDragged(new_msg, data[i].msg_number, data[i].subject, true);
171                                eval(data[i].command);
172                        }
173                       
174                        for (var i=0; i<data.msgs_to_delete.length; i++){
175                                var remove_msg = document.getElementById(data.msgs_to_delete[i]);
176                                if (remove_msg)
177                                        remove_msg.parentNode.removeChild(remove_msg);
178                        }
179                        if(parseInt(alert_new_msg) && data.new_msgs > 0)
180                                alert(get_lang("You have %1 new", data['new_msgs'])+" "+(data['new_msgs'] > 1 ? get_lang("messages") : get_lang("message")) +"!");
181                        if(data.new_msgs > 0){
182                        Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) + parseInt(data.new_msgs); //refresh tab title
183                        update_quota(get_current_folder());
184                        }
185                         if(data.new_msgs > 0 || data.msgs_to_delete.length > 0)
186                                purgeCache();
187                }
188                update_menu();
189        }
190
191        msg_range_end = (current_page*preferences.max_email_per_page);
192        msg_range_begin = (msg_range_end-(preferences.max_email_per_page)+1);
193       
194       
195        //Get element tBody.
196        main = Element("tbody_box");
197        if(!main)
198                return;
199
200        // Get all TR (messages) in tBody.
201        main_list = main.childNodes;
202        var tmp = '';
203        var string_msgs_in_main = '';
204
205        var len = main_list.length;
206        for (var j=0; j < len; j++)
207                tmp += main_list[j].id + ',';
208               
209        string_msgs_in_main = tmp.substring(0,(tmp.length-1));
210        cExecute ("$this.imap_functions.refresh&folder="+current_folder+"&msgs_existent="+string_msgs_in_main+"&msg_range_begin="+msg_range_begin+"&msg_range_end="+msg_range_end+"&sort_box_type="+sort_box_type+"&search_box_type="+search_box_type+"&sort_box_reverse="+sort_box_reverse, handler_refresh);
211}
212
213function delete_msgs(folder, msgs_number, border_ID)
214{
215        if (folder == 'null')
216                folder = get_current_folder();
217
218        if ((parseInt(preferences.save_deleted_msg)) && (folder!='INBOX'+cyrus_delimiter+trashfolder)){
219                move_msgs(folder, msgs_number, border_ID, 'INBOX'+cyrus_delimiter+trashfolder,trashfolder );
220                return;
221        }
222       
223        var handler_delete_msgs = function(data){
224                Element('chk_box_select_all_messages').checked = false;
225                mail_msg = Element("tbody_box");
226               
227                if ( preferences.use_shortcuts == '1') {
228                        var all_messages = Element('tbody_box').childNodes;
229
230                        //Last msg is selected
231                        if ( exist_className(all_messages[all_messages.length-1], 'selected_shortcut_msg') ) {
232                                select_msg('null', 'up', true);
233                        }
234                        else {
235                                if (!select_msg('null', 'down', true)) {
236                                        select_msg('null', 'up', true);
237                                }
238                        }
239                }
240               
241                var msg_to_delete;
242                for (var i=0; i<data.msgs_number.length; i++){
243                        msg_to_delete = Element(data.msgs_number[i]);
244                        if (msg_to_delete){
245                                mail_msg.removeChild(msg_to_delete);
246                        }
247                }
248                if (data.msgs_number.length == 1)
249                        write_msg(get_lang("The message was deleted."));
250                else
251                        write_msg(get_lang("The messages were deleted."));
252
253                if (data.border_ID != 'null'){
254                        if (parseInt(preferences.delete_and_show_previous_message))
255                                show_msg(data.previous_msg);
256                        else
257                                delete_border(data.border_ID,'false');
258                }
259                Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) - data.msgs_number.length;
260                refresh();
261        }
262
263        if (msgs_number == 'selected')
264                msgs_number = get_selected_messages();
265        if (msgs_number.length > 0 || parseInt(msgs_number) > 0)
266                cExecute ("$this.imap_functions.delete_msgs&folder="+folder+"&msgs_number="+msgs_number+"&border_ID="+border_ID+"&sort_box_type="+sort_box_type+"&search_box_type="+search_box_type+"&sort_box_reverse="+sort_box_reverse+"&reuse_border="+border_ID+"&get_previous_msg="+preferences.delete_and_show_previous_message, handler_delete_msgs);
267        else
268                write_msg(get_lang('No selected message.'));           
269}
270
271function move_search_msgs(border_id, new_folder, new_folder_name){
272        var selected_messages = '';
273        var main_list = Element("tbody_resultsearch_"+border_id.substr(18)).childNodes;
274        for (j = 0; j < main_list.length; j++)  {
275                var check_box = main_list[j].firstChild.firstChild;
276                if(check_box && check_box.checked) {
277                        selected_messages += main_list[j].id + ',';
278                }
279        }
280        selected_messages = selected_messages.substring(0,(selected_messages.length-1));
281        var handler_move_search_msgs = function(data){
282                if(!data || !data.msgs_number)
283                        return;
284                else if(data.deleted) {                 
285                        if (data.msgs_number.length == 1)
286                                write_msg(get_lang("The message was deleted."));
287                        else
288                                write_msg(get_lang("The messages were deleted."));                     
289                }
290                else{
291                        if (data.msgs_number.length == 1)
292                                write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name));
293                        else
294                                write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name));
295                }
296
297                selected_messages = selected_messages.split(",");
298                for (i = 0; i < selected_messages.length; i++){
299                        var tr = Element(selected_messages[i]);
300                        tr.parentNode.removeChild(tr);
301                }                       
302        }       
303
304        if (selected_messages){
305                var selected_param = "";
306                if (selected_messages.indexOf(',') != -1)
307                {
308                        selected_msg_array = selected_messages.split(",");
309                        for (i = 0; i < selected_msg_array.length; i++){
310                                var tr = Element(selected_msg_array[i]);
311                                selected_param += ','+tr.name+';'+tr.id;
312                        }
313                }
314                else
315                {
316                        var tr=Element(selected_messages);
317                        selected_param=tr.name+';'+tr.id;
318                }
319                var params = "";
320                if (!new_folder && parseInt(preferences.save_deleted_msg)){
321                        new_folder = 'INBOX'+cyrus_delimiter+trashfolder;
322                        new_folder_name = trashfolder;
323                        params = "&delete=true";
324                }                       
325               
326                params += "&selected_messages="+url_encode(selected_param);
327                if(new_folder) {
328                        params += "&new_folder="+url_encode(new_folder);
329                        params += "&new_folder_name="+url_encode(new_folder_name);
330                }
331                cExecute ("$this.imap_functions.move_search_messages", handler_move_search_msgs, params);
332        }
333        else
334                write_msg(get_lang('No selected message.'));           
335}
336
337function move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name){
338        if (! folder || folder == 'null')
339                folder = Element("input_folder_"+msgs_number+"_r") ? Element("input_folder_"+msgs_number+"_r").value : get_current_folder();
340       
341        var handler_move_msgs = function(data){
342                if(typeof(data) == 'string')
343                        if (data.match(/^(.*)TRYCREATE(.*)$/)){
344                                connector.loadScript('TreeS');
345                                var move_to_folder = data.match(/^(.*)Spam(.*)$/) ? "Spam" : trashfolder;
346                                alert(get_lang('There is not %1 folder, Expresso is creating it for you... Please, repeat your request later.', move_to_folder));
347                                connector.loadScript('TreeShow');
348                                ttree.FOLDER = 'root';
349                                ttreeBox.new_past(move_to_folder);
350                                return false;
351                        }else{
352                                alert(data);
353                                return false;
354                        }
355                //Este bloco verifica as permissoes ACL sobre pastas compartilhadas
356                if(data.status == false){
357                        alert(get_lang("You don't have permission for this operation in this shared folder!"));
358                        return false;
359                }
360               
361                Element('chk_box_select_all_messages').checked = false;
362               
363                mail_msg = ( Element("divScrollMain_"+numBox) ) ? Element("divScrollMain_"+numBox).firstChild.firstChild : Element("divScrollMain_0").firstChild.firstChild;
364                if (! mail_msg)
365                                mail_msg = Element("tbody_box");
366                data.msgs_number = data.msgs_number.split(",");
367
368                var msg_to_delete;
369                if( typeof(msgs_number) == 'string' )
370                        all_search_msg = msgs_number.split(',');
371                else if( typeof(msgs_number) == 'number')
372                        all_search_msg = msgs_number;
373                for (var i=0; i <= all_search_msg.length; i++)
374                {
375                        msg_to_delete = Element(folder+';'+all_search_msg[i]);
376                        if (msg_to_delete)
377                                msg_to_delete.parentNode.removeChild(msg_to_delete);
378                }
379
380                if ( preferences.use_shortcuts == '1') {
381                        var all_messages = Element('tbody_box').childNodes;
382
383                        //Last msg is selected
384                        if ( exist_className(all_messages[all_messages.length-1], 'selected_shortcut_msg') ) {
385                                select_msg('null', 'up', true);
386                        }
387                        else {
388                                if (!select_msg('null', 'down', true)) {
389                                        select_msg('null', 'up', true);
390                                }
391                        }
392                }
393
394                for (var i=0; i<data.msgs_number.length; i++)
395                {
396                        msg_to_delete = Element(data.msgs_number[i]);
397                        if (msg_to_delete)
398                                mail_msg.removeChild(msg_to_delete);
399                }
400               
401
402                if (data.msgs_number.length == 1)
403                        write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name));
404                else
405                        write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name));
406                if (data.border_ID.indexOf('r') != -1){
407                        if (parseInt(preferences.delete_and_show_previous_message) && folder == get_current_folder()){
408                                delete_border(data.border_ID,'false');
409                                show_msg(data.previous_msg);
410                                }
411                        else
412                                delete_border(data.border_ID,'false');
413                }
414                if(folder == get_current_folder())
415                        Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) - data.msgs_number.length;                   
416                refresh();
417        }
418
419        if (folder == new_folder){
420                write_msg(get_lang('The origin folder and the destination folder are the same.'));
421                return;
422        }
423
424        if (msgs_number == 'selected')
425                msgs_number = get_selected_messages();
426
427        if (parseInt(msgs_number) > 0 || msgs_number.length > 0)
428                cExecute ("$this.imap_functions.move_messages&folder="+folder+"&msgs_number="+msgs_number+"&border_ID="+border_ID+"&sort_box_type="+sort_box_type+"&search_box_type="+search_box_type+"&sort_box_reverse="+sort_box_reverse+"&reuse_border="+border_ID+"&new_folder="+new_folder+"&new_folder_name="+new_folder_name+"&get_previous_msg="+preferences.delete_and_show_previous_message, handler_move_msgs);
429        else
430                write_msg(get_lang('No selected message.'));           
431               
432}
433
434function get_selected_messages(){
435        main = document.getElementById("divScrollMain_"+numBox).firstChild.firstChild;
436        if (! main)
437                main = Element("tbody_box");
438
439        // Get all TR (messages) in tBody.
440        main_list = main.childNodes;
441
442        var selected_messages = '';
443        var selected_messages_by_shortcuts = '';
444        var j = 0;
445        for (j; j<(main_list.length); j++)
446        {
447        check_box = Element("check_box_message_"+main_list[j].id);
448        if ( (check_box) && (check_box.checked) )
449                selected_messages += main_list[j].id + ',';
450               
451                if (preferences.use_shortcuts == '1')
452                {
453                        if ( exist_className(Element(main_list[j].id), 'selected_shortcut_msg') )
454                        {
455                                selected_messages_by_shortcuts += main_list[j].id + ',';
456                        }
457                }
458        }
459        selected_messages = selected_messages.substring(0,(selected_messages.length-1));
460       
461        if (preferences.use_shortcuts == '1')
462        {
463                selected_messages_by_shortcuts = selected_messages_by_shortcuts.substring(0,(selected_messages_by_shortcuts.length-1));
464               
465                var array_selected_messages_by_shortcuts = selected_messages_by_shortcuts.split(",");
466                var array_selected_messages = selected_messages.split(",");
467               
468                if ((array_selected_messages.length <= 1) && (array_selected_messages_by_shortcuts.length > 1))
469                {
470                        return selected_messages_by_shortcuts;
471                }
472        }
473       
474        if (selected_messages == '')
475                return false;
476        else
477                return selected_messages;
478}
479
480function new_message_to(email) {
481        var new_border_ID = new_message('new','null');
482        document.getElementById("to_" + new_border_ID).value=email;
483}
484
485function new_message(type, border_ID){
486        var new_border_ID = draw_new_message(parseInt(border_ID));
487        if (new_border_ID == false)
488                return false;   
489        openTab.type[new_border_ID] = tabTypes[type];
490
491        // Salva a pasta da mensagem respondida ou encaminhada:
492        var folder_message = Element("input_folder_"+border_ID);
493        if(folder_message) {
494                var input_current_folder = document.createElement('input');     
495                input_current_folder.id = "new_input_folder_"+border_ID;
496                input_current_folder.name = "input_folder";
497                input_current_folder.type = "hidden";
498                input_current_folder.value = folder_message.value;
499                Element("content_id_" + new_border_ID).appendChild(input_current_folder);
500        }//Fim.
501        var title = '';
502        data = [];
503        if (Element("from_" + border_ID)){
504                        if (document.getElementById("reply_to_" + border_ID)){
505                                data.to = document.getElementById("reply_to_values_" + border_ID).value;
506                                data.to = data.to.replace(/&lt;/gi,"<");
507                                data.to = data.to.replace(/&gt;/gi,">");
508                }
509                else {
510                        if (document.getElementById("from_values_" + border_ID))
511                        {
512                                data.to = document.getElementById("from_values_" + border_ID).value;
513                                data.to = data.to.replace(/&lt;/gi,"<");
514                                data.to = data.to.replace(/&gt;/gi,">");
515                        }
516                }       
517               
518                if (document.getElementById("to_values_" + border_ID)){
519                        data.to_all = document.getElementById("to_values_" + border_ID).value;
520                        data.to_all = data.to_all.replace(/\n/gi," ");         
521                        data.to_all = data.to_all.replace(/&lt;/gi,"<");
522                        data.to_all = data.to_all.replace(/&gt;/gi,">");
523                        var _array_to_all = data.to_all.split(",");
524                }       
525        }
526       
527        if (document.getElementById("cc_" + border_ID)){
528                data.cc = document.getElementById("cc_values_" + border_ID).value;
529                data.cc = data.cc.replace(/&lt;/gi,"<");
530                data.cc = data.cc.replace(/&gt;/gi,">");
531        }
532        if (document.getElementById("subject_" + border_ID))
533                data.subject = document.getElementById("subject_" + border_ID).innerHTML;
534        if (document.getElementById("body_" + border_ID))
535                data.body = document.getElementById("body_" + border_ID).innerHTML;
536       
537        if (Element('date_' + border_ID)){
538                data.date = Element('date_' + border_ID).innerHTML;
539        }
540       
541        if (Element('date_day_' + border_ID)){
542                data.date_day = Element('date_day_' + border_ID).value;
543        }
544        if (Element('date_hour_' + border_ID)){
545                data.date_hour = Element('date_hour_' + border_ID).value;
546        }
547        var signature = preferences.type_signature == 'html' ? preferences.signature : preferences.signature.replace(/\n/g, "<br>");
548        switch(type){
549                case "reply_without_history":                   
550                        Element("to_" + new_border_ID).value = data.to;
551                        title = "Re: " + data.subject;
552                        Element("subject_" + new_border_ID).value = "Re: " + data.subject;                     
553                        var body = Element("body_" + new_border_ID);
554                        body.contentWindow.document.open();
555                        // Insert the signature automaticaly at message body if use_signature preference is set
556                        if (preferences.use_signature == "1"){
557                                body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>" + "<br>" + signature + "</body></html>");
558                        }
559                        else{
560                        body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'></body></html>");
561                        }
562                        body.contentWindow.document.close();
563                        body.contentWindow.document.designMode = "on";
564                        //Focus
565                        if (is_ie)
566                                window.setTimeout('document.getElementById("body_'+new_border_ID+'").contentWindow.focus();', 300);
567                        else
568                                body.contentWindow.focus();
569                        if (is_ie)
570                                body.contentWindow.document.onkeypress = function(){if(body.contentWindow.event.keyCode == 13){changeEnterKey(body.contentWindow)}};
571                        msg_reply_from = document.createElement('input');
572                        msg_reply_from.id = "msg_reply_from_" + new_border_ID;
573                        msg_reply_from.type = "hidden";
574                        msg_reply_from.value = Element("msg_number_" + border_ID).value;
575                        Element("content_id_" + new_border_ID).appendChild(msg_reply_from);
576                        break;
577                case "reply_with_history":
578                        title = "Re: " + data.subject;
579                        Element("subject_" + new_border_ID).value = "Re: " + data.subject;
580                        Element("to_" + new_border_ID).value = data.to;
581                        block_quoted_body = make_body_reply(data.body, data.to, data.date_day, data.date_hour);
582                        var body = Element("body_" + new_border_ID);
583                        body.contentWindow.document.open();
584                        // Insert the signature automaticaly at message body if use_signature preference is set
585                        if (preferences.use_signature == "1") {
586                                body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>" + "<br>" + signature + "</body></html>" + block_quoted_body + "</body></html>");
587                        }
588                        else {
589                        body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>"+block_quoted_body+"</body></html>");
590                        }
591                        body.contentWindow.document.close();
592                        body.contentWindow.document.designMode = "on";
593                        //Focus
594                        if (is_ie)
595                                window.setTimeout('document.getElementById("body_'+new_border_ID+'").contentWindow.focus();', 300);
596                        else
597                                body.contentWindow.focus();
598                        if (is_ie)
599                                body.contentWindow.document.onkeypress = function(){if(body.contentWindow.event.keyCode == 13){changeEnterKey(body.contentWindow)}};
600                        msg_reply_from = document.createElement('input');
601                        msg_reply_from.id = "msg_reply_from_" + new_border_ID;
602                        msg_reply_from.type = "hidden";
603                        msg_reply_from.value = Element("msg_number_" + border_ID).value;
604                        Element("content_id_" + new_border_ID).appendChild(msg_reply_from);
605                        break;
606                case "reply_to_all_without_history":
607                        // delete user email from to_all array.
608                        data.to_all = new Array();
609                        var j = 0;
610                        for(i = 0; i < _array_to_all.length; i++) {                     
611                                if(_array_to_all[i].lastIndexOf(Element("user_email").value) == "-1"){
612                                        data.to_all[j++] = _array_to_all[i];
613                                }
614                        }
615                        data.to_all = data.to_all.join(",");
616
617                        title = "Re: " + data.subject;
618                        Element("subject_" + new_border_ID).value = "Re: " + data.subject;
619                        Element("to_" + new_border_ID).value = data.to;
620                        Element("to_" + new_border_ID).value += ', ' + data.to_all;
621                        if (data.cc){
622                                Element("cc_" + new_border_ID).value = data.cc;
623                                Element("a_cc_link_" + new_border_ID).style.display='none';
624                                Element("tr_cc_" + new_border_ID).style.display='';
625                                Element('space_link_' + new_border_ID).style.display='none';
626                        }
627                        var body = Element("body_" + new_border_ID);
628                        body.contentWindow.document.open();
629                        // Insert the signature automaticaly at message body if use_signature preference is set
630                        if (preferences.use_signature == "1") {
631                                body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>" + "<br>" + signature + "</body></html>");
632                        }
633                        else {
634                        body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'></body></html>");
635                        }
636                        body.contentWindow.document.close();
637                        body.contentWindow.document.designMode = "on";
638                        //Focus
639                        if (is_ie)
640                                window.setTimeout('document.getElementById("body_'+new_border_ID+'").contentWindow.focus();', 300);
641                        else
642                                body.contentWindow.focus();
643                        if (is_ie)
644                                body.contentWindow.document.onkeypress = function(){if(body.contentWindow.event.keyCode == 13){changeEnterKey(body.contentWindow)}};
645                        msg_reply_from = document.createElement('input');
646                        msg_reply_from.id = "msg_reply_from_" + new_border_ID;
647                        msg_reply_from.type = "hidden";
648                        msg_reply_from.value = Element("msg_number_" + border_ID).value;
649                        Element("content_id_" + new_border_ID).appendChild(msg_reply_from);
650                        break;
651                case "reply_to_all_with_history":
652                        // delete user email from to_all array.
653                        data.to_all = new Array();
654                        var j = 0;
655                                for(i = 0; i < _array_to_all.length; i++) {                     
656                                if(_array_to_all[i].lastIndexOf(Element("user_email").value) == "-1"){
657                                        data.to_all[j++] = _array_to_all[i];
658                                }
659                        }
660                        data.to_all = data.to_all.join(",");
661                        title = "Re: " + data.subject;
662                        Element("to_" + new_border_ID).value = data.to;
663                        Element("to_" + new_border_ID).value += ', ' + data.to_all;
664                        if (data.cc){
665                                document.getElementById("cc_" + new_border_ID).value = data.cc;
666                                document.getElementById("a_cc_link_" + new_border_ID).style.display='none';
667                                document.getElementById("tr_cc_" + new_border_ID).style.display='';
668                                document.getElementById('space_link_' + new_border_ID).style.display='none';
669                        }
670                        document.getElementById("subject_" + new_border_ID).value = "Re: " + data.subject;
671                        block_quoted_body = make_body_reply(data.body, data.to, data.date_day, data.date_hour);
672                        var body = document.getElementById("body_" + new_border_ID);
673                        body.contentWindow.document.open();
674                        // Insert the signature automaticaly at message body if use_signature preference is set
675                        if (preferences.use_signature == "1") {
676                                body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>" + "<br>" + signature + "</body></html>" + block_quoted_body + "</body></html>");
677                        }
678                        else {
679                        body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>"+block_quoted_body+"</body></html>");
680                        }
681                        body.contentWindow.document.close();
682                        body.contentWindow.document.designMode = "on";
683                        //Focus
684                        if (is_ie)
685                                window.setTimeout('document.getElementById("body_'+new_border_ID+'").contentWindow.focus();', 300);
686                        else
687                                body.contentWindow.focus();
688                        if (is_ie)
689                                body.contentWindow.document.onkeypress = function(){if(body.contentWindow.event.keyCode == 13){changeEnterKey(body.contentWindow)}};
690                        msg_reply_from = document.createElement('input');
691                        msg_reply_from.id = "msg_reply_from_" + new_border_ID;
692                        msg_reply_from.type = "hidden";
693                        msg_reply_from.value = Element("msg_number_" + border_ID).value;
694                        Element("content_id_" + new_border_ID).appendChild(msg_reply_from);
695                        break;
696                case "forward":
697                        msg_forward_from = document.createElement('input');
698                        msg_forward_from.id = "msg_forward_from_" + new_border_ID;
699                        msg_forward_from.type = "hidden";
700                        msg_forward_from.value = Element("msg_number_" + border_ID).value;
701                        Element("content_id_" + new_border_ID).appendChild(msg_forward_from);                   
702                        title = "Fw: " + data.subject;
703                        document.getElementById("subject_" + new_border_ID).value = "Fw: " + data.subject;
704                        var divFiles = Element("divFiles_"+new_border_ID);
705                        if (Element("attachments_" + border_ID)){
706                                var attachments = document.getElementById("attachments_" + border_ID).childNodes;
707                                for (var i = (attachments.length > 1 ? 1 : 0); i < attachments.length; i++){
708                                        var link_attachment = document.createElement("A");
709                                        link_attachment.setAttribute("href", attachments[i].href);
710                                        link_attachment.innerHTML = attachments[i].innerHTML;
711                                        var tmp = link_attachment.href.replace("javascript:download_attachments(", "").replace(")", "");
712                                        var a_tmp = tmp.split(',');
713                                        tmp = link_attachment.innerHTML.substring(0,link_attachment.innerHTML.lastIndexOf("("));
714                                        a_tmp[2] = "'"+tmp.substring(0,tmp.length-1)+"'";
715                                        s_tmp = escape(connector.serialize(a_tmp));
716                                        divFiles.innerHTML += "<input style='border:0' type='CHECKBOX' name='forwarding_attachments[]' checked value=\""+s_tmp+"\"/>";
717                                        divFiles.appendChild(link_attachment);
718                                }
719                        }
720                        var body = Element("body_" + new_border_ID);
721                        body.contentWindow.document.open();
722                        // Insert the signature automaticaly at message body if use_signature preference is set
723                        if (preferences.use_signature == "1") {
724                                body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>" + "<br>" + signature + "</body></html>" + make_forward_body(data.body, data.to, data.date, data.subject, data.to_all, data.cc) + "</body></html>");
725                        }
726                        else {
727                        body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>"+make_forward_body(data.body, data.to, data.date, data.subject, data.to_all, data.cc)+"</body></html>");
728                        }
729                        body.contentWindow.document.close();
730                        body.contentWindow.document.designMode = "on";
731                        if (is_ie)
732                                body.contentWindow.document.onkeypress = function(){if(body.contentWindow.event.keyCode == 13){changeEnterKey(body.contentWindow)}};
733                        Element("to_" + new_border_ID).focus();
734                        break;
735                case "new":
736                        title = get_lang("New Message");
737                        if(Element('msg_number').value) {
738                                var _to = Element('msg_number').value;
739                                var reEmail = /^[A-Za-z\d_-]+(\.[A-Za-z\d_-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;                         
740                                if(!reEmail.test(_to)){
741                                        var array_contacts = contacts.split(',');
742                                        for(i = 0; i < array_contacts.length;i++) {
743                                                if(array_contacts[i].lastIndexOf(_to) != "-1"){
744                                                        var _group = array_contacts[i].split(";");
745                                                        _to = '"'+_group[0]+'" <'+_group[1]+'>';
746                                                        break;
747                                                }
748                                        }
749                                }
750                                Element("to_" + new_border_ID).value = _to +',';
751                                Element('msg_number').value = '';
752                        }
753                        var body = document.getElementById("body_" + new_border_ID);
754                        body.contentWindow.document.open();
755                        // Insert the signature automaticaly at message body if use_signature preference is set
756                        if (preferences.use_signature == "1") {
757                                body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>" + "<br>" + signature + "</body></html>");
758                        }
759                        else {
760                        body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'></body></html>");
761                        }
762                        body.contentWindow.document.close();
763                        body.contentWindow.document.designMode = "on";
764                        if (is_ie)
765                                body.contentWindow.document.onkeypress = function(){if(body.contentWindow.event.keyCode == 13){changeEnterKey(body.contentWindow)}};
766                        Element("to_" + new_border_ID).focus();                 
767                        break;
768                case "edit":
769                        openTab.imapBox[new_border_ID] = folder_message.value;
770                        openTab.toPreserve[new_border_ID] = true;
771                        openTab.imapUid[new_border_ID] = parseInt(border_ID.substr(0,border_ID.indexOf("_")));
772                        document.getElementById('font_border_id_'+new_border_ID).innerHTML = data.subject;
773                        data.to = Element("to_values_" + border_ID).value;
774                        data.to = data.to.replace(/&lt;/gi,"<");
775                        data.to = data.to.replace(/&gt;/gi,">");
776                        title = "Edição: "+data.subject;
777                       
778                        Element("to_" + new_border_ID).value = data.to;
779                        if (data.cc){
780                                Element("cc_" + new_border_ID).value = data.cc;
781                                Element("space_link_" + new_border_ID).style.display = 'none';
782                                Element("a_cc_link_" + new_border_ID).style.display = 'none';
783                                Element("tr_cc_"+ new_border_ID).style.display = '';
784                        }
785                        Element("subject_" + new_border_ID).value = data.subject;
786                       
787                        var divFiles = Element("divFiles_"+new_border_ID);
788                        if (Element("attachments_" + border_ID)){
789                                var attachments = document.getElementById("attachments_" + border_ID).childNodes;
790                                for (var i = (attachments.length > 1 ? 1 : 0); i < attachments.length; i++){
791                                        var link_attachment = document.createElement("A");
792                                        link_attachment.setAttribute("href", attachments[i].href);
793                                        link_attachment.innerHTML = attachments[i].innerHTML;
794                                        var tmp = link_attachment.href.replace("javascript:download_attachments(", "").replace(")", "");
795                                        var a_tmp = tmp.split(',');
796                                        tmp = link_attachment.innerHTML.substring(0,link_attachment.innerHTML.lastIndexOf("("));
797                                        a_tmp[2] = "'"+tmp.substring(0,tmp.length-1)+"'";
798                                        s_tmp = escape(connector.serialize(a_tmp));
799                                        divFiles.innerHTML += "<input style='border:0' type='CHECKBOX' name='forwarding_attachments[]' checked value=\""+s_tmp+"\"/>";
800                                        divFiles.appendChild(link_attachment);
801                                }
802                        }
803                        var body = Element("body_" + new_border_ID);
804                        body.contentWindow.document.open();
805                        body.contentWindow.document.write("<html><body bgcolor='#FFFFFF'>"+data.body+"</body></html>");
806                        body.contentWindow.document.close();
807                        body.contentWindow.document.designMode = "on";
808                        //Focus
809                        if (is_ie)
810                                window.setTimeout('document.getElementById("body_'+new_border_ID+'").contentWindow.focus();', 300);
811                        else
812                                body.contentWindow.focus();
813                        if (is_ie)
814                                body.contentWindow.document.onkeypress = function(){if(body.contentWindow.event.keyCode == 13){changeEnterKey(body.contentWindow)}};
815                        break;
816                default:
817        }
818
819        if (preferences.auto_save_draft == 1)
820    {
821        var time_auto_save = false;
822        var save_link = document.getElementById("save_message_options"+new_border_ID);
823
824        function auto_sav()
825        {
826            if ( time_auto_save )
827                clearTimeout(time_auto_save);
828
829            time_auto_save = setTimeout("save_msg("+new_border_ID+")", autosave_time);
830        }
831        config_events(body.contentWindow.document,'keypress', auto_sav);
832    }
833
834        //BEGIN Tab event
835        if (preferences.use_shortcuts == '1')
836        {
837                if (is_ie)
838                {
839                        body.contentWindow.document.attachEvent('onkeydown', function(event) { if(event.keyCode==27){delete_border(new_border_ID,'false');} if(event.keyCode==9) { Element('to_'+new_border_ID).focus(); Element('send_button_'+new_border_ID).focus(); return false;} }, false);
840                }
841                else
842                {
843                        body.contentWindow.document.addEventListener('keypress', function(event) { if(event.keyCode==27){delete_border(new_border_ID,'false');} if(event.keyCode==9) { Element('send_button_'+new_border_ID).focus(); event.preventDefault(); } }, false);
844                }
845        }
846        // END Tab event
847       
848        var offWidth = Element('border_blank').offsetWidth ? Element('border_blank').offsetWidth : Element('border_blank').clientWidth;
849        var resize = false;
850       
851        if (offWidth < 200) {
852                resize = Element("border_id_" + new_border_ID).style.width;
853        }
854
855        if (title.length > 21){
856                title = title.substring(0,21) + "...";
857        }
858       
859        if(resize)
860                title = title.substring(0, parseInt(resize)*0.08);
861
862        Element("border_id_" + new_border_ID).innerHTML = "<table width=100% border=0 cellspacing=0 cellpadding=0><tr><td id=font_border_id_" + new_border_ID +" class='font-menu' width=*>" +title + "</td><td width=1px><img onmousedown='javascript:return false' style='cursor:pointer' onclick=delete_border('" + new_border_ID + "','false') src='templates/default/images/close_button.gif'></td></tr></table>";
863        return new_border_ID; //Preciso retornar o ID da nova mensagem.
864}
865
866// Change the tag <P> for the tag <BR> on IE
867function changeEnterKey(win) {
868        var oSel = win.document.selection.createRange();
869        oSel.pasteHTML("<br />");
870        win.event.cancelBubble = true;
871        win.event.returnValue=false;
872        oSel.select();
873        oSel.moveEnd("character",1);
874        oSel.moveStart("character",1);
875        oSel.collapse(false);
876        return false;
877}
878
879function send_message_return(data, ID){
880        if(data && data.success == true ){
881                // if send ok, set a flag as answered or forwarded
882                var msg_number_replied = Element('msg_reply_from_'+ID);
883                var msg_number_forwarded = Element('msg_forward_from_'+ID);
884
885                if (msg_number_replied){
886                        set_message_flag(msg_number_replied.value, 'answered');
887                }
888                else if (msg_number_forwarded){
889                        set_message_flag(msg_number_forwarded.value, 'forwarded');
890                }
891                delete_border(ID,'true');
892                if(wfolders.alert){
893                        write_msg(get_lang('Your message was sent and save.'));
894                        wfolders.alert = false;
895                }else{
896                        write_msg(get_lang('Your message was sent.'));
897                }
898                // If new dynamic contacts were added, update the autocomplete ....
899                if(data.new_contacts){
900                        var ar_contacts = data.new_contacts.split(',;');
901                        for(var j in ar_contacts){
902                                // If the dynamic contact don't exist, update the autocomplete....
903                                if((contacts+",").indexOf(";"+ar_contacts[j]+",") == -1)
904                                        contacts += ",;" + ar_contacts[j];
905                        }
906                }
907                if ((! openTab.toPreserve[ID]) && (openTab.imapUid[ID] != 0))
908                        cExecute ("$this.imap_functions.delete_msgs&folder="+openTab.imapBox[ID]+"&msgs_number="+openTab.imapUid[ID],function(data){ return });
909        }
910        else{                   
911                if(data == 'Post-Content-Length')
912                        write_msg(get_lang('The size of this message has exceeded  the limit (%1B).',Element('upload_max_filesize').value));
913                else if(data)
914                        write_msg(data);
915                else
916                        write_msg(get_lang("Connection failed with %1 Server. Try later.", "Web"));
917        }
918}
919
920function send_message(ID, folder, folder_name){
921        var save_link = Element("save_message_options_"+ID);
922        save_link.onclick = '';
923        save_link.style.color = '#999';
924       
925        ID_tmp = ID;
926
927        var handler_send_message = function(data){
928                send_message_return(data, this.ID_tmp); // this is a hack to escape quotation form connector bug
929        };
930               
931        var textArea = document.createElement("TEXTAREA");
932        textArea.style.display='none';
933        textArea.name = "body";
934        body = document.getElementById("body_"+ID);
935        textArea.value += '<body>\r\n';
936        textArea.value += body.contentWindow.document.body.innerHTML;
937        textArea.value += '\r\n</body>';
938        var input_folder = document.createElement("INPUT");
939        input_folder.style.display='none';
940        input_folder.name = "folder";
941        input_folder.value = folder;
942        var msg_id = document.createElement("INPUT");
943        msg_id.style.display='none';
944        msg_id.name = "msg_id";
945        msg_id.value = openTab.imapUid[ID];
946       
947        if (is_ie){
948                var i = 0;
949                while (document.forms(i).name != "form_message_"+ID){i++}
950                form = document.forms(i);
951        }
952        else
953                form = document.forms["form_message_"+ID];
954       
955        form.appendChild(textArea);
956        form.appendChild(input_folder);
957        form.appendChild(msg_id);
958
959        var _subject = trim(Element("subject_"+ID).value);
960        if((_subject.length == 0) && !confirm(get_lang("Send this message without a subject?"))) {
961                Element("subject_"+ID).focus();
962                return;
963        }
964       
965        cExecuteForm ("$this.imap_functions.send_mail", form, handler_send_message, ID);
966}
967
968function return_save(data,border_id,folder_name,folder_id,message_id)
969{
970        var handler_delete_msg = function(data){ refresh(preferences.alert_new_msg); };
971
972        if (data.append != true || !data)
973        {
974                RichTextEditor.saveFlag = -1;
975                if (! data.append)
976                        write_msg('ERROR saving your message.');
977                else
978                {
979                        if (data.append.match(/^(.*)TRYCREATE(.*)$/))
980                        {
981                                connector.loadScript('TreeS');
982                                alert(get_lang('There is not %1 folder, Expresso is creating it for you... Please, repeat your request later.',draftsfolder));
983                                connector.loadScript('TreeShow');
984                                ttree.FOLDER = 'root';
985                                ttreeBox.new_past(draftsfolder);
986                                setTimeout('save_msg('+border_id+')',3000);
987                        }
988                        else
989                                write_msg(data.append);
990                }
991        }
992        else
993        {
994                RichTextEditor.saveFlag = 1;
995                openTab.imapUid[border_id] = data.msg_no;
996                openTab.imapBox[border_id] = data.folder_id;
997               
998                var newTitle = document.getElementById('subject_'+border_id).value;
999                if (newTitle.length > 18)
1000                        newTitle = newTitle.substr(18) + '...';
1001                else if (newTitle == '')
1002                                newTitle = get_lang("No subject");
1003                document.getElementById('font_border_id_'+border_id).innerHTML = newTitle;
1004               
1005                // Replace the embedded images for new uids
1006                var mainField = document.getElementById('body_'+border_id).contentWindow;
1007                var content_body =  mainField.document.getElementsByTagName('body').item(0).innerHTML;
1008                var body_images = content_body.match(/msg_num=\d*/g);
1009                var images_part = content_body.match(/msg_part=\d*/g);
1010                if (body_images)
1011                {
1012                        for (var i=0; i<body_images.length; i++){
1013                                content_body =  content_body.replace(body_images[i],"msg_num="+openTab.imapUid[border_id]);
1014                        }
1015                        var allImgs = new Array (images_part.length);
1016                                var j=-1;
1017                                for (var i in images_part){
1018                               
1019                                        if (is_ie)
1020                                                if (i == 0)
1021                                                        var image_number = parseInt(images_part[i].substr(9));
1022                                                else
1023                                                        image_number = "null";
1024                                        else
1025                                                var image_number = parseInt(images_part[i].substr(9));
1026                                       
1027                                if (! isNaN(image_number))
1028                                        {
1029                                                if (! allImgs[image_number])
1030                                                {
1031                                                        allImgs[image_number] = true;
1032                                                        j--;                                   
1033                                                }
1034                                        content_body = content_body.replace(images_part[i],'msg_part='+j);
1035                                        }
1036                                }
1037                        content_body = content_body.replace(/msg_part=-/g,'msg_part=');
1038                       
1039                        mainField.document.getElementsByTagName('body').item(0).innerHTML = content_body;
1040                }       
1041                               
1042                //Replace all files to new files
1043                var divFiles = Element("divFiles_"+border_id);
1044                var divParent = divFiles.parentNode;
1045                divParent.removeChild(divFiles);
1046                divFiles = document.createElement('DIV');
1047                divFiles.id = "divFiles_"+border_id;
1048                divParent.appendChild(divFiles);
1049               
1050                var attach_files = connector.unserialize(data.files);
1051                if (attach_files != null) {
1052                        openTab.countFile[border_id] = attach_files.length;
1053                for (att_index = 0; att_index < attach_files.length; att_index++){
1054       
1055                        var link_attachment = document.createElement("A");
1056                        var fileName = attach_files[att_index].substr(0,attach_files[att_index].indexOf('_SIZE_'));
1057                        var fileSize = parseInt(attach_files[att_index].substr(attach_files[att_index].indexOf('_SIZE_')+6))/1024
1058                        link_attachment.innerHTML = fileName + " ("+parseInt(fileSize)+" kb)";
1059
1060                        var href = "'"+folder_id+"','"+data.msg_no+"','"+(att_index)+"','"+(att_index+2)+"','base64'";
1061
1062                        link_attachment.setAttribute("href", "javascript:download_attachments("+href+")");
1063
1064                        var a_tmp = href.split(',');
1065                        a_tmp[2] = fileName;
1066                        s_tmp = escape(connector.serialize(a_tmp));
1067                                       
1068                        var check_attachment = document.createElement("INPUT");
1069                        check_attachment.type = 'CHECKBOX';
1070                        check_attachment.name = 'forwarding_attachments[]';
1071                        check_attachment.value = s_tmp;
1072
1073                        divFiles.appendChild(check_attachment);
1074                        divFiles.appendChild(link_attachment);
1075                        divFiles.appendChild(document.createElement("BR"));
1076
1077                        check_attachment.checked = true;
1078                }
1079        }
1080                if (message_id)
1081                        cExecute ("$this.imap_functions.delete_msgs&folder="+openTab.imapBox[border_id]+"&msgs_number="+message_id,handler_delete_msg);
1082               
1083                var save_link = Element("save_message_options_"+border_id);
1084                save_link.onclick = '';
1085                save_link.style.color = '#999';
1086                watch_changes_in_msg(border_id);
1087                Element("send_button_"+border_id).style.visibility="visible";
1088                write_msg(get_lang('Your message was save as draft in folder %1.', lang_folder(folder_name)));
1089        }               
1090}
1091
1092function save_msg(border_id){
1093        Element("send_button_"+border_id).style.visibility="hidden";
1094
1095        if (openTab.imapBox[border_id]) //Gets the imap folder
1096                var folder_id = openTab.imapBox[border_id];
1097        else
1098                var     folder_id = "INBOX/"+draftsfolder;
1099
1100        if (folder_id == 'INBOX') // and folder name from border
1101                var folder_name = get_lang(folder_id);
1102        else
1103                var folder_name = folder_id.substr(6);
1104               
1105        // hack to avoid form connector bug,  escapes quotation. Please see #179
1106        tmp_border_id=border_id;
1107        tmp_folder_name=folder_name;
1108        tmp_folder_id=folder_id;
1109        message_id = openTab.imapUid[border_id];
1110        var handler_save_msg = function(data){ return_save(data,this.tmp_border_id,this.tmp_folder_name,this.tmp_folder_id,this.message_id); }
1111
1112        var textArea = document.createElement("TEXTAREA");
1113        textArea.style.display='none';
1114        textArea.name = "body";
1115        body = document.getElementById("body_"+border_id);
1116        if (! body)
1117                return;
1118        textArea.value += '<body>\r\n';
1119        textArea.value += body.contentWindow.document.body.innerHTML;
1120        textArea.value += '\r\n</body>';
1121        var input_folder = document.createElement("INPUT");
1122        input_folder.style.display='none';
1123        input_folder.name = "folder";
1124        input_folder.value = folder_id;
1125        var input_msgid = document.createElement("INPUT");
1126        input_msgid.style.display='none';
1127        input_msgid.name = "msg_id";
1128        input_msgid.value = message_id;
1129       
1130        if (is_ie){
1131                var i = 0;
1132                while (document.forms(i).name != "form_message_"+border_id){i++}
1133                form = document.forms(i);
1134        }
1135        else
1136                form = document.forms["form_message_"+border_id];
1137        form.appendChild(textArea);
1138        form.appendChild(input_folder);
1139        form.appendChild(input_msgid);
1140
1141        cExecuteForm ("$this.imap_functions.save_msg", form, handler_save_msg,border_id);       
1142}
1143
1144function return_saveas(data,border_id,folder_name)
1145{
1146        if(!verify_session(data))
1147                return;
1148        if (data.append)
1149        {
1150                delete_border(border_id,null);
1151                write_msg(get_lang('Your message was save as draft in folder %1.', folder_name));
1152        }
1153        else
1154                write_msg('ERROR saving your message.');                                       
1155}
1156
1157
1158function save_as_msg(border_id, folder_id, folder_name){
1159        // hack to avoid form connector bug,  escapes quotation. Please see #179
1160        tmp_border_id=border_id;
1161        tmp_folder_name=folder_name;
1162        var handler_save_msg = function(data){ return_saveas(data,this.tmp_border_id,this.tmp_folder_name); }   
1163        var textArea = document.createElement("TEXTAREA");
1164        textArea.style.display='none';
1165        textArea.name = "body";
1166        body = document.getElementById("body_"+border_id);
1167        textArea.value += '<body>\r\n';
1168        textArea.value += body.contentWindow.document.body.innerHTML;
1169        textArea.value += '\r\n</body>';
1170       
1171        var input_folder = document.createElement("INPUT");
1172        input_folder.style.display='none';
1173        input_folder.name = "folder";
1174        input_folder.value = folder_id;
1175       
1176        if (is_ie){
1177                var i = 0;
1178                while (document.forms(i).name != "form_message_"+border_id){i++}
1179                form = document.forms(i);
1180        }
1181        else
1182                form = document.forms["form_message_"+border_id];
1183        form.appendChild(textArea);
1184        form.appendChild(input_folder);
1185       
1186        cExecuteForm ("$this.imap_functions.save_msg", form, handler_save_msg,border_id);
1187}
1188
1189
1190// Get checked messages
1191function set_messages_flag(flag, msgs_to_set){
1192        var handler_set_messages_flag = function (data){
1193               
1194                if(!verify_session(data))
1195                        return;
1196                var msgs_to_set = data.msgs_to_set.split(",");
1197
1198                for (var i=0; i<msgs_to_set.length; i++){
1199                        if(Element("check_box_message_" + msgs_to_set[i])){
1200                                switch(data.flag){
1201                                        case "unseen":
1202                                                set_msg_as_unread(msgs_to_set[i]);
1203                                                Element("check_box_message_" + msgs_to_set[i]).checked = false;
1204                                                break;
1205                                        case "seen":
1206                                                set_msg_as_read(msgs_to_set[i], false);
1207                                                Element("check_box_message_" + msgs_to_set[i]).checked = false;
1208                                                break;
1209                                        case "flagged":
1210                                                set_msg_as_flagged(msgs_to_set[i]);
1211                                                document.getElementById("check_box_message_" + msgs_to_set[i]).checked = false;
1212                                                break;
1213                                        case "unflagged":
1214                                                set_msg_as_unflagged(msgs_to_set[i]);
1215                                                Element("check_box_message_" + msgs_to_set[i]).checked = false;
1216                                                break;
1217                                }
1218                        }
1219                }
1220                Element('chk_box_select_all_messages').checked = false;
1221        }
1222       
1223        var folder = get_current_folder();
1224        if (msgs_to_set == 'get_selected_messages')
1225                var msgs_to_set = this.get_selected_messages();
1226        else
1227                folder = Element("input_folder_"+msgs_to_set+"_r").value;
1228       
1229        if (msgs_to_set)
1230                cExecute ("$this.imap_functions.set_messages_flag&folder="+folder+"&msgs_to_set="+msgs_to_set+"&flag="+flag, handler_set_messages_flag);
1231        else
1232                write_msg(get_lang('No selected message.'));           
1233}
1234
1235// By message number
1236function set_message_flag(msg_number, flag){
1237        var msg_number_folder = Element("new_input_folder_"+msg_number+"_r");
1238        var handler_set_messages_flag = function (data){
1239                if(!verify_session(data))
1240                        return;
1241                if (data.status && Element("td_message_answered_"+msg_number)) {       
1242                        if(flag == 'answered')
1243                                Element("td_message_answered_"+msg_number).innerHTML = '<img src=templates/default/images/answered.gif title=Respondida>';
1244                        else if(flag == 'forwarded')
1245                                Element("td_message_answered_"+msg_number).innerHTML = '<img src=templates/default/images/forwarded.gif title=Encaminhada>';
1246                }
1247        }
1248        cExecute ("$this.imap_functions.set_messages_flag&folder="+( msg_number_folder ?  msg_number_folder.value : get_current_folder() )+"&msgs_to_set="+msg_number+"&flag="+flag, handler_set_messages_flag);
1249}
1250
1251function print_all(){
1252        var folder= Element('border_id_0').innerHTML;
1253        var body = Element('divScrollMain_'+numBox).innerHTML;
1254        var print_width = screen.width - 200;
1255        var x = ((screen.width - print_width) / 2);
1256        var y = ((screen.height - 400) / 2) - 35;
1257        var window_print = window.open('','ExpressoMail','width='+print_width+',height=400,resizable=yes,scrollbars=yes,left='+x+',top='+y);
1258        var seekDot = /\<img /gi;
1259        body = body.replace(seekDot, "<img style='display:none' ");
1260        seekDot = /\<input /gi;
1261        body = body.replace(seekDot, "<input style='display:none' ");
1262       
1263        while (1){
1264                try{
1265                        var html = '<br>';
1266                        html += "<h4>ExpressoLivre - ExpressoMail</h4>";
1267                        html += folder+"<hr>";
1268                       
1269                        window_print.document.body.innerHTML = html + '<blockquote><font size="2">' +
1270                        '<table style="font-size:12" width="'+(is_ie ? "85%" : "99%" )+'"><TR><TD align="center" width="5%">&nbsp;</TD><TD width="30%" align="center">'+get_lang("Who")+'</TD><TD align="center" width="45%">'+get_lang("Subject")+'</TD><TD align="center" width="10%">'+get_lang("Date")+'</TD><TD width="10%">'+get_lang("Size")+'</TD></TR></table>'
1271                        + body + '</font></blockquote>';
1272                        break;
1273                }
1274                catch(e){
1275                        //alert(e.message);
1276                }
1277        }
1278        window_print.document.close();
1279        window_print.print();
1280}
1281
1282
1283function print_msg(msg_folder, msg_number, border_ID){
1284        var div_toaddress_full = Element("div_toaddress_full_"+border_ID);     
1285        var div_ccaddress_full = Element("div_ccaddress_full_"+border_ID);
1286        var printListTO = (div_toaddress_full && div_toaddress_full.style.display != 'none') || toaddress_array[border_ID].length == 1 ? true : false; 
1287        var printListCC = (div_ccaddress_full && div_ccaddress_full.style.display != 'none') || !div_ccaddress_full ? true : false;     
1288        var sender              = Element('sender_values_'+border_ID) ? Element('sender_values_'+border_ID).value : null;
1289        var from                = Element('from_values_'+border_ID) ? Element('from_values_'+border_ID).value : null;
1290        var to                  = Element('to_values_'+border_ID) ? Element('to_values_'+border_ID).value :null;
1291        var cc                  = Element('cc_values_'+border_ID) ? Element('cc_values_'+border_ID).value : null;               
1292        var date                =  Element('date_'+border_ID); 
1293        var subject             = Element('subject_'+border_ID);
1294        var attachments = Element('attachments_'+border_ID);
1295        var body                = Element('body_'+border_ID);
1296
1297        var print_width = screen.width - 200;
1298        var x = ((screen.width - print_width) / 2);
1299        var y = ((screen.height - 400) / 2) - 35;
1300        var window_print = window.open('','ExpressoMail','width='+print_width+',height=400,resizable=yes,scrollbars=yes,left='+x+',top='+y);
1301        if(window_print == null) {
1302                alert(get_lang("The Anti Pop-Up is enabled. Allow this site (%1) for print.",document.location.hostname));
1303                return;
1304        }
1305       
1306        while (1){
1307                try{
1308                        var html = '<br><br>';
1309                        //html += "<input type='button' value='Imprimir' onclick='javascript:window.print();'>";
1310                        html += "<h4>ExpressoLivre - ExpressoMail</h4><hr>";
1311                        html += '<table><tbody>';
1312                        if(sender)
1313                                html += "<tr><td width=7% noWrap><font size='2'>" + get_lang('Sent by') + ": </font></td><td><font size='2'>"+sender+"</font></td></tr>";
1314                        if(from)
1315                                html += "<tr><td width=7%><font size='2'>" + get_lang('From') + ": </font></td><td><font size='2'>"+from+"</font></td></tr>";
1316                        if(to) {
1317                                if(!printListTO)
1318                                        to = 'Os destinatários não estão sendo exibidos para esta impressão';
1319                                html += "<tr><td width=7%><font size='2'>" + get_lang('To') + ": </font></td><td><font size='2'>"+to+"</font></td></tr>";
1320                        }                       
1321                        if (cc) {
1322                                if(!printListCC)
1323                                        cc = 'Os destinatários não estão sendo exibidos para esta impressão';
1324                                html += "<tr><td width=7%><font size='2'>" + get_lang('Cc') + ": </font></td><td><font size='2'>"+cc+"</font></td></tr>";
1325                        }
1326                        if(date)
1327                                html += "<tr><td width=7%><font size='2'>" + get_lang('Date') + ": </font></td><td><font size='2'>"+date.innerHTML+"</font></td></tr>";                 
1328                        html += "<tr><td width=7%><font size='2'>" + get_lang('Subject')+ ": </font></td><td><font size='2'>"+subject.innerHTML+"</font></td></tr>";
1329                        html += "</tbody></table><hr>";
1330                        window_print.document.body.innerHTML = html + '<blockquote><font size="2">' + body.innerHTML + '</font></blockquote>';
1331                        if(!is_ie){
1332                                var tab_tags = window_print.document.getElementsByTagName("IMG");                       
1333                                for(var i = 0; i < tab_tags.length;i++){
1334                                        var _img = document.createElement("IMG");
1335                                        _img.src = tab_tags[i].src;
1336                                        tab_tags[i].parentNode.replaceChild(_img,tab_tags[i]);
1337                                }
1338                        }
1339                        break;
1340                }
1341                catch(e){
1342                        //alert(e.message);
1343                }
1344        }
1345        window_print.document.close();
1346        window_print.print();
1347}
1348
1349function empty_trash_imap(){
1350        var handler_empty_trash = function(data){
1351                Element('chk_box_select_all_messages').checked = false;
1352                if(!verify_session(data))
1353                        return;
1354                if (get_current_folder() == 'INBOX'+cyrus_delimiter+trashfolder){
1355                        draw_paging(0);
1356                        kill_current_box();
1357                }
1358                tree_folders.getNodeById('INBOX'+cyrus_delimiter+trashfolder).alter({caption: get_lang("Trash")});
1359                tree_folders.getNodeById('INBOX'+cyrus_delimiter+trashfolder)._refresh();
1360                update_quota(get_current_folder());
1361                if (data)
1362                        write_msg(get_lang('Your Trash folder was empty.'));
1363                else
1364                        write_msg(get_lang('ERROR emptying your Trash folder.'));
1365        }
1366        var realyEmptyTrash=confirm(get_lang('Do you really want to empty your trash folder?'));
1367        if (realyEmptyTrash)
1368                cExecute ("$this.imap_functions.empty_trash", handler_empty_trash);
1369}
1370
1371function export_all_selected_msgs(){
1372       
1373        var msgs_to_export = this.get_selected_messages();
1374       
1375        var handler_export_all_selected_msgs = function(data){
1376       
1377                if(!data){
1378                        write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'));
1379                }
1380                else
1381                        download_attachments(null, null, data, null,null,'mensagens.zip');
1382        }
1383       
1384        if (msgs_to_export) {
1385                cExecute ("$this.exporteml.makeAll", handler_export_all_selected_msgs, "folder="+get_current_folder()+"&msgs_to_export="+msgs_to_export);
1386                write_msg(get_lang('You must wait while the messages will be exported...'));
1387        }
1388        else
1389                write_msg(get_lang('No selected message.'));
1390}
1391
1392function select_all_search_messages(select, id){
1393        var search_box = Element("table_resultsearch_" + id.substr(18)).firstChild;
1394        var felement = search_box.firstChild;
1395        while(felement)
1396        {
1397        if (select)
1398                felement.firstChild.firstChild.checked = true;
1399        else
1400                felement.firstChild.firstChild.checked = false;
1401        felement = felement.nextSibling;
1402        }
1403}
1404
1405function verify_session(data){
1406
1407        if(data && data.imap_error) {
1408                if(data.imap_error == "nosession")
1409                        write_msg(get_lang("your session could not be verified."));
1410                else
1411                        write_msg(data.imap_error);
1412                // Hold sesion for edit message.
1413                //if(!hold_session)
1414                //      location.href="../login.php?cd=10&phpgw_forward=%2FexpressoMail1_2%2Findex.php";               
1415                return false;
1416        }
1417        else
1418                return true;
1419}
1420
1421// Save image file.
1422function save_image(e,thumb){
1423        thumb.oncontextmenu = function(e) {
1424                return false;
1425        }
1426        var _button = is_ie ? window.event.button : e.which;
1427        var     _target = is_ie ? event.srcElement : e.target;
1428       
1429        if(_button == 2 || _button == 3) {
1430                var _params = _target.id.split(";;");
1431                download_attachments(_params[0],_params[1],_params[2],_params[3],_params[4]);
1432        }
1433}
1434
1435function nospam(msgs_number, border_ID, folder){
1436        if (folder == 'null')
1437                folder = get_current_folder();
1438        var new_folder  = 'INBOX';
1439        var new_folder_name = get_lang('INBOX');
1440        var handler_move_msgs = function(data){
1441                if (msgs_number == 'selected') 
1442                        set_messages_flag("unseen", "get_selected_messages");
1443                else
1444                        set_message_flag(msgs_number, "unseen");
1445            move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name);
1446        }
1447
1448    if (msgs_number == 'selected')
1449                msgs_number = get_selected_messages();
1450       
1451        if (parseInt(msgs_number) > 0 || msgs_number.length > 0)
1452                cExecute ("$this.imap_functions.spam&folder="+folder+"&spam=false"+"&msgs_number="+msgs_number+"&border_ID="+border_ID+"&sort_box_type="+sort_box_type+"&sort_box_reverse="+sort_box_reverse+"&reuse_border="+border_ID+"&new_folder="+new_folder+"&new_folder_name="+new_folder_name+"&get_previous_msg="+preferences.delete_and_show_previous_message+"&cyrus_delimiter="+cyrus_delimiter, handler_move_msgs);
1453        else
1454                write_msg(get_lang('No selected message.'));
1455}
1456
1457function spam(folder, msgs_number, border_ID){
1458        if (folder == 'null')
1459                folder = get_current_folder();
1460    var new_folder              = 'INBOX'+cyrus_delimiter+'Spam';
1461        var new_folder_name = 'Spam';
1462        var handler_move_msgs = function(data){
1463                // debug
1464                // alert(data);
1465                move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name);
1466        }
1467    if(msgs_number == 'selected')
1468                msgs_number = get_selected_messages();
1469        if(parseInt(msgs_number) > 0 || msgs_number.length > 0)
1470                cExecute ("$this.imap_functions.spam&folder="+folder+"&spam=true"+"&msgs_number="+msgs_number+"&border_ID="+border_ID+"&sort_box_type="+sort_box_type+"&sort_box_reverse="+sort_box_reverse+"&reuse_border="+border_ID+"&new_folder="+new_folder+"&new_folder_name="+new_folder_name+"&get_previous_msg="+preferences.delete_and_show_previous_message+"&cyrus_delimiter="+cyrus_delimiter, handler_move_msgs);
1471        else
1472        write_msg(get_lang('No selected message.'));
1473}
Note: See TracBrowser for help on using the repository browser.