source: sandbox/2.5.0-expresso1/expressoMail1_2/js/mail_archiver.js @ 7340

Revision 7340, 91.0 KB checked in by thiago, 11 years ago (diff)

Ticket #3088 - Exportação de mensagens selecionadas.

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