]> git.donarmstrong.com Git - roundcube.git/blob - program/js/app.js
Imported Upstream version 0.2~stable
[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 this.message_list.blur();
968 _62=this.env.mailboxes;
969 }else{
970 if(this.contact_list){
971 this.contact_list.blur();
972 _62=this.env.address_sources;
973 }else{
974 if(this.ksearch_value){
975 this.ksearch_blur();
976 }
977 }
978 }
979 if(this.drag_active&&_62&&this.env.last_folder_target){
980 this.set_classname(this.get_folder_li(this.env.last_folder_target),"droptarget",false);
981 this.command("moveto",_62[this.env.last_folder_target].id);
982 this.env.last_folder_target=null;
983 }
984 };
985 this.drag_start=function(_64){
986 var _65=this.task=="mail"?this.env.mailboxes:this.env.address_sources;
987 this.drag_active=true;
988 if(this.preview_timer){
989 clearTimeout(this.preview_timer);
990 }
991 if(this.gui_objects.folderlist&&_65){
992 var li,pos,_64,_68;
993 _64=rcube_find_object(this.task=="mail"?"mailboxlist":"directorylist");
994 pos=rcube_get_object_pos(_64);
995 this.env.folderlist_coords={x1:pos.x,y1:pos.y,x2:pos.x+_64.offsetWidth,y2:pos.y+_64.offsetHeight};
996 this.env.folder_coords=new Array();
997 for(var k in _65){
998 if(li=this.get_folder_li(k)){
999 pos=rcube_get_object_pos(li.firstChild);
1000 if(_68=li.firstChild.offsetHeight){
1001 this.env.folder_coords[k]={x1:pos.x,y1:pos.y,x2:pos.x+li.firstChild.offsetWidth,y2:pos.y+_68};
1002 }
1003 }
1004 }
1005 }
1006 };
1007 this.drag_move=function(e){
1008 if(this.gui_objects.folderlist&&this.env.folder_coords){
1009 var li,pos,_6d;
1010 _6d=rcube_event.get_mouse_pos(e);
1011 pos=this.env.folderlist_coords;
1012 if(_6d.x<pos.x1||_6d.x>=pos.x2||_6d.y<pos.y1||_6d.y>=pos.y2){
1013 if(this.env.last_folder_target){
1014 this.set_classname(this.get_folder_li(this.env.last_folder_target),"droptarget",false);
1015 this.env.last_folder_target=null;
1016 }
1017 return;
1018 }
1019 for(var k in this.env.folder_coords){
1020 pos=this.env.folder_coords[k];
1021 if(this.check_droptarget(k)&&((_6d.x>=pos.x1)&&(_6d.x<pos.x2)&&(_6d.y>=pos.y1)&&(_6d.y<pos.y2))){
1022 this.set_classname(this.get_folder_li(k),"droptarget",true);
1023 this.env.last_folder_target=k;
1024 }else{
1025 this.set_classname(this.get_folder_li(k),"droptarget",false);
1026 }
1027 }
1028 }
1029 };
1030 this.collapse_folder=function(id){
1031 var div;
1032 if((li=this.get_folder_li(id))&&(div=li.getElementsByTagName("div")[0])&&(div.className.match(/collapsed/)||div.className.match(/expanded/))){
1033 var ul=li.getElementsByTagName("ul")[0];
1034 if(div.className.match(/collapsed/)){
1035 ul.style.display="";
1036 this.set_classname(div,"collapsed",false);
1037 this.set_classname(div,"expanded",true);
1038 var reg=new RegExp("&"+urlencode(id)+"&");
1039 this.set_env("collapsed_folders",this.env.collapsed_folders.replace(reg,""));
1040 }else{
1041 ul.style.display="none";
1042 this.set_classname(div,"expanded",false);
1043 this.set_classname(div,"collapsed",true);
1044 this.set_env("collapsed_folders",this.env.collapsed_folders+"&"+urlencode(id)+"&");
1045 if(this.env.mailbox.indexOf(id+this.env.delimiter)==0){
1046 this.command("list",id);
1047 }
1048 }
1049 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")){
1050 li.nextSibling.getElementsByTagName("ul")[0].style.display="none";
1051 li.nextSibling.getElementsByTagName("ul")[0].style.display="";
1052 }
1053 this.http_post("save-pref","_name=collapsed_folders&_value="+urlencode(this.env.collapsed_folders));
1054 this.set_unread_count_display(id,false);
1055 }
1056 };
1057 this.click_on_list=function(e){
1058 if(this.message_list){
1059 this.message_list.focus();
1060 }else{
1061 if(this.contact_list){
1062 this.contact_list.focus();
1063 }
1064 }
1065 var _74;
1066 if(_74=this.get_folder_li()){
1067 this.set_classname(_74,"unfocused",true);
1068 }
1069 return rcube_event.get_button(e)==2?true:rcube_event.cancel(e);
1070 };
1071 this.msglist_select=function(_75){
1072 if(this.preview_timer){
1073 clearTimeout(this.preview_timer);
1074 }
1075 var _76=_75.selection.length==1;
1076 if(this.env.mailbox==this.env.drafts_mailbox){
1077 this.enable_command("reply","reply-all","forward",false);
1078 this.enable_command("show",_76);
1079 this.enable_command("delete","moveto","mark",(_75.selection.length>0?true:false));
1080 }else{
1081 this.enable_command("show","reply","reply-all","forward","print",_76);
1082 this.enable_command("delete","moveto","mark",(_75.selection.length>0?true:false));
1083 }
1084 if(_76&&this.env.contentframe&&!_75.multi_selecting){
1085 this.preview_timer=window.setTimeout(function(){
1086 _1.msglist_get_preview();
1087 },200);
1088 }else{
1089 if(this.env.contentframe){
1090 this.show_contentframe(false);
1091 }
1092 }
1093 };
1094 this.msglist_dbl_click=function(_77){
1095 if(this.preview_timer){
1096 clearTimeout(this.preview_timer);
1097 }
1098 var uid=_77.get_single_selection();
1099 if(uid&&this.env.mailbox==this.env.drafts_mailbox){
1100 this.goto_url("compose","_draft_uid="+uid+"&_mbox="+urlencode(this.env.mailbox),true);
1101 }else{
1102 if(uid){
1103 this.show_message(uid,false,false);
1104 }
1105 }
1106 };
1107 this.msglist_keypress=function(_79){
1108 if(_79.key_pressed==_79.ENTER_KEY){
1109 this.command("show");
1110 }else{
1111 if(_79.key_pressed==_79.DELETE_KEY){
1112 this.command("delete");
1113 }else{
1114 if(_79.key_pressed==_79.BACKSPACE_KEY){
1115 this.command("delete");
1116 }else{
1117 _79.shiftkey=false;
1118 }
1119 }
1120 }
1121 };
1122 this.msglist_get_preview=function(){
1123 var uid=this.get_single_uid();
1124 if(uid&&this.env.contentframe&&!this.drag_active){
1125 this.show_message(uid,false,true);
1126 }else{
1127 if(this.env.contentframe){
1128 this.show_contentframe(false);
1129 }
1130 }
1131 };
1132 this.check_droptarget=function(id){
1133 if(this.task=="mail"){
1134 return (this.env.mailboxes[id]&&this.env.mailboxes[id].id!=this.env.mailbox&&!this.env.mailboxes[id].virtual);
1135 }else{
1136 if(this.task=="addressbook"){
1137 return (id!=this.env.source&&this.env.address_sources[id]&&!this.env.address_sources[id].readonly);
1138 }else{
1139 if(this.task=="settings"){
1140 return (id!=this.env.folder);
1141 }
1142 }
1143 }
1144 };
1145 this.show_message=function(id,_7d,_7e){
1146 if(!id){
1147 return;
1148 }
1149 var _7f="";
1150 var _80=_7e?"preview":"show";
1151 var _81=window;
1152 if(_7e&&this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
1153 _81=window.frames[this.env.contentframe];
1154 _7f="&_framed=1";
1155 }
1156 if(_7d){
1157 _7f="&_safe=1";
1158 }
1159 if(this.env.search_request){
1160 _7f+="&_search="+this.env.search_request;
1161 }
1162 var url="&_action="+_80+"&_uid="+id+"&_mbox="+urlencode(this.env.mailbox)+_7f;
1163 if(_80=="preview"&&String(_81.location.href).indexOf(url)>=0){
1164 this.show_contentframe(true);
1165 }else{
1166 this.set_busy(true,"loading");
1167 _81.location.href=this.env.comm_path+url;
1168 if(_80=="preview"&&this.message_list&&this.message_list.rows[id]&&this.message_list.rows[id].unread){
1169 this.set_message(id,"unread",false);
1170 if(this.env.unread_counts[this.env.mailbox]){
1171 this.env.unread_counts[this.env.mailbox]-=1;
1172 this.set_unread_count(this.env.mailbox,this.env.unread_counts[this.env.mailbox],this.env.mailbox=="INBOX");
1173 }
1174 }
1175 }
1176 };
1177 this.show_contentframe=function(_83){
1178 var frm;
1179 if(this.env.contentframe&&(frm=rcube_find_object(this.env.contentframe))){
1180 if(!_83&&window.frames[this.env.contentframe]){
1181 if(window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0){
1182 window.frames[this.env.contentframe].location.href=this.env.blankpage;
1183 }
1184 }else{
1185 if(!bw.safari){
1186 frm.style.display=_83?"block":"none";
1187 }
1188 }
1189 }
1190 if(!_83&&this.busy){
1191 this.set_busy(false);
1192 }
1193 };
1194 this.list_page=function(_85){
1195 if(_85=="next"){
1196 _85=this.env.current_page+1;
1197 }
1198 if(_85=="last"){
1199 _85=this.env.pagecount;
1200 }
1201 if(_85=="prev"&&this.env.current_page>1){
1202 _85=this.env.current_page-1;
1203 }
1204 if(_85=="first"&&this.env.current_page>1){
1205 _85=1;
1206 }
1207 if(_85>0&&_85<=this.env.pagecount){
1208 this.env.current_page=_85;
1209 if(this.task=="mail"){
1210 this.list_mailbox(this.env.mailbox,_85);
1211 }else{
1212 if(this.task=="addressbook"){
1213 this.list_contacts(this.env.source,_85);
1214 }
1215 }
1216 }
1217 };
1218 this.filter_mailbox=function(_86){
1219 var _87;
1220 if(this.gui_objects.qsearchbox){
1221 _87=this.gui_objects.qsearchbox.value;
1222 }
1223 this.message_list.clear();
1224 this.env.current_page=1;
1225 this.set_busy(true,"searching");
1226 this.http_request("search","_filter="+_86+(_87?"&_q="+urlencode(_87):"")+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):""),true);
1227 };
1228 this.list_mailbox=function(_88,_89,_8a){
1229 this.last_selected=0;
1230 var _8b="";
1231 var _8c=window;
1232 if(!_88){
1233 _88=this.env.mailbox;
1234 }
1235 if(_8a){
1236 _8b+="&_sort="+_8a;
1237 }
1238 if(this.env.search_request){
1239 _8b+="&_search="+this.env.search_request;
1240 }
1241 if(!_89&&_88!=this.env.mailbox){
1242 _89=1;
1243 this.env.current_page=_89;
1244 if(this.message_list){
1245 this.message_list.clear_selection();
1246 }
1247 this.show_contentframe(false);
1248 }
1249 if(_88!=this.env.mailbox||(_88==this.env.mailbox&&!_89&&!_8a)){
1250 _8b+="&_refresh=1";
1251 }
1252 this.select_folder(_88,this.env.mailbox);
1253 this.env.mailbox=_88;
1254 if(this.gui_objects.messagelist){
1255 this.list_mailbox_remote(_88,_89,_8b);
1256 return;
1257 }
1258 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
1259 _8c=window.frames[this.env.contentframe];
1260 _8b+="&_framed=1";
1261 }
1262 if(_88){
1263 this.set_busy(true,"loading");
1264 _8c.location.href=this.env.comm_path+"&_mbox="+urlencode(_88)+(_89?"&_page="+_89:"")+_8b;
1265 }
1266 };
1267 this.list_mailbox_remote=function(_8d,_8e,_8f){
1268 this.message_list.clear();
1269 var url="_mbox="+urlencode(_8d)+(_8e?"&_page="+_8e:"");
1270 this.set_busy(true,"loading");
1271 this.http_request("list",url+_8f,true);
1272 };
1273 this.expunge_mailbox=function(_91){
1274 var _92=false;
1275 var _93="";
1276 if(_91==this.env.mailbox){
1277 _92=true;
1278 this.set_busy(true,"loading");
1279 _93="&_reload=1";
1280 }
1281 var url="_mbox="+urlencode(_91);
1282 this.http_post("expunge",url+_93,_92);
1283 };
1284 this.purge_mailbox=function(_95){
1285 var _96=false;
1286 var _97="";
1287 if(!confirm(this.get_label("purgefolderconfirm"))){
1288 return false;
1289 }
1290 if(_95==this.env.mailbox){
1291 _96=true;
1292 this.set_busy(true,"loading");
1293 _97="&_reload=1";
1294 }
1295 var url="_mbox="+urlencode(_95);
1296 this.http_post("purge",url+_97,_96);
1297 return true;
1298 };
1299 this.purge_mailbox_test=function(){
1300 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))));
1301 };
1302 this.set_message_icon=function(uid){
1303 var _9a;
1304 var _9b=this.message_list.rows;
1305 if(!_9b[uid]){
1306 return false;
1307 }
1308 if(_9b[uid].deleted&&this.env.deletedicon){
1309 _9a=this.env.deletedicon;
1310 }else{
1311 if(_9b[uid].replied&&this.env.repliedicon){
1312 if(_9b[uid].forwarded&&this.env.forwardedrepliedicon){
1313 _9a=this.env.forwardedrepliedicon;
1314 }else{
1315 _9a=this.env.repliedicon;
1316 }
1317 }else{
1318 if(_9b[uid].forwarded&&this.env.forwardedicon){
1319 _9a=this.env.forwardedicon;
1320 }else{
1321 if(_9b[uid].unread&&this.env.unreadicon){
1322 _9a=this.env.unreadicon;
1323 }else{
1324 if(this.env.messageicon){
1325 _9a=this.env.messageicon;
1326 }
1327 }
1328 }
1329 }
1330 }
1331 if(_9a&&_9b[uid].icon){
1332 _9b[uid].icon.src=_9a;
1333 }
1334 _9a="";
1335 if(_9b[uid].flagged&&this.env.flaggedicon){
1336 _9a=this.env.flaggedicon;
1337 }else{
1338 if(!_9b[uid].flagged&&this.env.unflaggedicon){
1339 _9a=this.env.unflaggedicon;
1340 }
1341 }
1342 if(_9b[uid].flagged_icon&&_9a){
1343 _9b[uid].flagged_icon.src=_9a;
1344 }
1345 };
1346 this.set_message_status=function(uid,_9d,_9e){
1347 var _9f=this.message_list.rows;
1348 if(!_9f[uid]){
1349 return false;
1350 }
1351 if(_9d=="unread"){
1352 _9f[uid].unread=_9e;
1353 }else{
1354 if(_9d=="deleted"){
1355 _9f[uid].deleted=_9e;
1356 }else{
1357 if(_9d=="replied"){
1358 _9f[uid].replied=_9e;
1359 }else{
1360 if(_9d=="forwarded"){
1361 _9f[uid].forwarded=_9e;
1362 }else{
1363 if(_9d=="flagged"){
1364 _9f[uid].flagged=_9e;
1365 }
1366 }
1367 }
1368 }
1369 }
1370 this.env.messages[uid]=_9f[uid];
1371 };
1372 this.set_message=function(uid,_a1,_a2){
1373 var _a3=this.message_list.rows;
1374 if(!_a3[uid]){
1375 return false;
1376 }
1377 if(_a1){
1378 this.set_message_status(uid,_a1,_a2);
1379 }
1380 if(_a3[uid].unread&&_a3[uid].classname.indexOf("unread")<0){
1381 _a3[uid].classname+=" unread";
1382 this.set_classname(_a3[uid].obj,"unread",true);
1383 }else{
1384 if(!_a3[uid].unread&&_a3[uid].classname.indexOf("unread")>=0){
1385 _a3[uid].classname=_a3[uid].classname.replace(/\s*unread/,"");
1386 this.set_classname(_a3[uid].obj,"unread",false);
1387 }
1388 }
1389 if(_a3[uid].deleted&&_a3[uid].classname.indexOf("deleted")<0){
1390 _a3[uid].classname+=" deleted";
1391 this.set_classname(_a3[uid].obj,"deleted",true);
1392 }else{
1393 if(!_a3[uid].deleted&&_a3[uid].classname.indexOf("deleted")>=0){
1394 _a3[uid].classname=_a3[uid].classname.replace(/\s*deleted/,"");
1395 this.set_classname(_a3[uid].obj,"deleted",false);
1396 }
1397 }
1398 if(_a3[uid].flagged&&_a3[uid].classname.indexOf("flagged")<0){
1399 _a3[uid].classname+=" flagged";
1400 this.set_classname(_a3[uid].obj,"flagged",true);
1401 }else{
1402 if(!_a3[uid].flagged&&_a3[uid].classname.indexOf("flagged")>=0){
1403 _a3[uid].classname=_a3[uid].classname.replace(/\s*flagged/,"");
1404 this.set_classname(_a3[uid].obj,"flagged",false);
1405 }
1406 }
1407 this.set_message_icon(uid);
1408 };
1409 this.move_messages=function(_a4){
1410 if(!_a4||_a4==this.env.mailbox||(!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length))){
1411 return;
1412 }
1413 var _a5=false;
1414 var _a6="&_target_mbox="+urlencode(_a4)+"&_from="+(this.env.action?this.env.action:"");
1415 if(this.env.action=="show"){
1416 _a5=true;
1417 this.set_busy(true,"movingmessage");
1418 }else{
1419 if(!this.env.flag_for_deletion){
1420 this.show_contentframe(false);
1421 }
1422 }
1423 this.enable_command("reply","reply-all","forward","delete","mark","print",false);
1424 this._with_selected_messages("moveto",_a5,_a6,(this.env.flag_for_deletion?false:true));
1425 };
1426 this.delete_messages=function(){
1427 var _a7=this.message_list?this.message_list.get_selection():new Array();
1428 if(!this.env.uid&&!_a7.length){
1429 return;
1430 }
1431 if(this.env.trash_mailbox&&String(this.env.mailbox).toLowerCase()!=String(this.env.trash_mailbox).toLowerCase()){
1432 if(this.message_list&&this.message_list.shiftkey){
1433 if(confirm(this.get_label("deletemessagesconfirm"))){
1434 this.permanently_remove_messages();
1435 }
1436 }else{
1437 this.move_messages(this.env.trash_mailbox);
1438 }
1439 }else{
1440 if(this.env.trash_mailbox&&String(this.env.mailbox).toLowerCase()==String(this.env.trash_mailbox).toLowerCase()){
1441 this.permanently_remove_messages();
1442 }else{
1443 if(!this.env.trash_mailbox&&this.env.flag_for_deletion){
1444 this.mark_message("delete");
1445 if(this.env.action=="show"){
1446 this.command("nextmessage","",this);
1447 }else{
1448 if(_a7.length==1){
1449 this.message_list.select_next();
1450 }
1451 }
1452 }else{
1453 if(!this.env.trash_mailbox){
1454 this.permanently_remove_messages();
1455 }
1456 }
1457 }
1458 }
1459 };
1460 this.permanently_remove_messages=function(){
1461 if(!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length)){
1462 return;
1463 }
1464 this.show_contentframe(false);
1465 this._with_selected_messages("delete",false,"&_from="+(this.env.action?this.env.action:""),true);
1466 };
1467 this._with_selected_messages=function(_a8,_a9,_aa,_ab){
1468 var _ac=new Array();
1469 if(this.env.uid){
1470 _ac[0]=this.env.uid;
1471 }else{
1472 var _ad=this.message_list.get_selection();
1473 var _ae=this.message_list.rows;
1474 var id;
1475 for(var n=0;n<_ad.length;n++){
1476 id=_ad[n];
1477 _ac[_ac.length]=id;
1478 if(_ab){
1479 this.message_list.remove_row(id,(n==_ad.length-1));
1480 }else{
1481 this.set_message_status(id,"deleted",true);
1482 if(this.env.read_when_deleted){
1483 this.set_message_status(id,"unread",false);
1484 }
1485 this.set_message(id);
1486 }
1487 }
1488 }
1489 if(this.env.search_request){
1490 _aa+="&_search="+this.env.search_request;
1491 }
1492 this.http_post(_a8,"_uid="+_ac.join(",")+"&_mbox="+urlencode(this.env.mailbox)+_aa,_a9);
1493 };
1494 this.mark_message=function(_b1,uid){
1495 var _b3=new Array();
1496 var _b4=new Array();
1497 var _b5=this.message_list?this.message_list.get_selection():new Array();
1498 if(uid){
1499 _b3[0]=uid;
1500 }else{
1501 if(this.env.uid){
1502 _b3[0]=this.env.uid;
1503 }else{
1504 if(this.message_list){
1505 for(var n=0;n<_b5.length;n++){
1506 _b3[_b3.length]=_b5[n];
1507 }
1508 }
1509 }
1510 }
1511 if(!this.message_list){
1512 _b4=_b3;
1513 }else{
1514 for(var id,n=0;n<_b3.length;n++){
1515 id=_b3[n];
1516 if((_b1=="read"&&this.message_list.rows[id].unread)||(_b1=="unread"&&!this.message_list.rows[id].unread)||(_b1=="delete"&&!this.message_list.rows[id].deleted)||(_b1=="undelete"&&this.message_list.rows[id].deleted)||(_b1=="flagged"&&!this.message_list.rows[id].flagged)||(_b1=="unflagged"&&this.message_list.rows[id].flagged)){
1517 _b4[_b4.length]=id;
1518 }
1519 }
1520 }
1521 if(!_b4.length){
1522 return;
1523 }
1524 switch(_b1){
1525 case "read":
1526 case "unread":
1527 this.toggle_read_status(_b1,_b4);
1528 break;
1529 case "delete":
1530 case "undelete":
1531 this.toggle_delete_status(_b4);
1532 break;
1533 case "flagged":
1534 case "unflagged":
1535 this.toggle_flagged_status(_b1,_b3);
1536 break;
1537 }
1538 };
1539 this.toggle_read_status=function(_b8,_b9){
1540 for(var i=0;i<_b9.length;i++){
1541 this.set_message(_b9[i],"unread",(_b8=="unread"?true:false));
1542 }
1543 this.http_post("mark","_uid="+_b9.join(",")+"&_flag="+_b8);
1544 };
1545 this.toggle_flagged_status=function(_bb,_bc){
1546 for(var i=0;i<_bc.length;i++){
1547 this.set_message(_bc[i],"flagged",(_bb=="flagged"?true:false));
1548 }
1549 this.http_post("mark","_uid="+_bc.join(",")+"&_flag="+_bb);
1550 };
1551 this.toggle_delete_status=function(_be){
1552 var _bf=this.message_list?this.message_list.rows:new Array();
1553 if(_be.length==1){
1554 if(!_bf.length||(_bf[_be[0]]&&!_bf[_be[0]].deleted)){
1555 this.flag_as_deleted(_be);
1556 }else{
1557 this.flag_as_undeleted(_be);
1558 }
1559 return true;
1560 }
1561 var _c0=true;
1562 for(var i=0;i<_be.length;i++){
1563 uid=_be[i];
1564 if(_bf[uid]){
1565 if(!_bf[uid].deleted){
1566 _c0=false;
1567 break;
1568 }
1569 }
1570 }
1571 if(_c0){
1572 this.flag_as_undeleted(_be);
1573 }else{
1574 this.flag_as_deleted(_be);
1575 }
1576 return true;
1577 };
1578 this.flag_as_undeleted=function(_c2){
1579 for(var i=0;i<_c2.length;i++){
1580 this.set_message(_c2[i],"deleted",false);
1581 }
1582 this.http_post("mark","_uid="+_c2.join(",")+"&_flag=undelete");
1583 return true;
1584 };
1585 this.flag_as_deleted=function(_c4){
1586 var _c5="";
1587 var _c6=new Array();
1588 var _c7=this.message_list?this.message_list.rows:new Array();
1589 for(var i=0;i<_c4.length;i++){
1590 uid=_c4[i];
1591 if(_c7[uid]){
1592 this.set_message(uid,"deleted",true);
1593 if(_c7[uid].unread){
1594 _c6[_c6.length]=uid;
1595 }
1596 }
1597 }
1598 if(_c6.length){
1599 _c5="&_ruid="+_c6.join(",");
1600 }
1601 this.http_post("mark","_uid="+_c4.join(",")+"&_flag=delete"+_c5);
1602 return true;
1603 };
1604 this.flag_deleted_as_read=function(_c9){
1605 var _ca;
1606 var _cb=this.message_list?this.message_list.rows:new Array();
1607 var str=String(_c9);
1608 var _cd=new Array();
1609 _cd=str.split(",");
1610 for(var uid,i=0;i<_cd.length;i++){
1611 uid=_cd[i];
1612 if(_cb[uid]){
1613 this.set_message(uid,"unread",false);
1614 }
1615 }
1616 };
1617 this.login_user_keyup=function(e){
1618 var key=rcube_event.get_keycode(e);
1619 var elm;
1620 if((key==13)&&(elm=rcube_find_object("_pass"))){
1621 elm.focus();
1622 return false;
1623 }
1624 };
1625 this.check_compose_input=function(){
1626 var _d3=rcube_find_object("_to");
1627 var _d4=rcube_find_object("_cc");
1628 var _d5=rcube_find_object("_bcc");
1629 var _d6=rcube_find_object("_from");
1630 var _d7=rcube_find_object("_subject");
1631 var _d8=rcube_find_object("_message");
1632 if(_d6.type=="text"&&!rcube_check_email(_d6.value,true)){
1633 alert(this.get_label("nosenderwarning"));
1634 _d6.focus();
1635 return false;
1636 }
1637 var _d9=_d3.value?_d3.value:(_d4.value?_d4.value:_d5.value);
1638 if(!rcube_check_email(_d9.replace(/^\s+/,"").replace(/[\s,;]+$/,""),true)){
1639 alert(this.get_label("norecipientwarning"));
1640 _d3.focus();
1641 return false;
1642 }
1643 if(_d7&&_d7.value==""){
1644 var _da=prompt(this.get_label("nosubjectwarning"),this.get_label("nosubject"));
1645 if(!_da&&_da!==""){
1646 _d7.focus();
1647 return false;
1648 }else{
1649 _d7.value=_da?_da:this.get_label("nosubject");
1650 }
1651 }
1652 if((!window.tinyMCE||!tinyMCE.get("compose-body"))&&_d8.value==""&&!confirm(this.get_label("nobodywarning"))){
1653 _d8.focus();
1654 return false;
1655 }else{
1656 if(window.tinyMCE&&tinyMCE.get("compose-body")&&!tinyMCE.get("compose-body").getContent()&&!confirm(this.get_label("nobodywarning"))){
1657 tinyMCE.get("compose-body").focus();
1658 return false;
1659 }
1660 }
1661 this.stop_spellchecking();
1662 return true;
1663 };
1664 this.stop_spellchecking=function(){
1665 if(this.env.spellcheck&&!this.spellcheck_ready){
1666 exec_event(this.env.spellcheck.check_link,"click");
1667 this.set_spellcheck_state("ready");
1668 }
1669 };
1670 this.display_spellcheck_controls=function(vis){
1671 if(this.env.spellcheck){
1672 if(!vis){
1673 this.stop_spellchecking();
1674 }
1675 this.env.spellcheck.check_link.style.visibility=vis?"visible":"hidden";
1676 this.env.spellcheck.switch_lan_pic.style.visibility=vis?"visible":"hidden";
1677 }
1678 };
1679 this.set_spellcheck_state=function(s){
1680 this.spellcheck_ready=(s=="check_spelling"||s=="ready");
1681 this.enable_command("spellcheck",this.spellcheck_ready);
1682 };
1683 this.set_draft_id=function(id){
1684 var f;
1685 if(f=rcube_find_object("_draft_saveid")){
1686 f.value=id;
1687 }
1688 };
1689 this.auto_save_start=function(){
1690 if(this.env.draft_autosave){
1691 this.save_timer=self.setTimeout(function(){
1692 _1.command("savedraft");
1693 },this.env.draft_autosave*1000);
1694 }
1695 this.busy=false;
1696 };
1697 this.compose_field_hash=function(_df){
1698 var _e0=rcube_find_object("_to");
1699 var _e1=rcube_find_object("_cc");
1700 var _e2=rcube_find_object("_bcc");
1701 var _e3=rcube_find_object("_subject");
1702 var _e4,_e5;
1703 var str="";
1704 if(_e0&&_e0.value){
1705 str+=_e0.value+":";
1706 }
1707 if(_e1&&_e1.value){
1708 str+=_e1.value+":";
1709 }
1710 if(_e2&&_e2.value){
1711 str+=_e2.value+":";
1712 }
1713 if(_e3&&_e3.value){
1714 str+=_e3.value+":";
1715 }
1716 if(_e4=tinyMCE.get("compose-body")){
1717 str+=_e4.getContent();
1718 }else{
1719 _e5=rcube_find_object("_message");
1720 str+=_e5.value;
1721 }
1722 if(_df){
1723 this.cmp_hash=str;
1724 }
1725 return str;
1726 };
1727 this.change_identity=function(obj){
1728 if(!obj||!obj.options){
1729 return false;
1730 }
1731 var id=obj.options[obj.selectedIndex].value;
1732 var _e9=rcube_find_object("_message");
1733 var _ea=_e9?_e9.value:"";
1734 var _eb=(rcube_find_object("_is_html").value=="1");
1735 var sig,p;
1736 if(!this.env.identity){
1737 this.env.identity=id;
1738 }
1739 if(!_eb){
1740 if(this.env.identity&&this.env.signatures&&this.env.signatures[this.env.identity]){
1741 if(this.env.signatures[this.env.identity]["is_html"]){
1742 sig=this.env.signatures[this.env.identity]["plain_text"];
1743 }else{
1744 sig=this.env.signatures[this.env.identity]["text"];
1745 }
1746 if(sig.indexOf("-- ")!=0){
1747 sig="-- \n"+sig;
1748 }
1749 p=_ea.lastIndexOf(sig);
1750 if(p>=0){
1751 _ea=_ea.substring(0,p-1)+_ea.substring(p+sig.length,_ea.length);
1752 }
1753 }
1754 _ea=_ea.replace(/[\r\n]+$/,"");
1755 if(this.env.signatures&&this.env.signatures[id]){
1756 sig=this.env.signatures[id]["text"];
1757 if(this.env.signatures[id]["is_html"]){
1758 sig=this.env.signatures[id]["plain_text"];
1759 }
1760 if(sig.indexOf("-- ")!=0){
1761 sig="-- \n"+sig;
1762 }
1763 _ea+="\n\n"+sig;
1764 }
1765 }else{
1766 var _ee=tinyMCE.get("compose-body");
1767 if(this.env.signatures){
1768 var _ef=_ee.dom.get("_rc_sig");
1769 var _f0="";
1770 var _f1=true;
1771 if(!_ef){
1772 if(bw.ie){
1773 _ee.getBody().appendChild(_ee.getDoc().createElement("br"));
1774 }
1775 _ef=_ee.getDoc().createElement("div");
1776 _ef.setAttribute("id","_rc_sig");
1777 _ee.getBody().appendChild(_ef);
1778 }
1779 if(this.env.signatures[id]){
1780 _f0=this.env.signatures[id]["text"];
1781 _f1=this.env.signatures[id]["is_html"];
1782 }
1783 if(_f1){
1784 _ef.innerHTML=_f0;
1785 }else{
1786 _ef.innerHTML="<pre>"+_f0+"</pre>";
1787 }
1788 }
1789 }
1790 if(_e9){
1791 _e9.value=_ea;
1792 }
1793 this.env.identity=id;
1794 return true;
1795 };
1796 this.show_attachment_form=function(a){
1797 if(!this.gui_objects.uploadbox){
1798 return false;
1799 }
1800 var elm,_f4;
1801 if(elm=this.gui_objects.uploadbox){
1802 if(a&&(_f4=this.gui_objects.attachmentlist)){
1803 var pos=rcube_get_object_pos(_f4);
1804 var _f6=pos.x;
1805 var top=pos.y+_f4.offsetHeight+10;
1806 elm.style.top=top+"px";
1807 elm.style.left=_f6+"px";
1808 }
1809 elm.style.visibility=a?"visible":"hidden";
1810 }
1811 try{
1812 if(!a&&this.gui_objects.attachmentform!=this.gui_objects.messageform){
1813 this.gui_objects.attachmentform.reset();
1814 }
1815 }
1816 catch(e){
1817 }
1818 return true;
1819 };
1820 this.upload_file=function(_f8){
1821 if(!_f8){
1822 return false;
1823 }
1824 var _f9=false;
1825 for(var n=0;n<_f8.elements.length;n++){
1826 if(_f8.elements[n].type=="file"&&_f8.elements[n].value){
1827 _f9=true;
1828 break;
1829 }
1830 }
1831 if(_f9){
1832 var ts=new Date().getTime();
1833 var _fc="rcmupload"+ts;
1834 if(document.all){
1835 var _fd="<iframe name=\""+_fc+"\" src=\"program/blank.gif\" style=\"width:0;height:0;visibility:hidden;\"></iframe>";
1836 document.body.insertAdjacentHTML("BeforeEnd",_fd);
1837 }else{
1838 var _fe=document.createElement("IFRAME");
1839 _fe.name=_fc;
1840 _fe.style.border="none";
1841 _fe.style.width=0;
1842 _fe.style.height=0;
1843 _fe.style.visibility="hidden";
1844 document.body.appendChild(_fe);
1845 }
1846 _f8.target=_fc;
1847 _f8.action=this.env.comm_path+"&_action=upload";
1848 _f8.setAttribute("enctype","multipart/form-data");
1849 _f8.submit();
1850 }
1851 this.gui_objects.attachmentform=_f8;
1852 return true;
1853 };
1854 this.add2attachment_list=function(_ff,_100){
1855 if(!this.gui_objects.attachmentlist){
1856 return false;
1857 }
1858 var li=document.createElement("LI");
1859 li.id=_ff;
1860 li.innerHTML=_100;
1861 this.gui_objects.attachmentlist.appendChild(li);
1862 return true;
1863 };
1864 this.remove_from_attachment_list=function(name){
1865 if(!this.gui_objects.attachmentlist){
1866 return false;
1867 }
1868 var list=this.gui_objects.attachmentlist.getElementsByTagName("li");
1869 for(i=0;i<list.length;i++){
1870 if(list[i].id==name){
1871 this.gui_objects.attachmentlist.removeChild(list[i]);
1872 }
1873 }
1874 };
1875 this.remove_attachment=function(name){
1876 if(name){
1877 this.http_post("remove-attachment","_file="+urlencode(name));
1878 }
1879 return true;
1880 };
1881 this.add_contact=function(_105){
1882 if(_105){
1883 this.http_post("addcontact","_address="+_105);
1884 }
1885 return true;
1886 };
1887 this.qsearch=function(_106,_107){
1888 if(_106!=""){
1889 if(this.message_list){
1890 this.message_list.clear();
1891 }else{
1892 if(this.contact_list){
1893 this.contact_list.clear(true);
1894 this.show_contentframe(false);
1895 }
1896 }
1897 if(this.gui_objects.search_filter){
1898 _107="&_filter="+this.gui_objects.search_filter.value;
1899 }
1900 this.env.current_page=1;
1901 this.set_busy(true,"searching");
1902 this.http_request("search","_q="+urlencode(_106)+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):"")+(this.env.source?"&_source="+urlencode(this.env.source):"")+(_107?_107:""),true);
1903 }
1904 return true;
1905 };
1906 this.reset_qsearch=function(){
1907 if(this.gui_objects.qsearchbox){
1908 this.gui_objects.qsearchbox.value="";
1909 }
1910 this.env.search_request=null;
1911 return true;
1912 };
1913 this.sent_successfully=function(type,msg){
1914 this.list_mailbox();
1915 this.display_message(msg,type,true);
1916 };
1917 this.ksearch_keypress=function(e,obj){
1918 if(this.ksearch_timer){
1919 clearTimeout(this.ksearch_timer);
1920 }
1921 var _10c;
1922 var key=rcube_event.get_keycode(e);
1923 var mod=rcube_event.get_modifier(e);
1924 switch(key){
1925 case 38:
1926 case 40:
1927 if(!this.ksearch_pane){
1928 break;
1929 }
1930 var dir=key==38?1:0;
1931 _10c=document.getElementById("rcmksearchSelected");
1932 if(!_10c){
1933 _10c=this.ksearch_pane.ul.firstChild;
1934 }
1935 if(_10c){
1936 this.ksearch_select(dir?_10c.previousSibling:_10c.nextSibling);
1937 }
1938 return rcube_event.cancel(e);
1939 case 9:
1940 if(mod==SHIFT_KEY){
1941 break;
1942 }
1943 case 13:
1944 if(this.ksearch_selected===null||!this.ksearch_input||!this.ksearch_value){
1945 break;
1946 }
1947 this.insert_recipient(this.ksearch_selected);
1948 this.ksearch_hide();
1949 return rcube_event.cancel(e);
1950 case 27:
1951 this.ksearch_hide();
1952 break;
1953 }
1954 this.ksearch_timer=window.setTimeout(function(){
1955 _1.ksearch_get_results();
1956 },200);
1957 this.ksearch_input=obj;
1958 return true;
1959 };
1960 this.ksearch_select=function(node){
1961 var _111=document.getElementById("rcmksearchSelected");
1962 if(_111&&node){
1963 _111.removeAttribute("id");
1964 this.set_classname(_111,"selected",false);
1965 }
1966 if(node){
1967 node.setAttribute("id","rcmksearchSelected");
1968 this.set_classname(node,"selected",true);
1969 this.ksearch_selected=node._rcm_id;
1970 }
1971 };
1972 this.insert_recipient=function(id){
1973 if(!this.env.contacts[id]||!this.ksearch_input){
1974 return;
1975 }
1976 var _113=this.ksearch_input.value.toLowerCase();
1977 var cpos=this.get_caret_pos(this.ksearch_input);
1978 var p=_113.lastIndexOf(this.ksearch_value,cpos);
1979 var pre=this.ksearch_input.value.substring(0,p);
1980 var end=this.ksearch_input.value.substring(p+this.ksearch_value.length,this.ksearch_input.value.length);
1981 var _118=this.env.contacts[id]+", ";
1982 this.ksearch_input.value=pre+_118+end;
1983 cpos=p+_118.length;
1984 if(this.ksearch_input.setSelectionRange){
1985 this.ksearch_input.setSelectionRange(cpos,cpos);
1986 }
1987 };
1988 this.ksearch_get_results=function(){
1989 var _119=this.ksearch_input?this.ksearch_input.value:null;
1990 if(_119===null){
1991 return;
1992 }
1993 if(this.ksearch_pane&&this.ksearch_pane.visible){
1994 this.ksearch_pane.show(0);
1995 }
1996 var cpos=this.get_caret_pos(this.ksearch_input);
1997 var p=_119.lastIndexOf(",",cpos-1);
1998 var q=_119.substring(p+1,cpos);
1999 q=q.replace(/(^\s+|\s+$)/g,"").toLowerCase();
2000 if(!q.length||q==this.ksearch_value){
2001 return;
2002 }
2003 this.ksearch_value=q;
2004 this.display_message(this.get_label("searching"),"loading",true);
2005 this.http_post("autocomplete","_search="+q);
2006 };
2007 this.ksearch_query_results=function(_11d){
2008 this.hide_message();
2009 this.env.contacts=_11d?_11d:[];
2010 var _11e=new Array();
2011 var c=0;
2012 for(var i=0;i<this.env.contacts.length;i++){
2013 _11e[c++]=i;
2014 if(c==15){
2015 break;
2016 }
2017 }
2018 this.ksearch_display_results(this.env.contacts,_11e,c);
2019 };
2020 this.ksearch_display_results=function(_121,_122,c){
2021 if(c&&_121.length&&this.ksearch_input){
2022 var p,ul,li;
2023 if(!this.ksearch_pane){
2024 ul=document.createElement("UL");
2025 this.ksearch_pane=new rcube_layer("rcmKSearchpane",{vis:0,zindex:30000});
2026 this.ksearch_pane.elm.appendChild(ul);
2027 this.ksearch_pane.ul=ul;
2028 }else{
2029 ul=this.ksearch_pane.ul;
2030 }
2031 ul.innerHTML="";
2032 for(i=0;i<_121.length;i++){
2033 li=document.createElement("LI");
2034 li.innerHTML=_121[i].replace(new RegExp("("+this.ksearch_value+")","ig"),"##$1%%").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/##([^%]+)%%/g,"<b>$1</b>");
2035 li.onmouseover=function(){
2036 _1.ksearch_select(this);
2037 };
2038 li.onmouseup=function(){
2039 _1.ksearch_click(this);
2040 };
2041 li._rcm_id=_122[i];
2042 ul.appendChild(li);
2043 }
2044 if(this.ksearch_selected!==null){
2045 p=find_in_array(this.ksearch_selected,_122);
2046 if(p>=0&&ul.childNodes){
2047 ul.childNodes[p].setAttribute("id","rcmksearchSelected");
2048 this.set_classname(ul.childNodes[p],"selected",true);
2049 }else{
2050 this.ksearch_selected=null;
2051 }
2052 }
2053 if(this.ksearch_selected===null){
2054 ul.firstChild.setAttribute("id","rcmksearchSelected");
2055 this.set_classname(ul.firstChild,"selected",true);
2056 this.ksearch_selected=_122[0];
2057 }
2058 var pos=rcube_get_object_pos(this.ksearch_input);
2059 this.ksearch_pane.move(pos.x,pos.y+this.ksearch_input.offsetHeight);
2060 this.ksearch_pane.show(1);
2061 }else{
2062 this.ksearch_hide();
2063 }
2064 };
2065 this.ksearch_click=function(node){
2066 this.insert_recipient(node._rcm_id);
2067 this.ksearch_hide();
2068 if(_1.ksearch_input){
2069 this.ksearch_input.focus();
2070 }
2071 };
2072 this.ksearch_blur=function(){
2073 if(this.ksearch_timer){
2074 clearTimeout(this.ksearch_timer);
2075 }
2076 this.ksearch_value="";
2077 this.ksearch_input=null;
2078 this.ksearch_hide();
2079 };
2080 this.ksearch_hide=function(){
2081 this.ksearch_selected=null;
2082 if(this.ksearch_pane){
2083 this.ksearch_pane.show(0);
2084 }
2085 };
2086 this.contactlist_keypress=function(list){
2087 if(list.key_pressed==list.DELETE_KEY){
2088 this.command("delete");
2089 }
2090 };
2091 this.contactlist_select=function(list){
2092 if(this.preview_timer){
2093 clearTimeout(this.preview_timer);
2094 }
2095 var id,_12c,_1=this;
2096 if(id=list.get_single_selection()){
2097 this.preview_timer=window.setTimeout(function(){
2098 _1.load_contact(id,"show");
2099 },200);
2100 }else{
2101 if(this.env.contentframe){
2102 this.show_contentframe(false);
2103 }
2104 }
2105 this.enable_command("compose",list.selection.length>0);
2106 this.enable_command("edit",(id&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly)?true:false);
2107 this.enable_command("delete",list.selection.length&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly);
2108 return false;
2109 };
2110 this.list_contacts=function(src,page){
2111 var _12f="";
2112 var _130=window;
2113 if(!src){
2114 src=this.env.source;
2115 }
2116 if(page&&this.current_page==page&&src==this.env.source){
2117 return false;
2118 }
2119 if(src!=this.env.source){
2120 page=1;
2121 this.env.current_page=page;
2122 this.reset_qsearch();
2123 }
2124 this.select_folder(src,this.env.source);
2125 this.env.source=src;
2126 if(this.gui_objects.contactslist){
2127 this.list_contacts_remote(src,page);
2128 return;
2129 }
2130 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
2131 _130=window.frames[this.env.contentframe];
2132 _12f="&_framed=1";
2133 }
2134 if(this.env.search_request){
2135 _12f+="&_search="+this.env.search_request;
2136 }
2137 this.set_busy(true,"loading");
2138 _130.location.href=this.env.comm_path+(src?"&_source="+urlencode(src):"")+(page?"&_page="+page:"")+_12f;
2139 };
2140 this.list_contacts_remote=function(src,page){
2141 this.contact_list.clear(true);
2142 this.show_contentframe(false);
2143 this.enable_command("delete","compose",false);
2144 var url=(src?"_source="+urlencode(src):"")+(page?(src?"&":"")+"_page="+page:"");
2145 this.env.source=src;
2146 if(this.env.search_request){
2147 url+="&_search="+this.env.search_request;
2148 }
2149 this.set_busy(true,"loading");
2150 this.http_request("list",url,true);
2151 };
2152 this.load_contact=function(cid,_135,_136){
2153 var _137="";
2154 var _138=window;
2155 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
2156 _137="&_framed=1";
2157 _138=window.frames[this.env.contentframe];
2158 this.show_contentframe(true);
2159 }else{
2160 if(_136){
2161 return false;
2162 }
2163 }
2164 if(_135&&(cid||_135=="add")&&!this.drag_active){
2165 this.set_busy(true);
2166 _138.location.href=this.env.comm_path+"&_action="+_135+"&_source="+urlencode(this.env.source)+"&_cid="+urlencode(cid)+_137;
2167 }
2168 return true;
2169 };
2170 this.copy_contact=function(cid,to){
2171 if(!cid){
2172 cid=this.contact_list.get_selection().join(",");
2173 }
2174 if(to!=this.env.source&&cid&&this.env.address_sources[to]&&!this.env.address_sources[to].readonly){
2175 this.http_post("copy","_cid="+urlencode(cid)+"&_source="+urlencode(this.env.source)+"&_to="+urlencode(to));
2176 }
2177 };
2178 this.delete_contacts=function(){
2179 var _13b=this.contact_list.get_selection();
2180 if(!(_13b.length||this.env.cid)||!confirm(this.get_label("deletecontactconfirm"))){
2181 return;
2182 }
2183 var _13c=new Array();
2184 var qs="";
2185 if(this.env.cid){
2186 _13c[_13c.length]=this.env.cid;
2187 }else{
2188 var id;
2189 for(var n=0;n<_13b.length;n++){
2190 id=_13b[n];
2191 _13c[_13c.length]=id;
2192 this.contact_list.remove_row(id,(n==_13b.length-1));
2193 }
2194 if(_13b.length==1){
2195 this.show_contentframe(false);
2196 }
2197 }
2198 if(this.env.search_request){
2199 qs+="&_search="+this.env.search_request;
2200 }
2201 this.http_post("delete","_cid="+urlencode(_13c.join(","))+"&_source="+urlencode(this.env.source)+"&_from="+(this.env.action?this.env.action:"")+qs);
2202 return true;
2203 };
2204 this.update_contact_row=function(cid,_141){
2205 var row;
2206 if(this.contact_list.rows[cid]&&(row=this.contact_list.rows[cid].obj)){
2207 for(var c=0;c<_141.length;c++){
2208 if(row.cells[c]){
2209 row.cells[c].innerHTML=_141[c];
2210 }
2211 }
2212 return true;
2213 }
2214 return false;
2215 };
2216 this.init_subscription_list=function(){
2217 var p=this;
2218 this.subscription_list=new rcube_list_widget(this.gui_objects.subscriptionlist,{multiselect:false,draggable:true,keyboard:false,toggleselect:true});
2219 this.subscription_list.addEventListener("select",function(o){
2220 p.subscription_select(o);
2221 });
2222 this.subscription_list.addEventListener("dragstart",function(o){
2223 p.drag_active=true;
2224 });
2225 this.subscription_list.addEventListener("dragend",function(o){
2226 p.subscription_move_folder(o);
2227 });
2228 this.subscription_list.row_init=function(row){
2229 var _149=row.obj.getElementsByTagName("A");
2230 if(_149[0]){
2231 _149[0].onclick=function(){
2232 p.rename_folder(row.id);
2233 return false;
2234 };
2235 }
2236 if(_149[1]){
2237 _149[1].onclick=function(){
2238 p.delete_folder(row.id);
2239 return false;
2240 };
2241 }
2242 row.obj.onmouseover=function(){
2243 p.focus_subscription(row.id);
2244 };
2245 row.obj.onmouseout=function(){
2246 p.unfocus_subscription(row.id);
2247 };
2248 };
2249 this.subscription_list.init();
2250 };
2251 this.identity_select=function(list){
2252 var id;
2253 if(id=list.get_single_selection()){
2254 this.load_identity(id,"edit-identity");
2255 }
2256 };
2257 this.load_identity=function(id,_14d){
2258 if(_14d=="edit-identity"&&(!id||id==this.env.iid)){
2259 return false;
2260 }
2261 var _14e="";
2262 var _14f=window;
2263 if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
2264 _14e="&_framed=1";
2265 _14f=window.frames[this.env.contentframe];
2266 document.getElementById(this.env.contentframe).style.visibility="inherit";
2267 }
2268 if(_14d&&(id||_14d=="add-identity")){
2269 this.set_busy(true);
2270 _14f.location.href=this.env.comm_path+"&_action="+_14d+"&_iid="+id+_14e;
2271 }
2272 return true;
2273 };
2274 this.delete_identity=function(id){
2275 var _151=this.identity_list.get_selection();
2276 if(!(_151.length||this.env.iid)){
2277 return;
2278 }
2279 if(!id){
2280 id=this.env.iid?this.env.iid:_151[0];
2281 }
2282 this.goto_url("delete-identity","_iid="+id,true);
2283 return true;
2284 };
2285 this.focus_subscription=function(id){
2286 var row,_154;
2287 var reg=RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
2288 if(this.drag_active&&this.env.folder&&(row=document.getElementById(id))){
2289 if(this.env.subscriptionrows[id]&&(_154=this.env.subscriptionrows[id][0])){
2290 if(this.check_droptarget(_154)&&!this.env.subscriptionrows[this.get_folder_row_id(this.env.folder)][2]&&(_154!=this.env.folder.replace(reg,""))&&(!_154.match(new RegExp("^"+RegExp.escape(this.env.folder+this.env.delimiter))))){
2291 this.set_env("dstfolder",_154);
2292 this.set_classname(row,"droptarget",true);
2293 }
2294 }else{
2295 if(this.env.folder.match(new RegExp(RegExp.escape(this.env.delimiter)))){
2296 this.set_env("dstfolder",this.env.delimiter);
2297 this.set_classname(this.subscription_list.frame,"droptarget",true);
2298 }
2299 }
2300 }
2301 };
2302 this.unfocus_subscription=function(id){
2303 var row;
2304 this.set_env("dstfolder",null);
2305 if(this.env.subscriptionrows[id]&&(row=document.getElementById(id))){
2306 this.set_classname(row,"droptarget",false);
2307 }else{
2308 this.set_classname(this.subscription_list.frame,"droptarget",false);
2309 }
2310 };
2311 this.subscription_select=function(list){
2312 var id,_15a;
2313 if((id=list.get_single_selection())&&this.env.subscriptionrows["rcmrow"+id]&&(_15a=this.env.subscriptionrows["rcmrow"+id][0])){
2314 this.set_env("folder",_15a);
2315 }else{
2316 this.set_env("folder",null);
2317 }
2318 if(this.gui_objects.createfolderhint){
2319 this.gui_objects.createfolderhint.innerHTML=this.env.folder?this.get_label("addsubfolderhint"):"";
2320 }
2321 };
2322 this.subscription_move_folder=function(list){
2323 var reg=RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
2324 if(this.env.folder&&this.env.dstfolder&&(this.env.dstfolder!=this.env.folder)&&(this.env.dstfolder!=this.env.folder.replace(reg,""))){
2325 var reg=new RegExp("[^"+RegExp.escape(this.env.delimiter)+"]*["+RegExp.escape(this.env.delimiter)+"]","g");
2326 var _15d=this.env.folder.replace(reg,"");
2327 var _15e=this.env.dstfolder==this.env.delimiter?_15d:this.env.dstfolder+this.env.delimiter+_15d;
2328 this.set_busy(true,"foldermoving");
2329 this.http_post("rename-folder","_folder_oldname="+urlencode(this.env.folder)+"&_folder_newname="+urlencode(_15e),true);
2330 }
2331 this.drag_active=false;
2332 this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder));
2333 };
2334 this.create_folder=function(name){
2335 if(this.edit_folder){
2336 this.reset_folder_rename();
2337 }
2338 var form;
2339 if((form=this.gui_objects.editform)&&form.elements["_folder_name"]){
2340 name=form.elements["_folder_name"].value;
2341 if(name.indexOf(this.env.delimiter)>=0){
2342 alert(this.get_label("forbiddencharacter")+" ("+this.env.delimiter+")");
2343 return false;
2344 }
2345 if(this.env.folder&&name!=""){
2346 name=this.env.folder+this.env.delimiter+name;
2347 }
2348 this.set_busy(true,"foldercreating");
2349 this.http_post("create-folder","_name="+urlencode(name),true);
2350 }else{
2351 if(form.elements["_folder_name"]){
2352 form.elements["_folder_name"].focus();
2353 }
2354 }
2355 };
2356 this.rename_folder=function(id){
2357 var temp,row,form;
2358 if(temp=this.edit_folder){
2359 this.reset_folder_rename();
2360 if(temp==id){
2361 return;
2362 }
2363 }
2364 if(id&&this.env.subscriptionrows[id]&&(row=document.getElementById(id))){
2365 var reg=new RegExp(".*["+RegExp.escape(this.env.delimiter)+"]");
2366 this.name_input=document.createElement("INPUT");
2367 this.name_input.value=this.env.subscriptionrows[id][0].replace(reg,"");
2368 this.name_input.style.width="100%";
2369 reg=new RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
2370 this.name_input.__parent=this.env.subscriptionrows[id][0].replace(reg,"");
2371 this.name_input.onkeypress=function(e){
2372 rcmail.name_input_keypress(e);
2373 };
2374 row.cells[0].replaceChild(this.name_input,row.cells[0].firstChild);
2375 this.edit_folder=id;
2376 this.name_input.select();
2377 if(form=this.gui_objects.editform){
2378 form.onsubmit=function(){
2379 return false;
2380 };
2381 }
2382 }
2383 };
2384 this.reset_folder_rename=function(){
2385 var cell=this.name_input?this.name_input.parentNode:null;
2386 if(cell&&this.edit_folder&&this.env.subscriptionrows[this.edit_folder]){
2387 cell.innerHTML=this.env.subscriptionrows[this.edit_folder][1];
2388 }
2389 this.edit_folder=null;
2390 };
2391 this.name_input_keypress=function(e){
2392 var key=rcube_event.get_keycode(e);
2393 if(key==13){
2394 var _16a=this.name_input?this.name_input.value:null;
2395 if(this.edit_folder&&_16a){
2396 if(_16a.indexOf(this.env.delimiter)>=0){
2397 alert(this.get_label("forbiddencharacter")+" ("+this.env.delimiter+")");
2398 return false;
2399 }
2400 if(this.name_input.__parent){
2401 _16a=this.name_input.__parent+this.env.delimiter+_16a;
2402 }
2403 this.set_busy(true,"folderrenaming");
2404 this.http_post("rename-folder","_folder_oldname="+urlencode(this.env.subscriptionrows[this.edit_folder][0])+"&_folder_newname="+urlencode(_16a),true);
2405 }
2406 }else{
2407 if(key==27){
2408 this.reset_folder_rename();
2409 }
2410 }
2411 };
2412 this.delete_folder=function(id){
2413 var _16c=this.env.subscriptionrows[id][0];
2414 if(this.edit_folder){
2415 this.reset_folder_rename();
2416 }
2417 if(_16c&&confirm(this.get_label("deletefolderconfirm"))){
2418 this.set_busy(true,"folderdeleting");
2419 this.http_post("delete-folder","_mboxes="+urlencode(_16c),true);
2420 this.set_env("folder",null);
2421 if(this.gui_objects.createfolderhint){
2422 this.gui_objects.createfolderhint.innerHTML="";
2423 }
2424 }
2425 };
2426 this.add_folder_row=function(name,_16e,_16f,_170){
2427 if(!this.gui_objects.subscriptionlist){
2428 return false;
2429 }
2430 for(var _171 in this.env.subscriptionrows){
2431 if(this.env.subscriptionrows[_171]!=null&&!this.env.subscriptionrows[_171][2]){
2432 break;
2433 }
2434 }
2435 var _172,form;
2436 var _174=this.gui_objects.subscriptionlist.tBodies[0];
2437 var id="rcmrow"+(_174.childNodes.length+1);
2438 var _176=this.subscription_list.get_single_selection();
2439 if(_16f&&_16f.id){
2440 id=_16f.id;
2441 _171=_16f.id;
2442 }
2443 if(!id||!(_172=document.getElementById(_171))){
2444 this.goto_url("folders");
2445 }else{
2446 var row=this.clone_table_row(_172);
2447 row.id=id;
2448 if(_170&&(_170=this.get_folder_row_id(_170))){
2449 _174.insertBefore(row,document.getElementById(_170));
2450 }else{
2451 _174.appendChild(row);
2452 }
2453 if(_16f){
2454 _174.removeChild(_16f);
2455 }
2456 }
2457 this.env.subscriptionrows[row.id]=[name,_16e,0];
2458 row.cells[0].innerHTML=_16e;
2459 if(!_16f){
2460 row.cells[1].innerHTML="*";
2461 }
2462 if(!_16f&&row.cells[2]&&row.cells[2].firstChild.tagName=="INPUT"){
2463 row.cells[2].firstChild.value=name;
2464 row.cells[2].firstChild.checked=true;
2465 }
2466 if(!_16f&&(form=this.gui_objects.editform)){
2467 if(form.elements["_folder_oldname"]){
2468 form.elements["_folder_oldname"].options[form.elements["_folder_oldname"].options.length]=new Option(name,name);
2469 }
2470 if(form.elements["_folder_name"]){
2471 form.elements["_folder_name"].value="";
2472 }
2473 }
2474 this.init_subscription_list();
2475 if(_176&&document.getElementById("rcmrow"+_176)){
2476 this.subscription_list.select_row(_176);
2477 }
2478 if(document.getElementById(id).scrollIntoView){
2479 document.getElementById(id).scrollIntoView();
2480 }
2481 };
2482 this.replace_folder_row=function(_178,_179,_17a,_17b){
2483 var id=this.get_folder_row_id(_178);
2484 var row=document.getElementById(id);
2485 this.add_folder_row(_179,_17a,row,_17b);
2486 var form,elm;
2487 if((form=this.gui_objects.editform)&&(elm=form.elements["_folder_oldname"])){
2488 for(var i=0;i<elm.options.length;i++){
2489 if(elm.options[i].value==_178){
2490 elm.options[i].text=_17a;
2491 elm.options[i].value=_179;
2492 break;
2493 }
2494 }
2495 form.elements["_folder_newname"].value="";
2496 }
2497 };
2498 this.remove_folder_row=function(_181){
2499 var row;
2500 var id=this.get_folder_row_id(_181);
2501 if(id&&(row=document.getElementById(id))){
2502 row.style.display="none";
2503 }
2504 var form;
2505 if((form=this.gui_objects.editform)&&form.elements["_folder_oldname"]){
2506 for(var i=0;i<form.elements["_folder_oldname"].options.length;i++){
2507 if(form.elements["_folder_oldname"].options[i].value==_181){
2508 form.elements["_folder_oldname"].options[i]=null;
2509 break;
2510 }
2511 }
2512 }
2513 if(form&&form.elements["_folder_newname"]){
2514 form.elements["_folder_newname"].value="";
2515 }
2516 };
2517 this.subscribe_folder=function(_186){
2518 if(_186){
2519 this.http_post("subscribe","_mbox="+urlencode(_186));
2520 }
2521 };
2522 this.unsubscribe_folder=function(_187){
2523 if(_187){
2524 this.http_post("unsubscribe","_mbox="+urlencode(_187));
2525 }
2526 };
2527 this.get_folder_row_id=function(_188){
2528 for(var id in this.env.subscriptionrows){
2529 if(this.env.subscriptionrows[id]&&this.env.subscriptionrows[id][0]==_188){
2530 break;
2531 }
2532 }
2533 return id;
2534 };
2535 this.clone_table_row=function(row){
2536 var cell,td;
2537 var _18d=document.createElement("TR");
2538 for(var n=0;n<row.cells.length;n++){
2539 cell=row.cells[n];
2540 td=document.createElement("TD");
2541 if(cell.className){
2542 td.className=cell.className;
2543 }
2544 if(cell.align){
2545 td.setAttribute("align",cell.align);
2546 }
2547 td.innerHTML=cell.innerHTML;
2548 _18d.appendChild(td);
2549 }
2550 return _18d;
2551 };
2552 this.set_page_buttons=function(){
2553 this.enable_command("nextpage",(this.env.pagecount>this.env.current_page));
2554 this.enable_command("lastpage",(this.env.pagecount>this.env.current_page));
2555 this.enable_command("previouspage",(this.env.current_page>1));
2556 this.enable_command("firstpage",(this.env.current_page>1));
2557 };
2558 this.set_button=function(_18f,_190){
2559 var _191=this.buttons[_18f];
2560 var _192,obj;
2561 if(!_191||!_191.length){
2562 return false;
2563 }
2564 for(var n=0;n<_191.length;n++){
2565 _192=_191[n];
2566 obj=document.getElementById(_192.id);
2567 if(obj&&_192.type=="image"&&!_192.status){
2568 _192.pas=obj._original_src?obj._original_src:obj.src;
2569 if(obj.runtimeStyle&&obj.runtimeStyle.filter&&obj.runtimeStyle.filter.match(/src=['"]([^'"]+)['"]/)){
2570 _192.pas=RegExp.$1;
2571 }
2572 }else{
2573 if(obj&&!_192.status){
2574 _192.pas=String(obj.className);
2575 }
2576 }
2577 if(obj&&_192.type=="image"&&_192[_190]){
2578 _192.status=_190;
2579 obj.src=_192[_190];
2580 }else{
2581 if(obj&&typeof (_192[_190])!="undefined"){
2582 _192.status=_190;
2583 obj.className=_192[_190];
2584 }
2585 }
2586 if(obj&&_192.type=="input"){
2587 _192.status=_190;
2588 obj.disabled=!_190;
2589 }
2590 }
2591 };
2592 this.set_alttext=function(_195,_196){
2593 if(!this.buttons[_195]||!this.buttons[_195].length){
2594 return;
2595 }
2596 var _197,obj,link;
2597 for(var n=0;n<this.buttons[_195].length;n++){
2598 _197=this.buttons[_195][n];
2599 obj=document.getElementById(_197.id);
2600 if(_197.type=="image"&&obj){
2601 obj.setAttribute("alt",this.get_label(_196));
2602 if((link=obj.parentNode)&&link.tagName=="A"){
2603 link.setAttribute("title",this.get_label(_196));
2604 }
2605 }else{
2606 if(obj){
2607 obj.setAttribute("title",this.get_label(_196));
2608 }
2609 }
2610 }
2611 };
2612 this.button_over=function(_19b,id){
2613 var _19d=this.buttons[_19b];
2614 var _19e,img;
2615 if(!_19d||!_19d.length){
2616 return false;
2617 }
2618 for(var n=0;n<_19d.length;n++){
2619 _19e=_19d[n];
2620 if(_19e.id==id&&_19e.status=="act"){
2621 img=document.getElementById(_19e.id);
2622 if(img&&_19e.over){
2623 img.src=_19e.over;
2624 }
2625 }
2626 }
2627 };
2628 this.button_sel=function(_1a1,id){
2629 var _1a3=this.buttons[_1a1];
2630 var _1a4,img;
2631 if(!_1a3||!_1a3.length){
2632 return;
2633 }
2634 for(var n=0;n<_1a3.length;n++){
2635 _1a4=_1a3[n];
2636 if(_1a4.id==id&&_1a4.status=="act"){
2637 img=document.getElementById(_1a4.id);
2638 if(img&&_1a4.sel){
2639 img.src=_1a4.sel;
2640 }
2641 }
2642 }
2643 };
2644 this.button_out=function(_1a7,id){
2645 var _1a9=this.buttons[_1a7];
2646 var _1aa,img;
2647 if(!_1a9||!_1a9.length){
2648 return;
2649 }
2650 for(var n=0;n<_1a9.length;n++){
2651 _1aa=_1a9[n];
2652 if(_1aa.id==id&&_1aa.status=="act"){
2653 img=document.getElementById(_1aa.id);
2654 if(img&&_1aa.act){
2655 img.src=_1aa.act;
2656 }
2657 }
2658 }
2659 };
2660 this.set_classname=function(obj,_1ae,set){
2661 var reg=new RegExp("s*"+_1ae,"i");
2662 if(!set&&obj.className.match(reg)){
2663 obj.className=obj.className.replace(reg,"");
2664 }else{
2665 if(set&&!obj.className.match(reg)){
2666 obj.className+=" "+_1ae;
2667 }
2668 }
2669 };
2670 this.set_pagetitle=function(_1b1){
2671 if(_1b1&&document.title){
2672 document.title=_1b1;
2673 }
2674 };
2675 this.display_message=function(msg,type,hold){
2676 if(!this.loaded){
2677 this.pending_message=new Array(msg,type);
2678 return true;
2679 }
2680 if(this.env.framed&&parent.rcmail){
2681 return parent.rcmail.display_message(msg,type,hold);
2682 }
2683 if(!this.gui_objects.message){
2684 return false;
2685 }
2686 if(this.message_timer){
2687 clearTimeout(this.message_timer);
2688 }
2689 var cont=msg;
2690 if(type){
2691 cont="<div class=\""+type+"\">"+cont+"</div>";
2692 }
2693 var _1b6=this;
2694 this.gui_objects.message.innerHTML=cont;
2695 this.gui_objects.message.style.display="block";
2696 if(type!="loading"){
2697 this.gui_objects.message.onmousedown=function(){
2698 _1b6.hide_message();
2699 return true;
2700 };
2701 }
2702 if(!hold){
2703 this.message_timer=window.setTimeout(function(){
2704 _1.hide_message();
2705 },this.message_time);
2706 }
2707 };
2708 this.hide_message=function(){
2709 if(this.gui_objects.message){
2710 this.gui_objects.message.style.display="none";
2711 this.gui_objects.message.onmousedown=null;
2712 }
2713 };
2714 this.select_folder=function(name,old){
2715 if(this.gui_objects.folderlist){
2716 var _1b9,_1ba;
2717 if((_1b9=this.get_folder_li(old))){
2718 this.set_classname(_1b9,"selected",false);
2719 this.set_classname(_1b9,"unfocused",false);
2720 }
2721 if((_1ba=this.get_folder_li(name))){
2722 this.set_classname(_1ba,"unfocused",false);
2723 this.set_classname(_1ba,"selected",true);
2724 }
2725 }
2726 };
2727 this.get_folder_li=function(name){
2728 if(this.gui_objects.folderlist){
2729 name=String(name).replace(this.identifier_expr,"");
2730 return document.getElementById("rcmli"+name);
2731 }
2732 return null;
2733 };
2734 this.set_message_coltypes=function(_1bc){
2735 this.coltypes=_1bc;
2736 var cell,col;
2737 var _1bf=this.gui_objects.messagelist?this.gui_objects.messagelist.tHead:null;
2738 for(var n=0;_1bf&&n<this.coltypes.length;n++){
2739 col=this.coltypes[n];
2740 if((cell=_1bf.rows[0].cells[n+1])&&(col=="from"||col=="to")){
2741 if(cell.firstChild&&cell.firstChild.tagName=="A"){
2742 cell.firstChild.innerHTML=this.get_label(this.coltypes[n]);
2743 cell.firstChild.onclick=function(){
2744 return rcmail.command("sort",this.__col,this);
2745 };
2746 cell.firstChild.__col=col;
2747 }else{
2748 cell.innerHTML=this.get_label(this.coltypes[n]);
2749 }
2750 cell.id="rcm"+col;
2751 }else{
2752 if(col=="subject"&&this.message_list){
2753 this.message_list.subject_col=n+1;
2754 }
2755 }
2756 }
2757 };
2758 this.add_message_row=function(uid,cols,_1c3,_1c4,_1c5){
2759 if(!this.gui_objects.messagelist||!this.message_list){
2760 return false;
2761 }
2762 var _1c6=this.gui_objects.messagelist.tBodies[0];
2763 var _1c7=_1c6.rows.length;
2764 var even=_1c7%2;
2765 this.env.messages[uid]={deleted:_1c3.deleted?1:0,replied:_1c3.replied?1:0,unread:_1c3.unread?1:0,forwarded:_1c3.forwarded?1:0,flagged:_1c3.flagged?1:0};
2766 var row=document.createElement("TR");
2767 row.id="rcmrow"+uid;
2768 row.className="message"+(even?" even":" odd")+(_1c3.unread?" unread":"")+(_1c3.deleted?" deleted":"")+(_1c3.flagged?" flagged":"");
2769 if(this.message_list.in_selection(uid)){
2770 row.className+=" selected";
2771 }
2772 var icon=this.env.messageicon;
2773 if(_1c3.deleted&&this.env.deletedicon){
2774 icon=this.env.deletedicon;
2775 }else{
2776 if(_1c3.replied&&this.env.repliedicon){
2777 if(_1c3.forwarded&&this.env.forwardedrepliedicon){
2778 icon=this.env.forwardedrepliedicon;
2779 }else{
2780 icon=this.env.repliedicon;
2781 }
2782 }else{
2783 if(_1c3.forwarded&&this.env.forwardedicon){
2784 icon=this.env.forwardedicon;
2785 }else{
2786 if(_1c3.unread&&this.env.unreadicon){
2787 icon=this.env.unreadicon;
2788 }
2789 }
2790 }
2791 }
2792 var col=document.createElement("TD");
2793 col.className="icon";
2794 col.innerHTML=icon?"<img src=\""+icon+"\" alt=\"\" />":"";
2795 row.appendChild(col);
2796 for(var n=0;n<this.coltypes.length;n++){
2797 var c=this.coltypes[n];
2798 col=document.createElement("TD");
2799 col.className=String(c).toLowerCase();
2800 if(c=="flag"){
2801 if(_1c3.flagged&&this.env.flaggedicon){
2802 col.innerHTML="<img src=\""+this.env.flaggedicon+"\" alt=\"\" />";
2803 }else{
2804 if(!_1c3.flagged&&this.env.unflaggedicon){
2805 col.innerHTML="<img src=\""+this.env.unflaggedicon+"\" alt=\"\" />";
2806 }
2807 }
2808 }else{
2809 if(c=="attachment"){
2810 col.innerHTML=_1c4&&this.env.attachmenticon?"<img src=\""+this.env.attachmenticon+"\" alt=\"\" />":"&nbsp;";
2811 }else{
2812 col.innerHTML=cols[c];
2813 }
2814 }
2815 row.appendChild(col);
2816 }
2817 this.message_list.insert_row(row,_1c5);
2818 if(_1c5&&this.env.pagesize&&this.message_list.rowcount>this.env.pagesize){
2819 var uid=this.message_list.get_last_row();
2820 this.message_list.remove_row(uid);
2821 this.message_list.clear_selection(uid);
2822 }
2823 };
2824 this.set_rowcount=function(text){
2825 if(this.gui_objects.countdisplay){
2826 this.gui_objects.countdisplay.innerHTML=text;
2827 }
2828 this.set_page_buttons();
2829 };
2830 this.set_mailboxname=function(_1cf){
2831 if(this.gui_objects.mailboxname&&_1cf){
2832 this.gui_objects.mailboxname.innerHTML=_1cf;
2833 }
2834 };
2835 this.set_quota=function(_1d0){
2836 if(this.gui_objects.quotadisplay&&_1d0){
2837 this.gui_objects.quotadisplay.innerHTML=_1d0;
2838 }
2839 };
2840 this.set_unread_count=function(mbox,_1d2,_1d3){
2841 if(!this.gui_objects.mailboxlist){
2842 return false;
2843 }
2844 this.env.unread_counts[mbox]=_1d2;
2845 this.set_unread_count_display(mbox,_1d3);
2846 };
2847 this.set_unread_count_display=function(mbox,_1d5){
2848 var reg,_1d7,item,_1d9,_1da,div;
2849 if(item=this.get_folder_li(mbox)){
2850 _1d9=this.env.unread_counts[mbox]?this.env.unread_counts[mbox]:0;
2851 _1d7=item.getElementsByTagName("a")[0];
2852 reg=/\s+\([0-9]+\)$/i;
2853 _1da=0;
2854 if((div=item.getElementsByTagName("div")[0])&&div.className.match(/collapsed/)){
2855 for(var k in this.env.unread_counts){
2856 if(k.indexOf(mbox+this.env.delimiter)==0){
2857 _1da+=this.env.unread_counts[k];
2858 }
2859 }
2860 }
2861 if(_1d9&&_1d7.innerHTML.match(reg)){
2862 _1d7.innerHTML=_1d7.innerHTML.replace(reg," ("+_1d9+")");
2863 }else{
2864 if(_1d9){
2865 _1d7.innerHTML+=" ("+_1d9+")";
2866 }else{
2867 _1d7.innerHTML=_1d7.innerHTML.replace(reg,"");
2868 }
2869 }
2870 reg=new RegExp(RegExp.escape(this.env.delimiter)+"[^"+RegExp.escape(this.env.delimiter)+"]+$");
2871 if(mbox.match(reg)){
2872 this.set_unread_count_display(mbox.replace(reg,""),false);
2873 }
2874 this.set_classname(item,"unread",(_1d9+_1da)>0?true:false);
2875 }
2876 reg=/^\([0-9]+\)\s+/i;
2877 if(_1d5&&document.title){
2878 var _1dd=String(document.title);
2879 var _1de="";
2880 if(_1d9&&_1dd.match(reg)){
2881 _1de=_1dd.replace(reg,"("+_1d9+") ");
2882 }else{
2883 if(_1d9){
2884 _1de="("+_1d9+") "+_1dd;
2885 }else{
2886 _1de=_1dd.replace(reg,"");
2887 }
2888 }
2889 this.set_pagetitle(_1de);
2890 }
2891 };
2892 this.new_message_focus=function(){
2893 if(this.env.framed&&window.parent){
2894 window.parent.focus();
2895 }else{
2896 window.focus();
2897 }
2898 };
2899 this.add_contact_row=function(cid,cols,_1e1){
2900 if(!this.gui_objects.contactslist||!this.gui_objects.contactslist.tBodies[0]){
2901 return false;
2902 }
2903 var _1e2=this.gui_objects.contactslist.tBodies[0];
2904 var _1e3=_1e2.rows.length;
2905 var even=_1e3%2;
2906 var row=document.createElement("TR");
2907 row.id="rcmrow"+cid;
2908 row.className="contact "+(even?"even":"odd");
2909 if(this.contact_list.in_selection(cid)){
2910 row.className+=" selected";
2911 }
2912 for(var c in cols){
2913 col=document.createElement("TD");
2914 col.className=String(c).toLowerCase();
2915 col.innerHTML=cols[c];
2916 row.appendChild(col);
2917 }
2918 this.contact_list.insert_row(row);
2919 this.enable_command("export",(this.contact_list.rowcount>0));
2920 };
2921 this.toggle_prefer_html=function(_1e7){
2922 var _1e8;
2923 if(_1e8=document.getElementById("rcmfd_addrbook_show_images")){
2924 _1e8.disabled=!_1e7.checked;
2925 }
2926 };
2927 this.set_headers=function(_1e9){
2928 if(this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&_1e9){
2929 var box=this.gui_objects.all_headers_box;
2930 box.innerHTML=_1e9;
2931 box.style.display="block";
2932 if(this.env.framed&&parent.rcmail){
2933 parent.rcmail.set_busy(false);
2934 }else{
2935 this.set_busy(false);
2936 }
2937 }
2938 };
2939 this.load_headers=function(elem){
2940 if(!this.gui_objects.all_headers_row||!this.gui_objects.all_headers_box||!this.env.uid){
2941 return;
2942 }
2943 this.set_classname(elem,"show-headers",false);
2944 this.set_classname(elem,"hide-headers",true);
2945 this.gui_objects.all_headers_row.style.display=bw.ie?"block":"table-row";
2946 elem.onclick=function(){
2947 rcmail.hide_headers(elem);
2948 };
2949 if(!this.gui_objects.all_headers_box.innerHTML){
2950 this.display_message(this.get_label("loading"),"loading",true);
2951 this.http_post("headers","_uid="+this.env.uid);
2952 }
2953 };
2954 this.hide_headers=function(elem){
2955 if(!this.gui_objects.all_headers_row||!this.gui_objects.all_headers_box){
2956 return;
2957 }
2958 this.set_classname(elem,"hide-headers",false);
2959 this.set_classname(elem,"show-headers",true);
2960 this.gui_objects.all_headers_row.style.display="none";
2961 elem.onclick=function(){
2962 rcmail.load_headers(elem);
2963 };
2964 };
2965 this.html2plain=function(_1ed,id){
2966 var _1ef=new rcube_http_request();
2967 var url=this.env.bin_path+"html2text.php";
2968 var _1f1=this;
2969 this.set_busy(true,"converting");
2970 _1ef.onerror=function(o){
2971 _1f1.http_error(o);
2972 };
2973 _1ef.oncomplete=function(o){
2974 _1f1.set_text_value(o,id);
2975 };
2976 _1ef.POST(url,_1ed,"application/octet-stream");
2977 };
2978 this.set_text_value=function(_1f4,id){
2979 this.set_busy(false);
2980 document.getElementById(id).value=_1f4.get_text();
2981 };
2982 this.redirect=function(url,lock){
2983 if(lock||lock===null){
2984 this.set_busy(true);
2985 }
2986 if(this.env.framed&&window.parent){
2987 parent.location.href=url;
2988 }else{
2989 location.href=url;
2990 }
2991 };
2992 this.goto_url=function(_1f8,_1f9,lock){
2993 var _1fb=_1f9?"&"+_1f9:"";
2994 this.redirect(this.env.comm_path+"&_action="+_1f8+_1fb,lock);
2995 };
2996 this.http_sockets=new Array();
2997 this.get_request_obj=function(){
2998 for(var n=0;n<this.http_sockets.length;n++){
2999 if(!this.http_sockets[n].busy){
3000 return this.http_sockets[n];
3001 }
3002 }
3003 var i=this.http_sockets.length;
3004 this.http_sockets[i]=new rcube_http_request();
3005 return this.http_sockets[i];
3006 };
3007 this.http_request=function(_1fe,_1ff,lock){
3008 var _201=this.get_request_obj();
3009 _1ff+=(_1ff?"&":"")+"_remote=1";
3010 if(bw.safari){
3011 _1ff+="&_ts="+(new Date().getTime());
3012 }
3013 if(_201){
3014 if(lock){
3015 this.set_busy(true);
3016 }
3017 var rcm=this;
3018 _201.__lock=lock?true:false;
3019 _201.__action=_1fe;
3020 _201.onerror=function(o){
3021 _1.http_error(o);
3022 };
3023 _201.oncomplete=function(o){
3024 _1.http_response(o);
3025 };
3026 _201.GET(this.env.comm_path+"&_action="+_1fe+"&"+_1ff);
3027 }
3028 };
3029 this.http_post=function(_205,_206,lock){
3030 var _208;
3031 if(_206&&typeof (_206)=="object"){
3032 _206._remote=1;
3033 }else{
3034 _206+=(_206?"&":"")+"_remote=1";
3035 }
3036 if(_208=this.get_request_obj()){
3037 if(lock){
3038 this.set_busy(true);
3039 }
3040 var rcm=this;
3041 _208.__lock=lock?true:false;
3042 _208.__action=_205;
3043 _208.onerror=function(o){
3044 rcm.http_error(o);
3045 };
3046 _208.oncomplete=function(o){
3047 rcm.http_response(o);
3048 };
3049 _208.POST(this.env.comm_path+"&_action="+_205,_206);
3050 }
3051 };
3052 this.http_response=function(_20c){
3053 var _20d=_20c.get_header("Content-Type");
3054 if(_20d){
3055 _20d=String(_20d).toLowerCase();
3056 var _20e=_20d.split(";");
3057 _20d=_20e[0];
3058 }
3059 if(_20c.__lock){
3060 this.set_busy(false);
3061 }
3062 if(_20c.get_text()&&(_20d=="text/javascript"||_20d=="application/x-javascript")){
3063 eval(_20c.get_text());
3064 }
3065 switch(_20c.__action){
3066 case "delete":
3067 if(this.task=="addressbook"){
3068 var uid=this.contact_list.get_selection();
3069 this.enable_command("compose",(uid&&this.contact_list.rows[uid]));
3070 this.enable_command("delete","edit",(uid&&this.contact_list.rows[uid]&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly));
3071 this.enable_command("export",(this.contact_list&&this.contact_list.rowcount>0));
3072 }
3073 case "moveto":
3074 if(this.env.action=="show"){
3075 this.command("list");
3076 }else{
3077 if(this.message_list){
3078 this.message_list.init();
3079 }
3080 }
3081 break;
3082 case "purge":
3083 case "expunge":
3084 if(!this.env.messagecount&&this.task=="mail"){
3085 if(this.env.contentframe){
3086 this.show_contentframe(false);
3087 }
3088 this.enable_command("show","reply","reply-all","forward","moveto","delete","mark","viewsource","print","load-attachment","purge","expunge","select-all","select-none","sort",false);
3089 }
3090 break;
3091 case "check-recent":
3092 case "getunread":
3093 case "list":
3094 if(this.task=="mail"){
3095 if(this.message_list&&_20c.__action=="list"){
3096 this.msglist_select(this.message_list);
3097 }
3098 this.enable_command("show","expunge","select-all","select-none","sort",(this.env.messagecount>0));
3099 this.enable_command("purge",this.purge_mailbox_test());
3100 }else{
3101 if(this.task=="addressbook"){
3102 this.enable_command("export",(this.contact_list&&this.contact_list.rowcount>0));
3103 }
3104 }
3105 break;
3106 }
3107 _20c.reset();
3108 };
3109 this.http_error=function(_210){
3110 if(_210.__lock){
3111 this.set_busy(false);
3112 }
3113 _210.reset();
3114 _210.__lock=false;
3115 this.display_message("Unknown Server Error!","error");
3116 };
3117 this.send_keep_alive=function(){
3118 var d=new Date();
3119 this.http_request("keep-alive","_t="+d.getTime());
3120 };
3121 this.check_for_recent=function(_212){
3122 if(this.busy){
3123 return;
3124 }
3125 if(_212){
3126 this.set_busy(true,"checkingmail");
3127 }
3128 this.http_request("check-recent",(this.env.search_request?"_search="+this.env.search_request+"&":"")+"_t="+(new Date().getTime()),true);
3129 };
3130 this.get_single_uid=function(){
3131 return this.env.uid?this.env.uid:(this.message_list?this.message_list.get_single_selection():null);
3132 };
3133 this.get_single_cid=function(){
3134 return this.env.cid?this.env.cid:(this.contact_list?this.contact_list.get_single_selection():null);
3135 };
3136 this.get_caret_pos=function(obj){
3137 if(typeof (obj.selectionEnd)!="undefined"){
3138 return obj.selectionEnd;
3139 }else{
3140 if(document.selection&&document.selection.createRange){
3141 var _214=document.selection.createRange();
3142 if(_214.parentElement()!=obj){
3143 return 0;
3144 }
3145 var gm=_214.duplicate();
3146 if(obj.tagName=="TEXTAREA"){
3147 gm.moveToElementText(obj);
3148 }else{
3149 gm.expand("textedit");
3150 }
3151 gm.setEndPoint("EndToStart",_214);
3152 var p=gm.text.length;
3153 return p<=obj.value.length?p:-1;
3154 }else{
3155 return obj.value.length;
3156 }
3157 }
3158 };
3159 this.set_caret2start=function(obj){
3160 if(obj.createTextRange){
3161 var _218=obj.createTextRange();
3162 _218.collapse(true);
3163 _218.select();
3164 }else{
3165 if(obj.setSelectionRange){
3166 obj.setSelectionRange(0,0);
3167 }
3168 }
3169 obj.focus();
3170 };
3171 this.lock_form=function(form,lock){
3172 if(!form||!form.elements){
3173 return;
3174 }
3175 var type;
3176 for(var n=0;n<form.elements.length;n++){
3177 type=form.elements[n];
3178 if(type=="hidden"){
3179 continue;
3180 }
3181 form.elements[n].disabled=lock;
3182 }
3183 };
3184 };
3185 function rcube_http_request(){
3186 this.url="";
3187 this.busy=false;
3188 this.xmlhttp=null;
3189 this.reset=function(){
3190 this.onloading=function(){
3191 };
3192 this.onloaded=function(){
3193 };
3194 this.oninteractive=function(){
3195 };
3196 this.oncomplete=function(){
3197 };
3198 this.onabort=function(){
3199 };
3200 this.onerror=function(){
3201 };
3202 this.url="";
3203 this.busy=false;
3204 this.xmlhttp=null;
3205 };
3206 this.build=function(){
3207 if(window.XMLHttpRequest){
3208 this.xmlhttp=new XMLHttpRequest();
3209 }else{
3210 if(window.ActiveXObject){
3211 try{
3212 this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
3213 }
3214 catch(e){
3215 this.xmlhttp=null;
3216 }
3217 }else{
3218 }
3219 }
3220 };
3221 this.GET=function(url){
3222 this.build();
3223 if(!this.xmlhttp){
3224 this.onerror(this);
3225 return false;
3226 }
3227 var _ref=this;
3228 this.url=url;
3229 this.busy=true;
3230 this.xmlhttp.onreadystatechange=function(){
3231 _ref.xmlhttp_onreadystatechange();
3232 };
3233 this.xmlhttp.open("GET",url,true);
3234 this.xmlhttp.setRequestHeader("X-RoundCube-Referer",bw.get_cookie("roundcube_sessid"));
3235 this.xmlhttp.send(null);
3236 };
3237 this.POST=function(url,body,_221){
3238 if(typeof (_221)=="undefined"){
3239 _221="application/x-www-form-urlencoded";
3240 }
3241 this.build();
3242 if(!this.xmlhttp){
3243 this.onerror(this);
3244 return false;
3245 }
3246 var _222=body;
3247 if(typeof (body)=="object"){
3248 _222="";
3249 for(var p in body){
3250 _222+=(_222?"&":"")+p+"="+urlencode(body[p]);
3251 }
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("POST",url,true);
3260 this.xmlhttp.setRequestHeader("Content-Type",_221);
3261 this.xmlhttp.setRequestHeader("X-RoundCube-Referer",bw.get_cookie("roundcube_sessid"));
3262 this.xmlhttp.send(_222);
3263 };
3264 this.xmlhttp_onreadystatechange=function(){
3265 if(this.xmlhttp.readyState==1){
3266 this.onloading(this);
3267 }else{
3268 if(this.xmlhttp.readyState==2){
3269 this.onloaded(this);
3270 }else{
3271 if(this.xmlhttp.readyState==3){
3272 this.oninteractive(this);
3273 }else{
3274 if(this.xmlhttp.readyState==4){
3275 try{
3276 if(this.xmlhttp.status==0){
3277 this.onabort(this);
3278 }else{
3279 if(this.xmlhttp.status==200){
3280 this.oncomplete(this);
3281 }else{
3282 this.onerror(this);
3283 }
3284 }
3285 this.busy=false;
3286 }
3287 catch(err){
3288 this.onerror(this);
3289 this.busy=false;
3290 }
3291 }
3292 }
3293 }
3294 }
3295 };
3296 this.get_header=function(name){
3297 return this.xmlhttp.getResponseHeader(name);
3298 };
3299 this.get_text=function(){
3300 return this.xmlhttp.responseText;
3301 };
3302 this.get_xml=function(){
3303 return this.xmlhttp.responseXML;
3304 };
3305 this.reset();
3306 };
3307 function call_init(o){
3308 window.setTimeout("if (window['"+o+"'] && window['"+o+"'].init) { "+o+".init(); }",bw.win?500:200);
3309 };
3310