-var DimpBase={bcache:$H(),cacheids:{},lastrow:-1,mo_sidebar:{},pivotrow:-1,ppcache:{},ppfifo:[],showPreview:DIMP.conf.preview_pref,sfiltersfolder:$H({sf_all:"all",sf_current:"current"}),sfilters:$H({sf_msgall:"msgall",sf_from:"from",sf_to:"to",sf_subject:"subject"}),_select:function(c,a){var b=c.get("rownum");if(b.size()==1){this.lastrow=this.pivotrow=b.first()}this.toggleButtons();if($("previewPane").visible()){if(a.right){this.clearPreviewPane()}else{if(a.delay){(this.bcache.get("initPP")||this.bcache.set("initPP",this.initPreviewPane.bind(this))).delay(a.delay)}else{this.initPreviewPane()}}}},_deselect:function(d,b){var c=this.viewport.getSelected(),a=c.size();if(!a){this.lastrow=this.pivotrow=-1}this.toggleButtons();if(b.right||!a){this.clearPreviewPane()}else{if((a==1)&&$("previewPane").visible()){this.loadPreview(c.get("dataob").first())}}},msgSelect:function(g,c){var b,e=this.viewport.createSelection("domid",g),a=e.get("rownum").first(),d=this.isSelected("domid",g),f=this.selectedCount();this.lastrow=a;$("msgList_filter").blur();if(c.shift){if(f){if(!d||f!=1){b=[a,this.pivotrow];this.viewport.select($A($R(b.min(),b.max())),{range:true})}return}}else{if(c.ctrl){this.pivotrow=a;if(d){this.viewport.deselect(e,{right:c.right});return}else{if(c.right||f){this.viewport.select(e,{add:true,right:c.right});return}}}}this.viewport.select(e,{right:c.right})},selectAll:function(){this.viewport.select($A($R(1,this.viewport.getMetaData("total_rows"))),{range:true})},isSelected:function(b,a){return this.viewport.getSelected().contains(b,a)},selectedCount:function(){return(this.viewport)?this.viewport.getSelected().size():0},resetSelected:function(){if(this.viewport){this.viewport.deselect(this.viewport.getSelected(),{clearall:true})}this.toggleButtons();this.clearPreviewPane()},moveSelected:function(a,g){var e,d,f,b,c;if(g){if(!this.viewport.getMetaData("total_rows")){return}e=a}else{if(a==0){return}c=this.viewport.getSelected();switch(c.size()){case 0:e=this.viewport.currentOffset()+1;break;case 1:d=c.get("dataob").first();e=d.rownum+a;break;default:c=c.get("rownum");e=(a>0?c.max():c.min())+a;break}e=(a>0)?Math.min(e,this.viewport.getMetaData("total_rows")):Math.max(e,1)}f=this.viewport.createSelection("rownum",e);if(f.size()){b=f.get("dataob").first();if(!d||b.imapuid!=d.imapuid){this.viewport.scrollTo(b.rownum);this.viewport.select(f,{delay:0.3})}}else{this.offset=e;this.viewport.requestContentRefresh(e-1)}},go:function(e,b){var d,a,c;if(e.startsWith("compose:")){return}if(e.startsWith("msg:")){c=e.indexOf(":",4);a=e.substring(4,c);this.uid=e.substring(c+1);e="folder:"+a}if(e.startsWith("folder:")){a=e.substring(7);if(this.folder!=a||!$("dimpmain_folder").visible()){this.highlightSidebar(this.getFolderId(a));if(!$("dimpmain_folder").visible()){$("dimpmain_portal").hide();$("dimpmain_folder").show()}if(!Object.isUndefined(this.folder)){this._addHistory(e)}}this.loadFolder(a);return}this.folder=null;$("dimpmain_folder").hide();$("dimpmain_portal").update(DIMP.text.loading).show();if(e.startsWith("app:")){d=e.substr(4);if(d=="imp"){this.go("folder:INBOX");return}this.highlightSidebar("app"+d);this._addHistory(e,b);if(b){this.iframeContent(e,b)}else{if(DIMP.conf.app_urls[d]){this.iframeContent(e,DIMP.conf.app_urls[d])}}return}switch(e){case"portal":this.highlightSidebar("appportal");this._addHistory(e);DimpCore.setTitle(DIMP.text.portal);DimpCore.doAction("ShowPortal",{},null,this.bcache.get("portalC")||this.bcache.set("portalC",this._portalCallback.bind(this)));break;case"options":this.highlightSidebar("appoptions");this._addHistory(e);DimpCore.setTitle(DIMP.text.prefs);this.iframeContent(e,DIMP.conf.prefs_url);break}},_addHistory:function(b,a){if(Horde.dhtmlHistory.getCurrentLocation()!=b){Horde.dhtmlHistory.add(b,a)}},highlightSidebar:function(b){if($("foldersLoading").visible()){this.highlightSidebar.bind(this,b).defer();return}$("sidebarPanel").select(".on").invoke("removeClassName","on");var a=$(b);if(!a){return}if(!a.match("LI")){a=a.up();if(!a){return}}a.addClassName("on");a.ancestors().find(function(c){if(c.hasClassName("subfolders")){this._toggleSubFolder(c.id.substring(3),"exp")}else{return(c.id=="foldersSidebar")}},this)},iframeContent:function(b,d){if(b===null){b=d}var a=$("dimpmain_portal"),c;if(!a){DimpCore.showNotifications([{type:"horde.error",message:"Bad portal!"}]);return}c=new Element("IFRAME",{id:"iframe"+b,className:"iframe",frameBorder:0,src:d});this._resizeIE6Iframe(c);if(b=="options"){c.observe("load",function(){$("iframeoptions").contentWindow.document.getElementById("menu").style.display="none"})}a.insert(c)},msgWindow:function(b){this.updateUnseenUID(b,0);var a=DIMP.conf.message_url;a+=(a.include("?")?"&":"?")+$H({folder:b.view,uid:b.imapuid}).toQueryString();DimpCore.popupWindow(a,"msgview"+b.view+b.imapuid)},composeMailbox:function(a){var b=this.viewport.getSelected();if(!b.size()){return}b.get("dataob").each(function(c){DimpCore.compose(a,{folder:c.view,uid:c.imapuid})})},loadFolder:function(b,a){if(!this.viewport){this._createViewPort()}if(!a){this.resetSelected();if(this.folder==b){this.searchfilterClear(false);return}this.searchfilterClear(true);$("folderName").update(DIMP.text.loading);$("msgHeader").update();this.folderswitch=true;this.folder=b}this.viewport.loadView(b,{folder:b},this.uid?{imapuid:this.uid,view:b}:null,a)},_createViewPort:function(){var b=$("msgList_filter"),a=this.setMessageListTitle.bind(this);this.viewport=new ViewPort({content_container:"msgList",empty_container:"msgList_empty",error_container:"msgList_error",fetch_action:"ListMessages",template:this.message_list_template,buffer_pages:DIMP.conf.buffer_pages,limit_factor:DIMP.conf.limit_factor,viewport_wait:DIMP.conf.viewport_wait,show_split_pane:this.showPreview,split_pane:"previewPane",splitbar:"splitBar",content_class:"msglist",row_class:"msgRow",selected_class:"selectedRow",ajaxRequest:DimpCore.doAction.bind(DimpCore),norows:true,onScrollIdle:a,onSlide:a,onViewChange:function(){DimpCore.addGC(this.viewport.visibleRows())}.bind(this),onContent:function(f){var e,d,c=((this.viewport.getMetaData("sortby")==DIMP.conf.sortthread)&&this.viewport.getMetaData("thread"));if(this.viewport.isFiltering()){d=this.sfilters.get(this._getSearchfilterField()).capitalize();e=new RegExp("("+$F("msgList_filter")+")","i")}f.get("dataob").each(function(k){var h,i,g,j=$(k.domid);if(c&&c[k.imapuid]){h=j.down(".msgSubject");i=h.cloneNode(false);g=c[k.imapuid];$R(0,g.length,true).each(function(l){i.insert($($("thread_img_"+g.charAt(l)).cloneNode(false)).writeAttribute("id",""))});h.replace(i.insert(h.getText().escapeHTML()))}if(k.atc){j.down(".msgSize").insert({top:$($("atc_img_"+k.atc).cloneNode(false)).writeAttribute("id","")})}DimpCore.addMouseEvents({id:k.domid,type:k.menutype});if(d=="From"||d=="Subject"){h=j.down(".msg"+d);h.update(h.getText().escapeHTML().gsub(e,'<span class="searchMatch">#{1}</span>'))}},this);this.setMessageListTitle()}.bind(this),onComplete:function(){var e,c,d=this.viewport.getMetaData("label");if(this.uid){e=this.viewport.getViewportSelection().search({imapuid:{equal:[this.uid]},view:{equal:[this.folder]}});if(e.size()){this.viewport.scrollTo(e.get("rownum").first());this.viewport.select(e)}}else{if(this.offset){this.viewport.select(this.viewport.createSelection("rownum",this.offset))}}this.offset=this.uid=null;d=this.viewport.getMetaData("label");if(d){$("folderName").update(d)}if(this.folderswitch){this.folderswitch=false;if(this.folder==DIMP.conf.spam_folder){if(!DIMP.conf.spam_spamfolder&&DimpCore.buttons.indexOf("button_spam")!=-1){[$("button_spam").up(),$("ctx_message_spam")].invoke("hide")}if(DimpCore.buttons.indexOf("button_ham")!=-1){[$("button_ham").up(),$("ctx_message_ham")].invoke("show")}}else{if(DimpCore.buttons.indexOf("button_spam")!=-1){[$("button_spam").up(),$("ctx_message_spam")].invoke("show")}if(DimpCore.buttons.indexOf("button_ham")!=-1){if(DIMP.conf.ham_spamfolder){[$("button_ham").up(),$("ctx_message_ham")].invoke("hide")}else{[$("button_ham").up(),$("ctx_message_ham")].invoke("show")}}}}else{if(this.filtertoggle){if(this.filtertoggle==1&&this.viewport.getMetaData("sortby")==DIMP.conf.sortthread){c=DIMP.conf.sortdate}this.filtertoggle=0}}this.setSortColumns(c);if(this.viewport.isFiltering()){this.resetSelected()}else{this.setFolderLabel(this.folder,this.viewport.getMetaData("unseen")||0)}this.updateTitle()}.bind(this),onFetch:this.msgListLoading.bind(this,true),onFetchUpdate:function(c){delete this.cacheids[c]}.bind(this),onEndFetch:this.msgListLoading.bind(this,false),onWait:function(){if($("dimpmain_folder").visible()){DimpCore.showNotifications([{type:"horde.warning",message:DIMP.text.listmsg_wait}])}},onFail:function(){if($("dimpmain_folder").visible()){DimpCore.showNotifications([{type:"horde.error",message:DIMP.text.listmsg_timeout}])}this.msgListLoading(false)}.bind(this),onFirstContent:function(){this.clearPreviewPane();$("msgList").observe("dblclick",this._handleMsgListDblclick.bindAsEventListener(this))}.bind(this),onClearRows:function(c){c.each(function(d){var e=$(d).down("div.msCheck");if(e){DimpCore.addGC(e)}if(d.id){DimpCore.removeMouseEvents(d)}})},onBeforeResize:function(){var c=this.viewport.getSelected();this.isvisible=(c.size()==1)&&(this.viewport.isVisible(c.get("rownum").first())==0)}.bind(this),onAfterResize:function(){if(this.isvisible){this.viewport.scrollTo(this.viewport.getSelected().get("rownum").first())}}.bind(this),onCachedList:function(d){if(!this.cacheids[d]){var c={};this.viewport.getViewportSelection(d).get("dataob").each(function(e){if(!c[e.view]){c[e.view]=[parseInt(e.imapuid,10)]}else{c[e.view].push(parseInt(e.imapuid,10))}});this.cacheids[d]=DimpCore.toRangeString(c)}return this.cacheids[d]}.bind(this),selectCallback:this._select.bind(this),deselectCallback:this._deselect.bind(this)});if(!this.showPreview){$("msgList").addClassName("msglistNoPreview")}this.viewport.addFilter("ListMessages",this._addSearchfilterParams.bind(this));b.observe("keyup",this._searchfilterOnKeyup.bind(this));b.observe("focus",this._searchfilterOnFocus.bind(this));b.observe("blur",this._searchfilterOnBlur.bind(this));b.addClassName("msgFilterDefault")},_addMouseEvents:function(b,c){var a;switch(c.type){case"draft":case"message":new Drag(c.id,this._msgDragConfig);a=$(c.id).down("div.msCheck");if(a.visible()){a.observe("mousedown",this.bcache.get("handleMLC")||this.bcache.set("handleMLC",this._handleMsgListCheckbox.bindAsEventListener(this)));a.observe("contextmenu",Event.stop)}break;case"container":case"folder":new Drag(c.id,this._folderDragConfig);break;case"special":c.type="folder";break;case"vcontainer":case"virtual":$(c.id).observe("contextmenu",Event.stop);break}c.onShow=this.bcache.get("onMS")||this.bcache.set("onMS",this._onMenuShow.bind(this));b(c)},_removeMouseEvents:function(b,a){var c,e=$(a).readAttribute("id");if(e&&(c=DragDrop.Drags.get_drag(e))){c.destroy()}b(a)},_onMenuShow:function(a){var e,c,b,d;switch(a.ctx){case"ctx_folder":e=$("ctx_folder_create","ctx_folder_rename","ctx_folder_delete");c=DimpCore.DMenu.element();if(c.readAttribute("mbox")=="INBOX"){e.invoke("hide")}else{if(DIMP.conf.fixed_folders.indexOf(c.readAttribute("mbox"))!=-1){e.shift();e.invoke("hide")}else{e.invoke("show")}}if(c.hasAttribute("u")){$("ctx_folder_poll").hide();$("ctx_folder_nopoll").show()}else{$("ctx_folder_poll").show();$("ctx_folder_nopoll").hide()}break;case"ctx_message":[$("ctx_message_reply_list")].invoke(this.viewport.createSelection("domid",a.id).get("dataob").first().listmsg?"show":"hide");break;case"ctx_reply":d=this.viewport.getSelected();if(d.size()==1){b=d.get("dataob").first()}[$("ctx_reply_reply_list")].invoke(b&&b.listmsg?"show":"hide");break;case"ctx_otheractions":$("oa_seen","oa_unseen","oa_flagged","oa_clear","oa_sep1","oa_blacklist","oa_whitelist","oa_sep2","oa_undeleted").compact().invoke(this.viewport.getSelected().size()?"show":"hide");break}return true},_onResize:function(b,a){if(this.viewport){this.viewport.onResize(b,a)}this._resizeIE6()},_handleMsgListDblclick:function(b){var a=this._getMsgRow(b),c;if(!a){return}c=this.viewport.createSelection("domid",a.id).get("dataob").first();c.draft?DimpCore.compose("resume",{folder:c.view,uid:c.imapuid}):this.msgWindow(c);b.stop()},_handleMsgListCheckbox:function(b){var a=this._getMsgRow(b);if(!a){return}this.msgSelect(a.readAttribute("id"),{ctrl:true,right:true});b.stop()},_getMsgRow:function(a){a=a.element();if(a&&!a.hasClassName("msgRow")){a=a.up(".msgRow")}return a},updateTitle:function(){var b,a,c;if(this.viewport.isFiltering()){a=DIMP.text.search+" :: "+this.viewport.getMetaData("total_rows")+" "+DIMP.text.resfound}else{b=$(this.getFolderId(this.folder));if(b){c=b.readAttribute("u");a=b.readAttribute("l");if(c>0){a+=" ("+c+")"}}else{a=this.viewport.getMetaData("label")}}DimpCore.setTitle(a)},sort:function(d){if(this.viewport.getMetaData("sortlimit")){return}var b,c,a=d.element();if(!a.hasAttribute("sortby")){a=a.up("[sortby]");if(!a){return}}c=parseInt(a.readAttribute("sortby"),10);if(c==this.viewport.getMetaData("sortby")){b={sortdir:(this.viewport.getMetaData("sortdir")?0:1)};this.viewport.setMetaData({sortdir:b.sortdir})}else{b={sortby:c};this.viewport.setMetaData({sortby:b.sortby})}this.setSortColumns(c);this.viewport.reload(b)},setSortColumns:function(c){var b,a=$("msglistHeader");if(Object.isUndefined(c)){c=this.viewport.getMetaData("sortby")}b=a.down("small[sortby="+c+"]");if(b&&b.up().visible()){b.up(1).childElements().invoke("toggle")}b=a.down("div.msgFrom a");if((this.viewport.isFiltering()&&this.fspecial)||this.viewport.getMetaData("special")){b.hide().next().show()}else{b.show().next().hide()}b=a.down("div.msgSubject a");if(this.viewport.isFiltering()||this.viewport.getMetaData("nothread")||this.viewport.getMetaData("sortlimit")){b.show().next().hide();b.down().hide()}else{b.down().show()}a.childElements().invoke("removeClassName","sortup").invoke("removeClassName","sortdown");b=a.down("div a[sortby="+c+"]");if(b){b.up().addClassName(this.viewport.getMetaData("sortdir")?"sortup":"sortdown")}},togglePreviewPane:function(){this.showPreview=!this.showPreview;$("previewtoggle").setText(this.showPreview?DIMP.text.hide_preview:DIMP.text.show_preview);[$("msgList")].invoke(this.showPreview?"removeClassName":"addClassName","msglistNoPreview");new Ajax.Request(DimpCore.addSID(DIMP.conf.URI_PREFS),{parameters:{app:"imp",pref:"show_preview",value:this.showPreview?1:0}});this.viewport.showSplitPane(this.showPreview);if(this.showPreview){this.initPreviewPane()}},loadPreview:function(c,d){var a=$("previewPane"),b;if(!a.visible()){return}if(!d){if(this.pp&&this.pp==c){return}this.pp=c;if(this.ppfifo.indexOf(this.pp.vp_id)!=-1){return this._loadPreviewCallback(this.ppcache[this.pp.vp_id])}}b=a.positionedOffset();$("msgLoading").setStyle({position:"absolute",top:(b.top+10)+"px",left:(b.left+10)+"px"}).show();DimpCore.doAction("ShowPreview",d||{},this.viewport.createSelection("dataob",this.pp),this.bcache.get("loadPC")||this.bcache.set("loadPC",this._loadPreviewCallback.bind(this)))},_loadPreviewCallback:function(resp){var row,search,tmp,tmp2,pm=$("previewMsg"),r=resp.response,t=$("msgHeadersContent").down("THEAD");if(!r.error){search=this.viewport.getViewportSelection(r.view).search({vp_id:{equal:[r.uid]}});if(search.size()){row=search.get("dataob").first();this.updateUnseenUID(row,0)}}if(this.pp&&this.pp.vp_id!=r.uid){return}if(r.error||this.viewport.getSelected().size()!=1){if(r.error){DimpCore.showNotifications([{type:r.errortype,message:r.error}])}this.clearPreviewPane();return}this._expirePPCache([r.uid]);this.ppcache[r.uid]=resp;this.ppfifo.push(r.uid);DimpCore.removeAddressLinks(pm);DIMP.conf.msg_index=r.index;DIMP.conf.msg_folder=r.folder;tmp=pm.select(".subject");tmp.invoke("update",r.subject);switch(r.priority){case"high":case"low":tmp.invoke("insert",{top:$($(r.priority+"_priority_img").cloneNode(false)).writeAttribute("id",false)});break}$("msgHeadersColl").select(".date").invoke("update",r.minidate);$("msgHeaderDate").select(".date").invoke("update",r.fulldate);["from","to","cc"].each(function(a){if(r[a]){(a=="from"?pm.select("."+a):[t.down("."+a)]).each(function(elt){elt.replace(DimpCore.buildAddressLinks(r[a],elt.cloneNode(false)))})}[$("msgHeader"+a.capitalize())].invoke(r[a]?"show":"hide")});$("toggleHeaders").select(".attachmentImage").invoke(r.atc_label?"show":"hide");if(r.atc_label){tmp=$("msgAtc").show().down(".label");tmp2=$("partlist");tmp2.hide().previous().update(new Element("SPAN",{className:"atcLabel"}).insert(r.atc_label)).insert(r.atc_download);if(r.atc_list){$("partlist_col").show();$("partlist_exp").hide();tmp.down().hide().next().show();tmp2.update(r.atc_list)}else{tmp.down().show().next().hide()}}else{$("msgAtc").hide()}$("msgBody").down().update(r.msgtext);$("msgLoading","previewInfo").invoke("hide");$("previewPane").scrollTop=0;pm.show();if(r.js){eval(r.js.join(";"))}this._addHistory("msg:"+row.view+":"+row.imapuid)},initPreviewPane:function(){var a=this.viewport.getSelected();if(a.size()!=1){this.clearPreviewPane()}else{this.loadPreview(a.get("dataob").first())}},clearPreviewPane:function(){$("msgLoading","previewMsg").invoke("hide");$("previewInfo").show();this.pp=null},_expirePPCache:function(a){this.ppfifo=this.ppfifo.without(a);a.each(function(b){delete this.ppcache[b]},this);if(this.ppfifo.size()>20){delete this.ppcache[this.ppfifo.shift()]}},updateUnseenUID:function(b,e){var c,d,a;if(!b.bg){return false}a=b.bg.indexOf("unseen")!=-1;if((e&&a)||(!e&&!a)){return false}c=this.viewport.createSelection("dataob",b);d=parseInt($(this.getFolderId(b.view)).readAttribute("u"),10);if(e){this.viewport.updateFlag(c,"unseen",true);++d}else{this.viewport.updateFlag(c,"unseen",false);--d}this.updateUnseenStatus(b.view,d)},updateUnseenStatus:function(b,a){if(this.viewport){this.viewport.setMetaData({unseen:a},b)}this.setFolderLabel(b,a);if(this.folder==b){this.updateTitle()}},setMessageListTitle:function(){var b,a=this.viewport.getMetaData("total_rows");if(a>0){b=this.viewport.currentOffset();$("msgHeader").update(DIMP.text.messages+" "+(b+1)+" - "+(Math.min(b+this.viewport.getPageSize(),a))+" "+DIMP.text.of+" "+a)}else{$("msgHeader").update(DIMP.text.nomessages)}},setFolderLabel:function(b,c){var a,d=this.getFolderId(b);a=$(d);if(!a||!a.hasAttribute("u")){return}c=parseInt(c);a.writeAttribute("u",c);if(b=="INBOX"&&window.fluid){window.fluid.setDockBadge(c?c:"")}$(d+"_label").update((c>0)?new Element("STRONG").insert(a.readAttribute("l")).insert(" ").insert(new Element("SPAN",{className:"count",dir:"ltr"}).insert("("+c+")")):a.readAttribute("l"))},getFolderId:function(a){return"fld"+decodeURIComponent(a).replace(/_/g,"__").replace(/\W/g,"_")},getSubFolderId:function(a){return"sub"+a},pollFolders:function(){this.setPollFolders();var a={};if(this.folder&&$("dimpmain_folder").visible()){a=this.viewport.addRequestParams({})}$("checkmaillink").down("A").update("["+DIMP.text.check+"]");DimpCore.doAction("PollFolders",a,null,this.bcache.get("pollFC")||this.bcache.set("pollFC",this._pollFoldersCallback.bind(this)))},_pollFoldersCallback:function(b){var a;b=b.response;if(b.poll){a=this;$H(b.poll).each(function(c){a.updateUnseenStatus(c.key,c.value)})}if(b.quota){this._displayQuota(b.quota)}$("checkmaillink").down("A").update(DIMP.text.getmail)},_displayQuota:function(a){q=$("quota").cleanWhitespace();q.setText(a.m);q.down("SPAN.used IMG").writeAttribute({width:99-a.p})},setPollFolders:function(){if(DIMP.conf.refresh_time){if(this.pollPE){this.pollPE.stop()}this.pollPE=new PeriodicalExecuter(this.pollFolders.bind(this),DIMP.conf.refresh_time)}},_portalCallback:function(b){if(b.response.linkTags){var a=$$("HEAD").first();b.response.linkTags.each(function(c){var d=new Element("LINK",{type:"text/css",rel:"stylesheet",href:c.href});if(c.media){d.media=c.media}a.insert(d)})}$("dimpmain_portal").update(b.response.portal);$("dimpmain_portal").select("h1.header a").each(this.bcache.get("portalClkLink")||this.bcache.set("portalClkLink",function(c){c.observe("click",function(f,g){this.go("app:"+g.readAttribute("app"));f.stop()}.bindAsEventListener(this,c))}.bind(this)))},_searchfilterOnKeyup:function(){if(this.searchobserve){clearTimeout(this.searchobserve)}this.searchobserve=(this.bcache.get("searchfilterR")||this.bcache.set("searchfilterR",this.searchfilterRun.bind(this))).delay(0.5)},searchfilterRun:function(){if(!this.viewport.isFiltering()){this.filtertoggle=1;this.fspecial=this.viewport.getMetaData("special")}this.viewport.runFilter($F("msgList_filter"))},_searchfilterOnFocus:function(){var a=$("qoptions").up();if($("msgList_filter").hasClassName("msgFilterDefault")){this._setFilterText(false)}if(!a.visible()){$("sf_current").update(this.viewport.getMetaData("label"));this._setSearchfilterParams(this.viewport.getMetaData("special")?"to":"from","msg");this._setSearchfilterParams("current","folder");$(document.documentElement).setStyle({overflowY:"hidden"});Effect.SlideDown(a,{duration:0.5,afterFinish:function(){this._onResize(false,true);$(document.documentElement).setStyle({overflowY:"auto"})}.bind(this)})}},_searchfilterOnBlur:function(){if(!$F("msgList_filter")){this._setFilterText(true)}},searchfilterClear:function(a){var b=$("qoptions").up();if(!b.visible()){return}if(this.searchobserve){clearTimeout(this.searchobserve);this.searchobserve=null}this._setFilterText(true);Effect.SlideUp(b,{duration:0.5,afterFinish:this._onResize.bind(this,a)});this.filtertoggle=2;this.resetSelected();this.viewport.stopFilter(a)},_setFilterText:function(b){var a=$("msgList_filter");if(b){a.setValue(DIMP.text.search);a.addClassName("msgFilterDefault")}else{a.setValue("");a.removeClassName("msgFilterDefault")}},_setSearchfilterParams:function(d,a){var b=(a=="folder")?this.sfiltersfolder:this.sfilters;b.keys().each(function(c){$(c).writeAttribute("className",(d==b.get(c))?"qselected":"")})},updateSearchfilter:function(b,a){this._setSearchfilterParams(b,a);if($F("msgList_filter")){this.viewport.runFilter()}},_addSearchfilterParams:function(){var a=this.sfiltersfolder.keys().find(function(b){return $(b).hasClassName("qselected")});return{searchfolder:this.sfiltersfolder.get(a),searchmsg:this.sfilters.get(this._getSearchfilterField())}},_getSearchfilterField:function(){return this.sfilters.keys().find(function(a){return $(a).hasClassName("qselected")})},toggleButtons:function(){var a=(this.selectedCount()==0);DimpCore.buttons.each(function(c){var d=$(c);if(d){[d.up()].invoke(a?"addClassName":"removeClassName","disabled");DimpCore.DMenu.disable(c+"_img",true,a)}})},_folderDropHandler:function(c,d,i){var h,g,f,b=c.readAttribute("mbox"),a=c.readAttribute("ftype");if(d.hasClassName("folder")){h=(c==$("dropbase"));if(h||(a!="special"&&!this.isSubfolder(d,c))){DimpCore.doAction("RenameFolder",{old_name:d.readAttribute("mbox"),new_parent:h?"":b,new_name:d.readAttribute("l")},null,this.bcache.get("folderC")||this.bcache.set("folderC",this._folderCallback.bind(this)))}}else{if(a!="container"){g=this.viewport.getSelected();if(g.size()){f=g}else{if(d.readAttribute("mbox")!=b){f=this.viewport.createSelection("domid",d.id)}}if(f.size()){if(i.ctrlKey){DimpCore.doAction("CopyMessage",this.viewport.addRequestParams({tofld:b}),f,this.bcache.get("pollFC")||this.bcache.set("pollFC",this._pollFoldersCallback.bind(this)))}else{if(this.folder!=b){this.viewport.updateFlag(f,"deletedmsg",true);DimpCore.doAction("MoveMessage",this.viewport.addRequestParams({tofld:b}),f,this.bcache.get("deleteC")||this.bcache.set("deleteC",this._deleteCallback.bind(this)))}}}}}},_dragCaption:function(){var a=this.selectedCount();return a+" "+(a==1?DIMP.text.message:DIMP.text.messages)},_keydownHandler:function(f){if(!$("dimpmain_folder").visible()||f.findElement("FORM")||RedBox.overlayVisible()){return}var i,h,b,g,d,a=f.keyCode||f.charCode,c=this.viewport.getSelected();switch(a){case Event.KEY_DELETE:case Event.KEY_BACKSPACE:if(c.size()==1){b=c.get("dataob").first();if(f.shiftKey){this.moveSelected(b.rownum+((b.rownum==this.viewport.getMetaData("total_rows"))?-1:1),true)}this.flag("deleted",b)}else{this.flag("deleted")}f.stop();break;case Event.KEY_UP:case Event.KEY_DOWN:if(f.shiftKey&&this.lastrow!=-1){g=this.viewport.createSelection("rownum",this.lastrow+((a==Event.KEY_UP)?-1:1));if(g.size()){g=g.get("dataob").first();this.viewport.scrollTo(g.rownum);this.msgSelect(g.domid,{shift:true})}}else{this.moveSelected(a==Event.KEY_UP?-1:1)}f.stop();break;case Event.KEY_PAGEUP:case Event.KEY_PAGEDOWN:if(!f.ctrlKey&&!f.shiftKey&&!f.altKey&&!f.metaKey){h=this.viewport.getPageSize()-1;move=h*(a==Event.KEY_PAGEUP?-1:1);if(c.size()==1){i=this.viewport.currentOffset();d=c.get("rownum").first()-1;switch(a){case Event.KEY_PAGEUP:if(i!=d){move=i-d}break;case Event.KEY_PAGEDOWN:if((i+h)!=d){move=i+h-d}break}}this.moveSelected(move);f.stop()}break;case Event.KEY_HOME:case Event.KEY_END:this.moveSelected(a==Event.KEY_HOME?1:this.viewport.getMetaData("total_rows"),true);f.stop();break;case Event.KEY_RETURN:if(!f.element().match("input")){if(c.size()==1){this.msgWindow(c.get("dataob").first())}}f.stop();break;case 65:case 97:if(f.ctrlKey){this.selectAll();f.stop()}break}},renameFolder:function(a){if(Object.isUndefined(a)){return}a=$(a);var b=this._createFolderForm(function(c){this._folderAction(a,c,"rename");return false}.bindAsEventListener(this),DIMP.text.rename_prompt);b.down("input").setValue(a.readAttribute("l"))},createBaseFolder:function(){this._createFolderForm(function(a){this._folderAction("",a,"create");return false}.bindAsEventListener(this),DIMP.text.create_prompt)},createSubFolder:function(a){if(Object.isUndefined(a)){return false}this._createFolderForm(function(b){this._folderAction($(a),b,"createsub");return false}.bindAsEventListener(this),DIMP.text.createsub_prompt)},_createFolderForm:function(a,b){var c=new Element("FORM",{action:"#",id:"RB_folder"}).insert(new Element("P").insert(b)).insert(new Element("INPUT",{type:"text",size:15})).insert(new Element("INPUT",{type:"button",className:"button",value:DIMP.text.ok}).observe("click",a)).insert(new Element("INPUT",{type:"button",className:"button",value:DIMP.text.cancel}).observe("click",this.bcache.get("closeRB")||this.bcache.set("closeRB",this._closeRedBox.bind(this)))).observe("keydown",function(d){if((d.keyCode||d.charCode)==Event.KEY_RETURN){d.stop();a(d)}});RedBox.overlay=true;RedBox.onDisplay=Form.focusFirstElement.curry(c);RedBox.showHtml(c);return c},_closeRedBox:function(){var a=RedBox.getWindowContents();DimpCore.addGC([a,a.descendants()].flatten());RedBox.close()},_folderAction:function(b,d,h){this._closeRedBox();var c,g,f,a=d.findElement("form");f=$F(a.down("input"));if(f){switch(h){case"rename":if(b.readAttribute("l")!=f){c="RenameFolder";g={old_name:b.readAttribute("mbox"),new_parent:b.up().hasClassName("folderlist")?"":b.up(1).previous().readAttribute("mbox"),new_name:f}}break;case"create":case"createsub":c="CreateFolder";g={folder:f};if(h=="createsub"){g.parent=b.readAttribute("mbox")}break}if(c){DimpCore.doAction(c,g,null,this.bcache.get("folderC")||this.bcache.set("folderC",this._folderCallback.bind(this)))}}},_folderCallback:function(a){a=a.response;if(a.d){a.d.each(this.bcache.get("deleteFolder")||this.bcache.set("deleteFolder",this.deleteFolder.bind(this)))}if(a.c){a.c.each(this.bcache.get("changeFolder")||this.bcache.set("changeFolder",this.changeFolder.bind(this)))}if(a.a){a.a.each(this.bcache.get("createFolder")||this.bcache.set("createFolder",this.createFolder.bind(this)))}},_deleteCallback:function(c){var a,b=[];this.msgListLoading(false);this._pollFoldersCallback(c);c=c.response;if(!c.uids||c.folder!=this.folder){return}$H(DimpCore.parseRangeString(c.uids)).each(function(d){d.value.each(function(e){b.push(e+d.key)})});a=this.viewport.getViewportSelection().search({vp_id:{equal:b}});if(a.size()){if(c.remove){this.viewport.remove(a,{cacheid:c.cacheid,noupdate:c.viewport});this._expirePPCache(a.get("uid"))}else{this.viewport.updateFlag(a,"deletedmsg",true)}}},_emptyFolderCallback:function(a){if(a.response.mbox){if(this.folder==a.response.mbox){this.viewport.reload();this.clearPreviewPane()}this.setFolderLabel(a.response.mbox,0)}},_flagAllCallback:function(a){if(a.response.mbox){this.setFolderLabel(a.response.mbox,a.response.u)}},_folderLoadCallback:function(b){this._folderCallback(b);var d=$("specialfolders","normalfolders").compact(),c=$("normalfolders"),a=c.getStyle("max-height");d.invoke("observe","click",this._handleFolderMouseEvent.bindAsEventListener(this,"click"));d.invoke("observe","mouseover",this._handleFolderMouseEvent.bindAsEventListener(this,"over"));if(DIMP.conf.is_ie6){d.invoke("observe","mouseout",this._handleFolderMouseEvent.bindAsEventListener(this,"out"))}$("foldersLoading").hide();$("foldersSidebar").show();if(a!==null||(Prototype.Browser.IE&&Object.isUndefined(a)&&(c.getStyle("height")=="0px"))){this._sizeFolderlist();Event.observe(window,"resize",this._sizeFolderlist.bind(this))}if(b.response.quota){this._displayQuota(b.response.quota)}},_handleFolderMouseEvent:function(f,d){var c,b=f.element(),a=b.up(".folder")||b.up(".custom");if(!a){return}c=a.readAttribute("ftype");switch(d){case"over":if(DIMP.conf.is_ie6){a.addClassName("over")}if(c&&!this.mo_sidebar[a.id]){DimpCore.addMouseEvents({id:a.id,type:c});this.mo_sidebar[a.id]=1}break;case"out":a.removeClassName("over");break;case"click":if(b.hasClassName("exp")||b.hasClassName("col")){this._toggleSubFolder(a.id,"tog")}else{switch(c){case"container":case"vcontainer":f.stop();break;case"folder":case"special":case"virtual":f.stop();return this.go("folder:"+a.readAttribute("mbox"));break}}break}},_toggleSubFolder:function(c,d){c=$(c);var b={duration:0.2},a=$(this.getSubFolderId(c.id));if(a&&(d=="tog"||(d=="exp"&&!a.visible())||(d=="col"&&a.visible()))){if(c.descendantOf("specialfolders")){b.afterFinish=this._sizeFolderlist}c.firstDescendant().writeAttribute({className:a.visible()?"exp":"col"});if(a.visible()){Effect.BlindUp(a,b)}else{Effect.BlindDown(a,b)}}},createFolder:function(c){var b,f,i,g,h,e=this.getFolderId(c.m),a=decodeURIComponent(c.m),d=this.getSubFolderId(e),j=$(d);i=new Element("LI",{className:"folder",id:e,l:c.l,mbox:a,ftype:(c.v?(c.co?"vcontainer":"virtual"):(c.co?"container":(c.s?"special":"folder")))});b=new Element("DIV",{className:c.cl||"base",id:e+"_div"});if(c.i){b.update(c.i)}if(c.ch){b.writeAttribute({className:"exp"}).observe("mouseover",this.bcache.get("mo_folder")||this.bcache.set("mo_folder",function(k){k=k.element();if(DragDrop.Drags.drag&&k.hasClassName("exp")){this._toggleSubFolder(k.up(),"exp")}}.bindAsEventListener(this)))}i.insert(b).insert(new Element("A",{id:e+"_label",title:c.l}).insert(c.l));if(j){if(j.insert({before:i}).visible()){b.removeClassName("exp").addClassName("col")}}else{if(c.s){h=$("specialfolders")}else{h=$(this.getSubFolderId(this.getFolderId(c.pa)));h=(h)?h.down("UL"):$("normalfolders")}g=a.toLowerCase();f=h.childElements().find(function(k){var l=k.readAttribute("mbox");return l&&(!c.s||l!="INBOX")&&(g<l.toLowerCase())});if(f){f.insert({before:i})}else{h.insert(i)}if(c.ch){i.insert({after:new Element("LI",{className:"subfolders",id:d}).insert(new Element("UL")).hide()})}}if(!c.v){new Drop(i,this._folderDropConfig)}if(c.po){i.writeAttribute("u","");this.setFolderLabel(a,c.u)}},deleteFolder:function(a){var b=decodeURIComponent(a),c;if(this.folder==b){this.go("folder:INBOX")}c=this.getFolderId(a);this.deleteFolderElt(c,true);Effect.Fade(c,{afterFinish:function(d){try{DimpCore.addGC(d.element.remove())}catch(f){DimpCore.debug("deleteFolder",f)}}})},changeFolder:function(b){var d=this.getFolderId(b.m),a=$(d+"_div"),c=a&&a.hasClassName("col");this.deleteFolderElt(d,!b.ch);if(b.co&&this.folder==b.m){this.go("folder:INBOX")}$(d).remove();this.createFolder(b);if(b.ch&&c){a.removeClassName("exp").addClassName("col")}},deleteFolderElt:function(d,b){var c=$(d),a;DimpCore.addGC($(c,d+"_div",d+"_label"));if(b){a=$(this.getSubFolderId(d));if(a){a.remove()}}[DragDrop.Drags.get_drag(d),DragDrop.Drops.get_drop(d)].compact().invoke("destroy");DimpCore.removeMouseEvents(c);delete this.mo_sidebar[d];if(this.viewport){this.viewport.deleteView(d)}},_sizeFolderlist:function(){var a=$("normalfolders");a.setStyle({height:(document.viewport.getHeight()-a.cumulativeOffset()[1]-10)+"px"})},flag:function(f,d,e){var c,b,h,g=[],a=1;if(d){if(Object.isUndefined(e)){h=this.viewport.createSelection("dataob",d)}else{h=this.viewport.getViewportSelection().search({imapuid:{equal:[d]},view:{equal:[e]}});if(!h.size()&&e!=this.folder){h=this.viewport.getViewportSelection(e).search({imapuid:{equal:[d]}})}}}else{h=this.viewport.getSelected()}switch(f){case"allUnseen":case"allSeen":DimpCore.doAction((f=="allUnseen")?"MarkFolderUnseen":"MarkFolderSeen",{folder:e},null,this.bcache.get("flagAC")||this.bcache.set("flagAC",this._flagAllCallback.bind(this)));if(e==this.folder){this.viewport.updateFlag(this.createSelection("rownum",$A($R(1,this.viewport.getMetaData("total_rows")))),"unseen",f=="allUnseen")}break;case"deleted":case"undeleted":case"spam":case"ham":case"blacklist":case"whitelist":if(!h.size()){break}if(f=="deleted"){h=h.search({isdel:{not:[true]}});if(!h.size()){break}h.set({isdel:true})}b=this.viewport.addRequestParams({});if(f=="deleted"||f=="undeleted"){this.viewport.updateFlag(h,"deletedmsg",f=="deleted")}if(f=="undeleted"){DimpCore.doAction("UndeleteMessage",b,h)}else{c={deleted:"DeleteMessage",spam:"ReportSpam",ham:"ReportHam",blacklist:"Blacklist",whitelist:"Whitelist"};DimpCore.doAction(c[f],b,h,this.bcache.get("deleteC")||this.bcache.set("deleteC",this._deleteCallback.bind(this)),{asynchronous:!(d&&e)});if(f=="spam"||f=="ham"){this.msgListLoading(true)}}break;case"unseen":case"seen":if(!h.size()){break}b={folder:this.folder,messageFlag:"-\\seen"};if(f=="seen"){a=0;b.messageFlag="\\seen"}g=h.get("dataob");if(g.size()){g.each(function(i){this.updateUnseenUID(i,a)},this);DimpCore.doAction("MarkMessage",b,this.viewport.createSelection("dataob",g))}break;case"flagged":case"clear":if(!h.size()){break}b={folder:this.folder,messageFlag:((f=="flagged")?"\\flagged":"-\\flagged")};this.viewport.updateFlag(h,"flagged",f=="flagged");DimpCore.doAction("MarkMessage",b,h);break;case"answered":this.viewport.updateFlag(h,"answered",true);this.viewport.updateFlag(h,"flagged",false);break}},purgeDeleted:function(){DimpCore.doAction("PurgeDeleted",this.viewport.addRequestParams({}),null,this.bcache.get("deleteC")||this.bcache.set("deleteC",this._deleteCallback.bind(this)))},modifyPollFolder:function(a,b){DimpCore.doAction("ModifyPollFolder",{folder:a,add:(b)?1:0},null,this.bcache.get("modifyPFC")||this.bcache.set("modifyPFC",this._modifyPollFolderCallback.bind(this)))},_modifyPollFolderCallback:function(a){a=a.response;var b=a.folder,d,c={response:{poll:{}}};d=$(this.getFolderId(b));if(a.add){c.response.poll[b]=a.poll.u;d.writeAttribute("u",0)}else{c.response.poll[b]=0}this._pollFoldersCallback(c);if(!a.add){d.removeAttribute("u")}},msgListLoading:function(a){var b;if(this.fl_visible!=a){this.fl_visible=a;if(a){b=$("msgList").positionedOffset();$("folderLoading").setStyle({position:"absolute",top:(b.top+10)+"px",left:(b.left+10)+"px"});Effect.Appear("folderLoading",{duration:0.2});$(document.body).setStyle({cursor:"progress"})}else{Effect.Fade("folderLoading",{duration:0.2});$(document.body).setStyle({cursor:"default"})}}},isSubfolder:function(b,d){var a=$(this.getSubFolderId(b.readAttribute("id")));return a&&d.descendantOf(a)},_onLoad:function(){var b,c=DimpCore.clickObserveHandler,a=DimpCore.DMenu;if(Horde.dhtmlHistory.initialize()){Horde.dhtmlHistory.addListener(this.go.bind(this))}if(!Horde.dhtmlHistory.getCurrentLocation()){if(DIMP.conf.login_view=="inbox"){this.go("folder:INBOX")}else{this.go("portal");if(DIMP.conf.background_inbox){this.loadFolder("INBOX",true)}}}this._setFilterText(true);DimpCore.addPopdown("button_reply","reply");a.disable("button_reply_img",true,true);DimpCore.addPopdown("button_forward","forward");a.disable("button_forward_img",true,true);DimpCore.addPopdown("button_other","otheractions");b=$("logo");if(b.visible()){c({d:b.down("a"),f:this.go.bind(this,"portal")})}c({d:$("composelink"),f:DimpCore.compose.bind(DimpCore,"new")});c({d:$("checkmaillink"),f:this.pollFolders.bind(this)});["portal","options"].each(function(e){var f=$("app"+e);if(f){c({d:f,f:this.go.bind(this,e)})}},this);b=$("applogout");if(b){c({d:b,f:DimpCore.logout.bind(DimpCore)})}b=$("applicationfolders");if(b){b.select("li.custom a").each(function(d){c({d:d,f:this.go.bind(this,"app:"+d.readAttribute("app"))})},this)}c({d:$("newfolder"),f:this.createBaseFolder.bind(this)});new Drop("dropbase",this._folderDropConfig);b=$("hometab");if(b){c({d:b,f:this.go.bind(this,"portal")})}$("tabbar").select("a.applicationtab").each(function(d){c({d:d,f:this.go.bind(this,"app:"+d.readAttribute("app"))})},this);c({d:$("button_reply"),f:this.composeMailbox.bind(this,"reply"),ns:true});c({d:$("button_forward"),f:this.composeMailbox.bind(this,DIMP.conf.forward_default),ns:true});["spam","ham","deleted"].each(function(e){var f=$("button_"+e);if(f){c({d:f,f:this.flag.bind(this,e)})}},this);c({d:$("button_compose").down("A"),f:DimpCore.compose.bind(DimpCore,"new")});c({d:$("button_other"),f:function(d){a.trigger(d.findElement("A").next(),true)},p:true});c({d:$("qoptions").down(".qclose a"),f:this.searchfilterClear.bind(this,false)});["all","current"].each(function(e){var f=$("sf_"+e);if(f){c({d:f,f:this.updateSearchfilter.bind(this,e,"folder")})}},this);["msgall","from","to","subject"].each(function(d){c({d:$("sf_"+d),f:this.updateSearchfilter.bind(this,d,"msg")})},this);c({d:$("msglistHeader"),f:this.sort.bind(this),p:true});c({d:$("ctx_folder_create"),f:function(){this.createSubFolder(a.element())}.bind(this),ns:true});c({d:$("ctx_folder_rename"),f:function(){this.renameFolder(a.element())}.bind(this),ns:true});c({d:$("ctx_folder_empty"),f:function(){var d=a.element().readAttribute("mbox");a.close(true);if(window.confirm(DIMP.text.empty_folder)){DimpCore.doAction("EmptyFolder",{folder:d},null,this._emptyFolderCallback.bind(this))}}.bind(this),ns:true});c({d:$("ctx_folder_delete"),f:function(){var d=a.element().readAttribute("mbox");a.close(true);if(window.confirm(DIMP.text.delete_folder)){DimpCore.doAction("DeleteFolder",{folder:d},null,this.bcache.get("folderC")||this.bcache.set("folderC",this._folderCallback.bind(this)))}}.bind(this),ns:true});["ctx_folder_seen","ctx_folder_unseen"].each(function(d){c({d:$(d),f:function(e){this.flag(e,null,a.element().readAttribute("mbox"))}.bind(this,d=="ctx_folder_seen"?"allSeen":"allUnseen"),ns:true})},this);["ctx_folder_poll","ctx_folder_nopoll"].each(function(d){c({d:$(d),f:function(e){this.modifyPollFolder(a.element().readAttribute("mbox"),e)}.bind(this,d=="ctx_folder_poll"),ns:true})},this);c({d:$("ctx_container_create"),f:function(){this.createSubFolder(a.element())}.bind(this),ns:true});c({d:$("ctx_container_rename"),f:function(){this.renameFolder(a.element())}.bind(this),ns:true});["reply","reply_all","reply_list","forward_all","forward_body","forward_attachments"].each(function(d){c({d:$("ctx_message_"+d),f:this.composeMailbox.bind(this,d),ns:true})},this);["seen","unseen","flagged","clear","spam","ham","blacklist","whitelist","deleted","undeleted"].each(function(e){var f=$("ctx_message_"+e);if(f){c({d:f,f:this.flag.bind(this,e),ns:true})}},this);c({d:$("ctx_draft_resume"),f:this.composeMailbox.bind(this,"resume")});["flagged","clear","deleted","undeleted"].each(function(e){var f=$("ctx_draft_"+e);if(f){c({d:f,f:this.flag.bind(this,e),ns:true})}},this);["reply","reply_all","reply_list"].each(function(d){c({d:$("ctx_reply_"+d),f:this.composeMailbox.bind(this,d),ns:true})},this);["forward_all","forward_body","forward_attachments"].each(function(d){c({d:$("ctx_forward_"+d),f:this.composeMailbox.bind(this,d),ns:true})},this);c({d:$("previewtoggle"),f:this.togglePreviewPane.bind(this),ns:true});["seen","unseen","flagged","clear","blacklist","whitelist","undeleted"].each(function(e){var f=$("oa_"+e);if(f){c({d:f,f:this.flag.bind(this,e),ns:true})}},this);c({d:$("oa_selectall"),f:this.selectAll.bind(this),ns:true});b=$("oa_purge_deleted");if(b){c({d:b,f:this.purgeDeleted.bind(this),ns:true})}$("toggleHeaders").select("A").each(function(d){c({d:d,f:function(){[d.up().select("A"),$("msgHeadersColl","msgHeaders")].flatten().invoke("toggle")},ns:true})});$("msg_newwin","msg_newwin_options").compact().each(function(d){c({d:d,f:function(){this.msgWindow(this.viewport.getViewportSelection().search({imapuid:{equal:[DIMP.conf.msg_index]},view:{equal:[DIMP.conf.msg_folder]}}).get("dataob").first())}.bind(this)})},this);DimpCore.messageOnLoad();this._resizeIE6()},_resizeIE6:function(){if(DIMP.conf.is_ie6){var a=parseInt($("sidebarPanel").getStyle("width"),10),b=document.viewport.getWidth()-a-30;$("normalfolders").setStyle({width:a+"px"});$("dimpmain").setStyle({width:b+"px"});$("msglist").setStyle({width:(b-5)+"px"});$("msgBody").setStyle({width:(b-25)+"px"});a=$("dimpmain_portal").down("IFRAME");if(a){this._resizeIE6Iframe(a)}}},_resizeIE6Iframe:function(a){if(DIMP.conf.is_ie6){a.setStyle({width:$("dimpmain").getStyle("width"),height:(document.viewport.getHeight()-20)+"px"})}}};DimpBase._msgDragConfig={scroll:"normalfolders",threshold:5,caption:DimpBase._dragCaption.bind(DimpBase),onStart:function(c,b){var a={right:b.isRightClick()},f=c.element.id;c.selectIfNoDrag=false;if(!a.right&&(b.ctrlKey||b.metaKey)){this.msgSelect(f,$H({ctrl:true}).merge(a).toObject())}else{if(b.shiftKey){this.msgSelect(f,$H({shift:true}).merge(a).toObject())}else{if(this.isSelected("domid",f)){if(!a.right&&this.selectedCount()){c.selectIfNoDrag=true}}else{this.msgSelect(f,a)}}}}.bind(DimpBase),onEnd:function(b,a){if(b.selectIfNoDrag&&!b.wasDragged){this.msgSelect(b.element.id,{right:a.isRightClick()})}}.bind(DimpBase)};DimpBase._folderDragConfig={ghosting:true,offset:{x:5,y:5},scroll:"normalfolders",threshold:5,onDrag:function(b,a){if(!b.wasDragged){$("newfolder").hide();$("dropbase").show();b.ghost.removeClassName("on")}},onEnd:function(b,a){if(b.wasDragged){$("newfolder").show();$("dropbase").hide()}}};DimpBase._folderDropConfig={hoverclass:"dragdrop",caption:function(f,g,h){var a,i=g.readAttribute("l"),c=f.readAttribute("ftype"),b=f.readAttribute("l");if(f==$("dropbase")){return DIMP.text.moveto.replace(/%s/,i).replace(/%s/,DIMP.text.baselevel)}else{a=(h.ctrlKey)?DIMP.text.copyto:DIMP.text.moveto;if(g.hasClassName("folder")){return(c!="special"&&!this.isSubfolder(g,f))?a.replace(/%s/,i).replace(/%s/,b):""}else{return c!="container"?a.replace(/%s/,this._dragCaption()).replace(/%s/,b):""}}}.bind(DimpBase),onDrop:DimpBase._folderDropHandler.bind(DimpBase)};document.observe("dom:loaded",function(){$("dimpLoading").hide();$("dimpPage").show();DimpCore.doAction("ListFolders",{},null,DimpBase._folderLoadCallback.bind(DimpBase));DimpBase._onLoad();if(!DIMP.conf.search_all){DimpBase.sfiltersfolder.unset("sf_all")}DimpBase.setPollFolders();document.observe("keydown",DimpBase._keydownHandler.bind(DimpBase));Event.observe(window,"resize",DimpBase._onResize.bind(DimpBase));if(DIMP.conf.is_ie6){document.observe("selectstart",Event.stop);$("dimpbarActions","serviceActions","applicationfolders").compact().invoke("select","LI").flatten().compact().each(function(a){a.observe("mouseover",a.addClassName.curry("over")).observe("mouseout",a.removeClassName.curry("over"))})}});DimpCore.onDoActionComplete=function(a){if(DimpBase.viewport&&a.response.viewport){DimpBase.viewport.ajaxResponse(a.response.viewport)}};DimpCore.addMouseEvents=DimpCore.addMouseEvents.wrap(DimpBase._addMouseEvents.bind(DimpBase));DimpCore.removeMouseEvents=DimpCore.removeMouseEvents.wrap(DimpBase._removeMouseEvents.bind(DimpBase));
\ No newline at end of file
+var DimpBase={bcache:$H(),cacheids:{},lastrow:-1,mo_sidebar:{},pivotrow:-1,ppcache:{},ppfifo:[],showPreview:DIMP.conf.preview_pref,sfiltersfolder:$H({sf_all:"all",sf_current:"current"}),sfilters:$H({sf_msgall:"msgall",sf_from:"from",sf_to:"to",sf_subject:"subject"}),_select:function(c,a){var b=c.get("rownum");if(b.size()==1){this.lastrow=this.pivotrow=b.first()}this.toggleButtons();if($("previewPane").visible()){if(a.right){this.clearPreviewPane()}else{if(a.delay){(this.bcache.get("initPP")||this.bcache.set("initPP",this.initPreviewPane.bind(this))).delay(a.delay)}else{this.initPreviewPane()}}}},_deselect:function(d,b){var c=this.viewport.getSelected(),a=c.size();if(!a){this.lastrow=this.pivotrow=-1}this.toggleButtons();if(b.right||!a){this.clearPreviewPane()}else{if((a==1)&&$("previewPane").visible()){this.loadPreview(c.get("dataob").first())}}},msgSelect:function(g,c){var b,e=this.viewport.createSelection("domid",g),a=e.get("rownum").first(),d=this.isSelected("domid",g),f=this.selectedCount();this.lastrow=a;$("msgList_filter").blur();if(c.shift){if(f){if(!d||f!=1){b=[a,this.pivotrow];this.viewport.select($A($R(b.min(),b.max())),{range:true})}return}}else{if(c.ctrl){this.pivotrow=a;if(d){this.viewport.deselect(e,{right:c.right});return}else{if(c.right||f){this.viewport.select(e,{add:true,right:c.right});return}}}}this.viewport.select(e,{right:c.right})},selectAll:function(){this.viewport.select($A($R(1,this.viewport.getMetaData("total_rows"))),{range:true})},isSelected:function(b,a){return this.viewport.getSelected().contains(b,a)},selectedCount:function(){return(this.viewport)?this.viewport.getSelected().size():0},resetSelected:function(){if(this.viewport){this.viewport.deselect(this.viewport.getSelected(),{clearall:true})}this.toggleButtons();this.clearPreviewPane()},moveSelected:function(a,g){var e,d,f,b,c;if(g){if(!this.viewport.getMetaData("total_rows")){return}e=a}else{if(a==0){return}c=this.viewport.getSelected();switch(c.size()){case 0:e=this.viewport.currentOffset()+1;break;case 1:d=c.get("dataob").first();e=d.rownum+a;break;default:c=c.get("rownum");e=(a>0?c.max():c.min())+a;break}e=(a>0)?Math.min(e,this.viewport.getMetaData("total_rows")):Math.max(e,1)}f=this.viewport.createSelection("rownum",e);if(f.size()){b=f.get("dataob").first();if(!d||b.imapuid!=d.imapuid){this.viewport.scrollTo(b.rownum);this.viewport.select(f,{delay:0.3})}}else{this.offset=e;this.viewport.requestContentRefresh(e-1)}},go:function(e,b){var d,a,c;if(e.startsWith("compose:")){return}if(e.startsWith("msg:")){c=e.indexOf(":",4);a=e.substring(4,c);this.uid=e.substring(c+1);e="folder:"+a}if(e.startsWith("folder:")){a=e.substring(7);if(this.folder!=a||!$("dimpmain_folder").visible()){this.highlightSidebar(this.getFolderId(a));if(!$("dimpmain_folder").visible()){$("dimpmain_portal").hide();$("dimpmain_folder").show()}if(!Object.isUndefined(this.folder)){this._addHistory(e)}}this.loadFolder(a);return}this.folder=null;$("dimpmain_folder").hide();$("dimpmain_portal").update(DIMP.text.loading).show();if(e.startsWith("app:")){d=e.substr(4);if(d=="imp"){this.go("folder:INBOX");return}this.highlightSidebar("app"+d);this._addHistory(e,b);if(b){this.iframeContent(e,b)}else{if(DIMP.conf.app_urls[d]){this.iframeContent(e,DIMP.conf.app_urls[d])}}return}switch(e){case"portal":this.highlightSidebar("appportal");this._addHistory(e);DimpCore.setTitle(DIMP.text.portal);DimpCore.doAction("ShowPortal",{},null,this.bcache.get("portalC")||this.bcache.set("portalC",this._portalCallback.bind(this)));break;case"options":this.highlightSidebar("appoptions");this._addHistory(e);DimpCore.setTitle(DIMP.text.prefs);this.iframeContent(e,DIMP.conf.prefs_url);break}},_addHistory:function(b,a){if(Horde.dhtmlHistory.getCurrentLocation()!=b){Horde.dhtmlHistory.add(b,a)}},highlightSidebar:function(b){if($("foldersLoading").visible()){this.highlightSidebar.bind(this,b).defer();return}$("sidebarPanel").select(".on").invoke("removeClassName","on");var a=$(b);if(!a){return}if(!a.match("LI")){a=a.up();if(!a){return}}a.addClassName("on");a.ancestors().find(function(c){if(c.hasClassName("subfolders")){this._toggleSubFolder(c.id.substring(3),"exp")}else{return(c.id=="foldersSidebar")}},this)},iframeContent:function(b,d){if(b===null){b=d}var a=$("dimpmain_portal"),c;if(!a){DimpCore.showNotifications([{type:"horde.error",message:"Bad portal!"}]);return}c=new Element("IFRAME",{id:"iframe"+b,className:"iframe",frameBorder:0,src:d});this._resizeIE6Iframe(c);if(b=="options"){c.observe("load",function(){$("iframeoptions").contentWindow.document.getElementById("menu").style.display="none"})}a.insert(c)},msgWindow:function(b){this.updateUnseenUID(b,0);var a=DIMP.conf.message_url;a+=(a.include("?")?"&":"?")+$H({folder:b.view,uid:b.imapuid}).toQueryString();DimpCore.popupWindow(a,"msgview"+b.view+b.imapuid)},composeMailbox:function(a){var b=this.viewport.getSelected();if(!b.size()){return}b.get("dataob").each(function(c){DimpCore.compose(a,{folder:c.view,uid:c.imapuid})})},loadFolder:function(b,a){if(!this.viewport){this._createViewPort()}if(!a){this.resetSelected();if(this.folder==b){this.searchfilterClear(false);return}this.searchfilterClear(true);$("folderName").update(DIMP.text.loading);$("msgHeader").update();this.folderswitch=true;this.folder=b}this.viewport.loadView(b,{folder:b},this.uid?{imapuid:this.uid,view:b}:null,a)},_createViewPort:function(){var b=$("msgList_filter"),a=this.setMessageListTitle.bind(this);this.viewport=new ViewPort({content_container:"msgList",empty_container:"msgList_empty",error_container:"msgList_error",fetch_action:"ListMessages",template:this.message_list_template,buffer_pages:DIMP.conf.buffer_pages,limit_factor:DIMP.conf.limit_factor,viewport_wait:DIMP.conf.viewport_wait,show_split_pane:this.showPreview,split_pane:"previewPane",splitbar:"splitBar",content_class:"msglist",row_class:"msgRow",selected_class:"selectedRow",ajaxRequest:DimpCore.doAction.bind(DimpCore),norows:true,onScrollIdle:a,onSlide:a,onViewChange:function(){DimpCore.addGC(this.viewport.visibleRows())}.bind(this),onContent:function(f){var e,d,c=((this.viewport.getMetaData("sortby")==DIMP.conf.sortthread)&&this.viewport.getMetaData("thread"));if(this.viewport.isFiltering()){d=this.sfilters.get(this._getSearchfilterField()).capitalize();e=new RegExp("("+$F("msgList_filter")+")","i")}f.get("dataob").each(function(k){var h,i,g,j=$(k.domid);if(c&&c[k.imapuid]){h=j.down(".msgSubject");i=h.cloneNode(false);g=c[k.imapuid];$R(0,g.length,true).each(function(l){i.insert($($("thread_img_"+g.charAt(l)).cloneNode(false)).writeAttribute("id",""))});h.replace(i.insert(h.getText().escapeHTML()))}if(k.atc){j.down(".msgSize").insert({top:$($("atc_img_"+k.atc).cloneNode(false)).writeAttribute("id","")})}DimpCore.addMouseEvents({id:k.domid,type:k.menutype});if(d=="From"||d=="Subject"){h=j.down(".msg"+d);h.update(h.getText().escapeHTML().gsub(e,'<span class="searchMatch">#{1}</span>'))}},this);this.setMessageListTitle()}.bind(this),onComplete:function(){var e,c,d=this.viewport.getMetaData("label");if(this.uid){e=this.viewport.getViewportSelection().search({imapuid:{equal:[this.uid]},view:{equal:[this.folder]}});if(e.size()){this.viewport.scrollTo(e.get("rownum").first());this.viewport.select(e)}}else{if(this.offset){this.viewport.select(this.viewport.createSelection("rownum",this.offset))}}this.offset=this.uid=null;d=this.viewport.getMetaData("label");if(d){$("folderName").update(d)}if(this.folderswitch){this.folderswitch=false;if(this.folder==DIMP.conf.spam_folder){if(!DIMP.conf.spam_spamfolder&&DimpCore.buttons.indexOf("button_spam")!=-1){[$("button_spam").up(),$("ctx_message_spam")].invoke("hide")}if(DimpCore.buttons.indexOf("button_ham")!=-1){[$("button_ham").up(),$("ctx_message_ham")].invoke("show")}}else{if(DimpCore.buttons.indexOf("button_spam")!=-1){[$("button_spam").up(),$("ctx_message_spam")].invoke("show")}if(DimpCore.buttons.indexOf("button_ham")!=-1){if(DIMP.conf.ham_spamfolder){[$("button_ham").up(),$("ctx_message_ham")].invoke("hide")}else{[$("button_ham").up(),$("ctx_message_ham")].invoke("show")}}}}else{if(this.filtertoggle){if(this.filtertoggle==1&&this.viewport.getMetaData("sortby")==DIMP.conf.sortthread){c=DIMP.conf.sortdate}this.filtertoggle=0}}this.setSortColumns(c);if(this.viewport.isFiltering()){this.resetSelected()}else{this.setFolderLabel(this.folder,this.viewport.getMetaData("unseen")||0)}this.updateTitle()}.bind(this),onFetch:this.msgListLoading.bind(this,true),onFetchUpdate:function(c){delete this.cacheids[c]}.bind(this),onEndFetch:this.msgListLoading.bind(this,false),onWait:function(){if($("dimpmain_folder").visible()){DimpCore.showNotifications([{type:"horde.warning",message:DIMP.text.listmsg_wait}])}},onFail:function(){if($("dimpmain_folder").visible()){DimpCore.showNotifications([{type:"horde.error",message:DIMP.text.listmsg_timeout}])}this.msgListLoading(false)}.bind(this),onFirstContent:function(){this.clearPreviewPane();$("msgList").observe("dblclick",this._handleMsgListDblclick.bindAsEventListener(this))}.bind(this),onClearRows:function(c){c.each(function(d){var e=$(d).down("div.msCheck");if(e){DimpCore.addGC(e)}if(d.id){DimpCore.removeMouseEvents(d)}})},onBeforeResize:function(){var c=this.viewport.getSelected();this.isvisible=(c.size()==1)&&(this.viewport.isVisible(c.get("rownum").first())==0)}.bind(this),onAfterResize:function(){if(this.isvisible){this.viewport.scrollTo(this.viewport.getSelected().get("rownum").first())}}.bind(this),onCachedList:function(e){var c,d;if(!this.cacheids[e]){c=this.viewport.getViewportSelection(e).get("uid");if(c.size()){if(this.viewport.getMetaData("search",e)){c=c.toJSON()}else{d={};d[e]=c;c=DimpCore.toRangeString(d)}}else{c=""}this.cacheids[e]=c}return this.cacheids[e]}.bind(this),selectCallback:this._select.bind(this),deselectCallback:this._deselect.bind(this)});if(!this.showPreview){$("msgList").addClassName("msglistNoPreview")}this.viewport.addFilter("ListMessages",this._addSearchfilterParams.bind(this));b.observe("keyup",this._searchfilterOnKeyup.bind(this));b.observe("focus",this._searchfilterOnFocus.bind(this));b.observe("blur",this._searchfilterOnBlur.bind(this));b.addClassName("msgFilterDefault")},_addMouseEvents:function(b,c){var a;switch(c.type){case"draft":case"message":new Drag(c.id,this._msgDragConfig);a=$(c.id).down("div.msCheck");if(a.visible()){a.observe("mousedown",this.bcache.get("handleMLC")||this.bcache.set("handleMLC",this._handleMsgListCheckbox.bindAsEventListener(this)));a.observe("contextmenu",Event.stop)}break;case"container":case"folder":new Drag(c.id,this._folderDragConfig);break;case"special":c.type="folder";break;case"vcontainer":case"virtual":$(c.id).observe("contextmenu",Event.stop);break}c.onShow=this.bcache.get("onMS")||this.bcache.set("onMS",this._onMenuShow.bind(this));b(c)},_removeMouseEvents:function(b,a){var c,e=$(a).readAttribute("id");if(e&&(c=DragDrop.Drags.get_drag(e))){c.destroy()}b(a)},_onMenuShow:function(a){var e,c,b,d;switch(a.ctx){case"ctx_folder":e=$("ctx_folder_create","ctx_folder_rename","ctx_folder_delete");c=DimpCore.DMenu.element();if(c.readAttribute("mbox")=="INBOX"){e.invoke("hide")}else{if(DIMP.conf.fixed_folders.indexOf(c.readAttribute("mbox"))!=-1){e.shift();e.invoke("hide")}else{e.invoke("show")}}if(c.hasAttribute("u")){$("ctx_folder_poll").hide();$("ctx_folder_nopoll").show()}else{$("ctx_folder_poll").show();$("ctx_folder_nopoll").hide()}break;case"ctx_message":[$("ctx_message_reply_list")].invoke(this.viewport.createSelection("domid",a.id).get("dataob").first().listmsg?"show":"hide");break;case"ctx_reply":d=this.viewport.getSelected();if(d.size()==1){b=d.get("dataob").first()}[$("ctx_reply_reply_list")].invoke(b&&b.listmsg?"show":"hide");break;case"ctx_otheractions":$("oa_seen","oa_unseen","oa_flagged","oa_clear","oa_sep1","oa_blacklist","oa_whitelist","oa_sep2","oa_undeleted").compact().invoke(this.viewport.getSelected().size()?"show":"hide");break}return true},_onResize:function(b,a){if(this.viewport){this.viewport.onResize(b,a)}this._resizeIE6()},_handleMsgListDblclick:function(b){var a=this._getMsgRow(b),c;if(!a){return}c=this.viewport.createSelection("domid",a.id).get("dataob").first();c.draft?DimpCore.compose("resume",{folder:c.view,uid:c.imapuid}):this.msgWindow(c);b.stop()},_handleMsgListCheckbox:function(b){var a=this._getMsgRow(b);if(!a){return}this.msgSelect(a.readAttribute("id"),{ctrl:true,right:true});b.stop()},_getMsgRow:function(a){a=a.element();if(a&&!a.hasClassName("msgRow")){a=a.up(".msgRow")}return a},updateTitle:function(){var b,a,c;if(this.viewport.isFiltering()){a=DIMP.text.search+" :: "+this.viewport.getMetaData("total_rows")+" "+DIMP.text.resfound}else{b=$(this.getFolderId(this.folder));if(b){c=b.readAttribute("u");a=b.readAttribute("l");if(c>0){a+=" ("+c+")"}}else{a=this.viewport.getMetaData("label")}}DimpCore.setTitle(a)},sort:function(d){if(this.viewport.getMetaData("sortlimit")){return}var b,c,a=d.element();if(!a.hasAttribute("sortby")){a=a.up("[sortby]");if(!a){return}}c=parseInt(a.readAttribute("sortby"),10);if(c==this.viewport.getMetaData("sortby")){b={sortdir:(this.viewport.getMetaData("sortdir")?0:1)};this.viewport.setMetaData({sortdir:b.sortdir})}else{b={sortby:c};this.viewport.setMetaData({sortby:b.sortby})}this.setSortColumns(c);this.viewport.reload(b)},setSortColumns:function(c){var b,a=$("msglistHeader");if(Object.isUndefined(c)){c=this.viewport.getMetaData("sortby")}b=a.down("small[sortby="+c+"]");if(b&&b.up().visible()){b.up(1).childElements().invoke("toggle")}b=a.down("div.msgFrom a");if((this.viewport.isFiltering()&&this.fspecial)||this.viewport.getMetaData("special")){b.hide().next().show()}else{b.show().next().hide()}b=a.down("div.msgSubject a");if(this.viewport.isFiltering()||this.viewport.getMetaData("nothread")||this.viewport.getMetaData("sortlimit")){b.show().next().hide();b.down().hide()}else{b.down().show()}a.childElements().invoke("removeClassName","sortup").invoke("removeClassName","sortdown");b=a.down("div a[sortby="+c+"]");if(b){b.up().addClassName(this.viewport.getMetaData("sortdir")?"sortup":"sortdown")}},togglePreviewPane:function(){this.showPreview=!this.showPreview;$("previewtoggle").setText(this.showPreview?DIMP.text.hide_preview:DIMP.text.show_preview);[$("msgList")].invoke(this.showPreview?"removeClassName":"addClassName","msglistNoPreview");new Ajax.Request(DimpCore.addSID(DIMP.conf.URI_PREFS),{parameters:{app:"imp",pref:"show_preview",value:this.showPreview?1:0}});this.viewport.showSplitPane(this.showPreview);if(this.showPreview){this.initPreviewPane()}},loadPreview:function(d,e){var a=$("previewPane"),b,c;if(!a.visible()){return}if(!e){if(this.pp&&this.pp.imapuid==d.imapuid&&this.pp.view==d.view){return}this.pp=d;c=d.imapuid+d.view;if(this.ppfifo.indexOf(c)!=-1){return this._loadPreviewCallback(this.ppcache[c])}}b=a.positionedOffset();$("msgLoading").setStyle({position:"absolute",top:(b.top+10)+"px",left:(b.left+10)+"px"}).show();DimpCore.doAction("ShowPreview",e||{},this.viewport.createSelection("dataob",this.pp),this.bcache.get("loadPC")||this.bcache.set("loadPC",this._loadPreviewCallback.bind(this)))},_loadPreviewCallback:function(resp){var ppuid,row,search,tmp,tmp2,pm=$("previewMsg"),r=resp.response,t=$("msgHeadersContent").down("THEAD");if(!r.error){search=this.viewport.getViewportSelection().search({imapuid:{equal:[r.index]},view:{equal:[r.folder]}});if(search.size()){row=search.get("dataob").first();this.updateUnseenUID(row,0)}}if(this.pp&&(this.pp.imapuid!=r.index||this.pp.view!=r.folder)){return}if(r.error||this.viewport.getSelected().size()!=1){if(r.error){DimpCore.showNotifications([{type:r.errortype,message:r.error}])}this.clearPreviewPane();return}ppuid=r.index+r.folder;this._expirePPCache([ppuid]);this.ppcache[ppuid]=resp;this.ppfifo.push(ppuid);DimpCore.removeAddressLinks(pm);DIMP.conf.msg_index=r.index;DIMP.conf.msg_folder=r.folder;tmp=pm.select(".subject");tmp.invoke("update",r.subject);switch(r.priority){case"high":case"low":tmp.invoke("insert",{top:$($(r.priority+"_priority_img").cloneNode(false)).writeAttribute("id",false)});break}$("msgHeadersColl").select(".date").invoke("update",r.minidate);$("msgHeaderDate").select(".date").invoke("update",r.fulldate);["from","to","cc"].each(function(a){if(r[a]){(a=="from"?pm.select("."+a):[t.down("."+a)]).each(function(elt){elt.replace(DimpCore.buildAddressLinks(r[a],elt.cloneNode(false)))})}[$("msgHeader"+a.capitalize())].invoke(r[a]?"show":"hide")});$("toggleHeaders").select(".attachmentImage").invoke(r.atc_label?"show":"hide");if(r.atc_label){tmp=$("msgAtc").show().down(".label");tmp2=$("partlist");tmp2.hide().previous().update(new Element("SPAN",{className:"atcLabel"}).insert(r.atc_label)).insert(r.atc_download);if(r.atc_list){$("partlist_col").show();$("partlist_exp").hide();tmp.down().hide().next().show();tmp2.update(r.atc_list)}else{tmp.down().show().next().hide()}}else{$("msgAtc").hide()}$("msgBody").down().update(r.msgtext);$("msgLoading","previewInfo").invoke("hide");$("previewPane").scrollTop=0;pm.show();if(r.js){eval(r.js.join(";"))}this._addHistory("msg:"+row.view+":"+row.imapuid)},initPreviewPane:function(){var a=this.viewport.getSelected();if(a.size()!=1){this.clearPreviewPane()}else{this.loadPreview(a.get("dataob").first())}},clearPreviewPane:function(){$("msgLoading","previewMsg").invoke("hide");$("previewInfo").show();this.pp=null},_expirePPCache:function(a){this.ppfifo=this.ppfifo.without(a);a.each(function(b){delete this.ppcache[b]},this);if(this.ppfifo.size()>20){delete this.ppcache[this.ppfifo.shift()]}},updateUnseenUID:function(b,e){var c,d,a;if(!b.bg){return false}a=b.bg.indexOf("unseen")!=-1;if((e&&a)||(!e&&!a)){return false}c=this.viewport.createSelection("dataob",b);d=parseInt($(this.getFolderId(b.view)).readAttribute("u"),10);if(e){this.viewport.updateFlag(c,"unseen",true);++d}else{this.viewport.updateFlag(c,"unseen",false);--d}this.updateUnseenStatus(b.view,d)},updateUnseenStatus:function(b,a){if(this.viewport){this.viewport.setMetaData({unseen:a},b)}this.setFolderLabel(b,a);if(this.folder==b){this.updateTitle()}},setMessageListTitle:function(){var b,a=this.viewport.getMetaData("total_rows");if(a>0){b=this.viewport.currentOffset();$("msgHeader").update(DIMP.text.messages+" "+(b+1)+" - "+(Math.min(b+this.viewport.getPageSize(),a))+" "+DIMP.text.of+" "+a)}else{$("msgHeader").update(DIMP.text.nomessages)}},setFolderLabel:function(b,c){var a,d=this.getFolderId(b);a=$(d);if(!a||!a.hasAttribute("u")){return}c=parseInt(c);a.writeAttribute("u",c);if(b=="INBOX"&&window.fluid){window.fluid.setDockBadge(c?c:"")}$(d+"_label").update((c>0)?new Element("STRONG").insert(a.readAttribute("l")).insert(" ").insert(new Element("SPAN",{className:"count",dir:"ltr"}).insert("("+c+")")):a.readAttribute("l"))},getFolderId:function(a){return"fld"+decodeURIComponent(a).replace(/_/g,"__").replace(/\W/g,"_")},getSubFolderId:function(a){return"sub"+a},pollFolders:function(){this.setPollFolders();var a={};if(this.folder&&$("dimpmain_folder").visible()){a=this.viewport.addRequestParams({})}$("checkmaillink").down("A").update("["+DIMP.text.check+"]");DimpCore.doAction("PollFolders",a,null,this.bcache.get("pollFC")||this.bcache.set("pollFC",this._pollFoldersCallback.bind(this)))},_pollFoldersCallback:function(b){var a;b=b.response;if(b.poll){a=this;$H(b.poll).each(function(c){a.updateUnseenStatus(c.key,c.value)})}if(b.quota){this._displayQuota(b.quota)}$("checkmaillink").down("A").update(DIMP.text.getmail)},_displayQuota:function(a){q=$("quota").cleanWhitespace();q.setText(a.m);q.down("SPAN.used IMG").writeAttribute({width:99-a.p})},setPollFolders:function(){if(DIMP.conf.refresh_time){if(this.pollPE){this.pollPE.stop()}this.pollPE=new PeriodicalExecuter(this.pollFolders.bind(this),DIMP.conf.refresh_time)}},_portalCallback:function(b){if(b.response.linkTags){var a=$$("HEAD").first();b.response.linkTags.each(function(c){var d=new Element("LINK",{type:"text/css",rel:"stylesheet",href:c.href});if(c.media){d.media=c.media}a.insert(d)})}$("dimpmain_portal").update(b.response.portal);$("dimpmain_portal").select("h1.header a").each(this.bcache.get("portalClkLink")||this.bcache.set("portalClkLink",function(c){c.observe("click",function(f,g){this.go("app:"+g.readAttribute("app"));f.stop()}.bindAsEventListener(this,c))}.bind(this)))},_searchfilterOnKeyup:function(){if(this.searchobserve){clearTimeout(this.searchobserve)}this.searchobserve=(this.bcache.get("searchfilterR")||this.bcache.set("searchfilterR",this.searchfilterRun.bind(this))).delay(0.5)},searchfilterRun:function(){if(!this.viewport.isFiltering()){this.filtertoggle=1;this.fspecial=this.viewport.getMetaData("special")}this.viewport.runFilter($F("msgList_filter"))},_searchfilterOnFocus:function(){var a=$("qoptions").up();if($("msgList_filter").hasClassName("msgFilterDefault")){this._setFilterText(false)}if(!a.visible()){$("sf_current").update(this.viewport.getMetaData("label"));this._setSearchfilterParams(this.viewport.getMetaData("special")?"to":"from","msg");this._setSearchfilterParams("current","folder");$(document.documentElement).setStyle({overflowY:"hidden"});Effect.SlideDown(a,{duration:0.5,afterFinish:function(){this._onResize(false,true);$(document.documentElement).setStyle({overflowY:"auto"})}.bind(this)})}},_searchfilterOnBlur:function(){if(!$F("msgList_filter")){this._setFilterText(true)}},searchfilterClear:function(a){var b=$("qoptions").up();if(!b.visible()){return}if(this.searchobserve){clearTimeout(this.searchobserve);this.searchobserve=null}this._setFilterText(true);Effect.SlideUp(b,{duration:0.5,afterFinish:this._onResize.bind(this,a)});this.filtertoggle=2;this.resetSelected();this.viewport.stopFilter(a)},_setFilterText:function(b){var a=$("msgList_filter");if(b){a.setValue(DIMP.text.search);a.addClassName("msgFilterDefault")}else{a.setValue("");a.removeClassName("msgFilterDefault")}},_setSearchfilterParams:function(d,a){var b=(a=="folder")?this.sfiltersfolder:this.sfilters;b.keys().each(function(c){$(c).writeAttribute("className",(d==b.get(c))?"qselected":"")})},updateSearchfilter:function(b,a){this._setSearchfilterParams(b,a);if($F("msgList_filter")){this.viewport.runFilter()}},_addSearchfilterParams:function(){var a=this.sfiltersfolder.keys().find(function(b){return $(b).hasClassName("qselected")});return{searchfolder:this.sfiltersfolder.get(a),searchmsg:this.sfilters.get(this._getSearchfilterField())}},_getSearchfilterField:function(){return this.sfilters.keys().find(function(a){return $(a).hasClassName("qselected")})},toggleButtons:function(){var a=(this.selectedCount()==0);DimpCore.buttons.each(function(c){var d=$(c);if(d){[d.up()].invoke(a?"addClassName":"removeClassName","disabled");DimpCore.DMenu.disable(c+"_img",true,a)}})},_folderDropHandler:function(c,d,i){var h,g,f,b=c.readAttribute("mbox"),a=c.readAttribute("ftype");if(d.hasClassName("folder")){h=(c==$("dropbase"));if(h||(a!="special"&&!this.isSubfolder(d,c))){DimpCore.doAction("RenameFolder",{old_name:d.readAttribute("mbox"),new_parent:h?"":b,new_name:d.readAttribute("l")},null,this.bcache.get("folderC")||this.bcache.set("folderC",this._folderCallback.bind(this)))}}else{if(a!="container"){g=this.viewport.getSelected();if(g.size()){f=g}else{if(d.readAttribute("mbox")!=b){f=this.viewport.createSelection("domid",d.id)}}if(f.size()){if(i.ctrlKey){DimpCore.doAction("CopyMessage",this.viewport.addRequestParams({tofld:b}),f,this.bcache.get("pollFC")||this.bcache.set("pollFC",this._pollFoldersCallback.bind(this)))}else{if(this.folder!=b){this.viewport.updateFlag(f,"deletedmsg",true);DimpCore.doAction("MoveMessage",this.viewport.addRequestParams({tofld:b}),f,this.bcache.get("deleteC")||this.bcache.set("deleteC",this._deleteCallback.bind(this)))}}}}}},_dragCaption:function(){var a=this.selectedCount();return a+" "+(a==1?DIMP.text.message:DIMP.text.messages)},_keydownHandler:function(f){if(!$("dimpmain_folder").visible()||f.findElement("FORM")||RedBox.overlayVisible()){return}var i,h,b,g,d,a=f.keyCode||f.charCode,c=this.viewport.getSelected();switch(a){case Event.KEY_DELETE:case Event.KEY_BACKSPACE:if(c.size()==1){b=c.get("dataob").first();if(f.shiftKey){this.moveSelected(b.rownum+((b.rownum==this.viewport.getMetaData("total_rows"))?-1:1),true)}this.flag("deleted",b)}else{this.flag("deleted")}f.stop();break;case Event.KEY_UP:case Event.KEY_DOWN:if(f.shiftKey&&this.lastrow!=-1){g=this.viewport.createSelection("rownum",this.lastrow+((a==Event.KEY_UP)?-1:1));if(g.size()){g=g.get("dataob").first();this.viewport.scrollTo(g.rownum);this.msgSelect(g.domid,{shift:true})}}else{this.moveSelected(a==Event.KEY_UP?-1:1)}f.stop();break;case Event.KEY_PAGEUP:case Event.KEY_PAGEDOWN:if(!f.ctrlKey&&!f.shiftKey&&!f.altKey&&!f.metaKey){h=this.viewport.getPageSize()-1;move=h*(a==Event.KEY_PAGEUP?-1:1);if(c.size()==1){i=this.viewport.currentOffset();d=c.get("rownum").first()-1;switch(a){case Event.KEY_PAGEUP:if(i!=d){move=i-d}break;case Event.KEY_PAGEDOWN:if((i+h)!=d){move=i+h-d}break}}this.moveSelected(move);f.stop()}break;case Event.KEY_HOME:case Event.KEY_END:this.moveSelected(a==Event.KEY_HOME?1:this.viewport.getMetaData("total_rows"),true);f.stop();break;case Event.KEY_RETURN:if(!f.element().match("input")){if(c.size()==1){this.msgWindow(c.get("dataob").first())}}f.stop();break;case 65:case 97:if(f.ctrlKey){this.selectAll();f.stop()}break}},renameFolder:function(a){if(Object.isUndefined(a)){return}a=$(a);var b=this._createFolderForm(function(c){this._folderAction(a,c,"rename");return false}.bindAsEventListener(this),DIMP.text.rename_prompt);b.down("input").setValue(a.readAttribute("l"))},createBaseFolder:function(){this._createFolderForm(function(a){this._folderAction("",a,"create");return false}.bindAsEventListener(this),DIMP.text.create_prompt)},createSubFolder:function(a){if(Object.isUndefined(a)){return false}this._createFolderForm(function(b){this._folderAction($(a),b,"createsub");return false}.bindAsEventListener(this),DIMP.text.createsub_prompt)},_createFolderForm:function(a,b){var c=new Element("FORM",{action:"#",id:"RB_folder"}).insert(new Element("P").insert(b)).insert(new Element("INPUT",{type:"text",size:15})).insert(new Element("INPUT",{type:"button",className:"button",value:DIMP.text.ok}).observe("click",a)).insert(new Element("INPUT",{type:"button",className:"button",value:DIMP.text.cancel}).observe("click",this.bcache.get("closeRB")||this.bcache.set("closeRB",this._closeRedBox.bind(this)))).observe("keydown",function(d){if((d.keyCode||d.charCode)==Event.KEY_RETURN){d.stop();a(d)}});RedBox.overlay=true;RedBox.onDisplay=Form.focusFirstElement.curry(c);RedBox.showHtml(c);return c},_closeRedBox:function(){var a=RedBox.getWindowContents();DimpCore.addGC([a,a.descendants()].flatten());RedBox.close()},_folderAction:function(b,d,h){this._closeRedBox();var c,g,f,a=d.findElement("form");f=$F(a.down("input"));if(f){switch(h){case"rename":if(b.readAttribute("l")!=f){c="RenameFolder";g={old_name:b.readAttribute("mbox"),new_parent:b.up().hasClassName("folderlist")?"":b.up(1).previous().readAttribute("mbox"),new_name:f}}break;case"create":case"createsub":c="CreateFolder";g={folder:f};if(h=="createsub"){g.parent=b.readAttribute("mbox")}break}if(c){DimpCore.doAction(c,g,null,this.bcache.get("folderC")||this.bcache.set("folderC",this._folderCallback.bind(this)))}}},_folderCallback:function(a){a=a.response;if(a.d){a.d.each(this.bcache.get("deleteFolder")||this.bcache.set("deleteFolder",this.deleteFolder.bind(this)))}if(a.c){a.c.each(this.bcache.get("changeFolder")||this.bcache.set("changeFolder",this.changeFolder.bind(this)))}if(a.a){a.a.each(this.bcache.get("createFolder")||this.bcache.set("createFolder",this.createFolder.bind(this)))}},_deleteCallback:function(c){var a=null,b=[],d;this.msgListLoading(false);this._pollFoldersCallback(c);c=c.response;if(!c.uids||c.folder!=this.folder){return}c.uids=DimpCore.parseRangeString(c.uids);d=this.viewport.getViewportSelection(this.folder);if(d.getBuffer().getMetaData("search")){$H(c.uids).each(function(e){e.value.each(function(f){b.push(f+e.key)})});a=this.viewport.getViewportSelection().search({vp_id:{equal:b}})}else{c.uids=c.uids[this.folder];c.uids.each(function(g,e){b.push(e+g)}.curry(this.folder));a=this.viewport.createSelection("uid",c.uids)}if(a.size()){if(c.remove){this.viewport.remove(a,{cacheid:c.cacheid,noupdate:c.viewport});this._expirePPCache(b)}else{this.viewport.updateFlag(a,"deletedmsg",true)}}},_emptyFolderCallback:function(a){if(a.response.mbox){if(this.folder==a.response.mbox){this.viewport.reload();this.clearPreviewPane()}this.setFolderLabel(a.response.mbox,0)}},_flagAllCallback:function(a){if(a.response.mbox){this.setFolderLabel(a.response.mbox,a.response.u)}},_folderLoadCallback:function(b){this._folderCallback(b);var d=$("specialfolders","normalfolders").compact(),c=$("normalfolders"),a=c.getStyle("max-height");d.invoke("observe","click",this._handleFolderMouseEvent.bindAsEventListener(this,"click"));d.invoke("observe","mouseover",this._handleFolderMouseEvent.bindAsEventListener(this,"over"));if(DIMP.conf.is_ie6){d.invoke("observe","mouseout",this._handleFolderMouseEvent.bindAsEventListener(this,"out"))}$("foldersLoading").hide();$("foldersSidebar").show();if(a!==null||(Prototype.Browser.IE&&Object.isUndefined(a)&&(c.getStyle("height")=="0px"))){this._sizeFolderlist();Event.observe(window,"resize",this._sizeFolderlist.bind(this))}if(b.response.quota){this._displayQuota(b.response.quota)}},_handleFolderMouseEvent:function(f,d){var c,b=f.element(),a=b.up(".folder")||b.up(".custom");if(!a){return}c=a.readAttribute("ftype");switch(d){case"over":if(DIMP.conf.is_ie6){a.addClassName("over")}if(c&&!this.mo_sidebar[a.id]){DimpCore.addMouseEvents({id:a.id,type:c});this.mo_sidebar[a.id]=1}break;case"out":a.removeClassName("over");break;case"click":if(b.hasClassName("exp")||b.hasClassName("col")){this._toggleSubFolder(a.id,"tog")}else{switch(c){case"container":case"vcontainer":f.stop();break;case"folder":case"special":case"virtual":f.stop();return this.go("folder:"+a.readAttribute("mbox"));break}}break}},_toggleSubFolder:function(c,d){c=$(c);var b={duration:0.2},a=$(this.getSubFolderId(c.id));if(a&&(d=="tog"||(d=="exp"&&!a.visible())||(d=="col"&&a.visible()))){if(c.descendantOf("specialfolders")){b.afterFinish=this._sizeFolderlist}c.firstDescendant().writeAttribute({className:a.visible()?"exp":"col"});if(a.visible()){Effect.BlindUp(a,b)}else{Effect.BlindDown(a,b)}}},createFolder:function(c){var b,f,i,g,h,e=this.getFolderId(c.m),a=decodeURIComponent(c.m),d=this.getSubFolderId(e),j=$(d);i=new Element("LI",{className:"folder",id:e,l:c.l,mbox:a,ftype:(c.v?(c.co?"vcontainer":"virtual"):(c.co?"container":(c.s?"special":"folder")))});b=new Element("DIV",{className:c.cl||"base",id:e+"_div"});if(c.i){b.update(c.i)}if(c.ch){b.writeAttribute({className:"exp"}).observe("mouseover",this.bcache.get("mo_folder")||this.bcache.set("mo_folder",function(k){k=k.element();if(DragDrop.Drags.drag&&k.hasClassName("exp")){this._toggleSubFolder(k.up(),"exp")}}.bindAsEventListener(this)))}i.insert(b).insert(new Element("A",{id:e+"_label",title:c.l}).insert(c.l));if(j){if(j.insert({before:i}).visible()){b.removeClassName("exp").addClassName("col")}}else{if(c.s){h=$("specialfolders")}else{h=$(this.getSubFolderId(this.getFolderId(c.pa)));h=(h)?h.down("UL"):$("normalfolders")}g=a.toLowerCase();f=h.childElements().find(function(k){var l=k.readAttribute("mbox");return l&&(!c.s||l!="INBOX")&&(g<l.toLowerCase())});if(f){f.insert({before:i})}else{h.insert(i)}if(c.ch){i.insert({after:new Element("LI",{className:"subfolders",id:d}).insert(new Element("UL")).hide()})}}if(!c.v){new Drop(i,this._folderDropConfig)}if(c.po){i.writeAttribute("u","");this.setFolderLabel(a,c.u)}},deleteFolder:function(a){var b=decodeURIComponent(a),c;if(this.folder==b){this.go("folder:INBOX")}c=this.getFolderId(a);this.deleteFolderElt(c,true);Effect.Fade(c,{afterFinish:function(d){try{DimpCore.addGC(d.element.remove())}catch(f){DimpCore.debug("deleteFolder",f)}}})},changeFolder:function(b){var d=this.getFolderId(b.m),a=$(d+"_div"),c=a&&a.hasClassName("col");this.deleteFolderElt(d,!b.ch);if(b.co&&this.folder==b.m){this.go("folder:INBOX")}$(d).remove();this.createFolder(b);if(b.ch&&c){a.removeClassName("exp").addClassName("col")}},deleteFolderElt:function(d,b){var c=$(d),a;DimpCore.addGC($(c,d+"_div",d+"_label"));if(b){a=$(this.getSubFolderId(d));if(a){a.remove()}}[DragDrop.Drags.get_drag(d),DragDrop.Drops.get_drop(d)].compact().invoke("destroy");DimpCore.removeMouseEvents(c);delete this.mo_sidebar[d];if(this.viewport){this.viewport.deleteView(d)}},_sizeFolderlist:function(){var a=$("normalfolders");a.setStyle({height:(document.viewport.getHeight()-a.cumulativeOffset()[1]-10)+"px"})},flag:function(f,d,e){var c,b,h,g=[],a=1;if(d){if(Object.isUndefined(e)){h=this.viewport.createSelection("dataob",d)}else{h=this.viewport.getViewportSelection().search({imapuid:{equal:[d]},view:{equal:[e]}});if(!h.size()&&e!=this.folder){h=this.viewport.getViewportSelection(e).search({imapuid:{equal:[d]}})}}}else{h=this.viewport.getSelected()}switch(f){case"allUnseen":case"allSeen":DimpCore.doAction((f=="allUnseen")?"MarkFolderUnseen":"MarkFolderSeen",{folder:e},null,this.bcache.get("flagAC")||this.bcache.set("flagAC",this._flagAllCallback.bind(this)));if(e==this.folder){this.viewport.updateFlag(this.createSelection("rownum",$A($R(1,this.viewport.getMetaData("total_rows")))),"unseen",f=="allUnseen")}break;case"deleted":case"undeleted":case"spam":case"ham":case"blacklist":case"whitelist":if(!h.size()){break}if(f=="deleted"){h=h.search({isdel:{not:[true]}});if(!h.size()){break}h.set({isdel:true})}b=this.viewport.addRequestParams({});if(f=="deleted"||f=="undeleted"){this.viewport.updateFlag(h,"deletedmsg",f=="deleted")}if(f=="undeleted"){DimpCore.doAction("UndeleteMessage",b,h)}else{c={deleted:"DeleteMessage",spam:"ReportSpam",ham:"ReportHam",blacklist:"Blacklist",whitelist:"Whitelist"};DimpCore.doAction(c[f],b,h,this.bcache.get("deleteC")||this.bcache.set("deleteC",this._deleteCallback.bind(this)),{asynchronous:!(d&&e)});if(f=="spam"||f=="ham"){this.msgListLoading(true)}}break;case"unseen":case"seen":if(!h.size()){break}b={folder:this.folder,messageFlag:"-\\seen"};if(f=="seen"){a=0;b.messageFlag="\\seen"}g=h.get("dataob");if(g.size()){g.each(function(i){this.updateUnseenUID(i,a)},this);DimpCore.doAction("MarkMessage",b,this.viewport.createSelection("dataob",g))}break;case"flagged":case"clear":if(!h.size()){break}b={folder:this.folder,messageFlag:((f=="flagged")?"\\flagged":"-\\flagged")};this.viewport.updateFlag(h,"flagged",f=="flagged");DimpCore.doAction("MarkMessage",b,h);break;case"answered":this.viewport.updateFlag(h,"answered",true);this.viewport.updateFlag(h,"flagged",false);break}},purgeDeleted:function(){DimpCore.doAction("PurgeDeleted",this.viewport.addRequestParams({}),null,this.bcache.get("deleteC")||this.bcache.set("deleteC",this._deleteCallback.bind(this)))},modifyPollFolder:function(a,b){DimpCore.doAction("ModifyPollFolder",{folder:a,add:(b)?1:0},null,this.bcache.get("modifyPFC")||this.bcache.set("modifyPFC",this._modifyPollFolderCallback.bind(this)))},_modifyPollFolderCallback:function(a){a=a.response;var b=a.folder,d,c={response:{poll:{}}};d=$(this.getFolderId(b));if(a.add){c.response.poll[b]=a.poll.u;d.writeAttribute("u",0)}else{c.response.poll[b]=0}this._pollFoldersCallback(c);if(!a.add){d.removeAttribute("u")}},msgListLoading:function(a){var b;if(this.fl_visible!=a){this.fl_visible=a;if(a){b=$("msgList").positionedOffset();$("folderLoading").setStyle({position:"absolute",top:(b.top+10)+"px",left:(b.left+10)+"px"});Effect.Appear("folderLoading",{duration:0.2});$(document.body).setStyle({cursor:"progress"})}else{Effect.Fade("folderLoading",{duration:0.2});$(document.body).setStyle({cursor:"default"})}}},isSubfolder:function(b,d){var a=$(this.getSubFolderId(b.readAttribute("id")));return a&&d.descendantOf(a)},_onLoad:function(){var b,c=DimpCore.clickObserveHandler,a=DimpCore.DMenu;if(Horde.dhtmlHistory.initialize()){Horde.dhtmlHistory.addListener(this.go.bind(this))}if(!Horde.dhtmlHistory.getCurrentLocation()){if(DIMP.conf.login_view=="inbox"){this.go("folder:INBOX")}else{this.go("portal");if(DIMP.conf.background_inbox){this.loadFolder("INBOX",true)}}}this._setFilterText(true);DimpCore.addPopdown("button_reply","reply");a.disable("button_reply_img",true,true);DimpCore.addPopdown("button_forward","forward");a.disable("button_forward_img",true,true);DimpCore.addPopdown("button_other","otheractions");b=$("logo");if(b.visible()){c({d:b.down("a"),f:this.go.bind(this,"portal")})}c({d:$("composelink"),f:DimpCore.compose.bind(DimpCore,"new")});c({d:$("checkmaillink"),f:this.pollFolders.bind(this)});["portal","options"].each(function(e){var f=$("app"+e);if(f){c({d:f,f:this.go.bind(this,e)})}},this);b=$("applogout");if(b){c({d:b,f:DimpCore.logout.bind(DimpCore)})}b=$("applicationfolders");if(b){b.select("li.custom a").each(function(d){c({d:d,f:this.go.bind(this,"app:"+d.readAttribute("app"))})},this)}c({d:$("newfolder"),f:this.createBaseFolder.bind(this)});new Drop("dropbase",this._folderDropConfig);b=$("hometab");if(b){c({d:b,f:this.go.bind(this,"portal")})}$("tabbar").select("a.applicationtab").each(function(d){c({d:d,f:this.go.bind(this,"app:"+d.readAttribute("app"))})},this);c({d:$("button_reply"),f:this.composeMailbox.bind(this,"reply"),ns:true});c({d:$("button_forward"),f:this.composeMailbox.bind(this,DIMP.conf.forward_default),ns:true});["spam","ham","deleted"].each(function(e){var f=$("button_"+e);if(f){c({d:f,f:this.flag.bind(this,e)})}},this);c({d:$("button_compose").down("A"),f:DimpCore.compose.bind(DimpCore,"new")});c({d:$("button_other"),f:function(d){a.trigger(d.findElement("A").next(),true)},p:true});c({d:$("qoptions").down(".qclose a"),f:this.searchfilterClear.bind(this,false)});["all","current"].each(function(e){var f=$("sf_"+e);if(f){c({d:f,f:this.updateSearchfilter.bind(this,e,"folder")})}},this);["msgall","from","to","subject"].each(function(d){c({d:$("sf_"+d),f:this.updateSearchfilter.bind(this,d,"msg")})},this);c({d:$("msglistHeader"),f:this.sort.bind(this),p:true});c({d:$("ctx_folder_create"),f:function(){this.createSubFolder(a.element())}.bind(this),ns:true});c({d:$("ctx_folder_rename"),f:function(){this.renameFolder(a.element())}.bind(this),ns:true});c({d:$("ctx_folder_empty"),f:function(){var d=a.element().readAttribute("mbox");a.close(true);if(window.confirm(DIMP.text.empty_folder)){DimpCore.doAction("EmptyFolder",{folder:d},null,this._emptyFolderCallback.bind(this))}}.bind(this),ns:true});c({d:$("ctx_folder_delete"),f:function(){var d=a.element().readAttribute("mbox");a.close(true);if(window.confirm(DIMP.text.delete_folder)){DimpCore.doAction("DeleteFolder",{folder:d},null,this.bcache.get("folderC")||this.bcache.set("folderC",this._folderCallback.bind(this)))}}.bind(this),ns:true});["ctx_folder_seen","ctx_folder_unseen"].each(function(d){c({d:$(d),f:function(e){this.flag(e,null,a.element().readAttribute("mbox"))}.bind(this,d=="ctx_folder_seen"?"allSeen":"allUnseen"),ns:true})},this);["ctx_folder_poll","ctx_folder_nopoll"].each(function(d){c({d:$(d),f:function(e){this.modifyPollFolder(a.element().readAttribute("mbox"),e)}.bind(this,d=="ctx_folder_poll"),ns:true})},this);c({d:$("ctx_container_create"),f:function(){this.createSubFolder(a.element())}.bind(this),ns:true});c({d:$("ctx_container_rename"),f:function(){this.renameFolder(a.element())}.bind(this),ns:true});["reply","reply_all","reply_list","forward_all","forward_body","forward_attachments"].each(function(d){c({d:$("ctx_message_"+d),f:this.composeMailbox.bind(this,d),ns:true})},this);["seen","unseen","flagged","clear","spam","ham","blacklist","whitelist","deleted","undeleted"].each(function(e){var f=$("ctx_message_"+e);if(f){c({d:f,f:this.flag.bind(this,e),ns:true})}},this);c({d:$("ctx_draft_resume"),f:this.composeMailbox.bind(this,"resume")});["flagged","clear","deleted","undeleted"].each(function(e){var f=$("ctx_draft_"+e);if(f){c({d:f,f:this.flag.bind(this,e),ns:true})}},this);["reply","reply_all","reply_list"].each(function(d){c({d:$("ctx_reply_"+d),f:this.composeMailbox.bind(this,d),ns:true})},this);["forward_all","forward_body","forward_attachments"].each(function(d){c({d:$("ctx_forward_"+d),f:this.composeMailbox.bind(this,d),ns:true})},this);c({d:$("previewtoggle"),f:this.togglePreviewPane.bind(this),ns:true});["seen","unseen","flagged","clear","blacklist","whitelist","undeleted"].each(function(e){var f=$("oa_"+e);if(f){c({d:f,f:this.flag.bind(this,e),ns:true})}},this);c({d:$("oa_selectall"),f:this.selectAll.bind(this),ns:true});b=$("oa_purge_deleted");if(b){c({d:b,f:this.purgeDeleted.bind(this),ns:true})}$("toggleHeaders").select("A").each(function(d){c({d:d,f:function(){[d.up().select("A"),$("msgHeadersColl","msgHeaders")].flatten().invoke("toggle")},ns:true})});$("msg_newwin","msg_newwin_options").compact().each(function(d){c({d:d,f:function(){this.msgWindow(this.viewport.getViewportSelection().search({imapuid:{equal:[DIMP.conf.msg_index]},view:{equal:[DIMP.conf.msg_folder]}}).get("dataob").first())}.bind(this)})},this);DimpCore.messageOnLoad();this._resizeIE6()},_resizeIE6:function(){if(DIMP.conf.is_ie6){var a=parseInt($("sidebarPanel").getStyle("width"),10),b=document.viewport.getWidth()-a-30;$("normalfolders").setStyle({width:a+"px"});$("dimpmain").setStyle({width:b+"px"});$("msglist").setStyle({width:(b-5)+"px"});$("msgBody").setStyle({width:(b-25)+"px"});a=$("dimpmain_portal").down("IFRAME");if(a){this._resizeIE6Iframe(a)}}},_resizeIE6Iframe:function(a){if(DIMP.conf.is_ie6){a.setStyle({width:$("dimpmain").getStyle("width"),height:(document.viewport.getHeight()-20)+"px"})}}};DimpBase._msgDragConfig={scroll:"normalfolders",threshold:5,caption:DimpBase._dragCaption.bind(DimpBase),onStart:function(c,b){var a={right:b.isRightClick()},f=c.element.id;c.selectIfNoDrag=false;if(!a.right&&(b.ctrlKey||b.metaKey)){this.msgSelect(f,$H({ctrl:true}).merge(a).toObject())}else{if(b.shiftKey){this.msgSelect(f,$H({shift:true}).merge(a).toObject())}else{if(this.isSelected("domid",f)){if(!a.right&&this.selectedCount()){c.selectIfNoDrag=true}}else{this.msgSelect(f,a)}}}}.bind(DimpBase),onEnd:function(b,a){if(b.selectIfNoDrag&&!b.wasDragged){this.msgSelect(b.element.id,{right:a.isRightClick()})}}.bind(DimpBase)};DimpBase._folderDragConfig={ghosting:true,offset:{x:5,y:5},scroll:"normalfolders",threshold:5,onDrag:function(b,a){if(!b.wasDragged){$("newfolder").hide();$("dropbase").show();b.ghost.removeClassName("on")}},onEnd:function(b,a){if(b.wasDragged){$("newfolder").show();$("dropbase").hide()}}};DimpBase._folderDropConfig={hoverclass:"dragdrop",caption:function(f,g,h){var a,i=g.readAttribute("l"),c=f.readAttribute("ftype"),b=f.readAttribute("l");if(f==$("dropbase")){return DIMP.text.moveto.replace(/%s/,i).replace(/%s/,DIMP.text.baselevel)}else{a=(h.ctrlKey)?DIMP.text.copyto:DIMP.text.moveto;if(g.hasClassName("folder")){return(c!="special"&&!this.isSubfolder(g,f))?a.replace(/%s/,i).replace(/%s/,b):""}else{return c!="container"?a.replace(/%s/,this._dragCaption()).replace(/%s/,b):""}}}.bind(DimpBase),onDrop:DimpBase._folderDropHandler.bind(DimpBase)};document.observe("dom:loaded",function(){$("dimpLoading").hide();$("dimpPage").show();DimpCore.doAction("ListFolders",{},null,DimpBase._folderLoadCallback.bind(DimpBase));DimpBase._onLoad();if(!DIMP.conf.search_all){DimpBase.sfiltersfolder.unset("sf_all")}DimpBase.setPollFolders();document.observe("keydown",DimpBase._keydownHandler.bind(DimpBase));Event.observe(window,"resize",DimpBase._onResize.bind(DimpBase));if(DIMP.conf.is_ie6){document.observe("selectstart",Event.stop);$("dimpbarActions","serviceActions","applicationfolders").compact().invoke("select","LI").flatten().compact().each(function(a){a.observe("mouseover",a.addClassName.curry("over")).observe("mouseout",a.removeClassName.curry("over"))})}});DimpCore.onDoActionComplete=function(a){if(DimpBase.viewport&&a.response.viewport){DimpBase.viewport.ajaxResponse(a.response.viewport)}};DimpCore.addMouseEvents=DimpCore.addMouseEvents.wrap(DimpBase._addMouseEvents.bind(DimpBase));DimpCore.removeMouseEvents=DimpCore.removeMouseEvents.wrap(DimpBase._removeMouseEvents.bind(DimpBase));
\ No newline at end of file
-var frames={horde_main:true},DimpCore={acount:0,remove_gc:[],server_error:0,view_id:1,buttons:["button_reply","button_forward","button_spam","button_ham","button_deleted"],debug:function(a,b){if(!this.is_logout&&DIMP.conf.debug){alert(a+": "+(b instanceof Error?b.name+"-"+b.message:Object.inspect(b)))}},toRangeString:function(a){var b="";$H(a).each(function(f){if(!f.value.size()){return}var d=f.value.numericSort(),e=last=d.shift(),c=[];d.each(function(g){if(last+1==g){last=g}else{c.push(e+(last==e?"":(":"+last)));e=last=g}});c.push(e+(last==e?"":(":"+last)));b+="{"+f.key.length+"}"+f.key+c.join(",")});return b},parseRangeString:function(g){var e,b,c,f,a={},d=[];g=g.strip();while(!g.blank()){if(!g.startsWith("{")){break}c=g.indexOf("}");e=parseInt(g.substr(1,c-1),10);f=g.substr(c+1,e);c+=e+1;b=g.indexOf("{",c);if(b==-1){uidstr=g.substr(c);g=""}else{uidstr=g.substr(c,b-c);g=g.substr(b)}uidstr.split(",").each(function(i){var h=i.split(":");if(h.size()==1){d.push(parseInt(i,10))}else{d=d.concat($A($R(parseInt(h[0],10),parseInt(h[1],10))))}});a[f]=d}return a},doAction:function(d,e,c,f,b){var a={};if(!this.doActionOpts){this.doActionOpts={onException:function(g,h){this.debug("onException",h)}.bind(this),onFailure:function(g,h){this.debug("onFailure",g)}.bind(this),evalJS:false,evalJSON:true}}b=Object.extend(this.doActionOpts,b||{});e=$H(e);d=d.startsWith("*")?d.substring(1):DIMP.conf.URI_IMP+"/"+d;if(c){if(c.viewport_selection){c.get("dataob").each(function(g){if(!a[g.view]){a[g.view]=[]}a[g.view].push(g.imapuid)});c=a}e.set("uid",DimpCore.toRangeString(c))}if(DIMP.conf.SESSION_ID){e.update(DIMP.conf.SESSION_ID.toQueryParams())}b.parameters=e.toQueryString();b.onComplete=function(g,h){this.doActionComplete(g,f)}.bind(this);new Ajax.Request(d,b)},doActionComplete:function(b,d){this.inAjaxCallback=true;var a;if(!b.responseJSON){if(++this.server_error==3){this.showNotifications([{type:"horde.error",message:DIMP.text.ajax_timeout}])}this.inAjaxCallback=false;return}a=b.responseJSON;if(!a.msgs){a.msgs=[]}if(a.response&&Object.isFunction(d)){if(DIMP.conf.debug){d(a)}else{try{d(a)}catch(c){}}}if(this.server_error>=3){a.msgs.push({type:"horde.success",message:DIMP.text.ajax_recover})}this.server_error=0;if(!a.msgs_noauto){this.showNotifications(a.msgs)}if(this.onDoActionComplete){this.onDoActionComplete(a)}this.inAjaxCallback=false},setTitle:function(a){document.title=DIMP.conf.name+" :: "+a},showNotifications:function(a){if(!a.size()||this.is_logout){return}a.find(function(d){switch(d.type){case"dimp.timeout":this.is_logout=true;this.redirect(DIMP.conf.timeout_url);return true;case"horde.error":case"horde.message":case"horde.success":case"horde.warning":case"imp.reply":case"imp.forward":case"imp.redirect":case"dimp.request":case"dimp.sticky":var h,i,k,e,j,f,g=$("alerts"),b=new Element("DIV",{className:d.type.replace(".","-")}),c=d.message;if(!g){g=new Element("DIV",{id:"alerts"});$(document.body).insert(g)}if($w("dimp.request dimp.sticky").indexOf(d.type)==-1){c=c.unescapeHTML().unescapeHTML()}g.insert(b.update(c));if(DIMP.conf.is_ie6){k=new Element("DIV",{className:"ie6alertsfix"}).clonePosition(b,{setLeft:false,setTop:false});h=k;k.insert(b.remove());g.insert(k)}else{h=b}i=Effect.Fade.bind(this,b,{duration:1.5,afterFinish:this.removeAlert.bind(this)});h.observe("click",i);if($w("horde.error dimp.request dimp.sticky").indexOf(d.type)==-1){i.delay(d.type=="horde.warning"?10:3)}if(d.type=="dimp.request"){j=function(){i();document.stopObserving("click",j)};document.observe("click",j)}if(f=$("alertslog")){switch(d.type){case"horde.error":e=DIMP.text.alog_error;break;case"horde.message":e=DIMP.text.alog_message;break;case"horde.success":e=DIMP.text.alog_success;break;case"horde.warning":e=DIMP.text.alog_warning;break}if(e){f=f.down("DIV UL");if(f.down().hasClassName("noalerts")){f.down().remove()}f.insert(new Element("LI").insert(new Element("P",{className:"label"}).insert(e)).insert(new Element("P",{className:"indent"}).insert(c).insert(new Element("SPAN",{className:"alertdate"}).insert("["+(new Date).toLocaleString()+"]"))))}}}},this)},toggleAlertsLog:function(){var a=$("alertsloglink").down("A"),c=$("alertslog").down("DIV"),b={duration:0.5};if(c.visible()){Effect.BlindUp(c,b);a.update(DIMP.text.showalog)}else{Effect.BlindDown(c,b);a.update(DIMP.text.hidealog)}},removeAlert:function(c){try{var a=$(c.element),b=a.up();if(b&&b.parentNode){this.addGC(a.remove());if(!b.childElements().size()&&b.hasClassName("ie6alertsfix")){this.addGC(b.remove())}}}catch(d){this.debug("removeAlert",d)}},compose:function(c,b){var a=DIMP.conf.compose_url;b=b||{};if(c){b.type=c}this.popupWindow(this.addURLParam(a,b),"compose"+new Date().getTime())},popupWindow:function(b,a){if(!(window.open(b,a.replace(/\W/g,"_"),"width="+DIMP.conf.popup_width+",height="+DIMP.conf.popup_height+",status=1,scrollbars=yes,resizable=yes"))){this.showNotifications([{type:"horde.warning",message:DIMP.text.popup_block}])}},closePopup:function(){if(this.inAjaxCallback){this.closePopup.bind(this).defer()}else{window.close()}},logout:function(){this.is_logout=true;this.redirect(DIMP.conf.URI_IMP+"/LogOut")},redirect:function(a){a=this.addSID(a);if(parent.frames.horde_main){parent.location=a}else{window.location=a}},addMouseEvents:function(a){this.DMenu.addElement(a.id,"ctx_"+a.type,a)},removeMouseEvents:function(a){this.DMenu.removeElement($(a).readAttribute("id"));this.addGC(a)},addPopdown:function(b,a){var c=$(b);c.insert({after:$($("popdown_img").cloneNode(false)).writeAttribute("id",b+"_img").show()});this.addMouseEvents({id:b+"_img",type:a,offset:c.up(),left:true})},buildAddressLinks:function(d,a){var e,c,b=d.size();if(b>15){c=$("largeaddrspan").cloneNode(true);a.insert(c);e=c.down(".dispaddrlist");c=c.down();this.clickObserveHandler({d:c,f:function(f){[f.down(),f.down(1),f.next()].invoke("toggle")}.curry(c)});c=c.down();c.setText(c.getText().replace("%d",b))}else{e=a}d.each(function(h,g){var f;if(h.raw){f=h.raw}else{f=new Element("A",{className:"address",id:"addr"+this.acount++,personal:h.personal,email:h.inner,address:h.address}).insert(h.display?h.display:h.address);f.observe("mouseover",function(){f.stopObserving("mouseover");this.addMouseEvents({id:f.id,type:"contacts",offset:f,left:true})}.bind(this))}e.insert(f);if(g+1!=b){e.insert(", ")}},this);return a},removeAddressLinks:function(a){[a.select(".address"),a.select(".largeaddrtoggle")].flatten().compact().each(this.removeMouseEvents.bind(this))},messageOnLoad:function(){var b=this.clickObserveHandler,a;if($("partlist")){b({d:$("partlist_col").up(),f:function(){$("partlist","partlist_col","partlist_exp").invoke("toggle")}})}if(a=$("msg_print")){b({d:a,f:function(){window.print()}})}if(a=$("msg_view_source")){b({d:a,f:function(){view(DimpCore.addSID(DIMP.conf.URI_VIEW)+"&index="+DIMP.conf.msg_index+"&mailbox="+DIMP.conf.msg_folder,DIMP.conf.msg_index+"|"+DIMP.conf.msg_folder)}})}b({d:$("ctx_contacts_new"),f:function(){this.compose("new",{to:this.DMenu.element().readAttribute("address")})}.bind(this),ns:true});b({d:$("ctx_contacts_add"),f:function(){this.doAction("AddContact",{name:this.DMenu.element().readAttribute("personal"),email:this.DMenu.element().readAttribute("email")},null,true)}.bind(this),ns:true});if($("alertslog")){b({d:$("alertsloglink"),f:this.toggleAlertsLog.bind(this)})}},addGC:function(a){this.remove_gc=this.remove_gc.concat(a)},clickObserveHandler:function(a){return a.d.observe("click",DimpCore._clickFunc.curry(a))},_clickFunc:function(b,a){b.p?b.f(a):b.f();if(!b.ns){a.stop()}},addSID:function(a){if(!DIMP.conf.SESSION_ID){return a}return this.addURLParam(a,DIMP.conf.SESSION_ID.toQueryParams())},addURLParam:function(a,c){var b=a.indexOf("?");if(b!=-1){c=$H(a.toQueryParams()).merge(c).toObject();a=a.substring(0,b)}return a+"?"+Object.toQueryString(c)},reloadMessage:function(a){if(typeof DimpFullmessage!="undefined"){window.location=this.addURLParam(document.location.href,a)}else{DimpBase.loadPreview(null,a)}}};if(typeof ContextSensitive!="undefined"){DimpCore.DMenu=new ContextSensitive()}document.observe("dom:loaded",function(){try{if(parent.opener&&parent.opener.location.host==window.location.host&&parent.opener.DimpCore){DIMP.baseWindow=parent.opener.DIMP.baseWindow||parent.opener}}catch(a){}if(!DIMP.conf.spam_reporting){DimpCore.buttons=DimpCore.buttons.without("button_spam")}if(!DIMP.conf.ham_reporting){DimpCore.buttons=DimpCore.buttons.without("button_ham")}new PeriodicalExecuter(function(){if(DimpCore.remove_gc.size()){try{$A(DimpCore.remove_gc.splice(0,75)).compact().invoke("stopObserving")}catch(b){DimpCore.debug("remove_gc[].stopObserving",b)}}},10)});Event.observe(window,"load",function(){DimpCore.window_load=true});Element.addMethods({setText:function(b,c){var a=0;$A(b.childNodes).each(function(d){if(d.nodeType==3){if(a++){Element.remove(d)}else{d.nodeValue=c}}});if(!a){$(b).insert(c)}},getText:function(b,a){var c="";$A(b.childNodes).each(function(d){if(d.nodeType==3){c+=d.nodeValue}else{if(a&&d.hasChildNodes()){c+=$(d).getText(true)}}});return c}});Object.extend(Array.prototype,{numericSort:function(){return this.sort(function(d,c){if(d>c){return 1}else{if(d<c){return-1}}return 0})}});Object.extend(String.prototype,{evalScripts:function(){var re=/function\s+([^\s(]+)/g;this.extractScripts().each(function(s){var func;eval(s);while(func=re.exec(s)){window[func[1]]=eval(func[1])}})}});function popup_imp(c,a,d,b){DimpCore.compose("new",b.toQueryParams().toObject())}function view(a,b){window.open(a,++DimpCore.view_id+b.replace(/\W/g,"_"),"menubar=yes,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes")};
\ No newline at end of file
+var frames={horde_main:true},DimpCore={acount:0,remove_gc:[],server_error:0,view_id:1,buttons:["button_reply","button_forward","button_spam","button_ham","button_deleted"],debug:function(a,b){if(!this.is_logout&&DIMP.conf.debug){alert(a+": "+(b instanceof Error?b.name+"-"+b.message:Object.inspect(b)))}},toRangeString:function(a){var b="";$H(a).each(function(f){if(!f.value.size()){return}var d=f.value.numericSort(),e=last=d.shift(),c=[];d.each(function(g){if(last+1==g){last=g}else{c.push(e+(last==e?"":(":"+last)));e=last=g}});c.push(e+(last==e?"":(":"+last)));b+="{"+f.key.length+"}"+f.key+c.join(",")});return b},parseRangeString:function(g){var e,b,c,f,a={},d=[];g=g.strip();while(!g.blank()){if(!g.startsWith("{")){break}c=g.indexOf("}");e=parseInt(g.substr(1,c-1),10);f=g.substr(c+1,e);c+=e+1;b=g.indexOf("{",c);if(b==-1){uidstr=g.substr(c);g=""}else{uidstr=g.substr(c,b-c);g=g.substr(b)}uidstr.split(",").each(function(i){var h=i.split(":");if(h.size()==1){d.push(parseInt(i,10))}else{d=d.concat($A($R(parseInt(h[0],10),parseInt(h[1],10))))}});a[f]=d}return a},doAction:function(f,g,e,h,d){var a,c={};if(!this.doActionOpts){this.doActionOpts={onException:function(b,i){this.debug("onException",i)}.bind(this),onFailure:function(b,i){this.debug("onFailure",b)}.bind(this),evalJS:false,evalJSON:true}}d=Object.extend(this.doActionOpts,d||{});g=$H(g);f=f.startsWith("*")?f.substring(1):DIMP.conf.URI_IMP+"/"+f;if(e){if(e.viewport_selection){a=e.getBuffer();if(a.getMetaData("search")){e.get("dataob").each(function(b){if(!c[b.view]){c[b.view]=[]}c[b.view].push(b.imapuid)})}else{c[a.getView()]=e.get("uid")}e=c}g.set("uid",DimpCore.toRangeString(e))}if(DIMP.conf.SESSION_ID){g.update(DIMP.conf.SESSION_ID.toQueryParams())}d.parameters=g.toQueryString();d.onComplete=function(b,i){this.doActionComplete(b,h)}.bind(this);new Ajax.Request(f,d)},doActionComplete:function(b,d){this.inAjaxCallback=true;var a;if(!b.responseJSON){if(++this.server_error==3){this.showNotifications([{type:"horde.error",message:DIMP.text.ajax_timeout}])}this.inAjaxCallback=false;return}a=b.responseJSON;if(!a.msgs){a.msgs=[]}if(a.response&&Object.isFunction(d)){if(DIMP.conf.debug){d(a)}else{try{d(a)}catch(c){}}}if(this.server_error>=3){a.msgs.push({type:"horde.success",message:DIMP.text.ajax_recover})}this.server_error=0;if(!a.msgs_noauto){this.showNotifications(a.msgs)}if(this.onDoActionComplete){this.onDoActionComplete(a)}this.inAjaxCallback=false},setTitle:function(a){document.title=DIMP.conf.name+" :: "+a},showNotifications:function(a){if(!a.size()||this.is_logout){return}a.find(function(d){switch(d.type){case"dimp.timeout":this.is_logout=true;this.redirect(DIMP.conf.timeout_url);return true;case"horde.error":case"horde.message":case"horde.success":case"horde.warning":case"imp.reply":case"imp.forward":case"imp.redirect":case"dimp.request":case"dimp.sticky":var h,i,k,e,j,f,g=$("alerts"),b=new Element("DIV",{className:d.type.replace(".","-")}),c=d.message;if(!g){g=new Element("DIV",{id:"alerts"});$(document.body).insert(g)}if($w("dimp.request dimp.sticky").indexOf(d.type)==-1){c=c.unescapeHTML().unescapeHTML()}g.insert(b.update(c));if(DIMP.conf.is_ie6){k=new Element("DIV",{className:"ie6alertsfix"}).clonePosition(b,{setLeft:false,setTop:false});h=k;k.insert(b.remove());g.insert(k)}else{h=b}i=Effect.Fade.bind(this,b,{duration:1.5,afterFinish:this.removeAlert.bind(this)});h.observe("click",i);if($w("horde.error dimp.request dimp.sticky").indexOf(d.type)==-1){i.delay(d.type=="horde.warning"?10:3)}if(d.type=="dimp.request"){j=function(){i();document.stopObserving("click",j)};document.observe("click",j)}if(f=$("alertslog")){switch(d.type){case"horde.error":e=DIMP.text.alog_error;break;case"horde.message":e=DIMP.text.alog_message;break;case"horde.success":e=DIMP.text.alog_success;break;case"horde.warning":e=DIMP.text.alog_warning;break}if(e){f=f.down("DIV UL");if(f.down().hasClassName("noalerts")){f.down().remove()}f.insert(new Element("LI").insert(new Element("P",{className:"label"}).insert(e)).insert(new Element("P",{className:"indent"}).insert(c).insert(new Element("SPAN",{className:"alertdate"}).insert("["+(new Date).toLocaleString()+"]"))))}}}},this)},toggleAlertsLog:function(){var a=$("alertsloglink").down("A"),c=$("alertslog").down("DIV"),b={duration:0.5};if(c.visible()){Effect.BlindUp(c,b);a.update(DIMP.text.showalog)}else{Effect.BlindDown(c,b);a.update(DIMP.text.hidealog)}},removeAlert:function(c){try{var a=$(c.element),b=a.up();if(b&&b.parentNode){this.addGC(a.remove());if(!b.childElements().size()&&b.hasClassName("ie6alertsfix")){this.addGC(b.remove())}}}catch(d){this.debug("removeAlert",d)}},compose:function(c,b){var a=DIMP.conf.compose_url;b=b||{};if(c){b.type=c}this.popupWindow(this.addURLParam(a,b),"compose"+new Date().getTime())},popupWindow:function(b,a){if(!(window.open(b,a.replace(/\W/g,"_"),"width="+DIMP.conf.popup_width+",height="+DIMP.conf.popup_height+",status=1,scrollbars=yes,resizable=yes"))){this.showNotifications([{type:"horde.warning",message:DIMP.text.popup_block}])}},closePopup:function(){if(this.inAjaxCallback){this.closePopup.bind(this).defer()}else{window.close()}},logout:function(){this.is_logout=true;this.redirect(DIMP.conf.URI_IMP+"/LogOut")},redirect:function(a){a=this.addSID(a);if(parent.frames.horde_main){parent.location=a}else{window.location=a}},addMouseEvents:function(a){this.DMenu.addElement(a.id,"ctx_"+a.type,a)},removeMouseEvents:function(a){this.DMenu.removeElement($(a).readAttribute("id"));this.addGC(a)},addPopdown:function(b,a){var c=$(b);c.insert({after:$($("popdown_img").cloneNode(false)).writeAttribute("id",b+"_img").show()});this.addMouseEvents({id:b+"_img",type:a,offset:c.up(),left:true})},buildAddressLinks:function(d,a){var e,c,b=d.size();if(b>15){c=$("largeaddrspan").cloneNode(true);a.insert(c);e=c.down(".dispaddrlist");c=c.down();this.clickObserveHandler({d:c,f:function(f){[f.down(),f.down(1),f.next()].invoke("toggle")}.curry(c)});c=c.down();c.setText(c.getText().replace("%d",b))}else{e=a}d.each(function(h,g){var f;if(h.raw){f=h.raw}else{f=new Element("A",{className:"address",id:"addr"+this.acount++,personal:h.personal,email:h.inner,address:h.address}).insert(h.display?h.display:h.address);f.observe("mouseover",function(){f.stopObserving("mouseover");this.addMouseEvents({id:f.id,type:"contacts",offset:f,left:true})}.bind(this))}e.insert(f);if(g+1!=b){e.insert(", ")}},this);return a},removeAddressLinks:function(a){[a.select(".address"),a.select(".largeaddrtoggle")].flatten().compact().each(this.removeMouseEvents.bind(this))},messageOnLoad:function(){var b=this.clickObserveHandler,a;if($("partlist")){b({d:$("partlist_col").up(),f:function(){$("partlist","partlist_col","partlist_exp").invoke("toggle")}})}if(a=$("msg_print")){b({d:a,f:function(){window.print()}})}if(a=$("msg_view_source")){b({d:a,f:function(){view(DimpCore.addSID(DIMP.conf.URI_VIEW)+"&index="+DIMP.conf.msg_index+"&mailbox="+DIMP.conf.msg_folder,DIMP.conf.msg_index+"|"+DIMP.conf.msg_folder)}})}b({d:$("ctx_contacts_new"),f:function(){this.compose("new",{to:this.DMenu.element().readAttribute("address")})}.bind(this),ns:true});b({d:$("ctx_contacts_add"),f:function(){this.doAction("AddContact",{name:this.DMenu.element().readAttribute("personal"),email:this.DMenu.element().readAttribute("email")},null,true)}.bind(this),ns:true});if($("alertslog")){b({d:$("alertsloglink"),f:this.toggleAlertsLog.bind(this)})}},addGC:function(a){this.remove_gc=this.remove_gc.concat(a)},clickObserveHandler:function(a){return a.d.observe("click",DimpCore._clickFunc.curry(a))},_clickFunc:function(b,a){b.p?b.f(a):b.f();if(!b.ns){a.stop()}},addSID:function(a){if(!DIMP.conf.SESSION_ID){return a}return this.addURLParam(a,DIMP.conf.SESSION_ID.toQueryParams())},addURLParam:function(a,c){var b=a.indexOf("?");if(b!=-1){c=$H(a.toQueryParams()).merge(c).toObject();a=a.substring(0,b)}return a+"?"+Object.toQueryString(c)},reloadMessage:function(a){if(typeof DimpFullmessage!="undefined"){window.location=this.addURLParam(document.location.href,a)}else{DimpBase.loadPreview(null,a)}}};if(typeof ContextSensitive!="undefined"){DimpCore.DMenu=new ContextSensitive()}document.observe("dom:loaded",function(){try{if(parent.opener&&parent.opener.location.host==window.location.host&&parent.opener.DimpCore){DIMP.baseWindow=parent.opener.DIMP.baseWindow||parent.opener}}catch(a){}if(!DIMP.conf.spam_reporting){DimpCore.buttons=DimpCore.buttons.without("button_spam")}if(!DIMP.conf.ham_reporting){DimpCore.buttons=DimpCore.buttons.without("button_ham")}new PeriodicalExecuter(function(){if(DimpCore.remove_gc.size()){try{$A(DimpCore.remove_gc.splice(0,75)).compact().invoke("stopObserving")}catch(b){DimpCore.debug("remove_gc[].stopObserving",b)}}},10)});Event.observe(window,"load",function(){DimpCore.window_load=true});Element.addMethods({setText:function(b,c){var a=0;$A(b.childNodes).each(function(d){if(d.nodeType==3){if(a++){Element.remove(d)}else{d.nodeValue=c}}});if(!a){$(b).insert(c)}},getText:function(b,a){var c="";$A(b.childNodes).each(function(d){if(d.nodeType==3){c+=d.nodeValue}else{if(a&&d.hasChildNodes()){c+=$(d).getText(true)}}});return c}});Object.extend(Array.prototype,{numericSort:function(){return this.sort(function(d,c){if(d>c){return 1}else{if(d<c){return-1}}return 0})}});Object.extend(String.prototype,{evalScripts:function(){var re=/function\s+([^\s(]+)/g;this.extractScripts().each(function(s){var func;eval(s);while(func=re.exec(s)){window[func[1]]=eval(func[1])}})}});function popup_imp(c,a,d,b){DimpCore.compose("new",b.toQueryParams().toObject())}function view(a,b){window.open(a,++DimpCore.view_id+b.replace(/\W/g,"_"),"menubar=yes,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes")};
\ No newline at end of file
-var ViewPort=Class.create({initialize:function(a){a.content=$(a.content_container);a.empty=a.empty_container?$(a.empty_container):null;a.error=a.error_container?$(a.error_container):null;this.opts=a;this.scroller=new ViewPort_Scroller(this);this.template=new Template(a.template);this.current_req_lookup=$H();this.current_req=$H();this.fetch_hash=$H();this.slice_hash=$H();this.views=$H();this.showSplitPane(a.show_split_pane);this.isbusy=this.line_height=this.page_size=this.splitbar=this.splitbar_loc=this.uc_run=this.view=this.viewport_init=null;this.request_num=1},loadView:function(f,d,i,c){var e,h,g,b={},a;this._clearWait();if(this.page_size===null){a=this.getPageSize(this.show_split_pane?"default":"max");if(isNaN(a)){this.loadView.bind(this,f,d,i,c).defer();return}this.page_size=a}e=this._getBuffer();if(e){if(!c&&this.view){this.views.set(this.view,{buffer:e,offset:this.currentOffset()})}h=this.views.get(f)}else{g=true}if(c){b={background:true,view:f}}else{this.view=f;if(!this.viewport_init){this.viewport_init=1;this._renderViewport()}}if(h){this.setMetaData("additional_params",$H(d),f);this._updateContent(h.offset,b);if(!c){if(this.opts.onComplete){this.opts.onComplete()}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams({checkcache:1,rownum:this.currentOffset()+1}))}return true}else{if(!g){if(this.opts.onClearRows){this.opts.onClearRows(this.opts.content.childElements())}this.opts.content.update();this.scroller.clear()}}e=this._getBuffer(null,true);this.views.set(f,{buffer:e,offset:0});this.setMetaData({additional_params:$H(d)},f);if(i){b.search=i}else{b.offset=0}this._fetchBuffer(b);return false},deleteView:function(a){this.views.unset(a)},scrollTo:function(a,c){var b=this.scroller;b.noupdate=c;switch(this.isVisible(a)){case-1:b.moveScroll(a-1);break;case 1:b.moveScroll(Math.min(a,this.getMetaData("total_rows")-this.getPageSize()+1));break}b.noupdate=false},isVisible:function(a){var b=this.currentOffset();return(a<b+1)?-1:((a>(b+this.getPageSize("current")))?1:0)},reload:function(a){if(this.isFiltering()){this.filter.filter(null,a)}else{this._fetchBuffer({offset:this.currentOffset(),purge:true,params:a})}},remove:function(f,c){if(this.isbusy){this.remove.bind(this,f,cacheid,view).defer();return}if(!f.size()){return}c=c||{};this.isbusy=true;var a,b=0,e=f.get("div"),d=e.size();this.deselect(f);if(c.cacheid){this.setMetaData({cacheid:c.cacheid},c.view)}if(d){a={duration:0.3,to:0.01};e.each(function(g){if(++b==d){a.afterFinish=this._removeids.bind(this,f,c)}Effect.Fade(g,a)},this)}else{this._removeids(f,c)}},_removeids:function(b,a){this.setMetaData({total_rows:this.getMetaData("total_rows",a.view)-b.size()},a.view);if(this.opts.onRemoveRows){this.opts.onRemoveRows(b)}this._getBuffer().remove(b.get("rownum"));if(!a.noupdate){this.requestContentRefresh(this.currentOffset())}this.isbusy=false},addFilter:function(a,b){this.filter=new ViewPort_Filter(this,a,b)},runFilter:function(b,a){if(this.filter){this.filter.filter(Object.isUndefined(b)?null:b,a)}},isFiltering:function(){return this.filter?this.filter.isFiltering():false},stopFilter:function(a){if(this.filter){this.filter.clear(a)}},onResize:function(b,a){if(!this.uc_run||!this.opts.content.visible()){return}if(this.resizefunc){clearTimeout(this.resizefunc)}if(a){this._onResize(b)}else{this.resizefunc=this._onResize.bind(this,b).delay(0.1)}},_onResize:function(a){if(this.opts.onBeforeResize){this.opts.onBeforeResize()}this._renderViewport(a);if(this.opts.onAfterResize){this.opts.onAfterResize()}},requestContentRefresh:function(b){if(this._updateContent(b)){var a=this._getBuffer().isNearingLimit(b);if(a){this._fetchBuffer({offset:b,background:true,nearing:a})}return true}return false},_fetchBuffer:function(a){if(this.isbusy){this._fetchBuffer.bind(this,a).defer();return}this.isbusy=true;if(this.opts.onFetch&&!a.background){this.opts.onFetch()}var m=(a.view||this.view),h=this.opts.fetch_action,f,n=this._getBuffer(m),j,d,g=$H(a.params),e,q,r,p,l,c,k,o,i;if(a.purge){g.set("purge",true)}if(a.search){k="search";o=a.search;d=this._lookbehind(m);g.update({search_before:d,search_after:n.bufferSize()-d})}else{k="rownum";o=a.offset+1;f=n.getAllRows();c=this._getSliceBounds(o,a.nearing,m);l=$A($R(c.start,c.end)).diff(f);if(!a.purge&&!l.size()){this.isbusy=false;return}g.update({slice_start:c.start,slice_end:c.end})}g.set(k,Object.toJSON(o));p=[m,k,o];if(this.isFiltering()){h=this.filter.getAction();g=this.filter.addFilterParams(g);p.push(g)}q=p.toJSON();e=this.fetch_hash.get(q);j=this.current_req.get(m);if(j){if(e&&j.get(e)){if(++j.get(e).count==4){this._displayFetchError();this._removeRequest(m,e);this.isbusy=false;return}}else{if(k=="rownum"){i=$A($R(o,o+this.getPageSize())).diff(f);if(!i.size()){this.isbusy=false;return}r=j.keys().numericSort().find(function(b){var s=j.get(b).rlist;i=i.diff(s);if(!i.size()){return true}l=l.diff(s)});if(r){if(!a.background){this._addRequest(m,r,{background:false,offset:o-1})}this.isbusy=false;return}else{if(!a.background){j.keys().each(function(b){this._addRequest(m,b,{background:true})},this)}}}}}if(!e){e=this.fetch_hash.set(q,this.request_num++)}g.set("request_id",e);this._addRequest(m,e,{background:a.background,offset:o-1,rlist:l});this.opts.ajaxRequest(h,this.addRequestParams(g,{noslice:true,view:m}));this._handleWait();this.isbusy=false},_getSliceBounds:function(c,d,a){var e=this._getBuffer(a).bufferSize(),b={};switch(d){case"bottom":b.start=c+this.getPageSize();b.end=b.start+e;break;case"top":b.start=Math.max(c-e,1);b.end=c;break;default:b.start=Math.max(c-this._lookbehind(a),1);b.end=b.start+e;break}return b},_lookbehind:function(a){return parseInt(0.4*this._getBuffer(a).bufferSize(),10)},addRequestParams:function(a,c){c=c||{};var b=(this.opts.onCachedList?this.opts.onCachedList(c.view||this.view):this._getBuffer(c.view).getAllUIDs().toJSON()),f=this.getMetaData("cacheid",c.view),d=this.getMetaData("additional_params",c.view).clone(),e;if(f){d.update({cacheid:f})}if(!c.noslice){e=this._getSliceBounds(this.currentOffset(),null,c.view);d.update({slice_start:e.start,slice_end:e.end})}if(b.length){d.update({cached:b})}return d.merge(a)},ajaxResponse:function(e){if(this.isbusy){this.ajaxResponse.bind(this,e).defer();return}this.isbusy=true;this._clearWait();var a,d,b,f,c,h,g={};if(e.type=="slice"){f=e.data;c=Object.keys(f);c.each(function(i){f[i].view=e.id;g[i]=f[i].rownum});a=this._getBuffer(e.id);a.update(f,g,{slice:true});if(this.opts.onFetchUpdate){this.opts.onFetchUpdate(e.id)}d=this.slice_hash.get(e.request_id);if(d){d(new ViewPort_Selection(a,"uid",c));this.slice_hash.unset(e.request_id)}this.isbusy=false;if(this.opts.onEndFetch){this.opts.onEndFetch()}return}h=(e.request_id)?this.current_req_lookup.get(e.request_id):e.id;d=this.current_req.get(h);if(d&&e.request_id){b=d.get(e.request_id)}if(this.viewport_init){this.viewport_init=2}a=this._getBuffer(h);a.update(e.data,e.rowlist,{update:e.update});a.setMetaData($H(e.other).merge({cacheid:e.cacheid,label:e.label,total_rows:e.totalrows}));if(this.opts.onFetchUpdate){this.opts.onFetchUpdate(h)}if(e.request_id){this._removeRequest(h,e.request_id)}this.isbusy=false;if(!(this.view==h||e.search)||(b&&b.background)||!this._updateContent((b&&b.offset)?b.offset:(e.rownum?parseInt(e.rownum)-1:this.currentOffset()))){return}if(this.opts.onComplete){this.opts.onComplete()}if(this.opts.onEndFetch){this.opts.onEndFetch()}},_addRequest:function(a,b,e){var d=this.current_req.get(a),c;if(!d){d=this.current_req.set(a,$H())}c=d.get(b);if(!c){c=d.set(b,{count:1})}["background","offset","rlist"].each(function(f){if(!Object.isUndefined(e[f])){c[f]=e[f]}});this.current_req_lookup.set(b,a)},_removeRequest:function(a,b){var c=this.current_req.get(a);if(c){c.unset(b);if(!c.size()){this.current_req.unset(a)}}this.current_req_lookup.unset(b)},_updateContent:function(g,d){d=d||{};if(!this._getBuffer(d.view).sliceLoaded(g)){this._fetchBuffer($H(d).merge({offset:g}).toObject());return false}if(!this.uc_run){this.uc_run=true;if(this.opts.onFirstContent){this.opts.onFirstContent()}}var h=this.opts.content,a=[],b=this.getPageSize(),f,e=this.getSelected();if(this.opts.onClearRows){this.opts.onClearRows(h.childElements())}this.scroller.updateSize();this.scrollTo(g+1,true);g=this.currentOffset();f=this.createSelection("rownum",$A($R(g+1,g+b)));if(f.size()){f.get("dataob").each(function(i){var c=Object.clone(i);if(c.bg){c.bg=i.bg.clone();if(e.contains("uid",c.vp_id)){c.bg.push(this.opts.selected_class)}c.bg_string=c.bg.join(" ")}a.push(this.template.evaluate(c))},this);h.update(a.join(""))}else{h.update((this.opts.empty&&this.viewport_init!=1)?this.opts.empty.innerHTML:"")}if(this.opts.onContent){this.opts.onContent(f)}return true},_displayFetchError:function(){if(this.opts.onFail){this.opts.onFail()}if(this.opts.error){this.opts.content.update(this.opts.error.innerHTML)}},_getSlice:function(b,e){var d={rangeslice:1,start:b.min(),length:b.size()},a,c;c=this.createSelection("rownum",b);if(b.size()==c.size()){return c}if(this.opts.onFetch){this.opts.onFetch()}if(e){a=this.request_num++;d.request_id=a;this.slice_hash.set(a,e)}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams(d,{noslice:true}));return false},_handleWait:function(a){this._clearWait();if(a&&this.opts.onWait){this.opts.onWait()}if(this.opts.viewport_wait){this.waitHandler=this._handleWait.bind(this,true).delay(this.opts.viewport_wait)}},_clearWait:function(){if(this.waitHandler){clearTimeout(this.waitHandler);this.waitHandler=null}},visibleRows:function(){return this.opts.content.childElements()},getMetaData:function(b,a){return this._getBuffer(a).getMetaData(b)},setMetaData:function(b,a){this._getBuffer(a).setMetaData(b)},_getBuffer:function(c,d){if(!d){var a=this.views.get(c||this.view);if(a){return a.buffer}}return new ViewPort_Buffer(this,this.opts.buffer_pages,this.opts.limit_factor)},currentOffset:function(){return this.scroller.currentOffset()},updateFlag:function(c,a,b){this._updateFlag(c,a,b,this.isFiltering());this._updateClass(c,a,b)},_updateFlag:function(d,a,c,b){d.get("dataob").each(function(e){if(c){e.bg.push(a)}else{e.bg.splice(e.bg.indexOf(a),1)}if(b){this._updateFlag(this.createSelection("uid",e.vp_id,e.view),a,c)}},this)},_updateClass:function(c,a,b){c.get("div").each(function(e){if(b){e.addClassName(a)}else{e.removeClassName(a)}})},_getLineHeight:function(){if(this.line_height){return this.line_height}var a=new Element("DIV",{className:this.opts.content_class}).insert(new Element("DIV",{className:this.opts.row_class})).hide();$(document.body).insert(a);this.line_height=a.getHeight();a.remove();return this.line_height},getPageSize:function(a){switch(a){case"current":return Math.min(this.page_size,this.getMetaData("total_rows"));case"default":return Math.max(parseInt(this.getPageSize("max")*0.45),5);case"max":return parseInt(this._getMaxHeight()/this._getLineHeight());default:return this.page_size}},_getMaxHeight:function(){return document.viewport.getHeight()-this.opts.content.viewportOffset()[1]},showSplitPane:function(a){this.show_split_pane=a;this.onResize(false,true)},_renderViewport:function(e){if(!this.viewport_init){return}if(!this.opts.content.offsetHeight){return this._renderViewport.bind(this,e).defer()}var f,b,j,d,i=$(this.opts.content),g=document.documentElement,a=this._getLineHeight();if(this.opts.split_pane){j=$(this.opts.split_pane);if(this.show_split_pane){if(!j.visible()){this._initSplitBar();this.page_size=(this.splitbar_loc)?this.splitbar_loc:this.getPageSize("default")}d=true}else{if(j.visible()){this.splitbar_loc=this.page_size;$(j,this.splitbar).invoke("hide")}}}if(!d){this.page_size=this.getPageSize("max")}b=a*this.page_size;i.setStyle({height:b+"px"});if(d){j.setStyle({height:(this._getMaxHeight()-b-a)+"px"}).show();this.splitbar.show()}else{if(f=g.scrollHeight-g.clientHeight){i.setStyle({height:(a*(this.page_size-1))+"px"})}}if(!e){this.scroller.onResize()}},_initSplitBar:function(){if(this.splitbar){return}this.splitbar=$(this.opts.splitbar);new Drag(this.splitbar,{constraint:"vertical",ghosting:true,onStart:function(){var a=this._getLineHeight();this.sp={lh:a,pos:$(this.opts.content).positionedOffset()[1],max:parseInt((this._getMaxHeight()-100)/a),lines:this.page_size}}.bind(this),snap:function(a,d,c){var b=parseInt((d-this.sp.pos)/this.sp.lh);if(b<1){b=1}else{if(b>this.sp.max){b=this.sp.max}}this.sp.lines=b;return[a,this.sp.pos+(b*this.sp.lh)]}.bind(this),onEnd:function(){this.page_size=this.sp.lines;this._renderViewport()}.bind(this)});this.splitbar.observe("dblclick",function(){this.page_size=this.getPageSize("default");this._renderViewport()}.bind(this))},createSelection:function(d,c,b){var a=this._getBuffer(b);return a?new ViewPort_Selection(a,d,c):new ViewPort_Selection(this._getBuffer(this.view))},getViewportSelection:function(b){var a=this._getBuffer(b);return this.createSelection("uid",a?a.getAllUIDs():[],b)},select:function(e,c){c=c||{};if(c.range){e=this._getSlice(e,this.select.bind(this));if(e===false){return}}var a=this._getBuffer(),d;if(!c.add){d=this.getSelected();a.deselect(d,true);this._updateClass(d,this.opts.selected_class,false)}a.select(e);this._updateClass(e,this.opts.selected_class,true);if(this.opts.selectCallback){this.opts.selectCallback(e,c)}},deselect:function(b,a){a=a||{};if(!b.size()){return}if(this._getBuffer().deselect(b,a&&a.clearall)){this._updateClass(b,this.opts.selected_class,false);if(this.opts.deselectCallback){this.opts.deselectCallback(b,a)}}},getSelected:function(){return Object.clone(this._getBuffer().getSelected())}}),ViewPort_Scroller=Class.create({initialize:function(a){this.vp=a},_createScrollBar:function(){if(this.scrollDiv){return false}var a=this.vp.opts.content;this.scrollDiv=new Element("DIV",{className:"sbdiv",style:"height:"+a.getHeight()+"px;"}).hide();a.insert({after:this.scrollDiv}).setStyle({marginRight:"-"+this.scrollDiv.getWidth()+"px"});this.scrollbar=new DimpSlider(this.scrollDiv,{buttonclass:{up:"sbup",down:"sbdown"},cursorclass:"sbcursor",onChange:this._onScroll.bind(this),onSlide:this.vp.opts.onSlide?this.vp.opts.onSlide:null,pagesize:this.vp.getPageSize(),totalsize:this.vp.getMetaData("total_rows")});a.observe(Prototype.Browser.Gecko?"DOMMouseScroll":"mousewheel",function(c){if(Prototype.Browser.Gecko&&c.eventPhase==2){return}var b=this.vp.getPageSize();b=(b>3)?3:b;this.moveScroll(this.currentOffset()+((c.wheelDelta>=0||c.detail<0)?(-1*b):b))}.bindAsEventListener(this));return true},onResize:function(){if(!this.scrollDiv){return}this.scrollsize=this.vp.opts.content.getHeight();this.scrollDiv.setStyle({height:this.scrollsize+"px"});this.updateSize();this.vp.requestContentRefresh(this.currentOffset())},updateSize:function(){if(!this._createScrollBar()){this.scrollbar.updateHandleLength(this.vp.getPageSize(),this.vp.getMetaData("total_rows"))}},clear:function(){if(this.scrollDiv){this.scrollbar.updateHandleLength(0,0)}},moveScroll:function(a){this._createScrollBar();this.scrollbar.setScrollPosition(a)},_onScroll:function(){if(!this.noupdate){if(this.vp.opts.onScroll){this.vp.opts.onScroll()}this.vp.requestContentRefresh(this.currentOffset());if(this.vp.opts.onScrollIdle){this.vp.opts.onScrollIdle()}}},currentOffset:function(){return this.scrollbar?this.scrollbar.getValue():0}}),ViewPort_Buffer=Class.create({initialize:function(b,c,a){this.bufferPages=c;this.limitFactor=a;this.vp=b;this.clear()},_limitTolerance:function(){return Math.round(this.bufferSize()*(this.limitFactor/100))},bufferSize:function(){return Math.round(Math.max(this.vp.getPageSize("max")+1,this.bufferPages*this.vp.getPageSize()))},update:function(c,a,b){c=$H(c);a=$H(a);b=b||{};if(b.slice){c.each(function(d){if(!this.data.get(d.key)){this.data.set(d.key,d.value);this.inc.set(d.key,true)}},this)}else{if(this.data.size()){this.data.update(c);if(this.inc.size()){c.keys().each(function(d){this.inc.unset(d)},this)}}else{this.data=c}}this.uidlist=(b.update)?a:(this.uidlist.size()?this.uidlist.merge(a):a);if(b.update){this.rowlist=$H()}a.each(function(d){this.rowlist.set(d.value,d.key)},this)},sliceLoaded:function(a){return!this._rangeCheck($A($R(a+1,Math.min(a+this.vp.getPageSize()-1,this.getMetaData("total_rows")))))},isNearingLimit:function(a){if(this.uidlist.size()!=this.getMetaData("total_rows")){if(a!=0&&this._rangeCheck($A($R(Math.max(a+1-this._limitTolerance(),1),a)))){return"top"}else{if(this._rangeCheck($A($R(a+1,Math.min(a+this._limitTolerance()+this.vp.getPageSize()-1,this.getMetaData("total_rows")))).reverse())){return"bottom"}}}return false},_rangeCheck:function(a){var b=this.inc.size();return a.any(function(d){var c=this.rowlist.get(d);return(Object.isUndefined(c)||(b&&this.inc.get(c)))},this)},getData:function(a){return a.collect(function(b){var c=this.data.get(b);if(!Object.isUndefined(c)){c.domid="vp_row"+b;c.rownum=this.uidlist.get(b);c.vp_id=b;return c}},this).compact()},getAllUIDs:function(){return this.uidlist.keys()},getAllRows:function(){return this.rowlist.keys()},rowsToUIDs:function(a){return a.collect(function(b){return this.rowlist.get(b)},this).compact()},select:function(a){this.selected.add("uid",a.get("uid"))},deselect:function(c,b){var a=this.selected.size();if(b){this.selected.clear()}else{this.selected.remove("uid",c.get("uid"))}return a!=this.selected.size()},getSelected:function(){return this.selected},remove:function(b){var c=b.min(),d,e=this.rowlist.size(),a=0;d=e-b.size();return this.rowlist.keys().each(function(h){if(h>=c){var g=this.rowlist.get(h),f;if(b.include(h)){this.data.unset(g);this.uidlist.unset(g);a++}else{if(a){f=h-a;this.rowlist.set(f,g);this.uidlist.set(g,f)}}if(h>d){this.rowlist.unset(h)}}},this)},clear:function(){this.data=$H();this.inc=$H();this.mdata=$H({total_rows:0});this.rowlist=$H();this.selected=new ViewPort_Selection(this);this.uidlist=$H()},getMetaData:function(a){return this.mdata.get(a)},setMetaData:function(a){this.mdata.update(a)}}),ViewPort_Filter=Class.create({initialize:function(a,b,c){this.vp=a;this.action=b;this.callback=c;this.filterid=0;this.filtering=this.last_filter=this.last_folder=this.last_folder_params=null},filter:function(d,b){b=b||{};if(d===null){d=this.last_filter}else{d=d.toLowerCase();if(d==this.last_filter){return}}if(!d){this.clear();return}this.last_filter=d;if(this.filtering){this.vp._fetchBuffer({offset:0,params:b});return}this.filtering=++this.filterid+"%search%";this.last_folder=this.vp.view;this.last_folder_params=this.vp.getMetaData("additional_params").merge(b);var e=this.vp.opts.content,a;a=e.childElements().findAll(function(c){return c.collectTextNodes().toLowerCase().indexOf(d)==-1});if(this.vp.opts.onClearRows){this.vp.opts.onClearRows(a)}a.invoke("remove");this.vp.scroller.clear();if(this.vp.opts.empty&&!e.childElements().size()){e.update(this.vp.opts.empty.innerHTML)}this.vp.loadView(this.filtering,this.last_folder_params)},isFiltering:function(){return this.filtering},getAction:function(){return this.action},addFilterParams:function(a){if(!this.filtering){return a}a.update({filter:this.last_filter});if(this.callback){a.update(this.callback())}return a},clear:function(a){if(this.filtering){this.filtering=null;if(!a){this.vp.loadView(this.last_folder,this.last_folder_params)}this.vp.deleteView(this.filtering);this.last_filter=this.last_folder=null}}}),ViewPort_Selection=Class.create({initialize:function(a,c,b){this.buffer=a;this.clear();if(!Object.isUndefined(c)){this.add(c,b)}this.viewport_selection=true},add:function(a,b){var e=this._convert(a,b);this.data=(this.data.size())?this.data.concat(e).uniq():e},remove:function(a,b){this.data=this.data.diff(this._convert(a,b))},_convert:function(a,b){b=Object.isArray(b)?b:[b];switch(a){case"dataob":return b.pluck("vp_id");case"div":return b.pluck("id").invoke("substring",6);case"domid":return b.invoke("substring",6);case"rownum":return this.buffer.rowsToUIDs(b);case"uid":return b}},clear:function(){this.data=[]},get:function(a){a=Object.isUndefined(a)?"uid":a;if(a=="uid"){return this.data}var b=this.buffer.getData(this.data);switch(a){case"dataob":return b;case"div":return b.pluck("domid").collect(function(c){return $(c)}).compact();case"domid":return b.pluck("domid");case"rownum":return b.pluck("rownum")}},contains:function(a,b){return this.data.include(this._convert(a,b).first())},search:function(a){return new ViewPort_Selection(this.buffer,"uid",this.get("dataob").findAll(function(b){return $H(a).all(function(c){return $H(c.value).all(function(d){switch(d.key){case"equal":case"not":var e=b[c.key]&&d.value.include(b[c.key]);return(d.key=="equal")?e:!e;case"regex":return b[c.key].match(d.value)}})})}).pluck("vp_id"))},size:function(){return this.data.size()},set:function(a){this.get("dataob").each(function(b){$H(a).each(function(c){b[c.key]=c.value})})}});Object.extend(Array.prototype,{diff:function(a){return this.select(function(b){return!a.include(b)})},numericSort:function(){return this.sort(function(d,c){return(d>c)?1:((d<c)?-1:0)})}});
\ No newline at end of file
+var ViewPort=Class.create({initialize:function(a){a.content=$(a.content_container);a.empty=a.empty_container?$(a.empty_container):null;a.error=a.error_container?$(a.error_container):null;this.opts=a;this.scroller=new ViewPort_Scroller(this);this.template=new Template(a.template);this.current_req_lookup=$H();this.current_req=$H();this.fetch_hash=$H();this.slice_hash=$H();this.views=$H();this.showSplitPane(a.show_split_pane);this.isbusy=this.line_height=this.page_size=this.splitbar=this.splitbar_loc=this.uc_run=this.view=this.viewport_init=null;this.request_num=1},loadView:function(f,d,i,c){var e,h,g,b={},a;this._clearWait();if(this.page_size===null){a=this.getPageSize(this.show_split_pane?"default":"max");if(isNaN(a)){this.loadView.bind(this,f,d,i,c).defer();return}this.page_size=a}e=this._getBuffer(f);if(e){if(!c&&this.view){this.views.set(this.view,{buffer:e,offset:this.currentOffset()})}h=this.views.get(f)}else{g=true}if(c){b={background:true,view:f}}else{this.view=f;if(!this.viewport_init){this.viewport_init=1;this._renderViewport()}}if(h){this.setMetaData("additional_params",$H(d),f);this._updateContent(h.offset,b);if(!c){if(this.opts.onComplete){this.opts.onComplete()}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams({checkcache:1,rownum:this.currentOffset()+1}))}return true}else{if(!g){if(this.opts.onClearRows){this.opts.onClearRows(this.opts.content.childElements())}this.opts.content.update();this.scroller.clear()}}e=this._getBuffer(f,true);this.views.set(f,{buffer:e,offset:0});this.setMetaData({additional_params:$H(d)},f);if(i){b.search=i}else{b.offset=0}this._fetchBuffer(b);return false},deleteView:function(a){this.views.unset(a)},scrollTo:function(a,c){var b=this.scroller;b.noupdate=c;switch(this.isVisible(a)){case-1:b.moveScroll(a-1);break;case 1:b.moveScroll(Math.min(a,this.getMetaData("total_rows")-this.getPageSize()+1));break}b.noupdate=false},isVisible:function(a){var b=this.currentOffset();return(a<b+1)?-1:((a>(b+this.getPageSize("current")))?1:0)},reload:function(a){if(this.isFiltering()){this.filter.filter(null,a)}else{this._fetchBuffer({offset:this.currentOffset(),purge:true,params:a})}},remove:function(f,c){if(this.isbusy){this.remove.bind(this,f,cacheid,view).defer();return}if(!f.size()){return}c=c||{};this.isbusy=true;var a,b=0,e=f.get("div"),d=e.size();this.deselect(f);if(c.cacheid){this.setMetaData({cacheid:c.cacheid},c.view)}if(d){a={duration:0.3,to:0.01};e.each(function(g){if(++b==d){a.afterFinish=this._removeids.bind(this,f,c)}Effect.Fade(g,a)},this)}else{this._removeids(f,c)}},_removeids:function(b,a){this.setMetaData({total_rows:this.getMetaData("total_rows",a.view)-b.size()},a.view);if(this.opts.onRemoveRows){this.opts.onRemoveRows(b)}this._getBuffer().remove(b.get("rownum"));if(!a.noupdate){this.requestContentRefresh(this.currentOffset())}this.isbusy=false},addFilter:function(a,b){this.filter=new ViewPort_Filter(this,a,b)},runFilter:function(b,a){if(this.filter){this.filter.filter(Object.isUndefined(b)?null:b,a)}},isFiltering:function(){return this.filter?this.filter.isFiltering():false},stopFilter:function(a){if(this.filter){this.filter.clear(a)}},onResize:function(b,a){if(!this.uc_run||!this.opts.content.visible()){return}if(this.resizefunc){clearTimeout(this.resizefunc)}if(a){this._onResize(b)}else{this.resizefunc=this._onResize.bind(this,b).delay(0.1)}},_onResize:function(a){if(this.opts.onBeforeResize){this.opts.onBeforeResize()}this._renderViewport(a);if(this.opts.onAfterResize){this.opts.onAfterResize()}},requestContentRefresh:function(b){if(this._updateContent(b)){var a=this._getBuffer().isNearingLimit(b);if(a){this._fetchBuffer({offset:b,background:true,nearing:a})}return true}return false},_fetchBuffer:function(a){if(this.isbusy){this._fetchBuffer.bind(this,a).defer();return}this.isbusy=true;if(this.opts.onFetch&&!a.background){this.opts.onFetch()}var m=(a.view||this.view),h=this.opts.fetch_action,f,n=this._getBuffer(m),j,d,g=$H(a.params),e,q,r,p,l,c,k,o,i;if(a.purge){g.set("purge",true)}if(a.search){k="search";o=a.search;d=this._lookbehind(m);g.update({search_before:d,search_after:n.bufferSize()-d})}else{k="rownum";o=a.offset+1;f=n.getAllRows();c=this._getSliceBounds(o,a.nearing,m);l=$A($R(c.start,c.end)).diff(f);if(!a.purge&&!l.size()){this.isbusy=false;return}g.update({slice_start:c.start,slice_end:c.end})}g.set(k,Object.toJSON(o));p=[m,k,o];if(this.isFiltering()){h=this.filter.getAction();g=this.filter.addFilterParams(g);p.push(g)}q=p.toJSON();e=this.fetch_hash.get(q);j=this.current_req.get(m);if(j){if(e&&j.get(e)){if(++j.get(e).count==4){this._displayFetchError();this._removeRequest(m,e);this.isbusy=false;return}}else{if(k=="rownum"){i=$A($R(o,o+this.getPageSize())).diff(f);if(!i.size()){this.isbusy=false;return}r=j.keys().numericSort().find(function(b){var s=j.get(b).rlist;i=i.diff(s);if(!i.size()){return true}l=l.diff(s)});if(r){if(!a.background){this._addRequest(m,r,{background:false,offset:o-1})}this.isbusy=false;return}else{if(!a.background){j.keys().each(function(b){this._addRequest(m,b,{background:true})},this)}}}}}if(!e){e=this.fetch_hash.set(q,this.request_num++)}g.set("request_id",e);this._addRequest(m,e,{background:a.background,offset:o-1,rlist:l});this.opts.ajaxRequest(h,this.addRequestParams(g,{noslice:true,view:m}));this._handleWait();this.isbusy=false},_getSliceBounds:function(c,d,a){var e=this._getBuffer(a).bufferSize(),b={};switch(d){case"bottom":b.start=c+this.getPageSize();b.end=b.start+e;break;case"top":b.start=Math.max(c-e,1);b.end=c;break;default:b.start=Math.max(c-this._lookbehind(a),1);b.end=b.start+e;break}return b},_lookbehind:function(a){return parseInt(0.4*this._getBuffer(a).bufferSize(),10)},addRequestParams:function(a,c){c=c||{};var f=this.getMetaData("cacheid",c.view),d=this.getMetaData("additional_params",c.view).clone(),b,e;if(f){d.update({cacheid:f})}if(!c.noslice){e=this._getSliceBounds(this.currentOffset(),null,c.view);d.update({slice_start:e.start,slice_end:e.end})}if(this.opts.onCachedList){b=this.opts.onCachedList(c.view||this.view)}else{b=this._getBuffer(c.view).getAllUIDs();b=b.size()?b.toJSON():""}if(b.length){d.update({cached:b})}return d.merge(a)},ajaxResponse:function(e){if(this.isbusy){this.ajaxResponse.bind(this,e).defer();return}this.isbusy=true;this._clearWait();var a,d,b,f,c,h,g={};if(e.type=="slice"){f=e.data;c=Object.keys(f);c.each(function(i){f[i].view=e.id;g[i]=f[i].rownum});a=this._getBuffer(e.id);a.update(f,g,{slice:true});if(this.opts.onFetchUpdate){this.opts.onFetchUpdate(e.id)}d=this.slice_hash.get(e.request_id);if(d){d(new ViewPort_Selection(a,"uid",c));this.slice_hash.unset(e.request_id)}this.isbusy=false;if(this.opts.onEndFetch){this.opts.onEndFetch()}return}h=(e.request_id)?this.current_req_lookup.get(e.request_id):e.id;d=this.current_req.get(h);if(d&&e.request_id){b=d.get(e.request_id)}if(this.viewport_init){this.viewport_init=2}a=this._getBuffer(h);a.update(e.data,e.rowlist,{update:e.update});a.setMetaData($H(e.other).merge({cacheid:e.cacheid,label:e.label,total_rows:e.totalrows}));if(this.opts.onFetchUpdate){this.opts.onFetchUpdate(h)}if(e.request_id){this._removeRequest(h,e.request_id)}this.isbusy=false;if(!(this.view==h||e.search)||(b&&b.background)||!this._updateContent((b&&b.offset)?b.offset:(e.rownum?parseInt(e.rownum)-1:this.currentOffset()))){return}if(this.opts.onComplete){this.opts.onComplete()}if(this.opts.onEndFetch){this.opts.onEndFetch()}},_addRequest:function(a,b,e){var d=this.current_req.get(a),c;if(!d){d=this.current_req.set(a,$H())}c=d.get(b);if(!c){c=d.set(b,{count:1})}["background","offset","rlist"].each(function(f){if(!Object.isUndefined(e[f])){c[f]=e[f]}});this.current_req_lookup.set(b,a)},_removeRequest:function(a,b){var c=this.current_req.get(a);if(c){c.unset(b);if(!c.size()){this.current_req.unset(a)}}this.current_req_lookup.unset(b)},_updateContent:function(g,d){d=d||{};if(!this._getBuffer(d.view).sliceLoaded(g)){this._fetchBuffer($H(d).merge({offset:g}).toObject());return false}if(!this.uc_run){this.uc_run=true;if(this.opts.onFirstContent){this.opts.onFirstContent()}}var h=this.opts.content,a=[],b=this.getPageSize(),f,e=this.getSelected();if(this.opts.onClearRows){this.opts.onClearRows(h.childElements())}this.scroller.updateSize();this.scrollTo(g+1,true);g=this.currentOffset();f=this.createSelection("rownum",$A($R(g+1,g+b)));if(f.size()){f.get("dataob").each(function(i){var c=Object.clone(i);if(c.bg){c.bg=i.bg.clone();if(e.contains("uid",c.vp_id)){c.bg.push(this.opts.selected_class)}c.bg_string=c.bg.join(" ")}a.push(this.template.evaluate(c))},this);h.update(a.join(""))}else{h.update((this.opts.empty&&this.viewport_init!=1)?this.opts.empty.innerHTML:"")}if(this.opts.onContent){this.opts.onContent(f)}return true},_displayFetchError:function(){if(this.opts.onFail){this.opts.onFail()}if(this.opts.error){this.opts.content.update(this.opts.error.innerHTML)}},_getSlice:function(b,e){var d={rangeslice:1,start:b.min(),length:b.size()},a,c;c=this.createSelection("rownum",b);if(b.size()==c.size()){return c}if(this.opts.onFetch){this.opts.onFetch()}if(e){a=this.request_num++;d.request_id=a;this.slice_hash.set(a,e)}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams(d,{noslice:true}));return false},_handleWait:function(a){this._clearWait();if(a&&this.opts.onWait){this.opts.onWait()}if(this.opts.viewport_wait){this.waitHandler=this._handleWait.bind(this,true).delay(this.opts.viewport_wait)}},_clearWait:function(){if(this.waitHandler){clearTimeout(this.waitHandler);this.waitHandler=null}},visibleRows:function(){return this.opts.content.childElements()},getMetaData:function(b,a){return this._getBuffer(a).getMetaData(b)},setMetaData:function(b,a){this._getBuffer(a).setMetaData(b)},_getBuffer:function(c,d){c=c||this.view;if(!d){var a=this.views.get(c);if(a){return a.buffer}}return new ViewPort_Buffer(this,this.opts.buffer_pages,this.opts.limit_factor,c)},currentOffset:function(){return this.scroller.currentOffset()},updateFlag:function(c,a,b){this._updateFlag(c,a,b,this.isFiltering());this._updateClass(c,a,b)},_updateFlag:function(d,a,c,b){d.get("dataob").each(function(e){if(c){e.bg.push(a)}else{e.bg.splice(e.bg.indexOf(a),1)}if(b){this._updateFlag(this.createSelection("uid",e.vp_id,e.view),a,c)}},this)},_updateClass:function(c,a,b){c.get("div").each(function(e){if(b){e.addClassName(a)}else{e.removeClassName(a)}})},_getLineHeight:function(){if(this.line_height){return this.line_height}var a=new Element("DIV",{className:this.opts.content_class}).insert(new Element("DIV",{className:this.opts.row_class})).hide();$(document.body).insert(a);this.line_height=a.getHeight();a.remove();return this.line_height},getPageSize:function(a){switch(a){case"current":return Math.min(this.page_size,this.getMetaData("total_rows"));case"default":return Math.max(parseInt(this.getPageSize("max")*0.45),5);case"max":return parseInt(this._getMaxHeight()/this._getLineHeight());default:return this.page_size}},_getMaxHeight:function(){return document.viewport.getHeight()-this.opts.content.viewportOffset()[1]},showSplitPane:function(a){this.show_split_pane=a;this.onResize(false,true)},_renderViewport:function(e){if(!this.viewport_init){return}if(!this.opts.content.offsetHeight){return this._renderViewport.bind(this,e).defer()}var f,b,j,d,i=$(this.opts.content),g=document.documentElement,a=this._getLineHeight();if(this.opts.split_pane){j=$(this.opts.split_pane);if(this.show_split_pane){if(!j.visible()){this._initSplitBar();this.page_size=(this.splitbar_loc)?this.splitbar_loc:this.getPageSize("default")}d=true}else{if(j.visible()){this.splitbar_loc=this.page_size;$(j,this.splitbar).invoke("hide")}}}if(!d){this.page_size=this.getPageSize("max")}b=a*this.page_size;i.setStyle({height:b+"px"});if(d){j.setStyle({height:(this._getMaxHeight()-b-a)+"px"}).show();this.splitbar.show()}else{if(f=g.scrollHeight-g.clientHeight){i.setStyle({height:(a*(this.page_size-1))+"px"})}}if(!e){this.scroller.onResize()}},_initSplitBar:function(){if(this.splitbar){return}this.splitbar=$(this.opts.splitbar);new Drag(this.splitbar,{constraint:"vertical",ghosting:true,onStart:function(){var a=this._getLineHeight();this.sp={lh:a,pos:$(this.opts.content).positionedOffset()[1],max:parseInt((this._getMaxHeight()-100)/a),lines:this.page_size}}.bind(this),snap:function(a,d,c){var b=parseInt((d-this.sp.pos)/this.sp.lh);if(b<1){b=1}else{if(b>this.sp.max){b=this.sp.max}}this.sp.lines=b;return[a,this.sp.pos+(b*this.sp.lh)]}.bind(this),onEnd:function(){this.page_size=this.sp.lines;this._renderViewport()}.bind(this)});this.splitbar.observe("dblclick",function(){this.page_size=this.getPageSize("default");this._renderViewport()}.bind(this))},createSelection:function(d,c,b){var a=this._getBuffer(b);return a?new ViewPort_Selection(a,d,c):new ViewPort_Selection(this._getBuffer(this.view))},getViewportSelection:function(b){var a=this._getBuffer(b);return this.createSelection("uid",a?a.getAllUIDs():[],b)},select:function(e,c){c=c||{};if(c.range){e=this._getSlice(e,this.select.bind(this));if(e===false){return}}var a=this._getBuffer(),d;if(!c.add){d=this.getSelected();a.deselect(d,true);this._updateClass(d,this.opts.selected_class,false)}a.select(e);this._updateClass(e,this.opts.selected_class,true);if(this.opts.selectCallback){this.opts.selectCallback(e,c)}},deselect:function(b,a){a=a||{};if(!b.size()){return}if(this._getBuffer().deselect(b,a&&a.clearall)){this._updateClass(b,this.opts.selected_class,false);if(this.opts.deselectCallback){this.opts.deselectCallback(b,a)}}},getSelected:function(){return Object.clone(this._getBuffer().getSelected())}}),ViewPort_Scroller=Class.create({initialize:function(a){this.vp=a},_createScrollBar:function(){if(this.scrollDiv){return false}var a=this.vp.opts.content;this.scrollDiv=new Element("DIV",{className:"sbdiv",style:"height:"+a.getHeight()+"px;"}).hide();a.insert({after:this.scrollDiv}).setStyle({marginRight:"-"+this.scrollDiv.getWidth()+"px"});this.scrollbar=new DimpSlider(this.scrollDiv,{buttonclass:{up:"sbup",down:"sbdown"},cursorclass:"sbcursor",onChange:this._onScroll.bind(this),onSlide:this.vp.opts.onSlide?this.vp.opts.onSlide:null,pagesize:this.vp.getPageSize(),totalsize:this.vp.getMetaData("total_rows")});a.observe(Prototype.Browser.Gecko?"DOMMouseScroll":"mousewheel",function(c){if(Prototype.Browser.Gecko&&c.eventPhase==2){return}var b=this.vp.getPageSize();b=(b>3)?3:b;this.moveScroll(this.currentOffset()+((c.wheelDelta>=0||c.detail<0)?(-1*b):b))}.bindAsEventListener(this));return true},onResize:function(){if(!this.scrollDiv){return}this.scrollsize=this.vp.opts.content.getHeight();this.scrollDiv.setStyle({height:this.scrollsize+"px"});this.updateSize();this.vp.requestContentRefresh(this.currentOffset())},updateSize:function(){if(!this._createScrollBar()){this.scrollbar.updateHandleLength(this.vp.getPageSize(),this.vp.getMetaData("total_rows"))}},clear:function(){if(this.scrollDiv){this.scrollbar.updateHandleLength(0,0)}},moveScroll:function(a){this._createScrollBar();this.scrollbar.setScrollPosition(a)},_onScroll:function(){if(!this.noupdate){if(this.vp.opts.onScroll){this.vp.opts.onScroll()}this.vp.requestContentRefresh(this.currentOffset());if(this.vp.opts.onScrollIdle){this.vp.opts.onScrollIdle()}}},currentOffset:function(){return this.scrollbar?this.scrollbar.getValue():0}}),ViewPort_Buffer=Class.create({initialize:function(c,d,b,a){this.bufferPages=d;this.limitFactor=b;this.vp=c;this.view=a;this.clear()},getView:function(){return this.view},_limitTolerance:function(){return Math.round(this.bufferSize()*(this.limitFactor/100))},bufferSize:function(){return Math.round(Math.max(this.vp.getPageSize("max")+1,this.bufferPages*this.vp.getPageSize()))},update:function(c,a,b){c=$H(c);a=$H(a);b=b||{};if(b.slice){c.each(function(d){if(!this.data.get(d.key)){this.data.set(d.key,d.value);this.inc.set(d.key,true)}},this)}else{if(this.data.size()){this.data.update(c);if(this.inc.size()){c.keys().each(function(d){this.inc.unset(d)},this)}}else{this.data=c}}this.uidlist=(b.update)?a:(this.uidlist.size()?this.uidlist.merge(a):a);if(b.update){this.rowlist=$H()}a.each(function(d){this.rowlist.set(d.value,d.key)},this)},sliceLoaded:function(a){return!this._rangeCheck($A($R(a+1,Math.min(a+this.vp.getPageSize()-1,this.getMetaData("total_rows")))))},isNearingLimit:function(a){if(this.uidlist.size()!=this.getMetaData("total_rows")){if(a!=0&&this._rangeCheck($A($R(Math.max(a+1-this._limitTolerance(),1),a)))){return"top"}else{if(this._rangeCheck($A($R(a+1,Math.min(a+this._limitTolerance()+this.vp.getPageSize()-1,this.getMetaData("total_rows")))).reverse())){return"bottom"}}}return false},_rangeCheck:function(a){var b=this.inc.size();return a.any(function(d){var c=this.rowlist.get(d);return(Object.isUndefined(c)||(b&&this.inc.get(c)))},this)},getData:function(a){return a.collect(function(b){var c=this.data.get(b);if(!Object.isUndefined(c)){c.domid="vp_row"+b;c.rownum=this.uidlist.get(b);c.vp_id=b;return c}},this).compact()},getAllUIDs:function(){return this.uidlist.keys()},getAllRows:function(){return this.rowlist.keys()},rowsToUIDs:function(a){return a.collect(function(b){return this.rowlist.get(b)},this).compact()},select:function(a){this.selected.add("uid",a.get("uid"))},deselect:function(c,b){var a=this.selected.size();if(b){this.selected.clear()}else{this.selected.remove("uid",c.get("uid"))}return a!=this.selected.size()},getSelected:function(){return this.selected},remove:function(b){var c=b.min(),d,e=this.rowlist.size(),a=0;d=e-b.size();return this.rowlist.keys().each(function(h){if(h>=c){var g=this.rowlist.get(h),f;if(b.include(h)){this.data.unset(g);this.uidlist.unset(g);a++}else{if(a){f=h-a;this.rowlist.set(f,g);this.uidlist.set(g,f)}}if(h>d){this.rowlist.unset(h)}}},this)},clear:function(){this.data=$H();this.inc=$H();this.mdata=$H({total_rows:0});this.rowlist=$H();this.selected=new ViewPort_Selection(this);this.uidlist=$H()},getMetaData:function(a){return this.mdata.get(a)},setMetaData:function(a){this.mdata.update(a)}}),ViewPort_Filter=Class.create({initialize:function(a,b,c){this.vp=a;this.action=b;this.callback=c;this.filterid=0;this.filtering=this.last_filter=this.last_folder=this.last_folder_params=null},filter:function(d,b){b=b||{};if(d===null){d=this.last_filter}else{d=d.toLowerCase();if(d==this.last_filter){return}}if(!d){this.clear();return}this.last_filter=d;if(this.filtering){this.vp._fetchBuffer({offset:0,params:b});return}this.filtering=++this.filterid+"%search%";this.last_folder=this.vp.view;this.last_folder_params=this.vp.getMetaData("additional_params").merge(b);var e=this.vp.opts.content,a;a=e.childElements().findAll(function(c){return c.collectTextNodes().toLowerCase().indexOf(d)==-1});if(this.vp.opts.onClearRows){this.vp.opts.onClearRows(a)}a.invoke("remove");this.vp.scroller.clear();if(this.vp.opts.empty&&!e.childElements().size()){e.update(this.vp.opts.empty.innerHTML)}this.vp.loadView(this.filtering,this.last_folder_params)},isFiltering:function(){return this.filtering},getAction:function(){return this.action},addFilterParams:function(a){if(!this.filtering){return a}a.update({filter:this.last_filter});if(this.callback){a.update(this.callback())}return a},clear:function(a){if(this.filtering){this.filtering=null;if(!a){this.vp.loadView(this.last_folder,this.last_folder_params)}this.vp.deleteView(this.filtering);this.last_filter=this.last_folder=null}}}),ViewPort_Selection=Class.create({initialize:function(a,c,b){this.buffer=a;this.clear();if(!Object.isUndefined(c)){this.add(c,b)}this.viewport_selection=true},add:function(a,b){var e=this._convert(a,b);this.data=(this.data.size())?this.data.concat(e).uniq():e},remove:function(a,b){this.data=this.data.diff(this._convert(a,b))},_convert:function(a,b){b=Object.isArray(b)?b:[b];switch(a){case"dataob":return b.pluck("vp_id");case"div":return b.pluck("id").invoke("substring",6);case"domid":return b.invoke("substring",6);case"rownum":return this.buffer.rowsToUIDs(b);case"uid":return b}},clear:function(){this.data=[]},get:function(a){a=Object.isUndefined(a)?"uid":a;if(a=="uid"){return this.data}var b=this.buffer.getData(this.data);switch(a){case"dataob":return b;case"div":return b.pluck("domid").collect(function(c){return $(c)}).compact();case"domid":return b.pluck("domid");case"rownum":return b.pluck("rownum")}},contains:function(a,b){return this.data.include(this._convert(a,b).first())},search:function(a){return new ViewPort_Selection(this.buffer,"uid",this.get("dataob").findAll(function(b){return $H(a).all(function(c){return $H(c.value).all(function(d){switch(d.key){case"equal":case"not":var e=b[c.key]&&d.value.include(b[c.key]);return(d.key=="equal")?e:!e;case"regex":return b[c.key].match(d.value)}})})}).pluck("vp_id"))},size:function(){return this.data.size()},set:function(a){this.get("dataob").each(function(b){$H(a).each(function(c){b[c.key]=c.value})})},getBuffer:function(){return this.buffer}});Object.extend(Array.prototype,{diff:function(a){return this.select(function(b){return!a.include(b)})},numericSort:function(){return this.sort(function(d,c){return(d>c)?1:((d<c)?-1:0)})}});
\ No newline at end of file
}
}.bind(this),
onCachedList: function(id) {
+ var tmp, tmp2;
if (!this.cacheids[id]) {
- var out = {};
- this.viewport.getViewportSelection(id).get('dataob').each(function(d) {
- if (!out[d.view]) {
- out[d.view] = [ parseInt(d.imapuid, 10) ];
+ tmp = this.viewport.getViewportSelection(id).get('uid');
+ if (tmp.size()) {
+ if (this.viewport.getMetaData('search', id)) {
+ tmp = tmp.toJSON();
} else {
- out[d.view].push(parseInt(d.imapuid, 10));
+ tmp2 = {};
+ tmp2[id] = tmp;
+ tmp = DimpCore.toRangeString(tmp2);
}
- });
- this.cacheids[id] = DimpCore.toRangeString(out);
+ } else {
+ tmp = '';
+ }
+
+ this.cacheids[id] = tmp;
}
return this.cacheids[id];
}.bind(this),
loadPreview: function(data, params)
{
- var pp = $('previewPane'), pp_offset;
+ var pp = $('previewPane'), pp_offset, pp_uid;
if (!pp.visible()) {
return;
}
if (!params) {
- if (this.pp && this.pp == data) {
+ if (this.pp &&
+ this.pp.imapuid == data.imapuid &&
+ this.pp.view == data.view) {
return;
}
this.pp = data;
+ pp_uid = data.imapuid + data.view;
- if (this.ppfifo.indexOf(this.pp.vp_id) != -1) {
- return this._loadPreviewCallback(this.ppcache[this.pp.vp_id]);
+ if (this.ppfifo.indexOf(pp_uid) != -1) {
+ return this._loadPreviewCallback(this.ppcache[pp_uid]);
}
}
_loadPreviewCallback: function(resp)
{
- var row, search, tmp, tmp2,
+ var ppuid, row, search, tmp, tmp2,
pm = $('previewMsg'),
r = resp.response,
t = $('msgHeadersContent').down('THEAD');
if (!r.error) {
- search = this.viewport.getViewportSelection(r.view).search({ vp_id: { equal: [ r.uid ] } });
+ search = this.viewport.getViewportSelection().search({ imapuid: { equal: [ r.index ] }, view: { equal: [ r.folder ] } });
if (search.size()) {
row = search.get('dataob').first();
this.updateUnseenUID(row, 0);
}
if (this.pp &&
- this.pp.vp_id != r.uid) {
+ (this.pp.imapuid != r.index ||
+ this.pp.view != r.folder)) {
return;
}
}
// Store in cache.
- this._expirePPCache([ r.uid ]);
- this.ppcache[r.uid] = resp;
- this.ppfifo.push(r.uid);
+ ppuid = r.index + r.folder;
+ this._expirePPCache([ ppuid ]);
+ this.ppcache[ppuid] = resp;
+ this.ppfifo.push(ppuid);
DimpCore.removeAddressLinks(pm);
_deleteCallback: function(r)
{
- var search, uids = [];
+ var search = null, uids = [], vs;
this.msgListLoading(false);
this._pollFoldersCallback(r);
if (!r.uids || r.folder != this.folder) {
return;
}
+ r.uids = DimpCore.parseRangeString(r.uids);
// Need to convert uid list to listing of unique viewport IDs since
// we may be dealing with multiple mailboxes (i.e. virtual folders)
- $H(DimpCore.parseRangeString(r.uids)).each(function(pair) {
- pair.value.each(function(v) {
- uids.push(v + pair.key);
+ vs = this.viewport.getViewportSelection(this.folder);
+ if (vs.getBuffer().getMetaData('search')) {
+ $H(r.uids).each(function(pair) {
+ pair.value.each(function(v) {
+ uids.push(v + pair.key);
+ });
});
- });
- search = this.viewport.getViewportSelection().search({ vp_id: { equal: uids } });
+ search = this.viewport.getViewportSelection().search({ vp_id: { equal: uids } });
+ } else {
+ r.uids = r.uids[this.folder];
+ r.uids.each(function(f, u) {
+ uids.push(u + f);
+ }.curry(this.folder));
+ search = this.viewport.createSelection('uid', r.uids);
+ }
+
if (search.size()) {
if (r.remove) {
this.viewport.remove(search, { cacheid: r.cacheid, noupdate: r.viewport });
- this._expirePPCache(search.get('uid'));
+ this._expirePPCache(uids);
} else {
// Need this to catch spam deletions.
this.viewport.updateFlag(search, 'deletedmsg', true);
* instead of sending the action to the IMP handler. */
doAction: function(action, params, uids, callback, opts)
{
- var tmp = {};
+ var b, tmp = {};
if (!this.doActionOpts) {
this.doActionOpts = {
: DIMP.conf.URI_IMP + '/' + action;
if (uids) {
if (uids.viewport_selection) {
- uids.get('dataob').each(function(r) {
- if (!tmp[r.view]) {
- tmp[r.view] = [];
- }
- tmp[r.view].push(r.imapuid);
- });
+ b = uids.getBuffer();
+ if (b.getMetaData('search')) {
+ uids.get('dataob').each(function(r) {
+ if (!tmp[r.view]) {
+ tmp[r.view] = [];
+ }
+ tmp[r.view].push(r.imapuid);
+ });
+ } else {
+ tmp[b.getView()] = uids.get('uid');
+ }
uids = tmp;
}
params.set('uid', DimpCore.toRangeString(uids));
this.page_size = ps;
}
- buffer = this._getBuffer();
+ buffer = this._getBuffer(view);
if (buffer) {
if (!background && this.view) {
// Need to store current buffer to save current offset
this.scroller.clear();
}
- buffer = this._getBuffer(null, true);
+ buffer = this._getBuffer(view, true);
this.views.set(view, { buffer: buffer, offset: 0 });
this.setMetaData({ additional_params: $H(params) }, view);
if (search) {
addRequestParams: function(args, opts)
{
opts = opts || {};
- var cached = (this.opts.onCachedList ? this.opts.onCachedList(opts.view || this.view) : this._getBuffer(opts.view).getAllUIDs().toJSON()),
- cid = this.getMetaData('cacheid', opts.view),
+ var cid = this.getMetaData('cacheid', opts.view),
params = this.getMetaData('additional_params', opts.view).clone(),
- rowlist;
+ cached, rowlist;
+
if (cid) {
params.update({ cacheid: cid });
}
+
if (!opts.noslice) {
rowlist = this._getSliceBounds(this.currentOffset(), null, opts.view);
params.update({ slice_start: rowlist.start, slice_end: rowlist.end });
}
+
+ if (this.opts.onCachedList) {
+ cached = this.opts.onCachedList(opts.view || this.view);
+ } else {
+ cached = this._getBuffer(opts.view).getAllUIDs();
+ cached = cached.size()
+ ? cached.toJSON()
+ : '';
+ }
if (cached.length) {
params.update({ cached: cached });
}
_getBuffer: function(view, create)
{
+ view = view || this.view;
if (!create) {
- var b = this.views.get(view || this.view);
+ var b = this.views.get(view);
if (b) {
return b.buffer;
}
}
- return new ViewPort_Buffer(this, this.opts.buffer_pages, this.opts.limit_factor);
+ return new ViewPort_Buffer(this, this.opts.buffer_pages, this.opts.limit_factor, view);
},
currentOffset: function()
*/
ViewPort_Buffer = Class.create({
- initialize: function(vp, b_pages, l_factor)
+ initialize: function(vp, b_pages, l_factor, view)
{
this.bufferPages = b_pages;
this.limitFactor = l_factor;
this.vp = vp;
+ this.view = view;
this.clear();
},
+ getView: function()
+ {
+ return this.view;
+ },
+
_limitTolerance: function()
{
return Math.round(this.bufferSize() * (this.limitFactor / 100));
d[v.key] = v.value;
});
});
+ },
+
+ getBuffer: function()
+ {
+ return this.buffer;
}
});
<?php
/**
- * DIMP ListMessages view logic. Abstracted out here to prevent imp.php from
- * becoming too cluttered.
+ * Dynamic (dimp) message list logic.
*
* Copyright 2005-2008 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
+ * @author Michael Slusarz <slusarz@horde.org>
* @package IMP
*/
class IMP_Views_ListMessages
if (IMP::isSpecialFolder($folder)) {
$md->special = 1;
}
+ $md->search = $GLOBALS['imp_search']->isSearchMbox($folder);
/* Check for mailbox existence now. If there are no messages, there
* is a chance that the mailbox doesn't exist. If there is at least
return $result;
}
+ /* Get the cached list. */
+ if (empty($args['cached'])) {
+ $cached = array();
+ } else {
+ if ($md->search) {
+ $cached = Horde_Serialize::unserialize($args['cached'], SERIALIZE_JSON);
+ } else {
+ $cached = IMP::toRangeString($args['cached']);
+ $cached = reset($cached);
+ }
+ $cached = array_flip($cached);
+ }
+
/* Generate the message list and the UID -> rownumber list. */
$msglist = $rowlist = array();
foreach (range($slice_start, $slice_end) as $key) {
- $msglist[$key] = $sorted_list['s'][$key];
- $rowlist[$msglist[$key] . ((isset($sorted_list['m'][$key]['m'])) ? $sorted_list['m'][$key]['m'] : $folder)] = $key;
+ $uid = $sorted_list['s'][$key] .
+ (isset($sorted_list['m'][$key]['m'])
+ ? $sorted_list['m'][$key]['m']
+ : '');
+ if (!isset($cached[$uid])) {
+ $msglist[$key] = $sorted_list['s'][$key];
+ $rowlist[$uid] = $key;
+ }
}
$result->rowlist = $rowlist;
/* Build the overview list. */
- $result->data = $this->_getOverviewData($imp_mailbox, $folder, array_keys(array_diff($msglist, IMP::parseRangeString($args['cached']))));
+ $result->data = $this->_getOverviewData($imp_mailbox, $folder, array_keys($msglist), $md->search);
/* Get unseen/thread information. */
if (is_null($search_id)) {
* ID/Rownum/UID/Mailbox mapping. Used to select slices without needing
* to obtain IMAP information for all messages in the slice.
*
- * @var string $folder The current folder.
- * @var integer $start Starting row number.
- * @var integer $length Slice length.
+ * @param string $folder The current folder.
+ * @param integer $start Starting row number.
+ * @param integer $length Slice length.
*
* @return array The minimal message list.
*/
$sorted_list = $imp_mailbox->getSortedList();
$data = array();
for ($i = $start; $i < $end; ++$i) {
- $mbox = (empty($sorted_list['m'][$i])) ? $folder : $sorted_list['m'][$i];
$id = $sorted_list['s'][$i];
- $data[$id . $mbox] = array(
+ $data[$id . (empty($sorted_list['m'][$i]) ? '': $sorted_list['m'][$i])] = array(
'imapuid' => $id,
'rownum' => $i
);
/**
* Obtains IMAP overview data for a given set of message UIDs.
*
- * @param object IMP_Mailbox $imp_mailbox An IMP_Mailbox:: object.
- * @param string $folder The current folder.
- * @param array $msglist The list of message sequence
- * numbers to process.
+ * @param IMP_Mailbox $imp_mailbox An IMP_Mailbox:: object.
+ * @param string $folder The current folder.
+ * @param array $msglist The list of message sequence numbers
+ * to process.
+ * @param boolean $search Is this a search mbox?
*
* @return array TODO
*/
- private function _getOverviewData($imp_mailbox, $folder, $msglist)
+ private function _getOverviewData($imp_mailbox, $folder, $msglist, $search)
{
$msgs = array();
$msg['listmsg'] = 1;
}
- /* Need both UID and mailbox to create a unique ID string. */
- $msgs[$ob['uid'] . $ob['mailbox']] = $msg;
+ /* Need both UID and mailbox to create a unique ID string if
+ * using a search mailbox. Otherwise, use only the UID. */
+ if ($search) {
+ $msgs[$ob['uid'] . $ob['mailbox']] = $msg;
+ } else {
+ $msgs[$ob['uid']] = $msg;
+ }
}
return $msgs;
* 'msgtext' - The text of the message
* 'priority' - The X-Priority of the message ('low', 'high', 'normal')
* 'to' - The To addresses
- * 'uid' - The unique UID of this message
*
* FOR PREVIEW MODE:
* 'fulldate' - The fully formatted date
$result = array(
'folder' => $folder,
- 'index' => $index,
- 'uid' => $index . $folder,
+ 'index' => $index
);
/* Set the current time zone. */