/**
* (Manage)Sieve Filters plugin
*
* @licstart The following is the entire license notice for the
* JavaScript code in this file.
*
* Copyright (c) 2012-2014, The Roundcube Dev Team
*
* The JavaScript code in this page is free software: you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* @licend The above is the entire license notice
* for the JavaScript code in this file.
*/
window.rcmail&&rcmail.addEventListener("init",function(a){"mail"==rcmail.env.task&&("show"!=rcmail.env.action?rcmail.env.message_commands.push("managesieve-create"):rcmail.enable_command("managesieve-create",!0));"mail"!=rcmail.env.task&&!rcmail.env.action.startsWith("plugin.managesieve")||rcmail.env.framed||(rcmail.env.ms_tip_layer=$('
'),rcmail.env.ms_tip_layer.appendTo(document.body));rcmail.register_command("plugin.managesieve-save",function(){rcmail.managesieve_save()});
rcmail.register_command("plugin.managesieve-act",function(){rcmail.managesieve_act()});rcmail.register_command("plugin.managesieve-add",function(){rcmail.managesieve_add()});rcmail.register_command("plugin.managesieve-del",function(){rcmail.managesieve_del()});rcmail.register_command("plugin.managesieve-move",function(){rcmail.managesieve_move()});rcmail.register_command("plugin.managesieve-setadd",function(){rcmail.managesieve_setadd()});rcmail.register_command("plugin.managesieve-setdel",function(){rcmail.managesieve_setdel()});
rcmail.register_command("plugin.managesieve-setact",function(){rcmail.managesieve_setact()});rcmail.register_command("plugin.managesieve-setget",function(){rcmail.managesieve_setget()});rcmail.register_command("plugin.managesieve-seteditraw",function(){rcmail.managesieve_seteditraw()});rcmail.env.action.startsWith("plugin.managesieve")&&(rcmail.gui_objects.sieveform?(rcmail.enable_command("plugin.managesieve-save",!0),sieve_form_init()):rcmail.gui_objects.sievesetrawform?(rcmail.enable_command("plugin.managesieve-save",
!0),sieve_raw_editor_init()):rcmail.enable_command("plugin.managesieve-add","plugin.managesieve-setadd",!rcmail.env.sieveconnerror),a=rcmail.env.currentset,rcmail.gui_objects.filterslist&&(rcmail.filters_list=new rcube_list_widget(rcmail.gui_objects.filterslist,{multiselect:!1,draggable:!0,keyboard:!0}),rcmail.filters_list.addEventListener("select",function(a){rcmail.managesieve_select(a)}).addEventListener("dragstart",function(a){rcmail.managesieve_dragstart(a)}).addEventListener("dragend",function(a){rcmail.managesieve_dragend(a)}).addEventListener("initrow",
function(a){a.obj.onmouseover=function(){rcmail.managesieve_focus_filter(a)};a.obj.onmouseout=function(){rcmail.managesieve_unfocus_filter(a)}}).init()),rcmail.gui_objects.filtersetslist&&(rcmail.filtersets_list=new rcube_list_widget(rcmail.gui_objects.filtersetslist,{multiselect:!1,draggable:!1,keyboard:!0}),rcmail.filtersets_list.init().focus(),null!=a&&(a=rcmail.managesieve_setid(a),rcmail.filtersets_list.select(a)),rcmail.filtersets_list.addEventListener("select",function(a){rcmail.managesieve_setselect(a)}),
a=rcmail.filtersets_list.rowcount,rcmail.enable_command("plugin.managesieve-set",!0),rcmail.enable_command("plugin.managesieve-setact","plugin.managesieve-setget",0c&&(this.uid=a-1,$(this).attr("id","rcmrow"+this.uid))}});d.init();break;case "update":var e;e=$("#rcmrow"+this.managesieve_rowid(b.id));
b.name&&$("td",e).text(b.name);b.disabled?e.addClass("disabled"):e.removeClass("disabled");$("#disabled",$("iframe").contents()).prop("checked",b.disabled);break;case "add":d=this.filters_list;e=$(' ');$("td",e).text(b.name);e.attr("id","rcmrow"+b.id);b.disabled&&e.addClass("disabled");d.insert_row(e.get(0));d.highlight_row(b.id);this.enable_command("plugin.managesieve-del","plugin.managesieve-act",!0);break;case "list":var f,l,k,d=this.filters_list;b.clear&&d.clear();
for(e in b.list)k=b.list[e],f=document.createElement("TR"),l=document.createElement("TD"),$(l).text(k.name),l.className="name",f.id="rcmrow"+k.id,k["class"]&&(f.className=k["class"]),f.appendChild(l),d.insert_row(f);b.set?d.highlight_row(b.set):this.enable_command("plugin.managesieve-del","plugin.managesieve-act",!1);break;case "setact":c=this.managesieve_setid(b.name);e=$("#rcmrow"+c);b.active?(b.all&&$("tr",this.gui_objects.filtersetslist).addClass("disabled"),e.removeClass("disabled")):e.addClass("disabled");
break;case "setdel":c=this.managesieve_setid(b.name);this.filtersets_list.remove_row(c);this.filters_list.clear();this.show_contentframe(!1);this.enable_command("plugin.managesieve-setdel","plugin.managesieve-setact","plugin.managesieve-setget",!1);delete this.env.filtersets[c];break;case "setadd":c="S"+(new Date).getTime();d=this.filtersets_list;e=$(' ');$("td",e).text(b.name);e.attr("id","rcmrow"+c);this.env.filtersets[c]=b.name;d.insert_row(e.get(0));
b.index!=d.rowcount-1&&(e.detach(),f=$("tr:visible",d.list).get(b.index),e.insertBefore(f));d.select(c);this.managesieve_fixdragend(e);break;case "refresh":this.reset_filters_list(!0)}this.set_busy(!1)};rcube_webmail.prototype.reset_filters_list=function(a){this.filters_list.clear_selection();this.enable_command("plugin.managesieve-act","plugin.managesieve-del",!1);a&&(a=this.filtersets_list.get_single_selection(),this.filters_list.clear(!0),this.managesieve_list(this.env.filtersets[a]))};
rcube_webmail.prototype.load_managesieveframe=function(a,b){b&&this.reset_filters_list();if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){var c=this.set_busy(!0,"loading");target=window.frames[this.env.contentframe];target.location.href=this.env.comm_path+"&_action=plugin.managesieve-action&_framed=1&_unlock="+c+(a?"&"+a:"")}};rcube_webmail.prototype.managesieve_dragstart=function(a){a=this.filters_list.get_single_selection();this.drag_active=!0;this.drag_filter=a};
rcube_webmail.prototype.managesieve_dragend=function(a){this.drag_active&&(this.drag_filter_target&&(a=this.set_busy(!0,"loading"),this.show_contentframe(!1),this.http_post("plugin.managesieve-action","_act=move&_fid="+this.drag_filter+"&_to="+this.drag_filter_target,a)),this.drag_active=!1)};rcube_webmail.prototype.managesieve_fixdragend=function(a){var b=this;$(a).on("mouseup"+(bw.iphone||bw.ipad?" touchend":""),function(a){b.drag_active&&b.filters_list.drag_mouse_up(a)})};
rcube_webmail.prototype.managesieve_focus_filter=function(a){var b=a.id.replace(/^rcmrow/,"");this.drag_active&&b!=this.drag_filter&&(this.drag_filter_target=b,$(a.obj).addClass(b'),d=a.value?a.value.split("\n"):[""];$("#"+b).length||($.each(d,function(b,d){c.append(smart_field_row(d,a.name,b,$(a).data("size")))}),c.attr("id",b),a=$(a),a.attr("disabled")?c.hide():a.prop("disabled",!0),a.after(c),a.hasClass("error")&&(c.addClass("error"),rcmail.managesieve_tip_register([[b,a.data("tip")]])))}
function smart_field_row(a,b,c,d){c=$(' ');a={value:a,name:b+"[]"};d&&(a.size=d);$("input",c).attr(a).keydown(function(a){var b=$(this);if(13==a.which){a=b.attr("name").replace(/\[\]$/,"");var c=(new Date).getTime();a=smart_field_row("",a,c,d);b.parent().after(a);$("input",a).focus()}else if((8==a.which||46==a.which)&&""==b.val()&&(b=b.parent(),1 iframe":"#filter-box",parent.document).offset(),k+=b.top,e+=b.left);d.html(a.data("tip"));k-=d.height();d.css({left:e,top:k,minWidth:m-2+"px"}).show()})};
function sieve_formattime(a,b){var c,d,e="",f=rcmail.env.time_format||"H:i";for(c=0;ca?"0":"")+a;break;case "G":e+=a;break;case "H":e+=(10>a?"0":"")+a;break;case "i":e+=(10>b?"0":"")+b;break;case "s":e+="00";default:e+=d}return e}
function sieve_form_init(){var a=rcmail.gui_objects.sieveform;"plugin.managesieve"==rcmail.env.action&&"mail"==rcmail.env.task&&parent.rcmail.managesieve_dialog_resize(a);$('input[type="text"]:first',a).focus();$('textarea[data-type="list"]',a).each(function(){smart_field_init(this)});$('[name="_header[]"]',a).each(function(){/([0-9]+)$/.test(this.id)&&rule_header_select(RegExp.$1)});$.datepicker&&rcmail.env.date_format&&($.datepicker.setDefaults({dateFormat:rcmail.env.date_format,changeMonth:!0,
showOtherMonths:!0,selectOtherMonths:!0,onSelect:function(a){$(this).focus().val(a)}}),$("input.datepicker").datepicker());$("#vacation_timefrom, #vacation_timeto").attr("autocomplete","off").autocomplete({delay:100,minLength:1,source:function(a,c){var b,e=[];for(b=0;24>b;b++)e.push(sieve_formattime(b,0));e.push(sieve_formattime(23,59));return c(e)},open:function(a,c){var b=$(this),e=b.val(),f=b.autocomplete("widget").css("width","10em"),l=b.data("ui-autocomplete").menu;e&&e.length&&f.children().each(function(){var a=
$(this);0==a.text().indexOf(e)&&l._scrollIntoView(a)})},select:function(a,c){$(this).val(c.item.value);return!1}}).click(function(){$(this).autocomplete("search",$(this).val()||" ")});$("input.error").each(function(){String(this.id).match(/([0-9]+)$/)&&$("#ruleadv"+RegExp.$1+".show").click()})}var cmeditor;function cmCreateErrorElem(a){var b=document.createElement("div");b.style.color="#822";b.innerHTML="\u25cf";b.title=a;return b}
function cmScrollToError(){var a=$(".CodeMirror-lines .line-error"),b=$(".CodeMirror-scroll");a.parent();b.scrollTop(a.offset().top-b.offset().top-Math.round(b.height()/2))}
function sieve_raw_editor_init(){var a=document.getElementById("rawfiltersettxt");a&&!cmeditor&&(cmeditor=CodeMirror.fromTextArea(a,{mode:"sieve",lineNumbers:!0,gutters:["CodeMirror-linenumbers","errorGutter"],styleActiveLine:!0}),$.each(rcmail.env.sieve_errors||[],function(a,c){var b=Number(c.line)-1;cmeditor.addLineClass(b,"background","line-error");cmeditor.setGutterMarker(b,"errorGutter",cmCreateErrorElem(c.msg));a||cmScrollToError()}))}
rcube_webmail.prototype.managesieve_create=function(a){if(!a&&"show"!=this.env.action){var b=this.message_list.get_single_selection();a=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_uid:b},a)}else if(this.env.sieve_headers&&this.env.sieve_headers.length){var c={},d=$("#sievefilterform");d.length||(d=$('
'),$("body").append(d));a=""+this.get_label("managesieve.usedata")+" ");c[this.get_label("managesieve.nextstep")]=function(){var a=$('input[name="headers[]"]:checked',d);if(a.length){var b=rcmail.get_task_url("mail"),b=rcmail.add_url(b,"_action","plugin.managesieve"),b=rcmail.add_url(b,"_framed",1);a.map(function(){var a=rcmail.env.sieve_headers[this.value];b=rcmail.add_url(b,"r["+this.value+"]",
a[0]+":"+a[1])});a=$("