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

Revision 7468, 88.1 KB checked in by marcosw, 11 years ago (diff)

Ticket #3088 - Correção para manter flags no desarquivamento em massa

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