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

Revision 7458, 87.9 KB checked in by marcosw, 11 years ago (diff)

Ticket #3088 - Correção na aba de contadores para atualizar com desarquivamento

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