source: trunk/expressoMail1_2/js/mail_archiver.js @ 7449

Revision 7449, 87.2 KB checked in by marcosw, 12 years ago (diff)

Ticket #3088 - Correção para não exibir alerta ao remover mensagem de arquivamento

Line 
1<!--
2/*
3 * Mail Archive JS API
4 *
5 * This JavaScript file is the core to use MailArchiver embeded at Expresso suite.
6 * It contains all the resources used to handle local messages stored at the brand
7 * new solution Mail Archiver (a embeded application server running at client side).
8 *
9 * This feature is a replacement for Google Gears(obsolete by now), used by
10 * Expresso to store local messages at user workstation hard disk.
11 *
12 * @author Fernando Wendt [fernando-alberto.wendt@serpro.gov.br]
13 *
14 * @status under development
15 */
16
17//var sessid = 'sessionId';
18
19function zeroFill(d){
20    if(parseInt(d) < 10)
21        return('0' + d);
22    else
23        return(d);
24}
25
26//+ Jonas Raoni Soares Silva
27//@ http://jsfromhell.com/geral/utf-8 [v1.0]
28
29UTF8 = {
30        encode: function(s){
31                for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l;
32                        s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]
33                );
34                return s.join("");
35        },
36        decode: function(s){
37                for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l;
38                        ((a = s[i][c](0)) & 0x80) &&
39                        (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ?
40                        o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "")
41                );
42                return s.join("");
43        }
44};
45
46
47/**
48 * Concatenates the values of a variable into an easily readable string
49 * by Matt Hackett [scriptnode.com]
50 * @param {Object} x The variable to debug
51 * @param {Number} max The maximum number of recursions allowed (keep low, around 5 for HTML elements to prevent errors) [default: 10]
52 * @param {String} sep The separator to use between [default: a single space ' ']
53 * @param {Number} l The current level deep (amount of recursion). Do not use this parameter: it's for the function's own use
54 */
55function print_r(x, max, sep, l) {
56
57        l = l || 0;
58        max = max || 100;
59        sep = sep || ' ';
60
61        if (l > max) {
62                return "[WARNING: Too much recursion]\n";
63        }
64
65        var
66                i,
67                r = '',
68                t = typeof x,
69                tab = '';
70
71        if (x === null) {
72                r += "(null)\n";
73        } else if (t == 'object') {
74
75                l++;
76
77                for (i = 0; i < l; i++) {
78                        tab += sep;
79                }
80
81                if (x && x.length) {
82                        t = 'array';
83                }
84
85                r += '(' + t + ") :\n";
86
87                for (i in x) {
88                        try {
89                                r += tab + '[' + i + '] : ' + print_r(x[i], max, sep, (l + 1));
90                        } catch(e) {
91                                return "[ERROR: " + e + "]\n";
92                        }
93                }
94
95        } else {
96
97                if (t == 'string') {
98                        if (x == '') {
99                                x = '(empty)';
100                        }
101                }
102
103                r += '(' + t + ') ' + x + "\n";
104
105        }
106
107        return r;
108
109};
110var_dump = print_r;
111
112
113
114//Main object structure: object property data definition
115function MailArchiver() {
116    this.enabled = null;
117    this.interval = 500;
118    this.timer = null;
119    this.counter = 0;
120    this.service_count = 0;
121    this.service_count_tryouts = 0;
122    this.message_list = new Array();
123    this.search_message_list = new Array();
124    this.messageslisted = new Array();
125    this.total_messages = 0;
126    this.messages_processed = 0;
127    this.messages_fail = 0;
128    this.folder_origin = null;
129    this.folder_destination = null;
130    this.folders = null;
131    this.currentfolder = 'local_root';
132    this.currentmessage = null;
133    this.currentheaders = null;
134    this.drawdata = null;
135    this.onprocess = false;
136    this.folder_data = false;
137    this.queryconfig = new MAQueryConfig();
138    this.search_queryconfig = new MAQueryConfig();
139    this.pattern = new MAPattern();
140    this.messagesourcehandler = null;
141    this.ServiceReturnObjectList = null;
142    this.ServiceReturnObjectSearch = null;
143   
144    this.specialfolders = {
145                            "inbox":"local_inbox",
146                            "sent":"local_sent",
147                            "drafts":"local_drafts",
148                            "outbox":"local_outbox",
149                            "trash":"local_trash"
150                          };                         
151    this.unarchivecounter = 0;
152    this.archivefolder = null;
153    this.unarchievefolder = null;
154    this.unarchievenewfolder = null;
155    this.taglist = "";   
156    this.currenttag = "";   
157    this.tagmsg = false;
158    this.progressbar = null;
159    this.tmp_att_datasource = null;
160    this.tmp_att_data = null;
161    this.isbusy = false;
162    this.update_counters = false;
163    this.exportformat = 'zip';
164    this.querydata = null;
165    this.queryresult = null;
166    this.search_queryresult = null;
167    this.balancerid = null;
168    this.sessionid = null;
169    this.logonid = null;
170    this.session = null;
171    this.selectedfolder = null;
172    this.allmessagesbyfolder = new Array();
173    this.isArchiveOperation = false; //Se estiver em andamento uma operação de arquivamento/desarquivamento.
174}
175
176//Invoked at some possible MA crash issue
177MailArchiver.prototype.resetObject = function(){
178    expresso_mail_archive.message_list = new Array();
179    expresso_mail_archive.messagelisted = new Array();
180    expresso_mail_archive.total_messages = 0;
181    expresso_mail_archive.messages_processed = 0;
182    expresso_mail_archive.messages_fail = 0;
183    //expresso_mail_archive.folder_origin = null;
184    //expresso_mail_archive.folder_destination = null;
185    //expresso_mail_archive.folder = null;
186    expresso_mail_archive.isbusy = false;
187    //window.alert('ResetedObject, deixando current folder como "' + expresso_mail_archive.currentfolder + '"\nfolder destination "' + expresso_mail_archive.folder_destination+ '"');
188}
189
190/*SystemCheck method: test if MailArchive is installed and/or running at user workstation
191*Try to get a instance of ArchiveServices object - the handler of services provided by
192*the MailArchive services provider interface, from user workstation.
193*/
194MailArchiver.prototype.SystemCheck = function(){
195    expresso_mail_archive.enabled = ((ArchiveServices) ? true : false);   
196    if(expresso_mail_archive.enabled){
197        expresso_mail_archive.getAuthId();
198    }
199    else{
200       
201    }
202}
203
204//Check if preference is setted to use default local folders, try to create them
205MailArchiver.prototype.CreateDefaultStructrure = function(){
206    if(expresso_mail_archive.enabled){
207       //Base request object is a CXF Add-on CORS compatible component
208       var reqHandler = new cxf_cors_request_object();
209       reqHandler.init();
210       this.messagesourcehandler = reqHandler.handler; 
211       if(preferences.auto_create_local == 1){
212           expresso_mail_archive.createFolder("","Trash");
213           expresso_mail_archive.createFolder("","Drafts");
214           expresso_mail_archive.createFolder("","Sent");
215           expresso_mail_archive.createFolder("","Outbox");
216           expresso_mail_archive.createFolder("","Spam");
217       }
218       this.ActivateStatusListener(this);
219    }   
220}
221
222
223//Turns on the listener timer to check services availability
224MailArchiver.prototype.ActivateStatusListener = function(obj){
225    if (document.getElementById('mail_archiver_retry'))
226        tem_tag = true;
227    else
228        tem_tag = false;
229    try{
230        if (obj.enabled){
231            obj.interval = 500; //set default timer to 1ms (imediate lauching)
232            //draw_footer_box(get_current_folder());
233            obj.getServicesStatus(obj);
234        }
235        else{
236            throw "this is not enabled: " + obj;
237            window.alert('Nope: obj.enabled is not true...');
238        }
239    }
240    catch (e){
241        window.alert('ActivateStatusListener error: ' + e);
242    }
243}
244
245//Turns off the service status listener, at a crash issue
246MailArchiver.prototype.DeactivateStatusListener = function(obj){
247    window.clearInterval(obj.timer);
248    obj.enabled = null;
249    obj.timer=null;
250    obj.interval = 500;
251    ArchiveServices = null;
252    connector.purgeCache();
253    draw_footer_box(get_current_folder());
254    //auto_refresh();
255    if(document.getElementById('mail_archiver_retry')){
256        document.getElementById('mail_archiver_retry').parentNode.removeChild(document.getElementById('mail_archiver_retry'));
257    }
258    else{
259        //Redraw "Offline" linkage, intended to recoonect MailArchiver link   
260        connector.purgeCache();
261        draw_new_tree_folder();
262        change_folder('INBOX', 'INBOX');
263    }
264}
265
266//ServiceStatus callback OK
267MailArchiver.prototype.getServicesStatusOK = function(serviceData){
268    //window.alert('getServicesStatusOK com servicedata = ' + serviceData.getReturn());
269    expresso_mail_archive.service_count = expresso_mail_archive.counter;
270    if ((serviceData.getReturn().toUpperCase() == "STARTED") || (serviceData.getReturn().toUpperCase() == "RUNNING")){
271        //If there is no timer activated to services check interval, set it up.
272        if(expresso_mail_archive.enabled){
273           if(expresso_mail_archive.timer == null){
274                expresso_mail_archive.interval = 15000;
275                expresso_mail_archive.timer = window.setInterval(expresso_mail_archive.getServicesStatus, expresso_mail_archive.interval);
276                var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders', folderName: 'local_root'};
277                expresso_mail_archive.currentfolder = 'local_root';
278                expresso_mail_archive.drawdata = drawinginfo;
279                expresso_mail_archive.getFoldersList();
280           }
281        }
282        else{
283            window.clearInterval(expresso_mail_archive.timer);
284            write_msg(get_lang('MailArchiver does not seems to be running or installed at this workstation, local messages are disabled. Check it out!'),false);
285            expresso_mail_archive.enabled = false;
286            expresso_mail_archive.turnOffLocalTreeStructure();
287        }
288    }
289    else{
290        window.clearInterval(expresso_mail_archive.timer);
291        write_msg(get_lang('MailArchiver does not seems to be running or installed at this workstation, local messages are disabled. Check it out!'),false);
292        expresso_mail_archive.enabled = false;
293        expresso_mail_archive.turnOffLocalTreeStructure();
294    }
295    //window.alert('fooArc set to null');
296    fooArc = null;
297}
298
299//Dettach resources handler
300MailArchiver.prototype.DeactivateResources = function(obj){   
301    if(obj.timer)
302        window.clearInterval(obj.timer);
303    write_msg(get_lang('Mail Archiver is not responding. There is some communicating issue hang it up. Some services may not work properly. Check it out!'));
304    obj.DeactivateStatusListener(obj);
305    //draw_new_tree_folder();
306    return;
307}
308
309//Services Status Fail callback
310MailArchiver.prototype.getServicesStatusFailure = function(serviceData){
311    window.alert('getServicesStatusFailure incomming');
312    window.alert('getServicesStatusFailure feature: ' + serviceData);
313}
314
315//Service Status handler
316MailArchiver.prototype.getServicesStatus = function(obj){
317    //window.alert('em getServicesStatus obj.enabled = ' + obj.enabled + '\nArchiveServices.enabled = ' + ArchiveServices.enabled + '\nArchiveServices = ' + ArchiveServices);
318    try{
319        //window.alert('on try 01');
320        expresso_mail_archive.service_count_tryouts++;
321        //window.alert('service_count_tryouts = ' + expresso_mail_archive.service_count_tryouts + '\nservice_count = ' + expresso_mail_archive.service_count);
322       
323        if((expresso_mail_archive.service_count_tryouts - expresso_mail_archive.service_count) > 1){
324            //window.alert('problema -> deve desligar');
325            expresso_mail_archive.DeactivateResources(expresso_mail_archive);           
326        }
327        //else
328            //window.alert('ok');
329       
330        var fooArc = new web_service_mailarchiver_serpro__ArchiveServices();
331        fooArc.url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/arcserv/ArchiveServices";
332        //window.alert('typeof(fooArc) = ' + typeof(fooArc) + '\nfooArc = ' + fooArc);
333        if(fooArc){
334            try{
335                //window.alert('on try 02');
336                fooArc.getState(expresso_mail_archive.getServicesStatusOK, expresso_mail_archive.getServicesStatusFailure, "true");
337                fooArc = null;
338            }catch (e){
339                throw "Service failure status: getState";
340            }
341        }
342        else {
343            throw "No ArchiveServices object present. Sorry, but leaving now...";
344        }
345    }catch (e){
346        //window.alert('getServiceStatus exception:' + e);
347    }
348    expresso_mail_archive.counter = expresso_mail_archive.counter +1;
349}
350
351/*Restart method: re-initializes all the Mail Archive structure
352 **/
353MailArchiver.prototype.Restart = function(obj){
354    obj.SystemCheck();
355    obj.ActivateStatusListener(obj);
356    //connector.resetProgressBarText();
357    auto_refresh();
358}
359
360/*Startup method: initializes all the Mail Archive structure to work so far as possible
361 *Looks like the old 'gears_init', from Gears
362 **/
363MailArchiver.prototype.Startup = function(){
364    this.SystemCheck(); 
365}
366
367MailArchiver.prototype.serializeToExpresso = function(data){
368    return(connector.serialize(data));
369}
370
371MailArchiver.prototype.unserializeFromExpresso = function(data){
372    return(connector.unserialize(data));
373}
374
375
376MailArchiver.prototype.CreateMessageList = function(msg_list){
377    //window.alert('criando messagelist de arquivamento.');
378   
379//    for(var j=0; j<expresso_mail_archive.messageslisted.length; j++){
380//        window.alert('\nAnswered = ' + expresso_mail_archive.messageslisted[j]["Answered"] + '\nFlagged = ' + expresso_mail_archive.messageslisted[j]["Flagged"] + '\nUnseen = ' + expresso_mail_archive.messageslisted[j]["Unseen"] + '\nDraft = ' + expresso_mail_archive.messageslisted[j]["Draft"]);
381//    }
382   
383    if((msg_list != null) && (msg_list != "") && (msg_list != " ")){
384        if (expresso_mail_archive.message_list.length == 0){
385            //Get all the messages ids by pass at msgs_id to "message_list" object array propertie - if more than one exists
386            if(msg_list.indexOf(',') != -1){
387                var tmp_list = msg_list.split(',');
388                for(var i=0; i < tmp_list.length; i++){
389                    expresso_mail_archive.message_list.push(tmp_list[i]);
390                }
391            }
392           
393            //Push message list to process the only one
394            else {
395                //window.alert('testando marcadores default...\n->Answered = ' +expresso_mail_archive.messageslisted[i]["Answered"] + '\n->Unseen = '+expresso_mail_archive.messageslisted[i]["Unseen"]);
396                expresso_mail_archive.message_list.push(msg_list);
397            }
398        }
399    }
400    //msg_list is corrupted. aborting population
401    else expresso_mail_archive.message_list = new Array();
402}
403
404
405//Archive Operation
406MailArchiver.prototype.Archive = function(source_folder,destination_folder,msgs_id){
407    //window.alert('tentando arquivar a mensagem [' + msgs_id + '], do folder ['+source_folder+'] para a pasta destino ['+destination_folder+']');
408    //modal('archive_queue');
409   
410    try{
411        //Sets the folders properties: destination and origin
412        expresso_mail_archive.folder_origin = source_folder;
413        expresso_mail_archive.CreateMessageList(msgs_id);
414        expresso_mail_archive.isArchiveOperation = true;
415        var tagsHandler = function(data){
416            if(data){
417                var datah = eval(data);
418                //window.alert('unseen = ' +datah["unseen"] + '\nrecent = ' + datah["recent"] + '\nflagged = ' + datah["flagged"] + '\ndraft = ' + datah["draft"] + '\nanswered = ' + datah["answered"] + '\ndeleted = ' + datah["deleted"] + '\nforwarded = ' + datah["forwarded"]);
419                expresso_mail_archive.taglist = datah;
420                //Sets the message counter and busy state
421                if(expresso_mail_archive.isbusy == false){
422                    expresso_mail_archive.total_messages = expresso_mail_archive.message_list.length;
423                    expresso_mail_archive.isbusy =  true;
424                }
425           
426                var fcaption = "";
427               
428                if(destination_folder.substr(0,5) == 'local'){
429                    expresso_mail_archive.folder_destination = destination_folder.replace("local_messages_","");
430                }
431                else{
432                    expresso_mail_archive.folder_destination = destination_folder;
433                }
434               
435                if(!expresso_mail_archive.archivefolder){
436                    expresso_mail_archive.getFolderInfo(expresso_mail_archive.folder_destination);
437                    if(typeof(expresso_mail_archive.folder) != "undefined"){
438                        //window.alert('folder.path -> ' + expresso_mail_archive.folder.path);
439                        expresso_mail_archive.archivefolder = expresso_mail_archive.folder.path;
440                        //window.alert('folder.path2 -> ' + expresso_mail_archive.folder.path);
441                    }
442                    else{
443                     //window.alert('ainda, sem folder.path');   
444                     //window.alert('testando folder.path agora ' + expresso_mail_archive.folder.path);
445                    }
446                }   
447
448                fcaption = expresso_mail_archive.archivefolder;
449                           
450                //Special folders translation
451                if (fcaption && ((fcaption.toLowerCase() == 'inbox') || (fcaption.toLowerCase() == 'outbox') || (fcaption.toLowerCase() == 'sent') || (fcaption.toLowerCase() == 'drafts') || (fcaption.toLowerCase() == 'trash')))
452                    fcaption = get_lang(fcaption);
453           
454           
455                var arch_handler = function(data){
456                    //Store the message source from Ajax request by now (string data)
457                    var js_var = new String(data);
458                    try{
459                        //Archive services needs session id, message source and destination folder
460                                                ArchiveServices.archive(expresso_mail_archive.getArchiveOperationOK, expresso_mail_archive.getArchiveOperationFailure, expresso_mail_archive.session.id, expresso_mail_archive.folder_destination, data);
461                    }
462                    catch(e){
463                        expresso_mail_archive.getFaultInfo();
464                    }
465                }
466               
467                //document.getElementById('main_title').innerHTML = get_lang('Archiving message %1 of %2 on folder %3', expresso_mail_archive.messages_processed, expresso_mail_archive.total_messages, fcaption);
468                //document.getElementById('text_archive_queue').innerHTML = get_lang('Archiving message %1 of %2 on folder %3', expresso_mail_archive.messages_processed+1, expresso_mail_archive.total_messages, fcaption);
469                cExecute("$this.exporteml.js_source_var",arch_handler,"folder="+url_decode(source_folder)+"&msgs_to_export="+expresso_mail_archive.message_list[0]);               
470            }
471            else{
472                //close_lightbox();
473                write_msg(get_lang('Archive operation error: getting online message flags fails. Achievement will not be done'),true);
474                expresso_mail_archive.archivefolder = null;
475            }
476        }
477
478       if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')){
479
480            //Get all tags from current archiving message
481           if(!expresso_mail_archive.folder_origin){
482                var aux1_folder = expresso_mail_archive.message_list[0].split(';')[0];
483                var aux1_msg_number = expresso_mail_archive.message_list[0].split(';')[1];
484            }
485            else{
486                var aux1_folder = expresso_mail_archive.folder_origin;
487                var aux1_msg_number = expresso_mail_archive.message_list[0];
488            }
489            //var pardata = "&folder=" + url_encode(expresso_mail_archive.folder_origin)+ "&msg_number="+ expresso_mail_archive.message_list[0];
490            var pardata = "&folder=" + url_encode(aux1_folder)+ "&msg_number="+ aux1_msg_number;
491            cExecute("$this.imap_functions.get_msg_flags", tagsHandler, pardata);
492        }
493        else throw('Archive operation error: message list stack is empty');
494    }
495    catch(e){
496        //window.alert(get_lang("Archive error: %1", (e.description)?e.description:e));
497                expresso_mail_archive.getFaultInfo();
498    }
499}
500
501//Archive callback OK
502MailArchiver.prototype.getArchiveOperationOK = function(status_message){
503    //message must be tagged
504    var arcid = status_message.getReturn().getId();
505    var tlist = expresso_mail_archive.pattern.tagConfig(expresso_mail_archive.taglist, arcid, 0);
506    if(tlist != null){
507        try{
508            expresso_mail_archive.drawdata = null //removes any draw parameter to archive msgs
509            ArchiveServices.tagMessages(expresso_mail_archive.tagMessagesOperationOK, expresso_mail_archive.tagMessagesOperationFailure, expresso_mail_archive.session.id, tlist);
510        }catch (e){
511            expresso_mail_archive.getFaultInfo();
512        }
513    }
514   
515    //if user preference is setted to move messages, here, whe will call a delete message at mailserver
516    if(preferences.keep_archived_messages == 0){
517        proxy_mensagens.delete_msgs(expresso_mail_archive.folder_origin,expresso_mail_archive.message_list[0],null,false,true);
518    }else{
519        if (Element("check_box_message_" + expresso_mail_archive.message_list[0])) {
520            Element("check_box_message_" + expresso_mail_archive.message_list[0]).checked = false;
521            remove_className(Element(expresso_mail_archive.message_list[0]), 'selected_msg');
522        }
523    }
524
525    //archivement allready done, update controll data and interface
526    expresso_mail_archive.messages_processed++;
527    if(expresso_mail_archive.message_list.length > 1){
528       write_msg(get_lang("Message %1 of %2 successfully archived", expresso_mail_archive.messages_processed, expresso_mail_archive.total_messages));
529       expresso_mail_archive.message_list.shift();
530       expresso_mail_archive.Archive(expresso_mail_archive.folder_origin, expresso_mail_archive.folder_destination, expresso_mail_archive.message_list);
531    }
532    else{
533        write_msg(get_lang("All done. End of archive messages operation"));
534        expresso_mail_archive.resetObject();
535        expresso_mail_archive.archivefolder = null;
536        window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);       
537        connector.purgeCache();
538        //ttreeBox.name_folder = "local_" + expresso_mail_archive.currentfolder;
539        //ttreeBox.name_folder = "local_inbox";
540        draw_tree_local_folders();
541        //ttreeBox.update_folder(true);   
542        expresso_mail_archive.isArchiveOperation = false;
543    }
544    //close_lightbox();
545}
546//Archive callback Fail
547MailArchiver.prototype.getArchiveOperationFailure = function(error_message){
548    window.alert('Hi! getArchiveOperationFailure comes with ' + error_message.getReturn());
549    window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
550}
551
552/**
553 *move Folder
554 *
555 *@author Thiago Rossetto Afonso [thiago@prognus.com.br]
556 *
557 *@param folder_to_move Current folder that will be moved to another folder
558 *@param folder_to Folter that will receive the new folder
559 */
560MailArchiver.prototype.moveFolder = function(folder_to_move, folder_to){
561    try{
562        connector.showProgressBar();
563        ArchiveServices.moveFolder(expresso_mail_archive.moveFolderOK, expresso_mail_archive.moveFolderFailure, expresso_mail_archive.session.id, folder_to_move, folder_to);
564    }catch(e){
565        expresso_mail_archive.getFaultInfo();
566    }
567}
568MailArchiver.prototype.moveFolderOK = function(message){
569    write_msg(get_lang("Your folder was moved!"));
570}
571MailArchiver.prototype.moveFolderFailure = function(error_message){
572    alert("Error: " + error_message.getReturn());
573}
574
575
576
577
578/**
579 *Unarchieve Message
580 *
581 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
582 *
583 *@param folder Original Folder of the message
584 *@param new_folder The new folder of the message
585 *@param msgs_number id of the messages
586 */
587MailArchiver.prototype.unarchieve = function (folder, new_folder, msgs_number){
588    try{
589        write_msg(get_lang("Starting to unarchive messages"));
590        expresso_mail_archive.isArchiveOperation = true;
591        if(currentTab.toString().indexOf("_r") != -1){
592            msgs_number = currentTab.toString().substr(0,currentTab.toString().indexOf("_r"));
593        }
594
595        if(!msgs_number)
596            msgs_number = get_selected_messages();       
597               
598        if (parseInt(msgs_number) > 0 || msgs_number.length > 0){       
599            expresso_mail_archive.message_list = new Array();
600            expresso_mail_archive.CreateMessageList(msgs_number);
601            if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
602                expresso_mail_archive.unarchivecounter = 0;
603                expresso_mail_archive.unarchive_error_counter=0;
604                expresso_mail_archive.getFolderInfo(folder.replace("local_messages_",""));
605                expresso_mail_archive.unarchievefolder = expresso_mail_archive.folder.name;
606                (new_folder != null)?expresso_mail_archive.unarchievenewfolder = new_folder:expresso_mail_archive.unarchievenewfolder='INBOX';
607               
608                expresso_mail_archive.unarchieveHandler();
609               
610                if(currentTab.toString().indexOf("_r") != -1){
611                    delete_border(currentTab,'false'); 
612                }
613            }
614            else{
615                write_msg(get_lang('No selected message.'));
616            }
617        }                               
618        else
619            write_msg(get_lang('No selected message.'));
620    }
621    catch (e){
622        write_msg(get_lang('Unarchive error: ' + e));
623    }
624}
625
626/**
627 *
628 *Unarchieve Message Handler
629 *
630 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
631 *
632 **/
633MailArchiver.prototype.unarchieveHandler = function(){
634    try{
635        var email = mail_archive_protocol+'://'+mail_archive_host+':'+mail_archive_port+'/mail/' + expresso_mail_archive.session.id +'/'+ expresso_mail_archive.folder.path + '/'+ expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter] + '.eml';   
636   
637        //Creates a new object to unarchive messages. It's a CXF Add-on CORS component
638        var UnarchiveReqHandler = new cxf_cors_request_object();
639        UnarchiveReqHandler.init();
640
641        //Both XDomainRequest and XMLHttpRequest L2 supports onload event
642        UnarchiveReqHandler.handler.onload = function(){           
643            for (var w=0; w < expresso_mail_archive.messageslisted.length; w++){
644                               
645                if(expresso_mail_archive.messageslisted[w]["msg_number"] == expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter]){
646                    var timestamp = expresso_mail_archive.messageslisted[w]["timestamp"];
647                   
648                    //Get local tagged message data
649                    var flags = new String("");
650                   
651                    //Forwarded is special one: marks as "answered" and "draft"
652                    if(expresso_mail_archive.messageslisted[w]["Forwarded"]){
653                        if(expresso_mail_archive.messageslisted[w]["Forwarded"] == 'F')
654                            flags += 'A:X'+':';                                 
655                    }
656                    else{
657                        //Answered tag
658                        if(expresso_mail_archive.messageslisted[w]["Answered"])
659                            if(expresso_mail_archive.messageslisted[w]["Answered"] == 'A')
660                                flags += 'A'+':';
661                            else
662                                flags += ':';
663                        else
664                            flags += ':';                   
665
666                        //Draft tag
667                        if(expresso_mail_archive.messageslisted[w]["Draft"])
668                            if(expresso_mail_archive.messageslisted[w]["Draft"] == 'X')
669                                flags += 'D'+':';                   
670                            else
671                                flags += ':';
672                        else
673                            flags += ':';
674                    }
675                   
676                    //Flagged tag
677                    if(expresso_mail_archive.messageslisted[w]["Flagged"])
678                        if(expresso_mail_archive.messageslisted[w]["Flagged"] == 'F')
679                            flags += 'F'+':';                                       
680                        else
681                            flags += ':';
682                    else
683                        flags += ':';
684                   
685                    //Unseen tag
686                    if(expresso_mail_archive.messageslisted[w]["Unseen"])
687                        if(expresso_mail_archive.messageslisted[w]["Unseen"] == 'U')
688                            flags += 'U';     
689                        else
690                            flags += '';
691                    else
692                        flags += '';
693                   
694                    //Imap tag hash id
695                    flags += "#@#@#@";                   
696                   
697                    break;
698                }
699            }
700            var id = expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter];
701            var source =  encodeURIComponent(UnarchiveReqHandler.handler.responseText) + "#@#@#@";
702            var params =
703            "&folder="      + escape(expresso_mail_archive.unarchievenewfolder) +
704            "&source="      + source +
705            "&timestamp="   + timestamp +
706            "&madata=true"  +
707            "&flags="       + flags +
708            "&id="          + id;
709       
710            var handler_unarchive = function(data){
711                expresso_mail_archive.unarchieveController(data);
712            }
713            write_msg(get_lang('Unarchiving message %1 of %2', (expresso_mail_archive.unarchivecounter + 1), expresso_mail_archive.message_list.length));
714            cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params);
715        }
716       
717        UnarchiveReqHandler.handler.open("GET", email, true);
718        if(UnarchiveReqHandler.handler.overrideMimeType){
719            UnarchiveReqHandler.handler.overrideMimeType("message/rfc822; charset=windows-1252");
720        }
721   
722        UnarchiveReqHandler.handler.send();
723    }
724    catch(e){
725        write_msg(get_lang('Unarchive error: ' + e));
726    }
727}
728
729/**
730 *
731 *Unarchieve Message Controller
732 *
733 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
734 *
735 **/
736MailArchiver.prototype.unarchieveController = function(data){
737    expresso_mail_archive.unarchivecounter++;
738   
739    if (data)
740    {
741        if (data.error != "")
742        {
743            expresso_mail_archive.unarchive_error_counter++;
744        }
745       
746        if (data.archived && preferences.keep_archived_messages == "0")
747        {
748            // apaga
749            expresso_mail_archive.deleteMessages(data.archived[0]);
750        }
751       
752    }
753
754    if (expresso_mail_archive.unarchivecounter < expresso_mail_archive.message_list.length){
755        expresso_mail_archive.unarchieveHandler();
756    }
757    else
758    {
759        if (expresso_mail_archive.unarchive_error_counter == 0)
760        {   
761            if (expresso_mail_archive.message_list.length==1){
762                write_msg(get_lang('Message successfully unarchived'));
763            }
764            else{
765                write_msg(get_lang('Messages successfully unarchived'));
766            }
767        }
768        else
769        {
770            if (expresso_mail_archive.message_list.length==1){
771                write_msg(get_lang("Coudn't unarchive message"));
772            }
773            else if (expresso_mail_archive.unarchive_error_counter == expresso_mail_archive.message_list.length)
774            {
775                write_msg(get_lang('No messages were unarchived'));
776            }
777            else{
778                write_msg(get_lang("Some messages weren't successfully unarchived"));
779            }
780               
781        }
782        //clear message list
783        expresso_mail_archive.message_list = new Array();
784        expresso_mail_archive.isArchiveOperation = false;
785    }
786}
787
788/**
789 *Archieve Delete Message
790 *
791 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
792 *
793 *@param msgs_number Unique identification of the message
794 */
795MailArchiver.prototype.deleteMessages = function(msgs_number){
796    try{
797        // This is necessary 'couse we can get a delete operation while an unarchive operation
798        // is still executing
799        expresso_mail_archive._temp_list = expresso_mail_archive.message_list;
800        expresso_mail_archive.message_list = new Array();
801       
802        expresso_mail_archive.CreateMessageList(msgs_number);
803        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
804            ArchiveServices.deleteMessages(expresso_mail_archive.deleteMessagesOperationOK,
805                                           expresso_mail_archive.deleteMessagesOperationFailure,
806                                           expresso_mail_archive.session.id,
807                                           expresso_mail_archive.message_list);
808        }
809        else{
810            write_msg(get_lang('No selected message.'));
811        }
812    }
813    catch (e){
814        window.alert('Delete error: ' + e);
815    }
816}
817
818/**
819 *Archieve Delete Message Ok
820 *
821 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
822 *
823 */
824MailArchiver.prototype.deleteMessagesOperationOK = function(){
825/*    var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders'};
826    expresso_mail_archive.drawdata = drawinginfo;
827    expresso_mail_archive.drawFolderTree();
828    expresso_mail_archive.listMessages();
829    */
830    connector.purgeCache();
831    //ttreeBox.update_folder(true);
832    if(!expresso_mail_archive.isArchiveOperation){
833        if(expresso_mail_archive.message_list.length > 1){
834            write_msg(get_lang("The messages were deleted."));
835        }else{
836            write_msg(get_lang("The message was deleted."));
837        }
838    }
839    expresso_mail_archive.update_counters = true;
840    expresso_mail_archive.messageslisted = new Array();
841    expresso_mail_archive.message_list = new Array();
842
843    expresso_mail_archive.currentfolder = folder.replace("local_messages_","");
844
845    expresso_mail_archive.listMessages(expresso_mail_archive.currentfolder);
846
847    // This is necessary 'couse we can get a delete operation while an unarchive operation
848    // is still executing
849    expresso_mail_archive.message_list = expresso_mail_archive._temp_list;
850    expresso_mail_archive._temp_list = null;
851}
852
853/**
854 *Archieve Delete Message Operation Failure
855 *
856 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
857 *
858 */
859MailArchiver.prototype.deleteMessagesOperationFailure = function(error_message){
860    if(expresso_mail_archive.message_list.length > 1){
861        write_msg(get_lang("Error deleting messages.") + ' ' + error_message.getReturn());
862    }else{
863        write_msg(get_lang("Error deleting message.") + ' ' + error_message.getReturn());
864    }
865   
866    // This is necessary 'couse we can get a delete operation while an unarchive operation
867    // is still executing
868    expresso_mail_archive.message_list = expresso_mail_archive._temp_list;
869    expresso_mail_archive._temp_list = null;
870}
871
872/**
873 *Move message
874 *
875 *@param folder Folder where the message will be moved
876 *@param msgs_number Unique Id of the message
877 *
878 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
879 *
880 */
881MailArchiver.prototype.moveMessages = function(folder, msgs_number){   
882    try{
883        write_msg(get_lang("Starting to move messages"));
884
885        expresso_mail_archive.CreateMessageList(msgs_number);
886        expresso_mail_archive.folder_destination = folder;
887        //window.alert('invocando o moveMessages com lista = ' + expresso_mail_archive.message_list.length + ' e folder destino =' + folder + '.\nFolder corrente ï¿œ ' + expresso_mail_archive.currentfolder);
888       
889        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
890            expresso_mail_archive.total_messages = expresso_mail_archive.message_list.length;
891            expresso_mail_archive.moveMessagesHandler();           
892        }
893        else{
894            write_msg(get_lang('No selected message.'));
895        }
896    }
897    catch (e){
898        expresso_mail_archive.getFaultInfo();
899    }
900}
901
902MailArchiver.prototype.moveMessagesHandler = function(){
903    expresso_mail_archive.currentfolder = folder.substr(6, folder.length);
904
905    if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
906        write_msg(get_lang('Moving message %1 of %2', expresso_mail_archive.messages_processed, expresso_mail_archive.total_messages));
907        ArchiveServices.moveMessages(expresso_mail_archive.moveMessagesOperationOK,
908                                     expresso_mail_archive.moveMessagesOperationFailure,
909                                     expresso_mail_archive.session.id,
910                                     expresso_mail_archive.folder_destination,
911                                     new Array(expresso_mail_archive.message_list[parseInt(expresso_mail_archive.messages_processed)])
912                                     );
913    }
914    else{
915        window.alert('Moving handler messagelist caught:\n ' + expresso_mail_archive.message_list.length);       
916    }   
917}
918
919/**
920 *Move Message Ok
921 *
922 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
923 *
924 */
925MailArchiver.prototype.moveMessagesOperationOK = function(){
926    //archivement allready done, update controll data and interface
927    expresso_mail_archive.messages_processed++;
928   
929    if(parseInt(expresso_mail_archive.messages_processed) < parseInt(expresso_mail_archive.total_messages)){
930       window.setTimeout(expresso_mail_archive.moveMessagesHandler,1);       
931    }
932    else{
933        write_msg(get_lang("All done. Message(s) moved successfully"));
934       
935        //Tag messages moved
936        for(var i=0; i<expresso_mail_archive.message_list.length; i++){
937            var tlist = expresso_mail_archive.pattern.tagConfig(expresso_mail_archive.taglist, expresso_mail_archive.message_list[i], 0);
938            if(tlist != null){
939                try{
940                    expresso_mail_archive.drawdata = null;
941                    ArchiveServices.tagMessages(expresso_mail_archive.tagMessagesOperationOK, expresso_mail_archive.tagMessagesOperationFailure, expresso_mail_archive.session.id, tlist);
942                }
943                catch(e){
944                    expresso_mail_archive.getFaultInfo();
945                }
946            }           
947        }         
948       
949        expresso_mail_archive.update_counters = true;
950        expresso_mail_archive.messageslisted = new Array();
951        expresso_mail_archive.message_list = new Array(); 
952
953        expresso_mail_archive.getFolderInfo(expresso_mail_archive.currentfolder);
954        expresso_mail_archive.getFolderInfo(expresso_mail_archive.folder_destination);
955        expresso_mail_archive.listMessages(expresso_mail_archive.currentfolder);
956             
957        expresso_mail_archive.resetObject();
958    }
959}
960
961/**
962 *Move Message Failure
963 *
964 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
965 *
966 */
967MailArchiver.prototype.moveMessagesOperationFailure = function(error_message){
968    if(expresso_mail_archive.message_list.length > 1){
969        write_msg(get_lang("Error moving messages.") + ' ' + error_message.getReturn());
970    }else{
971        write_msg(get_lang("Error moving message.") + ' ' + error_message.getReturn());
972    }
973}
974
975
976//getFolderList Operation
977MailArchiver.prototype.getFoldersList = function(basefolder){   
978    try{
979        connector.showProgressBar();
980        //window.alert('no expresso_mail_archive.getFoldersList com basefolder = ' + basefolder);
981        if(basefolder == 'local_root')
982            basefolder = "";
983        //window.alert('folderlist com basefolder = ' + basefolder);
984        //ArchiveServices.listFolders(expresso_mail_archive.getFoldersListOperationOK, expresso_mail_archive.getFoldersListOperationFailure, sessid, basefolder);
985        ArchiveServices.listFolders(expresso_mail_archive.getFoldersListOperationOK, expresso_mail_archive.getFoldersListOperationFailure, expresso_mail_archive.session.id, basefolder);
986       
987    }
988    catch (e){
989        expresso_mail_archive.getFaultInfo();
990    }
991}
992
993//getFolderList callback OK
994MailArchiver.prototype.getFoldersListOperationOK = function(folderlist){
995    //Internal variable used to map all XML data return from WS invokated
996    var lfolders = new Array();
997
998   
999    //Mapping XML data to a handler data structure
1000    if(folderlist.getReturn().length > 0){
1001        var lfolders = new Array();
1002        for(i=0; i<folderlist.getReturn().length; i++){
1003            (folderlist.getReturn()[i].getFolderCount() > 0 ) ? folderChild = 1 : folderChild = 0;
1004
1005            //Store folder data at this format: {folder name, number of messages contained, folder has child nodes, folder id, folder parent id, folder full path}
1006            //var folderData = new Array(folderlist.getReturn()[i].getName(), folderlist.getReturn()[i].getMessageCount(), folderChild, folderlist.getReturn()[i].getId(), folderlist.getReturn()[i].getParentId(), folderlist.getReturn()[i].getPath());
1007            var folderData = {name: folderlist.getReturn()[i].getName(), messages: folderlist.getReturn()[i].getMessageCount(), haschild: folderChild, id: folderlist.getReturn()[i].getId(), parentid: folderlist.getReturn()[i].getParentId(), path: folderlist.getReturn()[i].getPath(), unseen: folderlist.getReturn()[i].getUnseenCount()};
1008            //window.alert('folder ' + folderData.name + ' tem ' + folderData.messages + ' mensagens, sendo ' + folderData.unseen + ' nï¿œo lidas');
1009            lfolders.push(folderData);
1010        }
1011
1012        //Sets folders property at main object
1013        expresso_mail_archive.folders = lfolders;
1014       
1015        //Sets current folder, only if no one is setted
1016        //if(expresso_mail_archive.currentfolder == null){
1017            if(expresso_mail_archive.folders[0]["parentid"] == "home"){ // change from "" to "home"(12/12/2011)
1018                expresso_mail_archive.currentfolder = 'local_root';
1019            }
1020            else
1021                expresso_mail_archive.currentfolder = expresso_mail_archive.folders[0]["parentid"];
1022        //}
1023       
1024       
1025        //Folders dumping :)
1026        /*var strFolders = '---';
1027        for (var w=0; w < expresso_mail_archive.folders.length; w++){
1028            strFolders += '\nFolder ' + w + ' -->';
1029            for (x in expresso_mail_archive.folders[w]){
1030                strFolders += '\n----------' + x + ':= ' + expresso_mail_archive.folders[w][x];
1031            }
1032            strFolders += '\n<---';
1033        }
1034        strFolders += '\n---';
1035        alert(lfolders.length + ' folders mapeados, com default = ' + expresso_mail_archive.currentfolder + '\nfolders list:\n\n' + strFolders);
1036        */
1037        //window.alert('foldersListOperationOK com drawdata:\n' + expresso_mail_archive.drawdata);
1038        //If something UI related have been flagged, handle it
1039        if (expresso_mail_archive.drawdata){
1040            //window.alert('com drawdata e treeName = ' + expresso_mail_archive.drawdata.treeName);
1041            expresso_mail_archive.drawFolderTree();
1042        }
1043    } else {
1044        expresso_mail_archive.folders = 0;
1045    }
1046    connector.hideProgressBar();
1047}
1048
1049//getFolderList callback Fail
1050MailArchiver.prototype.getFoldersListOperationFailure = function(error, http_msg){
1051    window.alert('List folders mistake:' + error + '\nhttp_error = ' + http_msg);
1052    connector.hideProgressBar();
1053}
1054
1055//drawFolderTree operation, if requested to
1056MailArchiver.prototype.drawFolderTree = function(){ 
1057    var localBaseName  = 'local_';
1058    var objectTree = expresso_mail_archive.drawdata.treeObject;
1059    var evalobjectTree = (typeof(expresso_mail_archive.drawdata.treeObject) == 'object') ? expresso_mail_archive.drawdata.treeObject: eval( '(' + expresso_mail_archive.drawdata.treeName + ')');
1060       
1061    if((expresso_mail_archive.drawdata.treeName == 'search_folders') && (Element('dftree_search_folders')))
1062        evalobjectTree = folders_tree;
1063    else{
1064        if((expresso_mail_archive.drawdata.treeName == 'folders_tree') && (Element('dftree_folders_tree')))
1065            evalobjectTree = folders_tree;
1066    }
1067       
1068    //Add nodes to tree   
1069    if(typeof(evalobjectTree) == 'object'){
1070        //window.alert('caiu pra dentro, com ' + expresso_mail_archive.folders.length + ' folders.');
1071        evalobjectTree._drawn = true;
1072        if(expresso_mail_archive.folders.length > 0){
1073            for(i=0; i<expresso_mail_archive.folders.length; i++){
1074                var folder_caption;
1075                //window.alert('iterando nodo ' + expresso_mail_archive.folders[i]["name"]);
1076           
1077                //Special folders treatment: Inbox, Outbox, Drafts, Sent and Trash folders               
1078                if((expresso_mail_archive.folders[i]["name"] == 'Inbox') || (expresso_mail_archive.folders[i]["name"] == 'Outbox') || (expresso_mail_archive.folders[i]["name"] == 'Drafts') || (expresso_mail_archive.folders[i]["name"] == 'Sent') || (expresso_mail_archive.folders[i]["name"] == 'Trash')){
1079                    folder_caption = get_lang(expresso_mail_archive.folders[i]["name"]);
1080                }
1081                else{
1082                    folder_caption = expresso_mail_archive.folders[i]["name"];
1083                }
1084               
1085                var onClickVar = '';                               
1086                if((evalobjectTree.name != "folders_tree") && (evalobjectTree.name != "search_folders")){
1087                    onClickVar =  "change_folder('"+ localBaseName + expresso_mail_archive.folders[i]["id"] +"','"+ localBaseName + expresso_mail_archive.folders[i]["id"]+"', '" + expresso_mail_archive.drawdata.treeName + "')";
1088                    if(expresso_mail_archive.folders[i]["unseen"] != "0")
1089                        folder_caption = folder_caption + '<font style=color:red>&nbsp(</font><span id="dftree_local_'+expresso_mail_archive.folders[i]["id"]+'_unseen" style=color:red>'+expresso_mail_archive.folders[i]["unseen"]+'</span><font style=color:red>)</font>'
1090                }
1091     
1092                var n_demo = new dNode({id: localBaseName + expresso_mail_archive.folders[i]["id"], caption: folder_caption, onClick: onClickVar, plusSign:expresso_mail_archive.folders[i]["haschild"]});
1093                //var n_demo = new dNode({id: localBaseName + expresso_mail_archive.folders[i]["name"], caption: folder_caption, onClick: "change_folder('"+ localBaseName + expresso_mail_archive.folders[i]["name"] +"','"+ localBaseName + expresso_mail_archive.folders[i]["name"]+"', '" + expresso_mail_archive.drawdata.treeName + "')", plusSign:expresso_mail_archive.folders[i]["haschild"]});
1094           
1095                //Adjust the id node names
1096                if(expresso_mail_archive.currentfolder){
1097                    if(expresso_mail_archive.currentfolder.substr(0,5) != 'local'){
1098                        evalobjectTree.add(n_demo, localBaseName + expresso_mail_archive.currentfolder);
1099                    }
1100                    else{
1101                        evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
1102                    }
1103                }
1104                else {
1105                    expresso_mail_archive.currentfolder = 'local_root';
1106                    evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
1107                }           
1108            }
1109        }
1110        //Set special folders icons   
1111        if (document.getElementById('llocal_senttree_folders')){
1112            document.getElementById('llocal_senttree_folders').style.backgroundImage="url(../phpgwapi/templates/"+template+"/images/foldertree_sent.png)";
1113        }
1114        if (document.getElementById('llocal_trashtree_folders')){
1115            document.getElementById('llocal_trashtree_folders').style.backgroundImage="url(../phpgwapi/templates/"+template+"/images/foldertree_trash.png)";
1116        }
1117        if (document.getElementById('llocal_draftstree_folders')){
1118            document.getElementById('llocal_draftstree_folders').style.backgroundImage="url(../phpgwapi/templates/"+template+"/images/foldertree_draft.png)";
1119        }
1120        if (document.getElementById('llocal_outboxtree_folders')){
1121            document.getElementById('llocal_outboxtree_folders').style.backgroundImage="url(../phpgwapi/templates/"+template+"/images/foldertree_sent.png)";
1122        }         
1123    }
1124    else {
1125        //does nothing
1126    }
1127}
1128
1129//getFaultInfo operation
1130MailArchiver.prototype.getFaultInfo = function(){
1131    try{
1132        //ArchiveServices.getFaultInfo(expresso_mail_archive.getFaultInfoOperationOK, expresso_mail_archive.getFaultInfoOperationFailure, sessid);
1133         ArchiveServices.getFaultInfo(expresso_mail_archive.getFaultInfoOperationOK, expresso_mail_archive.getFaultInfoOperationFailure, expresso_mail_archive.session.id);
1134         connector.hideProgressBar();
1135    }   
1136    catch(e){
1137        if (!expresso_mail_archive.enabled)
1138            write_msg(get_lang('MailArchiver does not seems to be running or installed at this workstation, local messages are disabled. Check it out!'),false);
1139        else{
1140            window.clearInterval(expresso_mail_archive.timer);
1141            write_msg(get_lang('There is something wrong with MailArchiver environment. Contact you support'), false);
1142            expresso_mail_archive.enabled = false;
1143            expresso_mail_archive.turnOffLocalTreeStructure();
1144        }
1145        connector.hideProgressBar();
1146    }
1147}
1148
1149//getFaultInfo callback OK
1150MailArchiver.prototype.getFaultInfoOperationOK = function(faultinfo){
1151    try{
1152        write_msg(get_lang('MailArchiver remote service reports the following error:', false) + faultinfo.getReturn().getSoapFaultString());
1153    } catch(e){
1154        write_msg(get_lang('The archive service reports a unknown error. Try to refresh your browser screen', false));
1155    }
1156    expresso_mail_archive.resetObject();
1157    expresso_mail_archive.archivefolder = null;
1158    window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);       
1159    connector.purgeCache();
1160    expresso_mail_archive.turnOffLocalTreeStructure();
1161}
1162
1163//getFaultInfo callback Fail
1164MailArchiver.prototype.getFaultInfoOperationFailure = function(errorCode, errorDesc){
1165    try{
1166        write_msg(get_lang('SoapFault capture fails at:' + errorCode + ' | ' + errorDesc, false));
1167    } catch(e){
1168        write_msg(get_lang('Service error mapping', false));
1169    }   
1170}
1171
1172//createFolder operation
1173MailArchiver.prototype.createFolder = function(parentFolder, folderName){
1174   
1175    try{
1176        //ArchiveServices.createFolder(expresso_mail_archive.createFolderOperationOK, expresso_mail_archive.createFolderOperationFailure, sessid, parentFolder, folderName);
1177        ArchiveServices.createFolder(expresso_mail_archive.createFolderOperationOK, expresso_mail_archive.createFolderOperationFailure, expresso_mail_archive.session.id, parentFolder, folderName);
1178    }
1179    catch (e){
1180        expresso_mail_archive.getFaultInfo();
1181    }
1182   
1183}
1184
1185//createFolder callback OK
1186MailArchiver.prototype.createFolderOperationOK = function (folderObject){
1187    //window.alert('callback de createfolderoperationok');
1188    draw_tree_local_folders();
1189    //expresso_mail_archive.drawdata.treeObject._drawn = true;
1190    //ttreeBox.update_folder();   
1191}
1192
1193//createFolder callback Fail
1194MailArchiver.prototype.createFolderOperationFailure = function (message){
1195    window.alert('Folder creation fails...\n->' + message.getReturn());
1196}
1197
1198//deleteFolder operation
1199MailArchiver.prototype.deleteFolder = function(folderName){
1200    try{
1201        ArchiveServices.deleteFolder(expresso_mail_archive.deleteFolderOperationOK, expresso_mail_archive.deleteFolderOperationFailure, expresso_mail_archive.session.id, folderName, true);
1202    }
1203    catch (e){
1204        expresso_mail_archive.getFaultInfo();
1205    }
1206   
1207}
1208
1209//deleteFolder callback OK
1210MailArchiver.prototype.deleteFolderOperationOK = function (folderObject){
1211    write_msg(get_lang("The local folder \"%1\" was successfully removed", expresso_mail_archive.drawdata.folderName));
1212    connector.purgeCache();
1213    ttreeBox.name_folder = "root";
1214    ttreeBox.update_folder();
1215    draw_tree_local_folders();
1216    ttreeBox.update_folder();   
1217}
1218
1219//deleteFolder callback Fail
1220MailArchiver.prototype.deleteFolderOperationFailure = function (message){
1221    expresso_mail_archive.getFaultInfo();
1222}
1223
1224//renameFolder operation
1225MailArchiver.prototype.renameFolder = function(folderId, newFolderName){
1226    try{
1227        //ArchiveServices.renameFolder(expresso_mail_archive.renameFolderOperationOK, expresso_mail_archive.renameFolderOperationFailure, sessid, folderId, newFolderName);
1228        ArchiveServices.renameFolder(expresso_mail_archive.renameFolderOperationOK, expresso_mail_archive.renameFolderOperationFailure, expresso_mail_archive.session.id, folderId, newFolderName);
1229    }
1230    catch (e){
1231        expresso_mail_archive.getFaultInfo();
1232    }
1233   
1234}
1235
1236//renameFolder callback OK
1237MailArchiver.prototype.renameFolderOperationOK = function (returnService){
1238    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
1239    evalobjectTree.update_folder();
1240}
1241
1242//renameFolder callback Fail
1243MailArchiver.prototype.renameFolderOperationFailure = function (ServiceFault){
1244    expresso_mail_archive.getFaultInfo();
1245}
1246
1247//getFolderInfo operation
1248MailArchiver.prototype.getFolderInfo = function (folderId){
1249    try{
1250        if(folderId == 'local_root')
1251            folderId = "";
1252        ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderInfoOperationOK, expresso_mail_archive.getFolderInfoOperationFailure, expresso_mail_archive.session.id, folderId);
1253    }
1254    catch (e){
1255        expresso_mail_archive.getFaultInfo();
1256    }     
1257}
1258
1259//getFolderInfo callback OK
1260MailArchiver.prototype.getFolderInfoOperationOK = function(returnService){
1261   var folder_info = {id : returnService.getReturn().getId(), name : returnService.getReturn().getName(), parent : returnService.getReturn().getParentId(), numfolders: returnService.getReturn().getFolderCount(), nummessages: returnService.getReturn().getMessageCount(), unseen: returnService.getReturn().getUnseenCount(), path: returnService.getReturn().getPath()};
1262   expresso_mail_archive.folder = folder_info;
1263   expresso_mail_archive.updateCounter();
1264}
1265
1266//getFolderInfo callback Fail
1267MailArchiver.prototype.getFolderInfoOperationFailure = function (ServiceFault){
1268    window.alert('getFolderInfo service fails...\n->' + ServiceFault.getReturn());
1269    expresso_mail_archive.folder_data = true;
1270}
1271
1272function foo(){
1273    var a = 0;
1274    a++;
1275}
1276
1277
1278/**
1279 *delete All Messages
1280 *
1281 *@author Thiago Rossetto Afonso [thiago@prognus.com.br]
1282 *
1283 *@param folderId - folder id to get all messages that it has
1284 */
1285
1286MailArchiver.prototype.deleteAllMessages = function(folderId){
1287    try{
1288        var objfolder = new Object();
1289        objfolder.folder = folderId;
1290
1291        var query_data = expresso_mail_archive.queryconfig.query(objfolder);
1292
1293        ArchiveServices.listMessages(expresso_mail_archive.deleteMsgsOperationOK, expresso_mail_archive.deleteMsgsOperationFailure, expresso_mail_archive.session.id, query_data);
1294    }catch(e){
1295        expresso_mail_archive.getFaultInfo();
1296    }
1297}
1298MailArchiver.prototype.deleteMsgsOperationOK = function(returnService){
1299    var msgsArray = new Array();
1300    var msgs = "";
1301    for(var i=0; i< returnService.getReturn().length; i++){
1302        msgsArray.push(returnService.getReturn()[i]._id);   
1303    } 
1304    msgs = msgsArray.join(",");
1305
1306    MailArchiver.prototype.deleteMessages(msgs);
1307}
1308MailArchiver.prototype.deleteMsgsOperationFailure = function(){
1309    alert("Your Messages weren't deleted.");
1310}
1311
1312//listMessages operation
1313//OLD local_messages.prototype.get_local_range_msgs = function(folder,msg_range_begin,emails_per_page,sort,sort_reverse,search,preview_msg_subject,preview_msg_tip) {
1314//ONLINE messages_proxy.prototype.messages_list = function(folder,msg_range_begin,emails_per_page,sort_box_type,search_box_type,sort_box_reverse,preview_msg_subject,preview_msg_tip,call_back,tree_name) {
1315//sys call = 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);
1316MailArchiver.prototype.listMessages = function(folderId){
1317    try{
1318        connector.showProgressBar();
1319        var getcurrent = get_current_folder();       
1320        //tree_folders.getNodeById(get_current_folder())._select();
1321        var folderid;
1322        if(typeof(folderId) != "undefined"){
1323            folderid = folderId;
1324        } else {
1325            folderid = this.currentfolder;   
1326        }
1327        var objfolder = new Object();
1328        objfolder.folder = folderid;
1329        //var testing_data_xml = '<?xml version="1.0" encoding="UTF-8"?><query lowerIndex="0" upperIndex="50"><folder id="'+folderid+'"/><order asc="date"/><order desc="subject"/></query>';
1330        //var testing_data_json_mapped = '{"query":{"@lowerIndex":"0", "@upperIndex":"50", "folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date", "@desc":"subject"}]}}';
1331        var query_data = expresso_mail_archive.queryconfig.query(objfolder);
1332        expresso_mail_archive.getFolderInfo(folderid);
1333        expresso_mail_archive.currentfolder = folderid;
1334       
1335
1336        //ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, sessid, query_data);
1337        ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, expresso_mail_archive.session.id, query_data);
1338    }
1339    catch (e){
1340        expresso_mail_archive.getFaultInfo();
1341    }
1342}
1343
1344//listMessages callback OK
1345MailArchiver.prototype.listMessagesOperationOK = function(returnService){
1346    var msglist = new Array();
1347    expresso_mail_archive.ServiceReturnObjectList = new Array();
1348    //window.alert('messages data\n\n' + print_r(returnService.getReturn().length));
1349    /*window.alert('Dados da mensagem:\n->From ' + returnService.getReturn()[0].getFrom()
1350                                      +'\n->To ' + returnService.getReturn()[0].getTo()
1351                                      +'\n->Subject ' + returnService.getReturn()[0].getSubject()
1352                                      +'\n->Date ' + returnService.getReturn()[0].getDate()
1353                                      +'\n->Date ' + returnService.getReturn()[0].getSize()
1354                                      +'\n->ID ' + returnService.getReturn()[0].getId());
1355    */
1356    var msg_unseen_count = 0;
1357    for(var i=0; i< returnService.getReturn().length; i++){
1358        var ExpSerialized = expresso_mail_archive.pattern.toExpressoHeader(returnService.getReturn()[i]);
1359        var msgitem = connector.unserialize(ExpSerialized);
1360        //counts unseen messages
1361        if(msgitem.Unseen == 'U')
1362            msg_unseen_count++;
1363     
1364        // correção para por no padrao certo, se nao fizer isso buga a listagem
1365        msgitem_temp = msgitem.msg_sample;
1366        msgitem.msg_sample = { "body": msgitem_temp };
1367        msglist.push(msgitem);//usando connector.unserialize sobre o header mapeado no layout abaixo
1368        expresso_mail_archive.ServiceReturnObjectList.push(returnService.getReturn()[i]); //add each one service return data into this embeded object array
1369    }
1370    var tab_counters = expresso_mail_archive.getFolderCounters();
1371   
1372    //msglist["num_msgs"] = returnService.getReturn().length;
1373    //window.alert('service return length = ' + returnService.getReturn().length + '\nfolder.nummessages = ' + expresso_mail_archive.folder.nummessages);
1374   
1375    //window.alert('folder counters:\n' + print_r(tab_counters));
1376
1377    //msglist["num_msgs"] = expresso_mail_archive.folder.nummessages;
1378    msglist["num_msgs"] = tab_counters[0];
1379    //window.alert('num msgs');
1380    //(expresso_mail_archive.folder.unseen) ? msglist["tot_unseen"] = expresso_mail_archive.folder.unseen : msglist["tot_unseen"] = 0;
1381    (tab_counters[1] != 0) ? msglist["tot_unseen"] = tab_counters[1] : msglist["tot_unseen"] = 0;
1382//    window.alert('num unseen');
1383    //window.alert('print_r\n\n' + print_r(msglist));
1384   
1385    //expresso_mail_archive.updateCounter(returnService.getReturn().length, msg_unseen_count);   
1386    expresso_mail_archive.messageslisted = msglist;
1387    expresso_mail_archive.drawdata = {messagesList:msglist};
1388    //expresso_mail_archive.drawMessagesList();
1389    //expresso_mail_archive.drawMessagesList(returnService.getReturn().length, msg_unseen_count);
1390    //expresso_mail_archive.drawMessagesList(msglist["num_msgs"], msg_unseen_count);
1391    expresso_mail_archive.drawMessagesList(msglist["num_msgs"], msglist['tot_unseen']);
1392    connector.hideProgressBar();
1393}
1394
1395//listMessages callback Fail
1396MailArchiver.prototype.listMessagesOperationFailure = function(ServiceFault){
1397    window.alert('listmessages FALHOU!\n' + ServiceFault.getReturn());
1398}
1399
1400//List all messages by folder given and set a array with all messages ids
1401MailArchiver.prototype.listAllMessagesByFolder = function(folderid){
1402    try{
1403        var query_messages = '{"query":{"folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date"}]}}';
1404        ArchiveServices.listMessages(expresso_mail_archive.listAllMessagesByFolderOperationOK, expresso_mail_archive.listAllMessagesByFolderOperationFailure, expresso_mail_archive.session.id, query_messages);
1405    }
1406    catch (e){
1407        expresso_mail_archive.getFaultInfo();
1408    }
1409}
1410
1411//listAllMessagesByFolder callback OK
1412MailArchiver.prototype.listAllMessagesByFolderOperationOK = function(returnService){
1413    var msglist = new Array();
1414    for(var i=0; i< returnService.getReturn().length; i++){
1415        msglist.push(returnService.getReturn()[i]._id);
1416    }
1417    expresso_mail_archive.allmessagesbyfolder = msglist;
1418}
1419
1420//listAllMessagesByFolder callback Fail
1421MailArchiver.prototype.listAllMessagesByFolderOperationFailure = function(ServiceFault){
1422    window.alert('listAllmessagesByFolder FALHOU!\n' + ServiceFault.getReturn());
1423}
1424
1425MailArchiver.prototype.getFolderMessagesNumber = function(){
1426    var n = 0;
1427    for(var i=0; i < expresso_mail_archive.folders.length; i++){
1428        if(expresso_mail_archive.folders[i]["id"] == expresso_mail_archive.currentfolder){
1429            n = expresso_mail_archive.folders[i]["messages"];
1430        }
1431    }
1432    return(n);
1433}
1434
1435MailArchiver.prototype.drawMessagesList = function(msgtot, msgunseen){
1436    //window.alert('no drawMessagesList com folder = ' + expresso_mail_archive.currentfolder  + '\nudatecounters = ' + expresso_mail_archive.udatecounters);
1437    var data_to_draw = expresso_mail_archive.drawdata.messagesList; 
1438    //window.alert('data to draw =  ' + data_to_draw.length + '\ndata_to_draw[0].from.full = ' + print_r(data_to_draw));
1439    //window.alert('Current folder = ' + expresso_mail_archive.currentfolder + ' com ' + expresso_mail_archive.folders.length + ' folders.');
1440    var fcaption = expresso_mail_archive.currentfolder;
1441   
1442    /*for (var w=0; w < expresso_mail_archive.folders.length; w++){
1443        //window.alert('comparando folder "' + expresso_mail_archive.folders[w]["id"] + '" com o corrente "' + expresso_mail_archive.currentfolder + '"\nEnquanto que o folder.name obtido do getfolderinfo é "' + expresso_mail_archive.folder.name + '"');
1444        if(expresso_mail_archive.folders[w]["id"] == expresso_mail_archive.currentfolder){
1445            fcaption = expresso_mail_archive.folders[w]["name"];
1446            window.alert('folder found!\n -> ' + fcaption);
1447            break;
1448        }
1449    }*/
1450   
1451    var fcaption = expresso_mail_archive.folder.name;
1452   
1453    /*window.alert('fcaption = ' + fcaption);
1454    var udate_tree_folder = expresso_mail_archive.drawdata.treefolder;
1455    window.alert('atualizar contador da ï¿œrvore : ' + udate_tree_folder);
1456    var udate_tab_folder = expresso_mail_archive.drawdata.tabfolder;
1457    window.alert('atualizar contador da tab : ' + udate_tab_folder);*/
1458    //var folder_num_msgs = expresso_mail_archive.getFolderMessagesNumber();
1459    var folder_num_msgs = expresso_mail_archive.folder.nummessages;
1460    //window.alert('num = ' + folder_num_msgs);
1461
1462    Element("border_id_0").innerHTML = "&nbsp;" + lang_folder(fcaption) + '&nbsp;<font face="Verdana" size="1" color="#505050">[<span id="new_m">&nbsp;</span> / <span id="tot_m"></span>]</font>';
1463    draw_box(data_to_draw, 'local_' + expresso_mail_archive.currentfolder, true);
1464    //draw_paging(expresso_mail_archive.drawdata.messagesList.length);
1465    //draw_paging(preferences.max_email_per_page);
1466    draw_paging(folder_num_msgs);   
1467    if(((msgtot) && (msgunseen)) || ((parseInt(msgtot)==0)&&(parseInt(msgunseen)==0))){
1468        Element('new_m').innerHTML = '<font color="RED">'+$(".tr_msg_unread").length+'</font>';
1469    }
1470    else{
1471        Element("tot_m").innerHTML = folder_num_msgs;
1472        Element('new_m').innerHTML = data_to_draw['tot_unseen'] ? '<font color="RED">'+data_to_draw['tot_unseen']+'</font>' : 0;
1473    }
1474}
1475
1476MailArchiver.prototype.getMessageHeaders = function(msgId){
1477    var msgfound = false;
1478    var headerMsg;
1479       
1480    //Get message header info, from message list operation previously invoked
1481    for (var w=0; w < expresso_mail_archive.messageslisted.length; w++){
1482        if(expresso_mail_archive.messageslisted[w]["msg_number"] == msgId){
1483            headerMsg = expresso_mail_archive.messageslisted[w];
1484            msgfound = true;
1485            break;
1486        }
1487    }
1488   
1489    //Message does not exists at default message list previouslly invoked. Then, will be tryed to get it at possible search criteria existing tab.
1490    if(!msgfound){
1491        //Try to discover if desired message is at a search local data tab
1492        if(currentTab.toString().indexOf("search_local") != -1){
1493            var msgId2 = msgId.substr(0,msgId.indexOf("_s"));           
1494            for (var w=0; w < expresso_mail_archive.search_message_list.length; w++){
1495                if(expresso_mail_archive.search_message_list[w]["msg_number"] == msgId2){
1496                    headerMsg = expresso_mail_archive.search_message_list[w];
1497                    msgfound = true;
1498                    break;
1499                }
1500            }
1501       
1502        }
1503    }
1504   
1505    //The message was found, as well the her headers
1506    if(msgfound){
1507        expresso_mail_archive.currentheaders = headerMsg;
1508        return(headerMsg);
1509    }
1510    //The message was not found   
1511    else{
1512        headerMsg = null;
1513        expresso_mail_archive.currentheaders = headerMsg;       
1514        return;
1515    }
1516}
1517
1518
1519
1520MailArchiver.prototype.getSomeMsgs = function(msgIds){
1521    try{
1522       expresso_mail_archive.getSomeMsg = new Array();
1523       for(var i=0; i < msgIds.length; i++){
1524           expresso_mail_archive.getSomeMsg.push(expresso_mail_archive.getMessageHeaders(msgIds[i]));
1525       }
1526       
1527   }catch(e){
1528
1529   }
1530}
1531
1532MailArchiver.prototype.getMessage = function(msgdata){
1533    try{
1534        if((msgdata.length <= 0) || (msgdata == null)){
1535            return;
1536        }
1537        expresso_mail_archive.currentmessage = expresso_mail_archive.getMessageHeaders(msgdata)["msg_number"];
1538        ArchiveServices.getMessageBody(expresso_mail_archive.getMessageOperationOK, expresso_mail_archive.getMessageOperationFailure, expresso_mail_archive.session.id, expresso_mail_archive.currentmessage);
1539    }
1540    catch(e){
1541        expresso_mail_archive.getFaultInfo();
1542    }
1543}
1544
1545MailArchiver.prototype.getMessageOperationOK = function(returnService){   
1546    if(returnService.getReturn().length <= 0){
1547        window.alert('Oh no: service return data is zero length...');
1548        return;
1549    }   
1550    var msgBody = returnService.getReturn();
1551    //var msgHeaders = expresso_mail_archive.getMessageHeaders(expresso_mail_archive.currentmessage);
1552    var msgHeaders = expresso_mail_archive.currentheaders;
1553    var expSerializedMessage = expresso_mail_archive.pattern.toExpressoMail(msgHeaders, msgBody);
1554   
1555    // Unset \\Unseen flag
1556    for (i=0; i < expresso_mail_archive.messageslisted.length; i++)
1557    {
1558        if (expresso_mail_archive.messageslisted[i].msg_number == expresso_mail_archive.currentmessage)
1559        {
1560            expresso_mail_archive.messageslisted[i]['Unseen'] = '';
1561        }
1562    }
1563   
1564    //window.alert('Serialized data\n\n' + print_r(expSerializedMessage));
1565    //expresso_mail_archive.showEmbededImage(msgBody);
1566    show_msg(expSerializedMessage);   
1567    window.setTimeout("expresso_mail_archive.setEmbeddedLink()", 1);
1568}
1569MailArchiver.prototype.getMessageOperationFailure = function(ServiceFault){
1570    window.alert('Message fails do be loaded.');
1571}
1572
1573/*
1574 *getMessageServiceObjet: search for a remote webservice object in memory to use
1575 *draw interface. Look at messages list first, then, search list. Returns desired
1576 *object, or null (if not found)
1577 **/
1578MailArchiver.prototype.getMessageServiceObject = function(msgid){
1579    var flag_found = false;
1580    var rtn_obj = null;
1581   
1582    //Message list
1583    if(expresso_mail_archive.ServiceReturnObjectList != null){
1584        for(var i=0; i < expresso_mail_archive.ServiceReturnObjectList.length; i++){
1585            if (expresso_mail_archive.ServiceReturnObjectList[i].getId() == msgid){
1586                flag_found = true;
1587                rtn_obj = expresso_mail_archive.ServiceReturnObjectList[i];
1588            }
1589        }
1590    }
1591       
1592    //Search list
1593    if(!flag_found){
1594        if(expresso_mail_archive.ServiceReturnObjectSearch != null){
1595            for(var i=0; i < expresso_mail_archive.ServiceReturnObjectSearch.length; i++){
1596                if (expresso_mail_archive.ServiceReturnObjectSearch[i].getId() == msgid){
1597                    flag_found = true;
1598                    rtn_obj = expresso_mail_archive.ServiceReturnObjectSearch[i];
1599                }
1600            }
1601        }       
1602    }
1603    return(rtn_obj);
1604}
1605
1606
1607MailArchiver.prototype.tagMessage = function(taglist){
1608    try{
1609        if(!taglist)
1610            taglist = expresso_mail_archive.taglist;
1611        //ArchiveServices.tagMessages(expresso_mail_archive.tagMessagesOperationOK, expresso_mail_archive.tagMessagesOperationFailure, sessid, taglist);
1612        ArchiveServices.tagMessages(expresso_mail_archive.tagMessagesOperationOK, expresso_mail_archive.tagMessagesOperationFailure, expresso_mail_archive.session.id, taglist);
1613    } catch (e){
1614        //window.alert('TagMessage fails at: ' + (e.description)?e.description:e);
1615        expresso_mail_archive.getFaultInfo();
1616    }     
1617}
1618
1619MailArchiver.prototype.tagMessagesOperationOK = function(serviceData){
1620    //ajustar os contadores de lida/nao lida etc...
1621    if((expresso_mail_archive.currenttag != '') && (expresso_mail_archive.tagmsg == true)){
1622        write_msg(get_lang('Messages marked as "%1"', get_lang(expresso_mail_archive.currenttag)));
1623        expresso_mail_archive.tagmsg = false;
1624    }
1625   
1626    expresso_mail_archive.currenttag = "";
1627    expresso_mail_archive.taglist = "";
1628
1629    //window.alert('expresso_mail_archive.folder_origin = ' + expresso_mail_archive.folder_origin  + '\nexpresso_mail_archive.current_folder = ' + get_current_folder());
1630
1631    if((expresso_mail_archive.drawdata) && (get_current_folder() == expresso_mail_archive.folder_origin)){
1632        expresso_mail_archive.drawFolderTree();
1633        expresso_mail_archive.listMessages();
1634        //expresso_mail_archive.drawdata = null;
1635        window.clearTimeout(expresso_mail_archive.progressbar);
1636    }
1637    else{
1638        /*
1639        connector.purgeCache();
1640        ttreeBox.name_folder = "local_" + expresso_mail_archive.currentfolder;
1641        draw_tree_local_folders();
1642        ttreeBox.update_folder(true);*/
1643    }
1644}
1645
1646MailArchiver.prototype.tagMessagesOperationFailure = function(serviceData){
1647    var str_tag_fail = serviceData.getReturn();
1648    expresso_mail_archive.getFaultInfo();
1649}
1650
1651MailArchiver.prototype.download_all_msg_attachments = function(msgid){
1652    var default_format = 'zip'; //tar, jar, gzip, bz2 supports too
1653    var url = expresso_mail_archive.pattern.download_compressed_attachments(msgid, default_format);
1654    //window.open(url,"mywindow","width=1,height=1,scrollbars=no");
1655    location.href = url;
1656}
1657
1658MailArchiver.prototype.download_msg_source = function (format){
1659    //Default export format is zip
1660    if(!format)
1661        format = 'zip';
1662   
1663    expresso_mail_archive.exportformat = format;
1664   
1665    if (openTab.type[currentTab] > 1){
1666        var msgs_id = currentTab.substring(0,currentTab.length-2,currentTab);
1667    }else{
1668        var msgs_id = get_selected_messages();
1669    }   
1670   
1671    var vetmsg = msgs_id.split(",");
1672    if(vetmsg.length > 0){
1673        var arr_msg = new Array();
1674        for(var k=0; k<vetmsg.length; k++){
1675            arr_msg.push(vetmsg[k]);
1676        }           
1677    }
1678    else var arr_msg = new Array(msgs_id);
1679   
1680    var messages_array = {"format": format, "type": 'messages', "messages": arr_msg};
1681    var texp = expresso_mail_archive.pattern.zipConfig(messages_array);
1682   
1683    if(texp != null){
1684        try{
1685            //ArchiveServices.zipMessages(expresso_mail_archive.download_mgs_sourceOperationOK, expresso_mail_archive.download_msg_sourceOperationFailure, sessid, texp);
1686            ArchiveServices.zipMessages(expresso_mail_archive.download_mgs_sourceOperationOK, expresso_mail_archive.download_msg_sourceOperationFailure, expresso_mail_archive.session.id, texp);
1687        }
1688        catch(e){
1689            //window.alert('Export local messages fails: ' + (e.description)?e.description:e);
1690            expresso_mail_archive.getFaultInfo();
1691        }
1692    }
1693}
1694
1695MailArchiver.prototype.download_mgs_sourceOperationOK = function(serviceData){
1696  if(serviceData.getReturn().length > 0){
1697      window.location.href = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/temp/mails_" + serviceData.getReturn() + '.' + expresso_mail_archive.exportformat;
1698  }
1699  else{
1700     
1701  }
1702}
1703
1704MailArchiver.prototype.download_mgs_sourceOperationFailure = function(serviceFail){
1705  window.alert('ZipMessages FAIL:' + serviceFail.getReturn()); 
1706}
1707
1708MailArchiver.prototype.export_local_messages = function(folderid, recursive, format){
1709    //Default export format is zip
1710    if(!format)
1711        format = 'zip';
1712   
1713    expresso_mail_archive.exportformat = format;   
1714    if(folderid == 'root')//export root local folder
1715        var messages_array = {"format": format, "type": 'folder', "recursive" : true, "messages": ""};
1716    else//export local folder entry
1717        var messages_array = {"format": format, "type": 'folder', "recursive" : recursive, "messages": folderid};
1718    var texp = expresso_mail_archive.pattern.zipConfig(messages_array);
1719   
1720    if(texp != null){
1721        try{
1722            ArchiveServices.zipMessages(expresso_mail_archive.download_mgs_sourceOperationOK, expresso_mail_archive.download_msg_sourceOperationFailure, expresso_mail_archive.session.id, texp);
1723        }
1724        catch(e){
1725            //window.alert('Export local messages fails: ' + (e.description)?e.description:e);
1726            expresso_mail_archive.getFaultInfo();
1727        }
1728    }   
1729}
1730
1731MailArchiver.prototype.updateCounter = function(a,b){
1732    //window.alert('updateCounter reached');
1733
1734    if(((a) && (b)) || ((parseInt(a)==0)&&(parseInt(b)==0))){
1735        //Element("tot_m").innerHTML = a;
1736        Element('new_m').innerHTML = (b >= 0) ? '<font color="RED">'+b+'</font>' : 0;
1737        return;
1738    }
1739   
1740    if(expresso_mail_archive.update_counters == true){
1741        connector.purgeCache();
1742        var elm_tree = Element('llocal_'+expresso_mail_archive.folder.id+'tree_folders');
1743       
1744        if(elm_tree){
1745       
1746        //search appropriate "unseen" span to handle with
1747        for(var j=0; j<elm_tree.childNodes.length; j++){
1748            if (elm_tree.childNodes[j].nodeName.toLowerCase() == 'span'){
1749                var elm = elm_tree.childNodes[j];
1750                break;
1751            }       
1752        }
1753   
1754        if(expresso_mail_archive.folder.unseen > 0){
1755            if (elm){
1756                elm.innerHTML = expresso_mail_archive.folder.unseen;
1757            }               
1758            else{
1759                var htm_el = document.createElement('font');
1760                htm_el.style.color = 'red';
1761                document.getElementById('llocal_'+expresso_mail_archive.folder.id+'tree_folders').appendChild(htm_el);   
1762                htm_el.innerHTML = '&nbsp(';
1763               
1764                var spn_el = document.createElement('span');
1765                spn_el.id = 'dftree_'+expresso_mail_archive.folder.id+'_unseen';
1766                spn_el.style.color = 'red';
1767                document.getElementById('llocal_'+expresso_mail_archive.folder.id+'tree_folders').appendChild(spn_el);
1768                spn_el.innerHTML = expresso_mail_archive.folder.unseen;
1769               
1770                var htm2_el = document.createElement('font');
1771                htm2_el.style.color = 'red';
1772                document.getElementById('llocal_'+expresso_mail_archive.folder.id+'tree_folders').appendChild(htm2_el);   
1773                htm2_el.innerHTML = ')';
1774            }
1775        }
1776        else{
1777            if(elm){
1778                var spn = elm.parentNode.parentNode;
1779                elm.parentNode.removeChild(elm.previousSibling);
1780                elm.parentNode.removeChild(elm.nextSibling);
1781                elm.parentNode.removeChild(elm);
1782            }
1783        }
1784
1785        //reset pointer to re-do working to move messages (2 folders envolved)
1786        if (expresso_mail_archive.folder_destination != null){
1787            if(expresso_mail_archive.currentfolder == expresso_mail_archive.folder_destination){
1788                expresso_mail_archive.update_counters = false;
1789            }
1790            else{
1791                //window.alert('aqui, queima o folder_destination');
1792                //expresso_mail_archive.folder_destination = null;
1793            }           
1794        }
1795        else{
1796            expresso_mail_archive.update_counters = false;
1797        }
1798    }
1799    }
1800    //no counter needs
1801    else return;
1802}
1803
1804MailArchiver.prototype.getBase64PartData = function(partid, field){
1805    var spid = new String(partid);
1806    if(parseInt(spid.length) > 0){
1807        expresso_mail_archive.tmp_att_datasource = field;
1808        try{
1809            //ArchiveServices.getRawBinaryBody(expresso_mail_archive.getBase64PartDataOK, expresso_mail_archive.getBase64PartDataFailure, sessid, partid);
1810            ArchiveServices.getRawBinaryBody(expresso_mail_archive.getBase64PartDataOK, expresso_mail_archive.getBase64PartDataFailure, expresso_mail_archive.session.id, partid);
1811        }
1812        catch(e){
1813            //window.alert('Fail to getRawBinaryBody data from part id ' + partid + ':\n' + (e.description)?e.description:e);
1814            expresso_mail_archive.getFaultInfo();
1815        }
1816    }
1817    else {
1818        return(null);
1819    }
1820}
1821
1822MailArchiver.prototype.getBase64PartDataOK = function(serviceData){
1823    var encdata = serviceData.getReturn();
1824    if(encdata.length <= 0){
1825        window.alert('Oh no: service return data is zero length...');
1826        this.tmp_att_data = null;
1827    }   
1828    else{
1829        expresso_mail_archive.tmp_att_datasource.value = encdata;
1830    }
1831}
1832
1833MailArchiver.prototype.getBase64PartDataFailure = function(serviceReturn){
1834    window.alert('There are erros on getting binary data part:' + serviceReturn.getReturn());
1835}
1836
1837MailArchiver.prototype.search = function(folders,fields){
1838    try{
1839        connector.showProgressBar();
1840        if((folders) && (fields)){
1841            expresso_mail_archive.search_queryconfig.reset();
1842            var folderlist = expresso_mail_archive.search_queryconfig.pharseFolders(folders);
1843            var filters = eval('(' + expresso_mail_archive.queryconfig.pharseSearchFields(fields) + ')');
1844
1845            if(folderlist.indexOf("#") != -1)
1846                filters.folder = folderlist.substr(0, folderlist.indexOf("#"));
1847            else
1848                filters.folder = folderlist;
1849            if(folderlist.toLowerCase().indexOf("#recursive") != -1)
1850                expresso_mail_archive.search_queryconfig.folder_recursive = true;
1851            else
1852                expresso_mail_archive.search_queryconfig.folder_recursive = false;
1853
1854            expresso_mail_archive.querydata = expresso_mail_archive.search_queryconfig.query(filters);
1855           
1856            //var query_data = '<?xml version="1.0" encoding="UTF-8"?><query subject="teste"><folder id="inbox"/><order asc="date"/></query>';
1857            ArchiveServices.listMessages(expresso_mail_archive.searchOperationOK, expresso_mail_archive.searchOperationFailure, expresso_mail_archive.session.id, expresso_mail_archive.querydata);       
1858        }
1859        //changing order view criteria (sorting result)
1860        else{   
1861            ArchiveServices.listMessages(expresso_mail_archive.searchOperationOK, expresso_mail_archive.searchOperationFailure, expresso_mail_archive.session.id, expresso_mail_archive.querydata);       
1862        }
1863    }catch (e){
1864        expresso_mail_archive.getFaultInfo();
1865    }
1866}
1867
1868MailArchiver.prototype.searchOperationOK = function(returnService){
1869    if(returnService.getReturn().length > 0){
1870        var msglist = new Array();
1871        var msglist2 = new Array();
1872        expresso_mail_archive.ServiceReturnObjectSearch = new Array();
1873
1874        for(var i=0; i< returnService.getReturn().length; i++){
1875            var ExpSerialized = expresso_mail_archive.pattern.toExpressoSearchHeader(returnService.getReturn()[i]);
1876            var ExpSerialized2 = expresso_mail_archive.pattern.toExpressoHeader(returnService.getReturn()[i]);
1877            var msgitem = connector.unserialize(ExpSerialized);
1878            var msgitem2 = connector.unserialize(ExpSerialized2);
1879     
1880            msglist.push(msgitem);//usando connector.unserialize sobre o header mapeado no layout abaixo
1881            msglist2.push(msgitem2);
1882            expresso_mail_archive.ServiceReturnObjectSearch.push(returnService.getReturn()[i]); //add each one service return data into this embeded object array
1883           
1884        }
1885        msglist["num_msgs"] = returnService.getReturn().length;
1886        msglist2["num_msgs"] = returnService.getReturn().length;
1887           
1888        //expresso_mail_archive.queryresult = msglist;       
1889        expresso_mail_archive.search_queryresult = msglist;   
1890        //expresso_mail_archive.messageslisted = msglist2;
1891        expresso_mail_archive.search_message_list = msglist2;
1892        //window.alert('temos ' + expresso_mail_archive.search_message_list.length + ' mensagens de resultado da pesquisa mapeadas em memï¿œria');
1893    }
1894    else{
1895        expresso_mail_archive.ServiceReturnObjectSearch = null;
1896        expresso_mail_archive.search_queryresult        = null;
1897        expresso_mail_archive.search_message_list       = null;
1898        expresso_mail_archive.messageslisted            = null;
1899        expresso_mail_archive.queryresult               = null;
1900    }
1901    connector.hideProgressBar();
1902}
1903
1904MailArchiver.prototype.searchOperationFailure = function(){
1905    write_msg(get_lang('MailArchiver search operation fails', true));
1906    expresso_mail_archive.ServiceReturnObjectSearch = null;
1907    expresso_mail_archive.search_queryresult        = null;
1908    expresso_mail_archive.search_message_list       = null;
1909    expresso_mail_archive.messageslisted            = null;
1910    expresso_mail_archive.queryresult               = null;
1911    connector.hideProgressBar();
1912}
1913
1914MailArchiver.prototype.getAuthId = function(){
1915    var handler_get_logon = function(data){
1916        if(data){
1917            expresso_mail_archive.balancerid = data[0];
1918            expresso_mail_archive.sessionid = data[1];
1919            expresso_mail_archive.logonid = new Array(data[2],data[3]);
1920            expresso_mail_archive.login();
1921        }
1922        else{
1923            window.alert('Login credentials call failure');
1924            expresso_mail_archive.session = null;
1925        }
1926    }
1927    cExecute("$this.user.get_mailarchiver_authid",handler_get_logon);     
1928}
1929
1930MailArchiver.prototype.login = function(){
1931    try{
1932        ArchiveServices.login(expresso_mail_archive.loginOperationOK, expresso_mail_archive.loginOperationFailure, expresso_mail_archive.logonid[0], expresso_mail_archive.logonid[1], expresso_mail_archive.sessionid, expresso_mail_archive.balancerid);
1933    }
1934    catch(e){
1935        expresso_mail_archive.getFaultInfo();
1936    }
1937}
1938
1939MailArchiver.prototype.loginOperationOK = function(returnService){
1940    if((typeof(returnService.getReturn()) == 'object') && (returnService.getReturn() != null)){
1941        expresso_mail_archive.session = new Object();
1942        expresso_mail_archive.session.expiration = returnService.getReturn().getExpiration();
1943        expresso_mail_archive.session.id = returnService.getReturn().getId();
1944        expresso_mail_archive.session.permissions = returnService.getReturn().getPermissions();
1945        expresso_mail_archive.CreateDefaultStructrure();
1946    }
1947    else{
1948        //not logged in MailArchiver
1949        expresso_mail_archive.session = null;
1950        write_msg(get_lang('MailArchiver user login fail', true));
1951        expresso_mail_archive.enabled = false;
1952        expresso_mail_archive.timer=null;
1953        expresso_mail_archive.interval = 500;
1954        ArchiveServices = null;
1955        connector.purgeCache();       
1956        draw_tree_folders();
1957        //expresso_mail_archive.DeactivateStatusListener(expresso_mail_archive);
1958    }
1959}
1960
1961MailArchiver.prototype.getFolderCounters = function(){
1962    var vetreturn = new Array();
1963    /*for(var k=0; k<expresso_mail_archive.folders.length; k++){
1964        if(expresso_mail_archive.folders[k]["id"] == expresso_mail_archive.currentfolder){
1965            vetreturn.push(expresso_mail_archive.folders[k]["messages"], expresso_mail_archive.folders[k]["unseen"]);
1966            break;
1967        }
1968    }*/
1969    vetreturn.push(expresso_mail_archive.folder.nummessages, expresso_mail_archive.folder.unseen);
1970    return(vetreturn);
1971}
1972
1973MailArchiver.prototype.setEmbeddedLink = function(){
1974    var img_objects = document.getElementsByTagName('img');
1975    for(var k = 0; k < img_objects.length; k++){
1976        if(img_objects[k].name.indexOf('embedded_img_') != -1) {
1977            var obj_link = img_objects[k].name.split('embedded_img_');
1978            var txt_link = obj_link[1];
1979            var img_base_link = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/temp/" + txt_link;
1980            img_objects[k].src = img_base_link;
1981        }
1982    }
1983}
1984/*
1985MailArchiver.prototype.getFolderPath = function(folder){
1986    try{
1987        ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderPathOperationOK, expresso_mail_archive.getFolderPathOperationFailure, expresso_mail_archive.session.id, folder);
1988    }
1989    catch(e){
1990        window.alert('getFolderPath fails');
1991    }
1992}
1993
1994MailArchiver.prototype.getFolderPathOperationOK = function(serviceReturn){
1995    window.alert('service return from getFolderPathOperationOK = ' + serviceReturn().getFolderPath());
1996    if(serviceReturn().length>0){
1997        window.alert('ok');
1998    }
1999    else{
2000        window.alert('nope');
2001    }
2002}
2003
2004MailArchiver.prototype.getFolderPathOperationFailure = function(serviceFault){
2005    window.alert('fails at gettting folder path');
2006}
2007*/
2008
2009MailArchiver.prototype.getMessageInfo = function(msgId){
2010    try{
2011        ArchiveServices.getMessageInfo(expresso_mail_archive.getMessageInfoOperationOK, expresso_mail_archive.getMessageInfoOperationFailure, expresso_mail_archive.session.id, msgId);
2012    }
2013    catch(e){
2014        window.alert('getMessageInfo fails');
2015    }   
2016}
2017
2018MailArchiver.prototype.getMessageInfoOperationOK = function(serviceReturn){
2019    //window.alert('service return from getMessageInfoOperationOK = ' + serviceReturn.getReturn() + '\n' + typeof(serviceReturn.getReturn()) + '\n' + print_r(serviceReturn.getReturn()));
2020    if(typeof(serviceReturn.getReturn() == 'object')){
2021        var ExpSerialized2 = expresso_mail_archive.pattern.toExpressoHeader(serviceReturn.getReturn());
2022        var msgitem2 = connector.unserialize(ExpSerialized2);
2023        expresso_mail_archive.messageslisted.push(msgitem2);   
2024        window.alert('vai chamar de volta o getMessageHeaders com: \nid => ' + serviceReturn.getReturn().getId());
2025        expresso_mail_archive.getMessageHeaders(serviceReturn.getReturn().getId());
2026    }
2027    else{
2028        window.alert('getMessageInfoOperationOK nope');
2029    }
2030}
2031
2032MailArchiver.prototype.turnOffLocalTreeStructure = function (){
2033     draw_new_tree_folder(); 
2034}
2035
2036MailArchiver.prototype.getMessageInfoOperationFailure = function(serviceFault){
2037    window.alert('fails at gettting message info');
2038}
2039
2040MailArchiver.prototype.loginOperationFailure = function(ServiceFaillure){
2041    write_msg(get_lang('MailArchiver login operation fail', true));
2042}
2043
2044MailArchiver.prototype.logout = function(){
2045    write_msg(get_lang('MailArchiver user logged out', true));
2046}
2047/*
2048 *The all pourpose JavaScript variable, used by all related functionalityes at
2049 *Expresso Mail to handle this object at user gui.
2050 */
2051
2052var expresso_mail_archive;
2053expresso_mail_archive = new MailArchiver();
2054-->
Note: See TracBrowser for help on using the repository browser.