Index: /trunk/plugins/managesieve/Changelog
===================================================================
--- /trunk/plugins/managesieve/Changelog	(revision 3591)
+++ /trunk/plugins/managesieve/Changelog	(revision 3592)
@@ -1,3 +1,4 @@
 - Fix filters set label after activation
+- Fix filters set activation, add possibility to deactivate sets (#1486699)
 
 * version 2.4 [2010-04-01]
Index: /trunk/plugins/managesieve/lib/rcube_sieve.php
===================================================================
--- /trunk/plugins/managesieve/lib/rcube_sieve.php	(revision 3591)
+++ /trunk/plugins/managesieve/lib/rcube_sieve.php	(revision 3592)
@@ -19,4 +19,5 @@
 define('SIEVE_ERROR_DELETE', 6);	// script deletion
 define('SIEVE_ERROR_INTERNAL', 7);	// internal error
+define('SIEVE_ERROR_DEACTIVATE', 8);	// script activation
 define('SIEVE_ERROR_OTHER', 255);	// other/unknown error
 
@@ -45,5 +46,5 @@
 			    $usetls=true, $disabled=array(), $debug=false)
     {
-	$this->sieve = new Net_Sieve();
+	    $this->sieve = new Net_Sieve();
       
         if ($debug)
@@ -68,5 +69,5 @@
     public function error()
     {
-	return $this->error ? $this->error : false;
+	    return $this->error ? $this->error : false;
     }
 			    
@@ -79,14 +80,14 @@
     	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
 	
-	if (!$this->script)
-	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
+	    if (!$this->script)
+	        return $this->_set_error(SIEVE_ERROR_INTERNAL);
 	
-	if (!$name)
-	    $name = $this->current;
+	    if (!$name)
+	        $name = $this->current;
 
         $script = $this->script->as_text();
 
         if (!$script)
-	    $script = '/* empty script */';
+	        $script = '/* empty script */';
 
         if (PEAR::isError($this->sieve->installScript($name, $script)))
@@ -105,5 +106,5 @@
 	
         if (!$content)
-	    $content = '/* empty script */';
+	        $content = '/* empty script */';
 
         if (PEAR::isError($this->sieve->installScript($name, $content)))
@@ -118,9 +119,9 @@
     public function activate($name = null)
     {
-	if (!$this->sieve)
+	    if (!$this->sieve)
     	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
 
-	if (!$name)
-	    $name = $this->current;
+	    if (!$name)
+	        $name = $this->current;
 
         if (PEAR::isError($this->sieve->setActive($name)))
@@ -131,24 +132,38 @@
 
     /**
+    * De-activates specified script
+    */
+    public function deactivate()
+    {
+	    if (!$this->sieve)
+    	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
+
+        if (PEAR::isError($this->sieve->setActive('')))
+    	    return $this->_set_error(SIEVE_ERROR_DEACTIVATE);
+
+        return true;
+    }
+
+    /**
     * Removes specified script
     */
     public function remove($name = null)
     {
-	if (!$this->sieve)
+	    if (!$this->sieve)
     	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
 
-	if (!$name)
-	    $name = $this->current;
-
-	// script must be deactivated first
-	if ($name == $this->sieve->getActive())
+	    if (!$name)
+	        $name = $this->current;
+
+	    // script must be deactivated first
+	    if ($name == $this->sieve->getActive())
             if (PEAR::isError($this->sieve->setActive('')))
-    		return $this->_set_error(SIEVE_ERROR_DELETE);
+    		    return $this->_set_error(SIEVE_ERROR_DELETE);
 
         if (PEAR::isError($this->sieve->removeScript($name)))
-    	    return $this->_set_error(SIEVE_ERROR_DELETE);
-
-	if ($name == $this->current)
-	    $this->current = null;
+            return $this->_set_error(SIEVE_ERROR_DELETE);
+
+	    if ($name == $this->current)
+	        $this->current = null;
 
         return true;
@@ -161,16 +176,16 @@
     {
         if (!$this->sieve)
-	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
+	        return $this->_set_error(SIEVE_ERROR_INTERNAL);
 	
-	$ext = $this->sieve->getExtensions();
-	// we're working on lower-cased names
-	$ext = array_map('strtolower', (array) $ext); 
-
-	if ($this->script) {
-	    $supported = $this->script->get_extensions();
-	    foreach ($ext as $idx => $ext_name)
-	        if (!in_array($ext_name, $supported))
-		    unset($ext[$idx]);
-	}
+	    $ext = $this->sieve->getExtensions();
+	    // we're working on lower-cased names
+	    $ext = array_map('strtolower', (array) $ext); 
+
+	    if ($this->script) {
+	        $supported = $this->script->get_extensions();
+	        foreach ($ext as $idx => $ext_name)
+	            if (!in_array($ext_name, $supported))
+		            unset($ext[$idx]);
+	    }
 
     	return array_values($ext);
@@ -184,12 +199,12 @@
         if (!$this->list) {
 
-    	    if (!$this->sieve)
-        	return $this->_set_error(SIEVE_ERROR_INTERNAL);
+            if (!$this->sieve)
+        	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
     
     	    $this->list = $this->sieve->listScripts();
 
     	    if (PEAR::isError($this->list))
-    		return $this->_set_error(SIEVE_ERROR_OTHER);
-	}
+    		    return $this->_set_error(SIEVE_ERROR_OTHER);
+	    }
 
         return $this->list;
@@ -201,8 +216,8 @@
     public function get_active()
     {
-	if (!$this->sieve)
+	    if (!$this->sieve)
     	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
 
-	return $this->sieve->getActive();
+	    return $this->sieve->getActive();
     }
     
@@ -223,5 +238,5 @@
     	    return $this->_set_error(SIEVE_ERROR_OTHER);
 
-	// try to parse from Roundcube format
+	    // try to parse from Roundcube format
         $this->script = $this->_parse($script);
 
@@ -239,5 +254,5 @@
     	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
 
-	// try to parse from Roundcube format
+	    // try to parse from Roundcube format
         $this->script = $this->_parse($script);
     }
@@ -248,5 +263,5 @@
     private function _parse($txt)
     {
-	// try to parse from Roundcube format
+	    // try to parse from Roundcube format
         $script = new rcube_sieve_script($txt, $this->disabled);
 
@@ -297,12 +312,12 @@
     	    return $this->_set_error(SIEVE_ERROR_INTERNAL);
 
-	if ($copy) {
+	    if ($copy) {
     	    $content = $this->sieve->getScript($copy);
     
     	    if (PEAR::isError($content))
-    		return $this->_set_error(SIEVE_ERROR_OTHER);
-	}
+    		    return $this->_set_error(SIEVE_ERROR_OTHER);
+	    }
 	
-	return $this->save_script($name, $content);
+	    return $this->save_script($name, $content);
     }
 
@@ -315,11 +330,11 @@
         if ($tokens = preg_split('/(#START_SIEVE_RULE.*END_SIEVE_RULE)\n/', $script, -1, PREG_SPLIT_DELIM_CAPTURE)) {
     	    foreach($tokens as $token) {
-        	if (preg_match('/^#START_SIEVE_RULE.*/', $token, $matches)) {
-	    	    $name[$i] = "unnamed rule ".($i+1);
+        	    if (preg_match('/^#START_SIEVE_RULE.*/', $token, $matches)) {
+	    	        $name[$i] = "unnamed rule ".($i+1);
                     $content .= "# rule:[".$name[$i]."]\n";
                 }
-        	elseif (isset($name[$i])) {
-	    	    $content .= "if $token\n";
-		    $i++;
+        	    elseif (isset($name[$i])) {
+	    	        $content .= "if $token\n";
+		            $i++;
                 }
             }
@@ -345,5 +360,5 @@
     private function _set_error($error)
     {
-	$this->error = $error;
+	    $this->error = $error;
         return false;
     }
@@ -405,6 +420,6 @@
             if (!isset($names[$elem['name']])) {
                 array_push($this->content, $elem);
-	        $result = true;
-	    }
+	            $result = true;
+	        }
         }
 
@@ -429,6 +444,6 @@
         if(isset($this->content[$index])) {
             unset($this->content[$index]);
-	    return true;
-	}
+	        return true;
+	    }
         return false;
     }
@@ -443,7 +458,7 @@
         // TODO: check this->supported
         if ($this->content[$index]) {
-	    $this->content[$index] = $content;
-	    return $index;
-	}
+	        $this->content[$index] = $content;
+	        return $index;
+	    }
         return false;
     }
Index: /trunk/plugins/managesieve/localization/en_US.inc
===================================================================
--- /trunk/plugins/managesieve/localization/en_US.inc	(revision 3591)
+++ /trunk/plugins/managesieve/localization/en_US.inc	(revision 3592)
@@ -41,4 +41,5 @@
 $labels['filtersetdel'] = 'Delete current filters set';
 $labels['filtersetact'] = 'Activate current filters set';
+$labels['filtersetdeact'] = 'Deactivate current filters set';
 $labels['filtersetget'] = 'Download filters set in text format';
 $labels['filterdef'] = 'Filter definition';
@@ -64,6 +65,8 @@
 $messages['cannotbeempty'] = 'Field cannot be empty';
 $messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occured';
+$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occured';
 $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured';
 $messages['setactivated'] = 'Filters set activated successfully';
+$messages['setdeactivated'] = 'Filters set deactivated successfully';
 $messages['setdeleted'] = 'Filters set deleted successfully';
 $messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
Index: /trunk/plugins/managesieve/localization/pl_PL.inc
===================================================================
--- /trunk/plugins/managesieve/localization/pl_PL.inc	(revision 3591)
+++ /trunk/plugins/managesieve/localization/pl_PL.inc	(revision 3592)
@@ -51,4 +51,6 @@
 $labels['filtersetact'] = 'Aktywuj bierzÄ
 cy zbiÃ³r filtrÃ³w';
+$labels['filtersetdeact'] = 'Deaktywuj bierzÄ
+cy zbiÃ³r filtrÃ³w';
 $labels['filtersetget'] = 'Pobierz bierzÄ
 cy zbiÃ³r filtrÃ³w w formacie tekstowym';
@@ -90,8 +92,11 @@
 $messages['setactivateerror'] = 'Nie moÅŒna aktywowaÄ wybranego zbioru filtrÃ³w. BÅÄ
 d serwera';
+$messages['setdeactivateerror'] = 'Nie moÅŒna deaktywowaÄ wybranego zbioru filtrÃ³w. BÅÄ
+d serwera';
 $messages['setdeleteerror'] = 'Nie moÅŒna usunÄ
 Ä wybranego zbioru filtrÃ³w. BÅÄ
 d serwera';
 $messages['setactivated'] = 'ZbiÃ³r filtrÃ³w zostaÅ aktywowany pomyÅlnie';
+$messages['setdeactivated'] = 'ZbiÃ³r filtrÃ³w zostaÅ deaktywowany pomyÅlnie';
 $messages['setdeleted'] = 'ZbiÃ³r filtrÃ³w zostaÅ usuniÄty pomyÅlnie';
 $messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunÄ
Index: /trunk/plugins/managesieve/managesieve.js
===================================================================
--- /trunk/plugins/managesieve/managesieve.js	(revision 3591)
+++ /trunk/plugins/managesieve/managesieve.js	(revision 3592)
@@ -3,12 +3,11 @@
 if (window.rcmail) {
   rcmail.addEventListener('init', function(evt) {
-    // <span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span>
+
     var tab = $('<span>').attr('id', 'settingstabpluginmanagesieve').addClass('tablink');
-    
     var button = $('<a>').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve')
-	.attr('title', rcmail.gettext('managesieve.managefilters'))
-	.html(rcmail.gettext('managesieve.filters'))
-	.bind('click', function(e){ return rcmail.command('plugin.managesieve', this) })
-	.appendTo(tab);
+	  .attr('title', rcmail.gettext('managesieve.managefilters'))
+	  .html(rcmail.gettext('managesieve.filters'))
+	  .bind('click', function(e){ return rcmail.command('plugin.managesieve', this) })
+	  .appendTo(tab);
 
     // add button and register commands
@@ -26,283 +25,275 @@
     rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() }, true);
 
-    if (rcmail.env.action == 'plugin.managesieve')
-      {
-	if (rcmail.gui_objects.sieveform) {
-	  rcmail.enable_command('plugin.managesieve-save', true);
-	}
-        else {
-	  rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up',
-	    'plugin.managesieve-down', false);
-          rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
-	  rcmail.enable_command('plugin.managesieve-set', 'plugin.managesieve-setget',
-            rcmail.gui_objects.filtersetslist != null);
-	  rcmail.enable_command('plugin.managesieve-setact',
-	    (rcmail.gui_objects.filtersetslist && rcmail.gui_objects.filtersetslist.length > 1
-		&& rcmail.gui_objects.filtersetslist.value != rcmail.env.active_set));
-	  rcmail.enable_command('plugin.managesieve-setdel',
-	    (rcmail.gui_objects.filtersetslist && rcmail.gui_objects.filtersetslist.length > 1));
-	}
-        if (rcmail.gui_objects.filterslist) {
+    if (rcmail.env.action == 'plugin.managesieve') {
+	  if (rcmail.gui_objects.sieveform) {
+	    rcmail.enable_command('plugin.managesieve-save', true);
+	  }
+      else {
+	    rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up',
+	      'plugin.managesieve-down', false);
+        rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
+	  }
+
+      if (rcmail.gui_objects.filterslist) {
 	    var p = rcmail;
-    	    rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false});
-    	    rcmail.filters_list.addEventListener('select', function(o){ p.managesieve_select(o); });
-    	    rcmail.filters_list.init();
-    	    rcmail.filters_list.focus();
-	  }
-      }
+    	rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false});
+    	rcmail.filters_list.addEventListener('select', function(o){ p.managesieve_select(o); });
+    	rcmail.filters_list.init();
+    	rcmail.filters_list.focus();
+
+	    rcmail.enable_command('plugin.managesieve-set', 'plugin.managesieve-setget', true);
+	    rcmail.enable_command('plugin.managesieve-setact', rcmail.gui_objects.filtersetslist.length);
+	    rcmail.enable_command('plugin.managesieve-setdel', rcmail.gui_objects.filtersetslist.length > 1);
+
+        $('#'+rcmail.buttons['plugin.managesieve-setact'][0].id).attr('title', rcmail.gettext('managesieve.filterset'
+          + (rcmail.gui_objects.filtersetslist.value == rcmail.env.active_set ? 'deact' : 'act')));
+	  }
+    }
     if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled)
       $('#disabled').attr('checked', true);
   });
-
-  /*********************************************************/
-  /*********     Managesieve filters methods       *********/
-  /*********************************************************/
-
-  rcube_webmail.prototype.managesieve_add = function()
-    {
-      this.load_managesieveframe();
-      this.filters_list.clear_selection();
-    };
-
-  rcube_webmail.prototype.managesieve_del = function()
-    {
-    var id = this.filters_list.get_single_selection();
-
-    if (confirm(this.get_label('managesieve.filterdeleteconfirm')))
-      this.http_request('plugin.managesieve',
-	    '_act=delete&_fid='+this.filters_list.rows[id].uid, true);
-    };
-
-  rcube_webmail.prototype.managesieve_up = function()
-    {
-    var id = this.filters_list.get_single_selection();
+};
+
+/*********************************************************/
+/*********     Managesieve filters methods       *********/
+/*********************************************************/
+
+rcube_webmail.prototype.managesieve_add = function()
+{
+  this.load_managesieveframe();
+  this.filters_list.clear_selection();
+};
+
+rcube_webmail.prototype.managesieve_del = function()
+{
+  var id = this.filters_list.get_single_selection();
+  if (confirm(this.get_label('managesieve.filterdeleteconfirm')))
     this.http_request('plugin.managesieve',
-    	    '_act=up&_fid='+this.filters_list.rows[id].uid, true);
-    };
-
-  rcube_webmail.prototype.managesieve_down = function()
-    {
-    var id = this.filters_list.get_single_selection();
-    this.http_request('plugin.managesieve',
-    	    '_act=down&_fid='+this.filters_list.rows[id].uid, true);
-    };
-
-  rcube_webmail.prototype.managesieve_rowid = function(id)
-    {
-    var rows = this.filters_list.rows;
+	  '_act=delete&_fid='+this.filters_list.rows[id].uid, true);
+};
+
+rcube_webmail.prototype.managesieve_up = function()
+{
+  var id = this.filters_list.get_single_selection();
+  this.http_request('plugin.managesieve',
+    '_act=up&_fid='+this.filters_list.rows[id].uid, true);
+};
+
+rcube_webmail.prototype.managesieve_down = function()
+{
+  var id = this.filters_list.get_single_selection();
+  this.http_request('plugin.managesieve',
+    '_act=down&_fid='+this.filters_list.rows[id].uid, true);
+};
+
+rcube_webmail.prototype.managesieve_rowid = function(id)
+{
+  var i, rows = this.filters_list.rows;
     
-    for (var i=0; i<rows.length; i++)
-      if (rows[i] != null && rows[i].uid == id)
-	return i;
-    }
-
-  rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled)
-    {
-    this.set_busy(true);
-
-    switch (action)
-      {
-      case 'delete':
-        this.filters_list.remove_row(this.managesieve_rowid(id));
-	this.filters_list.clear_selection();
-	this.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', 'plugin.managesieve-down', false);
-	this.show_contentframe(false);
-
-	// re-numbering filters
-        var rows = this.filters_list.rows;
-        for (var i=0; i<rows.length; i++)
-          {
-	  if (rows[i] != null && rows[i].uid > id)
-	    rows[i].uid = rows[i].uid-1;
-	  }
-	break;
-
-      case 'down':
-        var rows = this.filters_list.rows;
-	var from, fromstatus, status;
-
-	// we need only to replace filter names...
-        for (var i=0; i<rows.length; i++)
-        {
-	  if (rows[i]==null) { // removed row
-	    continue;
-          } else if (rows[i].uid == id) {
-	    from = rows[i].obj;
-            fromstatus = $(from).hasClass('disabled');
-	  } else if (rows[i].uid == id+1){
-	    name = rows[i].obj.cells[0].innerHTML;
-            status = $(rows[i].obj).hasClass('disabled');
-	    rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML;
-	    from.cells[0].innerHTML = name;
-            $(from)[status?'addClass':'removeClass']('disabled');
-            $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled');
-	    this.filters_list.highlight_row(i);
-	    break;
-	  }
-	}
-	// ... and disable/enable Down button
-	this.filters_listbuttons();
+  for (i=0; i<rows.length; i++)
+    if (rows[i] != null && rows[i].uid == id)
+
+  return i;
+}
+
+rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled)
+{
+  this.set_busy(true);
+
+  switch (action) {
+    case 'delete':
+      this.filters_list.remove_row(this.managesieve_rowid(id));
+	  this.filters_list.clear_selection();
+	  this.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', 'plugin.managesieve-down', false);
+	  this.show_contentframe(false);
+
+	  // re-numbering filters
+      var i, rows = this.filters_list.rows;
+      for (i=0; i<rows.length; i++) {
+	    if (rows[i] != null && rows[i].uid > id)
+	      rows[i].uid = rows[i].uid-1;
+	  }
+	  break;
+
+    case 'down':
+      var from, fromstatus, status, rows = this.filters_list.rows;
+
+	  // we need only to replace filter names...
+      for (var i=0; i<rows.length; i++) {
+	    if (rows[i]==null) { // removed row
+	      continue;
+        }
+        else if (rows[i].uid == id) {
+	      from = rows[i].obj;
+          fromstatus = $(from).hasClass('disabled');
+	    }
+        else if (rows[i].uid == id+1) {
+	      name = rows[i].obj.cells[0].innerHTML;
+          status = $(rows[i].obj).hasClass('disabled');
+	      rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML;
+	      from.cells[0].innerHTML = name;
+          $(from)[status?'addClass':'removeClass']('disabled');
+          $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled');
+	      this.filters_list.highlight_row(i);
+	      break;
+	    }
+	  }
+	  // ... and disable/enable Down button
+	  this.filters_listbuttons();
+      break;
+
+    case 'up':
+      var from, status, fromstatus, rows = this.filters_list.rows;
+
+	  // we need only to replace filter names...
+      for (var i=0; i<rows.length; i++) {
+	    if (rows[i] == null) { // removed row
+	      continue;
+        }
+        else if (rows[i].uid == id-1) {
+	      from = rows[i].obj;
+          fromstatus = $(from).hasClass('disabled');
+	      this.filters_list.highlight_row(i);
+	    }
+        else if (rows[i].uid == id) {
+	      name = rows[i].obj.cells[0].innerHTML;
+          status = $(rows[i].obj).hasClass('disabled');
+	      rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML;
+	      from.cells[0].innerHTML = name;
+          $(from)[status?'addClass':'removeClass']('disabled');
+          $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled');
+	      break;
+	    }
+	  }
+	  // ... and disable/enable Up button
+	  this.filters_listbuttons();
+      break;
+	
+    case 'update':
+      var rows = parent.rcmail.filters_list.rows;
+      for (var i=0; i<rows.length; i++)
+	    if (rows[i] && rows[i].uid == id) {
+	      rows[i].obj.cells[0].innerHTML = name;
+          if (disabled)
+            $(rows[i].obj).addClass('disabled');
+          else
+            $(rows[i].obj).removeClass('disabled');
+	      break;
+	    }
+      break;
+      
+    case 'add':
+      var row, new_row, td, list = parent.rcmail.filters_list;
+
+	  if (!list)
         break;
 
-      case 'up':
-        var rows = this.filters_list.rows;
-	var from, status, fromstatus;
-
-	// we need only to replace filter names...
-        for (var i=0; i<rows.length; i++)
-        {
-	  if (rows[i]==null) { // removed row
-	    continue;
-          } else if (rows[i].uid == id-1) {
-	    from = rows[i].obj;
-            fromstatus = $(from).hasClass('disabled');
-	    this.filters_list.highlight_row(i);
-	  } else if (rows[i].uid == id) {
-	    name = rows[i].obj.cells[0].innerHTML;
-            status = $(rows[i].obj).hasClass('disabled');
-	    rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML;
-	    from.cells[0].innerHTML = name;
-            $(from)[status?'addClass':'removeClass']('disabled');
-            $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled');
-	    break;
-	  }
-	}
-	// ... and disable/enable Up button
-	this.filters_listbuttons();
-        break;
-	
-      case 'update':
-        var rows = parent.rcmail.filters_list.rows;
-        for (var i=0; i<rows.length; i++)
-	  if (rows[i] && rows[i].uid == id)
-	    {
-	    rows[i].obj.cells[0].innerHTML = name;
-            if (disabled)
-              $(rows[i].obj).addClass('disabled');
-            else
-              $(rows[i].obj).removeClass('disabled');
-	    break;
-	    }
-        break;
-      
-      case 'add':
-        var row, new_row, td;
-	var list = parent.rcmail.filters_list;
-
-	if (!list)
-          break;
-
-	for (var i=0; i<list.rows.length; i++)
-	  if (list.rows[i] != null && String(list.rows[i].obj.id).match(/^rcmrow/))
-	    row = list.rows[i].obj;
-
-        if (row)
-	  {
+	  for (var i=0; i<list.rows.length; i++)
+	    if (list.rows[i] != null && String(list.rows[i].obj.id).match(/^rcmrow/))
+	      row = list.rows[i].obj;
+
+      if (row) {
 	    new_row = parent.document.createElement('tr');
 	    new_row.id = 'rcmrow'+id;
-    	    td = parent.document.createElement('td');
-    	    new_row.appendChild(td);
+    	td = parent.document.createElement('td');
+    	new_row.appendChild(td);
 	    list.insert_row(new_row, false);
-            if (disabled)
-              $(new_row).addClass('disabled');
-
-    	    if (row.cells[0].className)
-    	      td.className = row.cells[0].className;
+        if (disabled)
+          $(new_row).addClass('disabled');
+  	    if (row.cells[0].className)
+  	      td.className = row.cells[0].className;
         
-    	    td.innerHTML = name;
+   	    td.innerHTML = name;
 	    list.highlight_row(id);
 
 	    parent.rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', true);
 	  }
-        else // refresh whole page
-	  parent.rcmail.goto_url('plugin.managesieve');
-	break;
-      }
-
-    this.set_busy(false);
-
-    };
-
-  rcube_webmail.prototype.managesieve_select = function(list)
-    {
-    var id = list.get_single_selection();
-    if (id != null)
-      this.load_managesieveframe(list.rows[id].uid);
-    };
-
-  rcube_webmail.prototype.managesieve_save = function()
-    {
-      if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform')
-        {
-        var id = parent.rcmail.filters_list.get_single_selection();
+      else // refresh whole page
+	    parent.rcmail.goto_url('plugin.managesieve');
+	  break;
+  }
+
+  this.set_busy(false);
+};
+
+rcube_webmail.prototype.managesieve_select = function(list)
+{
+  var id = list.get_single_selection();
+  if (id != null)
+    this.load_managesieveframe(list.rows[id].uid);
+};
+
+rcube_webmail.prototype.managesieve_save = function()
+{
+  if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') {
+    var id = parent.rcmail.filters_list.get_single_selection();
 	if (id != null)
 	  this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid;
-        }
-      this.gui_objects.sieveform.submit();
-    };
-
-  // load filter frame
-  rcube_webmail.prototype.load_managesieveframe = function(id)
-    {
-    if (typeof(id) != 'undefined' && id != null)
-      {
-      this.enable_command('plugin.managesieve-del', true);
-      this.filters_listbuttons();
-      }
-    else
-      this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false);
-
-    if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
-      {
-      target = window.frames[this.env.contentframe];
-      this.set_busy(true, 'loading');
-      target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_fid='+id;
-      }
-    };
-
-  // enable/disable Up/Down buttons
-  rcube_webmail.prototype.filters_listbuttons = function()
-    {
-    var id = this.filters_list.get_single_selection();
-    var rows = this.filters_list.rows;
-
-    for (var i=0; i<rows.length; i++)
-      {
-      if (rows[i] == null) { // removed row
-        } else if (i == id) {
+  }
+  this.gui_objects.sieveform.submit();
+};
+
+// load filter frame
+rcube_webmail.prototype.load_managesieveframe = function(id)
+{
+  if (typeof(id) != 'undefined' && id != null) {
+    this.enable_command('plugin.managesieve-del', true);
+    this.filters_listbuttons();
+  }
+  else
+    this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false);
+
+  if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+    target = window.frames[this.env.contentframe];
+    this.set_busy(true, 'loading');
+    target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_fid='+id;
+  }
+};
+
+// enable/disable Up/Down buttons
+rcube_webmail.prototype.filters_listbuttons = function()
+{
+  var id = this.filters_list.get_single_selection(),
+    rows = this.filters_list.rows;
+
+  for (var i=0; i<rows.length; i++) {
+    if (rows[i] == null) { // removed row
+    }
+    else if (i == id) {
 	  this.enable_command('plugin.managesieve-up', false);
 	  break;
-        } else {
+    }
+    else {
 	  this.enable_command('plugin.managesieve-up', true);
 	  break;
-        }
-      }
-
-    for (var i=rows.length-1; i>0; i--)
-      {
-        if (rows[i] == null) { // removed row
-	} else if (i == id) {
+    }
+  }
+
+  for (var i=rows.length-1; i>0; i--) {
+    if (rows[i] == null) { // removed row
+	}
+    else if (i == id) {
 	  this.enable_command('plugin.managesieve-down', false);
 	  break;
-	} else {
+	}
+    else {
 	  this.enable_command('plugin.managesieve-down', true);
 	  break;
 	}
-      } 
-    };
-
-  // operations on filters form
-  rcube_webmail.prototype.managesieve_ruleadd = function(id)
-    {
-      this.http_post('plugin.managesieve', '_act=ruleadd&_rid='+id);
-    };
-
-  rcube_webmail.prototype.managesieve_rulefill = function(content, id, after)
-    {
-      if (content != '')
-        {
+  } 
+};
+
+// operations on filters form
+rcube_webmail.prototype.managesieve_ruleadd = function(id)
+{
+  this.http_post('plugin.managesieve', '_act=ruleadd&_rid='+id);
+};
+
+rcube_webmail.prototype.managesieve_rulefill = function(content, id, after)
+{
+  if (content != '') {
 	// create new element
-	var div = document.getElementById('rules');
-	var row = document.createElement('div');
+	var div = document.getElementById('rules'),
+	  row = document.createElement('div');
 
 	this.managesieve_insertrow(div, row, after);
@@ -310,31 +301,29 @@
 	row.setAttribute('id', 'rulerow'+id);
 	row.className = 'rulerow';
-        row.innerHTML = content;
+    row.innerHTML = content;
 
 	this.managesieve_formbuttons(div);
-	}
-    };
-
-  rcube_webmail.prototype.managesieve_ruledel = function(id)
-    {
-      if (confirm(this.get_label('managesieve.ruledeleteconfirm')))
-	{
+  }
+};
+
+rcube_webmail.prototype.managesieve_ruledel = function(id)
+{
+  if (confirm(this.get_label('managesieve.ruledeleteconfirm'))) {
 	var row = document.getElementById('rulerow'+id);
 	row.parentNode.removeChild(row);
 	this.managesieve_formbuttons(document.getElementById('rules'));
-	}
-    };
-
-  rcube_webmail.prototype.managesieve_actionadd = function(id)
-    {
-      this.http_post('plugin.managesieve', '_act=actionadd&_aid='+id);
-    };
-
-  rcube_webmail.prototype.managesieve_actionfill = function(content, id, after)
-    {
-      if (content != '')
-        {
-	var div = document.getElementById('actions');
-	var row = document.createElement('div');
+  }
+};
+
+rcube_webmail.prototype.managesieve_actionadd = function(id)
+{
+  this.http_post('plugin.managesieve', '_act=actionadd&_aid='+id);
+};
+
+rcube_webmail.prototype.managesieve_actionfill = function(content, id, after)
+{
+  if (content != '') {
+	var div = document.getElementById('actions'),
+	  row = document.createElement('div');
 
 	this.managesieve_insertrow(div, row, after);
@@ -342,147 +331,144 @@
 	row.className = 'actionrow';
 	row.setAttribute('id', 'actionrow'+id);
-        row.innerHTML = content;
-
-        this.managesieve_formbuttons(div);
-	}
-    };
-
-  rcube_webmail.prototype.managesieve_actiondel = function(id)
-    {
-      if (confirm(this.get_label('managesieve.actiondeleteconfirm')))
-	{
+    row.innerHTML = content;
+
+    this.managesieve_formbuttons(div);
+  }
+};
+
+rcube_webmail.prototype.managesieve_actiondel = function(id)
+{
+  if (confirm(this.get_label('managesieve.actiondeleteconfirm'))) {
 	var row = document.getElementById('actionrow'+id);
 	row.parentNode.removeChild(row);
 	this.managesieve_formbuttons(document.getElementById('actions'));
-	}
-    };
-
-  // insert rule/action row in specified place on the list
-  rcube_webmail.prototype.managesieve_insertrow = function(div, row, after)
-    {
-      for (var i=0; i<div.childNodes.length; i++)
-	{
-        if (div.childNodes[i].id == (div.id == 'rules' ? 'rulerow' : 'actionrow')  + after)
-	  break;
-	}
-
-      if (div.childNodes[i+1])
-        div.insertBefore(row, div.childNodes[i+1]);
-      else
-        div.appendChild(row);
-    }
-
-  // update Delete buttons status
-  rcube_webmail.prototype.managesieve_formbuttons = function(div)
-    {
-      var buttons = new Array();
-      var i, j=0;
-      // count and get buttons
-      for (i=0; i<div.childNodes.length; i++)
-	{
-	if (div.id == 'rules' && div.childNodes[i].id)
-	  {
+  }
+};
+
+// insert rule/action row in specified place on the list
+rcube_webmail.prototype.managesieve_insertrow = function(div, row, after)
+{
+  for (var i=0; i<div.childNodes.length; i++) {
+    if (div.childNodes[i].id == (div.id == 'rules' ? 'rulerow' : 'actionrow')  + after)
+	  break;
+  }
+
+  if (div.childNodes[i+1])
+    div.insertBefore(row, div.childNodes[i+1]);
+  else
+    div.appendChild(row);
+};
+
+// update Delete buttons status
+rcube_webmail.prototype.managesieve_formbuttons = function(div)
+{
+  var i, button, buttons = [];
+
+  // count and get buttons
+  for (i=0; i<div.childNodes.length; i++) {
+	if (div.id == 'rules' && div.childNodes[i].id) {
 	  if (/rulerow/.test(div.childNodes[i].id))
 	    buttons.push('ruledel' + div.childNodes[i].id.replace(/rulerow/, ''));
-	  }
-	else if (div.childNodes[i].id)
-	  {
+	}
+	else if (div.childNodes[i].id) {
 	  if (/actionrow/.test(div.childNodes[i].id))
 	    buttons.push( 'actiondel' + div.childNodes[i].id.replace(/actionrow/, ''));
-	  }
-        }
-
-      for (i=0; i<buttons.length; i++)
-	{
-	var button = document.getElementById(buttons[i]);
-	if (i>0 || buttons.length>1)
-	  {
+	}
+  }
+
+  for (i=0; i<buttons.length; i++) {
+	button = document.getElementById(buttons[i]);
+	if (i>0 || buttons.length>1) {
 	  $(button).removeClass('disabled');
 	  button.removeAttribute('disabled');
-	  }
-	else
-	  {
+	}
+	else {
 	  $(button).addClass('disabled');
 	  button.setAttribute('disabled', true);
-	  }
-        }
-    }
-
-  // Set change
-  rcube_webmail.prototype.managesieve_set = function()
-    {
-    var script = $(this.gui_objects.filtersetslist).val();
-    location.href = this.env.comm_path+'&_action=plugin.managesieve&_set='+script;
-    };
-
-  // Script download
-  rcube_webmail.prototype.managesieve_setget = function()
-    {
-    var script = $(this.gui_objects.filtersetslist).val();
-    location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+script;
-    };
-
-  // Set activate
-  rcube_webmail.prototype.managesieve_setact = function()
-    {
-      if (!this.gui_objects.filtersetslist)
-        return false;
-
-      var script = this.gui_objects.filtersetslist.value;
-      this.http_post('plugin.managesieve', '_act=setact&_set='+script);
-    };
-
-  // Set activate flag in sets list after set activation
-  rcube_webmail.prototype.managesieve_reset = function(name)
-    {
-      if (!this.gui_objects.filtersetslist || !name)
-        return false;
-
-      var opts = this.gui_objects.filtersetslist.getElementsByTagName('option'),
-        label = ' (' + this.get_label('managesieve.active') + ')',
-        regx = new RegExp(RegExp.escape(label));
-      
-      for (var x=0; x<opts.length; x++)
-        if (opts[x].value != name && opts[x].innerHTML.match(regx))
-	      opts[x].innerHTML = opts[x].innerHTML.replace(regx, '');
-	    else if (opts[x].value == name)
-	      opts[x].innerHTML = opts[x].innerHTML + label;
-    };
-
-  // Set delete
-  rcube_webmail.prototype.managesieve_setdel = function()
-    {
-      if (!this.gui_objects.filtersetslist)
-        return false;
-
-      if (!confirm(this.get_label('managesieve.setdeleteconfirm')))
-        return false;
-
-      var script = this.gui_objects.filtersetslist.value;
-      this.http_post('plugin.managesieve', '_act=setdel&_set='+script);
-    };
-
-  // Set add
-  rcube_webmail.prototype.managesieve_setadd = function()
-    {
-      this.filters_list.clear_selection();
-      this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false);
-
-      if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
-        {
-        target = window.frames[this.env.contentframe];
-        this.set_busy(true, 'loading');
-        target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1';
-        }
-    };
-
-  rcube_webmail.prototype.managesieve_reload = function(set)
-    {
-      this.env.reload_set = set;
-      window.setTimeout(function() {
-        location.href = rcmail.env.comm_path + '&_action=plugin.managesieve'
-	  + (rcmail.env.reload_set ? '&_set=' + rcmail.env.reload_set : '')
-	}, 500);
-    };
-
-}
+	}
+  }
+};
+
+// Set change
+rcube_webmail.prototype.managesieve_set = function()
+{
+  var script = $(this.gui_objects.filtersetslist).val();
+  location.href = this.env.comm_path+'&_action=plugin.managesieve&_set='+script;
+};
+
+// Script download
+rcube_webmail.prototype.managesieve_setget = function()
+{
+  var script = $(this.gui_objects.filtersetslist).val();
+  location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+script;
+};
+
+// Set activate
+rcube_webmail.prototype.managesieve_setact = function()
+{
+  if (!this.gui_objects.filtersetslist)
+    return false;
+
+  var script = this.gui_objects.filtersetslist.value,
+    action = (script == rcmail.env.active_set ? 'deact' : 'setact');
+
+  this.http_post('plugin.managesieve', '_act='+action+'&_set='+script);
+};
+
+// Set activate flag in sets list after set activation
+rcube_webmail.prototype.managesieve_reset = function()
+{
+  if (!this.gui_objects.filtersetslist)
+    return false;
+
+  var list = this.gui_objects.filtersetslist,
+    opts = list.getElementsByTagName('option'),
+    label = ' (' + this.get_label('managesieve.active') + ')',
+    regx = new RegExp(RegExp.escape(label)+'$');
+
+  for (var x=0; x<opts.length; x++) {
+    if (opts[x].value != rcmail.env.active_set && opts[x].innerHTML.match(regx))
+      opts[x].innerHTML = opts[x].innerHTML.replace(regx, '');
+	else if (opts[x].value == rcmail.env.active_set)
+	  opts[x].innerHTML = opts[x].innerHTML + label;
+  }
+
+  // change title of setact button
+  $('#'+rcmail.buttons['plugin.managesieve-setact'][0].id).attr('title', rcmail.gettext('managesieve.filterset'
+    + (list.value == rcmail.env.active_set ? 'deact' : 'act')));
+};
+
+// Set delete
+rcube_webmail.prototype.managesieve_setdel = function()
+{
+  if (!this.gui_objects.filtersetslist)
+    return false;
+
+  if (!confirm(this.get_label('managesieve.setdeleteconfirm')))
+    return false;
+
+  var script = this.gui_objects.filtersetslist.value;
+  this.http_post('plugin.managesieve', '_act=setdel&_set='+script);
+};
+
+// Set add
+rcube_webmail.prototype.managesieve_setadd = function()
+{
+  this.filters_list.clear_selection();
+  this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false);
+
+  if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+    target = window.frames[this.env.contentframe];
+    this.set_busy(true, 'loading');
+    target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1';
+  }
+};
+
+rcube_webmail.prototype.managesieve_reload = function(set)
+{
+  this.env.reload_set = set;
+  window.setTimeout(function() {
+    location.href = rcmail.env.comm_path + '&_action=plugin.managesieve'
+      + (rcmail.env.reload_set ? '&_set=' + rcmail.env.reload_set : '')
+  }, 500);
+};
Index: /trunk/plugins/managesieve/managesieve.php
===================================================================
--- /trunk/plugins/managesieve/managesieve.php	(revision 3591)
+++ /trunk/plugins/managesieve/managesieve.php	(revision 3592)
@@ -157,9 +157,9 @@
           if ($this->sieve->script->update_rule($fid, $this->script[$fid-1]) !== false
     		&& $this->sieve->script->update_rule($fid-1, $this->script[$fid]) !== false)
-	    $result = $this->sieve->save();
+	        $result = $this->sieve->save();
       
           if ($result) {
 //          $this->rc->output->show_message('managesieve.filtersaved', 'confirmation');
-	    $this->rc->output->command('managesieve_updatelist', 'up', '', $fid);
+	        $this->rc->output->command('managesieve_updatelist', 'up', '', $fid);
           } else
             $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
@@ -172,13 +172,13 @@
           if ($this->sieve->script->update_rule($fid, $this->script[$fid+1]) !== false
     		&& $this->sieve->script->update_rule($fid+1, $this->script[$fid]) !== false)
-	    $result = $this->sieve->save();
+	        $result = $this->sieve->save();
       
           if ($result === true) {
 //          $this->rc->output->show_message('managesieve.filtersaved', 'confirmation');
-	    $this->rc->output->command('managesieve_updatelist', 'down', '', $fid);
+	        $this->rc->output->command('managesieve_updatelist', 'down', '', $fid);
           } else {
             $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
           }
-	}
+	    }
       }
       else if ($action=='delete' && !$error)
@@ -190,43 +190,55 @@
 
           if ($result === true) {
-	    $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation');
-	    $this->rc->output->command('managesieve_updatelist', 'delete', '', $fid);
+	        $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation');
+	        $this->rc->output->command('managesieve_updatelist', 'delete', '', $fid);
           } else {
             $this->rc->output->show_message('managesieve.filterdeleteerror', 'error');
           }
-	}
+	    }
       }
       else if ($action=='setact' && !$error)
       {
         $script_name = get_input_value('_set', RCUBE_INPUT_GPC);
-	$result = $this->sieve->activate($script_name);
+	    $result = $this->sieve->activate($script_name);
 	
-	if ($result === true) {
+	    if ($result === true) {
           $this->rc->output->set_env('active_set', $script_name);
-	  $this->rc->output->show_message('managesieve.setactivated', 'confirmation');
-	  $this->rc->output->command('enable_command', 'plugin.managesieve-setact', false);
-	  $this->rc->output->command('managesieve_reset', $script_name);
-	  $_SESSION['managesieve_active'] = $script_name;
-	} else {
+	      $this->rc->output->show_message('managesieve.setactivated', 'confirmation');
+	      $this->rc->output->command('managesieve_reset');
+	      $_SESSION['managesieve_active'] = $script_name;
+	    } else {
           $this->rc->output->show_message('managesieve.setactivateerror', 'error');
-	}
+	    }
+      }
+      else if ($action=='deact' && !$error)
+      {
+	    $result = $this->sieve->deactivate();
+	
+	    if ($result === true) {
+          $this->rc->output->set_env('active_set', '');
+	      $this->rc->output->show_message('managesieve.setdeactivated', 'confirmation');
+	      $this->rc->output->command('managesieve_reset');
+	      $_SESSION['managesieve_active'] = '';
+	    } else {
+          $this->rc->output->show_message('managesieve.setdeactivateerror', 'error');
+	    }
       }
       else if ($action=='setdel' && !$error)
       {
         $script_name = get_input_value('_set', RCUBE_INPUT_GPC);
-	$result = $this->sieve->remove($script_name);
+	    $result = $this->sieve->remove($script_name);
 	
-	if ($result === true) {
-	  $this->rc->output->show_message('managesieve.setdeleted', 'confirmation');
-	  $this->rc->output->command('managesieve_reload');
-	  $this->rc->session->remove('managesieve_current');
-	} else {
+	    if ($result === true) {
+	      $this->rc->output->show_message('managesieve.setdeleted', 'confirmation');
+	      $this->rc->output->command('managesieve_reload');
+	      $this->rc->session->remove('managesieve_current');
+	    } else {
           $this->rc->output->show_message('managesieve.setdeleteerror', 'error');
-	}
+	    }
       }
       else if ($action=='setget')
       {
         $script_name = get_input_value('_set', RCUBE_INPUT_GPC);
-	$script = $this->sieve->get_script($script_name);
+	    $script = $this->sieve->get_script($script_name);
 
         if (PEAR::isError($script))
@@ -625,6 +637,6 @@
     // set client env
     $this->rc->output->add_gui_object('filtersetslist', $attrib['id']);
-    $this->rc->output->add_label('managesieve.setdeleteconfirm');
-    $this->rc->output->add_label('managesieve.active');
+    $this->rc->output->add_label('managesieve.setdeleteconfirm',
+      'managesieve.active', 'managesieve.filtersetact', 'managesieve.filtersetdeact');
   
     return $out;
Index: /trunk/plugins/managesieve/skins/default/templates/managesieve.html
===================================================================
--- /trunk/plugins/managesieve/skins/default/templates/managesieve.html	(revision 3591)
+++ /trunk/plugins/managesieve/skins/default/templates/managesieve.html	(revision 3592)
@@ -32,5 +32,5 @@
 <roundcube:button command="plugin.managesieve-setadd" type="link" class="buttonPas setadd" classSel="button setaddsel" classAct="button setadd" title="managesieve.filtersetadd" content=" " />
 <roundcube:button command="plugin.managesieve-setdel" type="link" class="buttonPas setdel" classSel="button setdelsel" classAct="button setdel" title="managesieve.filtersetdel" content=" " />
-<roundcube:button command="plugin.managesieve-setact" type="link" class="buttonPas setset" classSel="button setsetsel" classAct="button setset" title="managesieve.filtersetact" content=" " />
+<roundcube:button command="plugin.managesieve-setact" type="link" class="buttonPas setset" classSel="button setsetsel" classAct="button setset" content=" " />
 <roundcube:button command="plugin.managesieve-setget" type="link" class="buttonPas setget" classSel="button setgetsel" classAct="button setget" title="managesieve.filtersetget" content=" " />
 </div>
