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

Revision 7411, 86.9 KB checked in by marcosw, 11 years ago (diff)

Ticket #3088 - Retirado comentários e códigos inválidos

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