Index: program/include/main.inc
===================================================================
--- program/include/main.inc	(revision 424)
+++ program/include/main.inc	(working copy)
@@ -1341,6 +1341,12 @@
         'itentitieslist' => 'rcmail_identities_list',
         'identityframe' => 'rcmail_identity_frame',
         'identityform' => 'rcube_identity_form',
+		
+		// ADDED TO HANDLE MAILRULES
+		'mailruleslist' => 'rcmail_mailrule_list',
+		'mailrulesframe' => 'rcmail_mailrule_frame',
+		'mailrulesform' => 'rcube_mailrule_form',
+		//
         'foldersubscription' => 'rcube_subscription_form',
         'createfolder' => 'rcube_create_folder_form',
         'renamefolder' => 'rcube_rename_folder_form',
Index: program/localization/fr/labels.inc
===================================================================
--- program/localization/fr/labels.inc	(revision 424)
+++ program/localization/fr/labels.inc	(working copy)
@@ -146,10 +146,11 @@
 $labels['ldappublicsearchfield'] = 'Recherche sur';
 $labels['ldappublicsearchform'] = 'Chercher un contact';
 $labels['ldappublicsearch'] = 'Recherche';
-$labels['settingsfor'] = 'Param��tres pour';
-$labels['preferences'] = 'Pr��f��rences';
 $labels['userpreferences'] = 'Pr��f��rences utilisateur';
 $labels['editpreferences'] = 'Editer les pr��f��rences utilisateur';
+$labels['mailrules'] = 'R��gles';
+$labels['managemailrules'] = 'G��rer les r��gles de messagerie';
+$labels['newmailrule'] = 'Nouvelle r��gle';
 $labels['identities'] = 'Identit��s';
 $labels['manageidentities'] = 'G��rer les identit��s pour ce compte';
 $labels['newidentity'] = 'Nouvelle identit��';
@@ -180,4 +181,6 @@
 $labels['sortby'] = 'Trier par';
 $labels['sortasc'] = 'Tri ascendant';
 $labels['sortdesc'] = 'Tri descendant';
+$labels['location'] = 'Destination';
+
 ?>
Index: program/js/app.js
===================================================================
--- program/js/app.js	(revision 424)
+++ program/js/app.js	(working copy)
@@ -247,9 +247,15 @@
 
 
       case 'settings':
-        this.enable_command('preferences', 'identities', 'save', 'folders', true);
+        this.enable_command('preferences', 'identities', 'save', 'folders', 'mailrules', true);
         
-        if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity')
+		if(this.env.action=='mailrules' || this.env.action=='edit-mailrule' || this.env.action=='add-mailrule')
+		 this.enable_command('edit', 'add', 'delete', true);
+		 
+		if (this.env.action=='edit-mailrule' || this.env.action=='add-mailrule')
+          this.enable_command('save', true);
+		
+        if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='')
           this.enable_command('edit', 'add', 'delete', true);
 
         if (this.env.action=='edit-identity' || this.env.action=='add-identity')
@@ -269,6 +275,18 @@
             this.identity_list.highlight_row(this.env.iid);
           }
 
+		  //ADDED TO HANDLE MAILRULES
+		  if (this.gui_objects.mailruleslist)
+          {
+          this.mailrule_list = new rcube_list_widget(this.gui_objects.mailruleslist, {multiselect:false, draggable:false, keyboard:false});
+          this.mailrule_list.addEventListener('select', function(o){ p.mailrule_select(o); });
+          this.mailrule_list.init();
+          this.mailrule_list.focus();
+
+          if (this.env.iid)
+            this.mailrule_list.highlight_row(this.env.iid);
+          }
+		  //
         break;
 
       case 'login':
@@ -556,22 +574,18 @@
       case 'add':
         if (this.task=='addressbook')
           this.load_contact(0, 'add');
-
-        /* LDAP stuff, has to be re-written with new address book
-          if (!window.frames[this.env.contentframe].rcmail)
-            this.load_contact(0, 'add');
-          else
-            {
-            if (window.frames[this.env.contentframe].rcmail.selection.length)
-              this.add_ldap_contacts();
-            else
-              this.load_contact(0, 'add');
-            }
-        */
         else if (this.task=='settings')
           {
-          this.identity_list.clear_selection();
-          this.load_identity(0, 'add-identity');
+	        if(this.env.action=='mailrules')
+			{
+				this.mailrule_list.clear_selection();
+				this.load_mailrule(0, 'add-mailrule');		  
+			}
+			else
+			{
+				this.identity_list.clear_selection();
+				this.load_identity(0, 'add-identity');
+			}
           }
         break;
 
@@ -628,7 +642,12 @@
           this.delete_contacts();
         // user settings task
         else if (this.task=='settings')
-          this.delete_identity();
+		{
+		  if(this.env.action=='edit-mailrule')
+		    this.delete_mailrule();
+		  else
+			this.delete_identity();
+		}
         break;
 
 
@@ -903,12 +922,19 @@
         this.goto_url('');
         break;
 
+	  case 'mailrules':
+	    this.goto_url('mailrules');
+        break;
+	  
       case 'identities':
         this.goto_url('identities');
         break;
           
       case 'delete-identity':
         this.delete_identity();
+	 
+	  case 'delete-mailrule':
+        this.delete_mailrule();
         
       case 'folders':
         this.goto_url('folders');
@@ -2368,6 +2394,13 @@
       this.load_identity(id, 'edit-identity');
     };
 
+  this.mailrule_select = function(list)
+  {
+   var id;
+    if (id = list.get_single_selection())
+      this.load_mailrule(id, 'edit-mailrule');
+  }
+  
   // load contact record
   this.load_identity = function(id, action)
     {
@@ -2388,10 +2421,32 @@
       this.set_busy(true);
       target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url;
       }
+	  
     return true;
     };
 
+   // load rule record
+    this.load_mailrule = function(id, action)
+    {
+    if (action=='edit-mailrule' && (!id || id==this.env.iid))
+      return false;
+	  
+    var add_url = '';
+    var target = window;
+    if (this.env.contentframe && window.frames && window.frames[this.envcontentframe])
+      {
+      add_url = '&_framed=1';
+      target = window.frames[this.env.contentframe];
+      document.getElementById(this.env.contentframe).style.visibility = 'inherit';
+      }
 
+    if (action && (id || action=='add-mailrule'))
+      {
+      this.set_busy(true);
+      target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url;
+      }
+    return true;
+    };
 
   this.delete_identity = function(id)
     {
@@ -2403,21 +2458,26 @@
     if (!id)
       id = this.env.iid ? this.env.iid : selection[0];
 
-/*
-    // 'remove' row from list (just hide it)
-    if (this.identity_rows && this.identity_rows[id].obj)
-      {
-      this.clear_selection();
-      this.identity_rows[id].obj.style.display = 'none';
-      }
-*/
-
     // if (this.env.framed && id)
     this.goto_url('delete-identity', '_iid='+id, true);
     return true;
     };
 
+  this.delete_mailrule = function(id)
+    {
+    // exit if no mailbox specified or if selection is empty
+    var selection = this.mailrule_list.get_selection();
+    if (!(selection.length || this.env.iid))
+      return;
+    
+    if (!id)
+      id = this.env.iid ? this.env.iid : selection[0];
 
+    // if (this.env.framed && id)
+    this.goto_url('delete-mailrule', '_iid='+id, true);
+    return true;
+    };
+
   // tell server to create and subscribe a new mailbox
   this.create_folder = function(name)
     {
Index: program/steps/settings/save_identity.inc
===================================================================
--- program/steps/settings/save_identity.inc	(revision 424)
+++ program/steps/settings/save_identity.inc	(working copy)
@@ -145,6 +145,6 @@
 
 
 // go to next step
-rcmail_overwrite_action($_POST['_framed'] ? 'edit-identitiy' : 'identities');
+rcmail_overwrite_action($_POST['_framed'] ? 'edit-identity' : 'identities');
 
 ?>
\ No newline at end of file
Index: program/steps/settings/save_mailrule.inc
===================================================================
--- program/steps/settings/save_mailrule.inc	(revision 0)
+++ program/steps/settings/save_mailrule.inc	(revision 0)
@@ -0,0 +1,139 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/save_mailrule.inc                              |
+ |                                                                       |
+ | This file is part of the RoundCube Webmail client                     |
+ | Copyright (C) 2005, RoundCube Dev. - Switzerland                      |
+ | Licensed under the GNU GPL                                            |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Save an identity record or to add a new one                         |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+
+ $Id: save_identity.inc 344 2006-09-14 03:49:28Z estadtherr $
+
+*/
+
+$a_save_cols = array('from', 'to', 'subject', 'location');
+
+
+// check input
+if (empty($_POST['_from']) && empty($_POST['_to']) && empty($_POST['_subject']) && empty($_POST['_location']) )
+  {
+  show_message('formincomplete', 'warning');
+  rcmail_overwrite_action('edit-mailrule');
+  return;
+  }
+
+
+// update an existing contact
+if ($_POST['_iid'])
+  {
+  $a_write_sql = array();
+
+  foreach ($a_save_cols as $col)
+    {
+    $fname = '_'.$col;
+    if (!isset($_POST[$fname]))
+      continue;
+
+    $a_write_sql[] = sprintf("%s=%s",
+                             $DB->quoteIdentifier($col),
+                             $DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols))));
+    }
+
+
+  if (sizeof($a_write_sql))
+    {
+    $DB->query("UPDATE ".get_table_name('mailrules')."
+                SET ".join(', ', $a_write_sql)."
+                WHERE  mailrule_id=?
+                AND    user_id=?
+                AND    del<>1",
+                get_input_value('_iid', RCUBE_INPUT_POST),
+                $_SESSION['user_id']);
+                       
+    $updated = $DB->affected_rows();
+    }
+       
+  if ($updated)
+    {
+		show_message('successfullysaved', 'confirmation');
+
+    // mark all other identities as 'not-default'
+    if (!empty($_POST['_standard']))
+      $DB->query("UPDATE ".get_table_name('mailrule')."
+                  SET ".$DB->quoteIdentifier('standard')."='0'
+                  WHERE  user_id=?
+                  AND    mailrule_id<>?
+                  AND    del<>1",
+                  $_SESSION['user_id'],
+                  get_input_value('_iid', RCUBE_INPUT_POST));
+    
+    if ($_POST['_framed'])
+      {
+      // update the changed col in list
+      // ...      
+      }
+    }
+  else if ($DB->is_error())
+    {
+    // show error message
+    show_message('errorsaving', 'error');
+    rcmail_overwrite_action('edit-mailrule');
+    }
+  }
+
+// insert a new contact
+else
+  {
+  $a_insert_cols = $a_insert_values = array();
+
+  foreach ($a_save_cols as $col)
+    {
+    $fname = '_'.$col;
+    if (!isset($_POST[$fname]))
+      continue;
+    
+    $a_insert_cols[] = $DB->quoteIdentifier($col);
+    $a_insert_values[] = $DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols)));
+    }
+    
+  if (sizeof($a_insert_cols))
+    {
+    $DB->query("INSERT INTO ".get_table_name('mailrules')."
+                (user_id, ".join(', ', $a_insert_cols).")
+                VALUES (?, ".join(', ', $a_insert_values).")",
+                $_SESSION['user_id']);
+
+    $insert_id = $DB->insert_id(get_sequence_name('mailrules'));
+    }
+    
+  if ($insert_id)
+    {
+    $_GET['_iid'] = $insert_id;
+
+    if ($_POST['_framed'])
+      {
+      // add contact row or jump to the page where it should appear
+      // ....
+      }
+    }
+  else
+    {
+    // show error message
+    show_message('errorsaving', 'error');
+    rcmail_overwrite_action('edit-mailrule');
+    }
+  }
+
+
+// go to next step
+rcmail_overwrite_action($_POST['_framed'] ? 'edit-mailrule' : 'mailrules');
+
+?>
\ No newline at end of file
Index: program/steps/settings/func.inc
===================================================================
--- program/steps/settings/func.inc	(revision 424)
+++ program/steps/settings/func.inc	(working copy)
@@ -230,8 +230,36 @@
   return $out;
   }
 
+function rcmail_mailrule_list($attrib)
+{
+ global $DB, $CONFIG, $OUTPUT, $JS_OBJECT_NAME;
 
 
+  // get contacts from DB
+  $sql_result = $DB->query("SELECT * FROM ".get_table_name('mailrules')."
+                            WHERE  del<>1
+                            AND    user_id=?",
+                            $_SESSION['user_id']);
+
+
+  // add id to message list table if not specified
+  if (!strlen($attrib['id']))
+    $attrib['id'] = 'mailruleslist';
+
+  // define list of cols to be displayed
+  $a_show_cols = array('from', 'to', 'subject','location');
+
+  // create XHTML table  
+  $out = rcube_table_output($attrib, $sql_result, $a_show_cols, 'mailrule_id');
+  
+  // set client env
+  $javascript = sprintf("%s.gui_object('mailruleslist', '%s');\n", $JS_OBJECT_NAME, $attrib['id']);
+  $OUTPUT->add_script($javascript);    
+
+  return $out;
+  }
+
+
 // similar function as in /steps/addressbook/edit.inc
 function get_form_tags($attrib, $action, $add_hidden=array())
   {
Index: program/steps/settings/delete_mailrule.inc
===================================================================
--- program/steps/settings/delete_mailrule.inc	(revision 0)
+++ program/steps/settings/delete_mailrule.inc	(revision 0)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/delete_mailrule.inc                            |
+ |                                                                       |
+ | This file is part of the RoundCube Webmail client                     |
+ | Copyright (C) 2005, RoundCube Dev. - Switzerland                      |
+ | Licensed under the GNU GPL                                            |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Delete the submitted mailrules (IIDs) from the database             |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+
+ $Id: delete_mailrule.inc
+
+*/
+
+$REMOTE_REQUEST = $_GET['_remote'] ? TRUE : FALSE;
+
+if ($_GET['_iid'])
+  {
+  $DB->query("UPDATE ".get_table_name('mailrules')."
+              SET    del=1
+              WHERE  user_id=?
+              AND    mailrule_id IN (".$_GET['_iid'].")",
+              $_SESSION['user_id']);
+
+  $count = $DB->affected_rows();
+  if ($count)
+    {
+    $commands = show_message('deletedsuccessfully', 'confirmation');
+    }
+
+  // send response
+  if ($REMOTE_REQUEST)
+    rcube_remote_response($commands);
+  }
+
+
+if ($REMOTE_REQUEST)
+  exit;
+
+
+// go to mailrules page
+$_action = 'mailrules';
+
+// overwrite action variable  
+$OUTPUT->add_script(sprintf("\n%s.set_env('action', '%s');", $JS_OBJECT_NAME, $_action));
+?>
\ No newline at end of file
Index: program/steps/settings/mailrules.inc
===================================================================
--- program/steps/settings/mailrules.inc	(revision 0)
+++ program/steps/settings/mailrules.inc	(revision 0)
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/manage_mailrules.inc                           |
+ |                                                                       |
+ | This file is part of the RoundCube Webmail client                     |
+ | Copyright (C) 2005, RoundCube Dev. - Switzerland                      |
+ | Licensed under the GNU GPL                                            |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |    Provide functionality to create/delete/rename mail rules           |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+
+ $Id: manage_mailrules.inc N/A 2006-12-11 mangoose $
+
+*/
+
+if ($USER_DATA = $DB->fetch_assoc($sql_result))
+  $PAGE_TITLE = sprintf('%s (%s@%s)', rcube_label('mailrules'), $USER_DATA['username'], $USER_DATA['mail_host']);
+
+$OUTPUT->include_script('list.js');
+
+function rcmail_mailrule_frame($attrib)
+  {
+  global $OUTPUT, $JS_OBJECT_NAME;
+
+  if (!$attrib['id'])
+    $attrib['id'] = 'rcmMailRuleFrame';
+
+  $attrib['name'] = $attrib['id'];
+
+  $OUTPUT->add_script(sprintf("%s.set_env('contentframe', '%s');", $JS_OBJECT_NAME, $attrib['name']));
+
+  $attrib_str = create_attrib_string($attrib, array('name', 'id', 'class', 'style', 'src', 'width', 'height', 'frameborder'));
+  $out = '<iframe'. $attrib_str . '></iframe>';
+
+  return $out;
+  }
+
+
+parse_template('mailrules');
+?>
\ No newline at end of file
Index: program/steps/settings/edit_mailrule.inc
===================================================================
--- program/steps/settings/edit_mailrule.inc	(revision 0)
+++ program/steps/settings/edit_mailrule.inc	(revision 0)
@@ -0,0 +1,128 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/edit_identity.inc                              |
+ |                                                                       |
+ | This file is part of the RoundCube Webmail client                     |
+ | Copyright (C) 2005, RoundCube Dev. - Switzerland                      |
+ | Licensed under the GNU GPL                                            |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Show edit form for a identity record or to add a new one            |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+
+ $Id: edit_mailrule.inc 392 2006-12-03 22:32:16Z mangoose $
+
+*/
+
+if (($_GET['_iid'] || $_POST['_iid']) && $_action=='edit-mailrule')
+  {
+  $DB->query("SELECT * FROM ".get_table_name('mailrules')."
+              WHERE  mailrule_id=?
+              AND    user_id=?
+              AND    del<>1",
+              get_input_value('_iid', RCUBE_INPUT_GPC),
+              $_SESSION['user_id']);
+  
+  $MAILRULE_RECORD = $DB->fetch_assoc();
+  
+  if (is_array($MAILRULE_RECORD))
+    $OUTPUT->add_script(sprintf("%s.set_env('iid', '%s');", $JS_OBJECT_NAME, $MAILRULE_RECORD['mailrule_id']));
+    
+  $PAGE_TITLE = rcube_label('edititem');
+  }
+else
+  $PAGE_TITLE = rcube_label('newitem');
+
+
+$OUTPUT->include_script('list.js');
+
+
+function rcube_mailrule_form($attrib)
+  {
+  global $MAILRULE_RECORD, $JS_OBJECT_NAME, $OUTPUT;
+
+  $OUTPUT->include_script('tiny_mce/tiny_mce_src.js');
+  $OUTPUT->add_script("tinyMCE.init({ mode : 'specific_textareas'," .
+                                    "apply_source_formatting : true," .
+                                    "content_css : '\$__skin_path' + '/editor_content.css'," .
+                                    "popups_css : '\$__skin_path' + '/editor_popups.css'," .
+                                    "editor_css : '\$__skin_path' + '/editor_ui.css'," .
+                                    "theme : 'advanced'," .
+                                    "theme_advanced_toolbar_location : 'top'," .
+                                    "theme_advanced_toolbar_align : 'left'," .
+                                    "theme_advanced_buttons1 : 'bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,charmap,hr'," .
+                                    "theme_advanced_buttons2 : 'link,unlink,code,forecolor,fontselect,fontsizeselect'," .
+                                    "theme_advanced_buttons3 : '' });");
+
+  if (!$MAILRULE_RECORD && $GLOBALS['_action']!='add-mailrule')
+    return rcube_label('notfound');
+
+  // add some labels to client
+  rcube_add_label('noemailwarning');
+  rcube_add_label('nonamewarning');
+
+
+  list($form_start, $form_end) = get_form_tags($attrib, 'save-mailrule', array('name' => '_iid', 'value' => $MAILRULE_RECORD['mailrule_id']));
+  unset($attrib['form']);
+
+
+  // list of available cols
+  $a_show_cols = array('from'        => array('type' => 'text'),
+                       'to'          => array('type' => 'text'),
+                       'subject' 	 => array('type' => 'text'),
+					   'location'	 => array('type' => 'text'));
+
+
+  // a specific part is requested
+  if ($attrib['part'])
+    {
+		$colprop = $a_show_cols[$attrib['part']];
+		if (is_array($colprop))
+		{
+		 $out = $form_start;
+		 $out .= rcmail_get_edit_field($attrib['part'], $MAILRULE_RECORD[$attrib['part']], $attrib, $colprop['type']); 
+		 return $out;
+		}
+    else
+		return '';
+    }
+
+
+  // return the complete edit form as table
+  $out = "$form_start<table>\n\n";
+
+  foreach ($a_show_cols as $col => $colprop)
+    {
+    $attrib['id'] = 'rcmfd_'.$col;
+
+    if (strlen($colprop['onclick']))
+      $attrib['onclick'] = $colprop['onclick'];
+    else
+      unset($attrib['onclick']);
+
+    $label = strlen($colprop['label']) ? $colprop['label'] : $col;
+    $value = rcmail_get_edit_field($col, $MAILRULE_RECORD[$col], $attrib, $colprop['type']);
+
+    $out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
+                    $attrib['id'],
+                    rep_specialchars_output(rcube_label($label)),
+                    $value);
+    }
+
+  $out .= "\n</table>$form_end";
+
+  return $out;  
+  }
+
+
+
+if ($_action=='add-mailrule' && template_exists('addmailrule'))
+  parse_template('addmailrule');
+
+parse_template('editmailrule');
+?>
Index: program/steps/mail/check_recent.inc
===================================================================
--- program/steps/mail/check_recent.inc	(revision 424)
+++ program/steps/mail/check_recent.inc	(working copy)
@@ -25,36 +25,37 @@
 
 foreach ($a_mailboxes as $mbox_name)
   {
-  if ($mbox_name == $IMAP->get_mailbox_name())
-    {
-    if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE))
-      {
-      $count = $IMAP->messagecount();
-      $unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
+	if ($mbox_name == $IMAP->get_mailbox_name())
+	{
+		if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE))
+		{
+		$count = $IMAP->messagecount();
+		$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
 
-      $commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $unread_count);
-      $commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
-      $commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
-      $commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota());
+		// add new message headers to list
+		$a_headers = array();
+		for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
+			{
+				$header = $IMAP->get_headers($id, NULL, FALSE);
+				if ($header->recent)
+				{
+					$a_headers[] = $header;
+				}	
+			}
 
-      // add new message headers to list
-      $a_headers = array();
-      for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
-        {
-        $header = $IMAP->get_headers($id, NULL, FALSE);
-        if ($header->recent)
-          $a_headers[] = $header;
-        }
-
-      $commands .= rcmail_js_message_list($a_headers, TRUE);
-      }
+		$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $unread_count);
+		$commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
+		$commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
+		$commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota());
+		
+		$commands .= rcmail_js_message_list($a_headers, TRUE);
+		}
     }
   else
     {
-    if ($IMAP->messagecount($mbox_name, 'RECENT'))
-      $commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $IMAP->messagecount($mbox_name, 'UNSEEN'));
-    }
+		if ($IMAP->messagecount($mbox_name, 'RECENT'))
+			$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $IMAP->messagecount($mbox_name, 'UNSEEN'));
+	}
   }
-
 rcube_remote_response($commands);
 ?>
Index: program/steps/mail/func.inc
===================================================================
--- program/steps/mail/func.inc	(revision 424)
+++ program/steps/mail/func.inc	(working copy)
@@ -23,6 +23,8 @@
 require_once('lib/enriched.inc');
 
 
+
+
 $EMAIL_ADDRESS_PATTERN = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/i';
 
 if (empty($_SESSION['mbox'])){
@@ -293,7 +295,7 @@
 // return the message list as HTML table
 function rcmail_message_list($attrib)
   {
-  global $IMAP, $CONFIG, $COMM_PATH, $OUTPUT, $JS_OBJECT_NAME;
+  global $IMAP, $CONFIG, $COMM_PATH, $OUTPUT, $JS_OBJECT_NAME,$DB;
 
   $skin_path = $CONFIG['skin_path'];
   $image_tag = '<img src="%s%s" alt="%s" border="0" />';
@@ -406,9 +408,60 @@
 
   $a_js_message_arr = array();
 
+  //ADDED TO HANDLE MAILRULE
+	$SQL_RESULT = $DB->query("SELECT * FROM ".get_table_name('mailrules')"
+                            WHERE  del<>1
+                            AND    user_id=?",
+                            $_SESSION['user_id']);
+	while ($sql_arr = $DB->fetch_assoc($SQL_RESULT))
+		{
+			$SQL_ARRA[] = $sql_arr;
+		}
+  //
   // create row for each message
-  foreach ($a_headers as $i => $header)  //while (list($i, $header) = each($a_headers))
+  foreach ($a_headers as $i => $header)
     {
+	//ADDED TO HANDLE MAILRULE
+
+	$from_parts = $IMAP->decode_address_list($header->from);
+	$to_parts = $IMAP->decode_address_list($header->to);
+	$moved_message = 0;
+
+	foreach($SQL_ARRA as $sql_arr)
+	{
+	   $need_to_be_moved = 0;
+	foreach($from_parts as $from_part)
+	 {
+		if(empty($sql_arr['from']) || stristr($from_part['name'],$sql_arr['from']) || stristr($from_part['address'],$sql_arr['from']))
+		{
+			$need_to_be_moved++;
+		}
+	}
+	
+	foreach($to_parts as $to_part)
+	{
+		if(empty($sql_arr['to']) || stristr($to_part['name'],$sql_arr['to']) || stristr($to_part['address'],$sql_arr['to']))
+		{
+			$need_to_be_moved++;
+		}
+	}
+	   
+	if(empty($sql_arr['subject']) || stristr(rep_specialchars_output($IMAP->decode_header($header->subject), 'html', 'all'),$sql_arr['subject']))
+		{
+			$need_to_be_moved++;
+		}
+	   
+	  if($need_to_be_moved == 3)
+	  {
+	    $IMAP->move_message($header->uid,$sql_arr['location'],$_SESSION['mbox']);
+	    $moved_message = 1;
+	    break;
+        }
+	}
+	if($moved_message == 0)
+	   {
+	//
+		
     $message_icon = $attach_icon = '';
     $js_row_arr = array();
     $zebra_class = $i%2 ? 'even' : 'odd';
@@ -468,12 +521,17 @@
     
     if (sizeof($js_row_arr))
       $a_js_message_arr[$header->uid] = $js_row_arr;
+
+    //ADDED TO HANDLE MAILRULE
     }
-  
+    //
+    }
+     
   // complete message table
   $out .= "</tbody></table>\n";
   
   
+  
   $message_count = $IMAP->messagecount();
   
   // set client env
Index: skins/default/settings.css
===================================================================
--- skins/default/settings.css	(revision 424)
+++ skins/default/settings.css	(working copy)
@@ -59,6 +59,7 @@
   padding-right: 10px;
 }
 
+#mailrules-list,
 #identities-list,
 #folder-manager
 {
@@ -76,6 +77,7 @@
   height: expression((parseInt(document.documentElement.clientHeight)-215)+'px');
 }
 
+#mailrules-table,
 #identities-table
 {
   width: 600px;
@@ -83,11 +85,13 @@
   background-color: #F9F9F9;
 }
 
+#mailrules-table tbody td,
 #identities-table tbody td
 {
   cursor: pointer;
 }
 
+#mailrule-frame,
 #identity-frame
 {
   position: relative;
@@ -95,6 +99,7 @@
   border: 1px solid #999999;
 }
 
+#mailrule-details,
 #identity-details
 {
   margin-top: 30px;
@@ -102,6 +107,7 @@
   border: 1px solid #999999;
 }
 
+#mailrule-details table td.title,
 #identity-details table td.title
 {
   color: #666666;
@@ -121,6 +127,7 @@
 
 #userprefs-title,
 #identity-title,
+#mailrule-title,
 div.boxtitle,
 #subscription-table thead td
 {
Index: skins/default/templates/editmailrule.html
===================================================================
--- skins/default/templates/editmailrule.html	(revision 0)
+++ skins/default/templates/editmailrule.html	(revision 0)
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/settings.css" />
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+
+<div id="mailrules-list">
+<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" />
+
+<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p>
+
+<div id="mailrule-details">
+<div id="mailrule-title"><roundcube:label name="edititem" /></div>
+
+<div style="padding:15px;">
+<roundcube:object name="mailrulesform" size="40" />
+
+<p><br />
+<roundcube:button command="delete" type="input" class="button" label="delete" />&nbsp;
+<roundcube:button command="save" type="input" class="button" label="save" />
+</p>
+</div>
+</div>
+</div>
+
+<roundcube:include file="/includes/settingscripts.html" />
+
+</body>
+</html>
Index: skins/default/templates/mail.html
===================================================================
--- skins/default/templates/mail.html	(revision 424)
+++ skins/default/templates/mail.html	(working copy)
@@ -26,11 +26,9 @@
 </div>
 
 <div id="messagecountbar">
-<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessages" />
 <roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" />
 &nbsp;<roundcube:object name="messageCountDisplay" />&nbsp;
 <roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" />
-<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessages" />
 </div>
 
 <div id="mailboxlist-header"><roundcube:label name="mailboxlist" /></div>
@@ -77,7 +75,7 @@
 <roundcube:button command="select-all" label="all" classAct="active" />&nbsp;
 <roundcube:button command="select-all" prop="unread" label="unread" classAct="active" />&nbsp;
 <roundcube:button command="select-none" label="none" classAct="active" /> &nbsp;&nbsp;&nbsp;
-<roundcube:label name="quota" />: <roundcube:object name="quotaDisplay" display="image" width="120" id="quotadisplay" />
+<roundcube:label name="quota" />: <roundcube:object name="quotaDisplay" />
 </div>
 
 </body>
Index: skins/default/templates/addmailrule.html
===================================================================
--- skins/default/templates/addmailrule.html	(revision 0)
+++ skins/default/templates/addmailrule.html	(revision 0)
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/settings.css" />
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+
+<div id="mailrules-list">
+<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" />
+
+<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p>
+
+<div id="mailrule-details">
+<div id="mailrule-title"><roundcube:label name="edititem" /></div>
+
+<div style="padding:15px;">
+<roundcube:object name="mailrulesform" size="40" />
+
+<p><br />
+<roundcube:button command="save" type="input" class="button" label="save" />
+</p>
+</div>
+</div>
+</div>
+
+<roundcube:include file="/includes/settingscripts.html" />
+
+</body>
+</html>
\ No newline at end of file
Index: skins/default/templates/message.html
===================================================================
--- skins/default/templates/message.html	(revision 424)
+++ skins/default/templates/message.html	(working copy)
@@ -11,11 +11,9 @@
 <roundcube:include file="/includes/header.html" />
 
 <div id="messagecountbar">
-<roundcube:button command="firstmessage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessage" />
-<roundcube:button command="previousmessage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessage" />
+<roundcube:button command="previousmessage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" />
 &nbsp;<roundcube:object name="messageCountDisplay" />&nbsp;
-<roundcube:button command="nextmessage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessage" />
-<roundcube:button command="lastmessage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessage" />
+<roundcube:button command="nextmessage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" />
 </div>
 
 <div id="messagetoolbar">
Index: skins/default/templates/mailrules.html
===================================================================
--- skins/default/templates/mailrules.html	(revision 0)
+++ skins/default/templates/mailrules.html	(revision 0)
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/settings.css" />
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mailrules-list">
+<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" />
+
+<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p>
+</div>
+
+<roundcube:include file="/includes/settingscripts.html" />
+
+</body>
+</html>
Index: skins/default/templates/addressbook.html
===================================================================
--- skins/default/templates/addressbook.html	(revision 424)
+++ skins/default/templates/addressbook.html	(working copy)
@@ -21,11 +21,9 @@
 </div>
 
 <div id="abookcountbar">
-<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstpage" />
 <roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previouspage" />
 &nbsp;<roundcube:object name="recordsCountDisplay" />&nbsp;
 <roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextpage" />
-<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastpage" />
 </div>
 
 <div id="addresslist">
Index: skins/default/templates/compose.html
===================================================================
--- skins/default/templates/compose.html	(revision 424)
+++ skins/default/templates/compose.html	(working copy)
@@ -106,9 +106,7 @@
 <td align="right">
 <roundcube:label name="charset" />:&nbsp;<roundcube:object name="charsetSelector" tabindex="8" />
 </td>
-<td align="right">
- <roundcube:label name="editortype" />:&nbsp;</td>
-<roundcube:object name="editorSelector" tabindex="9" />
+
 </tr></tbody></table>
 
 </td>
Index: skins/default/templates/ldappublicsearch.html
===================================================================
--- skins/default/templates/ldappublicsearch.html	(revision 424)
+++ skins/default/templates/ldappublicsearch.html	(working copy)
@@ -22,7 +22,7 @@
 <roundcube:object name="ldappublicaddresslist"
   id="ldappublicaddresslist"
   cellspacing="0"
-  summary="LDAP email address list" />
+  summary="Ldap email address list" />
 </div>
 
 <roundcube:include file="/includes/ldapscripts.html" />
Index: skins/default/templates/login.html
===================================================================
--- skins/default/templates/login.html	(revision 424)
+++ skins/default/templates/login.html	(working copy)
@@ -24,7 +24,7 @@
 <form name="form" action="./" method="post">
 <roundcube:object name="loginform" form="form" />
 
-<p style="text-align: center;"><input type="submit" class="button" value="<roundcube:label name="login" />" /></p>
+<p style="text-align: center;"><input type="submit" class="button" value="<roundcube:label name="login" />" />
 
 </form>
 </div>
Index: skins/default/includes/settingstabs.html
===================================================================
--- skins/default/includes/settingstabs.html	(revision 424)
+++ skins/default/includes/settingstabs.html	(working copy)
@@ -1,3 +1,6 @@
 <div id="tabsbar">
-<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span><span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span><span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span>
+<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span>
+<span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span>
+<span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span>
+<span id="settingstabmailrules" class="tablink"><roundcube:button command="mailrules" type="link" label="mailrules" title="managemailrules" class="tablink" /></span>
 </div>
Index: index.php
===================================================================
--- index.php	(revision 424)
+++ index.php	(working copy)
@@ -358,7 +358,7 @@
 
   if ($_action=='add-identity' || $_action=='edit-identity')
     include('program/steps/settings/edit_identity.inc');
-
+	
   if ($_action=='delete-identity')
     include('program/steps/settings/delete_identity.inc');
   
@@ -372,6 +372,20 @@
       $_action=='create-folder' || $_action=='rename-folder' || $_action=='delete-folder')
     include('program/steps/settings/manage_folders.inc');
 
+	
+// ADDED TO HANDLE MAILRULE
+  if ($_action=='mailrules')
+    include('program/steps/settings/mailrules.inc');
+
+  if ($_action=='save-mailrule')
+    include('program/steps/settings/save_mailrule.inc');
+	
+  if ($_action=='edit-mailrule' || $_action=='add-mailrule')
+    include('program/steps/settings/edit_mailrule.inc');
+	
+  if ($_action=='delete-mailrule')
+    include('program/steps/settings/delete_mailrule.inc');
+//
   }
 
 
