]> git.donarmstrong.com Git - roundcube.git/blob - program/js/app.js
Imported Upstream version 0.2.2
[roundcube.git] / program / js / app.js
1 var rcube_webmail_client;
2 function rcube_webmail(){
3 this.env=new Object();
4 this.labels=new Object();
5 this.buttons=new Object();
6 this.gui_objects=new Object();
7 this.commands=new Object();
8 this.onloads=new Array();
9 rcube_webmail_client=this;
10 this.ref="rcube_webmail_client";
11 var _1=this;
12 this.dblclick_time=500;
13 this.message_time=3000;
14 this.identifier_expr=new RegExp("[^0-9a-z-_]","gi");
15 this.mimetypes=new Array("text/plain","text/html","text/xml","image/jpeg","image/gif","image/png","application/x-javascript","application/pdf","application/x-shockwave-flash");
16 this.env.keep_alive=60;
17 this.env.request_timeout=180;
18 this.env.draft_autosave=0;
19 this.env.comm_path="./";
20 this.env.bin_path="./bin/";
21 this.env.blankpage="program/blank.gif";
22 this.set_env=function(p,_3){
23 if(p!=null&&typeof (p)=="object"&&!_3){
24 for(var n in p){
25 this.env[n]=p[n];
26 }
27 }else{
28 this.env[p]=_3;
29 }
30 };
31 this.add_label=function(_5,_6){
32 this.labels[_5]=_6;
33 };
34 this.register_button=function(_7,id,_9,_a,_b,_c){
35 if(!this.buttons[_7]){
36 this.buttons[_7]=new Array();
37 }
38 var _d={id:id,type:_9};
39 if(_a){
40 _d.act=_a;
41 }
42 if(_b){
43 _d.sel=_b;
44 }
45 if(_c){
46 _d.over=_c;
47 }
48 this.buttons[_7][this.buttons[_7].length]=_d;
49 };
50 this.gui_object=function(_e,id){
51 this.gui_objects[_e]=id;
52 };
53 this.add_onload=function(f){
54 this.onloads[this.onloads.length]=f;
55 };
56 this.init=function(){
57 var p=this;
58 this.task=this.env.task;
59 if(!bw.dom||!bw.xmlhttp_test()){
60 this.goto_url("error","_code=0x199");
61 return;
62 }
63 for(var n in this.gui_objects){
64 this.gui_objects[n]=rcube_find_object(this.gui_objects[n]);
65 }
66 if(this.env.framed&&parent.rcmail&&parent.rcmail.set_busy){
67 parent.rcmail.set_busy(false);
68 }
69 this.enable_command("logout","mail","addressbook","settings",true);
70 if(this.env.permaurl){
71 this.enable_command("permaurl",true);
72 }
73 switch(this.task){
74 case "mail":
75 if(this.gui_objects.messagelist){
76 this.message_list=new rcube_list_widget(this.gui_objects.messagelist,{multiselect:true,draggable:true,keyboard:true,dblclick_time:this.dblclick_time});
77 this.message_list.row_init=function(o){
78 p.init_message_row(o);
79 };
80 this.message_list.addEventListener("dblclick",function(o){
81 p.msglist_dbl_click(o);
82 });
83 this.message_list.addEventListener("keypress",function(o){
84 p.msglist_keypress(o);
85 });
86 this.message_list.addEventListener("select",function(o){
87 p.msglist_select(o);
88 });
89 this.message_list.addEventListener("dragstart",function(o){
90 p.drag_start(o);
91 });
92 this.message_list.addEventListener("dragmove",function(o,e){
93 p.drag_move(e);
94 });
95 this.message_list.addEventListener("dragend",function(o){
96 p.drag_active=false;
97 });
98 this.message_list.init();
99 this.enable_command("toggle_status","toggle_flag",true);
100 if(this.gui_objects.mailcontframe){
101 this.gui_objects.mailcontframe.onmousedown=function(e){
102 return p.click_on_list(e);
103 };
104 document.onmouseup=function(e){
105 return p.doc_mouse_up(e);
106 };
107 }else{
108 this.message_list.focus();
109 }
110 }
111 if(this.env.coltypes){
112 this.set_message_coltypes(this.env.coltypes);
113 }
114 this.enable_command("list","checkmail","compose","add-contact","search","reset-search","collapse-folder",true);
115 if(this.env.search_text!=null&&document.getElementById("quicksearchbox")!=null){
116 document.getElementById("quicksearchbox").value=this.env.search_text;
117 }
118 if(this.env.action=="show"||this.env.action=="preview"){
119 this.enable_command("show","reply","reply-all","forward","moveto","delete","mark","viewsource","print","load-attachment","load-headers",true);
120 if(this.env.next_uid){
121 this.enable_command("nextmessage",true);
122 this.enable_command("lastmessage",true);
123 }
124 if(this.env.prev_uid){
125 this.enable_command("previousmessage",true);
126 this.enable_command("firstmessage",true);
127 }
128 }
129 if(this.env.trash_mailbox&&this.env.mailbox!=this.env.trash_mailbox){
130 this.set_alttext("delete","movemessagetotrash");
131 }
132 if(this.env.action=="preview"&&this.env.framed&&parent.rcmail){
133 this.enable_command("compose","add-contact",false);
134 parent.rcmail.show_contentframe(true);
135 }
136 if((this.env.action=="show"||this.env.action=="preview")&&this.env.blockedobjects){
137 if(this.gui_objects.remoteobjectsmsg){
138 this.gui_objects.remoteobjectsmsg.style.display="block";
139 }
140 this.enable_command("load-images","always-load",true);
141 }
142 if(this.env.action=="compose"){
143 this.enable_command("add-attachment","send-attachment","remove-attachment","send",true);
144 if(this.env.spellcheck){
145 this.env.spellcheck.spelling_state_observer=function(s){
146 _1.set_spellcheck_state(s);
147 };
148 this.set_spellcheck_state("ready");
149 if(rcube_find_object("_is_html").value=="1"){
150 this.display_spellcheck_controls(false);
151 }
152 }
153 if(this.env.drafts_mailbox){
154 this.enable_command("savedraft",true);
155 }
156 document.onmouseup=function(e){
157 return p.doc_mouse_up(e);
158 };
159 }
160 if(this.env.messagecount){
161 this.enable_command("select-all","select-none","expunge",true);
162 }
163 if(this.purge_mailbox_test()){
164 this.enable_command("purge",true);
165 }
166 this.set_page_buttons();
167 if(this.env.action=="compose"){
168 this.init_messageform();
169 }
170 if(this.env.action=="print"){
171 window.print();
172 }
173 if(this.gui_objects.mailboxlist){
174 this.env.unread_counts={};
175 this.gui_objects.folderlist=this.gui_objects.mailboxlist;
176 this.http_request("getunread","");
177 }
178 if(this.env.mdn_request&&this.env.uid){
179 var _1f="_uid="+this.env.uid+"&_mbox="+urlencode(this.env.mailbox);
180 if(confirm(this.get_label("mdnrequest"))){
181 this.http_post("sendmdn",_1f);
182 }else{
183 this.http_post("mark",_1f+"&_flag=mdnsent");
184 }
185 }
186 break;
187 case "addressbook":
188 if(this.gui_objects.contactslist){
189 this.contact_list=new rcube_list_widget(this.gui_objects.contactslist,{multiselect:true,draggable:true,keyboard:true});
190 this.contact_list.addEventListener("keypress",function(o){
191 p.contactlist_keypress(o);
192 });
193 this.contact_list.addEventListener("select",function(o){
194 p.contactlist_select(o);
195 });
196 this.contact_list.addEventListener("dragstart",function(o){
197 p.drag_start(o);
198 });
199 this.contact_list.addEventListener("dragmove",function(o,e){
200 p.drag_move(e);
201 });
202 this.contact_list.addEventListener("dragend",function(o){
203 p.drag_active=false;
204 });
205 this.contact_list.init();
206 if(this.env.cid){
207 this.contact_list.highlight_row(this.env.cid);
208 }
209 if(this.gui_objects.contactslist.parentNode){
210 this.gui_objects.contactslist.parentNode.onmousedown=function(e){
211 return p.click_on_list(e);
212 };
213 document.onmouseup=function(e){
214 return p.doc_mouse_up(e);
215 };
216 }else{
217 this.contact_list.focus();
218 }
219 }
220 this.set_page_buttons();
221 if(this.env.address_sources&&this.env.address_sources[this.env.source]&&!this.env.address_sources[this.env.source].readonly){
222 this.enable_command("add",true);
223 }
224 if(this.env.cid){
225 this.enable_command("show","edit",true);
226 }
227 if((this.env.action=="add"||this.env.action=="edit")&&this.gui_objects.editform){
228 this.enable_command("save",true);
229 }else{
230 this.enable_command("search","reset-search","moveto","import",true);
231 }
232 if(this.contact_list&&this.contact_list.rowcount>0){
233 this.enable_command("export",true);
234 }
235 this.enable_command("list",true);
236 break;
237 case "settings":
238 this.enable_command("preferences","identities","save","folders",true);
239 if(this.env.action=="identities"||this.env.action=="edit-identity"||this.env.action=="add-identity"){
240 this.enable_command("add",this.env.identities_level<2);
241 this.enable_command("delete","edit",true);
242 }
243 if(this.env.action=="edit-identity"||this.env.action=="add-identity"){
244 this.enable_command("save",true);
245 }
246 if(this.env.action=="folders"){
247 this.enable_command("subscribe","unsubscribe","create-folder","rename-folder","delete-folder",true);
248 }
249 if(this.gui_objects.identitieslist){
250 this.identity_list=new rcube_list_widget(this.gui_objects.identitieslist,{multiselect:false,draggable:false,keyboard:false});
251 this.identity_list.addEventListener("select",function(o){
252 p.identity_select(o);
253 });
254 this.identity_list.init();
255 this.identity_list.focus();
256 if(this.env.iid){
257 this.identity_list.highlight_row(this.env.iid);
258 }
259 }
260 if(this.gui_objects.subscriptionlist){
261 this.init_subscription_list();
262 }
263 break;
264 case "login":
265 var _29=rcube_find_object("rcmloginuser");
266 var _2a=rcube_find_object("rcmloginpwd");
267 var _2b=rcube_find_object("rcmlogintz");
268 if(_29){
269 _29.onkeyup=function(e){
270 return rcmail.login_user_keyup(e);
271 };
272 }
273 if(_29&&_29.value==""){
274 _29.focus();
275 }else{
276 if(_2a){
277 _2a.focus();
278 }
279 }
280 if(_2b){
281 _2b.value=new Date().getTimezoneOffset()/-60;
282 }
283 this.enable_command("login",true);
284 break;
285 default:
286 break;
287 }
288 this.enable_command("logout",true);
289 this.loaded=true;
290 if(this.pending_message){
291 this.display_message(this.pending_message[0],this.pending_message[1]);
292 }
293 this.start_keepalive();
294 for(var i=0;i<this.onloads.length;i++){
295 if(typeof (this.onloads[i])=="string"){
296 eval(this.onloads[i]);
297 }else{
298 if(typeof (this.onloads[i])=="function"){
299 this.onloads[i]();
300 }
301 }
302 }
303 };
304 this.start_keepalive=function(){
305 if(this.env.keep_alive&&!this.env.framed&&this.task=="mail"&&this.gui_objects.mailboxlist){
306 this._int=setInterval(function(){
307 _1.check_for_recent(false);
308 },this.env.keep_alive*1000);
309 }else{
310 if(this.env.keep_alive&&!this.env.framed&&this.task!="login"){
311 this._int=setInterval(function(){
312 _1.send_keep_alive();
313 },this.env.keep_alive*1000);
314 }
315 }
316 };
317 this.init_message_row=function(row){
318 var uid=row.uid;
319 if(uid&&this.env.messages[uid]){
320 row.deleted=this.env.messages[uid].deleted?true:false;
321 row.unread=this.env.messages[uid].unread?true:false;
322 row.replied=this.env.messages[uid].replied?true:false;
323 row.flagged=this.env.messages[uid].flagged?true:false;
324 row.forwarded=this.env.messages[uid].forwarded?true:false;
325 }
326 if((row.icon=row.obj.cells[0].childNodes[0])&&row.icon.nodeName=="IMG"){
327 var p=this;
328 row.icon.id="msgicn_"+row.uid;
329 row.icon._row=row.obj;
330 row.icon.onmousedown=function(e){
331 p.command("toggle_status",this);
332 };
333 }
334 if(!this.env.flagged_col&&this.env.coltypes){
335 var _32;
336 if((_32=find_in_array("flag",this.env.coltypes))>=0){
337 this.set_env("flagged_col",_32+1);
338 }
339 }
340 if(this.env.flagged_col&&(row.flagged_icon=row.obj.cells[this.env.flagged_col].childNodes[0])&&row.flagged_icon.nodeName=="IMG"){
341 var p=this;
342 row.flagged_icon.id="flaggedicn_"+row.uid;
343 row.flagged_icon._row=row.obj;
344 row.flagged_icon.onmousedown=function(e){
345 p.command("toggle_flag",this);
346 };
347 }
348 };
349 this.init_messageform=function(){
350 if(!this.gui_objects.messageform){
351 return false;
352 }
353 var _34=rcube_find_object("_from");
354 var _35=rcube_find_object("_to");
355 var _36=rcube_find_object("_cc");
356 var _37=rcube_find_object("_bcc");
357 var _38=rcube_find_object("_replyto");
358 var _39=rcube_find_object("_subject");
359 var _3a=rcube_find_object("_message");
360 var _3b=rcube_find_object("_draft_saveid");
361 if(_35){
362 this.init_address_input_events(_35);
363 }
364 if(_36){
365 this.init_address_input_events(_36);
366 }
367 if(_37){
368 this.init_address_input_events(_37);
369 }
370 if(_34&&_34.type=="select-one"&&(!_3b||_3b.value=="")&&rcube_find_object("_is_html").value!="1"){
371 this.change_identity(_34);
372 }
373 if(_35&&_35.value==""){
374 _35.focus();
375 }else{
376 if(_39&&_39.value==""){
377 _39.focus();
378 }else{
379 if(_3a){
380 this.set_caret2start(_3a);
381 }
382 }
383 }
384 this.compose_field_hash(true);
385 this.auto_save_start();
386 };
387 this.init_address_input_events=function(obj){
388 var _3d=function(e){
389 return _1.ksearch_keypress(e,this);
390 };
391 if(obj.addEventListener){
392 obj.addEventListener(bw.safari?"keydown":"keypress",_3d,false);
393 }else{
394 obj.onkeydown=_3d;
395 }
396 obj.setAttribute("autocomplete","off");
397 };
398 this.command=function(_3f,_40,obj){
399 if(obj&&obj.blur){
400 obj.blur();
401 }
402 if(this.busy){
403 return false;
404 }
405 if(!this.commands[_3f]){
406 if(this.env.framed&&parent.rcmail&&parent.rcmail.command){
407 parent.rcmail.command(_3f,_40);
408 }
409 return false;
410 }
411 if(this.task=="mail"&&this.env.action=="compose"&&(_3f=="list"||_3f=="mail"||_3f=="addressbook"||_3f=="settings")){
412 if(this.cmp_hash!=this.compose_field_hash()&&!confirm(this.get_label("notsentwarning"))){
413 return false;
414 }
415 }
416 switch(_3f){
417 case "login":
418 if(this.gui_objects.loginform){
419 this.gui_objects.loginform.submit();
420 }
421 break;
422 case "logout":
423 this.goto_url("logout","",true);
424 break;
425 case "mail":
426 case "addressbook":
427 case "settings":
428 this.switch_task(_3f);
429 break;
430 case "permaurl":
431 if(obj&&obj.href&&obj.target){
432 return true;
433 }else{
434 if(this.env.permaurl){
435 parent.location.href=this.env.permaurl;
436 }
437 }
438 break;
439 case "list":
440 if(this.task=="mail"){
441 if(this.env.search_request<0||(_40!=""&&(this.env.search_request&&_40!=this.env.mailbox))){
442 this.reset_qsearch();
443 }
444 this.list_mailbox(_40);
445 if(this.env.trash_mailbox){
446 this.set_alttext("delete",this.env.mailbox!=this.env.trash_mailbox?"movemessagetotrash":"deletemessage");
447 }
448 }else{
449 if(this.task=="addressbook"){
450 if(this.env.search_request<0||(this.env.search_request&&_40!=this.env.source)){
451 this.reset_qsearch();
452 }
453 this.list_contacts(_40);
454 this.enable_command("add",(this.env.address_sources&&!this.env.address_sources[_40].readonly));
455 }
456 }
457 break;
458 case "load-headers":
459 this.load_headers(obj);
460 break;
461 case "sort":
462 var _42=_40.split("_");
463 var _43=_42[0];
464 var _44=_42[1]?_42[1].toUpperCase():null;
465 var _45;
466 if(_44==null){
467 if(this.env.sort_col==_43){
468 _44=this.env.sort_order=="ASC"?"DESC":"ASC";
469 }else{
470 _44=this.env.sort_order;
471 }
472 }
473 if(this.env.sort_col==_43&&this.env.sort_order==_44){
474 break;
475 }
476 if(_45=document.getElementById("rcm"+this.env.sort_col)){
477 this.set_classname(_45,"sorted"+(this.env.sort_order.toUpperCase()),false);
478 }
479 if(_45=document.getElementById("rcm"+_43)){
480 this.set_classname(_45,"sorted"+_44,true);
481 }
482 this.env.sort_col=_43;
483 this.env.sort_order=_44;
484 this.list_mailbox("","",_43+"_"+_44);
485 break;
486 case "nextpage":
487 this.list_page("next");
488 break;
489 case "lastpage":
490 this.list_page("last");
491 break;
492 case "previouspage":
493 this.list_page("prev");
494 break;
495 case "firstpage":
496 this.list_page("first");
497 break;
498 case "expunge":
499 if(this.env.messagecount){
500 this.expunge_mailbox(this.env.mailbox);
501 }
502 break;
503 case "purge":
504 case "empty-mailbox":
505 if(this.env.messagecount){
506 this.purge_mailbox(this.env.mailbox);
507 }
508 break;
509 case "show":
510 if(this.task=="mail"){
511 var uid=this.get_single_uid();
512 if(uid&&(!this.env.uid||uid!=this.env.uid)){
513 if(this.env.mailbox==this.env.drafts_mailbox){
514 this.goto_url("compose","_draft_uid="+uid+"&_mbox="+urlencode(this.env.mailbox),true);
515 }else{
516 this.show_message(uid);
517 }
518 }
519 }else{
520 if(this.task=="addressbook"){
521 var cid=_40?_40:this.get_single_cid();
522 if(cid&&!(this.env.action=="show"&&cid==this.env.cid)){
523 this.load_contact(cid,"show");
524 }
525 }
526 }
527 break;
528 case "add":
529 if(this.task=="addressbook"){
530 this.load_contact(0,"add");
531 }else{
532 if(this.task=="settings"){
533 this.identity_list.clear_selection();
534 this.load_identity(0,"add-identity");
535 }
536 }
537 break;
538 case "edit":
539 var cid;
540 if(this.task=="addressbook"&&(cid=this.get_single_cid())){
541 this.load_contact(cid,"edit");
542 }else{
543 if(this.task=="settings"&&_40){
544 this.load_identity(_40,"edit-identity");
545 }
546 }
547 break;
548 case "save-identity":
549 case "save":
550 if(this.gui_objects.editform){
551 var _48=rcube_find_object("_pagesize");
552 var _49=rcube_find_object("_name");
553 var _4a=rcube_find_object("_email");
554 if(_48&&isNaN(parseInt(_48.value))){
555 alert(this.get_label("nopagesizewarning"));
556 _48.focus();
557 break;
558 }else{
559 if(_49&&_49.value==""){
560 alert(this.get_label("nonamewarning"));
561 _49.focus();
562 break;
563 }else{
564 if(_4a&&!rcube_check_email(_4a.value)){
565 alert(this.get_label("noemailwarning"));
566 _4a.focus();
567 break;
568 }
569 }
570 }
571 this.gui_objects.editform.submit();
572 }
573 break;
574 case "delete":
575 if(this.task=="mail"){
576 this.delete_messages();
577 }else{
578 if(this.task=="addressbook"){
579 this.delete_contacts();
580 }else{
581 if(this.task=="settings"){
582 this.delete_identity();
583 }
584 }
585 }
586 break;
587 case "move":
588 case "moveto":
589 if(this.task=="mail"){
590 this.move_messages(_40);
591 }else{
592 if(this.task=="addressbook"&&this.drag_active){
593 this.copy_contact(null,_40);
594 }
595 }
596 break;
597 case "mark":
598 if(_40){
599 this.mark_message(_40);
600 }
601 break;
602 case "toggle_status":
603 if(_40&&!_40._row){
604 break;
605 }
606 var uid;
607 var _4b="read";
608 if(_40._row.uid){
609 uid=_40._row.uid;
610 if(this.message_list.rows[uid].deleted){
611 _4b="undelete";
612 }else{
613 if(!this.message_list.rows[uid].unread){
614 _4b="unread";
615 }
616 }
617 }
618 this.mark_message(_4b,uid);
619 break;
620 case "toggle_flag":
621 if(_40&&!_40._row){
622 break;
623 }
624 var uid;
625 var _4b="flagged";
626 if(_40._row.uid){
627 uid=_40._row.uid;
628 if(this.message_list.rows[uid].flagged){
629 _4b="unflagged";
630 }
631 }
632 this.mark_message(_4b,uid);
633 break;
634 case "always-load":
635 if(this.env.uid&&this.env.sender){
636 this.add_contact(urlencode(this.env.sender));
637 window.setTimeout(function(){
638 _1.command("load-images");
639 },300);
640 break;
641 }
642 case "load-images":
643 if(this.env.uid){
644 this.show_message(this.env.uid,true,this.env.action=="preview");
645 }
646 break;
647 case "load-attachment":
648 var _4c="_mbox="+urlencode(this.env.mailbox)+"&_uid="+this.env.uid+"&_part="+_40.part;
649 if(this.env.uid&&_40.mimetype&&find_in_array(_40.mimetype,this.mimetypes)>=0){
650 if(_40.mimetype=="text/html"){
651 _4c+="&_safe=1";
652 }
653 this.attachment_win=window.open(this.env.comm_path+"&_action=get&"+_4c+"&_frame=1","rcubemailattachment");
654 if(this.attachment_win){
655 window.setTimeout(function(){
656 _1.attachment_win.focus();
657 },10);
658 break;
659 }
660 }
661 this.goto_url("get",_4c+"&_download=1",false);
662 break;
663 case "select-all":
664 this.message_list.select_all(_40);
665 break;
666 case "select-none":
667 this.message_list.clear_selection();
668 break;
669 case "nextmessage":
670 if(this.env.next_uid){
671 this.show_message(this.env.next_uid,false,this.env.action=="preview");
672 }
673 break;
674 case "lastmessage":
675 if(this.env.last_uid){
676 this.show_message(this.env.last_uid);
677 }
678 break;
679 case "previousmessage":
680 if(this.env.prev_uid){
681 this.show_message(this.env.prev_uid,false,this.env.action=="preview");
682 }
683 break;
684 case "firstmessage":
685 if(this.env.first_uid){
686 this.show_message(this.env.first_uid);
687 }
688 break;
689 case "checkmail":
690 this.check_for_recent(true);
691 break;
692 case "compose":
693 var url=this.env.comm_path+"&_action=compose";
694 if(this.task=="mail"){
695 url+="&_mbox="+urlencode(this.env.mailbox);
696 if(this.env.mailbox==this.env.drafts_mailbox){
697 var uid;
698 if(uid=this.get_single_uid()){
699 url+="&_draft_uid="+uid;
700 }
701 }else{
702 if(_40){
703 url+="&_to="+urlencode(_40);
704 }
705 }
706 }else{
707 if(this.task=="addressbook"){
708 if(_40&&_40.indexOf("@")>0){
709 url=this.get_task_url("mail",url);
710 this.redirect(url+"&_to="+urlencode(_40));
711 break;
712 }
713 var _4e=new Array();
714 if(_40){
715 _4e[_4e.length]=_40;
716 }else{
717 if(this.contact_list){
718 var _4f=this.contact_list.get_selection();
719 for(var n=0;n<_4f.length;n++){
720 _4e[_4e.length]=_4f[n];
721 }
722 }
723 }
724 if(_4e.length){
725 this.http_request("mailto","_cid="+urlencode(_4e.join(","))+"&_source="+urlencode(this.env.source),true);
726 }
727 break;
728 }
729 }
730 url=url.replace(/&_framed=1/,"");
731 this.redirect(url);
732 break;
733 case "spellcheck":
734 if(window.tinyMCE&&tinyMCE.get("compose-body")){
735 tinyMCE.execCommand("mceSpellCheck",true);
736 }else{
737 if(this.env.spellcheck&&this.env.spellcheck.spellCheck&&this.spellcheck_ready){
738 this.env.spellcheck.spellCheck(this.env.spellcheck.check_link);
739 this.set_spellcheck_state("checking");
740 }
741 }
742 break;
743 case "savedraft":
744 self.clearTimeout(this.save_timer);
745 if(!this.gui_objects.messageform){
746 break;
747 }
748 if(!this.env.drafts_mailbox||this.cmp_hash==this.compose_field_hash()){
749 break;
750 }
751 this.set_busy(true,"savingmessage");
752 var _51=this.gui_objects.messageform;
753 _51.target="savetarget";
754 _51._draft.value="1";
755 _51.submit();
756 break;
757 case "send":
758 if(!this.gui_objects.messageform){
759 break;
760 }
761 if(!this.check_compose_input()){
762 break;
763 }
764 self.clearTimeout(this.save_timer);
765 this.set_busy(true,"sendingmessage");
766 var _51=this.gui_objects.messageform;
767 _51.target="savetarget";
768 _51._draft.value="";
769 _51.submit();
770 clearTimeout(this.request_timer);
771 break;
772 case "add-attachment":
773 this.show_attachment_form(true);
774 case "send-attachment":
775 self.clearTimeout(this.save_timer);
776 this.upload_file(_40);
777 break;
778 case "remove-attachment":
779 this.remove_attachment(_40);
780 break;
781 case "reply-all":
782 case "reply":
783 var uid;
784 if(uid=this.get_single_uid()){
785 this.goto_url("compose","_reply_uid="+uid+"&_mbox="+urlencode(this.env.mailbox)+(_3f=="reply-all"?"&_all=1":""),true);
786 }
787 break;
788 case "forward":
789 var uid;
790 if(uid=this.get_single_uid()){
791 this.goto_url("compose","_forward_uid="+uid+"&_mbox="+urlencode(this.env.mailbox),true);
792 }
793 break;
794 case "print":
795 var uid;
796 if(uid=this.get_single_uid()){
797 _1.printwin=window.open(this.env.comm_path+"&_action=print&_uid="+uid+"&_mbox="+urlencode(this.env.mailbox)+(this.env.safemode?"&_safe=1":""));
798 if(this.printwin){
799 window.setTimeout(function(){
800 _1.printwin.focus();
801 },20);
802 if(this.env.action!="show"){
803 this.mark_message("read",uid);
804 }
805 }
806 }
807 break;
808 case "viewsource":
809 var uid;
810 if(uid=this.get_single_uid()){
811 _1.sourcewin=window.open(this.env.comm_path+"&_action=viewsource&_uid="+this.env.uid+"&_mbox="+urlencode(this.env.mailbox));
812 if(this.sourcewin){
813 window.setTimeout(function(){
814 _1.sourcewin.focus();
815 },20);
816 }
817 }
818 break;
819 case "add-contact":
820 this.add_contact(_40);
821 break;
822 case "search":
823 if(!_40&&this.gui_objects.qsearchbox){
824 _40=this.gui_objects.qsearchbox.value;
825 }
826 if(_40){
827 this.qsearch(_40);
828 break;
829 }
830 case "reset-search":
831 var s=this.env.search_request;
832 this.reset_qsearch();
833 if(s&&this.env.mailbox){
834 this.list_mailbox(this.env.mailbox);
835 }else{
836 if(s&&this.task=="addressbook"){
837 this.list_contacts(this.env.source);
838 }
839 }
840 break;
841 case "import":
842 if(this.env.action=="import"&&this.gui_objects.importform){
843 var _53=document.getElementById("rcmimportfile");
844 if(_53&&!_53.value){
845 alert(this.get_label("selectimportfile"));
846 break;
847 }
848 this.gui_objects.importform.submit();
849 this.set_busy(true,"importwait");
850 this.lock_form(this.gui_objects.importform,true);
851 }else{
852 this.goto_url("import");
853 }
854 break;
855 case "export":
856 if(this.contact_list.rowcount>0){
857 var _54=(this.env.source?"_source="+urlencode(this.env.source)+"&":"");
858 if(this.env.search_request){
859 _54+="_search="+this.env.search_request;
860 }
861 this.goto_url("export",_54);
862 }
863 break;
864 case "collapse-folder":
865 if(_40){
866 this.collapse_folder(_40);
867 }
868 break;
869 case "preferences":
870 this.goto_url("");
871 break;
872 case "identities":
873 this.goto_url("identities");
874 break;
875 case "delete-identity":
876 this.delete_identity();
877 case "folders":
878 this.goto_url("folders");
879 break;
880 case "subscribe":
881 this.subscribe_folder(_40);
882 break;
883 case "unsubscribe":
884 this.unsubscribe_folder(_40);
885 break;
886 case "create-folder":
887 this.create_folder(_40);
888 break;
889 case "rename-folder":
890 this.rename_folder(_40);
891 break;
892 case "delete-folder":
893 this.delete_folder(_40);
894 break;
895 }
896 return obj?false:true;
897 };
898 this.enable_command=function(){
899 var _55=arguments;
900 if(!_55.length){
901 return -1;
902 }
903 var _56;
904 var _57=_55[_55.length-1];
905 for(var n=0;n<_55.length-1;n++){
906 _56=_55[n];
907 this.commands[_56]=_57;
908 this.set_button(_56,(_57?"act":"pas"));
909 }
910 return true;
911 };
912 this.set_busy=function(a,_5a){
913 if(a&&_5a){
914 var msg=this.get_label(_5a);
915 if(msg==_5a){
916 msg="Loading...";
917 }
918 this.display_message(msg,"loading",true);
919 }else{
920 if(!a){
921 this.hide_message();
922 }
923 }
924 this.busy=a;
925 if(this.gui_objects.editform){
926 this.lock_form(this.gui_objects.editform,a);
927 }
928 if(this.request_timer){
929 clearTimeout(this.request_timer);
930 }
931 if(a&&this.env.request_timeout){
932 this.request_timer=window.setTimeout(function(){
933 _1.request_timed_out();
934 },this.env.request_timeout*1000);
935 }
936 };
937 this.get_label=function(_5c){
938 if(this.labels[_5c]){
939 return this.labels[_5c];
940 }else{
941 return _5c;
942 }
943 };
944 this.switch_task=function(_5d){
945 if(this.task===_5d&&_5d!="mail"){
946 return;
947 }
948 var url=this.get_task_url(_5d);
949 if(_5d=="mail"){
950 url+="&_mbox=INBOX";
951 }
952 this.redirect(url);
953 };
954 this.get_task_url=function(_5f,url){
955 if(!url){
956 url=this.env.comm_path;
957 }
958 return url.replace(/_task=[a-z]+/,"_task="+_5f);
959 };
960 this.request_timed_out=function(){
961 this.set_busy(false);
962 this.display_message("Request timed out!","error");
963 };
964 this.doc_mouse_up=function(e){
965 var _62,li;
966 if(this.message_list){
967 if(!rcube_mouse_is_over(e,this.message_list.list)){
968 this.message_list.blur();
969 }
970 _62=this.env.mailboxes;
971 }else{
972 if(this.contact_list){
973 if(!rcube_mouse_is_over(e,this.contact_list.list)){
974 this.contact_list.blur();
975 }
976 _62=this.env.address_sources;
977 }else{
978 if(this.ksearch_value){
979 this.ksearch_blur();
980 }
981 }
982 }
983 if(this.drag_active&&_62&&this.env.last_folder_target){
984 this.set_classname(this.get_folder_li(this.env.last_folder_target),"droptarget",false);
985 this.command("moveto",_62[this.env.last_folder_target].id);
986 this.env.last_folder_target=null;
987 }
988 };
989 this.drag_start=function(_64){
990 this.initialBodyScrollTop=bw.ie?0:window.pageYOffset;
991 this.initialMailBoxScrollTop=document.getElementById("mailboxlist-container").scrollTop;
992 var _65=this.task=="mail"?this.env.mailboxes:this.env.address_sources;
993 this.drag_active=true;
994 if(this.preview_timer){
995 clearTimeout(this.preview_timer);
996 }
997 if(this.gui_objects.folderlist&&_65){
998 var li,pos,_64,_68;
999 _64=rcube_find_object(this.task=="mail"?"mailboxlist":"directorylist");
1000 pos=rcube_get_object_pos(_64);
1001 this.env.folderlist_coords={x1:pos.x,y1:pos.y,x2:pos.x+_64.offsetWidth,y2:pos.y+_64.offsetHeight};
1002 this.env.folder_coords=new Array();
1003 for(var k in _65){
1004 if(li=this.get_folder_li(k)){
1005 pos=rcube_get_object_pos(li.firstChild);
1006 if(_68=li.firstChild.offsetHeight){
1007 this.env.folder_coords[k]={x1:pos.x,y1:pos.y,x2:pos.x+li.firstChild.offsetWidth,y2:pos.y+_68};
1008 }
1009 }
1010 }
1011 }
1012 };
1013 this.drag_move=function(e){
1014 if(this.gui_objects.folderlist&&this.env.folder_coords){
1015 var _6b=bw.ie?-document.documentElement.scrollTop:this.initialBodyScrollTop;
1016 var _6c=this.initialMailBoxScrollTop-document.getElementById("mailboxlist-container").scrollTop;
1017 var _6d=-_6c-_6b;
1018 var li,pos,_70;
1019 _70=rcube_event.get_mouse_pos(e);
1020 pos=this.env.folderlist_coords;
1021 _70.y+=_6d;
1022 if(_70.x<pos.x1||_70.x>=pos.x2||_70.y<pos.y1||_70.y>=pos.y2){
1023 if(this.env.last_folder_target){
1024 this.set_classname(this.get_folder_li(this.env.last_folder_target),"droptarget",false);
1025 this.env.last_folder_target=null;
1026 }
1027 return;
1028 }
1029 for(var k in this.env.folder_coords){
1030 pos=this.env.folder_coords[k];
1031 if(this.check_droptarget(k)&&((_70.x>=pos.x1)&&(_70.x<pos.x2)&&(_70.y>=pos.y1)&&(_70.y<pos.y2))){
1032 this.set_classname(this.get_folder_li(k),"droptarget",true);
1033 this.env.last_folder_target=k;
1034 }else{
1035 this.set_classname(this.get_folder_li(k),"droptarget",false);
1036 }
1037 }
1038 }
1039 };
1040 this.collapse_folder=function(id){
1041 var div;
1042 if((li=this.get_folder_li(id))&&(div=li.getElementsByTagName("div")[0])&&(div.className.match(/collapsed/)||div.className.match(/expanded/))){
1043 var ul=li.getElementsByTagName("ul")[0];
1044 if(div.className.match(/collapsed/)){
1045 ul.style.display="";
1046 this.set_classname(div,"collapsed",false);
1047 this.set_classname(div,"expanded",true);
1048 var reg=new RegExp("&"+urlencode(id)+"&");
1049 this.set_env("collapsed_folders",this.env.collapsed_folders.replace(reg,""));
1050 }else{
1051 ul.style.display="none";
1052 this.set_classname(div,"expanded",false);
1053 this.set_classname(div,"collapsed",true);
1054 this.set_env("collapsed_folders",this.env.collapsed_folders+"&"+urlencode(id)+"&");
1055 if(this.env.mailbox.indexOf(id+this.env.delimiter)==0){
1056 this.command("list",id);
1057 }
1058 }
1059 if((bw.ie6||bw.ie7)&&li.nextSibling&&(li.nextSibling.getElementsByTagName("ul").length>0)&&li.nextSibling.getElementsByTagName("ul")[0].style&&(li.nextSibling.getElementsByTagName("ul")[0].style.display!="none")){
1060 li.nextSibling.getElementsByTagName("ul")[0].style.display="none";
1061 li.nextSibling.getElementsByTagName("ul")[0].style.display="";
1062 }
1063 this.http_post("save-pref","_name=collapsed_folders&_value="+urlencode(this.env.collapsed_folders));
1064 this.set_unread_count_display(id,false);
1065 }
1066 };
1067 this.click_on_list=function(e){
1068 if(this.gui_objects.qsearchbox){
1069 this.gui_objects.qsearchbox.blur();
1070 }
1071 if(this.message_list){
1072 this.message_list.focus();
1073 }else{
1074 if(this.contact_list){
1075 this.contact_list.focus();
1076 }
1077 }
1078 var _77;
1079 if(_77=this.get_folder_li()){
1080 this.set_classname(_77,"unfocused",true);
1081 }
1082 return rcube_event.get_button(e)==2?true:rcube_event.cancel(e);
1083 };
1084 this.msglist_select=function(_78){
1085 if(this.preview_timer){
1086 clearTimeout(this.preview_timer);
1087 }
1088 var _79=_78.selection.length==1;
1089 if(this.env.mailbox==this.env.drafts_mailbox){
1090 this.enable_command("reply","reply-all","forward",false);
1091 this.enable_command("show","print",_79);
1092 this.enable_command("delete","moveto","mark",(_78.selection.length>0?true:false));
1093 }else{
1094 this.enable_command("show","reply","reply-all","forward","print",_79);
1095 this.enable_command("delete","moveto","mark",(_78.selection.length>0?true:false));
1096 }
1097 if(_79&&this.env.contentframe&&!_78.multi_selecting){
1098 this.preview_timer=window.setTimeout(function(){
1099 _1.msglist_get_preview();
1100 },200);
1101 }else{
1102 if(this.env.contentframe){
1103 this.show_contentframe(false);
1104 }
1105 }
1106 };
1107 this.msglist_dbl_click=function(_7a){
1108 if(this.preview_timer){
1109 clearTimeout(this.preview_timer);
1110 }
1111 var uid=_7a.get_single_selection();
1112 if(uid&&this.env.mailbox==this.env.drafts_mailbox){
1113 this.goto_url("compose","_draft_uid="+uid+"&_mbox="+urlencode(this.env.mailbox),true);
1114 }else{
1115 if(uid){
1116 this.show_message(uid,false,false);
1117 }
1118 }
1119 };
1120 this.msglist_keypress=function(_7c){
1121 if(_7c.key_pressed==_7c.ENTER_KEY){
1122 this.command("show");
1123 }else{
1124 if(_7c.key_pressed==_7c.DELETE_KEY){
1125 this.command("delete");
1126 }else{
1127 if(_7c.key_pressed==_7c.BACKSPACE_KEY){
1128 this.command("delete");
1129 }else{
1130 _7c.shiftkey=false;
1131 }
1132 }
1133 }
1134 };
1135 this.msglist_get_preview=function(){
1136 var uid=this.get_single_uid();
1137 if(uid&&this.env.contentframe&&!this.drag_active){
1138 this.show_message(uid,false,true);
1139 }else{
1140 if(this.env.contentframe){
1141 this.show_contentframe(false);
1142 }
1143 }
1144 };
1145 this.check_droptarget=function(id){
1146 if(this.task=="mail"){
1147 return (this.env.mailboxes[id]&&this.env.mailboxes[id].id!=this.env.mailbox&&!this.env.mailboxes[id].virtual);
1148 }else{
1149 if(this.task=="addressbook"){
1150 return (id!=this.env.source&&this.env.address_sources[id]&&!this.env.address_sources[id].readonly);
1151 }else{
1152 if(this.task=="settings"){
1153 return (id!=this.env.folder);
1154 }
1155 }
1156 }
1157 };
1158 this.show_message=function(id,_80,_81){
1159 if(!id){
1160 return;
1161 }
1162 var _82="";
1163 var _83=_81?"preview":"show";
1164 var _84=window;
1165 if(_81&&this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
1166 _84=window.frames[this.env.contentframe];
1167 _82="&_framed=1";
1168 }
1169 if(_80){
1170 _82="&_safe=1";
1171 }
1172 if(this.env.search_request){
1173 _82+="&_search="+this.env.search_request;
1174 }
1175 var url="&_action="+_83+"&_uid="+id+"&_mbox="+urlencode(this.env.mailbox)+_82;
1176 if(_83=="preview"&&String(_84.location.href).indexOf(url)>=0){
1177 this.show_contentframe(true);
1178 }else{
1179 this.set_busy(true,"loading");
1180 _84.location.href=this.env.comm_path+url;
1181 if(_83=="preview"&&this.message_list&&this.message_list.rows[id]&&this.message_list.rows[id].unread){
1182 this.set_message(id,"unread",false);
1183 if(this.env.unread_counts[this.env.mailbox]){
1184 this.env.unread_counts[this.env.mailbox]-=1;
1185 this.set_unread_count(this.env.mailbox,this.env.unread_counts[this.env.mailbox],this.env.mailbox=="INBOX");
1186 }
1187 }
1188 }
1189 };
1190 this.show_contentframe=function(_86){
1191 var frm;
1192 if(this.env.contentframe&&(frm=rcube_find_object(this.env.contentframe))){
1193 if(!_86&&window.frames[this.env.contentframe]){
1194 if(window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0){
1195 window.frames[this.env.contentframe].location.href=this.env.blankpage;
1196 }
1197 }else{
1198 if(!bw.safari&&!bw.konq){
1199 frm.style.display=_86?"block":"none";
1200 }
1201 }
1202 }
1203 if(!_86&&this.busy){
1204 this.set_busy(false);
1205 }
1206 };
1207 this.list_page=function(_88){
1208 if(_88=="next"){
1209 _88=this.env.current_page+1;
1210 }
1211 if(_88=="last"){
1212 _88=this.env.pagecount;
1213 }
1214 if(_88=="prev"&&this.env.current_page>1){
1215 _88=this.env.current_page-1;
1216 }
1217 if(_88=="first"&&this.env.current_page>1){
1218 _88=1;
1219 }
1220 if(_88>0&&_88<=this.env.pagecount){
1221 this.env.current_page=_88;
1222 if(this.task=="mail"){
1223 this.list_mailbox(this.env.mailbox,_88);
1224 }else{
1225 if(this.task=="addressbook"){
1226 this.list_contacts(this.env.source,_88);
1227 }
1228 }
1229 }
1230 };
1231 this.filter_mailbox=function(_89){
1232 var _8a;
1233 if(this.gui_objects.qsearchbox){
1234 _8a=this.gui_objects.qsearchbox.value;
1235 }
1236 this.message_list.clear();
1237 this.env.current_page=1;
1238 this.set_busy(true,"searching");
1239 this.http_request("search","_filter="+_89+(_8a?"&_q="+urlencode(_8a):"")+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):""),true);
1240 };
1241 this.list_mailbox=function(_8b,_8c,_8d){
1242 this.last_selected=0;
1243 var _8e="";
1244 var _8f=window;
1245 if(!_8b){
1246 _8b=this.env.mailbox;
1247 }
1248 if(_8d){
1249 _8e+="&_sort="+_8d;
1250 }
1251 if(this.env.search_request){
1252 _8e+="&_search="+this.env.search_request;
1253 }
1254 if(!_8c&&_8b!=this.env.mailbox){
1255 _8c=1;
1256 this.env.current_page=_8c;
1257 if(this.message_list){
1258 this.message_list.clear_selection();
1259 }
1260 this.show_contentframe(false);
1261 }
1262 if(_8b!=this.env.mailbox||(_8b==this.env.mailbox&&!_8c&&!_8d)){
1263 _8e+="&_refresh=1";
1264 }
1265 this.select_folder(_8b,this.env.mailbox);
1266 this.env.mailbox=_8b;
1267 if(this.gui_objects.messagelist){
1268 this.list_mailbox_remote(_8b,_8c,_8e);
1269 return;
1270 }
1271 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
1272 _8f=window.frames[this.env.contentframe];
1273 _8e+="&_framed=1";
1274 }
1275 if(_8b){
1276 this.set_busy(true,"loading");
1277 _8f.location.href=this.env.comm_path+"&_mbox="+urlencode(_8b)+(_8c?"&_page="+_8c:"")+_8e;
1278 }
1279 };
1280 this.list_mailbox_remote=function(_90,_91,_92){
1281 this.message_list.clear();
1282 var url="_mbox="+urlencode(_90)+(_91?"&_page="+_91:"");
1283 this.set_busy(true,"loading");
1284 this.http_request("list",url+_92,true);
1285 };
1286 this.expunge_mailbox=function(_94){
1287 var _95=false;
1288 var _96="";
1289 if(_94==this.env.mailbox){
1290 _95=true;
1291 this.set_busy(true,"loading");
1292 _96="&_reload=1";
1293 }
1294 var url="_mbox="+urlencode(_94);
1295 this.http_post("expunge",url+_96,_95);
1296 };
1297 this.purge_mailbox=function(_98){
1298 var _99=false;
1299 var _9a="";
1300 if(!confirm(this.get_label("purgefolderconfirm"))){
1301 return false;
1302 }
1303 if(_98==this.env.mailbox){
1304 _99=true;
1305 this.set_busy(true,"loading");
1306 _9a="&_reload=1";
1307 }
1308 var url="_mbox="+urlencode(_98);
1309 this.http_post("purge",url+_9a,_99);
1310 return true;
1311 };
1312 this.purge_mailbox_test=function(){
1313 return (this.env.messagecount&&(this.env.mailbox==this.env.trash_mailbox||this.env.mailbox==this.env.junk_mailbox||this.env.mailbox.match("^"+RegExp.escape(this.env.trash_mailbox)+RegExp.escape(this.env.delimiter))||this.env.mailbox.match("^"+RegExp.escape(this.env.junk_mailbox)+RegExp.escape(this.env.delimiter))));
1314 };
1315 this.set_message_icon=function(uid){
1316 var _9d;
1317 var _9e=this.message_list.rows;
1318 if(!_9e[uid]){
1319 return false;
1320 }
1321 if(_9e[uid].deleted&&this.env.deletedicon){
1322 _9d=this.env.deletedicon;
1323 }else{
1324 if(_9e[uid].replied&&this.env.repliedicon){
1325 if(_9e[uid].forwarded&&this.env.forwardedrepliedicon){
1326 _9d=this.env.forwardedrepliedicon;
1327 }else{
1328 _9d=this.env.repliedicon;
1329 }
1330 }else{
1331 if(_9e[uid].forwarded&&this.env.forwardedicon){
1332 _9d=this.env.forwardedicon;
1333 }else{
1334 if(_9e[uid].unread&&this.env.unreadicon){
1335 _9d=this.env.unreadicon;
1336 }else{
1337 if(this.env.messageicon){
1338 _9d=this.env.messageicon;
1339 }
1340 }
1341 }
1342 }
1343 }
1344 if(_9d&&_9e[uid].icon){
1345 _9e[uid].icon.src=_9d;
1346 }
1347 _9d="";
1348 if(_9e[uid].flagged&&this.env.flaggedicon){
1349 _9d=this.env.flaggedicon;
1350 }else{
1351 if(!_9e[uid].flagged&&this.env.unflaggedicon){
1352 _9d=this.env.unflaggedicon;
1353 }
1354 }
1355 if(_9e[uid].flagged_icon&&_9d){
1356 _9e[uid].flagged_icon.src=_9d;
1357 }
1358 };
1359 this.set_message_status=function(uid,_a0,_a1){
1360 var _a2=this.message_list.rows;
1361 if(!_a2[uid]){
1362 return false;
1363 }
1364 if(_a0=="unread"){
1365 _a2[uid].unread=_a1;
1366 }else{
1367 if(_a0=="deleted"){
1368 _a2[uid].deleted=_a1;
1369 }else{
1370 if(_a0=="replied"){
1371 _a2[uid].replied=_a1;
1372 }else{
1373 if(_a0=="forwarded"){
1374 _a2[uid].forwarded=_a1;
1375 }else{
1376 if(_a0=="flagged"){
1377 _a2[uid].flagged=_a1;
1378 }
1379 }
1380 }
1381 }
1382 }
1383 this.env.messages[uid]=_a2[uid];
1384 };
1385 this.set_message=function(uid,_a4,_a5){
1386 var _a6=this.message_list.rows;
1387 if(!_a6[uid]){
1388 return false;
1389 }
1390 if(_a4){
1391 this.set_message_status(uid,_a4,_a5);
1392 }
1393 if(_a6[uid].unread&&_a6[uid].classname.indexOf("unread")<0){
1394 _a6[uid].classname+=" unread";
1395 this.set_classname(_a6[uid].obj,"unread",true);
1396 }else{
1397 if(!_a6[uid].unread&&_a6[uid].classname.indexOf("unread")>=0){
1398 _a6[uid].classname=_a6[uid].classname.replace(/\s*unread/,"");
1399 this.set_classname(_a6[uid].obj,"unread",false);
1400 }
1401 }
1402 if(_a6[uid].deleted&&_a6[uid].classname.indexOf("deleted")<0){
1403 _a6[uid].classname+=" deleted";
1404 this.set_classname(_a6[uid].obj,"deleted",true);
1405 }else{
1406 if(!_a6[uid].deleted&&_a6[uid].classname.indexOf("deleted")>=0){
1407 _a6[uid].classname=_a6[uid].classname.replace(/\s*deleted/,"");
1408 this.set_classname(_a6[uid].obj,"deleted",false);
1409 }
1410 }
1411 if(_a6[uid].flagged&&_a6[uid].classname.indexOf("flagged")<0){
1412 _a6[uid].classname+=" flagged";
1413 this.set_classname(_a6[uid].obj,"flagged",true);
1414 }else{
1415 if(!_a6[uid].flagged&&_a6[uid].classname.indexOf("flagged")>=0){
1416 _a6[uid].classname=_a6[uid].classname.replace(/\s*flagged/,"");
1417 this.set_classname(_a6[uid].obj,"flagged",false);
1418 }
1419 }
1420 this.set_message_icon(uid);
1421 };
1422 this.move_messages=function(_a7){
1423 if(!_a7||_a7==this.env.mailbox||(!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length))){
1424 return;
1425 }
1426 var _a8=false;
1427 var _a9="&_target_mbox="+urlencode(_a7)+"&_from="+(this.env.action?this.env.action:"");
1428 if(this.env.action=="show"){
1429 _a8=true;
1430 this.set_busy(true,"movingmessage");
1431 }else{
1432 if(!this.env.flag_for_deletion){
1433 this.show_contentframe(false);
1434 }
1435 }
1436 this.enable_command("reply","reply-all","forward","delete","mark","print",false);
1437 this._with_selected_messages("moveto",_a8,_a9,(this.env.flag_for_deletion?false:true));
1438 };
1439 this.delete_messages=function(){
1440 var _aa=this.message_list?this.message_list.get_selection():new Array();
1441 if(!this.env.uid&&!_aa.length){
1442 return;
1443 }
1444 if(this.env.trash_mailbox&&String(this.env.mailbox).toLowerCase()!=String(this.env.trash_mailbox).toLowerCase()){
1445 if(this.message_list&&this.message_list.shiftkey){
1446 if(confirm(this.get_label("deletemessagesconfirm"))){
1447 this.permanently_remove_messages();
1448 }
1449 }else{
1450 this.move_messages(this.env.trash_mailbox);
1451 }
1452 }else{
1453 if(this.env.trash_mailbox&&String(this.env.mailbox).toLowerCase()==String(this.env.trash_mailbox).toLowerCase()){
1454 this.permanently_remove_messages();
1455 }else{
1456 if(!this.env.trash_mailbox&&this.env.flag_for_deletion){
1457 this.mark_message("delete");
1458 if(this.env.action=="show"){
1459 this.command("nextmessage","",this);
1460 }else{
1461 if(_aa.length==1){
1462 this.message_list.select_next();
1463 }
1464 }
1465 }else{
1466 if(!this.env.trash_mailbox){
1467 this.permanently_remove_messages();
1468 }
1469 }
1470 }
1471 }
1472 };
1473 this.permanently_remove_messages=function(){
1474 if(!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length)){
1475 return;
1476 }
1477 this.show_contentframe(false);
1478 this._with_selected_messages("delete",false,"&_from="+(this.env.action?this.env.action:""),true);
1479 };
1480 this._with_selected_messages=function(_ab,_ac,_ad,_ae){
1481 var _af=new Array();
1482 if(this.env.uid){
1483 _af[0]=this.env.uid;
1484 }else{
1485 var _b0=this.message_list.get_selection();
1486 var _b1=this.message_list.rows;
1487 var id;
1488 for(var n=0;n<_b0.length;n++){
1489 id=_b0[n];
1490 _af[_af.length]=id;
1491 if(_ae){
1492 this.message_list.remove_row(id,(n==_b0.length-1));
1493 }else{
1494 this.set_message_status(id,"deleted",true);
1495 if(this.env.read_when_deleted){
1496 this.set_message_status(id,"unread",false);
1497 }
1498 this.set_message(id);
1499 }
1500 }
1501 }
1502 if(this.env.search_request){
1503 _ad+="&_search="+this.env.search_request;
1504 }
1505 this.http_post(_ab,"_uid="+_af.join(",")+"&_mbox="+urlencode(this.env.mailbox)+_ad,_ac);
1506 };
1507 this.mark_message=function(_b4,uid){
1508 var _b6=new Array();
1509 var _b7=new Array();
1510 var _b8=this.message_list?this.message_list.get_selection():new Array();
1511 if(uid){
1512 _b6[0]=uid;
1513 }else{
1514 if(this.env.uid){
1515 _b6[0]=this.env.uid;
1516 }else{
1517 if(this.message_list){
1518 for(var n=0;n<_b8.length;n++){
1519 _b6[_b6.length]=_b8[n];
1520 }
1521 }
1522 }
1523 }
1524 if(!this.message_list){
1525 _b7=_b6;
1526 }else{
1527 for(var id,n=0;n<_b6.length;n++){
1528 id=_b6[n];
1529 if((_b4=="read"&&this.message_list.rows[id].unread)||(_b4=="unread"&&!this.message_list.rows[id].unread)||(_b4=="delete"&&!this.message_list.rows[id].deleted)||(_b4=="undelete"&&this.message_list.rows[id].deleted)||(_b4=="flagged"&&!this.message_list.rows[id].flagged)||(_b4=="unflagged"&&this.message_list.rows[id].flagged)){
1530 _b7[_b7.length]=id;
1531 }
1532 }
1533 }
1534 if(!_b7.length){
1535 return;
1536 }
1537 switch(_b4){
1538 case "read":
1539 case "unread":
1540 this.toggle_read_status(_b4,_b7);
1541 break;
1542 case "delete":
1543 case "undelete":
1544 this.toggle_delete_status(_b7);
1545 break;
1546 case "flagged":
1547 case "unflagged":
1548 this.toggle_flagged_status(_b4,_b6);
1549 break;
1550 }
1551 };
1552 this.toggle_read_status=function(_bb,_bc){
1553 for(var i=0;i<_bc.length;i++){
1554 this.set_message(_bc[i],"unread",(_bb=="unread"?true:false));
1555 }
1556 this.http_post("mark","_uid="+_bc.join(",")+"&_flag="+_bb);
1557 };
1558 this.toggle_flagged_status=function(_be,_bf){
1559 for(var i=0;i<_bf.length;i++){
1560 this.set_message(_bf[i],"flagged",(_be=="flagged"?true:false));
1561 }
1562 this.http_post("mark","_uid="+_bf.join(",")+"&_flag="+_be);
1563 };
1564 this.toggle_delete_status=function(_c1){
1565 var _c2=this.message_list?this.message_list.rows:new Array();
1566 if(_c1.length==1){
1567 if(!_c2.length||(_c2[_c1[0]]&&!_c2[_c1[0]].deleted)){
1568 this.flag_as_deleted(_c1);
1569 }else{
1570 this.flag_as_undeleted(_c1);
1571 }
1572 return true;
1573 }
1574 var _c3=true;
1575 for(var i=0;i<_c1.length;i++){
1576 uid=_c1[i];
1577 if(_c2[uid]){
1578 if(!_c2[uid].deleted){
1579 _c3=false;
1580 break;
1581 }
1582 }
1583 }
1584 if(_c3){
1585 this.flag_as_undeleted(_c1);
1586 }else{
1587 this.flag_as_deleted(_c1);
1588 }
1589 return true;
1590 };
1591 this.flag_as_undeleted=function(_c5){
1592 for(var i=0;i<_c5.length;i++){
1593 this.set_message(_c5[i],"deleted",false);
1594 }
1595 this.http_post("mark","_uid="+_c5.join(",")+"&_flag=undelete");
1596 return true;
1597 };
1598 this.flag_as_deleted=function(_c7){
1599 var _c8="";
1600 var _c9=new Array();
1601 var _ca=this.message_list?this.message_list.rows:new Array();
1602 for(var i=0;i<_c7.length;i++){
1603 uid=_c7[i];
1604 if(_ca[uid]){
1605 this.set_message(uid,"deleted",true);
1606 if(_ca[uid].unread){
1607 _c9[_c9.length]=uid;
1608 }
1609 }
1610 }
1611 if(_c9.length){
1612 _c8="&_ruid="+_c9.join(",");
1613 }
1614 this.http_post("mark","_uid="+_c7.join(",")+"&_flag=delete"+_c8);
1615 return true;
1616 };
1617 this.flag_deleted_as_read=function(_cc){
1618 var _cd;
1619 var _ce=this.message_list?this.message_list.rows:new Array();
1620 var str=String(_cc);
1621 var _d0=new Array();
1622 _d0=str.split(",");
1623 for(var uid,i=0;i<_d0.length;i++){
1624 uid=_d0[i];
1625 if(_ce[uid]){
1626 this.set_message(uid,"unread",false);
1627 }
1628 }
1629 };
1630 this.login_user_keyup=function(e){
1631 var key=rcube_event.get_keycode(e);
1632 var elm;
1633 if((key==13)&&(elm=rcube_find_object("_pass"))){
1634 elm.focus();
1635 return false;
1636 }
1637 };
1638 this.check_compose_input=function(){
1639 var _d6=rcube_find_object("_to");
1640 var _d7=rcube_find_object("_cc");
1641 var _d8=rcube_find_object("_bcc");
1642 var _d9=rcube_find_object("_from");
1643 var _da=rcube_find_object("_subject");
1644 var _db=rcube_find_object("_message");
1645 if(_d9.type=="text"&&!rcube_check_email(_d9.value,true)){
1646 alert(this.get_label("nosenderwarning"));
1647 _d9.focus();
1648 return false;
1649 }
1650 var _dc=_d6.value?_d6.value:(_d7.value?_d7.value:_d8.value);
1651 if(!rcube_check_email(_dc.replace(/^\s+/,"").replace(/[\s,;]+$/,""),true)){
1652 alert(this.get_label("norecipientwarning"));
1653 _d6.focus();
1654 return false;
1655 }
1656 if(_da&&_da.value==""){
1657 var _dd=prompt(this.get_label("nosubjectwarning"),this.get_label("nosubject"));
1658 if(!_dd&&_dd!==""){
1659 _da.focus();
1660 return false;
1661 }else{
1662 _da.value=_dd?_dd:this.get_label("nosubject");
1663 }
1664 }
1665 if((!window.tinyMCE||!tinyMCE.get("compose-body"))&&_db.value==""&&!confirm(this.get_label("nobodywarning"))){
1666 _db.focus();
1667 return false;
1668 }else{
1669 if(window.tinyMCE&&tinyMCE.get("compose-body")&&!tinyMCE.get("compose-body").getContent()&&!confirm(this.get_label("nobodywarning"))){
1670 tinyMCE.get("compose-body").focus();
1671 return false;
1672 }
1673 }
1674 this.stop_spellchecking();
1675 return true;
1676 };
1677 this.stop_spellchecking=function(){
1678 if(this.env.spellcheck&&!this.spellcheck_ready){
1679 exec_event(this.env.spellcheck.check_link,"click");
1680 this.set_spellcheck_state("ready");
1681 }
1682 };
1683 this.display_spellcheck_controls=function(vis){
1684 if(this.env.spellcheck){
1685 if(!vis){
1686 this.stop_spellchecking();
1687 }
1688 this.env.spellcheck.check_link.style.visibility=vis?"visible":"hidden";
1689 this.env.spellcheck.switch_lan_pic.style.visibility=vis?"visible":"hidden";
1690 }
1691 };
1692 this.set_spellcheck_state=function(s){
1693 this.spellcheck_ready=(s=="check_spelling"||s=="ready");
1694 this.enable_command("spellcheck",this.spellcheck_ready);
1695 };
1696 this.set_draft_id=function(id){
1697 var f;
1698 if(f=rcube_find_object("_draft_saveid")){
1699 f.value=id;
1700 }
1701 };
1702 this.auto_save_start=function(){
1703 if(this.env.draft_autosave){
1704 this.save_timer=self.setTimeout(function(){
1705 _1.command("savedraft");
1706 },this.env.draft_autosave*1000);
1707 }
1708 this.busy=false;
1709 };
1710 this.compose_field_hash=function(_e2){
1711 var _e3=rcube_find_object("_to");
1712 var _e4=rcube_find_object("_cc");
1713 var _e5=rcube_find_object("_bcc");
1714 var _e6=rcube_find_object("_subject");
1715 var _e7,_e8;
1716 var str="";
1717 if(_e3&&_e3.value){
1718 str+=_e3.value+":";
1719 }
1720 if(_e4&&_e4.value){
1721 str+=_e4.value+":";
1722 }
1723 if(_e5&&_e5.value){
1724 str+=_e5.value+":";
1725 }
1726 if(_e6&&_e6.value){
1727 str+=_e6.value+":";
1728 }
1729 if(_e7=tinyMCE.get("compose-body")){
1730 str+=_e7.getContent();
1731 }else{
1732 _e8=rcube_find_object("_message");
1733 str+=_e8.value;
1734 }
1735 if(_e2){
1736 this.cmp_hash=str;
1737 }
1738 return str;
1739 };
1740 this.change_identity=function(obj){
1741 if(!obj||!obj.options){
1742 return false;
1743 }
1744 var id=obj.options[obj.selectedIndex].value;
1745 var _ec=rcube_find_object("_message");
1746 var _ed=_ec?_ec.value:"";
1747 var _ee=(rcube_find_object("_is_html").value=="1");
1748 var sig,p;
1749 if(!this.env.identity){
1750 this.env.identity=id;
1751 }
1752 if(!_ee){
1753 if(this.env.identity&&this.env.signatures&&this.env.signatures[this.env.identity]){
1754 if(this.env.signatures[this.env.identity]["is_html"]){
1755 sig=this.env.signatures[this.env.identity]["plain_text"];
1756 }else{
1757 sig=this.env.signatures[this.env.identity]["text"];
1758 }
1759 if(sig.indexOf("-- ")!=0){
1760 sig="-- \n"+sig;
1761 }
1762 p=_ed.lastIndexOf(sig);
1763 if(p>=0){
1764 _ed=_ed.substring(0,p-1)+_ed.substring(p+sig.length,_ed.length);
1765 }
1766 }
1767 _ed=_ed.replace(/[\r\n]+$/,"");
1768 if(this.env.signatures&&this.env.signatures[id]){
1769 sig=this.env.signatures[id]["text"];
1770 if(this.env.signatures[id]["is_html"]){
1771 sig=this.env.signatures[id]["plain_text"];
1772 }
1773 if(sig.indexOf("-- ")!=0){
1774 sig="-- \n"+sig;
1775 }
1776 _ed+="\n\n"+sig;
1777 }
1778 }else{
1779 var _f1=tinyMCE.get("compose-body");
1780 if(this.env.signatures){
1781 var _f2=_f1.dom.get("_rc_sig");
1782 var _f3="";
1783 var _f4=true;
1784 if(!_f2){
1785 if(bw.ie){
1786 _f1.getBody().appendChild(_f1.getDoc().createElement("br"));
1787 }
1788 _f2=_f1.getDoc().createElement("div");
1789 _f2.setAttribute("id","_rc_sig");
1790 _f1.getBody().appendChild(_f2);
1791 }
1792 if(this.env.signatures[id]){
1793 _f3=this.env.signatures[id]["text"];
1794 _f4=this.env.signatures[id]["is_html"];
1795 if(_f3){
1796 if(_f4&&this.env.signatures[id]["plain_text"].indexOf("-- ")!=0){
1797 _f3="<p>-- </p>"+_f3;
1798 }else{
1799 if(!_f4&&_f3.indexOf("-- ")!=0){
1800 _f3="-- \n"+_f3;
1801 }
1802 }
1803 }
1804 }
1805 if(_f4){
1806 _f2.innerHTML=_f3;
1807 }else{
1808 _f2.innerHTML="<pre>"+_f3+"</pre>";
1809 }
1810 }
1811 }
1812 if(_ec){
1813 _ec.value=_ed;
1814 }
1815 this.env.identity=id;
1816 return true;
1817 };
1818 this.show_attachment_form=function(a){
1819 if(!this.gui_objects.uploadbox){
1820 return false;
1821 }
1822 var elm,_f7;
1823 if(elm=this.gui_objects.uploadbox){
1824 if(a&&(_f7=this.gui_objects.attachmentlist)){
1825 var pos=rcube_get_object_pos(_f7);
1826 var _f9=pos.x;
1827 var top=pos.y+_f7.offsetHeight+10;
1828 elm.style.top=top+"px";
1829 elm.style.left=_f9+"px";
1830 }
1831 elm.style.visibility=a?"visible":"hidden";
1832 }
1833 try{
1834 if(!a&&this.gui_objects.attachmentform!=this.gui_objects.messageform){
1835 this.gui_objects.attachmentform.reset();
1836 }
1837 }
1838 catch(e){
1839 }
1840 return true;
1841 };
1842 this.upload_file=function(_fb){
1843 if(!_fb){
1844 return false;
1845 }
1846 var _fc=false;
1847 for(var n=0;n<_fb.elements.length;n++){
1848 if(_fb.elements[n].type=="file"&&_fb.elements[n].value){
1849 _fc=true;
1850 break;
1851 }
1852 }
1853 if(_fc){
1854 var ts=new Date().getTime();
1855 var _ff="rcmupload"+ts;
1856 if(document.all){
1857 var html="<iframe name=\""+_ff+"\" src=\"program/blank.gif\" style=\"width:0;height:0;visibility:hidden;\"></iframe>";
1858 document.body.insertAdjacentHTML("BeforeEnd",html);
1859 }else{
1860 var _101=document.createElement("IFRAME");
1861 _101.name=_ff;
1862 _101.style.border="none";
1863 _101.style.width=0;
1864 _101.style.height=0;
1865 _101.style.visibility="hidden";
1866 document.body.appendChild(_101);
1867 }
1868 _fb.target=_ff;
1869 _fb.action=this.env.comm_path+"&_action=upload";
1870 _fb.setAttribute("enctype","multipart/form-data");
1871 _fb.submit();
1872 }
1873 this.gui_objects.attachmentform=_fb;
1874 return true;
1875 };
1876 this.add2attachment_list=function(name,_103){
1877 if(!this.gui_objects.attachmentlist){
1878 return false;
1879 }
1880 var li=document.createElement("LI");
1881 li.id=name;
1882 li.innerHTML=_103;
1883 this.gui_objects.attachmentlist.appendChild(li);
1884 return true;
1885 };
1886 this.remove_from_attachment_list=function(name){
1887 if(!this.gui_objects.attachmentlist){
1888 return false;
1889 }
1890 var list=this.gui_objects.attachmentlist.getElementsByTagName("li");
1891 for(i=0;i<list.length;i++){
1892 if(list[i].id==name){
1893 this.gui_objects.attachmentlist.removeChild(list[i]);
1894 }
1895 }
1896 };
1897 this.remove_attachment=function(name){
1898 if(name){
1899 this.http_post("remove-attachment","_file="+urlencode(name));
1900 }
1901 return true;
1902 };
1903 this.add_contact=function(_108){
1904 if(_108){
1905 this.http_post("addcontact","_address="+_108);
1906 }
1907 return true;
1908 };
1909 this.qsearch=function(_109,_10a){
1910 if(_109!=""){
1911 if(this.message_list){
1912 this.message_list.clear();
1913 }else{
1914 if(this.contact_list){
1915 this.contact_list.clear(true);
1916 this.show_contentframe(false);
1917 }
1918 }
1919 if(this.gui_objects.search_filter){
1920 _10a="&_filter="+this.gui_objects.search_filter.value;
1921 }
1922 this.env.current_page=1;
1923 this.set_busy(true,"searching");
1924 this.http_request("search","_q="+urlencode(_109)+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):"")+(this.env.source?"&_source="+urlencode(this.env.source):"")+(_10a?_10a:""),true);
1925 }
1926 return true;
1927 };
1928 this.reset_qsearch=function(){
1929 if(this.gui_objects.qsearchbox){
1930 this.gui_objects.qsearchbox.value="";
1931 }
1932 this.env.search_request=null;
1933 return true;
1934 };
1935 this.sent_successfully=function(type,msg){
1936 this.list_mailbox();
1937 this.display_message(msg,type,true);
1938 };
1939 this.ksearch_keypress=function(e,obj){
1940 if(this.ksearch_timer){
1941 clearTimeout(this.ksearch_timer);
1942 }
1943 var _10f;
1944 var key=rcube_event.get_keycode(e);
1945 var mod=rcube_event.get_modifier(e);
1946 switch(key){
1947 case 38:
1948 case 40:
1949 if(!this.ksearch_pane){
1950 break;
1951 }
1952 var dir=key==38?1:0;
1953 _10f=document.getElementById("rcmksearchSelected");
1954 if(!_10f){
1955 _10f=this.ksearch_pane.ul.firstChild;
1956 }
1957 if(_10f){
1958 this.ksearch_select(dir?_10f.previousSibling:_10f.nextSibling);
1959 }
1960 return rcube_event.cancel(e);
1961 case 9:
1962 if(mod==SHIFT_KEY){
1963 break;
1964 }
1965 case 13:
1966 if(this.ksearch_selected===null||!this.ksearch_input||!this.ksearch_value){
1967 break;
1968 }
1969 this.insert_recipient(this.ksearch_selected);
1970 this.ksearch_hide();
1971 return rcube_event.cancel(e);
1972 case 27:
1973 this.ksearch_hide();
1974 break;
1975 case 37:
1976 case 39:
1977 if(mod!=SHIFT_KEY){
1978 return;
1979 }
1980 }
1981 this.ksearch_timer=window.setTimeout(function(){
1982 _1.ksearch_get_results();
1983 },200);
1984 this.ksearch_input=obj;
1985 return true;
1986 };
1987 this.ksearch_select=function(node){
1988 var _114=document.getElementById("rcmksearchSelected");
1989 if(_114&&node){
1990 _114.removeAttribute("id");
1991 this.set_classname(_114,"selected",false);
1992 }
1993 if(node){
1994 node.setAttribute("id","rcmksearchSelected");
1995 this.set_classname(node,"selected",true);
1996 this.ksearch_selected=node._rcm_id;
1997 }
1998 };
1999 this.insert_recipient=function(id){
2000 if(!this.env.contacts[id]||!this.ksearch_input){
2001 return;
2002 }
2003 var _116=this.ksearch_input.value.toLowerCase();
2004 var cpos=this.get_caret_pos(this.ksearch_input);
2005 var p=_116.lastIndexOf(this.ksearch_value,cpos);
2006 var pre=this.ksearch_input.value.substring(0,p);
2007 var end=this.ksearch_input.value.substring(p+this.ksearch_value.length,this.ksearch_input.value.length);
2008 var _11b=this.env.contacts[id]+", ";
2009 this.ksearch_input.value=pre+_11b+end;
2010 cpos=p+_11b.length;
2011 if(this.ksearch_input.setSelectionRange){
2012 this.ksearch_input.setSelectionRange(cpos,cpos);
2013 }
2014 };
2015 this.ksearch_get_results=function(){
2016 var _11c=this.ksearch_input?this.ksearch_input.value:null;
2017 if(_11c===null){
2018 return;
2019 }
2020 if(this.ksearch_pane&&this.ksearch_pane.visible){
2021 this.ksearch_pane.show(0);
2022 }
2023 var cpos=this.get_caret_pos(this.ksearch_input);
2024 var p=_11c.lastIndexOf(",",cpos-1);
2025 var q=_11c.substring(p+1,cpos);
2026 q=q.replace(/(^\s+|\s+$)/g,"").toLowerCase();
2027 if(!q.length||q==this.ksearch_value){
2028 return;
2029 }
2030 this.ksearch_value=q;
2031 this.display_message(this.get_label("searching"),"loading",true);
2032 this.http_post("autocomplete","_search="+q);
2033 };
2034 this.ksearch_query_results=function(_120,_121){
2035 if(_121!=this.ksearch_value){
2036 return;
2037 }
2038 this.hide_message();
2039 this.env.contacts=_120?_120:[];
2040 this.ksearch_display_results(this.env.contacts);
2041 };
2042 this.ksearch_display_results=function(_122){
2043 if(_122.length&&this.ksearch_input){
2044 var p,ul,li;
2045 if(!this.ksearch_pane){
2046 ul=document.createElement("UL");
2047 this.ksearch_pane=new rcube_layer("rcmKSearchpane",{vis:0,zindex:30000});
2048 this.ksearch_pane.elm.appendChild(ul);
2049 this.ksearch_pane.ul=ul;
2050 }else{
2051 ul=this.ksearch_pane.ul;
2052 }
2053 ul.innerHTML="";
2054 for(i=0;i<_122.length;i++){
2055 li=document.createElement("LI");
2056 li.innerHTML=_122[i].replace(new RegExp("("+this.ksearch_value+")","ig"),"##$1%%").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/##([^%]+)%%/g,"<b>$1</b>");
2057 li.onmouseover=function(){
2058 _1.ksearch_select(this);
2059 };
2060 li.onmouseup=function(){
2061 _1.ksearch_click(this);
2062 };
2063 li._rcm_id=i;
2064 ul.appendChild(li);
2065 }
2066 ul.firstChild.setAttribute("id","rcmksearchSelected");
2067 this.set_classname(ul.firstChild,"selected",true);
2068 this.ksearch_selected=0;
2069 var pos=rcube_get_object_pos(this.ksearch_input);
2070 this.ksearch_pane.move(pos.x,pos.y+this.ksearch_input.offsetHeight);
2071 this.ksearch_pane.show(1);
2072 }else{
2073 this.ksearch_hide();
2074 }
2075 };
2076 this.ksearch_click=function(node){
2077 if(this.ksearch_input){
2078 this.ksearch_input.focus();
2079 }
2080 this.insert_recipient(node._rcm_id);
2081 this.ksearch_hide();
2082 };
2083 this.ksearch_blur=function(){
2084 if(this.ksearch_timer){
2085 clearTimeout(this.ksearch_timer);
2086 }
2087 this.ksearch_value="";
2088 this.ksearch_input=null;
2089 this.ksearch_hide();
2090 };
2091 this.ksearch_hide=function(){
2092 this.ksearch_selected=null;
2093 if(this.ksearch_pane){
2094 this.ksearch_pane.show(0);
2095 }
2096 };
2097 this.contactlist_keypress=function(list){
2098 if(list.key_pressed==list.DELETE_KEY){
2099 this.command("delete");
2100 }
2101 };
2102 this.contactlist_select=function(list){
2103 if(this.preview_timer){
2104 clearTimeout(this.preview_timer);
2105 }
2106 var id,_12b,_1=this;
2107 if(id=list.get_single_selection()){
2108 this.preview_timer=window.setTimeout(function(){
2109 _1.load_contact(id,"show");
2110 },200);
2111 }else{
2112 if(this.env.contentframe){
2113 this.show_contentframe(false);
2114 }
2115 }
2116 this.enable_command("compose",list.selection.length>0);
2117 this.enable_command("edit",(id&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly)?true:false);
2118 this.enable_command("delete",list.selection.length&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly);
2119 return false;
2120 };
2121 this.list_contacts=function(src,page){
2122 var _12e="";
2123 var _12f=window;
2124 if(!src){
2125 src=this.env.source;
2126 }
2127 if(page&&this.current_page==page&&src==this.env.source){
2128 return false;
2129 }
2130 if(src!=this.env.source){
2131 page=1;
2132 this.env.current_page=page;
2133 this.reset_qsearch();
2134 }
2135 this.select_folder(src,this.env.source);
2136 this.env.source=src;
2137 if(this.gui_objects.contactslist){
2138 this.list_contacts_remote(src,page);
2139 return;
2140 }
2141 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
2142 _12f=window.frames[this.env.contentframe];
2143 _12e="&_framed=1";
2144 }
2145 if(this.env.search_request){
2146 _12e+="&_search="+this.env.search_request;
2147 }
2148 this.set_busy(true,"loading");
2149 _12f.location.href=this.env.comm_path+(src?"&_source="+urlencode(src):"")+(page?"&_page="+page:"")+_12e;
2150 };
2151 this.list_contacts_remote=function(src,page){
2152 this.contact_list.clear(true);
2153 this.show_contentframe(false);
2154 this.enable_command("delete","compose",false);
2155 var url=(src?"_source="+urlencode(src):"")+(page?(src?"&":"")+"_page="+page:"");
2156 this.env.source=src;
2157 if(this.env.search_request){
2158 url+="&_search="+this.env.search_request;
2159 }
2160 this.set_busy(true,"loading");
2161 this.http_request("list",url,true);
2162 };
2163 this.load_contact=function(cid,_134,_135){
2164 var _136="";
2165 var _137=window;
2166 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
2167 _136="&_framed=1";
2168 _137=window.frames[this.env.contentframe];
2169 this.show_contentframe(true);
2170 }else{
2171 if(_135){
2172 return false;
2173 }
2174 }
2175 if(_134&&(cid||_134=="add")&&!this.drag_active){
2176 this.set_busy(true);
2177 _137.location.href=this.env.comm_path+"&_action="+_134+"&_source="+urlencode(this.env.source)+"&_cid="+urlencode(cid)+_136;
2178 }
2179 return true;
2180 };
2181 this.copy_contact=function(cid,to){
2182 if(!cid){
2183 cid=this.contact_list.get_selection().join(",");
2184 }
2185 if(to!=this.env.source&&cid&&this.env.address_sources[to]&&!this.env.address_sources[to].readonly){
2186 this.http_post("copy","_cid="+urlencode(cid)+"&_source="+urlencode(this.env.source)+"&_to="+urlencode(to));
2187 }
2188 };
2189 this.delete_contacts=function(){
2190 var _13a=this.contact_list.get_selection();
2191 if(!(_13a.length||this.env.cid)||!confirm(this.get_label("deletecontactconfirm"))){
2192 return;
2193 }
2194 var _13b=new Array();
2195 var qs="";
2196 if(this.env.cid){
2197 _13b[_13b.length]=this.env.cid;
2198 }else{
2199 var id;
2200 for(var n=0;n<_13a.length;n++){
2201 id=_13a[n];
2202 _13b[_13b.length]=id;
2203 this.contact_list.remove_row(id,(n==_13a.length-1));
2204 }
2205 if(_13a.length==1){
2206 this.show_contentframe(false);
2207 }
2208 }
2209 if(this.env.search_request){
2210 qs+="&_search="+this.env.search_request;
2211 }
2212 this.http_post("delete","_cid="+urlencode(_13b.join(","))+"&_source="+urlencode(this.env.source)+"&_from="+(this.env.action?this.env.action:"")+qs);
2213 return true;
2214 };
2215 this.update_contact_row=function(cid,_140){
2216 var row;
2217 if(this.contact_list.rows[cid]&&(row=this.contact_list.rows[cid].obj)){
2218 for(var c=0;c<_140.length;c++){
2219 if(row.cells[c]){
2220 row.cells[c].innerHTML=_140[c];
2221 }
2222 }
2223 return true;
2224 }
2225 return false;
2226 };
2227 this.init_subscription_list=function(){
2228 var p=this;
2229 this.subscription_list=new rcube_list_widget(this.gui_objects.subscriptionlist,{multiselect:false,draggable:true,keyboard:false,toggleselect:true});
2230 this.subscription_list.addEventListener("select",function(o){
2231 p.subscription_select(o);
2232 });
2233 this.subscription_list.addEventListener("dragstart",function(o){
2234 p.drag_active=true;
2235 });
2236 this.subscription_list.addEventListener("dragend",function(o){
2237 p.subscription_move_folder(o);
2238 });
2239 this.subscription_list.row_init=function(row){
2240 var _148=row.obj.getElementsByTagName("A");
2241 if(_148[0]){
2242 _148[0].onclick=function(){
2243 p.rename_folder(row.id);
2244 return false;
2245 };
2246 }
2247 if(_148[1]){
2248 _148[1].onclick=function(){
2249 p.delete_folder(row.id);
2250 return false;
2251 };
2252 }
2253 row.obj.onmouseover=function(){
2254 p.focus_subscription(row.id);
2255 };
2256 row.obj.onmouseout=function(){
2257 p.unfocus_subscription(row.id);
2258 };
2259 };
2260 this.subscription_list.init();
2261 };
2262 this.identity_select=function(list){
2263 var id;
2264 if(id=list.get_single_selection()){
2265 this.load_identity(id,"edit-identity");
2266 }
2267 };
2268 this.load_identity=function(id,_14c){
2269 if(_14c=="edit-identity"&&(!id||id==this.env.iid)){
2270 return false;
2271 }
2272 var _14d="";
2273 var _14e=window;
2274 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
2275 _14d="&_framed=1";
2276 _14e=window.frames[this.env.contentframe];
2277 document.getElementById(this.env.contentframe).style.visibility="inherit";
2278 }
2279 if(_14c&&(id||_14c=="add-identity")){
2280 this.set_busy(true);
2281 _14e.location.href=this.env.comm_path+"&_action="+_14c+"&_iid="+id+_14d;
2282 }
2283 return true;
2284 };
2285 this.delete_identity=function(id){
2286 var _150=this.identity_list.get_selection();
2287 if(!(_150.length||this.env.iid)){
2288 return;
2289 }
2290 if(!id){
2291 id=this.env.iid?this.env.iid:_150[0];
2292 }
2293 this.goto_url("delete-identity","_iid="+id,true);
2294 return true;
2295 };
2296 this.focus_subscription=function(id){
2297 var row,_153;
2298 var reg=RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
2299 if(this.drag_active&&this.env.folder&&(row=document.getElementById(id))){
2300 if(this.env.subscriptionrows[id]&&(_153=this.env.subscriptionrows[id][0])){
2301 if(this.check_droptarget(_153)&&!this.env.subscriptionrows[this.get_folder_row_id(this.env.folder)][2]&&(_153!=this.env.folder.replace(reg,""))&&(!_153.match(new RegExp("^"+RegExp.escape(this.env.folder+this.env.delimiter))))){
2302 this.set_env("dstfolder",_153);
2303 this.set_classname(row,"droptarget",true);
2304 }
2305 }else{
2306 if(this.env.folder.match(new RegExp(RegExp.escape(this.env.delimiter)))){
2307 this.set_env("dstfolder",this.env.delimiter);
2308 this.set_classname(this.subscription_list.frame,"droptarget",true);
2309 }
2310 }
2311 }
2312 };
2313 this.unfocus_subscription=function(id){
2314 var row;
2315 this.set_env("dstfolder",null);
2316 if(this.env.subscriptionrows[id]&&(row=document.getElementById(id))){
2317 this.set_classname(row,"droptarget",false);
2318 }else{
2319 this.set_classname(this.subscription_list.frame,"droptarget",false);
2320 }
2321 };
2322 this.subscription_select=function(list){
2323 var id,_159;
2324 if((id=list.get_single_selection())&&this.env.subscriptionrows["rcmrow"+id]&&(_159=this.env.subscriptionrows["rcmrow"+id][0])){
2325 this.set_env("folder",_159);
2326 }else{
2327 this.set_env("folder",null);
2328 }
2329 if(this.gui_objects.createfolderhint){
2330 this.gui_objects.createfolderhint.innerHTML=this.env.folder?this.get_label("addsubfolderhint"):"";
2331 }
2332 };
2333 this.subscription_move_folder=function(list){
2334 var reg=RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
2335 if(this.env.folder&&this.env.dstfolder&&(this.env.dstfolder!=this.env.folder)&&(this.env.dstfolder!=this.env.folder.replace(reg,""))){
2336 var reg=new RegExp("[^"+RegExp.escape(this.env.delimiter)+"]*["+RegExp.escape(this.env.delimiter)+"]","g");
2337 var _15c=this.env.folder.replace(reg,"");
2338 var _15d=this.env.dstfolder==this.env.delimiter?_15c:this.env.dstfolder+this.env.delimiter+_15c;
2339 this.set_busy(true,"foldermoving");
2340 this.http_post("rename-folder","_folder_oldname="+urlencode(this.env.folder)+"&_folder_newname="+urlencode(_15d),true);
2341 }
2342 this.drag_active=false;
2343 this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder));
2344 };
2345 this.create_folder=function(name){
2346 if(this.edit_folder){
2347 this.reset_folder_rename();
2348 }
2349 var form;
2350 if((form=this.gui_objects.editform)&&form.elements["_folder_name"]){
2351 name=form.elements["_folder_name"].value;
2352 if(name.indexOf(this.env.delimiter)>=0){
2353 alert(this.get_label("forbiddencharacter")+" ("+this.env.delimiter+")");
2354 return false;
2355 }
2356 if(this.env.folder&&name!=""){
2357 name=this.env.folder+this.env.delimiter+name;
2358 }
2359 this.set_busy(true,"foldercreating");
2360 this.http_post("create-folder","_name="+urlencode(name),true);
2361 }else{
2362 if(form.elements["_folder_name"]){
2363 form.elements["_folder_name"].focus();
2364 }
2365 }
2366 };
2367 this.rename_folder=function(id){
2368 var temp,row,form;
2369 if(temp=this.edit_folder){
2370 this.reset_folder_rename();
2371 if(temp==id){
2372 return;
2373 }
2374 }
2375 if(id&&this.env.subscriptionrows[id]&&(row=document.getElementById(id))){
2376 var reg=new RegExp(".*["+RegExp.escape(this.env.delimiter)+"]");
2377 this.name_input=document.createElement("INPUT");
2378 this.name_input.value=this.env.subscriptionrows[id][0].replace(reg,"");
2379 this.name_input.style.width="100%";
2380 reg=new RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
2381 this.name_input.__parent=this.env.subscriptionrows[id][0].replace(reg,"");
2382 this.name_input.onkeypress=function(e){
2383 rcmail.name_input_keypress(e);
2384 };
2385 row.cells[0].replaceChild(this.name_input,row.cells[0].firstChild);
2386 this.edit_folder=id;
2387 this.name_input.select();
2388 if(form=this.gui_objects.editform){
2389 form.onsubmit=function(){
2390 return false;
2391 };
2392 }
2393 }
2394 };
2395 this.reset_folder_rename=function(){
2396 var cell=this.name_input?this.name_input.parentNode:null;
2397 if(cell&&this.edit_folder&&this.env.subscriptionrows[this.edit_folder]){
2398 cell.innerHTML=this.env.subscriptionrows[this.edit_folder][1];
2399 }
2400 this.edit_folder=null;
2401 };
2402 this.name_input_keypress=function(e){
2403 var key=rcube_event.get_keycode(e);
2404 if(key==13){
2405 var _169=this.name_input?this.name_input.value:null;
2406 if(this.edit_folder&&_169){
2407 if(_169.indexOf(this.env.delimiter)>=0){
2408 alert(this.get_label("forbiddencharacter")+" ("+this.env.delimiter+")");
2409 return false;
2410 }
2411 if(this.name_input.__parent){
2412 _169=this.name_input.__parent+this.env.delimiter+_169;
2413 }
2414 this.set_busy(true,"folderrenaming");
2415 this.http_post("rename-folder","_folder_oldname="+urlencode(this.env.subscriptionrows[this.edit_folder][0])+"&_folder_newname="+urlencode(_169),true);
2416 }
2417 }else{
2418 if(key==27){
2419 this.reset_folder_rename();
2420 }
2421 }
2422 };
2423 this.delete_folder=function(id){
2424 var _16b=this.env.subscriptionrows[id][0];
2425 if(this.edit_folder){
2426 this.reset_folder_rename();
2427 }
2428 if(_16b&&confirm(this.get_label("deletefolderconfirm"))){
2429 this.set_busy(true,"folderdeleting");
2430 this.http_post("delete-folder","_mboxes="+urlencode(_16b),true);
2431 this.set_env("folder",null);
2432 if(this.gui_objects.createfolderhint){
2433 this.gui_objects.createfolderhint.innerHTML="";
2434 }
2435 }
2436 };
2437 this.add_folder_row=function(name,_16d,_16e,_16f){
2438 if(!this.gui_objects.subscriptionlist){
2439 return false;
2440 }
2441 for(var _170 in this.env.subscriptionrows){
2442 if(this.env.subscriptionrows[_170]!=null&&!this.env.subscriptionrows[_170][2]){
2443 break;
2444 }
2445 }
2446 var _171,form;
2447 var _173=this.gui_objects.subscriptionlist.tBodies[0];
2448 var id="rcmrow"+(_173.childNodes.length+1);
2449 var _175=this.subscription_list.get_single_selection();
2450 if(_16e&&_16e.id){
2451 id=_16e.id;
2452 _170=_16e.id;
2453 }
2454 if(!id||!(_171=document.getElementById(_170))){
2455 this.goto_url("folders");
2456 }else{
2457 var row=this.clone_table_row(_171);
2458 row.id=id;
2459 if(_16f&&(_16f=this.get_folder_row_id(_16f))){
2460 _173.insertBefore(row,document.getElementById(_16f));
2461 }else{
2462 _173.appendChild(row);
2463 }
2464 if(_16e){
2465 _173.removeChild(_16e);
2466 }
2467 }
2468 this.env.subscriptionrows[row.id]=[name,_16d,0];
2469 row.cells[0].innerHTML=_16d;
2470 if(!_16e){
2471 row.cells[1].innerHTML="*";
2472 }
2473 if(!_16e&&row.cells[2]&&row.cells[2].firstChild.tagName=="INPUT"){
2474 row.cells[2].firstChild.value=name;
2475 row.cells[2].firstChild.checked=true;
2476 }
2477 if(!_16e&&(form=this.gui_objects.editform)){
2478 if(form.elements["_folder_oldname"]){
2479 form.elements["_folder_oldname"].options[form.elements["_folder_oldname"].options.length]=new Option(name,name);
2480 }
2481 if(form.elements["_folder_name"]){
2482 form.elements["_folder_name"].value="";
2483 }
2484 }
2485 this.init_subscription_list();
2486 if(_175&&document.getElementById("rcmrow"+_175)){
2487 this.subscription_list.select_row(_175);
2488 }
2489 if(document.getElementById(id).scrollIntoView){
2490 document.getElementById(id).scrollIntoView();
2491 }
2492 };
2493 this.replace_folder_row=function(_177,_178,_179,_17a){
2494 var id=this.get_folder_row_id(_177);
2495 var row=document.getElementById(id);
2496 this.add_folder_row(_178,_179,row,_17a);
2497 var form,elm;
2498 if((form=this.gui_objects.editform)&&(elm=form.elements["_folder_oldname"])){
2499 for(var i=0;i<elm.options.length;i++){
2500 if(elm.options[i].value==_177){
2501 elm.options[i].text=_179;
2502 elm.options[i].value=_178;
2503 break;
2504 }
2505 }
2506 form.elements["_folder_newname"].value="";
2507 }
2508 };
2509 this.remove_folder_row=function(_180){
2510 var row;
2511 var id=this.get_folder_row_id(_180);
2512 if(id&&(row=document.getElementById(id))){
2513 row.style.display="none";
2514 }
2515 var form;
2516 if((form=this.gui_objects.editform)&&form.elements["_folder_oldname"]){
2517 for(var i=0;i<form.elements["_folder_oldname"].options.length;i++){
2518 if(form.elements["_folder_oldname"].options[i].value==_180){
2519 form.elements["_folder_oldname"].options[i]=null;
2520 break;
2521 }
2522 }
2523 }
2524 if(form&&form.elements["_folder_newname"]){
2525 form.elements["_folder_newname"].value="";
2526 }
2527 };
2528 this.subscribe_folder=function(_185){
2529 if(_185){
2530 this.http_post("subscribe","_mbox="+urlencode(_185));
2531 }
2532 };
2533 this.unsubscribe_folder=function(_186){
2534 if(_186){
2535 this.http_post("unsubscribe","_mbox="+urlencode(_186));
2536 }
2537 };
2538 this.get_folder_row_id=function(_187){
2539 for(var id in this.env.subscriptionrows){
2540 if(this.env.subscriptionrows[id]&&this.env.subscriptionrows[id][0]==_187){
2541 break;
2542 }
2543 }
2544 return id;
2545 };
2546 this.clone_table_row=function(row){
2547 var cell,td;
2548 var _18c=document.createElement("TR");
2549 for(var n=0;n<row.cells.length;n++){
2550 cell=row.cells[n];
2551 td=document.createElement("TD");
2552 if(cell.className){
2553 td.className=cell.className;
2554 }
2555 if(cell.align){
2556 td.setAttribute("align",cell.align);
2557 }
2558 td.innerHTML=cell.innerHTML;
2559 _18c.appendChild(td);
2560 }
2561 return _18c;
2562 };
2563 this.set_page_buttons=function(){
2564 this.enable_command("nextpage",(this.env.pagecount>this.env.current_page));
2565 this.enable_command("lastpage",(this.env.pagecount>this.env.current_page));
2566 this.enable_command("previouspage",(this.env.current_page>1));
2567 this.enable_command("firstpage",(this.env.current_page>1));
2568 };
2569 this.set_button=function(_18e,_18f){
2570 var _190=this.buttons[_18e];
2571 var _191,obj;
2572 if(!_190||!_190.length){
2573 return false;
2574 }
2575 for(var n=0;n<_190.length;n++){
2576 _191=_190[n];
2577 obj=document.getElementById(_191.id);
2578 if(obj&&_191.type=="image"&&!_191.status){
2579 _191.pas=obj._original_src?obj._original_src:obj.src;
2580 if(obj.runtimeStyle&&obj.runtimeStyle.filter&&obj.runtimeStyle.filter.match(/src=['"]([^'"]+)['"]/)){
2581 _191.pas=RegExp.$1;
2582 }
2583 }else{
2584 if(obj&&!_191.status){
2585 _191.pas=String(obj.className);
2586 }
2587 }
2588 if(obj&&_191.type=="image"&&_191[_18f]){
2589 _191.status=_18f;
2590 obj.src=_191[_18f];
2591 }else{
2592 if(obj&&typeof (_191[_18f])!="undefined"){
2593 _191.status=_18f;
2594 obj.className=_191[_18f];
2595 }
2596 }
2597 if(obj&&_191.type=="input"){
2598 _191.status=_18f;
2599 obj.disabled=!_18f;
2600 }
2601 }
2602 };
2603 this.set_alttext=function(_194,_195){
2604 if(!this.buttons[_194]||!this.buttons[_194].length){
2605 return;
2606 }
2607 var _196,obj,link;
2608 for(var n=0;n<this.buttons[_194].length;n++){
2609 _196=this.buttons[_194][n];
2610 obj=document.getElementById(_196.id);
2611 if(_196.type=="image"&&obj){
2612 obj.setAttribute("alt",this.get_label(_195));
2613 if((link=obj.parentNode)&&link.tagName=="A"){
2614 link.setAttribute("title",this.get_label(_195));
2615 }
2616 }else{
2617 if(obj){
2618 obj.setAttribute("title",this.get_label(_195));
2619 }
2620 }
2621 }
2622 };
2623 this.button_over=function(_19a,id){
2624 var _19c=this.buttons[_19a];
2625 var _19d,img;
2626 if(!_19c||!_19c.length){
2627 return false;
2628 }
2629 for(var n=0;n<_19c.length;n++){
2630 _19d=_19c[n];
2631 if(_19d.id==id&&_19d.status=="act"){
2632 img=document.getElementById(_19d.id);
2633 if(img&&_19d.over){
2634 img.src=_19d.over;
2635 }
2636 }
2637 }
2638 };
2639 this.button_sel=function(_1a0,id){
2640 var _1a2=this.buttons[_1a0];
2641 var _1a3,img;
2642 if(!_1a2||!_1a2.length){
2643 return;
2644 }
2645 for(var n=0;n<_1a2.length;n++){
2646 _1a3=_1a2[n];
2647 if(_1a3.id==id&&_1a3.status=="act"){
2648 img=document.getElementById(_1a3.id);
2649 if(img&&_1a3.sel){
2650 img.src=_1a3.sel;
2651 }
2652 }
2653 }
2654 };
2655 this.button_out=function(_1a6,id){
2656 var _1a8=this.buttons[_1a6];
2657 var _1a9,img;
2658 if(!_1a8||!_1a8.length){
2659 return;
2660 }
2661 for(var n=0;n<_1a8.length;n++){
2662 _1a9=_1a8[n];
2663 if(_1a9.id==id&&_1a9.status=="act"){
2664 img=document.getElementById(_1a9.id);
2665 if(img&&_1a9.act){
2666 img.src=_1a9.act;
2667 }
2668 }
2669 }
2670 };
2671 this.set_classname=function(obj,_1ad,set){
2672 var reg=new RegExp("s*"+_1ad,"i");
2673 if(!set&&obj.className.match(reg)){
2674 obj.className=obj.className.replace(reg,"");
2675 }else{
2676 if(set&&!obj.className.match(reg)){
2677 obj.className+=" "+_1ad;
2678 }
2679 }
2680 };
2681 this.set_pagetitle=function(_1b0){
2682 if(_1b0&&document.title){
2683 document.title=_1b0;
2684 }
2685 };
2686 this.display_message=function(msg,type,hold){
2687 if(!this.loaded){
2688 this.pending_message=new Array(msg,type);
2689 return true;
2690 }
2691 if(this.env.framed&&parent.rcmail){
2692 return parent.rcmail.display_message(msg,type,hold);
2693 }
2694 if(!this.gui_objects.message){
2695 return false;
2696 }
2697 if(this.message_timer){
2698 clearTimeout(this.message_timer);
2699 }
2700 var cont=msg;
2701 if(type){
2702 cont="<div class=\""+type+"\">"+cont+"</div>";
2703 }
2704 var _1b5=this;
2705 this.gui_objects.message.innerHTML=cont;
2706 this.gui_objects.message.style.display="block";
2707 if(type!="loading"){
2708 this.gui_objects.message.onmousedown=function(){
2709 _1b5.hide_message();
2710 return true;
2711 };
2712 }
2713 if(!hold){
2714 this.message_timer=window.setTimeout(function(){
2715 _1.hide_message();
2716 },this.message_time);
2717 }
2718 };
2719 this.hide_message=function(){
2720 if(this.gui_objects.message){
2721 this.gui_objects.message.style.display="none";
2722 this.gui_objects.message.onmousedown=null;
2723 }
2724 };
2725 this.select_folder=function(name,old){
2726 if(this.gui_objects.folderlist){
2727 var _1b8,_1b9;
2728 if((_1b8=this.get_folder_li(old))){
2729 this.set_classname(_1b8,"selected",false);
2730 this.set_classname(_1b8,"unfocused",false);
2731 }
2732 if((_1b9=this.get_folder_li(name))){
2733 this.set_classname(_1b9,"unfocused",false);
2734 this.set_classname(_1b9,"selected",true);
2735 }
2736 }
2737 };
2738 this.get_folder_li=function(name){
2739 if(this.gui_objects.folderlist){
2740 name=String(name).replace(this.identifier_expr,"");
2741 return document.getElementById("rcmli"+name);
2742 }
2743 return null;
2744 };
2745 this.set_message_coltypes=function(_1bb){
2746 this.coltypes=_1bb;
2747 var cell,col;
2748 var _1be=this.gui_objects.messagelist?this.gui_objects.messagelist.tHead:null;
2749 for(var n=0;_1be&&n<this.coltypes.length;n++){
2750 col=this.coltypes[n];
2751 if((cell=_1be.rows[0].cells[n+1])&&(col=="from"||col=="to")){
2752 if(cell.firstChild&&cell.firstChild.tagName=="A"){
2753 cell.firstChild.innerHTML=this.get_label(this.coltypes[n]);
2754 cell.firstChild.onclick=function(){
2755 return rcmail.command("sort",this.__col,this);
2756 };
2757 cell.firstChild.__col=col;
2758 }else{
2759 cell.innerHTML=this.get_label(this.coltypes[n]);
2760 }
2761 cell.id="rcm"+col;
2762 }else{
2763 if(col=="subject"&&this.message_list){
2764 this.message_list.subject_col=n+1;
2765 }
2766 }
2767 }
2768 };
2769 this.add_message_row=function(uid,cols,_1c2,_1c3,_1c4){
2770 if(!this.gui_objects.messagelist||!this.message_list){
2771 return false;
2772 }
2773 var _1c5=this.gui_objects.messagelist.tBodies[0];
2774 var _1c6=_1c5.rows.length;
2775 var even=_1c6%2;
2776 this.env.messages[uid]={deleted:_1c2.deleted?1:0,replied:_1c2.replied?1:0,unread:_1c2.unread?1:0,forwarded:_1c2.forwarded?1:0,flagged:_1c2.flagged?1:0};
2777 var row=document.createElement("TR");
2778 row.id="rcmrow"+uid;
2779 row.className="message"+(even?" even":" odd")+(_1c2.unread?" unread":"")+(_1c2.deleted?" deleted":"")+(_1c2.flagged?" flagged":"");
2780 if(this.message_list.in_selection(uid)){
2781 row.className+=" selected";
2782 }
2783 var icon=this.env.messageicon;
2784 if(_1c2.deleted&&this.env.deletedicon){
2785 icon=this.env.deletedicon;
2786 }else{
2787 if(_1c2.replied&&this.env.repliedicon){
2788 if(_1c2.forwarded&&this.env.forwardedrepliedicon){
2789 icon=this.env.forwardedrepliedicon;
2790 }else{
2791 icon=this.env.repliedicon;
2792 }
2793 }else{
2794 if(_1c2.forwarded&&this.env.forwardedicon){
2795 icon=this.env.forwardedicon;
2796 }else{
2797 if(_1c2.unread&&this.env.unreadicon){
2798 icon=this.env.unreadicon;
2799 }
2800 }
2801 }
2802 }
2803 var col=document.createElement("TD");
2804 col.className="icon";
2805 col.innerHTML=icon?"<img src=\""+icon+"\" alt=\"\" />":"";
2806 row.appendChild(col);
2807 for(var n=0;n<this.coltypes.length;n++){
2808 var c=this.coltypes[n];
2809 col=document.createElement("TD");
2810 col.className=String(c).toLowerCase();
2811 if(c=="flag"){
2812 if(_1c2.flagged&&this.env.flaggedicon){
2813 col.innerHTML="<img src=\""+this.env.flaggedicon+"\" alt=\"\" />";
2814 }else{
2815 if(!_1c2.flagged&&this.env.unflaggedicon){
2816 col.innerHTML="<img src=\""+this.env.unflaggedicon+"\" alt=\"\" />";
2817 }
2818 }
2819 }else{
2820 if(c=="attachment"){
2821 col.innerHTML=_1c3&&this.env.attachmenticon?"<img src=\""+this.env.attachmenticon+"\" alt=\"\" />":"&nbsp;";
2822 }else{
2823 col.innerHTML=cols[c];
2824 }
2825 }
2826 row.appendChild(col);
2827 }
2828 this.message_list.insert_row(row,_1c4);
2829 if(_1c4&&this.env.pagesize&&this.message_list.rowcount>this.env.pagesize){
2830 var uid=this.message_list.get_last_row();
2831 this.message_list.remove_row(uid);
2832 this.message_list.clear_selection(uid);
2833 }
2834 };
2835 this.set_rowcount=function(text){
2836 if(this.gui_objects.countdisplay){
2837 this.gui_objects.countdisplay.innerHTML=text;
2838 }
2839 this.set_page_buttons();
2840 };
2841 this.set_mailboxname=function(_1ce){
2842 if(this.gui_objects.mailboxname&&_1ce){
2843 this.gui_objects.mailboxname.innerHTML=_1ce;
2844 }
2845 };
2846 this.set_quota=function(_1cf){
2847 if(this.gui_objects.quotadisplay&&_1cf){
2848 this.gui_objects.quotadisplay.innerHTML=_1cf;
2849 }
2850 };
2851 this.set_unread_count=function(mbox,_1d1,_1d2){
2852 if(!this.gui_objects.mailboxlist){
2853 return false;
2854 }
2855 this.env.unread_counts[mbox]=_1d1;
2856 this.set_unread_count_display(mbox,_1d2);
2857 };
2858 this.set_unread_count_display=function(mbox,_1d4){
2859 var reg,_1d6,item,_1d8,_1d9,div;
2860 if(item=this.get_folder_li(mbox)){
2861 _1d8=this.env.unread_counts[mbox]?this.env.unread_counts[mbox]:0;
2862 _1d6=item.getElementsByTagName("a")[0];
2863 reg=/\s+\([0-9]+\)$/i;
2864 _1d9=0;
2865 if((div=item.getElementsByTagName("div")[0])&&div.className.match(/collapsed/)){
2866 for(var k in this.env.unread_counts){
2867 if(k.indexOf(mbox+this.env.delimiter)==0){
2868 _1d9+=this.env.unread_counts[k];
2869 }
2870 }
2871 }
2872 if(_1d8&&_1d6.innerHTML.match(reg)){
2873 _1d6.innerHTML=_1d6.innerHTML.replace(reg," ("+_1d8+")");
2874 }else{
2875 if(_1d8){
2876 _1d6.innerHTML+=" ("+_1d8+")";
2877 }else{
2878 _1d6.innerHTML=_1d6.innerHTML.replace(reg,"");
2879 }
2880 }
2881 reg=new RegExp(RegExp.escape(this.env.delimiter)+"[^"+RegExp.escape(this.env.delimiter)+"]+$");
2882 if(mbox.match(reg)){
2883 this.set_unread_count_display(mbox.replace(reg,""),false);
2884 }
2885 this.set_classname(item,"unread",(_1d8+_1d9)>0?true:false);
2886 }
2887 reg=/^\([0-9]+\)\s+/i;
2888 if(_1d4&&document.title){
2889 var _1dc=String(document.title);
2890 var _1dd="";
2891 if(_1d8&&_1dc.match(reg)){
2892 _1dd=_1dc.replace(reg,"("+_1d8+") ");
2893 }else{
2894 if(_1d8){
2895 _1dd="("+_1d8+") "+_1dc;
2896 }else{
2897 _1dd=_1dc.replace(reg,"");
2898 }
2899 }
2900 this.set_pagetitle(_1dd);
2901 }
2902 };
2903 this.new_message_focus=function(){
2904 if(this.env.framed&&window.parent){
2905 window.parent.focus();
2906 }else{
2907 window.focus();
2908 }
2909 };
2910 this.add_contact_row=function(cid,cols,_1e0){
2911 if(!this.gui_objects.contactslist||!this.gui_objects.contactslist.tBodies[0]){
2912 return false;
2913 }
2914 var _1e1=this.gui_objects.contactslist.tBodies[0];
2915 var _1e2=_1e1.rows.length;
2916 var even=_1e2%2;
2917 var row=document.createElement("TR");
2918 row.id="rcmrow"+cid;
2919 row.className="contact "+(even?"even":"odd");
2920 if(this.contact_list.in_selection(cid)){
2921 row.className+=" selected";
2922 }
2923 for(var c in cols){
2924 col=document.createElement("TD");
2925 col.className=String(c).toLowerCase();
2926 col.innerHTML=cols[c];
2927 row.appendChild(col);
2928 }
2929 this.contact_list.insert_row(row);
2930 this.enable_command("export",(this.contact_list.rowcount>0));
2931 };
2932 this.toggle_prefer_html=function(_1e6){
2933 var _1e7;
2934 if(_1e7=document.getElementById("rcmfd_addrbook_show_images")){
2935 _1e7.disabled=!_1e6.checked;
2936 }
2937 };
2938 this.set_headers=function(_1e8){
2939 if(this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&_1e8){
2940 var box=this.gui_objects.all_headers_box;
2941 box.innerHTML=_1e8;
2942 box.style.display="block";
2943 if(this.env.framed&&parent.rcmail){
2944 parent.rcmail.set_busy(false);
2945 }else{
2946 this.set_busy(false);
2947 }
2948 }
2949 };
2950 this.load_headers=function(elem){
2951 if(!this.gui_objects.all_headers_row||!this.gui_objects.all_headers_box||!this.env.uid){
2952 return;
2953 }
2954 this.set_classname(elem,"show-headers",false);
2955 this.set_classname(elem,"hide-headers",true);
2956 this.gui_objects.all_headers_row.style.display=bw.ie?"block":"table-row";
2957 elem.onclick=function(){
2958 rcmail.hide_headers(elem);
2959 };
2960 if(!this.gui_objects.all_headers_box.innerHTML){
2961 this.display_message(this.get_label("loading"),"loading",true);
2962 this.http_post("headers","_uid="+this.env.uid);
2963 }
2964 };
2965 this.hide_headers=function(elem){
2966 if(!this.gui_objects.all_headers_row||!this.gui_objects.all_headers_box){
2967 return;
2968 }
2969 this.set_classname(elem,"hide-headers",false);
2970 this.set_classname(elem,"show-headers",true);
2971 this.gui_objects.all_headers_row.style.display="none";
2972 elem.onclick=function(){
2973 rcmail.load_headers(elem);
2974 };
2975 };
2976 this.html2plain=function(_1ec,id){
2977 var _1ee=new rcube_http_request();
2978 var url=this.env.bin_path+"html2text.php";
2979 var _1f0=this;
2980 this.set_busy(true,"converting");
2981 console.log("HTTP POST: "+url);
2982 _1ee.onerror=function(o){
2983 _1f0.http_error(o);
2984 };
2985 _1ee.oncomplete=function(o){
2986 _1f0.set_text_value(o,id);
2987 };
2988 _1ee.POST(url,_1ec,"application/octet-stream");
2989 };
2990 this.set_text_value=function(_1f3,id){
2991 this.set_busy(false);
2992 document.getElementById(id).value=_1f3.get_text();
2993 console.log(_1f3.get_text());
2994 };
2995 this.redirect=function(url,lock){
2996 if(lock||lock===null){
2997 this.set_busy(true);
2998 }
2999 if(this.env.framed&&window.parent){
3000 parent.location.href=url;
3001 }else{
3002 location.href=url;
3003 }
3004 };
3005 this.goto_url=function(_1f7,_1f8,lock){
3006 var _1fa=_1f8?"&"+_1f8:"";
3007 this.redirect(this.env.comm_path+"&_action="+_1f7+_1fa,lock);
3008 };
3009 this.http_sockets=new Array();
3010 this.get_request_obj=function(){
3011 for(var n=0;n<this.http_sockets.length;n++){
3012 if(!this.http_sockets[n].busy){
3013 return this.http_sockets[n];
3014 }
3015 }
3016 var i=this.http_sockets.length;
3017 this.http_sockets[i]=new rcube_http_request();
3018 return this.http_sockets[i];
3019 };
3020 this.http_request=function(_1fd,_1fe,lock){
3021 var _200=this.get_request_obj();
3022 _1fe+=(_1fe?"&":"")+"_remote=1";
3023 if(bw.safari){
3024 _1fe+="&_ts="+(new Date().getTime());
3025 }
3026 if(_200){
3027 console.log("HTTP request: "+this.env.comm_path+"&_action="+_1fd+"&"+_1fe);
3028 if(lock){
3029 this.set_busy(true);
3030 }
3031 var rcm=this;
3032 _200.__lock=lock?true:false;
3033 _200.__action=_1fd;
3034 _200.onerror=function(o){
3035 _1.http_error(o);
3036 };
3037 _200.oncomplete=function(o){
3038 _1.http_response(o);
3039 };
3040 _200.GET(this.env.comm_path+"&_action="+_1fd+"&"+_1fe);
3041 }
3042 };
3043 this.http_post=function(_204,_205,lock){
3044 var _207;
3045 if(_205&&typeof (_205)=="object"){
3046 _205._remote=1;
3047 }else{
3048 _205+=(_205?"&":"")+"_remote=1";
3049 }
3050 if(_207=this.get_request_obj()){
3051 console.log("HTTP POST: "+this.env.comm_path+"&_action="+_204);
3052 if(lock){
3053 this.set_busy(true);
3054 }
3055 var rcm=this;
3056 _207.__lock=lock?true:false;
3057 _207.__action=_204;
3058 _207.onerror=function(o){
3059 rcm.http_error(o);
3060 };
3061 _207.oncomplete=function(o){
3062 rcm.http_response(o);
3063 };
3064 _207.POST(this.env.comm_path+"&_action="+_204,_205);
3065 }
3066 };
3067 this.http_response=function(_20b){
3068 var _20c=_20b.get_header("Content-Type");
3069 if(_20c){
3070 _20c=String(_20c).toLowerCase();
3071 var _20d=_20c.split(";");
3072 _20c=_20d[0];
3073 }
3074 if(_20b.__lock){
3075 this.set_busy(false);
3076 }
3077 console.log(_20b.get_text());
3078 if(_20b.get_text()&&(_20c=="text/javascript"||_20c=="application/x-javascript")){
3079 eval(_20b.get_text());
3080 }
3081 switch(_20b.__action){
3082 case "delete":
3083 if(this.task=="addressbook"){
3084 var uid=this.contact_list.get_selection();
3085 this.enable_command("compose",(uid&&this.contact_list.rows[uid]));
3086 this.enable_command("delete","edit",(uid&&this.contact_list.rows[uid]&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly));
3087 this.enable_command("export",(this.contact_list&&this.contact_list.rowcount>0));
3088 }
3089 case "moveto":
3090 if(this.env.action=="show"){
3091 this.command("list");
3092 }else{
3093 if(this.message_list){
3094 this.message_list.init();
3095 }
3096 }
3097 break;
3098 case "purge":
3099 case "expunge":
3100 if(!this.env.messagecount&&this.task=="mail"){
3101 if(this.env.contentframe){
3102 this.show_contentframe(false);
3103 }
3104 this.enable_command("show","reply","reply-all","forward","moveto","delete","mark","viewsource","print","load-attachment","purge","expunge","select-all","select-none","sort",false);
3105 }
3106 break;
3107 case "check-recent":
3108 case "getunread":
3109 case "list":
3110 if(this.task=="mail"){
3111 if(this.message_list&&_20b.__action=="list"){
3112 this.msglist_select(this.message_list);
3113 }
3114 this.enable_command("show","expunge","select-all","select-none","sort",(this.env.messagecount>0));
3115 this.enable_command("purge",this.purge_mailbox_test());
3116 }else{
3117 if(this.task=="addressbook"){
3118 this.enable_command("export",(this.contact_list&&this.contact_list.rowcount>0));
3119 }
3120 }
3121 break;
3122 }
3123 _20b.reset();
3124 };
3125 this.http_error=function(_20f){
3126 if(_20f.__lock){
3127 this.set_busy(false);
3128 }
3129 _20f.reset();
3130 _20f.__lock=false;
3131 this.display_message("Unknown Server Error!","error");
3132 };
3133 this.send_keep_alive=function(){
3134 var d=new Date();
3135 this.http_request("keep-alive","_t="+d.getTime());
3136 };
3137 this.check_for_recent=function(_211){
3138 if(this.busy){
3139 return;
3140 }
3141 if(_211){
3142 this.set_busy(true,"checkingmail");
3143 }
3144 var _212="_t="+(new Date().getTime());
3145 if(this.gui_objects.messagelist){
3146 _212+="&_list=1";
3147 }
3148 if(this.gui_objects.quotadisplay){
3149 _212+="&_quota=1";
3150 }
3151 if(this.env.search_request){
3152 _212+="&_search="+this.env.search_request;
3153 }
3154 this.http_request("check-recent",_212,true);
3155 };
3156 this.get_single_uid=function(){
3157 return this.env.uid?this.env.uid:(this.message_list?this.message_list.get_single_selection():null);
3158 };
3159 this.get_single_cid=function(){
3160 return this.env.cid?this.env.cid:(this.contact_list?this.contact_list.get_single_selection():null);
3161 };
3162 this.get_caret_pos=function(obj){
3163 if(typeof (obj.selectionEnd)!="undefined"){
3164 return obj.selectionEnd;
3165 }else{
3166 if(document.selection&&document.selection.createRange){
3167 var _214=document.selection.createRange();
3168 if(_214.parentElement()!=obj){
3169 return 0;
3170 }
3171 var gm=_214.duplicate();
3172 if(obj.tagName=="TEXTAREA"){
3173 gm.moveToElementText(obj);
3174 }else{
3175 gm.expand("textedit");
3176 }
3177 gm.setEndPoint("EndToStart",_214);
3178 var p=gm.text.length;
3179 return p<=obj.value.length?p:-1;
3180 }else{
3181 return obj.value.length;
3182 }
3183 }
3184 };
3185 this.set_caret2start=function(obj){
3186 if(obj.createTextRange){
3187 var _218=obj.createTextRange();
3188 _218.collapse(true);
3189 _218.select();
3190 }else{
3191 if(obj.setSelectionRange){
3192 obj.setSelectionRange(0,0);
3193 }
3194 }
3195 obj.focus();
3196 };
3197 this.lock_form=function(form,lock){
3198 if(!form||!form.elements){
3199 return;
3200 }
3201 var type;
3202 for(var n=0;n<form.elements.length;n++){
3203 type=form.elements[n];
3204 if(type=="hidden"){
3205 continue;
3206 }
3207 form.elements[n].disabled=lock;
3208 }
3209 };
3210 };
3211 function rcube_http_request(){
3212 this.url="";
3213 this.busy=false;
3214 this.xmlhttp=null;
3215 this.reset=function(){
3216 this.onloading=function(){
3217 };
3218 this.onloaded=function(){
3219 };
3220 this.oninteractive=function(){
3221 };
3222 this.oncomplete=function(){
3223 };
3224 this.onabort=function(){
3225 };
3226 this.onerror=function(){
3227 };
3228 this.url="";
3229 this.busy=false;
3230 this.xmlhttp=null;
3231 };
3232 this.build=function(){
3233 if(window.XMLHttpRequest){
3234 this.xmlhttp=new XMLHttpRequest();
3235 }else{
3236 if(window.ActiveXObject){
3237 try{
3238 this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
3239 }
3240 catch(e){
3241 this.xmlhttp=null;
3242 }
3243 }else{
3244 }
3245 }
3246 };
3247 this.GET=function(url){
3248 this.build();
3249 if(!this.xmlhttp){
3250 this.onerror(this);
3251 return false;
3252 }
3253 var _ref=this;
3254 this.url=url;
3255 this.busy=true;
3256 this.xmlhttp.onreadystatechange=function(){
3257 _ref.xmlhttp_onreadystatechange();
3258 };
3259 this.xmlhttp.open("GET",url,true);
3260 this.xmlhttp.setRequestHeader("X-RoundCube-Referer",bw.get_cookie("roundcube_sessid"));
3261 this.xmlhttp.send(null);
3262 };
3263 this.POST=function(url,body,_221){
3264 if(typeof (_221)=="undefined"){
3265 _221="application/x-www-form-urlencoded";
3266 }
3267 this.build();
3268 if(!this.xmlhttp){
3269 this.onerror(this);
3270 return false;
3271 }
3272 var _222=body;
3273 if(typeof (body)=="object"){
3274 _222="";
3275 for(var p in body){
3276 _222+=(_222?"&":"")+p+"="+urlencode(body[p]);
3277 }
3278 }
3279 var ref=this;
3280 this.url=url;
3281 this.busy=true;
3282 this.xmlhttp.onreadystatechange=function(){
3283 ref.xmlhttp_onreadystatechange();
3284 };
3285 this.xmlhttp.open("POST",url,true);
3286 this.xmlhttp.setRequestHeader("Content-Type",_221);
3287 this.xmlhttp.setRequestHeader("X-RoundCube-Referer",bw.get_cookie("roundcube_sessid"));
3288 this.xmlhttp.send(_222);
3289 };
3290 this.xmlhttp_onreadystatechange=function(){
3291 if(this.xmlhttp.readyState==1){
3292 this.onloading(this);
3293 }else{
3294 if(this.xmlhttp.readyState==2){
3295 this.onloaded(this);
3296 }else{
3297 if(this.xmlhttp.readyState==3){
3298 this.oninteractive(this);
3299 }else{
3300 if(this.xmlhttp.readyState==4){
3301 try{
3302 if(this.xmlhttp.status==0){
3303 this.onabort(this);
3304 }else{
3305 if(this.xmlhttp.status==200){
3306 this.oncomplete(this);
3307 }else{
3308 this.onerror(this);
3309 }
3310 }
3311 this.busy=false;
3312 }
3313 catch(err){
3314 this.onerror(this);
3315 this.busy=false;
3316 }
3317 }
3318 }
3319 }
3320 }
3321 };
3322 this.get_header=function(name){
3323 return this.xmlhttp.getResponseHeader(name);
3324 };
3325 this.get_text=function(){
3326 return this.xmlhttp.responseText;
3327 };
3328 this.get_xml=function(){
3329 return this.xmlhttp.responseXML;
3330 };
3331 this.reset();
3332 };
3333 function call_init(o){
3334 window.setTimeout("if (window['"+o+"'] && window['"+o+"'].init) { "+o+".init(); }",bw.win?500:200);
3335 };
3336