source: sandbox/newExpressoMail/expressoMail1_2/js/draw_api.js @ 7167

Revision 7167, 133.2 KB checked in by gustavo, 12 years ago (diff)

Ticket #2939 - Melhorias na exibicao das abas e da listagem de email

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1/**
2 * Estrutura que guarda em cache as mensagens abertas, a exemplo da estrutura utilizada
3 * na funcionalidade de anexar mensagens.
4 * Isto reduz a necessidade de acessar estruturas da tela para obter informaᅵᅵes sobre
5 * as mensagens, como tem sido para encaminhar, responder, etc.
6 * Manter os dados 'limpos' em uma estrutura 'somente-leitura' permite maior flexibilidade
7 * para mudar a tela e menos processamento de limpeza de dados (por exemplo retirar tags de
8 * formataᅵᅵo, etc.)
9 */
10 
11focusIn = "";
12canMakeBox = true;
13fastSearch = false;
14selectedPagingMsgs = {};
15allMsgsSelected = false;
16totalFolderMsgs = 0;
17var jqXHR = new Array();
18var idattachbycontent = 0;
19
20onceOpenedHeadersMessages = {};
21var cache = new Array();
22var openTab = {
23        'type' : [], // 8 types of tabs, further info. see expressolivre.org/dev/wiki/mail/Documentacao
24        'content_id' : [],
25        'imapUid' : [], // Stores the imap email number of current tab
26        'countFile' : [0,0,0,0,0,0,0,0,0,0], // Stores the number of files attached in current tab
27        'imapBox' : [], // Stores the folder name
28        'toPreserve' : [], // Check if the message should be removed from draft after send
29        'condition' : [] // Will store the search condition if the tab is the result of a search
30};
31
32var autoSaveControl = {
33    'timer' : [], // The timeout timer for autosave function
34    'status' : [] // The status autosave
35};
36
37var tabTypes = {
38        'new':4,
39        'forward':6,
40        'reply_with_history':7,
41        'reply_to_all_with_history':8,
42        'reply_without_history':9,
43        'reply_to_all_without_history':10,
44        'edit':5
45        };
46
47var currentTab,numBox = 0; // Open Tab and num of mailboxes opened at context
48// Objeto Map, talvez o ideal fosse adicionar este objeto ᅵ Api do egroupware, e carregᅵ-lo
49// aqui no expressoMail.
50
51
52function draw_tree_labels(){
53        labels = DataLayer.get('label',{criteria:{order: 'name'}});
54        if(!$("#MyMarckersList").length)
55                var myLabels = $('#content_folders').append("<div id='MyMarckersList' class='acc-list list-label' ></div>").find("#MyMarckersList");
56        else
57                var myLabels = $("#MyMarckersList");
58        myLabels.html("<div class='my-labels'>" +
59                                "<img src='../prototype/modules/mail/img/tag.png'/>" +
60                                "<a class='title-my-labels' tabindex='0' role='button' aria-expanded='false' title='"+get_lang("My Labels")+"'>"+get_lang("My Labels")+"</a>" +
61                               
62                                "<span class='status-list-labels ui-icon ui-icon-triangle-1-s'></span>" +
63                        "</div>"
64        )
65        .append(DataLayer.render("../prototype/modules/mail/templates/label_list.ejs", {labels: labels} ))
66        .find("li.label-item").css({"background-color":"#ffffff", "border-color":"#CCCCCC", "color":"#444444"}).click(function(event,ui){
67                if($(event.target).is('.square-color')){
68                                $(this).each(function(){
69                                        configureLabels({selectedItem: $(this).attr('class').match(/label-item-([\d]+[()a-zA-Z]*)/)[1]});
70                                        var id_label_item = $(this).attr('class').match(/label-item-([\d]+[()a-zA-Z]*)/)[1];
71                                        $(".label-list-container .label-list").find(".label-item-"+id_label_item).trigger("click");
72                                });
73                } else {
74                                var labelId = $(this).attr('class').match(/label-item-([\d]+[()a-zA-Z]*)/)[1];
75                                search_emails("UNDELETED KEYWORD \"$Label"+labelId+"\"");
76                }
77        }).find(".square-color").css("display","");
78
79        $("#MyMarckersList a.title-my-labels").click(function() {       
80                if($("#MyMarckersList ul.label-list").css("display") == "none"){
81                        $("#MyMarckersList ul.label-list").show();
82                }else{
83                        $("#MyMarckersList ul.label-list").hide();
84                }
85                $('#MyMarckersList .status-list-labels').toggleClass("ui-icon-triangle-1-s");
86                $('#MyMarckersList .status-list-labels').toggleClass("ui-icon-triangle-1-n");   
87         });
88       
89        if (!labels){
90                $(".my-labels").hide();
91        }
92}
93
94function draw_tree_local_folders() {
95        /**
96         * Pastas locais
97         */
98                if(preferences.use_local_messages==1 || expresso_offline) {
99                        var local_folders = expresso_local_messages.list_local_folders();
100                        var has_changes = false;
101                        for (var i in local_folders) { //Coloca as pastas locais.
102
103                                var new_caption = local_folders[i][0];
104                                if(local_folders[i][0].indexOf("/")!="-1") {
105                                        final_pos = local_folders[i][0].lastIndexOf("/");
106                                        new_caption = local_folders[i][0].substr(final_pos+1);
107                                }
108
109                                var folder_unseen = Element('dftree_local_'+local_folders[i][0]+'_unseen');
110
111                                if ((folder_unseen) && (local_folders[i][1] > 0))
112                                {
113                                        folder_unseen.innerHTML = local_folders[i][1];
114                                        has_changes = true;
115                                }
116                                else if (local_folders[i][1] > 0)
117                                {
118                                        tree_folders.getNodeById("local_"+local_folders[i][0]).alter({caption:lang_folder(new_caption) + '<font style=color:red>&nbsp(</font><span id="dftree_local_'+local_folders[i][0]+'_unseen" style=color:red>'+local_folders[i][1]+'</span><font style=color:red>)</font>'});
119                                        tree_folders.getNodeById("local_"+local_folders[i][0])._refresh();
120                                        has_changes = true;
121                                }
122                                else if (local_folders[i][1] <= 0)
123                                {
124                                        tree_folders.getNodeById("local_"+local_folders[i][0]).alter({caption:lang_folder(new_caption)});
125                                        tree_folders.getNodeById("local_"+local_folders[i][0])._refresh();
126                                        has_changes = true;
127                                }
128
129                        if("local_"+local_folders[i][0] == get_current_folder()){
130                                        var old_new_m = isNaN(parseInt(Element('new_m').innerHTML)) ? parseInt(Element('new_m').firstChild.innerHTML) : parseInt(Element('new_m').innerHTML);
131                                        if(!isNaN(old_new_m) && old_new_m < local_folders[i][1]){
132                                                Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) + (parseInt(local_folders[i][1])-old_new_m);
133                                        }
134                                        Element('new_m').innerHTML = local_folders[i][1] ? '<font color="RED">'+local_folders[i][1]+'</font>' : 0;
135                                        draw_paging(Element('tot_m').innerHTML);
136                                        has_changes = true;
137                        }
138                }
139                        if(has_changes)
140                                tree_folders.getNodeById("local_root").open();
141        }
142}
143
144
145function update_local_box(){
146    msg_range_end = (current_page*preferences.max_email_per_page);
147    msg_range_begin = (msg_range_end-(preferences.max_email_per_page)+1);
148    folder=get_current_folder();
149    var msgs  = expresso_local_messages.get_local_range_msgs(folder.substr(6),msg_range_begin,preferences.max_email_per_page,sort_box_type,sort_box_reverse,search_box_type,preferences.preview_msg_subject,preferences.preview_msg_tip);
150    //alternate_border(0);
151    draw_box(msgs, folder, true);
152    draw_paging(msgs.num_msgs);
153    Element("tot_m").innerHTML = msgs.num_msgs;
154    update_menu();
155}
156
157function update_menu(data){
158                /*
159                 * @AUTHOR Rodrigo Souza dos Santos
160                 * @DATE 2008/09/15
161                 * @BRIEF When occurs a error in imap server show the message that is in file "error.html".
162                 */
163                if ( data && data.imap_error )
164                {
165                        if(preferences.use_local_messages==1 && expresso_local_messages.is_offline_installed){
166                                conf = confirm(get_lang("The expresso imap server is currently down, expresso noticed you have offline mail module installed, would you like to use it?"));
167                                if(conf) {
168                                        window.onresize = function() {
169                                                var target = document.getElementById('divAppbox');
170                                                target.style.height= document.body.clientHeight - 83;
171                                        }
172                                        var target = document.getElementById('divAppbox');
173                                        document.getElementById("divAppboxHeader").innerHTML="";
174                                        target.style.height= document.body.clientHeight - 83;
175                                        expresso_local_messages.set_as_logged(account_id,0,true);
176                                        target.innerHTML = "<iframe src='offline.php?inside=1' width='100%' height='100%' frameBorder='0'></iframe>";
177                                        return false;
178                                }
179                        }
180                        connector.newRequest('error.html', 'templates/'+template+'/error.html', 'GET',
181                                function(data)
182                                {
183                                        var target = document.getElementById('divAppbox');
184                                        if ( target )
185                                                target.innerHTML = data;
186                                }
187                        );
188                        return false;
189                }
190               
191               
192                if(data) {
193                        //draw_tree_folders(data);
194                        draw_quota(data);
195                        var f_unseen = Element('dftree_'+current_folder+'_unseen');
196                        if(f_unseen && f_unseen.innerHTML)
197                                Element('new_m').innerHTML = '<font face="Verdana" size="1" color="RED">'+f_unseen.innerHTML+'</font>';
198                        else
199                        {
200                                if( parseInt(Element('new_m').innerHTML) == 0 )
201                                        Element('new_m').innerHTML = 0;
202                        }
203                        folders = data;
204                }
205                draw_new_tree_folder();
206                draw_tree_labels();
207                if(Element("table_quota"))
208                        connector.loadScript("InfoQuota");
209
210                if(preferences.enable_quickadd_telephonenumber)
211                        connector.loadScript("QuickAddTelephone");
212}
213
214var handler_draw_box = function(data){
215        draw_box(data, 'INBOX', true);
216        //alternate_border(0);
217}
218
219// Action on change folders.
220function change_folder(folder, folder_name){
221        if (openTab.imapBox[0] != folder)
222        {
223                selectAllFolderMsgs(false);
224                current_folder = folder;
225                var handler_draw_box = function(data)
226                {
227
228                        if(!verify_session(data))
229                                return;
230                        //alternate_border(0);
231
232                        var title = lang_folder(folder_name);
233                        if (title.length > 18) title = title.substring(0,18) + "...";
234                        $("#ptabs li:first a").html("&nbsp;" + title + '&nbsp;<font face="Verdana" size="1" color="#505050">[<span id="new_m">&nbsp;</span> / <span id="tot_m"></span>]</font>');
235                        $(ptabs).tabs( "select", 0 );
236                        draw_box(data, folder, true);
237                        draw_paging(data.num_msgs);
238                        Element("tot_m").innerHTML = data.num_msgs;
239                        $('#new_m').html(data.tot_unseen > 0 ? data.tot_unseen : "0").css("color","red");
240                        //$("#new_m").html(($(".selected").find(".folder_unseen").html() != "0" && $(".selected").find(".folder_unseen").html() != null)? $(".selected").find(".folder_unseen").html() : "0").css("color", "red");
241                        //update_menu();
242                        $(".folders-loading").removeClass("folders-loading");
243                        return true;
244                }
245                $.ajax({                       
246                        url: "controller.php?" + $.param( {action: "$this.imap_functions.get_range_msgs3",
247                                folder: folder,
248                                 msg_range_begin: "0",
249                                 msg_range_end: "0",                                   
250                                sort_box_type: "SORTARRIVAL",
251                                search_box_type: search_box_type,
252                                sort_box_reverse: "1"
253                                }),
254                        success: function(data){
255                                data = connector.unserialize(data);
256                                if(data){
257                                        var _data = {};
258                                        $.each(data,function(index,value){
259                                                if (data[index] && data[index].msg_number){
260                                                        _data[data[index].msg_number] = data[index].msg_number;
261                                                }
262                                        });
263                                        populateSelectedMsgs(_data);
264                                        _data = {};
265                               
266                                }
267                        },
268                        beforeSend: function( jqXHR, settings ){
269                                connector.showProgressBar();
270                        },
271                        complete: function( jqXHR, settings ){
272                                connector.hideProgressBar();
273                        }
274                });
275                proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort_box_type,search_box_type,sort_box_reverse,preferences.preview_msg_subject,preferences.preview_msg_tip,handler_draw_box);
276        }
277        else{
278                $(".folders-loading").removeClass("folders-loading");
279                alternate_border(0);
280        }
281}
282
283function open_folder(folder, folder_name){
284        if (current_folder!= folder) {
285                current_folder = folder;
286                var handler_draw_box = function(data){
287                        if(!verify_session(data))
288                                return false;
289                        numBox++;
290                        create_border(folder_name,numBox.toString());
291                        draw_box(data, current_folder, false);
292                        alternate_border(numBox);
293                        return true;
294                }
295                cExecute ("$this.imap_functions.get_range_msgs2&folder="+current_folder+"&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type="+sort_box_type+ "&search_box_type="+ search_box_type +"&sort_box_reverse="+sort_box_reverse+"", handler_draw_box);
296        }
297        else
298                alternate_border(numBox);
299        return true;
300}
301
302var lastPage = 1;
303var numPages = 5;
304var last_folder = 'INBOX';
305function draw_paging(num_msgs){
306        num_msgs = parseInt(num_msgs);
307        total_pages = 1;
308
309        if(last_folder != current_folder){
310                lastPage = 1;
311                current_page = 1;
312                last_folder = current_folder;
313        }
314
315        if(num_msgs > parseInt(preferences.max_email_per_page)) {
316                total_pages = parseInt(num_msgs/preferences.max_email_per_page);
317                if((num_msgs/preferences.max_email_per_page) > total_pages)
318                        total_pages++;
319        }
320
321        if(total_pages == 1) {
322                if(span_paging = document.getElementById("span_paging")) {
323                        span_paging.parentNode.removeChild(span_paging);
324                }
325                return;
326        }
327        span_paging = document.getElementById("span_paging");
328        if(!span_paging){
329                span_paging = document.createElement("DIV");
330                span_paging.id = "span_paging";
331                span_paging.className = "boxHeaderText";
332                span_paging.align="right";
333                document.getElementById("div_menu_c3").appendChild(span_paging);
334        }
335        span_paging.style.width="100%";
336        span_paging.innerHTML="";
337        msg_range_begin = 1;
338        msg_range_end = preferences.max_email_per_page;
339        if(current_page != 1) {
340                lnk_page = document.createElement("A");
341                //lnk_page.setAttribute("href", "javascript:current_page=1;kill_current_box(); draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+","+preferences.preview_msg_subject+","+preferences.preview_msg_tip+",function handler(data){alternate_border(0); draw_box(data, get_current_folder());});");
342                lnk_page.setAttribute("href", "javascript:current_page=1; draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+","+preferences.preview_msg_subject+","+preferences.preview_msg_tip+",function handler(data){alternate_border(0); draw_box(data, get_current_folder());});");
343        }
344        else {
345                lnk_page = document.createElement("SPAN");
346        }
347        span_paging.appendChild(lnk_page);
348
349        lnk_page.innerHTML = "&lt;&lt;";
350        lnk_page.title = get_lang("First");
351        span_paging.innerHTML += "&nbsp;";
352
353        if(current_page == lastPage + numPages)
354                lastPage = current_page - 1;
355        else if((lastPage != 1 && lastPage == current_page) || current_page == total_pages)
356                lastPage = current_page - (numPages - 1);
357        else if(current_page == 1)
358                lastPage = 1;
359
360        if(lastPage < 1)
361                lastPage = 1;
362        else if(lastPage > 1 && (lastPage > (total_pages -(numPages - 1))))
363                lastPage = total_pages -(numPages - 1);
364
365        var     hasMarked = false;
366
367        for(i = lastPage; i <= total_pages; i++) {
368
369                if(current_page == i || (i == total_pages && !hasMarked)) {
370                        lnk_page = document.createElement("SPAN");                     
371                        span_paging.appendChild(lnk_page);
372                        lnk_page.style.color = "red";                   
373                        lnk_page.innerHTML = "&nbsp;<b>"+i+"</b>&nbsp;";
374                        hasMarked = true;
375                        continue;
376                }
377                else{
378                        lnk_page = document.createElement("A");
379                        span_paging.appendChild(lnk_page);
380                        msg_range_begin = ((i*preferences.max_email_per_page)-(preferences.max_email_per_page-1));
381                        msg_range_end = (i*preferences.max_email_per_page);
382                        //lnk_page.setAttribute("href", "javascript:current_page="+i+";kill_current_box(); draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+","+preferences.preview_msg_subject+","+preferences.preview_msg_tip+",function handler(data){alternate_border(0); draw_box(data, get_current_folder());});");
383                        lnk_page.setAttribute("href", "javascript:current_page="+i+"; draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+","+preferences.preview_msg_subject+","+preferences.preview_msg_tip+",function handler(data){alternate_border(0); draw_box(data, get_current_folder());});");
384                }
385                lnk_page.innerHTML = "&nbsp;...&nbsp;";
386                if(i == (lastPage + numPages))
387                                break;
388                else if(lastPage == 1 || i != lastPage)
389                        lnk_page.innerHTML = "&nbsp;"+i+"&nbsp;";
390                span_paging.innerHTML += "&nbsp;";
391        }
392
393        if(current_page != total_pages) {
394                lnk_page = document.createElement("A");
395                msg_range_begin = ((total_pages*preferences.max_email_per_page)-(preferences.max_email_per_page-1));
396                msg_range_end = (total_pages*preferences.max_email_per_page);
397                //lnk_page.setAttribute("href", "javascript:current_page="+total_pages+";kill_current_box(); draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+","+preferences.preview_msg_subject+","+preferences.preview_msg_tip+",function handler(data){alternate_border(0); draw_box(data, get_current_folder());});");
398                lnk_page.setAttribute("href", "javascript:current_page="+total_pages+"; draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+","+preferences.preview_msg_subject+","+preferences.preview_msg_tip+",function handler(data){alternate_border(0); draw_box(data, get_current_folder());});");
399        }
400        else {
401                lnk_page = document.createElement("SPAN");
402        }
403        span_paging.innerHTML += "&nbsp;";
404        span_paging.appendChild(lnk_page);
405
406        lnk_page.title = get_lang("Last");
407        lnk_page.innerHTML = "&gt;&gt;";
408}
409
410// stores the percentages of the cells
411//var colSizes = [ ["24","24","12","12","12","16","16","20%","58%","11%","11%"], ["16","16","12","12","12","20%","20%","*","10%","10%"] ];
412//var colSizes = [ ["2%","2%","1%","1%","1%","1%","2%","2%","20%","46%","11%","11%"], ["16","16","12","12","12","20%","20%","*","10%","10%"] ];
413var colSizes = [ ["3%","2%","1%","1%","1%","1%","2%","2%","2%","20%","45%","11%","11%"], ["2%","1%","1%","1%","1%","1%","1%","20%","20%","33%","10%","9%"] ];
414// stores the alignments of the cells
415var colAligns = [ ['','','','','','','','left','left','center','center'], ['','','','','','left','left','left','center','center'] ];
416var objCell = null;
417var adjCell = null;
418var cellClick = null;
419var cellResized = false;
420var maxWidth=0;
421var minWidth=0;
422var bodyWidth=0;
423var cssForResizing=false;
424
425function changeCursorState(ev) {
426        if (cellResized)
427                cellResized = false;
428        var el = ev.target||ev.srcElement;
429        if (el.tagName != "TD")
430                el=getFirstParentOfType(el, "TD")
431        el.style.cursor ="hand";
432        el.style.cursor ="pointer";
433        if (!cssForResizing)
434                return;
435        var cellMouseX = (ev.clientX-parseInt(getColumnPosition(el, ev)));
436        var cellWidth = el.offsetWidth;
437        var tbl = getFirstParentOfType(el,"TABLE");
438        if (tbl.emptyBody)
439                return;
440        if ((((cellWidth-cellMouseX)<15)||((el.style.cursor=="col-resize")&&(detectLeftButton())))&&((el.className=="th_resizable")&&(el.cellIndex+1<el.parentNode.cells.length))){
441                if (tbl) tbl.style.cursor = "col-resize";
442                el.style.cursor ="col-resize";
443        }
444        else{
445                if (tbl) tbl.style.cursor = "pointer";
446                el.style.cursor ="hand";
447                el.style.cursor ="pointer";
448        }
449}
450
451function getStyle(el,styleProp) {
452        var x = document.getElementById(el);
453        if (x.currentStyle)
454                var y = x.currentStyle[styleProp];
455        else if (window.getComputedStyle)
456                var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
457        return y;
458}
459
460function resizeColumn(ev) {
461        if (!objCell || !adjCell) {
462                stopColResize(ev);
463                return;
464        }
465        if (document.getElementById("table_message_header_box_"+numBox).emptyBody)
466                return;
467        if (objCell.style.cursor == "col-resize" && detectLeftButton(ev)) {
468                var cellIndex = objCell.cellIndex;
469                var adjIndex = adjCell.cellIndex;
470                var cellOffset = parseInt(getColumnPosition(objCell, ev));
471                var cellWidth = (ev.clientX-cellOffset);
472
473                var tbl = getMessagesTable(objCell);
474                var trM = tbl.rows;
475                var tblType = ( (tbl.id=="table_box") ? 0 : 1);
476
477                if (cellWidth < minWidth)
478                        cellWidth = minWidth;
479                var adjWidth = maxWidth - cellWidth;
480                if (adjWidth < minWidth) {
481                        cellWidth = (cellWidth+adjWidth)-minWidth;
482                        adjWidth = minWidth;
483                }
484
485                colSizes[tblType][adjIndex] = (colSizes[tblType][adjIndex]=="*" ? "*" : getPct(is_ie ? adjWidth : adjWidth-2));
486                colSizes[tblType][cellIndex] = (colSizes[tblType][cellIndex]=="*" ? "*" : getPct(cellWidth));
487
488                document.getElementById("table_message_ruler").style.left = cellOffset+cellWidth;
489        }
490        ev.returnValue = false;
491        return (false);
492}
493
494function getPct(tdWidth) {
495        var suf = tdWidth.toString().substr(tdWidth.length-1,1);
496        if ( suf != "%" && suf != "*")
497                return (Math.round((tdWidth/bodyWidth)*10000)/100).toString()+"%";
498        else
499                return tdWidth;
500}
501
502function detectLeftButton(ev) {
503    ev = ev || window.event;
504    var button = ev.which || ev.button;
505    return (button == 1);
506}
507
508function startColResize(ev) {
509        var el = ev.target||ev.srcElement;
510        if (el.tagName != "TD")
511                el=getFirstParentOfType(el, "TD")
512        if (is_ie)
513                ev.cancelBubble = true;
514        else
515                ev.stopPropagation();
516        if (!el) return;
517        if (!is_ie) ev.preventDefault();
518        if (document.getElementById("table_message_header_box_"+numBox).emptyBody)
519                return;
520        if (el.style.cursor == "col-resize" && detectLeftButton(ev)) {
521                var incIndex = ( (el.parentNode.cells.length > el.cellIndex + 1) ? 1 : -1 );
522                var msgTable = getMessagesTable(el);
523                var bodyRows = msgTable.rows;
524                objCell = el;
525                adjCell = el.parentNode.cells[el.cellIndex+incIndex];
526                var tbl = getFirstParentOfType(el, "TABLE");
527                if (is_ie) {
528                        tbl.detachEvent("onmousemove",changeCursorState);
529                        document.attachEvent("onmousemove",resizeColumn);
530                        document.attachEvent("onmouseup",stopColResize);
531                        document.attachEvent("onselect",selectCancel);
532                        tbl.attachEvent("onselectstart",selectCancel);
533                }
534                else {
535                        tbl.removeEventListener("mousemove",changeCursorState,false);
536                        document.addEventListener("mousemove",resizeColumn,false);
537                        document.addEventListener("mouseup",stopColResize,false);
538                        document.addEventListener("select",selectCancel,false);
539                        tbl.addEventListener("selectstart",selectCancel,false);
540                }
541                cellClick = objCell.onclick;
542                objCell.onclick = "";
543                maxWidth = objCell.offsetWidth+adjCell.offsetWidth;
544                        bodyWidth = msgTable.offsetWidth;
545                minWidth = Math.round(bodyWidth/80);
546                document.getElementById("table_message_ruler").style.display = "block";
547                document.getElementById("table_message_ruler").style.left = ev.clientX;
548                if (document.getElementById("content_id_"+numBox)==null)
549                        document.getElementById("table_message_ruler").style.height = document.getElementById("content_id_"+currentTab).offsetHeight;
550                else
551                        document.getElementById("table_message_ruler").style.height = document.getElementById("content_id_"+numBox).offsetHeight;
552        }
553}
554
555function stopColResize(ev) {
556        if (!objCell)
557                return;
558        if (is_ie)
559                ev.cancelBubble = true;
560        else
561                ev.stopPropagation();
562        var tbl = getFirstParentOfType(objCell, "TABLE");
563        if (is_ie) {
564                tbl.detachEvent("onselectstart",selectCancel);
565                document.detachEvent("onselect",selectCancel);
566                document.detachEvent("onmousemove",resizeColumn);
567                document.detachEvent("onmouseup",stopColResize);
568                tbl.attachEvent("onmousemove",changeCursorState);
569        }
570        else {
571                tbl.removeEventListener("selectstart",selectCancel,false);
572                document.removeEventListener("select",selectCancel,false);
573                document.removeEventListener("mousemove",resizeColumn,false);
574                document.removeEventListener("mouseup",stopColResize,false);
575                tbl.addEventListener("mousemove",changeCursorState,false);
576        }
577        var trM = getMessagesTable(objCell).rows;
578        var adjIndex = adjCell.cellIndex;
579        document.getElementById("table_message_ruler").style.display = "none";
580        maxWidth = 0;
581        objCell.onclick = cellClick;
582        objCell = null;
583        adjCell = null;
584        cellResized = true;
585        setColSizesCookie();
586        syncColumns();
587}
588
589function getMessagesTable(el) {
590        var hT;
591        if (el.tagName == "TABLE")
592                hT = el;
593        else
594                hT = getFirstParentOfType(el,"TABLE");
595        return (hT.parentNode.nextSibling.childNodes[0].className !== "local-messages-search-warning"?
596                hT.parentNode.nextSibling.childNodes[0] : hT.parentNode.nextSibling.childNodes[1]);
597}
598
599function getColumnPosition(oNode, pNode){
600        if (!pNode && !is_webkit){
601                var pos = getOffset(oNode);
602                return [pos.left, pos.top];
603        }
604        pNode = pNode||document.body;
605
606        var oCurrentNode = oNode;
607        var iLeft = 0;
608        var iTop = 0;
609
610        while ((oCurrentNode)&&(oCurrentNode != pNode)){
611                iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;
612                iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;
613                oCurrentNode=oCurrentNode.offsetParent;
614        }
615
616        return [iLeft, iTop];
617}
618
619function getFirstParentOfType(obj, tag){
620        while (obj&&obj.tagName != tag&&obj.tagName != "BODY"){
621                obj=obj.parentNode;
622        }
623        return obj;
624}
625
626function syncColumns() {
627        var thisCell;
628        var tbl = (document.getElementById("ptabs_"+numBox)==null ? 1 : 0);
629        if (objCell)
630                thisCell = objCell;
631        else
632                thisCell = document.getElementById("table_message_header_box_"+numBox).rows[0].cells[0];
633        var emptyBody = document.getElementById("table_message_header_box_"+numBox).emptyBody;
634        var tbH = getFirstParentOfType(thisCell,"TABLE");
635        var tbM = getMessagesTable(thisCell);
636        var trM = tbM.rows;
637        var _mouse_over;
638        var _mouse_out;
639        var _cell;
640        for (var r=0;r<trM.length;r++) {
641                for (var c=0;c<trM[r].cells.length;c++) {
642                        _cell = trM[r].cells[c];
643                        _cell.setAttribute("width",colSizes[tbl][c]);
644                        if (is_mozilla && !is_webkit) {
645                                if (!emptyBody) {
646                                        document.getElementById("colgroup_main_"+numBox).childNodes[c].setAttribute("width",colSizes[tbl][c]);
647                                }
648                                document.getElementById("colgroup_head_"+numBox).childNodes[c].setAttribute("width",colSizes[tbl][c]);
649                                if (tbH.rows[0].cells[c].className=="th_resizable") {
650                                        // lots of stupid fixes for FF to redraw cell content
651                                        if (_cell.childNodes && _cell.childNodes.length>1) {
652                                                _mouse_over = _cell.childNodes[1].onmouseover;
653                                                _mouse_out = _cell.childNodes[1].onmouseout;
654                                        }
655                                        _cell.innerHTML = trM[r].cells[c].innerHTML;
656                                        if (_cell.childNodes && _cell.childNodes.length>1) {
657                                                _cell.childNodes[1].onmouseover = _mouse_over;
658                                                _cell.childNodes[1].onmouseout = _mouse_out;
659                                        }
660                                        tbH.rows[0].cells[c].innerHTML = tbH.rows[0].cells[c].innerHTML;
661                                }
662                        }
663                        else {
664                                tbH.rows[0].cells[c].setAttribute("width",_cell.offsetWidth);
665                        }
666                }
667        }
668         
669         //bug do firefox ao redefinir os tamanhos das colunas
670        if (is_mozilla && !is_webkit){ 
671            if(trM[r])
672            for (var c=0;c<trM[r].cells.length;c++)
673                document.getElementById("colgroup_main_"+numBox).childNodes[c].setAttribute("width",colSizes[tbl][c]);
674
675        }
676        if (is_webkit || is_ie){
677                        var arrHeader = $('.message_header td');
678                        var arrBody = $('#tbody_box :first td');
679                        for(i=0;i<arrHeader.length;i++){
680                                        if(arrBody[i] !== undefined && arrBody[i].width !== undefined)
681                                        arrHeader[i].width = arrBody[i].width;
682                        }                       
683        }
684}
685
686function selectCancel(ev) {
687        return (false);
688}
689
690function buildColGroup(tbl) {
691        var col_element;
692        var colgr_element = document.createElement("COLGROUP");
693        if (tbl==null) tbl = 0;
694        for (i=0;i<colSizes[tbl].length;i++) {
695                col_element = document.createElement("COL");
696                col_element.setAttribute("align", colAligns[tbl][i]);
697                colgr_element.appendChild(col_element);
698        }
699        return (colgr_element);
700}
701
702function createTDElement(table_list,col_index,class_name,td_align,td_id) {
703        var td_element = document.createElement("TD");
704        td_element.setAttribute("width",colSizes[table_list][col_index]);
705        if (class_name) td_element.className = class_name;
706        if (td_align) td_element.align = td_align;
707        if (td_id) td_element.id = td_id;
708        return (td_element);
709}
710
711function prepareColSizesArray() {
712        var colSizesCookie = getColSizesCookie();
713        if (colSizesCookie) {
714                try {
715                        var colSizesA = colSizesCookie.split(":");
716                        colSizes = [colSizesA[0].split(","),colSizesA[1].split(",")];
717                }
718                catch(e) {}
719        }
720}
721
722function setColSizesCookie() {
723        var str = "maillist_colsizes=" + colSizes[0].join() + ":" + colSizes[1].join();
724        var date = new Date();
725        date.setTime(date.getTime()+(365*24*60*60*1000));
726        str += ("; expires="+date.toGMTString());
727        document.cookie = str;
728}
729
730function getColSizesCookie() {
731        var search = "maillist_colsizes=";
732        if (document.cookie.length > 0) {
733                var offset = document.cookie.indexOf(search);
734                if (offset != -1) {
735                        offset += search.length;
736                        var end = document.cookie.indexOf(";", offset);
737                        if (end == -1)
738                                end = document.cookie.length;
739                        return document.cookie.substring(offset, end);
740                }
741        }
742        return null;
743}
744
745
746/*Cria a div que permite a seleᅵᅵo de todas as mensagens*/
747function drawSelectMsgsTable(){
748        var div = $('<div>');   
749        div.attr('class','select-all-messages');
750        $('#content_id_0').first().prepend(div);
751        div.css('display','none');
752}
753
754function totalSelected(){
755        var total = 0;
756        for(var obj in selectedPagingMsgs)
757                if (selectedPagingMsgs[obj] == true)
758                        total++;
759        return total;
760};
761
762/*Atualiza o array de mensagens selecionadas*/
763function updateSelectedMsgs(selected,msg_number){       
764        var folder = $('#content_folders .folder.selected').attr('title');
765        folder = folder ? folder : get_lang('INBOX');
766        folder = folder.length > 70 ? '"'+folder.substr(0,70) + "..." +'"': '"'+folder+'"' ;
767        var div = $('.select-all-messages');
768        var filterFlag = search_box_type != "ALL" ? '"' + get_lang(search_box_type) + "s" + '"': "";
769        /*Seleciona as mensagens ao navegar pelas pï¿œginas*/
770        if (allMsgsSelected && msg_number == undefined){
771                $('.checkbox').each(function(){
772                        $(this).attr('checked', true);
773                        $(this).parent().parent().addClass('selected_msg');
774                });
775        }
776        else if (msg_number == undefined){     
777                for(var obj in selectedPagingMsgs){
778                        if (selectedPagingMsgs[obj] == true){
779                                $('#check_box_message_'+obj).attr('checked', true);
780                                $('#check_box_message_'+obj).parent().parent().addClass('selected_msg');
781                        }
782                }
783        }
784        if (selected && msg_number != undefined){
785                selectedPagingMsgs[msg_number] = true;
786                $(this).parent().parent().addClass('selected_msg');             
787        }
788        else if(!selected && msg_number != undefined){
789                selectedPagingMsgs[msg_number] = false;
790                $(this).parent().parent().removeClass('selected_msg');
791                allMsgsSelected = false;
792                $('#chk_box_select_all_messages').attr('checked',false);
793        }
794        var tSelected = totalSelected();
795        /*Todas as mensagens selecionadas uma a uma*/
796        if (tSelected > 0 && tSelected == totalFolderMsgs){
797                allMsgsSelected = true;
798                $('#chk_box_select_all_messages').attr('checked',true);
799                if (total_pages > 1){
800                        var link = "<a class='select-link' href='#'>Limpar seleᅵᅵo?</a>";
801                        var info = "Todas as <b>"+totalFolderMsgs+"</b> mensagens "+filterFlag+" em "+folder+" foram selecionadas. "+link;
802                        div.html("<span>"+info+"<span>");
803                        div.show();
804                        $('.select-link').bind('click',function(){selectAllFolderMsgs();$('.select-link').unbind('click');});
805                }
806        }
807        /*Se foram selecionadas algumas mensagens*/
808        else if (tSelected > 0 && !allMsgsSelected && total_pages > 1){
809                $('#chk_box_select_all_messages').attr('checked',false);
810                var link = "<a class='select-link' href='#'>Limpar seleᅵᅵo?</a>";
811                if (tSelected == 1){
812                        var info = "Foi selecionada <b>"+tSelected+"</b> mensagem "+filterFlag+" em "+folder+". "+link;
813                }
814                else{
815                        var info = "Foram selecionadas <b>"+tSelected+"</b> mensagens "+filterFlag+" em "+folder+". "+link;
816                }
817                div.html("<span>"+info+"<span>");
818                div.show();
819                $('.select-link').bind('click',function(){
820            selectAllFolderMsgs();
821            $('.select-link').unbind('click');
822        });             
823        }
824        else if (allMsgsSelected && total_pages > 1){
825                var link = "<a class='select-link' href='#'>Limpar seleᅵᅵo?</a>";
826                var info = "Todas as <b>"+totalFolderMsgs+"</b> mensagens "+filterFlag+" em "+folder+" foram selecionadas. "+link;
827                div.html("<span>"+info+"<span>");
828                div.show();
829                $('.select-link').bind('click',function(){
830            selectAllFolderMsgs();
831            $('.select-link').unbind('click');
832        });
833        }
834        else{
835                div.hide();
836        }
837    resizeWindow();
838}
839
840/*Seleciona ou desseleciona todas as mensagens da pasta*/
841function selectAllFolderMsgs(select){
842        var folder = $('#content_folders .folder.selected').attr('title');
843        folder = folder ? folder : get_lang('INBOX');
844        folder = folder.length > 70 ? '"'+folder.substr(0,70) + "..." +'"': '"'+folder+'"' ;
845        var filterFlag = search_box_type != "ALL" ? get_lang(search_box_type) + "s": "";
846        var div = $('.select-all-messages');
847        if (select){
848                allMsgsSelected = true;
849                var link = "<a class='select-link' href='#'>Limpar seleᅵᅵo?</a>";
850                var info = "Todas as <b>"+totalFolderMsgs+"</b> mensagens "+filterFlag+" em "+folder+" foram selecionadas. "+link;
851                div.html("<span>"+info+"<span>");
852                div.show();
853                $('.select-link').bind('click',function(){
854            selectAllFolderMsgs();
855            $('.select-link').unbind('click');
856        });
857                for(var obj in selectedPagingMsgs){
858                        selectedPagingMsgs[obj] = true;
859                }
860       
861        }else{
862                allMsgsSelected = false;
863                for(var obj in selectedPagingMsgs){
864            $("#content_id_0").find('input[type="checkbox"]').removeAttr("checked");
865                        selectedPagingMsgs[obj] = false;
866                        $('#check_box_message_'+obj).parent().parent().removeClass('selected_msg selected_shortcut_msg');               
867                }
868                div.hide();
869        }
870    resizeWindow();
871}
872
873/*Carrega o array de mensagens da pasta*/
874function populateSelectedMsgs(data){
875        this.selectedPagingMsgs = {};
876        this.totalFolderMsgs = 0;
877        var total = 0;
878        $.each(data, function(index, value){
879                if(value != undefined){
880                        selectedPagingMsgs[value] = false;
881                        total++;
882                }
883        });
884        delete selectedPagingMsgs[undefined];
885        allMsgsSelected = false;
886        this.totalFolderMsgs = total;
887}
888
889// Draw the inbox and another folders
890function draw_box(headers_msgs, msg_folder, alternate){
891        /*
892         * When the paging response is not in the correct folder you need to change folder
893         * This occurs when the Ajax response is not fast enough and the user click in outher
894         * folder before finishing the Ajax request
895         */
896        if (msg_folder != headers_msgs['folder']) {
897
898                if (headers_msgs['folder']) {
899                        array_folder = headers_msgs['folder'].split('/');
900
901                        if (array_folder.length > 1) {
902                                name_folder = array_folder[1];
903                        }
904                        else {
905                                name_folder = headers_msgs['folder'];
906                        }
907                        current_folder = headers_msgs['folder'];
908                        Element("border_id_0").innerHTML = "&nbsp;" + lang_folder(name_folder) + '&nbsp;<font face="Verdana" size="1" color="#505050">[<span id="new_m">&nbsp;</span> / <span id="tot_m"></span>]</font>';
909
910                        Element('new_m').innerHTML = headers_msgs['tot_unseen'] ? '<font color="RED">'+headers_msgs['tot_unseen']+'</font>' : 0;
911                        Element("tot_m").innerHTML = headers_msgs['num_msgs'];
912
913                        tree_folders.getNodeById(headers_msgs['folder'])._select();
914                }
915        }
916        /**
917         * Preenche a estrutura de cache de mensagens para posterior consulta de
918         * informaᅵᅵes sobre as mensagens no escopo global.
919         */
920        for (var i=0; i<headers_msgs.length; i++) {
921                if (!onceOpenedHeadersMessages[current_folder])
922                        onceOpenedHeadersMessages[current_folder] = {};
923                onceOpenedHeadersMessages[current_folder][headers_msgs[i].msg_number] = headers_msgs[i];
924        }
925
926        if (alternate)
927                kill_current_box();
928
929        //if(is_ie)
930        //              document.getElementById("border_table").width = "99.5%";
931
932        numBox = 0; //As pastas sempre estarï¿œo na aba 0
933       
934        openTab.content_id[numBox] = document.getElementById("ptabs_"+numBox);
935        //openTab.content_id[numBox].innerHTML = "";
936        openTab.imapBox[numBox] = msg_folder;
937        openTab.type[numBox] = 0;
938
939        table_message_header_box = document.getElementById("table_message_header_box_"+numBox);
940        if (table_message_header_box == null) {
941                var table_element = document.createElement("TABLE");
942                var colgr_element = buildColGroup();
943                colgr_element.setAttribute("id","colgroup_head_"+numBox);
944                var tbody_element = document.createElement("TBODY");
945                //add events for column resizing
946                if (is_ie) {
947                        table_element.attachEvent("onmousemove",changeCursorState);
948                        table_element.attachEvent("onmousedown",startColResize);
949                }
950                else {
951                        table_element.addEventListener("mousemove",changeCursorState,false);
952                        table_element.addEventListener("mousedown",startColResize,false);
953                }
954                table_element.setAttribute("id", "table_message_header_box_"+numBox);
955                table_element.className = "table_message_header_box";
956                if (!is_ie)
957                        table_element.style.width = "98.8%";
958                //if table is empty
959                table_element.emptyBody = false;
960
961                tr_element = document.createElement("TR");
962                tr_element.className = "message_header";
963
964                td_element1 = createTDElement(0,0);
965                chk_box_element = document.createElement("INPUT");
966                chk_box_element.id  = "chk_box_select_all_messages";
967                chk_box_element.setAttribute("type", "checkbox");
968                chk_box_element.className = "checkbox";
969                chk_box_element.onclick = function(){select_all_messages(this.checked);};
970                chk_box_element.onmouseover = function () {this.title=get_lang('Select all messages from this page.'); };
971                chk_box_element.onkeydown = function (e){
972                        if (is_ie)
973                        {
974                                if ((window.event.keyCode) == 46)
975                                        proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
976                        }
977                        else
978                        {
979                                if ((e.keyCode) == 46)
980                                        proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
981                        }
982                };
983
984                td_element1.appendChild(chk_box_element);
985
986                td_element2 = createTDElement(0,1);
987                td_element3 = createTDElement(0,8,"th_resizable","left","message_header_SORTFROM_"+numBox);
988                td_element3.onclick = function () {sort_box(search_box_type,'SORTFROM');};
989                td_element3.innerHTML = get_lang("From");
990
991                td_element4 = createTDElement(0,9,"th_resizable","left","message_header_SORTSUBJECT_"+numBox);
992                td_element4.onclick = function () {sort_box(search_box_type,'SORTSUBJECT');};
993                td_element4.innerHTML = get_lang("Subject");
994
995                td_element5 = createTDElement(0,10,"th_resizable","center","message_header_SORTARRIVAL_"+numBox);
996                td_element5.onclick = function () {sort_box(search_box_type,'SORTARRIVAL');};
997                td_element5.innerHTML = get_lang("Date");
998
999                td_element6 = createTDElement(0,11,"th_resizable","center","message_header_SORTSIZE_"+numBox);
1000                td_element6.onclick = function () {sort_box(search_box_type,'SORTSIZE');}
1001                td_element6.innerHTML = get_lang("Size");
1002
1003                tr_element.appendChild(td_element1);
1004                tr_element.appendChild(td_element2);
1005
1006                var td_element21 = createTDElement(0,2);
1007                td_element21.innerHTML = "&nbsp;";
1008
1009                var td_element22 = createTDElement(0,3);
1010                td_element22.innerHTML = "&nbsp;";
1011
1012                var td_element23 = createTDElement(0,4);
1013                td_element23.innerHTML = "&nbsp;";
1014
1015                var td_element24 = createTDElement(0,5);
1016                td_element24.innerHTML = "&nbsp;";
1017                       
1018               
1019                var td_element25 = createTDElement(0,7);
1020                td_element25.innerHTML = "&nbsp;";
1021               
1022                var td_element27 = createTDElement(0,8);
1023                td_element25.innerHTML = "&nbsp;";
1024               
1025                var td_element26 = createTDElement(0,6);
1026                td_element26.innerHTML = "&nbsp;";
1027               
1028
1029                tr_element.appendChild(td_element21);
1030                tr_element.appendChild(td_element22);
1031                tr_element.appendChild(td_element23);
1032                tr_element.appendChild(td_element24);
1033                tr_element.appendChild(td_element26);
1034                tr_element.appendChild(td_element27);
1035                tr_element.appendChild(td_element25);
1036               
1037                tr_element.appendChild(td_element3);
1038                tr_element.appendChild(td_element4);
1039                tr_element.appendChild(td_element5);
1040                tr_element.appendChild(td_element6);
1041
1042                tbody_element.appendChild(tr_element);
1043                table_element.appendChild(tbody_element);
1044                table_element.appendChild(colgr_element);
1045
1046                var _divScroll = document.getElementById("divScrollHead_"+numBox);
1047
1048                if(!_divScroll){
1049                        _divScroll = document.createElement("DIV");
1050                        _divScroll.id = "divScrollHead_"+numBox;
1051                }
1052
1053                _divScroll.style.overflowY = "hidden";
1054                _divScroll.style.overflowX = "hidden";
1055                _divScroll.style.width  ="100%";
1056
1057                if (is_mozilla){
1058                        _divScroll.style.width  ="99.3%";
1059                }
1060
1061                _divScroll.appendChild(table_element);
1062                openTab.content_id[numBox].appendChild(_divScroll);
1063
1064                var table_layout = (getStyle("table_message_header_box_"+numBox,"table-layout") || getStyle("table_message_header_box_"+numBox,"tableLayout"));
1065                cssForResizing = (table_layout=="fixed");
1066                if (cssForResizing)
1067                        prepareColSizesArray();
1068        }
1069        draw_header_box();
1070        var table_element = document.createElement("TABLE");
1071        var colgr_element = buildColGroup();
1072        colgr_element.setAttribute("id","colgroup_main_"+numBox);
1073
1074        var tbody_element = document.createElement("TBODY");
1075        table_element.id = "table_box";
1076        table_element.className = "table_box";
1077        table_element.borderColorDark = "#bbbbbb";
1078        table_element.frame = "void";
1079        table_element.rules = "rows";
1080        table_element.cellPadding = "0";
1081        table_element.cellSpacing = "0";
1082
1083        table_element.onkeydown = function (e){
1084                if (is_ie)
1085                {
1086                        if ((window.event.keyCode) == 46)
1087                        {
1088                                //delete_all_selected_msgs_imap();
1089                                proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
1090                        }
1091                }
1092                else
1093                {
1094                        if ((e.keyCode) == 46)
1095                        {
1096                                //delete_all_selected_msgs_imap();
1097                                proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
1098                        }
1099                }
1100        };
1101        if (is_ie)
1102                table_element.style.cursor = "hand";
1103
1104        tbody_element.setAttribute("id", "tbody_box");
1105        table_element.appendChild(tbody_element);
1106        table_element.appendChild(colgr_element);
1107
1108        var _divScroll = document.getElementById("divScrollMain_"+numBox);
1109
1110        if(!_divScroll){
1111                _divScroll = document.createElement("DIV");
1112                _divScroll.id = "divScrollMain_"+numBox;
1113        }
1114
1115        _divScroll.style.overflowY = "auto";
1116        _divScroll.style.overflowX = "hidden";
1117        _divScroll.style.width  ="100%";
1118
1119        if (is_mozilla){
1120                _divScroll.style.overflow = "-moz-scrollbars-vertical";
1121                _divScroll.style.width  ="100%";
1122        }
1123        _divScroll.appendChild(table_element);
1124        openTab.content_id[numBox].appendChild(_divScroll);
1125       
1126        var f_unseen = 0;
1127
1128        document.getElementById("table_message_header_box_"+numBox).emptyBody = false;
1129       
1130        if (headers_msgs.num_msgs == 0)
1131                showEmptyBoxMsg(tbody_element);
1132
1133        for (var i=0; i < headers_msgs.length; i++){
1134                        if ((headers_msgs[i].Unseen == 'U') || (headers_msgs[i].Recent == 'N'))
1135                                f_unseen++;
1136                        tr_element = make_tr_message(headers_msgs[i], msg_folder, headers_msgs.offsetToGMT);
1137                        if (tr_element){
1138                                tbody_element.appendChild(tr_element);
1139                                add_className(tr_element, i%2 != 0 ? 'tr_msg_read2' : 'tr_msg_read');
1140                        }
1141                        //_dragArea.makeDragged(tr_element, headers_msgs[i].msg_number, headers_msgs[i].subject, true);
1142                        $(tr_element).draggable({
1143                                start : function(){
1144                                        if($(".shared-folders").length){
1145                                                $(".shared-folders").parent().find('.folder:not(".shared-folders")').droppable({
1146                                                        over : function(a, b){                                         
1147                                                                //SETA BORDA EM VOLTA DA PASTA
1148                                                                over = $(this);
1149                                                                $(this).addClass("folder-over");
1150                                                                if(($(this)[0] != $(this).parent().find(".head_folder")[0]))
1151                                                                        if($(this).prev()[0])
1152                                                                                if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){
1153                                                                                        setTimeout(function(){
1154                                                                                                if(over.hasClass("folder-over"))
1155                                                                                                        over.prev().trigger("click");
1156                                                                                        }, 500);
1157                                                                                       
1158                                                                                }
1159                                                        },
1160                                                        out : function(){
1161                                                                //RETIRA BORDA EM VOLTA DA PASTA
1162                                                                $(this).removeClass("folder-over");
1163                                                        },
1164                                                        //accept: ".draggin_mail",
1165                                                        drop : function(event, ui){
1166                                                                $(this).css("border", "");
1167                                                                if($(this).parent().attr('id') == undefined){
1168                                                                        var folder_to = 'INBOX';
1169                                                                        var to_folder_title = get_lang("Inbox");
1170                                                                }else{
1171                                                                        var folder_to = $(this).parent().attr('id');
1172                                                                        var to_folder_title = $(this).attr('title');
1173                                                                }               
1174                                                                var folder_to_move = ui.draggable.parent().attr('id');
1175                                                                var border_id = ui.draggable.find("input[type=hidden]").attr("name");
1176                                                                // Mensagens : SE O DROP VIER DA LISTA DE MENSAGENS :
1177                                                                if(folder_to_move == "tbody_box"){
1178                                                                        move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true);
1179                                                                        return refresh();
1180                                                                }
1181                                                        }
1182                                                });
1183                                        }
1184                                },
1185                                stop :function(){
1186                                        $(".shared-folders").parent().find(".folder").droppable("destroy");
1187                                },
1188                                //helper: 'clone',
1189                                helper: function(event){
1190                                        $(this).addClass("selected_msg").find("input:checkbox").attr("checked", true);
1191                                        updateSelectedMsgs($(this).find("input:checkbox").is(':checked'),$(this).attr("id"));
1192                                        if ( $("#tbody_box .selected_shortcut_msg").length > 1) {
1193                                                $("#tbody_box .selected_shortcut_msg").addClass("selected_msg").find('.checkbox').attr('checked',true);
1194                                                $.each( $(".selected_shortcut_msg"), function(index, value){
1195                                        updateSelectedMsgs($(value).find(":checkbox").is(':checked'),$(value).attr("id"));
1196                                        });
1197                                        }
1198                                       
1199                                        if(totalSelected() > 1 )
1200                                                return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (totalSelected()+" mensagens selecionadas"), type: "messages"})+"</td></tr>");                             
1201                                        if(     $(this).find(".td_msg_subject").text().length > 18 )
1202                                                return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : $(this).find(".td_msg_subject").text().substring(0,18) + "...", type: "messages"})+"</td></tr>");
1203                                        else
1204                                                return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : $(this).find(".td_msg_subject").text(), type: "messages"})+"</td></tr>");
1205                                },
1206                                iframeFix: true,
1207                                delay: 150,
1208                                cursorAt: {top: 5, left: 56},
1209                                refreshPositions: true,
1210                                containment: "#divAppbox"
1211                        }).bind('contextmenu',function(event){
1212                                if (!(($(event.target).find('img').length > 0) && ($(event.target).hasClass('td-label')))){
1213                                        if($(this).find("input:checkbox").attr("checked") != "checked"){
1214                                                $(this).find("input:checkbox").trigger('click');
1215                                                $(this).addClass("selected_msg");
1216                                        }
1217                                        updateSelectedMsgs($(this).find("input:checkbox").is(':checked'),$(this).attr("id"));
1218                                }
1219                        });
1220        }
1221
1222        if ((preferences.use_shortcuts == '1') && (headers_msgs[0]))
1223                select_msg(headers_msgs[0].msg_number, 'null', true);
1224               
1225       
1226        var tdFolders  =  Element("folderscol");
1227        tdFolders.style.display = preferences.hide_folders == '1'  ? "none" : "";
1228        if ( !currentTab )
1229        //      alternate_border(numBox);
1230        draw_footer_box(headers_msgs.num_msgs);
1231        Element('main_table').style.display = '';
1232        if(is_ie6)        // Stupid Fixing on IE6.
1233                setTimeout("resizeWindow()",1);
1234        else
1235                //resizeWindow();
1236        if(debug) {
1237                var _eTime = new Date();
1238                _eTime = _eTime.getTime();
1239                alert("Carregou em "+(_eTime - _bTime)+" ms");
1240        }
1241       
1242        var msg_folder = Element('msg_folder').value;
1243        var msg_number = Element('msg_number').value;
1244        if(!msg_folder && msg_number) {
1245                new_message('new','null');
1246        }
1247        else if(msg_folder && msg_number){
1248                $.ajax({
1249                          url: 'controller.php?' + $.param( {action: '$this.imap_functions.get_info_msg',
1250                                                              msg_number: msg_number,
1251                                                              msg_folder: msg_folder,
1252                                                              decoded: true } ),
1253                          success: function( data ){
1254                              data = connector.unserialize( data );
1255                             
1256                              if( data )
1257                                  show_msg( data );
1258                          },
1259                          beforeSend: function( jqXHR, settings ){
1260                                connector.showProgressBar();
1261                          },
1262                          complete: function( jqXHR, settings ){
1263                                connector.hideProgressBar();
1264                          }
1265
1266                });
1267                Element('msg_folder').value = '';
1268                Element('msg_number').value = '';
1269        }
1270        connector.loadScript("InfoContact");
1271        // Loading Quota View Folder Component (if exists...)
1272        if(Element("table_quota"))
1273                connector.loadScript("InfoQuota");
1274       
1275        // creates the dotted ruler which helps user to visualize resizing of columns
1276        var ruler_element = document.getElementById("table_message_ruler");
1277        if (ruler_element == null) {
1278                ruler_element = document.createElement("DIV");
1279                ruler_element.setAttribute("id", "table_message_ruler");
1280                ruler_element.className = "table_message_ruler";
1281                ruler_element.style.top = getColumnPosition(document.getElementById("content_id_0"),"BODY")[1];
1282                document.getElementById("exmail_main_body").appendChild(ruler_element);
1283    }
1284                drawSelectMsgsTable();
1285                updateSelectedMsgs();
1286        resizeWindow();
1287}
1288
1289function showEmptyBoxMsg(tbody_element) {
1290        document.getElementById("table_message_header_box_"+numBox).emptyBody = true;
1291        var div_pasta = document.getElementById("div_msg_info");
1292        if (!div_pasta){
1293            div_info = document.createElement("div");
1294            div_info.setAttribute("id", "div_msg_info");
1295            div_info.setAttribute("background", "#FFF");
1296            h3_info = document.createElement("h3");
1297            h3_info.style.padding = "10px";
1298            h3_info.setAttribute("id", "msg_info");
1299            h3_info.align = "center";
1300            h3_info.innerHTML = get_lang("This mail box is empty");
1301            div_info.appendChild(h3_info);
1302            tbody_element.parentNode.parentNode.appendChild(div_info);
1303        }
1304}
1305
1306function html_entities(string) {
1307                return String(string).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
1308}
1309
1310// Passar o parᅵmetro offset para esta funᅵᅵo
1311function make_tr_message(headers_msgs, msg_folder, offsetToGMT){
1312                headers_msgs.subject = html_entities(headers_msgs.subject);
1313                if (typeof offsetToGMT == 'undefined')
1314                {
1315                        // In older local messages headers_msgs.offsetToGMT is undefined.
1316                        offsetToGMT = typeof headers_msgs.offsetToGMT != 'undefined'?headers_msgs.offsetToGMT:0;
1317                }
1318                var tr_element = document.createElement('tr');
1319                if(typeof(preferences.line_height) != 'undefined')
1320                        tr_element.style.height = preferences.line_height;
1321                tr_element.id = headers_msgs.msg_number;
1322
1323                tr_element.msg_sample = "";
1324                //if(headers_msgs.msg_sample && headers_msgs.msg_sample.preview_msg_subject != "")
1325                if(headers_msgs.msg_sample && preferences.preview_msg_subject == "1" && headers_msgs.msg_sample.body !== "")
1326                {
1327                        if (cssForResizing) //Colunas redimensionaveis - nao trunca
1328                                tr_element.msg_sample = Base64.decode(headers_msgs.msg_sample.body).substr(0,180) + "..."; //trecho do body que sera exibido com o assunto;
1329                        else
1330                                tr_element.msg_sample = Base64.decode(headers_msgs.msg_sample.body).substr(0,120) + "..."; //trecho do body que sera exibido com o assunto;
1331                }
1332
1333                tr_element.tip = "";
1334                if(headers_msgs.msg_sample && preferences.preview_msg_tip == "1" && headers_msgs.msg_sample.body !== "")
1335                {
1336                        tr_element.tip = Base64.decode(headers_msgs.msg_sample.body).substr(3,300) + "..."; //trecho do body que sera exibido no tool-tip;
1337                }
1338
1339                if ((headers_msgs.Unseen == 'U') || (headers_msgs.Recent == 'N')){
1340                        if ((headers_msgs.Flagged == 'F') || headers_msgs.Importance.toLowerCase().indexOf("high")!=-1 )
1341                                add_className(tr_element, 'flagged_msg');
1342                        add_className(tr_element, 'tr_msg_unread');
1343                }
1344                else{
1345                        if ((headers_msgs.Flagged == 'F') || ( headers_msgs.Importance !== undefined && headers_msgs.Importance.toLowerCase().indexOf("high")!=-1 ) )
1346                                add_className(tr_element,'flagged_msg');
1347                }
1348
1349                if ((headers_msgs.Unseen == 'U') || (headers_msgs.Recent == 'N'))
1350                        add_className(tr_element, 'tr_msg_unread');
1351
1352                if (headers_msgs.Flagged == 'F')
1353                        add_className(tr_element,'flagged_msg');
1354
1355                td_element1 = createTDElement(0,0,"td_msg");
1356                chk_box_element = document.createElement("INPUT");
1357                chk_box_element.setAttribute("type", "checkbox");
1358                chk_box_element.className = "checkbox";
1359                chk_box_element.setAttribute("id", "check_box_message_"+headers_msgs.msg_number);
1360               
1361                $(chk_box_element).click(function(e){
1362                        updateSelectedMsgs($(this).is(':checked'),headers_msgs.msg_number);
1363                        $(".selected_shortcut_msg").removeClass("current_selected_shortcut_msg selected_shortcut_msg");
1364                        $(".current_selected_shortcut_msg").removeClass("current_selected_shortcut_msg selected_shortcut_msg");
1365                        if(preferences.use_shortcuts == '1')
1366                                $(this).parents("tr:first").addClass("current_selected_shortcut_msg selected_shortcut_msg");
1367                        //changeBgColor(e,headers_msgs.msg_number);
1368            $(this).parents("tr:first").toggleClass("selected_msg");
1369                        $(this).blur();
1370                });
1371
1372                td_element1.appendChild(chk_box_element);
1373
1374                td_element2 = createTDElement(0,1,"td_msg");
1375                if (headers_msgs.attachment == 1)
1376                        td_element2.innerHTML = "<img src ='templates/"+template+"/images/clip.gif' >";
1377
1378                td_element21 = createTDElement(0,2,"td_msg",null,"td_message_answered_"+headers_msgs.msg_number);
1379
1380                if ((headers_msgs.Forwarded == 'F')  || (headers_msgs.Draft == 'X' && headers_msgs.Answered == 'A')){
1381                        td_element21.onclick=function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);};
1382                        td_element21.innerHTML = "<img src ='templates/"+template+"/images/forwarded.png' title='"+get_lang('Forwarded')+"'>";
1383                        headers_msgs.Draft = ''
1384                        headers_msgs.Answered = '';
1385                        headers_msgs.Forwarded = 'F';
1386                }
1387                else if (headers_msgs.Draft == 'X')
1388                        td_element21.innerHTML = "<img src ='templates/"+template+"/images/draft.png' title='"+get_lang('Draft')+"'>";
1389                else if (headers_msgs.Answered == 'A'){
1390                        td_element21.onclick=function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);};
1391                        td_element21.innerHTML = "<img src ='templates/"+template+"/images/answered.png' title='"+get_lang('Answered')+"'>";
1392                    }else
1393                        td_element21.innerHTML = "&nbsp;&nbsp;&nbsp;";
1394
1395                td_element22 = createTDElement(0,1,"td_msg",null,"td_message_signed_"+headers_msgs.msg_number);
1396                switch(headers_msgs.ContentType)
1397                {
1398                        case "signature":
1399                        {
1400                                td_element22.innerHTML = "<img src ='templates/"+template+"/images/signed_msg.gif' title='" + get_lang('Signed message') + "'>";
1401                                break;
1402                        }
1403                        case "cipher":
1404                        {
1405                                td_element22.innerHTML = "<img src ='templates/"+template+"/images/lock.gif' title='" + get_lang('Crypted message') + "'>";
1406                                break;
1407                        }
1408                        default:
1409                        {
1410                                break;
1411                        }
1412                }
1413
1414                td_element23 = createTDElement(0,4,"td_msg",null,"td_message_important_"+headers_msgs.msg_number);
1415
1416                if ( (headers_msgs.Flagged == 'F') || ( headers_msgs.Importance !== undefined && headers_msgs.Importance.toLowerCase().indexOf("high") != -1 ))
1417                {
1418                        td_element23.innerHTML = "<img src ='templates/"+template+"/images/important.png' title='"+get_lang('Important')+"'>";
1419                }
1420                else
1421                        td_element23.innerHTML = "&nbsp;&nbsp;&nbsp;";
1422
1423                td_element24 = createTDElement(0,5,"td_msg",null,"td_message_sent_"+headers_msgs.msg_number);
1424                td_element24.innerHTML = "&nbsp;&nbsp;&nbsp;";
1425                // preload image
1426                var _img_sent = new Image();
1427                _img_sent.src    = "templates/"+template+"/images/sent.gif";
1428
1429
1430
1431                td_element25 = createTDElement(0,7,"td_msg",null,"td_message_unseen_"+headers_msgs.msg_number);
1432                if ((headers_msgs.Unseen == 'U') || (headers_msgs.Recent == 'N'))
1433                        td_element25.innerHTML = "<img src ='templates/"+template+"/images/unseen.gif' title='"+get_lang('Unseen')+"'>";
1434                else
1435                        td_element25.innerHTML = "<img src ='templates/"+template+"/images/seen.gif' title='"+get_lang('Seen')+"'>";
1436
1437
1438                td_element3 = createTDElement(0,8,"td_msg td_resizable","left","td_from_"+ headers_msgs.msg_number);
1439                var _onclick = function(){InfoContact.hide();proxy_mensagens.get_msg(headers_msgs.msg_number, msg_folder,true, show_msg);};
1440                td_element3.onclick = _onclick;
1441                td_element3.innerHTML = '&nbsp;';
1442
1443                test = true;
1444                if(msg_folder.indexOf(special_folders['Sent']) !=-1 ||msg_folder.indexOf(preferences.save_in_folder) !=-1 || msg_folder.replace("local_","INBOX"+cyrus_delimiter).indexOf(preferences.save_in_folder) !=-1)
1445                    test = false;
1446               
1447                if( (msg_folder.indexOf(special_folders['Sent']) !=-1) && (headers_msgs.from != undefined) && headers_msgs.from.email.toLowerCase() == Element("user_email").value.toLowerCase() && (preferences.from_to_sent == "1") && !(msg_folder.substr(0,5) == "user/"))
1448                {
1449                        td_element3.onmouseover = function () {
1450                                        var title_to = '';
1451                                        $.each(headers_msgs.to, function(index, value) {
1452                                                        if(index == (headers_msgs.to.length - 1)){
1453                                                                        title_to = title_to + value.email;
1454                                                        }
1455                                                        else {
1456                                                                        title_to = title_to + value.email + ', ';
1457                                                        }
1458                                        });
1459                                        this.title = title_to;
1460                        };
1461                       
1462                        if (headers_msgs.Draft == 'X')
1463                                td_element3.innerHTML += "<span style=\"color:red\">("+get_lang("Draft")+") </span>";
1464                        else{
1465                                if(headers_msgs.to[0].email != null && headers_msgs.to[0].email.toLowerCase() != Element("user_email").value)
1466                                        td_element24.innerHTML = "<img align='center' src ='templates/"+template+"/images/sent.gif' title='"+get_lang('Sent')+"'>";
1467
1468                                if (headers_msgs.to) {
1469                                        if (headers_msgs.to[0].name != null)
1470                                                        td_element3.innerHTML += headers_msgs.to[0].name;
1471                                        else if(headers_msgs.to[0].email != null) {
1472                                                        td_element3.innerHTML += headers_msgs.to[0].email;
1473                                        }
1474                                        else {
1475                                                td_element3.innerHTML += get_lang("without destination");
1476                                        }
1477                                }
1478                        }
1479                }
1480                else{
1481                        if (headers_msgs.Draft == 'X'){
1482                                td_element3.innerHTML = "<span style=\"color:red\">("+get_lang("Draft")+") </span>";
1483                        }
1484                        else{
1485                                var spanSender = document.createElement("SPAN");
1486                                spanSender.setAttribute('class','span-sender');
1487                                spanSender.onmouseover = function (event) {/*this.style.textDecoration = "underline";*/try {InfoContact.begin(this,headers_msgs.reply_toaddress)} catch(e){};};
1488                                spanSender.onmouseout = function (){try {/*this.style.textDecoration = "none";*/clearTimeout(InfoContact.timeout);} catch(e){}};
1489                                folder = special_folders['Sent'];
1490                                current = get_current_folder();
1491                                if ((preferences.from_to_sent == "1") && (current.substr(current.length - folder.length, folder.length) == folder)){
1492                                        spanSender.onmouseover = function () {
1493                                                var title_to = '';
1494                                                $.each(headers_msgs.to, function(index, value) {
1495                                                                if(index == (headers_msgs.to.length - 1)){
1496                                                                                title_to = title_to + value.email;
1497                                                                }
1498                                                                else {
1499                                                                                title_to = title_to + value.email + ', ';
1500                                                                }
1501                                                });
1502                                                this.title = title_to;
1503                                        };
1504                                        if (headers_msgs.to) {
1505                                                if (headers_msgs.to[0].name != null){
1506                                                        spanSender.innerHTML += headers_msgs.to[0].name;
1507                                                }else if(headers_msgs.to[0].email != null) {
1508                                                        spanSender.innerHTML += headers_msgs.to[0].email;
1509                                                }
1510                                        }
1511                                }else if(headers_msgs.from !== undefined){
1512                                spanSender.innerHTML =  headers_msgs.from.name != null ? headers_msgs.from.name : headers_msgs.from.email;
1513                                }
1514                                if (spanSender.innerHTML.indexOf(" ") == '-1' && spanSender.innerHTML.length > 25){
1515                                        spanSender.innerHTML = spanSender.innerHTML.substring(0,25) + "...";
1516                                }
1517                                else if (spanSender.innerHTML.length > 40 ){
1518                                        spanSender.innerHTML = spanSender.innerHTML.substring(0,40) + "...";
1519                                }
1520                                td_element3.appendChild(spanSender);
1521                        }
1522                }
1523
1524                td_element4 = createTDElement(0,9,"td_msg td_resizable","left");
1525                td_element4.className += " td_msg_subject";
1526                td_element4.onclick = _onclick;
1527                td_element4.innerHTML = !is_ie ? "<a nowrap id='a_message_"+tr_element.id+"'>&nbsp;" : "&nbsp;";
1528
1529                if ((headers_msgs.subject)&&(headers_msgs.subject.length > 50))
1530                {
1531                        if (cssForResizing)
1532                                //Colunas redimensionaveis - nao trunca
1533                                td_element4.innerHTML += headers_msgs.subject + "<span style=\"color:#b3b3b3;\">  " + tr_element.msg_sample +"</span>";
1534                        else {
1535                                //Modificacao para evitar que o truncamento do assunto quebre uma NCR - #1189
1536                                pos = headers_msgs.subject.indexOf("&",45);
1537                                if ((pos > 0) && (pos <= 50) && ((headers_msgs.subject.charAt(pos+5) == ";") || (headers_msgs.subject.charAt(pos+6) == ";")))
1538                                        td_element4.innerHTML += headers_msgs.subject.substring(0,pos+6) + "..." + "<span style=\"color:#b3b3b3;\">  " + tr_element.msg_sample +"</span>";
1539                                else
1540                                        td_element4.innerHTML += headers_msgs.subject.substring(0,50) + "..." + "<span style=\"color:#b3b3b3;\">  " + tr_element.msg_sample +"</span>";//modificacao feita para exibir o trecho do body ao lado do assunto da mensagem;
1541                        }
1542                }
1543                else
1544                {
1545                        td_element4.innerHTML += headers_msgs.subject + "<span style=\"color:#b3b3b3;\">  " + tr_element.msg_sample + "</span>";//modificacao feita para exibir o trecho do body ao lado do assunto da mensagem;
1546                }
1547
1548                td_element4.title=tr_element.tip;
1549                if(!is_ie){
1550                        td_element4.innerHTML += "</a>";
1551                }
1552               
1553                td_element5 = createTDElement(0,10,"td_msg td_resizable","center");
1554                td_element5.onclick = _onclick;
1555               
1556                td_element27 = createTDElement(0,7,"td_msg",null,"td_message_labels_"+headers_msgs.msg_number);
1557                $(td_element27).addClass("td-label");
1558
1559                if (headers_msgs.labels) {
1560                        td_element27.innerHTML = '<img src="../prototype/modules/mail/img/tag.png">';
1561                        updateLabelsColumn(headers_msgs);               
1562                }
1563               
1564                td_element26 = createTDElement(0,6,"td_msg","center","td_message_followup_"+headers_msgs.msg_number);
1565                $(td_element26).addClass("td-followup-flag");
1566                td_element26.innerHTML = '<div class="flag-edited" style="width:8px;height:6px;"><img src="../prototype/modules/mail/img/flagEditor.png"></div>';
1567       
1568                if (headers_msgs.followupflagged) {
1569                        if(headers_msgs.followupflagged.followupflag.id < 7){
1570                                var nameFollowupflag = get_lang(headers_msgs.followupflagged.followupflag.name);
1571                        }else{
1572                                var nameFollowupflag = headers_msgs.followupflagged.followupflag.name;
1573                        }
1574                        $(td_element26).attr('title', nameFollowupflag)
1575                        .find(".flag-edited").css("background",headers_msgs.followupflagged.backgroundColor);
1576                        if(headers_msgs.followupflagged.isDone == "1"){
1577                                $(td_element26).find(".flag-edited").find("img")
1578                                .attr("src", "../prototype/modules/mail/img/flagChecked.png")
1579                                .css("margin-left","-3px");
1580                        }
1581                } else {
1582                        $(td_element26).find(".flag-edited").css("background","#cccccc");
1583                }
1584               
1585                /**
1586                 * Clique para aplicar sinalizador
1587                 */
1588                $(td_element26).click(function() {     
1589                        var messageClickedId = $(this).attr('id').match(/td_message_followup_([\d]+)/)[1];
1590                       
1591                        var followupColor = $('#td_message_followup_' + messageClickedId).find(".flag-edited").css('backgroundColor');
1592                       
1593                        $('#td_message_followup_' + messageClickedId + ', ' +
1594                        'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited")
1595                        .html('<img alt="Carregando" title="Carregando" style="margin-left:-3px; margin-top:-4px; width:13px; height:13px;" src="../prototype/modules/mail/img/ajax-loader.gif" />');
1596                       
1597                        $('#td_message_followup_' + messageClickedId + ', ' +
1598                        'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "transparent");
1599                       
1600
1601                        /**
1602                                * Hack:
1603                                * headers_msgs.followupflagged.id nï¿œo vai funcionar porque jï¿œ foi feito DataLayer.commit()
1604                                * por isso o id deve ser obtido do banco
1605                                * tambï¿œm para verificar se hï¿œ ou nï¿œo sinalizador nesta mensagem
1606                        */
1607
1608                        DataLayer.remove('followupflagged', false);
1609                        var flagged = DataLayer.get('followupflagged', {filter: [
1610                                'AND',
1611                                ['=', 'messageNumber', messageClickedId],
1612                                ['=', 'folderName', msg_folder]
1613                        ]});
1614                       
1615                        if (!flagged) {
1616                                /**
1617                                 * Aplica followupflag de Acompanhamento
1618                                 */
1619                                headers_msgs.followupflagged = {
1620                                        uid : User.me.id,
1621                                        folderName : msg_folder,
1622                                        messageNumber : messageClickedId,
1623                                        alarmTime : false,
1624                                        backgroundColor : '#FF2016',
1625                                        followupflagId: '1'
1626                                };
1627                                headers_msgs.followupflagged.id = DataLayer.put('followupflagged', headers_msgs.followupflagged);
1628                                DataLayer.commit(false, false, function(data){
1629                                        var fail = 'success';
1630                                        $.each(data, function(index, value) {
1631                                                if(typeof value === 'string'){
1632                                                        fail = value;
1633                                                }
1634                                        });
1635                               
1636                                        $('#td_message_followup_' + messageClickedId + ', ' +
1637                                        'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited")
1638                                        .html('<img src="../prototype/modules/mail/img/flagEditor.png">');
1639                                       
1640                                       
1641                                        if(fail != 'success'){
1642                                            $('#td_message_followup_' + messageClickedId + ', ' +
1643                                            'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC");
1644                                            MsgsCallbackFollowupflag[fail]();
1645                                        }else{
1646                                            $('#td_message_followup_' + messageClickedId + ', ' +
1647                                            'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", headers_msgs.followupflagged.backgroundColor);
1648                                            updateCacheFollowupflag(messageClickedId, msg_folder, true);
1649                                        }                               
1650                                });
1651                               
1652                       
1653                        } else if (onceOpenedHeadersMessages[msg_folder][messageClickedId]['followupflagged'].followupflag.name == 'Follow up') {
1654                                /**
1655                                 * Remove followupflag de Acompanhamento
1656                                 */
1657                                 $(this).find(".flag-edited").css("background", "#cccccc");
1658                                DataLayer.remove('followupflagged', flagged[0].id );
1659                                DataLayer.commit(false, false, function(){
1660                                        updateCacheFollowupflag(messageClickedId, msg_folder, false);
1661                                        $('#td_message_followup_' + messageClickedId + ', ' +
1662                                        'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited")
1663                                        .html('<img src="../prototype/modules/mail/img/flagEditor.png">');
1664                                       
1665                                        $('#td_message_followup_' + messageClickedId + ', ' +
1666                                          'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).attr('title', '').find(".flag-edited").css("background", '#CCC');
1667                               
1668                                        $('#td_message_followup_' + messageClickedId + ', ' +
1669                                                'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited")
1670                                                .find("img").attr("src", "../prototype/modules/mail/img/flagEditor.png").css("margin-left","0");
1671                                });     
1672
1673                        } else {
1674                                $('#td_message_followup_' + messageClickedId + ', ' +
1675                                'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited")
1676                                .html('<img src="../prototype/modules/mail/img/flagEditor.png">');
1677                                $('#td_message_followup_' + messageClickedId + ', ' +
1678                                'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", followupColor);
1679                                $(tr_element).addClass('selected_msg').find(':checkbox').trigger('click');
1680                                configureFollowupflag();
1681                        }
1682                       
1683                       
1684                });     
1685               
1686                var norm = function (arg) {return (arg < 10 ? '0'+arg : arg);};
1687                var weekDays = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
1688
1689                var today = new Date();
1690                today.setHours(23);
1691                today.setMinutes(59);
1692                today.setSeconds(59);
1693                today.setMilliseconds(999)
1694
1695                var udate_local = null;
1696                var date_msg = null;
1697
1698                // old local messages can capture headers_msgs.udate as "hh:mm" or "dd/mm/yyyy"
1699                if ( (headers_msgs.udate !== undefined) && (headers_msgs.udate.toString().match(/\d{2}:\d{2}/) || headers_msgs.udate.toString().match(/\d{2}\/\d{2}\/\d{4}/)) )
1700                {
1701                    temp_msg_day = headers_msgs.msg_day.split('/');
1702                    temp_msg_hour = headers_msgs.msg_hour.split(':');
1703                    date_msg = new Date(temp_msg_day[2], temp_msg_day[1]-1, temp_msg_day[0], temp_msg_hour[0], temp_msg_hour[1]);
1704                }
1705                else
1706                    {
1707                        // The new date implementation
1708                        // Using offset between user defined timezone and GMT
1709                        // Date object converts time to local timezone, so we have to adjust it
1710                        udate_local = headers_msgs.udate*1000 + offsetToGMT*1000 + today.getTimezoneOffset()*60*1000;
1711                        date_msg = new Date(udate_local);
1712                    }
1713
1714                if (preferences.show_date_numerical == 0 || typeof(preferences.show_date_numerical) == 'undefined') {   
1715                        if (today.getTime() - date_msg.getTime() < 86400000)
1716                                td_element5.innerHTML = norm(date_msg.getHours()) + ':' + norm(date_msg.getMinutes());
1717                        else
1718                                if (today.getTime() - date_msg.getTime() < 172800000)
1719                                        td_element5.innerHTML = get_lang('Yesterday');
1720                                else if (today.getTime() - date_msg.getTime() < 259200000)
1721                                        td_element5.innerHTML = get_lang(weekDays[date_msg.getDay()]);
1722                                else{
1723                                        td_element5.innerHTML = norm(date_msg.getDate()) + '/' + norm(date_msg.getMonth()+1) + '/' +date_msg.getFullYear();                                     
1724                                        td_element5.title = norm(date_msg.getDate()) + '/' + norm(date_msg.getMonth()+1) + '/' +date_msg.getFullYear();
1725                                        td_element5.alt = td_element5.title;
1726                                }
1727                }else{
1728                        td_element5.innerHTML = norm(date_msg.getDate()) + '/' + norm(date_msg.getMonth()+1) + '/' +date_msg.getFullYear();
1729                        td_element5.title = norm(date_msg.getDate()) + '/' + norm(date_msg.getMonth()+1) + '/' +date_msg.getFullYear();
1730                        td_element5.alt = td_element5.title;
1731                }
1732                td_element6 = createTDElement(0,11,"td_msg td_resizable","center");
1733                td_element6.onclick = _onclick;
1734                td_element6.setAttribute("noWrap","true");
1735                td_element6.innerHTML = borkb(headers_msgs.Size);
1736
1737                tr_element.appendChild(td_element1);
1738                tr_element.appendChild(td_element2);
1739                tr_element.appendChild(td_element21);
1740                tr_element.appendChild(td_element22);
1741                tr_element.appendChild(td_element23);
1742                tr_element.appendChild(td_element24);
1743                tr_element.appendChild(td_element26);
1744                tr_element.appendChild(td_element27);
1745                tr_element.appendChild(td_element25);
1746
1747                tr_element.appendChild(td_element3);
1748                tr_element.appendChild(td_element4);
1749                tr_element.appendChild(td_element5);
1750                tr_element.appendChild(td_element6);
1751                return tr_element;
1752}
1753
1754function sort_box(search, sort,clean_selected){
1755        if (typeof(clean_selected) == "undefined")
1756                selectAllFolderMsgs(false);
1757        if (cellResized)
1758                return;
1759        var message_header = Element("message_header_"+search);
1760        var handler_draw_box = function(data){
1761                draw_box(data, current_folder,true);
1762                //Mostrar as msgs nao lidas de acordo com o filtro de relevancia
1763        var msgs_unseen = 0;
1764                draw_paging(data.num_msgs);
1765                Element("new_m").innerHTML = '<font style="color:'+(data.tot_unseen == 0 ? '': 'red')+'">' + data.tot_unseen + '</font>';
1766                Element("tot_m").innerHTML = data.num_msgs;
1767        }
1768
1769        if(sort_box_type == sort && search_box_type == search){
1770                sort_box_reverse = sort_box_reverse ? 0 : 1;
1771        }
1772        else if(sort_box_type != sort){
1773                if ( (sort == 'SORTFROM') || (sort == 'SORTSUBJECT') )
1774                        sort_box_reverse = 0;
1775                else
1776                        sort_box_reverse = 1;
1777        }
1778
1779        // Global variable.
1780        sort_box_type = sort;
1781        search_box_type = search;
1782        if (typeof(clean_selected) == "undefined"){     
1783                $.ajax({                       
1784                        url: "controller.php?" + $.param( {action: "$this.imap_functions.get_range_msgs3",
1785                                folder: get_current_folder(),
1786                                 msg_range_begin: "0",
1787                                 msg_range_end: "0",                                   
1788                                sort_box_type: "SORTARRIVAL",
1789                                search_box_type: search_box_type,
1790                                sort_box_reverse: "1"
1791                                }),
1792                        success: function(data){
1793                                data = connector.unserialize(data);
1794                                if(data){
1795                                        var _data = {};
1796                                        $.each(data,function(index,value){
1797                                                if (data[index] && data[index].msg_number){
1798                                                        _data[data[index].msg_number] = data[index].msg_number;
1799                                                }
1800                                        });
1801                                        populateSelectedMsgs(_data);
1802                                        _data = {};
1803                               
1804                                }
1805                        },
1806                        beforeSend: function( jqXHR, settings ){
1807                                connector.showProgressBar();
1808                        },
1809                        complete: function( jqXHR, settings ){
1810                                connector.hideProgressBar();
1811                        }
1812                });
1813        }       
1814        proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort,search,sort_box_reverse,preferences.preview_msg_subject,preferences.preview_msg_tip,handler_draw_box);
1815        current_page = 1;
1816        //Comentado para nao sobrepor o numero de msgs nao lidas ao utilizar os filtros
1817        //update_menu();
1818}
1819
1820function draw_header_box(){
1821        switch(sort_box_type){
1822                case 'SORTFROM':
1823                        type_name = get_lang("From");
1824                        break;
1825                case 'SORTSUBJECT':
1826                        type_name = get_lang("Subject");
1827                        break;
1828                case 'SORTARRIVAL':
1829                        type_name = get_lang("Date");
1830                        break;
1831                case 'SORTSIZE':
1832                        type_name = get_lang("Size");
1833                        break;
1834                default:
1835                        type_name = get_lang("Date");
1836                        break;
1837        }
1838        folder = special_folders['Sent'];
1839        current = get_current_folder();
1840        if ((preferences.from_to_sent == "1") && (current.substr(current.length - folder.length, folder.length) == folder)) {
1841        document.getElementById("message_header_SORTFROM_"+numBox).innerHTML    = get_lang("To");
1842    }else{
1843        document.getElementById("message_header_SORTFROM_"+numBox).innerHTML    = get_lang("From");
1844    }
1845        document.getElementById("message_header_SORTSUBJECT_"+numBox).innerHTML = get_lang("Subject");
1846        document.getElementById("message_header_SORTARRIVAL_"+numBox).innerHTML = get_lang("Date");
1847        document.getElementById("message_header_SORTSIZE_"+numBox).innerHTML    = get_lang("Size");
1848        document.getElementById("message_header_"+(sort_box_type.lastIndexOf("SORT") != "-1" ? sort_box_type : "SORTARRIVAL")+"_"+numBox ).innerHTML = "<B>"+type_name+"</B><img src ='templates/"+template+"/images/arrow_"+(sort_box_reverse == 1 ? 'desc' : 'asc')+"endant.gif'>";
1849}
1850function verifyOption(name, id){
1851        var str = name + '' + id;
1852        if(!Element(str).style.display == ""){
1853                var option_reply_options = document.getElementById('msg_opt_reply_options_'+id);
1854                option_reply_options.value = 'show';
1855                option_reply_options.src= '../expressoMail1_2/templates/default/images/down.png';
1856                Element('tr_other_options_'+id).style.display = 'none';
1857                var option_more_options = document.getElementById('msg_opt_more_options_'+id);
1858                option_more_options.value = 'show';
1859                option_more_options.src= '../expressoMail1_2/templates/default/images/down.png';
1860                Element('tr_other_more_options_'+id).style.display = 'none';
1861                var option_mark_as_options = document.getElementById('msg_opt_mark_options_'+id);
1862                option_mark_as_options.value = 'show';
1863                option_mark_as_options.src= '../expressoMail1_2/templates/default/images/down.png';
1864                Element('tr_other_mark_options_'+id).style.display = 'none';
1865        }
1866}
1867
1868/*Busca a primeira mensagem na pagina*/
1869function firstRow(){
1870        var thisCell;
1871    if (objCell)
1872        thisCell = objCell;
1873    else
1874            thisCell = document.getElementById("table_message_header_box_0").rows[0].cells[0];
1875    var tbM = getMessagesTable(thisCell);
1876        proxy_mensagens.get_msg(tbM.rows[0].getAttribute('id'),get_current_folder(),true,show_msg);
1877}
1878
1879/*Busca a ultima mensagem na pagina*/
1880function lastRow(){
1881        var thisCell;
1882    if (objCell)
1883        thisCell = objCell;
1884    else
1885            thisCell = document.getElementById("table_message_header_box_0").rows[0].cells[0];
1886    var tbM = getMessagesTable(thisCell);
1887        proxy_mensagens.get_msg(tbM.rows[tbM.rows.length - 1].getAttribute('id'),get_current_folder(),true,show_msg);
1888}
1889
1890var msg_selected;
1891 
1892function changeLinkState(el,state){
1893        el.innerHTML = get_lang(state);
1894        switch (state){
1895                case 'important':
1896                        {
1897                                el.onclick = function(){changeLinkState(el,'normal');proxy_mensagens.proxy_set_message_flag(currentTab.substr(0,currentTab.indexOf("_r")),'flagged');write_msg(get_lang('Message marked as ')+get_lang("Important"))}
1898                                break;
1899                        }
1900                case 'normal':
1901                        {
1902                                el.onclick = function(){
1903                                        var _this = this;
1904                                        proxy_mensagens.proxy_set_message_flag(currentTab.substr(0,currentTab.indexOf("_r")),'unflagged', function(success){
1905                                                if (success) {
1906                                                        changeLinkState(_this, 'important');
1907                                                        write_msg(get_lang('Message marked as ') + get_lang("Normal"));
1908                                                }
1909                                        } );
1910                                }
1911                                break;
1912                        }
1913                case 'unseen':
1914                        {
1915                                el.onclick = function(){changeLinkState(el,'seen');proxy_mensagens.proxy_set_message_flag(currentTab.substr(0,currentTab.indexOf("_r")),'unseen');write_msg(get_lang('Message marked as ')+get_lang("unseen"))}
1916                                break;
1917
1918                        }
1919                case 'seen':
1920                        {
1921                                el.onclick = function(){changeLinkState(el,'unseen');proxy_mensagens.proxy_set_message_flag(currentTab.substr(0,currentTab.indexOf("_r")),'seen');write_msg(get_lang('Message marked as ')+get_lang("seen"))}
1922                                break;
1923
1924                        }
1925                default:
1926                        {
1927                                break;
1928                        }
1929        }
1930}
1931
1932//DESENHO DAS CAIXA DE EMAIL
1933function draw_email_box(input_data, location, personal, shared){
1934        if($.trim(input_data) != ""){
1935                var box_data = valid_emails(input_data);
1936                DataLayer.render("../prototype/modules/mail/templates/emailBox.ejs", box_data, function(html){
1937                        var newBox = location.before(html).prev();
1938                        box_actions(newBox);
1939                        if((preferences.expressoMail_ldap_identifier_recipient || personal)&& $(newBox).hasClass("invalid-email-box")){
1940                                //$(newBox).find(".loading").css("background-image", "../prototype/modules/mail/img/ajax-loader.gif");
1941                                show_detais(newBox, input_data, personal, shared);
1942                        }else{
1943                                $(newBox).find(".box-loading").remove();
1944                        }
1945                });
1946        }
1947}
1948
1949function valid_emails(email){
1950        var ContactBox = {name:"", email:"", valid : false};
1951        var reSimpleEmail = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[_a-z0-9-]+(\.[_a-z0-9-]+)+$/;
1952        var reComplexEmail = /<([^<]*)>[\s]*$/;
1953        var validation = email.split('"');
1954       
1955        //FUNᅵᅵO QUE VALIDA OS DADOS QUANDO O EMAIL ï¿œ DIGITADO COM ("NOME SOBRENOME" <Email@dominio.com>)
1956        var complexValidation = function(complexMail){
1957                var Objct = {};
1958                if($.trim(complexMail[1]).match(reComplexEmail)){
1959                        if($.trim(complexMail[1]).match(reComplexEmail).length){
1960                                Objct['email'] = $.trim(complexMail[1]).match(reComplexEmail)[1];
1961                        }
1962                }else{
1963                        Objct['email'] = $.trim(complexMail[1]);
1964                }
1965                Objct['name'] = complexMail[0];
1966                Objct['valid'] = reSimpleEmail.test(Objct['email'].toLowerCase());
1967                return Objct;
1968        }
1969        switch (validation.length) {
1970                //PEGA TODO O CONTEUDO E SETA COMO SE FOSSE O EMAIL
1971                case 1:
1972                        validation.unshift("");
1973                        ContactBox = complexValidation(validation);
1974                        break;
1975                //CORRIGI ERRO DE DIGITAᅵᅵO COMO ( huahua"<huhau@hauhau.com>) ou (hahahaha"huahua@email.com) ou ainda (hahahaha"huahua@ema  il.com)
1976                case 2:
1977                        ContactBox = complexValidation(validation);
1978                        break;
1979                //RECEBE O EMAIL CORRETAMENTE Sï¿œ VALIDA POSSIVEIS ERROS COMO O DE CIMA E OS CORRIGI CASO ACONTEï¿œAM
1980                case 3:
1981                        //RETIRA O PRIMEIRO INDICE QUE FICOU "INUTIL"
1982                        validation.shift();
1983                        ContactBox = complexValidation(validation);
1984                        break;
1985                //SE EXISTIREM MAIS DO QUE 2 (")
1986                default:
1987                        if($.trim(validation[validation.length-1]).match(reComplexEmail)){
1988                                if($.trim(validation[validation.length-1]).match(reComplexEmail).length){
1989                                        ContactBox.mail = $.trim(validation[validation.length-1]).match(reComplexEmail)[1];
1990                                }
1991                        }else{
1992                                ContactBox.mail = $.trim(complexMail[1]);
1993                        }
1994                        ContactBox.valid = reSimpleEmail.test(ContactBox.mail.toLowerCase());   
1995        }
1996        return ContactBox;
1997}
1998
1999//EVENTO DOS INPUTS PARA - CC - CCO
2000function input_keydowns(input, ID){
2001        var f9 = false;
2002        input.keydown(function(e){
2003                f9 = false;
2004                focusIn = input;
2005                var focusing = input.parent().find(".email-text");
2006                //SE OS CONTATOS DINAMICOS ESTAO ATIVOS
2007                if(parseInt(preferences.use_dynamic_contacts) && !input.hasClass("box-input")){
2008                        //SELECIONA O CONTATO E EVITA OUTROS COMANDOS
2009                        if ( e.keyCode === $.ui.keyCode.TAB && $( this ).data( "catcomplete" ).menu.active ) {
2010                                e.preventDefault();
2011                                return false;
2012                        }               
2013                       
2014                        //FECHA OS CONTATOS DINï¿œMICOS
2015                        if( (e.keyCode == 27) && $( this ).data( "catcomplete" ).menu.active ){
2016                                   e.stopPropagation();
2017                                   e.preventDefault();
2018                        }
2019                       
2020                        //SELECIONA O CONTATO E EVITA OUTROS COMANDOS
2021                        if(e.keyCode == $.ui.keyCode.ENTER && $( this ).data( "catcomplete" ).menu.active){
2022                                e.preventDefault();
2023                                return false;
2024                        }
2025                       
2026                        if(e.keyCode == $.ui.keyCode.DELETE && $( this ).data( "catcomplete" ).menu.active){
2027                                if($($( this ).data( "catcomplete" ).menu.element).find(".ui-state-hover").parents("li:first").hasClass("dynamic-recent"))
2028                                        $($( this ).data( "catcomplete" ).menu.element).find(".ui-state-hover").next().trigger("click");
2029                                return false;
2030                        }
2031                }
2032                //BUSCA COM A TECLA F9
2033                if((e.keyCode) == 120){
2034                        f9 = true;
2035                        emQuickSearch($(this).val(), "."+$(this).parents("tr:first").attr('class').split("-")[0], ID, undefined, true);
2036                        e.preventDefault();
2037                        return false;
2038                }
2039
2040                //AO DIGITAR ENTER, ";", "," "  "
2041                if(e.keyCode == 13 || e.keyCode == 9 || (e.keyCode == 188 && !e.shiftKey) || (e.keyCode == 191 && !e.shiftKey) ){
2042                        if(e.keyCode == 13){
2043                                e.preventDefault();
2044                        }
2045                        if(input.val() != ""){
2046                                if(e.keyCode == 188 && !e.shiftKey && input.val().split("\"").length > 1){
2047                                        return;
2048                                }
2049                                if(e.keyCode != 9)
2050                                        e.preventDefault();
2051                                draw_email_box(input.val(), input);
2052                                if(input.hasClass("box-input")){
2053                                        input.remove();
2054                                        focusing.focus();
2055                                        return;
2056                                }
2057                        }
2058                        if(input.length)
2059                                input.val("");
2060                }
2061                if((e.keyCode == 8 || e.keyCode == 37) && input.val() == "" && input.prev().hasClass("box")){
2062                        e.preventDefault();
2063                        input.prev().focus();
2064                        return;
2065                }
2066                //AO DIGITAR " "
2067                if(e.keyCode == 32){
2068                        if(!input.val().length){
2069                                e.preventDefault();
2070                                return;
2071                        }else{
2072                                var texto = input.val();
2073                                texto = texto.substring(0, getPosition(input[0]));
2074                                if(texto.split('"').length-1 == 0){
2075                                        if(input.val().split('"').length-1 == 0){
2076                                                e.preventDefault();
2077                                                e.stopPropagation();
2078                                                draw_email_box(input.val(), input);
2079                                                input.val("");
2080                                                if(input.hasClass("box-input")){
2081                                                        input.remove();
2082                                                        focusing.focus();
2083                                                        return;
2084                                                }
2085                                                return;
2086                                        }
2087                                }
2088                        }
2089                }
2090                //AO DIGITAR ">"
2091                if(e.keyCode == 190 && e.shiftKey && input.val().length == getPosition(input[0])){
2092                        input.val(input.val()+">");
2093                        draw_email_box(input.val(), input);
2094                        e.preventDefault();
2095                        input.val("");
2096                        if(input.hasClass("box-input")){
2097                                input.remove();
2098                                focusing.focus();
2099                                return;
2100                        }
2101                }
2102                setTimeout(function(){
2103                        if(input.val()[input.val().length-1] == ";"){
2104                                draw_email_box(input.val().substring(0, input.val().length-1), input);
2105                                input.val("");
2106                        }
2107                }, 100);
2108                //INPUT AUTO RESIZE     
2109                setTimeout(function(){
2110                        input_search = $(input).val();
2111                        var char = input.val().charAt(input.val().length-1);
2112                        var maiusculas = RegExp("[A-Z]");
2113                        /*Se o ultimo caracter for ">" ï¿œ porque o campo estï¿œ sendo editado (a partir de duplo clique)*/
2114                        var tamanho = 0;
2115                        if(char == ">"){
2116                                /*Faz um calculo prï¿œvio do tamanho do campo de acordo com o tamanho de cada caracter da string*/
2117                                for(i=0; i<input.val().length; i++){
2118                                        /*Se o caracter for maiï¿œsculo, o valor de pixel ï¿œ maior*/
2119                                        if(maiusculas.test(input.val().substr(i, 1)) == true){
2120                                                tamanho += 9;
2121                                        }
2122                                        else{
2123                                                tamanho += 7.1;
2124                                        }
2125                                }
2126                                input.css("width", tamanho);
2127                        }
2128                        /*Ao inserir novo contato, nï¿œo existe a necessidade de calcular tamanho do campo*/
2129                        else{
2130                                input.css("width", 15+(input.val().length * 9));
2131                        }
2132                        input.parent().scrollTo(":last");       
2133                }, 100);
2134        })
2135        //AO SAIR DO FOCO MONTAGEM DA CAIXA DE EMAIL
2136        .focusout(function(e){
2137                var these = $(this);
2138               
2139                // Funᅵᅵo para monstar a caixinha de e-mail.
2140                function makeBoxMail(){
2141                        if(canMakeBox && !fastSearch){
2142                                if(!(   f9      ||      click   ||      $(this).parents("tr:first").find("button").hasClass("ui-state-active")  )){
2143                                        if($(input).val() != "")
2144                                                draw_email_box(input.val(), input);
2145                                        if(input.hasClass("box-input"))
2146                                                input.remove();
2147                                        $(input).val("");
2148                                        input_search = "";
2149                                }
2150                                f9 = false;
2151                                click = false;
2152                        }
2153                        canMakeBox = true;
2154                        fastSearch = false;
2155                }
2156
2157                setTimeout(makeBoxMail,250);
2158        })
2159        //AO COLAR UM TEXTO NO CAMPO
2160        .bind("paste", function(e){
2161                $(this).trigger("keydown");
2162                var pthis = $(this);
2163                setTimeout(function() {
2164                        if(pthis.val().split('"') > 1)
2165                                var str = pthis.val().replace(/[,;\t]/gi, ",");
2166                        else
2167                                var str = pthis.val().replace(/[,;\t\n\s]/gi, ",");
2168                        str = str.split(",");
2169                        $.each(str, function(index, value){
2170                                draw_email_box(value, pthis);
2171                        });
2172                        pthis.val("");
2173                }, 50);
2174        });
2175        //SE FOR EDIᅵᅵO DE EMAILS RECALCULA O INPUT E SETA O FOCO
2176        if(input.hasClass("box-input")){
2177                input.trigger("keydown");
2178                input.focus();
2179        }
2180}
2181var input_search = "";
2182var click = false;
2183//EVENTOS DA CAIXA
2184function box_actions(box){
2185        //AO PRESSIONAR UMA TECLA COM A CAIXA SELECIONADA       
2186        box.keydown(function(e){
2187                switch (e.keyCode) {
2188                        case $.ui.keyCode.LEFT:
2189                                //VERIFICA SE EXISTE ALGUMA CAIXA A ESQUERDA
2190                                if($(this).prev().hasClass("box"))
2191                                        $(this).removeClass("box-selected").prev().focus();
2192                                break;
2193                        case $.ui.keyCode.RIGHT:
2194                                //VERIFICA SE EXISTE ALGUMA CAIXA A DIREITA
2195                                if($(this).next().hasClass("box"))
2196                                        $(this).removeClass("box-selected").next().focus();
2197                                //SENAO FOCO O INPUT DO EMAIL
2198                                else
2199                                        $(this).removeClass("box-selected").next().focus();
2200                                break;
2201                        case $.ui.keyCode.HOME:
2202                                //SELECIONO A PRIMEIRA CAIXA
2203                                e.preventDefault();
2204                                $(this).parents(".email-area").find("div:first").focus();
2205                                break;
2206                        case $.ui.keyCode.END:
2207                                //SELECIONO A ULTIMA CAIXA
2208                                e.preventDefault();
2209                                $(this).parents(".email-area").find("div:last").focus();
2210                                break;
2211                        case $.ui.keyCode.DELETE:
2212                                //VERIFICA SE EXISTE ALGUMA CAIXA A DIREITA
2213                                if($(this).next().hasClass("box"))
2214                                        $(this).next().focus();
2215                                //SENAO FOCO O INPUT DO EMAIL
2216                                else
2217                                        $(this).next().focus();
2218                                //REMOVO ESTA CAIXA
2219                                $(this).remove();
2220                                break;
2221                        case $.ui.keyCode.BACKSPACE:
2222                                //VERIFICA SE EXISTE ALGUMA CAIXA A ESQUERDA
2223                                if($(this).prev().hasClass("box"))
2224                                        $(this).removeClass("box-selected").prev().focus();
2225                                //SENAO HOUVER VERIFICA SE EXISTE ALGUMA CAIXA A DIREITA
2226                                else if($(this).next().hasClass("box"))
2227                                        $(this).next().focus();
2228                                //SENAO HOUVER NEM A DIREITA NEM A ESQUERDA SETO O FOCO NO INPUT DO EMAIL
2229                                else
2230                                        $(this).next().focus();
2231                                //REMOVO ESTA CAIXA     
2232                                $(this).remove();
2233                                e.preventDefault();
2234                                break;
2235                        case $.ui.keyCode.ENTER:
2236                                e.preventDefault();
2237                                $(this).trigger("dblclick");
2238                                break;
2239                }
2240        })
2241        //AO FAZER UM DUPLO CLICK NA CAIXA
2242        .dblclick(function(e){
2243                var input = $(this).find("input").clone();
2244                input.css("display" , "inline-block");
2245                $(this).before(input);
2246                input_keydowns(input, currentTab);
2247                $(this).remove();
2248        //CLICK SIMPLES NA CAIXA
2249        }).click(function(){
2250                $(this).focus();
2251        //AO DAR O FOCO NA CAIXA
2252        }).focus(function(){
2253                $(this).parent().find("div").removeClass("box-selected");
2254                $(this).addClass("box-selected");
2255        }).focusout(function(){
2256                $(this).removeClass("box-selected");
2257        }).draggable({
2258                revert: 'invalid',
2259                helper : 'clone',
2260                stack: "body",
2261                containment : ".new-msg-head-data",
2262                start: function(e, ui){
2263                        $(this).parent().droppable( "disable" );
2264                },
2265                stop : function(e, ui){
2266                        $(this).parent().droppable( "enable" );
2267                }
2268        });
2269}
2270
2271//MOSTRA OS DETALHES DAS CAIXA DE EMAIL NOS CAMPOS PARA - CC - CCO
2272function show_detais(box, value, personal, shared){
2273        var ldap_id = preferences.expressoMail_ldap_identifier_recipient;
2274        var group = (personal != undefined ? (personal == "G" ? true : false) : false);
2275        shared = shared ? shared : false;
2276        if(group){
2277                REST.get("/"+ (shared ? "shared" : "") +"group/"+value, {}, function(data){
2278                        if(!data.error){
2279                                if(data.collection.error)
2280                                        box.find(".box-loading").remove();
2281                                else{
2282                                        box.find(".box-loading").removeClass("box-loading").addClass("box-info");
2283                                        box.addClass("box-"+value).removeClass("invalid-email-box");
2284                                        loadGroupBox(data.collection, ".box-"+value);
2285                                        box.unbind("dblclick").bind("dblclick", function(e){
2286                                                new $.Zebra_Dialog(get_lang("Impossible editing this contact, but it's possible to remove it"), {
2287                                                        'buttons':  false,
2288                                                        'modal': false,
2289                                                        'position': ['right - 20', 'top + 20'],
2290                                                        'auto_close': 3000
2291                                                });
2292                                        }).find(".box-input").val("\""+data.collection.data[1].value+"\" <"+data.collection.data[1].value+">");
2293                                        box.find(".email-box-value").html( (data.collection.data[1].value.length > 18 ? data.collection.data[1].value.substring(0, 15)+"...": data.collection.data[1].value))
2294                                }
2295                        }else{
2296                                box.find(".box-loading").remove();
2297                        }
2298                });
2299                return;
2300        }
2301       
2302        if(personal){
2303                REST.get("/"+ (shared ? "shared" : "") +"contact/"+value, {}, function(data){
2304                        if(!data.error){
2305                                if(data.collection.error)
2306                                        box.find(".box-loading").remove();
2307                                else{
2308                                        box.find(".box-loading").removeClass("box-loading").addClass("box-info");
2309                                        box.addClass("box-"+value).removeClass("invalid-email-box");
2310                                        loadExtraLDAPBox(data.collection.data, ".box-"+value);
2311                                        box.unbind("dblclick").bind("dblclick", function(e){
2312                                                new $.Zebra_Dialog(get_lang("Impossible editing this contact, but it's possible to remove it"), {
2313                                                        'buttons':  false,
2314                                                        'modal': false,
2315                                                        'position': ['right - 20', 'top + 20'],
2316                                                        'auto_close': 3000
2317                                                });
2318                                        }).find(".box-input").val("\""+data.collection.data[0].value+"\" <"+data.collection.data[1].value+">");
2319                                        box.find(".email-box-value").html( (data.collection.data[0].value.length > 18 ? data.collection.data[0].value.substring(0, 15)+"...": data.collection.data[0].value))
2320                                }
2321                        }else{
2322                                box.find(".box-loading").remove();
2323                        }
2324                });
2325                return;
2326        }
2327       
2328        REST.get("/usersldap", {field : ldap_id,value: value}, function(data){
2329                if(!data.error){
2330                        if(data.collection.error)
2331                                box.find(".box-loading").remove();
2332                        else{
2333                                box.find(".box-loading").removeClass("box-loading").addClass("box-info");
2334                                box.addClass("box-"+value).removeClass("invalid-email-box");
2335                                loadExtraLDAPBox(data.collection.itens[0].data, ".box-"+value);
2336                                box.unbind("dblclick").bind("dblclick", function(e){
2337                                        new $.Zebra_Dialog(get_lang("Impossible editing this contact, but it's possible to remove it"), {
2338                                                'buttons':  false,
2339                                                'modal': false,
2340                                                'position': ['right - 20', 'top + 20'],
2341                                                'auto_close': 3000
2342                                        });
2343                                }).find(".box-input").val("\""+data.collection.itens[0].data[0].value+"\" <"+data.collection.itens[0].data[1].value+">");
2344                                box.find(".email-box-value").html( (data.collection.itens[0].data[0].value.length > 18 ? data.collection.itens[0].data[0].value.substring(0, 15)+"...": data.collection.itens[0].data[0].value))
2345                                if(data.collection.itens[0].data[3].value == "TRUE"){
2346                                        box.removeClass("invalid-email-box").addClass("out-office-box");
2347                                }
2348                        }
2349                }else{
2350                        box.find(".box-loading").remove();
2351                }
2352        });
2353}
2354
2355//FUNᅵᅵO QUE "SETA" OS BINDS DOS CAMPOS PARA - CC - CCO
2356function input_binds(div, ID){
2357
2358        //AO CLICAR NA DIV SETA O FOCO NO INPUT
2359        div.click(function(e){
2360                if(e.target == $(this)[0]){
2361                        $(this).find("input:last").focus();
2362                        $(this).find("div").removeClass("box-selected");
2363                }
2364        })
2365       
2366        //AO SAIR DO FOCO DA DIV ELE RETIRA TODAS AS CLASSES DE CAIXAS SELECIONADAS
2367        .focusout(function(e){
2368                if(!$(e.target).parents(".email-area:first").length)
2369                        $(this).find("div").removeClass("box-selected");
2370        }).droppable({
2371                hoverClass: "box-draggable-hover",
2372                accept : ".box",
2373                drop : function(e, ui){
2374                        ui.draggable.parent().droppable( "enable" );
2375                        var box = ui.draggable.clone();
2376                        box_actions(box);
2377                        if(box.find(".box-info").length){
2378                                box.unbind("dblclick").bind("dblclick", function(e){
2379                                        new $.Zebra_Dialog('<strong>Impossivel editar</strong> um contato do ldap\n' +
2380                                                '<strong>Porï¿œm</strong>ï¿œ possivel remove-lo', {
2381                                                'buttons':  false,
2382                                                'modal': false,
2383                                                'position': ['right - 20', 'top + 20'],
2384                                                'auto_close': 3000
2385                                        });
2386                                });
2387                        }
2388                        $(this).prepend(box);
2389                        ui.draggable.remove();
2390                }
2391        });
2392       
2393        //MAKE KEYDOWN
2394        input_keydowns(div.find("input"), ID);
2395       
2396       
2397        //VERIFICA PREFERENCIA DE CONTATOS DINï¿œMICOS ESTA ATIVA
2398        if(parseInt(preferences.use_dynamic_contacts)){
2399                //PREPARAᅵᅵO DA ARRAY DOS CONTATOS DINï¿œMICOS
2400
2401                $.widget( "custom.catcomplete", $.ui.autocomplete, {
2402                        _renderMenu: function( ul, items ) {
2403                                var self = this,
2404                                currentType = "";
2405                                $.each( items, function( index, item ) {
2406                                        if ( item.typel != currentType) {
2407                                                if(item.typel == "/groups" && $(ul).find(".dynamic-recent").length)
2408                                                        self._renderItem( ul, {name:"", value:"", type:"linha"} );
2409                                                if(item.typel == "/contacts" && ($(ul).find(".dynamic-group").length || $(ul).find(".dynamic-recent").length))
2410                                                        self._renderItem( ul, {name:"", value:"", type:"linha"} );     
2411                                                currentType = item.typel;
2412                                        }
2413                                        self._renderItem( ul, item );
2414                                        $(ul).find("li:last").find(".dynamic-stars").raty({
2415                                                readOnly : true,
2416                                                half : true,
2417                                                hints : ['','','','',''],
2418                                                score    : ((item.number_of_messages*5)/topContact) > 0.5 ? ((item.number_of_messages*5)/topContact) : 0.5,
2419                                                starOn  : '../../prototype/plugins/jq-raty/img/star-on.png',
2420                                                starOff : '../../prototype/plugins/jq-raty/img/star-off.png',
2421                                                starHalf : '../../prototype/plugins/jq-raty/img/star-half.png'
2422                                        });
2423                                });
2424                                if($(ul).find("li:last").hasClass("dynamic-separator")){
2425                                        $(ul).find("li:last").remove();
2426                                }
2427                                $(ul).scroll(function(){
2428                                        canMakeBox = false;
2429                                });
2430                        }
2431                });
2432                //INSERᅵᅵO DO AUTO COMPLETE AO INPUT
2433                div.find("input").catcomplete({
2434                        minLength: 1,                   
2435                        source: function(request, response){
2436                                if ( request.term in cache ) {
2437                                        response( cache[ request.term ] );
2438                                        return;
2439                                }
2440                                dynamicContactsList = new Array();
2441                                REST.get("/usercontacts", false, function(data){
2442                                        dynamicData = data.collection.itens;
2443                                        if(dynamicData){
2444                                                $.each(dynamicData, function(index, value){
2445                                                        dynamic = {};
2446                                                        $.each(value.data, function(index, value){
2447                                                                dynamic[value.name] = value.value;
2448                                                        });
2449                                                        dynamic['value'] = (dynamic.name ? dynamic.name +' - ': '') + dynamic.mail;
2450                                                        dynamic['type'] = value.dataType;
2451                                                        dynamic['typel'] = (value.dataType.substring(0,7) == "/shared" ? "/"+value.dataType.substring(7,value.dataType.length)+"s" : value.dataType) ;
2452                                                        dynamicContactsList.push(dynamic);
2453                                                });
2454                                        }
2455                                        var data = $.ui.autocomplete.filter(dynamicContactsList, request.term );
2456                                        cache[ request.term ] = data;
2457                                        response( data );
2458                                });
2459                        },
2460                        focus: function() {
2461                                return false;
2462                        },
2463                       
2464                        //EVENTO AO SELECIONAR UM CONTATO DINï¿œMICO
2465                        select: function( event, ui ) {
2466                                canMakeBox = false;
2467                                event.preventDefault();
2468                                $(this).val("");
2469                                if(ui.item.typel == "/contacts")
2470                                        draw_email_box(""+ui.item.id, $(this), true, (ui.item.type.substring(0,7) == "/shared" ? true : false));
2471                                else if(ui.item.typel == "/groups")
2472                                        draw_email_box(""+ui.item.id, $(this), "G", (ui.item.type.substring(0,7) == "/shared" ? true : false));
2473                                else
2474                                        draw_email_box(ui.item.name ? "\""+ui.item.name+"\" <"+ui.item.mail+">" : ui.item.mail, $(this));
2475                                return false;
2476                        },
2477                        autoFocus: true,
2478                        position : { my: "left top", at: "left bottom", collision: "fit" }
2479                }).bind('catcompleteopen', function(event, ui) {
2480                        $(this).data('is_open',true);
2481                }).bind('catcompleteclose', function(event, ui) {
2482                        canMakeBox = true;
2483                        $(this).data('is_open',false);
2484                })
2485               
2486                //MONTAGEM DA LISTA DE CONTATOS DINï¿œMICOS DO AUTO COMPLETE
2487                .data( "catcomplete" )._renderItem = function( ul, item ) {
2488                        if($(ul).find("li").length < 50){
2489                                var autocomplete = $(this)[0].element;
2490                                //cï¿œlculo dinï¿œmico da largura da lista
2491                                var width = (item.label ? item.label.length : (item.value ? item.value.length : (item.email ? item.email.length : 20 )));
2492                                width = width*5 + (is_ie ? 170 : 200) + 16;
2493                                if (width < $(ul).width())
2494                                        width = $(ul).width();
2495                                ul.css({"min-width":width,"max-height" : "180px", "overflow-y" : "auto", "min-height": "30px"});
2496                                var listContacts = DataLayer.render("../prototype/modules/mail/templates/listContacts.ejs", item);
2497                                return $(listContacts).data( "item.autocomplete", item ).appendTo( ul ).find("span:last").button({
2498                                                icons : {
2499                                                primary : "ui-icon-close"
2500                                        },
2501                                        text: false
2502                                }).click(function(event){
2503                                        var removeLi = $(this).parents("li:first");
2504                                        if(!event.keyCode)
2505                                                autocomplete.catcomplete( "close" );
2506                                        canMakeBox = false;
2507                                        $.Zebra_Dialog('Deseja remover <b>'+(item.name ? item.name+" - " : "")+ item.mail+'</b>?', {
2508                                                        'type':     'question',
2509                                                        'custom_class': (is_ie ? 'configure-zebra-dialog' : ''),
2510                                                        'title':    'Atenᅵᅵo',
2511                                                        'buttons': ['Sim','Nï¿œo'],             
2512                                                        'overlay_opacity': '0.5',
2513                                                        'onClose':  function(caption) {
2514                                                                if(caption == 'Sim'){
2515                                                                        $(removeLi).remove();
2516                                                                        REST['delete']("/dynamiccontact/"+item.id);
2517                                                                        updateDynamicContact();
2518                                                                        cache = new Array();
2519                                                                }else if(caption == 'Nï¿œo'){
2520                                                                        $(focusIn).focus();
2521                                                                }
2522                                                        }
2523                                        });
2524                                });
2525                        }
2526                        return;
2527                };
2528        }
2529       
2530        //FUNᅵᅵO DOS BOTï¿œES PARA - CC - CCO
2531        div.parents("tr:first").find("button").button().click(function(){
2532                click = true;
2533                fastSearch = true;
2534                canMakeBox = false;
2535                if(!$(":focus").hasClass("new-message-input"))
2536                        emQuickSearch(($(this).parents("tr:first").find("input").val() ? $(this).parents("tr:first").find("input").val() : input_search), "."+$(this).parents("tr:first").attr('class').split("-")[0], ID, undefined, true);
2537        });
2538}
2539               
2540function draw_new_message(border_ID){
2541        connector.loadScript("color_palette");
2542        connector.loadScript('wfolders');
2543        connector.loadScript("ccQuickAdd");
2544       
2545        if(typeof(RichTextEditor) == 'undefined' || typeof(ColorPalette) == 'undefined' || typeof(wfolders) == 'undefined')
2546                return false;
2547
2548        if(typeof($.fn.elastic) == "undefined"){
2549                $.lazy({
2550                        src: '../prototype/plugins/jquery-elastic/jquery.elastic.source.js',
2551                        name: 'elastic'
2552                });     
2553        }
2554        //var ID = create_border("",border_ID);
2555        var ID = countID;
2556
2557        createTab("Nova Mensagem");
2558
2559        if (ID == 0)
2560                return 0;
2561        else if(ID == 'maximo')
2562                return 'maximo';
2563               
2564        hold_session = true;
2565
2566        if ($("#footer_menu").length){
2567                $("#footer_menu").css('display','none');
2568        }
2569        var content = $("#ptabs_"+ID).html(DataLayer.render("../prototype/modules/mail/templates/new_message.ejs", {id: ID}));   
2570        RichTextEditor.loadEditor2(ID);
2571       
2572        //if(!expresso_offline)
2573        //      draw_from_field(sel_from,tr1_1);
2574       
2575        //content.find('name="input_to"').elastic().elastic("destroy");
2576        draw_from_field(content.find(".from-select")[0], content.find(".from-tr")[0]);
2577       
2578        var check_input = function(field){
2579                var check = field.attr("checked");
2580                field.attr("checked", (!check ? true : false));
2581                return (!check ? true : false);
2582        }
2583       
2584        //AᅵᅵO GENERICA PARA ADICIONAR/REMOVER
2585        var change_text = function(field, text, to_text){
2586                var text = (field.html() == text ? to_text : text);
2587                field.html(text);
2588        }
2589       
2590        //AᅵᅵO GENERICA PARA ADICIONAR/REMOVER CC & CCO
2591        var show_hide = function(field, button){
2592                button.toggleClass("expressomail-button-icon-ative");
2593                field.toggle();
2594                field.find("textarea").val("").parent().find("input").focus();
2595                field.find(".email-area div").remove();
2596                if(!field.find("textarea").hasClass("track")){
2597                        field.find("textarea").css({"max-height" : "115px", "overflow-y" : "auto"}).addClass("track"); 
2598                        input_binds(field.find(".email-area"), ID);
2599                }
2600        }
2601       
2602        input_binds(content.find('[name="input_aux_to"]').css("max-width" , parseInt(content.find(".email-area").css("width"))-5).focus().parent().css({"max-height" : "115px", "overflow-y" : "auto"}), ID);   
2603       
2604        //Botï¿œo TextoRico/TextoSimples
2605        content.find(".new-msg-head-right-buttons").find(".button").button().filter(".rich-button").click(function(){
2606                /*Se o texto do botï¿œo for "Texto simples" exibirï¿œ a mensagem antes de alterar para texto simples*/
2607                if($(".rich-button").find("span").text() == get_lang("Simple Text")){
2608                        $.Zebra_Dialog(get_lang("Convert this message into plain text can make parts of it are removed. Continue?"), {
2609                    'type':     'warning',
2610                    'overlay_opacity': '0.5',
2611                    'buttons':  ['OK','Cancelar'],
2612                    'width' : 380,
2613                    'onClose':  function(clicked) {
2614                        if(clicked == 'OK'){
2615                                RichTextEditor.setPlain(check_input(content.find('[name="textplain_rt_checkbox"]')), ID);
2616                                $(".rich-button").find("span").text(get_lang("Rich Text"));
2617                        }
2618                    }
2619                        })
2620                }
2621                /*Se o texto do botï¿œo for "Texto rico" simplesmente altera para texto rico*/
2622                else{
2623                        RichTextEditor.setPlain(check_input(content.find('[name="textplain_rt_checkbox"]')), ID);
2624                        $(".rich-button").find("span").text(get_lang("Simple Text"));
2625                }
2626        })
2627       
2628        //Botï¿œo Adicionar/Remover CCO
2629        .end().filter(".cco-button").click(function(){
2630                show_hide(content.find(".cco-tr"), $(this));
2631        })
2632        //Botï¿œo Adicionar/Remover CC
2633        .end().filter(".cc-button").click(function(){
2634                show_hide(content.find(".cc-tr"), $(this));
2635        })
2636    //Botï¿œo Responder a
2637    .end().filter(".reply-to-button").click(function(){
2638        show_hide(content.find(".reply-to-tr"), $(this));
2639    });
2640
2641        content.find(".field-buttons").buttonset();
2642
2643        //BOTAO ENVIAR
2644        content.find(".send").button({
2645                icons : {
2646                        primary : "ui-icon-mail-closed"
2647                }
2648        }).click(function(){
2649                send_message(ID,preferences.save_in_folder,null);
2650        })
2651        //BOTAO SALVAR E ENVIAR
2652        .end().find(".save-and-send").button({
2653                icons : {
2654                        primary : "expressomail-icon-send"
2655                }
2656        }).click(function(){
2657                wfolders.makeWindow(ID,"send_and_file");
2658        })
2659        //BOTAO SALVAR
2660        .end().find(".save").button({
2661                icons : {
2662                        primary : "ui-icon-disk"
2663                }
2664        }).click(function(){
2665                save_msg(ID);
2666        })
2667        //BOTAO CONF. LEITURA
2668        .end().find(".return-recept").button({
2669                icons : {
2670                        primary : "ui-icon-transfer-e-w"
2671                },
2672                text:false
2673        }).click(function(){
2674                check_input(content.find('[name="input_return_receipt"]'));
2675                $(this).toggleClass("expressomail-button-icon-ative");
2676        })
2677        //BOTAO IMPORTANTE
2678        .end().find(".important").button({
2679                icons : {
2680                        primary : "ui-icon-notice"
2681                },
2682                text:false
2683        }).click(function(){
2684                check_input(content.find('[name="input_important_message"]'));
2685                $(this).toggleClass("expressomail-button-icon-ative");
2686        })
2687        //BOTAO ASS. DIGITAL
2688        .end().find(".return_digital").button({
2689                icons : {
2690                        primary : "ui-icon-key"
2691                },
2692                text:false
2693        }).click(function(){
2694                check_input(content.find('[name="input_return_digital"]'));
2695        })
2696        //BOTAO EMAIL CRYPT
2697        .end().find(".return_cripto").button({
2698                icons : {
2699                        primary : "ui-icon-locked"
2700                },
2701                text:false
2702        }).click(function(){
2703                check_input(content.find('[name="input_return_cripto"]'));
2704        });
2705       
2706        content.find(".flags-buttons").buttonset();
2707
2708        content.find(".attachment td").filter(".value").prepend(DataLayer.render("../prototype/modules/mail/templates/attachment.ejs", {ID:ID}));
2709        var fileUploadMSG = $('#fileupload_msg'+ID);
2710        var maxAttachmentSize = (preferences.max_attachment_size !== "" && preferences.max_attachment_size != 0) ? (parseInt(preferences.max_attachment_size.replace('M', '')) * 1048576 ) : false;
2711       
2712        content.find(".new-msg-head-data").scroll(function(){
2713                $.each(fileUploadMSG.find(".attachments-list .att-box"), function(index, value){
2714                        $(this).qtip("api").updatePosition();
2715                        $(this).qtip("api").updateWidth();
2716                });
2717        });
2718        $("#fileupload_msg"+ID+"_droopzone").click(function(){
2719                $(this).removeClass('in hover');
2720        $(this).hide();
2721        $(this).prev().show();
2722        });
2723        fileUploadMSG.find(".button").button().filter(".fileinput-button").find(".ui-button-text").css("margin-top", "2px").find("input:file").fileupload({
2724                //singleFileUploads : true,fileUploadMSG
2725                sequentialUploads: true,
2726                type: 'post',
2727                dataType : 'json',
2728                url: "../prototype/post.php",
2729                forceIframeTransport: false,
2730                dropZone : $("#fileupload_msg"+ID+"_droopzone"),
2731                formData: function(form) {
2732                        return [
2733                                {
2734                                        name : "mailAttachment[0][source]",
2735                                        value : "files0"
2736                                },
2737                                {
2738                                        name : "mailAttachment[0][disposition]",
2739                                        value : $(form[0]['attDisposition'+$(form[0]['abaID']).val()]).val()
2740                                },
2741                                {
2742                                        name: "MAX_FILE_SIZE",
2743                                        value : maxAttachmentSize
2744                                }
2745                        ];
2746                },     
2747                add: function (e, data) {
2748            var iterator = idattachbycontent;
2749                        if(!maxAttachmentSize || data.files[0].size < maxAttachmentSize || is_ie) {
2750                                setTimeout(function() {
2751                    $('#attDisposition'+ID).val('attachment');
2752                                        jqXHR[iterator] = data.submit();
2753                                }, 100);
2754                        }
2755                        fileUploadMSG.find(' .attachments-list').show();
2756                        $.each(data.files, function (index, file) {
2757                                var attach = {};
2758                                attach.fullFileName = file.name;
2759                                attach.fileName = file.name;
2760                                if(file.name.length > 20)
2761                                        attach.fileName = file.name.substr(0, 17) + " ... " + file.name.substr(file.name.length-6, file.name.length);
2762                                attach.fileSize = formatBytes(file.size);
2763                                if(maxAttachmentSize && file.size > maxAttachmentSize)
2764                                        attach.error = 'Tamanho de arquivo nao permitido'
2765                                else
2766                                        attach.error = true;
2767                                var upload = $(DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist.ejs", {file : attach}));                           
2768                                upload.find('.att-box-delete').click(function(){
2769                                        var idAttach = $(this).parent().find('input[name="fileId[]"]').val();
2770                                        fileUploadMSG.find(' .attachments-list').find('input[value="'+idAttach+'"]').remove();
2771                    delAttachment(ID, idAttach);
2772                    $(this).parent().qtip("destroy");
2773                                        $(this).parent().remove();
2774                                        if(!fileUploadMSG.find(' .attachments-list').find(".att-box").length){
2775                                                fileUploadMSG.find(' .attachments-list').hide();
2776                                        }
2777                    if(jqXHR){
2778                        jqXHR[iterator].abort();
2779                    }
2780                                });
2781                   
2782                fileUploadMSG.find('.attachments-list').append(upload);
2783
2784                fileUploadMSG.find('.attachments-list .att-box:last').qtip({
2785                        content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", {attach : attach}),
2786                                        position: {
2787                                                corner: {
2788                                                        tooltip: 'bottomMiddle',
2789                                                        target: 'topMiddle'
2790                                                },
2791                                                adjust: {
2792                                       resize: true,
2793                                       scroll: true,
2794                                       screen: true
2795                                    }
2796                                        },
2797                                        show: {
2798                                                when: 'mouseover', // Don't specify a show event
2799                                                ready: false // Show the tooltip when ready
2800                                        },
2801                                        hide: 'mouseout', // Don't specify a hide event
2802                                        style: {
2803                                                border: {
2804                                                        width: 1,
2805                                                        radius: 5
2806                                                },
2807                                                width: {
2808                                                         min: 75,
2809                                                         max : 1000
2810                                                },
2811                                                padding: 3,
2812                                                textAlign: 'left',
2813                                                tip: true, // Give it a speech bubble tip with automatic corner detection
2814                                                name: (typeof(attach.error) == 'boolean' ? 'light' : 'red') // Style it according to the preset 'cream' style
2815                                        }
2816                })/*.progressbar({
2817                    value : 1
2818                })*/;
2819
2820                fileUploadMSG.find('.attachments-list .att-box:last').css('width', fileUploadMSG.find('.attachments-list .att-box:last div:first').css('width'));
2821
2822                                if(!maxAttachmentSize || file.size < maxAttachmentSize){
2823                                        if(data.fileInput){
2824                                                fileUploadMSG.find('.fileinput-button.new').append(data.fileInput[0]).removeClass('new');
2825                                                fileUploadMSG.find('.attachments-list').find('[type=file]').addClass('hidden');
2826                                        }
2827                                }else
2828                                        fileUploadMSG.find(' .fileinput-button.new').removeClass('new');
2829
2830                                idattachbycontent++
2831                        });
2832                       
2833                },
2834                done: function(e, data){
2835            var attach_box = fileUploadMSG.find('.att-box-loading:first').parents('.att-box');
2836            var attach = {
2837                fullFileName : attach_box.find(".att-box-fullfilename").text(),
2838                fileSize : attach_box.find(".att-box-filesize").text(),
2839                error : false
2840            };
2841                        if(!!data.result && data.result != "[]" ){
2842                                var newAttach = data.result;                             
2843                                if(!newAttach.mailAttachment.error || newAttach.rollback !== false){
2844                                        attach_box.append('<input type="hidden" name="fileId[]" value="'+newAttach['mailAttachment'][0][0].id+'"/>');
2845                                        addAttachment(ID,newAttach['mailAttachment'][0][0].id);
2846                }else {
2847                                    attach_box.addClass('invalid-email-box');
2848                    attach.error = newAttach.mailAttachment.error ? newAttach.mailAttachment.error : 'Erro ao anexar...';//.append(newAttach.mailAttachment.error).addClass('message-attach-error');   
2849                }
2850                        }else {
2851                                attach_box.addClass('invalid-email-box');//.qtip("api").updateContent("oi", true);
2852                attach.error = 'Erro ao anexar...';
2853                        }
2854            attach_box.qtip("destroy").qtip({
2855                content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", {attach : attach}),
2856                position: {
2857                    corner: {
2858                        tooltip: 'bottomMiddle',
2859                        target: 'topMiddle'
2860                    },
2861                    adjust: {
2862                       resize: true,
2863                       scroll: true,
2864                       screen: true
2865                    }
2866                },
2867                show: {
2868                    when: 'mouseover', // Don't specify a show event
2869                    ready: false // Show the tooltip when ready
2870                },
2871                hide: 'mouseout', // Don't specify a hide event
2872                style: {
2873                    border: {
2874                        width: 1,
2875                        radius: 5
2876                    },
2877                    width: {
2878                                                 min: 75,
2879                                                 max : 1000
2880                                        },
2881                    padding: 3,
2882                    textAlign: 'left',
2883                    tip: true, // Give it a speech bubble tip with automatic corner detection
2884                    name: (attach.error == false ? 'blue' : 'red')// Style it according to the preset 'cream' style
2885                }
2886            });/*
2887            fileUploadMSG.find(".att-box-loading:first").parents(".att-box").removeAttr("style").progressbar("destroy").find("div:first").removeAttr("style");
2888            */
2889            fileUploadMSG.find('.att-box-loading:first').remove();
2890                }/*,
2891        progress : function(e, data){
2892            var progress = parseInt(data.loaded / data.total * 100, 10);
2893            fileUploadMSG.find('.att-box-loading:first').parents(".att-box:first").progressbar({
2894                value : progress
2895            });
2896        }*/
2897        }).css({
2898                "height" : "20px",
2899                "width": (is_webkit ? "205px" : "100px"),
2900                "border-width": "0 0 0px 0px",
2901                "-moz-transform" : "rotate(-180deg) translate(-147px, -0.5px) scale(1.1)",
2902                "-webkit-transform" : "rotate(-180deg) translate(-104px, 0px)"
2903        }).end().end().end().filter(".message-attach-link").click(function(){
2904                jQuery('#message-attach-dialog').html(DataLayer.render("../prototype/modules/attach_message/attach_message.ejs", {}));
2905                $( "#mailpreview_container span.ui-icon-close" ).click();
2906                jQuery('#message-attach-dialog').dialog({
2907                        width:920,
2908                        height:550,
2909                        resizable:false,
2910                        modal: true,
2911                        closeOnEscape:true,
2912                        close:function(event, ui)
2913            {
2914                event.stopPropagation();
2915                 if(typeof(shortcut) != 'undefined') shortcut.disabled = false;
2916            },
2917            open: function(event, ui)
2918            {
2919                if(typeof(shortcut) != 'undefined') shortcut.disabled = true;
2920            },
2921                        autoOpen:false
2922        });
2923        jQuery.getScript("../prototype/modules/attach_message/attach_message.js", function(){
2924                jQuery('#message-attach-dialog').dialog('open');
2925                jQuery('#message-attach-attach-btn').unbind('click');
2926                jQuery('#message-attach-attach-btn').click(function(event){
2927                        jQuery.each(selectedMessages, function(folder_name, messages) {
2928                                jQuery.each(selectedMessages[folder_name], function(message_number, message) {
2929                                        if (message) {
2930                                                fileUploadMSG.find(' .attachments-list').show();       
2931                                                var att = new Object();
2932                                                att.folder = folder_name;
2933                                                att.uid = message_number;
2934                                                att.type = 'imapMSG';
2935                                                att.name = Base64.encode(onceOpenedMessages[folder_name][message_number].subject + '.eml');
2936                                                var idATT = JSON.stringify(att);
2937                                                addAttachment( ID , idATT);                       
2938                                                var attach = {};
2939                                                attach.fileName = onceOpenedMessages[folder_name][message_number].subject + '.eml';
2940                                                attach.fullFileName = onceOpenedMessages[folder_name][message_number].subject + '.eml';
2941                                                if(attach.fileName.length > 20)
2942                                                        attach.fileName = attach.fileName.substr(0, 17) + "... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length);
2943
2944                                                attach.error = false;
2945                        attach.OK = true;
2946                                                attach.fileSize = formatBytes(onceOpenedMessages[folder_name][message_number].size);
2947                                                var upload = $(DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist.ejs", {file : attach}));
2948                                                upload.find('.att-box-loading').remove();
2949                                                upload.append('<input type="hidden" name="fileId[]" value=\''+idATT+'\'/>');
2950                                               
2951                                                upload.find('.att-box-delete').click(function(){
2952                                                        var idAttach = $(this).parent().find('input[name="fileId[]"]').val();
2953                                                        fileUploadMSG.find(' .attachments-list').find('input[value="'+idAttach+'"]').remove();
2954                                                        delAttachment(ID,idAttach);
2955                                                        $(this).parent().qtip("destroy");
2956                                                        $(this).parent().remove();
2957                                                        if(!fileUploadMSG.find(' .attachments-list').find(".att-box").length){
2958                                                                fileUploadMSG.find(' .attachments-list').hide();
2959                                                        }
2960                                                });     
2961                                                       
2962                                                fileUploadMSG.find('.attachments-list').append(upload);
2963
2964                                                upload.find('.att-box-loading').remove();
2965
2966                                                fileUploadMSG.find('.attachments-list .att-box:last').qtip({
2967                                        content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", {attach : attach}),
2968                                                        position: {
2969                                                                corner: {
2970                                                                        tooltip: 'bottomMiddle',
2971                                                                        target: 'topMiddle'
2972                                                                },
2973                                                                adjust: {
2974                                                       resize: true,
2975                                                       scroll: true
2976                                                    }
2977                                                        },
2978                                                        show: {
2979                                                                when: 'mouseover', // Don't specify a show event
2980                                                                ready: false // Show the tooltip when ready
2981                                                        },
2982                                                        hide: 'mouseout', // Don't specify a hide event
2983                                                        style: {
2984                                                                border: {
2985                                                                        width: 1,
2986                                                                        radius: 5
2987                                                                },
2988                                                                width: {
2989                                                                         min: 75,
2990                                                                         max : 1000
2991                                                                },
2992                                                                padding: 5,
2993                                                                textAlign: 'center',
2994                                                                tip: true, // Give it a speech bubble tip with automatic corner detection
2995                                                                name: 'blue' // Style it according to the preset 'cream' style
2996                                                        }
2997                                });
2998                                        }
2999                                });
3000                        });
3001                        jQuery('#message-attach-dialog').dialog('close');
3002                });
3003                jQuery('#message-attach-cancel-btn').click(function(event){
3004                        jQuery('#message-attach-dialog').dialog('close');
3005                });                     
3006        });
3007        });
3008        $(document).bind('drop dragover', function (e) {
3009            e.preventDefault();
3010        });
3011        //DRAG and DROP DE ARQUIVOS Nï¿œO FUNCIONA NO IE
3012        if(!is_ie){
3013                $("body").bind('dragenter', function (e) {
3014                    var dropZone = $("#fileupload_msg"+ID+"_droopzone");
3015                var timeout = window.dropZoneTimeout;
3016                        dropZone.show();
3017                        dropZone.prev().hide();
3018                    if (!timeout) {
3019                        dropZone.addClass('in');
3020                    } else {
3021                        clearTimeout(timeout);
3022                    }
3023                    if (e.target === dropZone[0]) {
3024                        dropZone.addClass('hover');
3025                    } else {
3026                        dropZone.removeClass('hover');
3027                    }
3028                    $(window).unbind('dragleave');
3029                    window.dropZoneTimeout = setTimeout(function () {
3030                        $(window).bind('dragleave', function (e) {
3031                                        window.dropZoneTimeout = null;
3032                                dropZone.removeClass('in hover');
3033                                dropZone.hide();
3034                                dropZone.prev().show();
3035                                });
3036                    }, 1);
3037                }).bind('dragleave', function (e) {
3038                        var dropZone = $("#fileupload_msg"+ID+"_droopzone");
3039                        window.dropZoneTimeout = setTimeout(function () {
3040                        $(window).bind('dragleave', function (e) {
3041                                        window.dropZoneTimeout = null;
3042                                dropZone.removeClass('in hover');
3043                                dropZone.hide();
3044                                dropZone.prev().show();
3045                                });
3046                    }, 1);
3047                }).bind('drop', function(e){
3048                        var dropZone = $("#fileupload_msg"+ID+"_droopzone");
3049                        window.dropZoneTimeout = null;
3050                dropZone.removeClass('in hover');
3051                dropZone.hide();
3052                dropZone.prev().show();
3053                });
3054        }       
3055        return ID;
3056}
3057
3058//      Verify if any user is sharing his name/email address
3059//      for use in the new messages's "From " field.
3060function draw_from_field(sel_from,tr1_1){
3061
3062        var el_shared_users = Element("el_shared_users");
3063        /* Recupera a pasta atual do usuï¿œrio (selecionada) */
3064        var user_shared = folder.split(cyrus_delimiter);
3065        /* Verifica se estï¿œ nas prï¿œprias pastas */
3066        if(user_shared[0] == "INBOX"){
3067                user_shared = User.me.uid;
3068        }else{
3069                user_shared = user_shared[1];
3070        }       
3071        // The element was loaded and populated...so return.
3072        if(el_shared_users){
3073                // Nothing to work...so return.
3074                if(el_shared_users.options.length == 0)
3075                        return;
3076                tr1_1.style.display = '';
3077                for (var x = 0; x < el_shared_users.options.length; x++) {
3078                        var _option = document.createElement("OPTION");
3079                        _option.text = el_shared_users.options[x].text;
3080                        _option.value = el_shared_users.options[x].value;
3081                        /* Faz o tratamento do nome da pasta para fazer a verificaᅵᅵo e selecionar o valor no select */
3082                        var str_begin_name = _option.text.indexOf('<') + 1;
3083                        var str_end_name = _option.text.indexOf('@');
3084                        var user_selected_name = _option.text.substring(str_begin_name, str_end_name);
3085                        /* Verifica se ï¿œ o usuï¿œrio da pasta selecionada */                 
3086                        if(user_selected_name == user_shared){
3087                                _option.selected = 'selected';
3088                        }
3089                        sel_from.options[sel_from.options.length] = _option     ;
3090                }
3091                return;
3092        }
3093        // Get the shared folders.....
3094        var sharedFolders = new Array();
3095        for(var i = 0; i < folders.length; i++) {
3096                var x = folders[i].folder_id;
3097                if (folders[i].folder_parent == 'user'){
3098                        sharedFolders[sharedFolders.length] = x;
3099                }
3100        }
3101
3102        var matchUser = '#';
3103        var sharedUsers = new Array();
3104        // Filter the shared folders (only root folders) .....
3105        for(var i = 0; i < sharedFolders.length; i++) {
3106                matchUser = sharedFolders[i];
3107                sharedUsers[sharedUsers.length] = matchUser.substring(("user"+cyrus_delimiter).length,matchUser.length);
3108        }
3109
3110        // Handler function for cExecute
3111        var h_user = function(data) {
3112                if(data.length > 0) {
3113                        tr1_1.style.display = '';
3114            var mycn = typeof(data.myname != 'undefined') ? data.myname : '';
3115                        var _option = document.createElement("OPTION");
3116                        _option.text =  '"'+mycn+'" <'+Element("user_email").value+'>';
3117                        _option.value  = mycn+";"+Element("user_email").value;
3118                        /* Verifica se ï¿œ o usuï¿œrio logado */
3119                        if(user_shared == User.me.uid)
3120                                _option.selected = 'selected';
3121                        sel_from.options[sel_from.options.length] = _option;
3122
3123                        var options = '';
3124            var cn = '';
3125                        for (var x = 0; x < data.length; x++)   {
3126                                cn = typeof(data[x].cn[0] != 'undefined') ? data[x].cn[0] : '';
3127                                var _option = document.createElement("OPTION");
3128                                _option.text = '"'+cn+'" <'+data[x].mail[0]+'>';
3129                                _option.value = cn+';'+data[x].mail[0]+';'+data[x].save_shared[0]+';'+data[x].uid[0];
3130                                /* Faz o tratamento do nome da pasta para fazer a verificaᅵᅵo e selecionar o valor no select */
3131                                var str_begin_name = _option.text.indexOf('<') + 1;
3132                                var str_end_name = _option.text.indexOf('@');
3133                                var user_selected_name = _option.text.substring(str_begin_name, str_end_name);
3134                                /* Verifica se ï¿œ o usuï¿œrio da pasta selecionada */
3135                                if(user_selected_name == user_shared){
3136                                        _option.selected = 'selected';
3137                                }
3138                                sel_from.options[sel_from.options.length] = _option     ;
3139                        }
3140                }
3141                var shared_users_from = Element("el_shared_users");
3142                if(!shared_users_from) {
3143                        shared_users_from = sel_from.cloneNode(true);
3144                        shared_users_from.id = "el_shared_users";
3145                        shared_users_from.style.display = 'none';
3146                        document.body.appendChild(shared_users_from);
3147                }
3148        }
3149        // First time, so execute.....
3150        cExecute ("$this.ldap_functions.getSharedUsersFrom&uids="+sharedUsers.join(';'), h_user);
3151}
3152
3153function changeBgColorToON(all_messages, begin, end){
3154        var _tab_prefix = getTabPrefix();
3155        var _msg_id;
3156        for (begin; begin<=end; begin++)
3157        {
3158                _msg_id = getMessageIdFromRowId(all_messages[begin].id);
3159                add_className(all_messages[begin], 'selected_msg');
3160                Element(_tab_prefix + "check_box_message_" + _msg_id).checked = true;
3161                updateSelectedMsgs(true,_msg_id);
3162        }
3163}
3164
3165function updateBoxBgColor(box){
3166        // Set first TR Class
3167        var _className = 'tr_msg_read2';
3168        for(var i = 0; i < box.length;i++){
3169                if(exist_className(box[i],_className))
3170                        remove_className(box[i], _className);
3171                _className = (_className == 'tr_msg_read2' ? 'tr_msg_read' : 'tr_msg_read2');
3172                if(!exist_className(box[i],_className))
3173                        add_className( box[i], _className);
3174        }
3175}
3176function changeBgColor(event, msg_number) {
3177        var _element_id = msg_number.toString();
3178        var first_order, last_order;
3179
3180        if (typeof(currentTab)!='number') {
3181                _element_id = _element_id+'_s'+numBox;
3182        }
3183        actual_tr = Element(_element_id);
3184
3185        if (event.shiftKey)
3186        {
3187                var last_tr = Element(last_message_selected);
3188                if(!last_tr)
3189                        last_tr = actual_tr;
3190
3191                var all_messages = actual_tr.parentNode.childNodes;
3192
3193                for (var i=0; i < all_messages.length; i++)
3194                {
3195                        if (actual_tr.id == all_messages[i].id)
3196                                first_order = i;
3197                        if (last_tr.id == all_messages[i].id)
3198                                last_order = i;
3199                }
3200
3201                if (parseInt(first_order) > parseInt(last_order))
3202                        changeBgColorToON(all_messages, last_order, first_order);
3203                else
3204                        changeBgColorToON(all_messages, first_order, last_order);
3205        }else if(event.target != document.getElementById(getTabPrefix()+'check_box_message_' + msg_number)){
3206                if($(event.target).attr("checked") == "checked"){
3207                        $(event.target).parents("tr:first").addClass("selected_msg");
3208                }else{
3209                        $(event.target).parents("tr:first").removeClass("selected_msg");
3210                }
3211        }
3212        else{
3213                //if ( exist_className(actual_tr, 'selected_msg') )
3214                if ( document.getElementById(getTabPrefix()+'check_box_message_' + msg_number).checked ){
3215                        if( document.getElementById("chk_box_select_all_messages").checked) {
3216                                add_className(actual_tr, 'selected_msg selected_shortcut_msg');
3217                        }else
3218                        add_className(actual_tr, 'selected_msg');
3219                }else{
3220                        if( document.getElementById("chk_box_select_all_messages").checked){
3221                                remove_className(actual_tr, 'selected_msg selected_shortcut_msg');
3222                                remove_className(actual_tr, 'selected_msg');
3223                                remove_chk_box_select_all_messages();
3224                                if(actual_tr.className == 'selected_msg')
3225                        remove_className(actual_tr, 'selected_msg');
3226                        }else
3227                                remove_className(actual_tr, 'selected_msg');
3228                }
3229        }
3230        last_message_selected = _element_id;
3231}
3232
3233function build_quota(data){
3234        id = "content_quota";
3235        q_limit = data['quota_limit'];
3236        var div = document.getElementById(id);
3237        if(!q_limit){
3238                div.innerHTML = '<span><font size="2" style="color:red"><strong>'+get_lang("Without Quota")+'</strong></font></span>';
3239        }
3240        else{
3241                if(div)
3242                        div.innerHTML = '';
3243                value = data['quota_percent'];
3244                q_used = data['quota_used'];
3245                table = document.getElementById("table_quota");
3246                if(table)
3247                        table.parentNode.removeChild(table);
3248                table = document.createElement("TABLE");
3249                tbody = document.createElement("TBODY");
3250                table.appendChild(tbody);
3251                table.id = "table_quota";
3252                table.width="102";
3253                table.border="0";
3254                table.cellSpacing = 0;
3255                table.cellPadding = 0;
3256
3257                //tr1 = document.createElement("TR");
3258                td11 = document.createElement("TD");
3259                td11.align="center";
3260                td11.setAttribute("noWrap","true");
3261                td11.innerHTML += '<div id="quota_progressbar" class="boxHeaderText" style="display: block; float: left; height: 13px; width: 121px;"></div>&nbsp;<span class="boxHeaderText" style="line-height : 0px;">' + value+"% ("+borkb(q_used*1024)+"/"+borkb(q_limit*1024)+")</span>";
3262                //tr1.appendChild(td11);
3263
3264                tr2 = document.createElement("TR");
3265                td22 = document.createElement("TD");
3266
3267                //td21.appendChild(table221);
3268                //tr2.appendChild(td21);
3269                tr2.appendChild(td11);
3270                //tr2.appendChild(td1);
3271
3272                tbody.appendChild(tr2); //Desenho
3273                //tbody.appendChild(tr1); //Letras
3274                div.appendChild(table);
3275                $("#quota_progressbar").progressbar({
3276                        value: value
3277                });
3278                if(value > 90) {
3279                        if(value >= 100)
3280                                write_msg(get_lang("Your Mailbox is 100% full! You must free more space or will not receive messages."));
3281                        else
3282                                write_msg(get_lang("Warning: Your Mailbox is almost full!"));
3283                        $("#quota_progressbar").find(".ui-progressbar-value").css({"background-image": "url(templates/default/images/dsalert.gif)", "border-color" : "red"});
3284                }
3285                else if(value > 80)
3286                        $("#quota_progressbar").find(".ui-progressbar-value").css({"background-image": "url(templates/default/images/dswarn.gif)", "border-color" : "yellow"});
3287        }
3288}
3289
3290function draw_quota(data){
3291        this.build_quota(data);
3292}
3293
3294function update_quota(folder_id){
3295        cExecute ("$this.imap_functions.get_quota&folder_id="+folder_id,this.build_quota);
3296}
3297
3298function draw_search(headers_msgs){
3299        Element("border_id_0").innerHTML = "&nbsp;&nbsp;" + get_lang('Search Result') + "&nbsp;&nbsp;";
3300
3301        var tbody = Element('tbody_box');
3302        for (var i=0; i<(headers_msgs.length); i++){
3303            // passa parï¿œmetro offset
3304                var tr = this.make_tr_message(headers_msgs[i], headers_msgs[i].msg_folder);
3305                if (tr)
3306                        tbody.appendChild(tr);
3307        }
3308}
3309
3310function draw_search_header_box(){
3311        var table_message_header_box = Element("table_message_header_box");
3312        table_message_header_box.parentNode.removeChild(table_message_header_box);
3313
3314        var content_id_0 = Element("content_id_0");
3315        var table_element = document.createElement("TABLE");
3316        var tbody_element = document.createElement("TBODY");
3317        table_element.setAttribute("id", "table_message_header_box");
3318        table_element.className = "table_message_header_box";
3319        tr_element = document.createElement("TR");
3320        tr_element.className = "message_header";
3321        td_element1 = document.createElement("TD");
3322        td_element1.setAttribute("width", "1%");
3323        chk_box_element = document.createElement("INPUT");
3324        chk_box_element.id  = "chk_box_select_all_messages";
3325        chk_box_element.setAttribute("type", "checkbox");
3326        chk_box_element.className = "checkbox";
3327        chk_box_element.onclick = function(){select_all_messages(this.checked);};
3328        chk_box_element.onmouseover = function () {this.title=get_lang('Select all messages.')};
3329        chk_box_element.onkeydown = function (e){
3330                if (is_ie)
3331                {
3332                        if ((window.event.keyCode) == 46)
3333                        {
3334                                //delete_all_selected_msgs_imap();
3335                                proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
3336                        }
3337                }
3338                else
3339                {
3340                        if ((e.keyCode) == 46)
3341                        {
3342                                //delete_all_selected_msgs_imap();
3343                                proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
3344                        }
3345                }
3346        };
3347
3348        td_element1.appendChild(chk_box_element);
3349        td_element2 = document.createElement("TD");
3350        td_element2.setAttribute("width", "3%");
3351        td_element3 = document.createElement("TD");
3352        td_element3.setAttribute("width", "30%");
3353        td_element3.id = "message_header_SORTFROM";
3354        td_element3.align = "left";
3355        td_element3.innerHTML = get_lang("From");
3356        td_element4 = document.createElement("TD");
3357        td_element4.setAttribute("width", "49%");
3358        td_element4.id = "message_header_SORTSUBJECT";
3359        td_element4.align = "left";
3360        td_element4.innerHTML = get_lang("Subject");
3361        td_element5 = document.createElement("TD");
3362        td_element5.setAttribute("width", "10%");
3363        td_element5.id = "message_header_SORTARRIVAL";
3364        td_element5.align = "center";
3365        td_element5.innerHTML = "<B>"+get_lang("Date")+"</B>";
3366        td_element5.innerHTML += "<img src ='templates/"+template+"/images/arrow_descendant.gif'>";
3367        td_element6 = document.createElement("TD");
3368        td_element6.setAttribute("width", "10%");
3369        td_element6.id = "message_header_SORTSIZE";
3370        td_element6.align = "right";
3371        td_element6.innerHTML = get_lang("Size");
3372        tr_element.appendChild(td_element1);
3373        tr_element.appendChild(td_element2);
3374        tr_element.appendChild(td_element3);
3375        tr_element.appendChild(td_element4);
3376        tr_element.appendChild(td_element5);
3377        tr_element.appendChild(td_element6);
3378
3379        tbody_element.appendChild(tr_element);
3380        table_element.appendChild(tbody_element);
3381        content_id_0.appendChild(table_element);
3382}
3383
3384function draw_search_division(msg){
3385        var tbody = Element('tbody_box');
3386        var tr = document.createElement("TR");
3387        var td = document.createElement("TD");
3388        td.colSpan = '7';
3389        td.width = '100%';
3390
3391        var action_info_table = document.createElement("TABLE");
3392        var action_info_tbody = document.createElement("TBODY");
3393
3394        action_info_table.className = "action_info_table";
3395        action_info_table.width = "100%";
3396
3397        var action_info_tr = document.createElement("TR");
3398
3399        var action_info_th1 = document.createElement("TH");
3400        action_info_th1.width = "40%";
3401        action_info_th1.innerHTML = "&nbsp;";
3402
3403        var action_info_th2 = document.createElement("TH");
3404
3405        action_info_th2.innerHTML = msg;
3406        action_info_th2.className = "action_info_th";
3407        action_info_th2.setAttribute("noWrap", "true");
3408
3409        var action_info_th3 = document.createElement("TH");
3410        action_info_th3.width = "40%";
3411        action_info_th3.innerHTML = "&nbsp;";
3412
3413        action_info_tr.appendChild(action_info_th1);
3414        action_info_tr.appendChild(action_info_th2);
3415        action_info_tr.appendChild(action_info_th3);
3416        action_info_tbody.appendChild(action_info_tr);
3417        action_info_table.appendChild(action_info_tbody);
3418
3419        td.appendChild(action_info_table);
3420        tr.appendChild(td);
3421        tbody.appendChild(tr);
3422}
3423
3424function draw_search_box(){
3425        var content_id_0 = Element("content_id_0");
3426        var table = document.createElement("TABLE");
3427        table.id = "table_box";
3428        table.width = 'auto';
3429        var tbody = document.createElement("TBODY");
3430        tbody.id = "tbody_box";
3431
3432        table.className = "table_box";
3433        table.setAttribute("frame", "below");
3434        table.setAttribute("rules", "none");
3435        table.setAttribute("cellpadding", "0");
3436        table.onkeydown = function (e){
3437                if (is_ie)
3438                {
3439                        if ((window.event.keyCode) == 46)
3440                        {
3441                                //delete_all_selected_msgs_imap();
3442                                proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
3443                        }
3444                }
3445                else
3446                {
3447                        if ((e.keyCode) == 46)
3448                        {
3449                                //delete_all_selected_msgs_imap();
3450                                proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
3451                        }
3452                }
3453        };
3454        if (is_ie)
3455                table.style.cursor = "hand";
3456
3457        table.appendChild(tbody);
3458        content_id_0.appendChild(table);
3459}
3460        var idx_cc = 0;
3461
3462function draw_plugin_cc(ID, addrs){
3463        connector.loadScript("ccQuickAdd");
3464
3465        var array_addrs = '';
3466        var array_name  = '';
3467        var cc_data = new Array();
3468        if(typeof(addrs.name) != 'undefined') {
3469                array_name      = LTrim(addrs.name).split(" ");
3470                array_addrs = new Array(addrs.email);
3471        }
3472        else {
3473                array_addrs = (typeof addrs == 'object' ? addrs.toString().split("\" ") : addrs.split("\" "));
3474                array_name      = LTrim(array_addrs[0]).replace('"','').split(" ");
3475        }
3476
3477        var _split = array_name[0].split('@');
3478        cc_data[0] = _split[0];
3479        cc_data[1] = _split[0];
3480        cc_data[2] = '';
3481
3482        for (i=1; i < array_name.length; i++)
3483                cc_data[2] += array_name[i] + " ";
3484
3485
3486        if(array_addrs.length > 1)
3487                cc_data[3] = array_addrs[1] ? array_addrs[1].replace("&lt;",'').replace("&gt;",'') : '';
3488        else
3489                cc_data[3] = array_addrs[0];
3490
3491        var onclick = '';               
3492        $.each(cc_data, function(index, value){
3493                onclick += "'"+value+"',";
3494        });
3495        onclick = onclick.substr(0, onclick.length-1);
3496        var sm_envelope_img1 = '<img style="cursor:'+ (is_ie ? 'hand' : 'pointer') +'" title="' + get_lang("Add Contact") +
3497        '" onclick="ccQuickAddOne.showList(['+onclick+'])" src="./templates/'+template+'/images/user_card.png">';
3498        var to_addybook_add = "<SPAN id='insert_plugin_"+idx_cc+"_"+ID+"'>";
3499        to_addybook_add += addrs;
3500        to_addybook_add +=  sm_envelope_img1;
3501        idx_cc++;
3502        to_addybook_add += "</SPAN>";
3503        return to_addybook_add;
3504}
3505
3506function deny_email(email){
3507        connector.loadScript("filter");
3508        connector.loadScript("filters");
3509        var dn_em       = document.createElement("SPAN");
3510                dn_em.id = "tt_d";
3511                dn_em.onclick = function(){block_user_email(email); /*filter.new_rule(email);*/};
3512                dn_em.setAttribute("title",get_lang("Block Sender"));
3513                dn_em.style.cursor = "pointer";
3514                dn_em.innerHTML = "<script src='../prototype/modules/filters/filters.js'></script><img align='top' src='./templates/"+template+"/images/deny.gif'>";
3515        return dn_em;
3516
3517}
3518
3519function show_div_address_full(id, type) {
3520        var div_address_full = Element("div_"+type+"address_full_"+id);
3521        if(!div_address_full) {
3522                div_address_full = document.createElement("SPAN");
3523                div_address_full.id = "div_"+type+"address_full_"+id;
3524                div_address_full.style.display="none";
3525                var _address = eval(type+"address_array['"+id+"']");
3526                var isOverLimit = (_address.length > 100);
3527
3528                if(isOverLimit) {
3529                        alert("Esse campo possui muitos endereï¿œos ("+_address.length+" destinatï¿œrios).\r\n"+
3530                        "Para evitar o travamento do navegador, o botï¿œo 'Adicionar Contato' foi desabilitado!");
3531                }
3532
3533                for(var idx = 1 ; idx  < _address.length;idx++) {
3534                        div_address_full.innerHTML += isOverLimit ?  '<br>'+_address[idx] : ','+draw_plugin_cc(id,_address[idx]);
3535                }
3536                div_address_full.innerHTML += " (<a STYLE='color: RED;' onclick=document.getElementById('div_"+type+"address_full_"+id+"').style.display='none';document.getElementById('div_"+type+"address_"+id+"').style.display='';>"+get_lang('less')+"</a>)";
3537                Element(type+"_"+id).appendChild(div_address_full);
3538        }
3539        Element('div_'+type+'address_'+id).style.display='none';
3540        div_address_full.style.display='';
3541}
3542
3543function draw_footer_box(num_msgs){
3544        folder = get_current_folder();
3545        connector.loadScript('wfolders');
3546        var span_R = Element("table_message");
3547        var span_options = Element("span_options");
3548        if(!span_options) {
3549                span_options = document.createElement("TD");
3550                span_options.style.fontSize = "12";
3551                span_options.id = "span_options";
3552                span_R.appendChild(span_options);
3553        }
3554
3555        var change_font_color = 'onmouseover="var last_class = this.className;'+
3556                                'if (this.className != \'message_options_over\')'+
3557                                'this.className=\'message_options_active\'; '+
3558                                'this.onmouseout=function(){this.className=last_class;}"';
3559
3560        span_options.innerHTML =
3561                '<span class="message_options_trash"><span ' + change_font_color + ' title="'+get_lang("Delete")+'" class="message_options" onclick=proxy_mensagens.delete_msgs(\'null\',\'selected\',\'null\')>'+get_lang("Delete")+'</span></span>'+
3562                '<span class="message_options_move"><span ' + change_font_color + ' title="'+get_lang("Move")+'" class="message_options" onclick=wfolders.makeWindow(\"\",\"move_to\")>'+get_lang("Move")+'</span></span>'+
3563                ((expresso_offline)?" ":'<span class="message_options_print"><span ' + change_font_color + ' title="'+get_lang("Print")+'" class="message_options" onclick=print_all()>'+get_lang("Print")+'</span></span>')+
3564//              '<span class="message_options_print"><span ' + change_font_color + ' title="'+get_lang("Print")+'" class="message_options" onclick=print_all()>'+get_lang("Print")+'</span></span>'+
3565                ((expresso_offline)?" ":'<span class="message_options_export"><span ' + change_font_color + ' title="'+get_lang("Export")+'" class="message_options" onclick="proxy_mensagens.export_all_messages()">'+get_lang("Export")+'</span></span>') +
3566                ((expresso_offline)?" ":'<span class="message_options_import"><span ' + change_font_color + ' title="'+get_lang("Import")+'" class="message_options" onclick="import_window()">'+get_lang("Import")+'</span></span>');
3567        if(preferences.use_local_messages==1 && !expresso_offline)
3568                if(proxy_mensagens.is_local_folder(current_folder))
3569                        span_options.innerHTML += '&nbsp; <span id="localOption" ' + change_font_color + ' title="'+get_lang("Unarchive")+'" class="message_options" onclick="expresso_local_messages.unarchive_msgs(\''+folder+'\',null)">'+get_lang("Unarchive")+'</span>';
3570                else
3571                        span_options.innerHTML += '&nbsp; <span id="localOption" ' + change_font_color + ' title="'+get_lang("Archive")+'" class="message_options" onclick="archive_msgs(\''+folder+'\',null)">'+get_lang("Archive")+'</span>';
3572        if (use_spam_filter) {
3573                if ( current_folder == 'INBOX'+cyrus_delimiter+'Spam' ) {
3574                        span_options.innerHTML += ' | <span ' + change_font_color + ' title="'+get_lang("Not Spam")+'" class="message_options" onclick="nospam(\'selected\',\'null\',\'null\')">'+get_lang("Not Spam")+'</span>';
3575                }
3576                else {
3577                        span_options.innerHTML += ' | <span ' + change_font_color + ' title="'+get_lang("Mark as Spam")+'" class="message_options" onclick="spam(\'null\', \'selected\',\'null\')">'+get_lang("Mark as Spam")+'</span>';
3578                }
3579        }
3580        var span_D = Element("span_D");
3581        if(!span_D){
3582                span_D = document.createElement("TD");
3583                span_D.align = "right";
3584                span_D.style.fontSize = "12";
3585                span_D.id = "span_D";
3586                span_R.appendChild(span_D);
3587        }
3588        span_D.innerHTML =
3589                 get_lang("List")+': '+
3590        '<span ' + change_font_color + ' id="span_flag_SORTARRIVAL" class="'+(search_box_type == 'ALL' ? 'message_options_over' : 'message_options')+'" title="'+get_lang("All")+'" onclick="if(\'ALL\' == \''+search_box_type+'\') return false;sort_box(\'ALL\',\''+sort_box_type+'\')">'+get_lang("All")+'</span>, '+
3591        '<span ' + change_font_color + ' id="span_flag_UNSEEN" class="'+(search_box_type == 'UNSEEN' ? 'message_options_over' : 'message_options')+'" title="'+get_lang("l_unseen")+'" onclick="if(\'UNSEEN\' == \''+search_box_type+'\') return false;sort_box(\'UNSEEN\',\''+sort_box_type+'\')">'+get_lang("l_unseen")+'</span>, '+
3592        '<span ' + change_font_color + ' id="span_flag_SEEN" class="'+(search_box_type == 'SEEN' ? 'message_options_over' : 'message_options')+'" title="'+get_lang("l_seen")+'" onclick="if(\'SEEN\' == \''+search_box_type+'\') return false;sort_box(\'SEEN\',\''+sort_box_type+'\')">'+get_lang("l_seen")+'</span>, '+
3593        '<span ' + change_font_color + ' id="span_flag_ANSWERED" class="'+(search_box_type == 'ANSWERED' ? 'message_options_over' : 'message_options')+'" title="'+get_lang("title_answered")+'" onclick="if(\'ANSWERED\' == \''+search_box_type+'\') return false;sort_box(\'ANSWERED\',\''+sort_box_type+'\')">'+get_lang("l_answered")+'</span>, '+
3594        '<span ' + change_font_color + ' id="span_flag_FLAGGED" class="'+(search_box_type == 'FLAGGED' ? 'message_options_over' : 'message_options')+'" title="'+get_lang("l_important")+'" onclick="if(\'FLAGGED\' == \''+search_box_type+'\') return false;sort_box(\'FLAGGED\',\''+sort_box_type+'\')">'+get_lang("l_important")+'</span>&nbsp;&nbsp;';
3595        draw_paging(num_msgs);
3596        Element("tot_m").innerHTML = num_msgs;
3597}
Note: See TracBrowser for help on using the repository browser.