From 98cb0f179206843ceaa87df6bfb3d1da045ed8ad Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Sat, 29 Jan 2011 09:55:12 -0500
Subject: [PATCH] Apply bug fixes and localization updated from trunk for release 0.5.1

---
 program/localization/bg_BG/labels.inc               |   44 +
 INSTALL                                             |    2 
 program/localization/fr_FR/labels.inc               |    5 
 program/include/main.inc                            |    9 
 skins/default/mail.css                              |   77 +-
 skins/default/templates/message.html                |    1 
 program/localization/it_IT/labels.inc               |   36 +
 program/localization/de_DE/labels.inc               |   34 +
 index.php                                           |   15 
 SQL/sqlite.update.sql                               |    2 
 program/localization/da_DK/labels.inc               |   54 ++
 program/localization/ja_JP/labels.inc               |   40 +
 program/steps/settings/func.inc                     |    1 
 program/localization/sv_SE/labels.inc               |   34 +
 program/localization/de_DE/messages.inc             |    5 
 CHANGELOG                                           |   21 
 program/localization/az_AZ/labels.inc               |   53 ++
 program/localization/he_IL/labels.inc               |   31 +
 program/localization/sv_SE/messages.inc             |    1 
 program/steps/settings/save_prefs.inc               |    2 
 program/js/tiny_mce/themes/advanced/langs/sv_dlg.js |    4 
 program/lib/Net/Socket.php                          |  209 +++++--
 program/localization/sk_SK/messages.inc             |   27 +
 program/js/app.js                                   |   33 +
 program/localization/pt_PT/messages.inc             |    1 
 program/include/rcube_html_page.php                 |   86 +-
 skins/default/common.css                            |    2 
 program/localization/fr_FR/messages.inc             |   12 
 installer/check.php                                 |    2 
 program/localization/az_AZ/messages.inc             |   27 +
 program/localization/sk_SK/labels.inc               |   22 
 SQL/mysql.update.sql                                |    2 
 program/include/iniset.php                          |    2 
 skins/default/iehacks.css                           |    5 
 program/localization/da_DK/messages.inc             |   28 +
 program/localization/ja_JP/messages.inc             |    3 
 program/localization/zh_TW/messages.inc             |   13 
 program/localization/zh_TW/labels.inc               |   41 +
 program/steps/mail/func.inc                         |   36 
 skins/default/templates/addressbook.html            |    1 
 program/localization/ru_RU/labels.inc               |   31 +
 program/localization/it_IT/messages.inc             |    5 
 program/include/rcube_plugin_api.php                |    3 
 program/steps/settings/folders.inc                  |   17 
 program/steps/addressbook/save.inc                  |   12 
 program/localization/he_IL/messages.inc             |    1 
 skins/default/templates/messagepreview.html         |    1 
 program/lib/Net/IDNA2.php                           |  252 +++++++--
 program/localization/pt_PT/labels.inc               |   29 +
 skins/default/ie6hacks.css                          |    2 
 program/include/rcube_imap.php                      |   95 +++
 program/localization/hu_HU/labels.inc               |    2 
 program/include/rcmail.php                          |    4 
 SQL/postgres.update.sql                             |    1 
 program/include/rcube_template.php                  |    4 
 program/localization/bg_BG/messages.inc             |   13 
 program/localization/ru_RU/messages.inc             |    1 
 57 files changed, 1,184 insertions(+), 312 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 3a24db1..c9ccc27 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,27 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+RELEASE 0.5.1
+-------------
+- Fix settings UI on IE 6 (#1487724)
+- Remove double borders in folder listing (#1487713)
+- Separate full message headers UI element from headers table (#1487715)
+- Add part MIME ID to message_part_* hooks (#1487718) 
+- Updated PEAR::Net_Socket to 1.0.10
+- Updated PEAR::Net_IDNA2 to 0.1.1
+- Fix handling of comments inside an email address spec. (#1487673)
+- Show full mail subject as title when hovering a cut subject link (#1487128)
+- Fix randomly disappearing folders list in IE (#1487704)
+- Fix list column add/removal in IE (#1487703)
+- Fix login redirect issues (#1487686)
+- Require PHP 5.2.1 or greater
+- Fix %h/%z variables in username_domain option (#1487701)
+- Workaround for setting charset in case of malformed bodystructure response (#1487700)
+- Fix impossible to subscribe to protected folders (#1487656)
+- Fix setting timezone in Preferences (#1487705)
+
+RELEASE 0.5
+-----------
 - Fix double-login/session issue (#1487104)
 - Wrap HTML parts with <html><body> and add Doctype declaration (#1487098)
 - Make rcube_autoload silently skip unknown classes (#1487109)
diff --git a/INSTALL b/INSTALL
index eb83997..49aae92 100644
--- a/INSTALL
+++ b/INSTALL
@@ -11,7 +11,7 @@
 
 * The Apache or Lighttpd Webserver
 * .htaccess support allowing overrides for DirectoryIndex
-* PHP Version 5.2 or greater including
+* PHP Version 5.2.1 or greater including
    - PCRE, DOM, JSON, XML, Session, Sockets (required)
    - libiconv (recommended)
    - mbstring, fileinfo, mcrypt (optional)
diff --git a/SQL/mysql.update.sql b/SQL/mysql.update.sql
index 2af0a47..aaab43f 100644
--- a/SQL/mysql.update.sql
+++ b/SQL/mysql.update.sql
@@ -131,3 +131,5 @@
 
 ALTER TABLE `contacts` MODIFY `email` varchar(255) NOT NULL;
 
+TRUNCATE TABLE `messages`;
+
diff --git a/SQL/postgres.update.sql b/SQL/postgres.update.sql
index 444caf6..2f4498d 100644
--- a/SQL/postgres.update.sql
+++ b/SQL/postgres.update.sql
@@ -88,3 +88,4 @@
 ALTER TABLE users ADD UNIQUE (username, mail_host);
 ALTER TABLE contacts ALTER email TYPE varchar(255);
 
+TRUNCATE messages;
diff --git a/SQL/sqlite.update.sql b/SQL/sqlite.update.sql
index 3286939..6f2acf9 100644
--- a/SQL/sqlite.update.sql
+++ b/SQL/sqlite.update.sql
@@ -180,3 +180,5 @@
 CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
 DROP TABLE contacts_tmp;
 
+DELETE FROM messages;
+
diff --git a/index.php b/index.php
index d44e13b..89066b5 100644
--- a/index.php
+++ b/index.php
@@ -2,9 +2,9 @@
 /*
  +-------------------------------------------------------------------------+
  | Roundcube Webmail IMAP Client                                           |
- | Version 0.5                                                             |
+ | Version 0.5.1                                                           |
  |                                                                         |
- | Copyright (C) 2005-2010, Roundcube Dev. - Switzerland                   |
+ | Copyright (C) 2005-2011, Roundcube Dev. - Switzerland                   |
  |                                                                         |
  | This program is free software; you can redistribute it and/or modify    |
  | it under the terms of the GNU General Public License version 2          |
@@ -104,12 +104,17 @@
     rcmail_log_login();
 
     // restore original request parameters
-    $query = array('_task' => 'mail');
-    if ($url = get_input_value('_url', RCUBE_INPUT_POST))
+    $query = array();
+    if ($url = get_input_value('_url', RCUBE_INPUT_POST)) {
       parse_str($url, $query);
+      
+      // prevent endless looping on login page
+      if ($query['_task'] == 'login')
+        unset($query['_task']);
+    }
 
     // allow plugins to control the redirect url after login success
-    $redir = $RCMAIL->plugins->exec_hook('login_after', $query);
+    $redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('_task' => 'mail'));
     unset($redir['abort']);
 
     // send redirect
diff --git a/installer/check.php b/installer/check.php
index 7fa4d95..0ba5f58 100644
--- a/installer/check.php
+++ b/installer/check.php
@@ -68,7 +68,7 @@
 <h3>Checking PHP version</h3>
 <?php
 
-define('MIN_PHP_VERSION', '5.2.0');
+define('MIN_PHP_VERSION', '5.2.1');
 if (version_compare(PHP_VERSION, MIN_PHP_VERSION, '>=')) {
     $RCI->pass('Version', 'PHP ' . PHP_VERSION . ' detected');
 } else {
diff --git a/program/include/iniset.php b/program/include/iniset.php
index aeb4549..ac96880 100755
--- a/program/include/iniset.php
+++ b/program/include/iniset.php
@@ -36,7 +36,7 @@
 }
 
 // application constants
-define('RCMAIL_VERSION', '0.5');
+define('RCMAIL_VERSION', '0.5.1');
 define('RCMAIL_CHARSET', 'UTF-8');
 define('JS_OBJECT_NAME', 'rcmail');
 define('RCMAIL_START', microtime(true));
diff --git a/program/include/main.inc b/program/include/main.inc
index b61f8ae..b8d27d6 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -861,8 +861,8 @@
   $replacements = new rcube_string_replacer;
 
   // ignore the whole block if evil styles are detected
-  $stripped = preg_replace('/[^a-z\(:]/', '', rcmail_xss_entity_decode($source));
-  if (preg_match('/expression|behavior|url\(|import/', $stripped))
+  $stripped = preg_replace('/[^a-z\(:;]/', '', rcmail_xss_entity_decode($source));
+  if (preg_match('/expression|behavior|url\(|import[^a]/', $stripped))
     return '/* evil! */';
 
   // remove css comments (sometimes used for some ugly hacks)
@@ -1771,16 +1771,17 @@
  * Replaces hostname variables
  *
  * @param string $name Hostname
+ * @param string $host Optional IMAP hostname
  * @return string
  */
-function rcube_parse_host($name)
+function rcube_parse_host($name, $host='')
 {
   // %n - host
   $n = preg_replace('/:\d+$/', '', $_SERVER['SERVER_NAME']);
   // %d - domain name without first part, e.g. %d=mail.domain.tld, %m=domain.tld
   $d = preg_replace('/^[^\.]+\./', '', $n);
   // %h - IMAP host
-  $h = $_SESSION['imap_host'];
+  $h = $_SESSION['imap_host'] ? $_SESSION['imap_host'] : $host;
   // %z - IMAP domain without first part, e.g. %h=imap.domain.tld, %z=domain.tld
   $z = preg_replace('/^[^\.]+\./', '', $h);
 
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index e4078a7..e9f5b5f 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -673,9 +673,9 @@
     // Check if we need to add domain
     if (!empty($config['username_domain']) && strpos($username, '@') === false) {
       if (is_array($config['username_domain']) && isset($config['username_domain'][$host]))
-        $username .= '@'.rcube_parse_host($config['username_domain'][$host]);
+        $username .= '@'.rcube_parse_host($config['username_domain'][$host], $host);
       else if (is_string($config['username_domain']))
-        $username .= '@'.rcube_parse_host($config['username_domain']);
+        $username .= '@'.rcube_parse_host($config['username_domain'], $host);
     }
 
     // Convert username to lowercase. If IMAP backend
diff --git a/program/include/rcube_html_page.php b/program/include/rcube_html_page.php
index 06cb5cb..9ac03d0 100644
--- a/program/include/rcube_html_page.php
+++ b/program/include/rcube_html_page.php
@@ -28,11 +28,13 @@
 {
     protected $scripts_path = '';
     protected $script_files = array();
+    protected $css_files = array();
     protected $scripts = array();
     protected $charset = RCMAIL_CHARSET;
 
     protected $script_tag_file = "<script type=\"text/javascript\" src=\"%s\"></script>\n";
     protected $script_tag  =  "<script type=\"text/javascript\">\n/* <![CDATA[ */\n%s\n/* ]]> */\n</script>";
+    protected $link_css_file = "<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\" />\n";
     protected $default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>";
 
     protected $title = '';
@@ -61,6 +63,9 @@
         if (in_array($file, $sa_files)) {
             return;
         }
+
+        $sa_files[] = $file;
+
         if (!is_array($this->script_files[$position])) {
             $this->script_files[$position] = array();
         }
@@ -80,6 +85,16 @@
         } else {
             $this->scripts[$position] .= "\n".rtrim($script);
         }
+    }
+
+    /**
+     * Link an external css file
+     *
+     * @param string File URL
+     */
+    public function include_css($file)
+    {
+        $this->css_files[] = $file;
     }
 
     /**
@@ -163,52 +178,53 @@
         }
 
         // replace specialchars in content
-        $__page_title = Q($this->title, 'show', FALSE);
-        $__page_header = $__page_body = $__page_footer = '';
+        $page_title  = Q($this->title, 'show', FALSE);
+        $page_header = '';
+        $page_footer = '';
 
         // include meta tag with charset
         if (!empty($this->charset)) {
             if (!headers_sent()) {
                 header('Content-Type: text/html; charset=' . $this->charset);
             }
-            $__page_header = '<meta http-equiv="content-type"';
-            $__page_header.= ' content="text/html; charset=';
-            $__page_header.= $this->charset . '" />'."\n";
+            $page_header = '<meta http-equiv="content-type"';
+            $page_header.= ' content="text/html; charset=';
+            $page_header.= $this->charset . '" />'."\n";
         }
 
         // definition of the code to be placed in the document header and footer
         if (is_array($this->script_files['head'])) {
             foreach ($this->script_files['head'] as $file) {
-                $__page_header .= sprintf($this->script_tag_file, $file);
+                $page_header .= sprintf($this->script_tag_file, $file);
             }
         }
 
         $head_script = $this->scripts['head_top'] . $this->scripts['head'];
         if (!empty($head_script)) {
-            $__page_header .= sprintf($this->script_tag, $head_script);
+            $page_header .= sprintf($this->script_tag, $head_script);
         }
 
         if (!empty($this->header)) {
-            $__page_header .= $this->header;
+            $page_header .= $this->header;
         }
 
         if (is_array($this->script_files['foot'])) {
             foreach ($this->script_files['foot'] as $file) {
-                $__page_footer .= sprintf($this->script_tag_file, $file);
+                $page_footer .= sprintf($this->script_tag_file, $file);
             }
         }
 
         if (!empty($this->scripts['foot'])) {
-            $__page_footer .= sprintf($this->script_tag, $this->scripts['foot']);
+            $page_footer .= sprintf($this->script_tag, $this->scripts['foot']);
         }
 
         if (!empty($this->footer)) {
-            $__page_footer .= $this->footer;
+            $page_footer .= $this->footer;
         }
 
         // find page header
         if ($hpos = stripos($output, '</head>')) {
-            $__page_header .= "\n";
+            $page_header .= "\n";
         }
         else {
             if (!is_numeric($hpos)) {
@@ -220,49 +236,43 @@
                 }
                 $hpos++;
             }
-            $__page_header = "<head>\n<title>$__page_title</title>\n$__page_header\n</head>\n";
+            $page_header = "<head>\n<title>$page_title</title>\n$page_header\n</head>\n";
         }
 
         // add page hader
         if ($hpos) {
-            $output = substr($output,0,$hpos) . $__page_header . substr($output,$hpos,strlen($output));
+            $output = substr($output,0,$hpos) . $page_header . substr($output,$hpos,strlen($output));
         }
         else {
-            $output = $__page_header . $output;
+            $output = $page_header . $output;
         }
 
-        // find page body
-        if ($bpos = stripos($output, '<body')) {
-            while ($output[$bpos] != '>') {
-                $bpos++;
-            }
-            $bpos++;
-        }
-        else {
-            $bpos = stripos($output, '</head>')+7;
-        }
-
-        // add page body
-        if ($bpos && $__page_body) {
-            $output = substr($output,0,$bpos) . "\n$__page_body\n" . substr($output,$bpos,strlen($output));
-        }
-
-        // find and add page footer
+        // add page footer
         if (($fpos = strripos($output, '</body>')) || ($fpos = strripos($output, '</html>'))) {
-            $output = substr($output, 0, $fpos) . "$__page_footer\n" . substr($output, $fpos);
+            $output = substr($output, 0, $fpos) . "$page_footer\n" . substr($output, $fpos);
         }
         else {
-            $output .= "\n".$__page_footer;
+            $output .= "\n".$page_footer;
         }
 
-        // reset those global vars
-        $__page_header = $__page_footer = '';
+        // add css files in head, before scripts, for speed up with parallel downloads
+        if (!empty($this->css_files) && 
+            (($pos = stripos($output, '<script ')) || ($pos = stripos($output, '</head>')))
+        ) {
+            $css = '';
+            foreach ($this->css_files as $file) {
+                $css .= sprintf($this->link_css_file, $file);
+            }
+            $output = substr($output, 0, $pos) . $css . substr($output, $pos);
+        }
 
 	    $this->base_path = $base_path;
+
         // correct absolute paths in images and other tags
 	    // add timestamp to .js and .css filename
-        $output = preg_replace_callback('!(src|href|background)=(["\']?)([a-z0-9/_.-]+)(["\'\s>])!i',
-	    array($this, 'file_callback'), $output);
+        $output = preg_replace_callback(
+            '!(src|href|background)=(["\']?)([a-z0-9/_.-]+)(["\'\s>])!i',
+	        array($this, 'file_callback'), $output);
         $output = str_replace('$__skin_path', $base_path, $output);
 
         if ($this->charset != RCMAIL_CHARSET)
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 2697504..bfbf740 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2053,7 +2053,7 @@
                 return false;
         }
 
-        $struct = &$this->_structure_part($structure);
+        $struct = &$this->_structure_part($structure, 0, '', $headers);
         $struct->headers = get_object_vars($headers);
 
         // don't trust given content-type
@@ -2185,6 +2185,11 @@
                 $struct->charset = $struct->ctype_parameters['charset'];
         }
 
+        // #1487700: workaround for lack of charset in malformed structure
+        if (empty($struct->charset) && !empty($mime_headers) && $mime_headers->charset) {
+            $struct->charset = $mime_headers->charset;
+        }
+
         // read content encoding
         if (!empty($part[5]) && $part[5]!='NIL') {
             $struct->encoding = strtolower($part[5]);
@@ -2233,7 +2238,11 @@
                 $mime_headers = $this->conn->fetchPartHeader(
                     $this->mailbox, $this->_msg_id, false, $struct->mime_id);
             }
-            $struct->headers = $this->_parse_headers($mime_headers) + $struct->headers;
+
+            if (is_string($mime_headers))
+                $struct->headers = $this->_parse_headers($mime_headers) + $struct->headers;
+            else if (is_object($mime_headers))
+                $struct->headers = get_object_vars($mime_headers) + $struct->headers;
 
             // get real content-type of message/rfc822
             if ($struct->mimetype == 'message/rfc822') {
@@ -4691,10 +4700,13 @@
     private function _parse_address_list($str, $decode=true)
     {
         // remove any newlines and carriage returns before
-        $a = rcube_explode_quoted_string('[,;]', preg_replace( "/[\r\n]/", " ", $str));
+        $str = preg_replace('/\r?\n(\s|\t)?/', ' ', $str);
+
+        // extract list items, remove comments
+        $str = self::explode_header_string(',;', $str, true);
         $result = array();
 
-        foreach ($a as $key => $val) {
+        foreach ($str as $key => $val) {
             $name    = '';
             $address = '';
             $val     = trim($val);
@@ -4736,6 +4748,81 @@
 
 
     /**
+     * Explodes header (e.g. address-list) string into array of strings
+     * using specified separator characters with proper handling
+     * of quoted-strings and comments (RFC2822)
+     *
+     * @param string $separator       String containing separator characters
+     * @param string $str             Header string
+     * @param bool   $remove_comments Enable to remove comments
+     *
+     * @return array Header items
+     */
+    static function explode_header_string($separator, $str, $remove_comments=false)
+    {
+        $length  = strlen($str);
+        $result  = array();
+        $quoted  = false;
+        $comment = 0;
+        $out     = '';
+
+        for ($i=0; $i<$length; $i++) {
+            // we're inside a quoted string
+            if ($quoted) {
+                if ($str[$i] == '"') {
+                    $quoted = false;
+                }
+                else if ($str[$i] == '\\') {
+                    if ($comment <= 0) {
+                        $out .= '\\';
+                    }
+                    $i++;
+                }
+            }
+            // we're inside a comment string
+            else if ($comment > 0) {
+                    if ($str[$i] == ')') {
+                        $comment--;
+                    }
+                    else if ($str[$i] == '(') {
+                        $comment++;
+                    }
+                    else if ($str[$i] == '\\') {
+                        $i++;
+                    }
+                    continue;
+            }
+            // separator, add to result array
+            else if (strpos($separator, $str[$i]) !== false) {
+                    if ($out) {
+                        $result[] = $out;
+                    }
+                    $out = '';
+                    continue;
+            }
+            // start of quoted string
+            else if ($str[$i] == '"') {
+                    $quoted = true;
+            }
+            // start of comment
+            else if ($remove_comments && $str[$i] == '(') {
+                    $comment++;
+            }
+
+            if ($comment <= 0) {
+                $out .= $str[$i];
+            }
+        }
+
+        if ($out && $comment <= 0) {
+            $result[] = $out;
+        }
+
+        return $result;
+    }
+
+
+    /**
      * This is our own debug handler for the IMAP connection
      * @access public
      */
diff --git a/program/include/rcube_plugin_api.php b/program/include/rcube_plugin_api.php
index f0fe8c2..ab5c406 100644
--- a/program/include/rcube_plugin_api.php
+++ b/program/include/rcube_plugin_api.php
@@ -395,7 +395,7 @@
   {
     if ($this->output->type == 'html') {
       $src = $this->resource_url($fn);
-      $this->output->add_header(html::tag('link', array('rel' => "stylesheet", 'type' => "text/css", 'href' => $src)));
+      $this->output->include_css($src);
     }
   }
   
@@ -437,4 +437,3 @@
   }
 
 }
-
diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index 92eddc2..5433dc2 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -1229,8 +1229,8 @@
             'UTF-8'        => 'UTF-8 ('.rcube_label('unicode').')',
             'US-ASCII'     => 'ASCII ('.rcube_label('english').')',
             'ISO-8859-1'   => 'ISO-8859-1 ('.rcube_label('westerneuropean').')',
-            'ISO-8859-2'   => 'ISO-8895-2 ('.rcube_label('easterneuropean').')',
-            'ISO-8859-4'   => 'ISO-8895-4 ('.rcube_label('baltic').')',
+            'ISO-8859-2'   => 'ISO-8859-2 ('.rcube_label('easterneuropean').')',
+            'ISO-8859-4'   => 'ISO-8859-4 ('.rcube_label('baltic').')',
             'ISO-8859-5'   => 'ISO-8859-5 ('.rcube_label('cyrillic').')',
             'ISO-8859-6'   => 'ISO-8859-6 ('.rcube_label('arabic').')',
             'ISO-8859-7'   => 'ISO-8859-7 ('.rcube_label('greek').')',
diff --git a/program/js/app.js b/program/js/app.js
index 346f4e4..38141a9 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1006,15 +1006,9 @@
 
       // user settings commands
       case 'preferences':
-        this.goto_url('');
-        break;
-
       case 'identities':
-        this.goto_url('settings/identities');
-        break;
-
       case 'folders':
-        this.goto_url('settings/folders');
+        this.goto_url('settings/' + command);
         break;
 
       // unified command call (command name == function name)
@@ -1701,7 +1695,7 @@
       var action = flags.mbox == this.env.drafts_mailbox ? 'compose' : 'show';
       var uid_param = flags.mbox == this.env.drafts_mailbox ? '_draft_uid' : '_uid';
       cols.subject = '<a href="./?_task=mail&_action='+action+'&_mbox='+urlencode(flags.mbox)+'&'+uid_param+'='+uid+'"'+
-        ' onclick="return rcube_event.cancel(event)">'+cols.subject+'</a>';
+        ' onclick="return rcube_event.cancel(event)" onmouseover="rcube_webmail.long_subject_title(this,'+(message.depth+1)+')">'+cols.subject+'</a>';
     }
 
     // add each submitted col
@@ -3777,6 +3771,9 @@
         this.show_contentframe(false);
     }
 
+    if (this.env.group)
+      qs += '&_gid='+urlencode(this.env.group);
+
     // also send search request to get the right records from the next page
     if (this.env.search_request) 
       qs += '&_search='+this.env.search_request;
@@ -4309,6 +4306,14 @@
     }
   };
 
+  // disables subscription checkbox (for protected folder)
+  this.disable_subscription = function(folder)
+  {
+    var id = this.get_folder_row_id(folder);
+    if (id)
+      $('input[name="_subscribed[]"]', $('#'+id)).attr('disabled', true);
+  };
+
   this.folder_size = function(folder)
   {
     var lock = this.set_busy(true, 'loading');
@@ -4666,6 +4671,7 @@
         }
         th.appendChild(tr);
         thead.parentNode.replaceChild(th, thead);
+        thead = th;
       }
 
       for (n=0, len=this.env.coltypes.length; n<len; n++) {
@@ -5288,6 +5294,17 @@
 
 }  // end object rcube_webmail
 
+
+// some static methods
+rcube_webmail.long_subject_title = function(elem, indent)
+{
+  if (!elem.title) {
+    var $elem = $(elem);
+    if ($elem.width() + indent * 15 > $elem.parent().width())
+      elem.title = $elem.html();
+  }
+};
+
 // copy event engine prototype
 rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener;
 rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener;
diff --git a/program/js/tiny_mce/themes/advanced/langs/sv_dlg.js b/program/js/tiny_mce/themes/advanced/langs/sv_dlg.js
index 12a5941..a9b93de 100755
--- a/program/js/tiny_mce/themes/advanced/langs/sv_dlg.js
+++ b/program/js/tiny_mce/themes/advanced/langs/sv_dlg.js
@@ -42,8 +42,8 @@
 link_title:"Infoga/redigera l\u00E4nk",
 link_url:"L\u00E4nkens URL",
 link_target:"M\u00E5l",
-link_target_same:"\u00D6\u0096ppna l\u00E4nken i samma f\u00F6nster",
-link_target_blank:"\u00D6\u0096ppna l\u00E4nken i ett nytt f\u00F6nster",
+link_target_same:"\u00D6ppna l\u00E4nken i samma f\u00F6nster",
+link_target_blank:"\u00D6ppna l\u00E4nken i ett nytt f\u00F6nster",
 link_titlefield:"Titel",
 link_is_email:"L\u00E4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00E5 l\u00E4nken?",
 link_is_external:"L\u00E4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00E5 l\u00E4nken?",
diff --git a/program/lib/Net/IDNA2.php b/program/lib/Net/IDNA2.php
index 0c5f352..8c366fb 100644
--- a/program/lib/Net/IDNA2.php
+++ b/program/lib/Net/IDNA2.php
@@ -49,11 +49,11 @@
  *
  * ACE input and output is always expected to be ASCII.
  *
+ * @package Net
  * @author  Markus Nix <mnix@docuverse.de>
  * @author  Matthias Sommerfeld <mso@phlylabs.de>
  * @author  Stefan Neufeind <pear.neufeind@speedpartner.de>
- * @package Net
- * @version $Id: IDNA2.php 301175 2010-07-12 03:31:17Z clockwerx $
+ * @version $Id: IDNA2.php 305344 2010-11-14 23:52:42Z neufeind $
  */
 class Net_IDNA2
 {
@@ -1124,8 +1124,8 @@
         0x33BE  => array(0x6B, 0x77),
         0x33BF  => array(0x6D, 0x77),
         0x33C0  => array(0x6B, 0x3C9),
-        0x33C1  => array(0x6D, 0x3C9), /*
-        0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E), */
+        0x33C1  => array(0x6D, 0x3C9),
+        /* 0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E), */
         0x33C3  => array(0x62, 0x71),
         0x33C6  => array(0x63, 0x2215, 0x6B, 0x67),
         0x33C7  => array(0x63, 0x6F, 0x2E),
@@ -2194,6 +2194,20 @@
     private $_strict_mode = false;
 
     /**
+     * IDNA-version to use
+     *
+     * Values are "2003" and "2008".
+     * Defaults to "2003", since that was the original version and for
+     * compatibility with previous versions of this library.
+     * If you need to encode "new" characters like the German "Eszett",
+     * please switch to 2008 first before encoding.
+     *
+     * @var bool
+     * @access private
+     */
+    private $_version = '2003';
+
+    /**
      * Cached value indicating whether or not mbstring function overloading is
      * on for strlen
      *
@@ -2210,7 +2224,8 @@
     /**
      * Constructor
      *
-     * @param  array  $options
+     * @param array $options Options to initialise the object with
+     *
      * @access public
      * @see    setParams()
      */
@@ -2243,10 +2258,11 @@
      *             on failures; false: loose mode, ideal for "wildlife" applications
      *             by silently ignoring errors and returning the original input instead]
      *
-     * @param    mixed     $option      Parameter to set (string: single parameter; array of Parameter => Value pairs)
-     * @param    string    $value       Value to use (if parameter 1 is a string)
-     * @return   boolean                true on success, false otherwise
-     * @access   public
+     * @param mixed  $option Parameter to set (string: single parameter; array of Parameter => Value pairs)
+     * @param string $value  Value to use (if parameter 1 is a string)
+     *
+     * @return boolean       true on success, false otherwise
+     * @access public
      */
     public function setParams($option, $value = false)
     {
@@ -2278,6 +2294,14 @@
                 $this->_strict_mode = ($v) ? true : false;
                 break;
 
+            case 'version':
+                if (in_array($v, array('2003', '2008'))) {
+                    $this->_version = $v;
+                } else {
+                    throw new InvalidArgumentException('Set Parameter: Invalid parameter '.$v.' for option '.$k);
+                }
+                break;
+
             default:
                 return false;
             }
@@ -2289,12 +2313,14 @@
     /**
      * Encode a given UTF-8 domain name.
      *
-     * @param    string     $decoded     Domain name (UTF-8 or UCS-4)
-     * [@param    string     $encoding    Desired input encoding, see {@link set_parameter}]
-     * @return   string                  Encoded Domain name (ACE string)
-     * @return   mixed                   processed string
-     * @throws   Exception
-     * @access   public
+     * @param string $decoded           Domain name (UTF-8 or UCS-4)
+     * @param string $one_time_encoding Desired input encoding, see {@link set_parameter}
+     *                                  If not given will use default-encoding
+     *
+     * @return string Encoded Domain name (ACE string)
+     * @return mixed  processed string
+     * @throws Exception
+     * @access public
      */
     public function encode($decoded, $one_time_encoding = false)
     {
@@ -2305,9 +2331,9 @@
             $decoded = $this->_utf8_to_ucs4($decoded);
             break;
         case 'ucs4_string':
-           $decoded = $this->_ucs4_string_to_ucs4($decoded);
+            $decoded = $this->_ucs4_string_to_ucs4($decoded);
         case 'ucs4_array': // No break; before this line. Catch case, but do nothing
-           break;
+            break;
         default:
             throw new InvalidArgumentException('Unsupported input format');
         }
@@ -2338,7 +2364,7 @@
             case 0x40:
                 // Neither email addresses nor URLs allowed in strict mode
                 if ($this->_strict_mode) {
-                   throw new InvalidArgumentException('Neither email addresses nor URLs are allowed in strict mode.');
+                    throw new InvalidArgumentException('Neither email addresses nor URLs are allowed in strict mode.');
                 }
                 // Skip first char
                 if ($k) {
@@ -2377,11 +2403,12 @@
     /**
      * Decode a given ACE domain name.
      *
-     * @param    string     $encoded     Domain name (ACE string)
-     * @param    string     $encoding    Desired output encoding, see {@link set_parameter}
-     * @return   string                  Decoded Domain name (UTF-8 or UCS-4)
-     * @throws   Exception
-     * @access   public
+     * @param string $input             Domain name (ACE string)
+     * @param string $one_time_encoding Desired output encoding, see {@link set_parameter}
+     *
+     * @return string                   Decoded Domain name (UTF-8 or UCS-4)
+     * @throws Exception
+     * @access public
      */
     public function decode($input, $one_time_encoding = false)
     {
@@ -2430,7 +2457,7 @@
                 if (isset($parsed['scheme'])) {
                     $parsed['scheme'] .= (strtolower($parsed['scheme']) == 'mailto') ? ':' : '://';
                 }
-                $return = join('', $parsed);
+                $return = $this->_unparse_url($parsed);
             } else { // parse_url seems to have failed, try without it
                 $arr = explode('.', $input);
                 foreach ($arr as $k => $v) {
@@ -2449,8 +2476,8 @@
             return $return;
             break;
         case 'ucs4_string':
-           return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
-           break;
+            return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
+            break;
         case 'ucs4_array':
             return $this->_utf8_to_ucs4($return);
             break;
@@ -2462,11 +2489,49 @@
 
     // {{{ private
     /**
+     * Opposite function to parse_url()
+     *
+     * Inspired by code from comments of php.net-documentation for parse_url()
+     *
+     * @param array $parts_arr parts (strings) as returned by parse_url()
+     *
+     * @return string
+     * @access private
+     */
+    private function _unparse_url($parts_arr)
+    {
+        if (!empty($parts_arr['scheme'])) {
+            $ret_url = $parts_arr['scheme'];
+        }
+        if (!empty($parts_arr['user'])) {
+            $ret_url .= $parts_arr['user'];
+            if (!empty($parts_arr['pass'])) {
+                $ret_url .= ':' . $parts_arr['pass'];
+            }
+            $ret_url .= '@';
+        }
+        $ret_url .= $parts_arr['host'];
+        if (!empty($parts_arr['port'])) {
+            $ret_url .= ':' . $parts_arr['port'];
+        }
+        $ret_url .= $parts_arr['path'];
+        if (!empty($parts_arr['query'])) {
+            $ret_url .= '?' . $parts_arr['query'];
+        }
+        if (!empty($parts_arr['fragment'])) {
+            $ret_url .= '#' . $parts_arr['fragment'];
+        }
+        return $ret_url;
+    }
+
+    /**
      * The actual encoding algorithm.
      *
-     * @return   string
-     * @throws   Exception
-     * @access   private
+     * @param string $decoded Decoded string which should be encoded
+     *
+     * @return string         Encoded string
+     * @throws Exception
+     * @access private
      */
     private function _encode($decoded)
     {
@@ -2517,9 +2582,10 @@
             $test = $decoded[$i];
             // Will match [0-9a-zA-Z-]
             if ((0x2F < $test && $test < 0x40)
-                    || (0x40 < $test && $test < 0x5B)
-                    || (0x60 < $test && $test <= 0x7B)
-                    || (0x2D == $test)) {
+                || (0x40 < $test && $test < 0x5B)
+                || (0x60 < $test && $test <= 0x7B)
+                || (0x2D == $test)
+            ) {
                 $encoded .= chr($decoded[$i]);
                 $codecount++;
             }
@@ -2592,9 +2658,11 @@
     /**
      * The actual decoding algorithm.
      *
-     * @return   string
-     * @throws   Exception
-     * @access   private
+     * @param string $encoded Encoded string which should be decoded
+     *
+     * @return string         Decoded string
+     * @throws Exception
+     * @access private
      */
     private function _decode($encoded)
     {
@@ -2667,7 +2735,12 @@
     /**
      * Adapt the bias according to the current code point and position.
      *
-     * @access   private
+     * @param int     $delta    ...
+     * @param int     $npoints  ...
+     * @param boolean $is_first ...
+     *
+     * @return int
+     * @access private
      */
     private function _adapt($delta, $npoints, $is_first)
     {
@@ -2684,7 +2757,10 @@
     /**
      * Encoding a certain digit.
      *
-     * @access   private
+     * @param int $d One digit to encode
+     *
+     * @return char  Encoded digit
+     * @access private
      */
     private function _encodeDigit($d)
     {
@@ -2694,7 +2770,10 @@
     /**
      * Decode a certain digit.
      *
-     * @access   private
+     * @param char $cp One digit (character) to decode
+     *
+     * @return int     Decoded digit
+     * @access private
      */
     private function _decodeDigit($cp)
     {
@@ -2705,10 +2784,11 @@
     /**
      * Do Nameprep according to RFC3491 and RFC3454.
      *
-     * @param    array      $input       Unicode Characters
-     * @return   string                  Unicode Characters, Nameprep'd
-     * @throws   Exception
-     * @access   private
+     * @param array $input Unicode Characters
+     *
+     * @return string      Unicode Characters, Nameprep'd
+     * @throws Exception
+     * @access private
      */
     private function _nameprep($input)
     {
@@ -2740,7 +2820,9 @@
                 foreach ($this->_hangulDecompose($v) as $out) {
                     $output[] = $out;
                 }
-            } else if (isset(self::$_np_replacemaps[$v])) { // There's a decomposition mapping for that code point
+            } else if (($this->_version == '2003') && isset(self::$_np_replacemaps[$v])) {
+                // There's a decomposition mapping for that code point
+                // Decompositions only in version 2003 (original) of IDNA
                 foreach ($this->_applyCannonicalOrdering(self::$_np_replacemaps[$v]) as $out) {
                     $output[] = $out;
                 }
@@ -2800,10 +2882,11 @@
      * Decomposes a Hangul syllable
      * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
      *
-     * @param    integer    $char        32bit UCS4 code point
-     * @return   array                   Either Hangul Syllable decomposed or original 32bit
-     *                                   value as one value array
-     * @access   private
+     * @param integer $char 32bit UCS4 code point
+     *
+     * @return array        Either Hangul Syllable decomposed or original 32bit
+     *                      value as one value array
+     * @access private
      */
     private function _hangulDecompose($char)
     {
@@ -2829,9 +2912,10 @@
      * Ccomposes a Hangul syllable
      * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
      *
-     * @param    array      $input       Decomposed UCS4 sequence
-     * @return   array                   UCS4 sequence with syllables composed
-     * @access   private
+     * @param array $input Decomposed UCS4 sequence
+     *
+     * @return array       UCS4 sequence with syllables composed
+     * @access private
      */
     private function _hangulCompose($input)
     {
@@ -2893,9 +2977,10 @@
     /**
      * Returns the combining class of a certain wide char.
      *
-     * @param    integer    $char        Wide char to check (32bit integer)
-     * @return   integer                 Combining class if found, else 0
-     * @access   private
+     * @param integer $char Wide char to check (32bit integer)
+     *
+     * @return integer      Combining class if found, else 0
+     * @access private
      */
     private function _getCombiningClass($char)
     {
@@ -2905,9 +2990,10 @@
     /**
      * Apllies the cannonical ordering of a decomposed UCS4 sequence.
      *
-     * @param    array      $input       Decomposed UCS4 sequence
-     * @return   array                   Ordered USC4 sequence
-     * @access   private
+     * @param array $input Decomposed UCS4 sequence
+     *
+     * @return array       Ordered USC4 sequence
+     * @access private
      */
     private function _applyCannonicalOrdering($input)
     {
@@ -2948,9 +3034,10 @@
     /**
      * Do composition of a sequence of starter and non-starter.
      *
-     * @param    array      $input       UCS4 Decomposed sequence
-     * @return   array                   Ordered USC4 sequence
-     * @access   private
+     * @param array $input UCS4 Decomposed sequence
+     *
+     * @return array       Ordered USC4 sequence
+     * @access private
      */
     private function _combine($input)
     {
@@ -3011,7 +3098,11 @@
      *
      * Each x represents a bit that can be used to store character data.
      *
-     * @access   private
+     * @param string $input utf8-encoded string
+     *
+     * @return array        ucs4-encoded array
+     * @throws Exception
+     * @access private
      */
     private function _utf8_to_ucs4($input)
     {
@@ -3082,10 +3173,13 @@
     }
 
     /**
-     * Convert UCS-4 array into UTF-8 string.
+     * Convert UCS-4 array into UTF-8 string
      *
-     * @throws   Exception
-     * @access   private
+     * @param array $input ucs4-encoded array
+     *
+     * @return string      utf8-encoded string
+     * @throws Exception
+     * @access private
      */
     private function _ucs4_to_utf8($input)
     {
@@ -3138,8 +3232,11 @@
     /**
      * Convert UCS-4 array into UCS-4 string
      *
-     * @throws   Exception
-     * @access   private
+     * @param array $input ucs4-encoded array
+     *
+     * @return string      ucs4-encoded string
+     * @throws Exception
+     * @access private
      */
     private function _ucs4_to_ucs4_string($input)
     {
@@ -3153,10 +3250,13 @@
     }
 
     /**
-     * Convert UCS-4 strin into UCS-4 garray
+     * Convert UCS-4 string into UCS-4 array
      *
-     * @throws   InvalidArgumentException
-     * @access   private
+     * @param string $input ucs4-encoded string
+     *
+     * @return array        ucs4-encoded array
+     * @throws InvalidArgumentException
+     * @access private
      */
     private function _ucs4_string_to_ucs4($input)
     {
@@ -3187,11 +3287,12 @@
     /**
      * Echo hex representation of UCS4 sequence.
      *
-     * @param    array      $input       UCS4 sequence
-     * @param    boolean    $include_bit Include bitmask in output
-     * @return   void
+     * @param array   $input       UCS4 sequence
+     * @param boolean $include_bit Include bitmask in output
+     *
+     * @return void
      * @static
-     * @access   private
+     * @access private
      */
     private static function _showHex($input, $include_bit = false)
     {
@@ -3210,8 +3311,11 @@
      * Gives you a bit representation of given Byte (8 bits), Word (16 bits) or DWord (32 bits)
      * Output width is automagically determined
      *
+     * @param int $octet ...
+     *
+     * @return string    Bitmask-representation
      * @static
-     * @access   private
+     * @access private
      */
     private static function _showBitmask($octet)
     {
@@ -3226,7 +3330,7 @@
         $return = '';
 
         for ($i = $w; $i > -1; $i--) {
-            $return .= ($octet & (1 << $i))? 1 : '0';
+            $return .= ($octet & (1 << $i))? '1' : '0';
         }
 
         return $return;
diff --git a/program/lib/Net/Socket.php b/program/lib/Net/Socket.php
index c86ac91..dd1047c 100644
--- a/program/lib/Net/Socket.php
+++ b/program/lib/Net/Socket.php
@@ -1,39 +1,51 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available at through the world-wide-web at                           |
-// | http://www.php.net/license/2_02.txt.                                 |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net>                                   |
-// |          Chuck Hagenbuch <chuck@horde.org>                           |
-// +----------------------------------------------------------------------+
-//
-// $Id$
+/**
+ * Net_Socket
+ *
+ * PHP Version 4
+ *
+ * Copyright (c) 1997-2003 The PHP Group
+ *
+ * This source file is subject to version 2.0 of the PHP license,
+ * that is bundled with this package in the file LICENSE, and is
+ * available at through the world-wide-web at
+ * http://www.php.net/license/2_02.txt.
+ * If you did not receive a copy of the PHP license and are unable to
+ * obtain it through the world-wide-web, please send a note to
+ * license@php.net so we can mail you a copy immediately.
+ *
+ * Authors: Stig Bakken <ssb@php.net>
+ *          Chuck Hagenbuch <chuck@horde.org>
+ *
+ * @category  Net
+ * @package   Net_Socket
+ * @author    Stig Bakken <ssb@php.net>
+ * @author    Chuck Hagenbuch <chuck@horde.org>
+ * @copyright 1997-2003 The PHP Group
+ * @license   http://www.php.net/license/2_02.txt PHP 2.02
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/packages/Net_Socket
+ */
 
 require_once 'PEAR.php';
 
-define('NET_SOCKET_READ',  1);
+define('NET_SOCKET_READ', 1);
 define('NET_SOCKET_WRITE', 2);
 define('NET_SOCKET_ERROR', 4);
 
 /**
  * Generalized Socket class.
  *
- * @version 1.1
- * @author Stig Bakken <ssb@php.net>
- * @author Chuck Hagenbuch <chuck@horde.org>
+ * @category  Net
+ * @package   Net_Socket
+ * @author    Stig Bakken <ssb@php.net>
+ * @author    Chuck Hagenbuch <chuck@horde.org>
+ * @copyright 1997-2003 The PHP Group
+ * @license   http://www.php.net/license/2_02.txt PHP 2.02
+ * @link      http://pear.php.net/packages/Net_Socket
  */
-class Net_Socket extends PEAR {
-
+class Net_Socket extends PEAR
+{
     /**
      * Socket file pointer.
      * @var resource $fp
@@ -79,22 +91,29 @@
     var $lineLength = 2048;
 
     /**
+     * The string to use as a newline terminator. Usually "\r\n" or "\n".
+     * @var string $newline
+     */
+    var $newline = "\r\n";
+
+    /**
      * Connect to the specified port. If called when the socket is
      * already connected, it disconnects and connects again.
      *
-     * @param string  $addr        IP address or host name.
-     * @param integer $port        TCP port number.
-     * @param boolean $persistent  (optional) Whether the connection is
-     *                             persistent (kept open between requests
-     *                             by the web server).
-     * @param integer $timeout     (optional) How long to wait for data.
-     * @param array   $options     See options for stream_context_create.
+     * @param string  $addr       IP address or host name.
+     * @param integer $port       TCP port number.
+     * @param boolean $persistent (optional) Whether the connection is
+     *                            persistent (kept open between requests
+     *                            by the web server).
+     * @param integer $timeout    (optional) How long to wait for data.
+     * @param array   $options    See options for stream_context_create.
      *
      * @access public
      *
      * @return boolean | PEAR_Error  True on success or a PEAR_Error on failure.
      */
-    function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null)
+    function connect($addr, $port = 0, $persistent = null,
+                     $timeout = null, $options = null)
     {
         if (is_resource($this->fp)) {
             @fclose($this->fp);
@@ -121,9 +140,11 @@
         }
 
         $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
-        $errno = 0;
-        $errstr = '';
+        $errno    = 0;
+        $errstr   = '';
+
         $old_track_errors = @ini_set('track_errors', 1);
+
         if ($options && function_exists('stream_context_create')) {
             if ($this->timeout) {
                 $timeout = $this->timeout;
@@ -134,22 +155,30 @@
 
             // Since PHP 5 fsockopen doesn't allow context specification
             if (function_exists('stream_socket_client')) {
-                $flags = $this->persistent ? STREAM_CLIENT_PERSISTENT : STREAM_CLIENT_CONNECT;
+                $flags = STREAM_CLIENT_CONNECT;
+
+                if ($this->persistent) {
+                    $flags = STREAM_CLIENT_PERSISTENT;
+                }
+
                 $addr = $this->addr . ':' . $this->port;
-                $fp = stream_socket_client($addr, $errno, $errstr, $timeout, $flags, $context);
+                $fp   = stream_socket_client($addr, $errno, $errstr,
+                                             $timeout, $flags, $context);
             } else {
-                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context);
+                $fp = @$openfunc($this->addr, $this->port, $errno,
+                                 $errstr, $timeout, $context);
             }
         } else {
             if ($this->timeout) {
-                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout);
+                $fp = @$openfunc($this->addr, $this->port, $errno,
+                                 $errstr, $this->timeout);
             } else {
                 $fp = @$openfunc($this->addr, $this->port, $errno, $errstr);
             }
         }
 
         if (!$fp) {
-            if ($errno == 0 && isset($php_errormsg)) {
+            if ($errno == 0 && !strlen($errstr) && isset($php_errormsg)) {
                 $errstr = $php_errormsg;
             }
             @ini_set('track_errors', $old_track_errors);
@@ -180,6 +209,18 @@
     }
 
     /**
+     * Set the newline character/sequence to use.
+     *
+     * @param string $newline  Newline character(s)
+     * @return boolean True
+     */
+    function setNewline($newline)
+    {
+        $this->newline = $newline;
+        return true;
+    }
+
+    /**
      * Find out if the socket is in blocking mode.
      *
      * @access public
@@ -196,7 +237,8 @@
      * if there is no data available, whereas it will block until there
      * is data for blocking sockets.
      *
-     * @param boolean $mode  True for blocking sockets, false for nonblocking.
+     * @param boolean $mode True for blocking sockets, false for nonblocking.
+     *
      * @access public
      * @return mixed true on success or a PEAR_Error instance otherwise
      */
@@ -207,7 +249,7 @@
         }
 
         $this->blocking = $mode;
-        socket_set_blocking($this->fp, $this->blocking);
+        stream_set_blocking($this->fp, (int)$this->blocking);
         return true;
     }
 
@@ -215,8 +257,9 @@
      * Sets the timeout value on socket descriptor,
      * expressed in the sum of seconds and microseconds
      *
-     * @param integer $seconds  Seconds.
-     * @param integer $microseconds  Microseconds.
+     * @param integer $seconds      Seconds.
+     * @param integer $microseconds Microseconds.
+     *
      * @access public
      * @return mixed true on success or a PEAR_Error instance otherwise
      */
@@ -233,7 +276,8 @@
      * Sets the file buffering size on the stream.
      * See php's stream_set_write_buffer for more information.
      *
-     * @param integer $size     Write buffer size.
+     * @param integer $size Write buffer size.
+     *
      * @access public
      * @return mixed on success or an PEAR_Error object otherwise
      */
@@ -262,7 +306,8 @@
      * </p>
      *
      * @access public
-     * @return mixed Array containing information about existing socket resource or a PEAR_Error instance otherwise
+     * @return mixed Array containing information about existing socket
+     *               resource or a PEAR_Error instance otherwise
      */
     function getStatus()
     {
@@ -276,17 +321,23 @@
     /**
      * Get a specified line of data
      *
+     * @param int $size ??
+     *
      * @access public
      * @return $size bytes of data from the socket, or a PEAR_Error if
      *         not connected.
      */
-    function gets($size)
+    function gets($size = null)
     {
         if (!is_resource($this->fp)) {
             return $this->raiseError('not connected');
         }
 
-        return @fgets($this->fp, $size);
+        if (is_null($size)) {
+            return @fgets($this->fp);
+        } else {
+            return @fgets($this->fp, $size);
+        }
     }
 
     /**
@@ -295,7 +346,8 @@
      * chunk; if you know the size of the data you're getting
      * beforehand, this is definitely the way to go.
      *
-     * @param integer $size  The number of bytes to read from the socket.
+     * @param integer $size The number of bytes to read from the socket.
+     *
      * @access public
      * @return $size bytes of data from the socket, or a PEAR_Error if
      *         not connected.
@@ -312,12 +364,13 @@
     /**
      * Write a specified amount of data.
      *
-     * @param string  $data       Data to write.
-     * @param integer $blocksize  Amount of data to write at once.
-     *                            NULL means all at once.
+     * @param string  $data      Data to write.
+     * @param integer $blocksize Amount of data to write at once.
+     *                           NULL means all at once.
      *
      * @access public
-     * @return mixed If the socket is not connected, returns an instance of PEAR_Error
+     * @return mixed If the socket is not connected, returns an instance of
+     *               PEAR_Error
      *               If the write succeeds, returns the number of bytes written
      *               If the write fails, returns false.
      */
@@ -334,12 +387,12 @@
                 $blocksize = 1024;
             }
 
-            $pos = 0;
+            $pos  = 0;
             $size = strlen($data);
             while ($pos < $size) {
                 $written = @fwrite($this->fp, substr($data, $pos, $blocksize));
-                if ($written === false) {
-                    return false;
+                if (!$written) {
+                    return $written;
                 }
                 $pos += $written;
             }
@@ -349,7 +402,9 @@
     }
 
     /**
-     * Write a line of data to the socket, followed by a trailing "\r\n".
+     * Write a line of data to the socket, followed by a trailing newline.
+     *
+     * @param string $data Data to write
      *
      * @access public
      * @return mixed fputs result, or an error
@@ -360,7 +415,7 @@
             return $this->raiseError('not connected');
         }
 
-        return fwrite($this->fp, $data . "\r\n");
+        return fwrite($this->fp, $data . $this->newline);
     }
 
     /**
@@ -441,7 +496,7 @@
         }
 
         $string = '';
-        while (($char = @fread($this->fp, 1)) != "\x00")  {
+        while (($char = @fread($this->fp, 1)) != "\x00") {
             $string .= $char;
         }
         return $string;
@@ -481,11 +536,13 @@
         }
 
         $line = '';
+
         $timeout = time() + $this->timeout;
+
         while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
             $line .= @fgets($this->fp, $this->lineLength);
             if (substr($line, -1) == "\n") {
-                return rtrim($line, "\r\n");
+                return rtrim($line, $this->newline);
             }
         }
         return $line;
@@ -521,9 +578,9 @@
      * Runs the equivalent of the select() system call on the socket
      * with a timeout specified by tv_sec and tv_usec.
      *
-     * @param integer $state    Which of read/write/error to check for.
-     * @param integer $tv_sec   Number of seconds for timeout.
-     * @param integer $tv_usec  Number of microseconds for timeout.
+     * @param integer $state   Which of read/write/error to check for.
+     * @param integer $tv_sec  Number of seconds for timeout.
+     * @param integer $tv_usec Number of microseconds for timeout.
      *
      * @access public
      * @return False if select fails, integer describing which of read/write/error
@@ -535,8 +592,8 @@
             return $this->raiseError('not connected');
         }
 
-        $read = null;
-        $write = null;
+        $read   = null;
+        $write  = null;
         $except = null;
         if ($state & NET_SOCKET_READ) {
             $read[] = $this->fp;
@@ -547,7 +604,8 @@
         if ($state & NET_SOCKET_ERROR) {
             $except[] = $this->fp;
         }
-        if (false === ($sr = stream_select($read, $write, $except, $tv_sec, $tv_usec))) {
+        if (false === ($sr = stream_select($read, $write, $except,
+                                          $tv_sec, $tv_usec))) {
             return false;
         }
 
@@ -567,15 +625,17 @@
     /**
      * Turns encryption on/off on a connected socket.
      *
-     * @param bool    $enabled  Set this parameter to true to enable encryption
-     *                          and false to disable encryption.
-     * @param integer $type     Type of encryption. See
-     *                          http://se.php.net/manual/en/function.stream-socket-enable-crypto.php for values.
+     * @param bool    $enabled Set this parameter to true to enable encryption
+     *                         and false to disable encryption.
+     * @param integer $type    Type of encryption. See stream_socket_enable_crypto()
+     *                         for values.
      *
+     * @see    http://se.php.net/manual/en/function.stream-socket-enable-crypto.php
      * @access public
-     * @return false on error, true on success and 0 if there isn't enough data and the
-     *         user should try again (non-blocking sockets only). A PEAR_Error object
-     *         is returned if the socket is not connected
+     * @return false on error, true on success and 0 if there isn't enough data
+     *         and the user should try again (non-blocking sockets only).
+     *         A PEAR_Error object is returned if the socket is not
+     *         connected
      */
     function enableCrypto($enabled, $type)
     {
@@ -585,7 +645,8 @@
             }
             return @stream_socket_enable_crypto($this->fp, $enabled, $type);
         } else {
-            return $this->raiseError('Net_Socket::enableCrypto() requires php version >= 5.1.0');
+            $msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0';
+            return $this->raiseError($msg);
         }
     }
 
diff --git a/program/localization/az_AZ/labels.inc b/program/localization/az_AZ/labels.inc
index ce515e2..3d609e3 100644
--- a/program/localization/az_AZ/labels.inc
+++ b/program/localization/az_AZ/labels.inc
@@ -36,11 +36,12 @@
 $labels['cc'] = 'Nüsxə';
 $labels['bcc'] = 'Gizli';
 $labels['replyto'] = 'Cavabla';
+$labels['followupto'] = 'İzlə';
 $labels['date'] = 'Tarix';
 $labels['size'] = 'Ölçü';
 $labels['priority'] = 'Vaciblik';
 $labels['organization'] = 'Təşkilat';
-$labels['reply-to'] = 'Cavab ünvanı';
+$labels['readstatus'] = 'Statusu oxu';
 $labels['mailboxlist'] = 'Qovluqlar';
 $labels['messagesfromto'] = '$count mesajdan $from - $to arası mesajlar';
 $labels['threadsfromto'] = 'Müzakirə: $from - $to Toplam: $count';
@@ -95,6 +96,8 @@
 $labels['writenewmessage'] = 'Yeni məktub';
 $labels['replytomessage'] = 'Göndərənə cavabla';
 $labels['replytoallmessage'] = 'Hamıya cavabla';
+$labels['replyall'] = 'Hamıya cavab';
+$labels['replylist'] = 'Cavab siyahısı';
 $labels['forwardmessage'] = 'Yönəlt';
 $labels['deletemessage'] = 'Sil';
 $labels['movemessagetotrash'] = 'Məktubu səbətə köçür';
@@ -149,7 +152,6 @@
 $labels['folderactions'] = 'Qovluq işləri...';
 $labels['compact'] = 'Sıx';
 $labels['empty'] = 'Boşalt';
-$labels['purge'] = 'Təmizlə';
 $labels['quota'] = 'Disk istifadəsi';
 $labels['unknown'] = 'naməlum';
 $labels['unlimited'] = 'limitsiz';
@@ -167,6 +169,8 @@
 $labels['charset'] = 'Kodlaşdırma';
 $labels['editortype'] = 'Redaktor';
 $labels['returnreceipt'] = 'Cavab sorğusu';
+$labels['dsn'] = 'Çatdırılma statusu haqda bildiriş';
+$labels['editidents'] = 'İdentifikasiyanı dəyiş';
 $labels['checkspelling'] = 'Orfoqrafiyanı yoxla';
 $labels['resumeediting'] = 'Redaktəni davam et';
 $labels['revertto'] = 'Dəyişiklikləri ləğv et';
@@ -190,6 +194,7 @@
 $labels['addcc'] = 'Kopya əlavə et';
 $labels['addbcc'] = 'Gizli kopya əlavə et';
 $labels['addreplyto'] = 'Yönəltmə əlavə et';
+$labels['addfollowupto'] = '"İzlə" əlavə et';
 $labels['mdnrequest'] = 'Məktubu göndərən onu oxuduğunuz haqda sorğu almaq istəyir. Göndərilsin?';
 $labels['receiptread'] = 'Oxunulma haqda soğru';
 $labels['yourmessage'] = 'Bu məktubunuzun oxunulduğu haqda sorğudur';
@@ -197,14 +202,45 @@
 $labels['name'] = 'Göstərilən ad';
 $labels['firstname'] = 'Adı';
 $labels['surname'] = 'Soyadı';
+$labels['middlename'] = 'Orta adı';
+$labels['nameprefix'] = 'Prefiks';
+$labels['namesuffix'] = 'Suffiks';
+$labels['nickname'] = 'Ləqəb';
+$labels['jobtitle'] = 'Vəzifə';
+$labels['department'] = 'Departament';
+$labels['gender'] = 'Cins';
+$labels['maidenname'] = 'Qız adı';
 $labels['email'] = 'E-Poçt';
+$labels['phone'] = 'Telefon';
+$labels['address'] = 'Ünvan';
+$labels['street'] = 'Küçə';
+$labels['locality'] = 'Şəhər';
+$labels['zipcode'] = 'ZIP kod';
+$labels['region'] = 'Region';
+$labels['country'] = 'Ölkə';
+$labels['birthday'] = 'Ad günü';
+$labels['anniversary'] = 'İldönümü';
+$labels['website'] = 'Vebsayt';
+$labels['instantmessenger'] = 'IM';
+$labels['notes'] = 'Qeydlər';
+$labels['male'] = 'kişi';
+$labels['female'] = 'qadın';
+$labels['manager'] = 'Menecer';
+$labels['assistant'] = 'Assistent';
+$labels['spouse'] = 'Ər-arvad';
+$labels['addfield'] = 'Sahə əlavə et';
 $labels['addcontact'] = 'Ünvanlara əlavə et';
 $labels['editcontact'] = 'Ünvanı redaktə et';
 $labels['contacts'] = 'Əlaqələr';
+$labels['contactproperties'] = 'Kontakt xüsusiyyətləri';
+$labels['personalinfo'] = 'Şəxsi məlumat';
 $labels['edit'] = 'Redaktə et';
 $labels['cancel'] = 'Ləğv et';
 $labels['save'] = 'Saxla';
 $labels['delete'] = 'Sil';
+$labels['rename'] = 'Adlandır';
+$labels['addphoto'] = 'Əlavə et';
+$labels['replacephoto'] = 'Adı dəyiş';
 $labels['newcontact'] = 'Yeni ünvan kartı əlavə et';
 $labels['deletecontact'] = 'Seçilmiş ünvanları sil';
 $labels['composeto'] = 'Seçilmiş ünvanlara məktub yaz';
@@ -248,6 +284,7 @@
 $labels['signature'] = 'İmza';
 $labels['dstactive'] = 'Yay vaxtı';
 $labels['htmleditor'] = 'HTML-də mesaj yaz';
+$labels['htmlonreply'] = 'yalnız HTML mesajlar ilə cavab';
 $labels['htmlsignature'] = 'HTML imza';
 $labels['previewpane'] = 'Prevyu paneli göstər';
 $labels['skin'] = 'İnterfeys stili';
@@ -259,6 +296,8 @@
 $labels['mdnrequests'] = 'Göndərilmə bildirişi';
 $labels['askuser'] = 'göndərilmə zamanı istifadəçidən soruş';
 $labels['autosend'] = 'avtomatik göndər';
+$labels['autosendknown'] = 'kontaktlarıma qəbz yolla. Əks halda soruş';
+$labels['autosendknownignore'] = 'kontaktlarıma qəbz yolla. Əks halda iqnor et';
 $labels['ignore'] = 'iqnor';
 $labels['readwhendeleted'] = 'Məktubu siləndə oxunmuş kimi qeyd et';
 $labels['flagfordeletion'] = 'Silmə əvəzi silinmə işarəsilə qeyd et';
@@ -303,6 +342,9 @@
 $labels['insertsignature'] = 'İmza əlavə et';
 $labels['previewpanemarkread'] = 'Baxılmış şəkilləri oxunmuş kimi qeyd et';
 $labels['afternseconds'] = '$n saniyədən sonra';
+$labels['reqmdn'] = 'Hər zaman çatdırılma bildirişini istə';
+$labels['reqdsn'] = 'Hər zaman çatıdrılma haqda statusu istə';
+$labels['replysamefolder'] = 'Cavab mesajları üçün saxlanılan yer';
 $labels['folder'] = 'Qovluq';
 $labels['folders'] = 'Qovluqlar';
 $labels['foldername'] = 'Qovluq adı';
@@ -312,6 +354,13 @@
 $labels['createfolder'] = 'Yeni qovluq yarad';
 $labels['managefolders'] = 'Qovluqlarla iş';
 $labels['specialfolders'] = 'Xüsusi qovluqlar';
+$labels['properties'] = 'Xüsusiyyətlər';
+$labels['folderproperties'] = 'Qovluq xüsusiyyətləri';
+$labels['parentfolder'] = 'Ana qovluq';
+$labels['location'] = 'Yerləşmə';
+$labels['info'] = 'Məlumat';
+$labels['getfoldersize'] = 'Qovluq ölçüsünü öyrənmək üçün vur';
+$labels['changesubscription'] = 'Abunəni dəyişmək üçün vurun';
 $labels['sortby'] = 'Çeşidlə';
 $labels['sortasc'] = 'Azdan çoxa';
 $labels['sortdesc'] = 'Çoxdan aza';
diff --git a/program/localization/az_AZ/messages.inc b/program/localization/az_AZ/messages.inc
index dcef7c5..950be1a 100644
--- a/program/localization/az_AZ/messages.inc
+++ b/program/localization/az_AZ/messages.inc
@@ -21,6 +21,9 @@
 $messages['sessionerror'] = 'Sizin sessiya köhnəlib';
 $messages['imaperror'] = 'IMAP serverlə bağlantı alınmadı';
 $messages['servererror'] = 'Server xətası!';
+$messages['servererrormsg'] = 'Server xətası: $msg';
+$messages['errorreadonly'] = 'Əməliyyatı etmək mümkün deyil. Qovluq yalnız oxunuş üçündür.';
+$messages['errornoperm'] = 'Əməliyyatı etmək mümkün deyil. Giriş qadağandır.';
 $messages['invalidrequest'] = 'Səhv sorğu! Məlumat yaddaşda qalmadı.';
 $messages['nomessagesfound'] = 'Poçt qutusunda məktub tapılmadı';
 $messages['loggedout'] = 'Çıxış uğurlu oldu. Sağ olun!';
@@ -54,6 +57,8 @@
 $messages['purgefolderconfirm'] = 'Bu qovluqdakı bütün məktubları silməyə əminsiniz?';
 $messages['folderdeleting'] = 'Qovluğ silinir...';
 $messages['foldermoving'] = 'Qovluq köçürülür...';
+$messages['foldersubscribing'] = 'Qovluğa abunə...';
+$messages['folderunsubscribing'] = 'Qovluğa abunədən çıx...';
 $messages['formincomplete'] = 'Bütün sətrlər doldurulmayıb';
 $messages['noemailwarning'] = 'Lütfən, düzgün e-poçt ünvanı daxil edin';
 $messages['nonamewarning'] = 'Lütfən, ad daxil edin';
@@ -73,6 +78,10 @@
 $messages['checking'] = 'Yoxlanılır...';
 $messages['nospellerrors'] = 'Orfoqrafik səhvlət tapılmadı';
 $messages['folderdeleted'] = 'Qovluq uğurla silindi';
+$messages['foldersubscribed'] = 'Qovluq uğurla abunə oldu';
+$messages['folderunsubscribed'] = 'Qovluq uğurla abunədən çıxdı';
+$messages['folderpurged'] = 'Qovluq uğurla təmizləndi';
+$messages['folderexpunged'] = 'Qovluq uğurla sıxıldı';
 $messages['deletedsuccessfully'] = 'Silindi';
 $messages['converting'] = 'Məktubun formatlaşması silinir...';
 $messages['messageopenerror'] = 'Məktubu serverdən yükləmək alınmır';
@@ -84,6 +93,8 @@
 $messages['errorsavingcontact'] = 'Əlaqəni ünvanda saxlamaq mümkün deyil';
 $messages['movingmessage'] = 'Məktub köçürülür...';
 $messages['copyingmessage'] = 'Məktub kopyalanır...';
+$messages['deletingmessage'] = 'Məktub(lar) silinir...';
+$messages['markingmessage'] = 'Məktub(lar) işarələnir...';
 $messages['receiptsent'] = 'Oxunulma haqda bildiriş göndərildi';
 $messages['errorsendingreceipt'] = 'Oxunulma haqda bildiriş göndərilmədi';
 $messages['nodeletelastidentity'] = 'Siz bu kimliyi silə bilməzsiniz. Bu axırıncıdır. ';
@@ -104,10 +115,26 @@
 $messages['smtpfromerror'] = 'SMTP Error ($code): Göndərəni səlavə etmək mümkün deyil - "$from" ($msg)';
 $messages['smtptoerror'] = 'SMTP Error ($code): Qəbul edəni əlavə etmək mümkün deyil - "$to" ($msg)';
 $messages['smtprecipientserror'] = 'SMTP Error ($code): Qəbul edənlərin siyahısını emal etmək mümkün deyil';
+$messages['smtpdsnerror'] = 'SMTP xəta: çatdırılma haqda bildiriş dəstəyi yoxdur';
 $messages['smtperror'] = 'SMTP Error ($code): $msg';
 $messages['emailformaterror'] = 'Səhv ünvan: $email';
 $messages['toomanyrecipients'] = 'Qəbul edənlər həddindən artıq çoxdur. Lütfən, $max qədər azaldın.';
 $messages['maxgroupmembersreached'] = 'Qrupun ölçüsü imkan verilən maksimumdan artıqdır - $max';
 $messages['internalerror'] = 'Daxili xəta baş verdi. Lütfən, bir daha cəhd edin';
+$messages['contactdelerror'] = 'Kontak(lar)ı silmək alınmadı';
+$messages['contactdeleted'] = 'Kontak(lar) uğurla silindi';
+$messages['groupdeleted'] = 'Qrup silindi';
+$messages['grouprenamed'] = 'Qrupun adı dəyişdirildi';
+$messages['groupcreated'] = 'Qrup yaradıldı';
+$messages['messagedeleted'] = 'Məktub(lar) uğurla silindi';
+$messages['messagemoved'] = 'Məktub(lar) uğurla köçürüldü';
+$messages['messagecopied'] = 'Məktub(lar) uğurla kopyalandı';
+$messages['messagemarked'] = 'Məktub(lar) uğurla işarələndi';
+$messages['autocompletechars'] = 'Avtokomplektasiya üçün $min işarə daxil edin';
+$messages['namecannotbeempty'] = 'Ad boş ola bilməz';
+$messages['nametoolong'] = 'Ad çox uzundur';
+$messages['folderupdated'] = 'Qovluq yeniləndi';
+$messages['foldercreated'] = 'Qovluq yaradıldı';
+$messages['invalidimageformat'] = 'Şəkil formatı düzgün deyil';
 
 ?>
diff --git a/program/localization/bg_BG/labels.inc b/program/localization/bg_BG/labels.inc
index 14ad45a..bca814f 100644
--- a/program/localization/bg_BG/labels.inc
+++ b/program/localization/bg_BG/labels.inc
@@ -45,9 +45,6 @@
 $labels['priority'] = 'Приоритет';
 $labels['organization'] = 'Организация';
 $labels['readstatus'] = 'Статут (прочетено/непрочетено)';
-$labels['reply-to'] = 'Отговор до';
-$labels['mail-reply-to'] = 'Отговор към';
-$labels['mail-followup-to'] = 'Препращане към';
 $labels['mailboxlist'] = 'Папки';
 $labels['messagesfromto'] = 'Съобщения $from до $to от $count';
 $labels['threadsfromto'] = 'Съобщения $from до $to от $count';
@@ -158,7 +155,6 @@
 $labels['folderactions'] = 'Десйтвия за папки...';
 $labels['compact'] = 'Свий';
 $labels['empty'] = 'Изпразни';
-$labels['purge'] = 'Изчисти';
 $labels['quota'] = 'Използвано място';
 $labels['unknown'] = 'няма информация';
 $labels['unlimited'] = 'няма ограничение';
@@ -209,15 +205,45 @@
 $labels['name'] = 'Кратко име';
 $labels['firstname'] = 'Име';
 $labels['surname'] = 'Фамилия';
+$labels['middlename'] = 'Презиме';
+$labels['nameprefix'] = 'Представка (Титла)';
+$labels['namesuffix'] = 'Наставка (Титла)';
+$labels['nickname'] = 'Прякор';
+$labels['jobtitle'] = 'Длъжност';
+$labels['department'] = 'Отдел';
+$labels['gender'] = 'Пол';
+$labels['maidenname'] = 'Бащино име';
 $labels['email'] = 'E-Mail';
+$labels['phone'] = 'Телефон';
+$labels['address'] = 'Адрес';
+$labels['street'] = 'Улица';
+$labels['locality'] = 'Град';
+$labels['zipcode'] = 'Пощенски код';
+$labels['region'] = 'Област';
+$labels['country'] = 'Държава';
+$labels['birthday'] = 'Рожден ден';
+$labels['anniversary'] = 'Годишнина';
+$labels['website'] = 'Уебсайт';
+$labels['instantmessenger'] = 'IM';
+$labels['notes'] = 'Бележки';
+$labels['male'] = 'Мъж';
+$labels['female'] = 'Жена';
+$labels['manager'] = 'Мениджър';
+$labels['assistant'] = 'Асистент';
+$labels['spouse'] = 'Съпруг (а)';
+$labels['addfield'] = 'Добави поле';
 $labels['addcontact'] = 'Добави';
 $labels['editcontact'] = 'Редактирай';
 $labels['contacts'] = 'Контакти';
 $labels['contactproperties'] = 'Свойства на контакт';
+$labels['personalinfo'] = 'Лична информация';
 $labels['edit'] = 'Редактирай';
 $labels['cancel'] = 'Отказ';
 $labels['save'] = 'Запиши';
 $labels['delete'] = 'Изтрий';
+$labels['rename'] = 'Преименувай';
+$labels['addphoto'] = 'Добави';
+$labels['replacephoto'] = 'Замени';
 $labels['newcontact'] = 'Нов контакт';
 $labels['deletecontact'] = 'Изтрий маркираните контакти';
 $labels['composeto'] = 'Напиши писмо до';
@@ -279,7 +305,7 @@
 $labels['readwhendeleted'] = 'Отбележи като прочетено при изтриване';
 $labels['flagfordeletion'] = 'Отбележи съобщението за изтриване';
 $labels['skipdeleted'] = 'Не показвай изтритите съобщения';
-$labels['deletealways'] = 'При неуспешн преместване на съобщение в Кошчето, да се изтрие';
+$labels['deletealways'] = 'При неуспешно преместване на съобщение в Кошчето, да се изтрие';
 $labels['showremoteimages'] = 'Покажи блокираните изображения';
 $labels['fromknownsenders'] = 'Oт познати изпращачи';
 $labels['always'] = 'Винаги';
@@ -321,6 +347,7 @@
 $labels['afternseconds'] = 'след $n секунди';
 $labels['reqmdn'] = 'Винаги връщай обратна разписка';
 $labels['reqdsn'] = 'Винаги изисквай отговор при доставка на съобщение';
+$labels['replysamefolder'] = 'Постави отговора в папката на съобщението, на което се отговаря';
 $labels['folder'] = 'Папка';
 $labels['folders'] = 'Папки';
 $labels['foldername'] = 'Име на папката';
@@ -330,6 +357,13 @@
 $labels['createfolder'] = 'Направи нова папка';
 $labels['managefolders'] = 'Настройки на папките';
 $labels['specialfolders'] = 'Служебни папки';
+$labels['properties'] = 'Свойства';
+$labels['folderproperties'] = 'Свойства на папката';
+$labels['parentfolder'] = 'Родителска папка';
+$labels['location'] = 'Местоположение';
+$labels['info'] = 'Информация';
+$labels['getfoldersize'] = 'Щракни за големина на папката';
+$labels['changesubscription'] = 'Щракни за промяна на абонамент';
 $labels['sortby'] = 'Сортирай по';
 $labels['sortasc'] = 'Сортирай възходящо';
 $labels['sortdesc'] = 'Сортирай низходящо';
diff --git a/program/localization/bg_BG/messages.inc b/program/localization/bg_BG/messages.inc
index c5bc90f..5777b3b 100644
--- a/program/localization/bg_BG/messages.inc
+++ b/program/localization/bg_BG/messages.inc
@@ -25,6 +25,8 @@
 $messages['imaperror'] = 'Неуспешно свързване към IMAP сървъра';
 $messages['servererror'] = 'Грешка!';
 $messages['servererrormsg'] = 'Сървърна грешка: $msg';
+$messages['errorreadonly'] = 'Операцията не може да бъде изпълнена. Папката е с права само за четене';
+$messages['errornoperm'] = 'Операцията не може да бъде изпълнена. Отказани права за достъп';
 $messages['invalidrequest'] = 'Невалидна заявка! Данните не са съхранени.';
 $messages['nomessagesfound'] = 'Няма съобщения';
 $messages['loggedout'] = 'Довиждане!';
@@ -58,6 +60,8 @@
 $messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?';
 $messages['folderdeleting'] = 'Изтриване на папка...';
 $messages['foldermoving'] = 'Преместване на папка...';
+$messages['foldersubscribing'] = 'Абониране...';
+$messages['folderunsubscribing'] = 'Отписване на папка...';
 $messages['formincomplete'] = 'Не сте попълнили всички полета';
 $messages['noemailwarning'] = 'Моля, въведете валиден e-mail адрес';
 $messages['nonamewarning'] = 'Моля, въведете име';
@@ -77,6 +81,10 @@
 $messages['checking'] = 'Проверка...';
 $messages['nospellerrors'] = 'Не са открити правописни грешки';
 $messages['folderdeleted'] = 'Папката е изтрита';
+$messages['foldersubscribed'] = 'Абонирането успешно';
+$messages['folderunsubscribed'] = 'Отписването успешно';
+$messages['folderpurged'] = 'Папката е изпразнена';
+$messages['folderexpunged'] = 'Уплътняването успешно';
 $messages['deletedsuccessfully'] = 'Изтриването е успешно';
 $messages['converting'] = 'Премахване форматирането на писмото...';
 $messages['messageopenerror'] = 'Писмото не може да бъде заредено от сървъра';
@@ -126,5 +134,10 @@
 $messages['messagecopied'] = 'Съобщението беше копирано';
 $messages['messagemarked'] = 'Съобщението беше маркирано';
 $messages['autocompletechars'] = 'Въведете минимум $min знака, за да започне автоматичното попълване';
+$messages['namecannotbeempty'] = 'Полето за име не може да бъде празно';
+$messages['nametoolong'] = 'Името е прекалено дълго';
+$messages['folderupdated'] = 'Папката е обновена';
+$messages['foldercreated'] = 'Папката е създадена';
+$messages['invalidimageformat'] = 'Невалиден формат на изображението';
 
 ?>
diff --git a/program/localization/da_DK/labels.inc b/program/localization/da_DK/labels.inc
index 3aa1ae4..53934f7 100644
--- a/program/localization/da_DK/labels.inc
+++ b/program/localization/da_DK/labels.inc
@@ -39,11 +39,12 @@
 $labels['cc'] = 'Kopi til';
 $labels['bcc'] = 'BCC';
 $labels['replyto'] = 'Svar til';
+$labels['followupto'] = 'Følg-op til';
 $labels['date'] = 'Dato';
 $labels['size'] = 'Størrelse';
 $labels['priority'] = 'Prioritet';
 $labels['organization'] = 'Organisation';
-$labels['reply-to'] = 'Svar til';
+$labels['readstatus'] = 'Læst status';
 $labels['mailboxlist'] = 'Mapper';
 $labels['messagesfromto'] = 'Besked $from til $to af $count';
 $labels['threadsfromto'] = 'Tråd $from til $to af $count';
@@ -98,6 +99,8 @@
 $labels['writenewmessage'] = 'Skriv en ny besked';
 $labels['replytomessage'] = 'Svar på denne besked';
 $labels['replytoallmessage'] = 'Svar til alle modtagere';
+$labels['replyall'] = 'Svar alle';
+$labels['replylist'] = 'Svar til listen';
 $labels['forwardmessage'] = 'Videresend denne besked';
 $labels['deletemessage'] = 'Slet besked';
 $labels['movemessagetotrash'] = 'Flyt besked til skrald';
@@ -149,14 +152,15 @@
 $labels['listsorting'] = 'Sorterings kolonne';
 $labels['listorder'] = 'Sorter efter';
 $labels['listmode'] = 'Listevisningsmode';
+$labels['folderactions'] = 'Mappe handlinger...';
 $labels['compact'] = 'Ryd op';
 $labels['empty'] = 'Tøm';
-$labels['purge'] = 'Udrens';
 $labels['quota'] = 'Disk forbrug';
 $labels['unknown'] = 'ukendt';
 $labels['unlimited'] = 'ubegrænset';
 $labels['quicksearch'] = 'Hurtigsøgning';
 $labels['resetsearch'] = 'Nulstil søgning';
+$labels['searchmod'] = 'Søgeparametere';
 $labels['msgtext'] = 'Hele beskeden';
 $labels['openinextwin'] = 'Åbn i nyt vindue';
 $labels['emlsave'] = 'Download (.eml)';
@@ -168,12 +172,15 @@
 $labels['charset'] = 'Tegnsæt';
 $labels['editortype'] = 'Tekstbehandler';
 $labels['returnreceipt'] = 'Anmod om kvittering';
+$labels['dsn'] = 'Notifikation om leveringstatus';
+$labels['editidents'] = 'Ret identiteter';
 $labels['checkspelling'] = 'Stavekontrol';
 $labels['resumeediting'] = 'Genoptag redigering';
 $labels['revertto'] = 'Vend tilbage til';
 $labels['attachments'] = 'Vedhæftninger';
 $labels['upload'] = 'Upload';
 $labels['close'] = 'Luk';
+$labels['messageoptions'] = 'Besked muligheder...';
 $labels['low'] = 'Lav';
 $labels['lowest'] = 'Lavest';
 $labels['normal'] = 'Normal';
@@ -190,6 +197,7 @@
 $labels['addcc'] = 'Tilføj Cc';
 $labels['addbcc'] = 'Tilføj Bcc';
 $labels['addreplyto'] = 'Tilføj Svar-Til adresse';
+$labels['addfollowupto'] = 'Tilføj følg-op adresse';
 $labels['mdnrequest'] = 'Afsenderen af denne besked har bedt om at modtage en bekræftelse når du læser beskeden. Vil du sende kvittering for læsning?';
 $labels['receiptread'] = 'Send kvittering for læsning';
 $labels['yourmessage'] = 'Dette er en kvittering for at din besked er blevet vist';
@@ -197,13 +205,42 @@
 $labels['name'] = 'Vist navn';
 $labels['firstname'] = 'Fornavn';
 $labels['surname'] = 'Efternavn';
+$labels['middlename'] = 'Mellemnavn';
+$labels['nickname'] = 'Alias/Kaldenavn';
+$labels['jobtitle'] = 'Job titel';
+$labels['department'] = 'Afdeling';
+$labels['gender'] = 'Køn';
+$labels['maidenname'] = 'Pigenavn';
 $labels['email'] = 'E-mail';
+$labels['phone'] = 'Telefon';
+$labels['address'] = 'Adresse';
+$labels['street'] = 'Vejnavn';
+$labels['locality'] = 'By';
+$labels['zipcode'] = 'Postnr.';
+$labels['region'] = 'Område/region';
+$labels['country'] = 'Land';
+$labels['birthday'] = 'Fødselsdag';
+$labels['anniversary'] = 'Jubilæum';
+$labels['website'] = 'Hjemmeside';
+$labels['instantmessenger'] = 'IM';
+$labels['notes'] = 'Noter';
+$labels['male'] = 'Mand';
+$labels['female'] = 'Kvinde';
+$labels['manager'] = 'Manager';
+$labels['assistant'] = 'Assistent';
+$labels['spouse'] = 'Ægtefælle';
+$labels['addfield'] = 'Tilføj felt...';
 $labels['addcontact'] = 'Tilføj en ny kontakt';
 $labels['editcontact'] = 'Redigér kontakt';
+$labels['contacts'] = 'Kontakter';
+$labels['contactproperties'] = 'Kontakt egenskaber';
 $labels['edit'] = 'Redigér';
 $labels['cancel'] = 'Afbryd';
 $labels['save'] = 'Gem';
 $labels['delete'] = 'Slet';
+$labels['rename'] = 'Omdøb';
+$labels['addphoto'] = 'Tilføj';
+$labels['replacephoto'] = 'Erstat';
 $labels['newcontact'] = 'Opret nyt kontaktkort';
 $labels['deletecontact'] = 'Slet valgte kontakter';
 $labels['composeto'] = 'Skriv brev til';
@@ -247,6 +284,7 @@
 $labels['signature'] = 'Signatur';
 $labels['dstactive'] = 'Sommertid';
 $labels['htmleditor'] = 'Skriv HTML-besked';
+$labels['htmlonreply'] = 'kun når jeg besvarer HTML-beskeder';
 $labels['htmlsignature'] = 'HTML-signatur';
 $labels['previewpane'] = 'Forhåndsvisning';
 $labels['skin'] = 'Interface skin';
@@ -258,6 +296,8 @@
 $labels['mdnrequests'] = 'Kvitteringer';
 $labels['askuser'] = 'spørg brugeren';
 $labels['autosend'] = 'send automatisk';
+$labels['autosendknown'] = 'send automatisk til mine kontakter, ellers spørg mig';
+$labels['autosendknownignore'] = 'send automatisk til mine kontakter, ellers ignorér';
 $labels['ignore'] = 'ignorér';
 $labels['readwhendeleted'] = 'Markér beskeden som læst ved sletning';
 $labels['flagfordeletion'] = 'Markér beskeden til sletning istedet for at slette';
@@ -302,6 +342,9 @@
 $labels['insertsignature'] = 'Indsæt signatur';
 $labels['previewpanemarkread'] = 'Markér forhåndsviste beskeder som læst';
 $labels['afternseconds'] = 'efter $n sekunder';
+$labels['reqmdn'] = 'Bed altid om at få besked om læsning';
+$labels['reqdsn'] = 'Bed altid om at få en status på levering';
+$labels['replysamefolder'] = 'Placer svar til en besked i samme mappe som beskeden der besvares';
 $labels['folder'] = 'Mappe';
 $labels['folders'] = 'Mapper';
 $labels['foldername'] = 'Mappenavn';
@@ -311,6 +354,13 @@
 $labels['createfolder'] = 'Opret ny mappe';
 $labels['managefolders'] = 'Administrér mapper';
 $labels['specialfolders'] = 'Specielle mapper';
+$labels['properties'] = 'Egenskaber';
+$labels['folderproperties'] = 'Mappe egenskaber';
+$labels['parentfolder'] = 'Mappe et niveau op';
+$labels['location'] = 'Placering';
+$labels['info'] = 'Information';
+$labels['getfoldersize'] = 'Klik for at hente mappestørrelse';
+$labels['changesubscription'] = 'Klik for at ændre abonnement';
 $labels['sortby'] = 'Sortér efter';
 $labels['sortasc'] = 'Ældste først';
 $labels['sortdesc'] = 'Nyeste først';
diff --git a/program/localization/da_DK/messages.inc b/program/localization/da_DK/messages.inc
index 74d70b7..b4bf3db 100644
--- a/program/localization/da_DK/messages.inc
+++ b/program/localization/da_DK/messages.inc
@@ -24,6 +24,9 @@
 $messages['sessionerror'] = 'Din session er ugyldig eller udløbet';
 $messages['imaperror'] = 'Forbindelse til IMAP serveren fejlede';
 $messages['servererror'] = 'Server fejl!';
+$messages['servererrormsg'] = 'Server fejl: $msg';
+$messages['errorreadonly'] = 'Kunne ikke udføre den ønskede handling. Mappen er skrivebeskyttet';
+$messages['errornoperm'] = 'Kunne ikke udføre den ønskede handling. Adgang nægtet';
 $messages['invalidrequest'] = 'Ugyldig forespørgsel! Ingen data blev gemt.';
 $messages['nomessagesfound'] = 'Der blev ikke fundet nogen beskeder i denne postkasse';
 $messages['loggedout'] = 'Du er nu logget af webmail. Farvel så længe!';
@@ -57,6 +60,8 @@
 $messages['purgefolderconfirm'] = 'Vil du virkelig slette alle beskeder i denne mappe?';
 $messages['folderdeleting'] = 'Sletter mappen...';
 $messages['foldermoving'] = 'Flytter mappen...';
+$messages['foldersubscribing'] = 'Abonnere på mappen...';
+$messages['folderunsubscribing'] = 'Fjerner abonnement på mappen...';
 $messages['formincomplete'] = 'Formularen var ikke fuldstændig fyldt ud';
 $messages['noemailwarning'] = 'Indtast venligst en gyldig e-mail adresse';
 $messages['nonamewarning'] = 'Angiv venligst et navn';
@@ -76,6 +81,10 @@
 $messages['checking'] = 'Tjekker...';
 $messages['nospellerrors'] = 'Ingen stavefejl fundet';
 $messages['folderdeleted'] = 'Mappen er slettet';
+$messages['foldersubscribed'] = 'Mappe abonnement oprettet';
+$messages['folderunsubscribed'] = 'Mappe abonnement opsagt';
+$messages['folderpurged'] = 'Mappen er tømt';
+$messages['folderexpunged'] = 'Mappen er blevet optimeret';
 $messages['deletedsuccessfully'] = 'Slettet';
 $messages['converting'] = 'Fjerner formatering fra besked...';
 $messages['messageopenerror'] = 'Beskeden kunne ikke hentes fra serveren';
@@ -87,6 +96,8 @@
 $messages['errorsavingcontact'] = 'Kunne ikke gemme kontakt adressen';
 $messages['movingmessage'] = 'Flytter besked...';
 $messages['copyingmessage'] = 'Kopierer besked...';
+$messages['deletingmessage'] = 'Sletter besked(er)...';
+$messages['markingmessage'] = 'Markerer besked(er)...';
 $messages['receiptsent'] = 'Kvittering for læsning er sendt';
 $messages['errorsendingreceipt'] = 'Kvitteringen kunne ikke sendes';
 $messages['nodeletelastidentity'] = 'Du kan ikke slette denne identitet, da det er den eneste der er tilbage.';
@@ -107,9 +118,26 @@
 $messages['smtpfromerror'] = 'SMTP fejl ($code): Kunne ikke afsende som "$from" ($msg)';
 $messages['smtptoerror'] = 'SMTP fejl ($code): Kunne ikke tilføje modtageren "$to" ($msg)';
 $messages['smtprecipientserror'] = 'SMTP fejl: kan ikke fortolke listen af modtagere';
+$messages['smtpdsnerror'] = 'SMTP fejl: Ingen understøttelse af leveringsnotifikation';
 $messages['smtperror'] = 'SMTP fejl: $msg';
 $messages['emailformaterror'] = 'Ugyldig email-adresse: $email';
 $messages['toomanyrecipients'] = 'For mange modtagere. Reducer antallet af modtagere til $max';
 $messages['maxgroupmembersreached'] = 'Antallet af gruppemedlemmer overstiger maksimum på $max';
+$messages['internalerror'] = 'Der opstod en intern fejl - prøv venligst igen';
+$messages['contactdelerror'] = 'Kunne ikke slette kontakt(er)';
+$messages['contactdeleted'] = 'Kontakt(er) slettet';
+$messages['groupdeleted'] = 'Gruppen er slettet';
+$messages['grouprenamed'] = 'Gruppen er omdøbt';
+$messages['groupcreated'] = 'Gruppen er oprettet';
+$messages['messagedeleted'] = 'Besked(er) slettet';
+$messages['messagemoved'] = 'Besked(er) flyttet';
+$messages['messagecopied'] = 'Besked(er) kopieret';
+$messages['messagemarked'] = 'Besked(er) markeret';
+$messages['autocompletechars'] = 'Du skal min. indtaste $min for at benytte autoopslag';
+$messages['namecannotbeempty'] = 'Navnet kan ikke været tomt';
+$messages['nametoolong'] = 'Navnet er for langt';
+$messages['folderupdated'] = 'Mappen er opdateret';
+$messages['foldercreated'] = 'Mappen er oprettet';
+$messages['invalidimageformat'] = 'Ikke et gyldigt billedformat';
 
 ?>
diff --git a/program/localization/de_DE/labels.inc b/program/localization/de_DE/labels.inc
index 262127c..c88508c 100644
--- a/program/localization/de_DE/labels.inc
+++ b/program/localization/de_DE/labels.inc
@@ -44,9 +44,6 @@
 $labels['priority'] = 'Priorität';
 $labels['organization'] = 'Organisation';
 $labels['readstatus'] = 'Gelesen/Ungelesen';
-$labels['reply-to'] = 'Antwort an';
-$labels['mail-reply-to'] = 'Mail-Reply-To';
-$labels['mail-followup-to'] = 'Mail-Followup-To';
 $labels['mailboxlist'] = 'Ordner';
 $labels['messagesfromto'] = 'Nachrichten $from bis $to von $count';
 $labels['threadsfromto'] = 'Konversationen $from bis $to von $count';
@@ -157,7 +154,6 @@
 $labels['folderactions'] = 'Ordneraktionen...';
 $labels['compact'] = 'Packen';
 $labels['empty'] = 'Leeren';
-$labels['purge'] = 'Bereinigen';
 $labels['quota'] = 'Speicherplatz';
 $labels['unknown'] = 'unbekannt';
 $labels['unlimited'] = 'unbegrenzt';
@@ -208,15 +204,45 @@
 $labels['name'] = 'Angezeigter Name';
 $labels['firstname'] = 'Vorname';
 $labels['surname'] = 'Nachname';
+$labels['middlename'] = 'zweiter  Vorname';
+$labels['nameprefix'] = 'Anrede';
+$labels['namesuffix'] = 'Namenszusatz';
+$labels['nickname'] = 'Spitzname';
+$labels['jobtitle'] = 'Berufsbezeichnung';
+$labels['department'] = 'Firma';
+$labels['gender'] = 'Geschlecht';
+$labels['maidenname'] = 'Mädchenname';
 $labels['email'] = 'E-Mail';
+$labels['phone'] = 'Telefon';
+$labels['address'] = 'Adresse';
+$labels['street'] = 'Straße';
+$labels['locality'] = 'Ort';
+$labels['zipcode'] = 'PLZ';
+$labels['region'] = 'Region';
+$labels['country'] = 'Land';
+$labels['birthday'] = 'Geburtstag';
+$labels['anniversary'] = 'Jahrestag';
+$labels['website'] = 'Webseite';
+$labels['instantmessenger'] = 'IM-Adresse';
+$labels['notes'] = 'Notizen';
+$labels['male'] = 'männlich';
+$labels['female'] = 'weiblich';
+$labels['manager'] = 'Vorgesetze(r)';
+$labels['assistant'] = 'Assistent';
+$labels['spouse'] = 'Partner/in';
+$labels['addfield'] = 'Feld hinzufügen...';
 $labels['addcontact'] = 'Kontakt hinzufügen';
 $labels['editcontact'] = 'Kontakt bearbeiten';
 $labels['contacts'] = 'Kontakte';
 $labels['contactproperties'] = 'Kontaktdaten';
+$labels['personalinfo'] = 'Persönliche Informationen';
 $labels['edit'] = 'Bearbeiten';
 $labels['cancel'] = 'Abbrechen';
 $labels['save'] = 'Speichern';
 $labels['delete'] = 'Löschen';
+$labels['rename'] = 'umbenennen';
+$labels['addphoto'] = 'Kontaktbild hinzufügen';
+$labels['replacephoto'] = 'Bild ändern';
 $labels['newcontact'] = 'Neuen Kontakt erstellen';
 $labels['deletecontact'] = 'Gewählte Kontakte löschen';
 $labels['composeto'] = 'Nachricht verfassen';
diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc
index 47e4e01..1d63591 100644
--- a/program/localization/de_DE/messages.inc
+++ b/program/localization/de_DE/messages.inc
@@ -24,6 +24,8 @@
 $messages['imaperror'] = 'Keine Verbindung zum IMAP-Server';
 $messages['servererror'] = 'Serverfehler!';
 $messages['servererrormsg'] = 'Serverfehler: $msg';
+$messages['errorreadonly'] = 'Die Aktion nicht ausgeführt werden. Der Ordner ist schreibgeschützt.';
+$messages['errornoperm'] = 'Die Aktion nicht ausgeführt werden. Zugriff verweigert.';
 $messages['invalidrequest'] = 'Ungültige Anfrage! Es wurden keine Daten gespeichert.';
 $messages['nomessagesfound'] = 'Keine Nachrichten in diesem Ordner';
 $messages['loggedout'] = 'Sie haben Ihre Session erfolgreich beendet. Auf Wiedersehen!';
@@ -135,7 +137,6 @@
 $messages['nametoolong'] = 'Der Name ist zu lang';
 $messages['folderupdated'] = 'Der Ordner wurde erfolgreich aktualisiert';
 $messages['foldercreated'] = 'Der Ordner wurde erfolgreich erstellt';
-$messages['errorreadonly'] = 'Die Aktion nicht ausgeführt werden. Der Ordner ist schreibgeschützt.';
-$messages['errornoperm'] = 'Die Aktion nicht ausgeführt werden. Zugriff verweigert.';
+$messages['invalidimageformat'] = 'Kein gültiges Bildformat';
 
 ?>
diff --git a/program/localization/fr_FR/labels.inc b/program/localization/fr_FR/labels.inc
index a3e4bc0..4430de6 100644
--- a/program/localization/fr_FR/labels.inc
+++ b/program/localization/fr_FR/labels.inc
@@ -40,12 +40,12 @@
 $labels['cc'] = 'Cc';
 $labels['bcc'] = 'Cci';
 $labels['replyto'] = 'Répondre à';
+$labels['followupto'] = 'Faire suivre à';
 $labels['date'] = 'Date';
 $labels['size'] = 'Taille';
 $labels['priority'] = 'Priorité';
 $labels['organization'] = 'Organisation';
 $labels['readstatus'] = 'Status de lecture';
-$labels['reply-to'] = 'Répondre à';
 $labels['mailboxlist'] = 'Dossiers';
 $labels['messagesfromto'] = 'Messages de $from à $to sur $count';
 $labels['threadsfromto'] = 'Fil de $from à $to sur $count';
@@ -156,7 +156,6 @@
 $labels['folderactions'] = 'Actions du dossier';
 $labels['compact'] = 'Compacter';
 $labels['empty'] = 'Vider';
-$labels['purge'] = 'Purger';
 $labels['quota'] = 'Occupation disque';
 $labels['unknown'] = 'inconnue';
 $labels['unlimited'] = 'illimitée';
@@ -199,6 +198,7 @@
 $labels['addcc'] = 'Ajouter Cc';
 $labels['addbcc'] = 'Ajouter Cci';
 $labels['addreplyto'] = 'Ajouter Répondre à';
+$labels['addfollowupto'] = 'Ajouter Faire suivre à';
 $labels['mdnrequest'] = 'L\'expéditeur de ce message a demandé d\'être prévenu quand vous lirez ce message. Souhaitez-vous prévenir l\'expéditeur ?';
 $labels['receiptread'] = 'Accusé de réception (lu)';
 $labels['yourmessage'] = 'Ceci est un accusé de réception pour votre message';
@@ -215,6 +215,7 @@
 $labels['cancel'] = 'Annuler';
 $labels['save'] = 'Sauvegarder';
 $labels['delete'] = 'Supprimer';
+$labels['rename'] = 'Renommer';
 $labels['newcontact'] = 'Créer un nouveau contact';
 $labels['deletecontact'] = 'Supprimer les contacts sélectionnés';
 $labels['composeto'] = 'Écrire un message à';
diff --git a/program/localization/fr_FR/messages.inc b/program/localization/fr_FR/messages.inc
index 6623948..dd91a7a 100644
--- a/program/localization/fr_FR/messages.inc
+++ b/program/localization/fr_FR/messages.inc
@@ -26,6 +26,8 @@
 $messages['imaperror'] = 'Erreur de connexion au serveur IMAP';
 $messages['servererror'] = 'Erreur Serveur !';
 $messages['servererrormsg'] = 'Erreur du serveur: $msg';
+$messages['errorreadonly'] = 'Impossible d\'effectuer cette opération. Le dossier est en lecture seule';
+$messages['errornoperm'] = 'Impossible d\'effectuer cette opération. Permission refusée';
 $messages['invalidrequest'] = 'Requête invalide ! Aucune donnée n\'a été sauvegardée.';
 $messages['nomessagesfound'] = 'Aucun message trouvé dans cette boîte aux lettres';
 $messages['loggedout'] = 'Vous venez de vous déconnecter avec succès. Au revoir !';
@@ -59,6 +61,8 @@
 $messages['purgefolderconfirm'] = 'Voulez-vous vraiment effacer tous les messages de ce dossier ?';
 $messages['folderdeleting'] = 'Suppression du dossier...';
 $messages['foldermoving'] = 'Déplacement du dossier...';
+$messages['foldersubscribing'] = 'Inscription du dossier...';
+$messages['folderunsubscribing'] = 'Désinscription du dossier...';
 $messages['formincomplete'] = 'Le formulaire n\'a pas été entièrement rempli';
 $messages['noemailwarning'] = 'Veuillez spécifier un courriel valide';
 $messages['nonamewarning'] = 'Veuillez fournir un nom';
@@ -78,6 +82,10 @@
 $messages['checking'] = 'Vérification...';
 $messages['nospellerrors'] = 'Aucune faute trouvée';
 $messages['folderdeleted'] = 'Dossier effacé';
+$messages['foldersubscribed'] = 'Le dossier a bien été inscrit';
+$messages['folderunsubscribed'] = 'Le dossier a bien été désinscrit';
+$messages['folderpurged'] = 'Le dossier a bien été vidé';
+$messages['folderexpunged'] = 'Le dossier a bien été comptacté';
 $messages['deletedsuccessfully'] = 'Supprimé(s) avec succès';
 $messages['converting'] = 'Suppression de la mise en forme...';
 $messages['messageopenerror'] = 'Impossible de charger le message depuis serveur';
@@ -127,5 +135,9 @@
 $messages['messagecopied'] = 'Les messages ont bien été copiés';
 $messages['messagemarked'] = 'Les messages ont bien été marqués';
 $messages['autocompletechars'] = 'Entrez au moins $min caractères pour l\'auto-complétion';
+$messages['namecannotbeempty'] = 'Le nom ne peut pas être vide';
+$messages['nametoolong'] = 'Le nom est trop long';
+$messages['folderupdated'] = 'Le dossier a bien été mis à jour';
+$messages['foldercreated'] = 'Le dossier a bien été créé';
 
 ?>
diff --git a/program/localization/he_IL/labels.inc b/program/localization/he_IL/labels.inc
index 61f27f7..02ea0cf 100644
--- a/program/localization/he_IL/labels.inc
+++ b/program/localization/he_IL/labels.inc
@@ -152,7 +152,6 @@
 $labels['folderactions'] = 'פעולות על תיקים';
 $labels['compact'] = 'פינוי שטח לא מנוצל';
 $labels['empty'] = 'ריקון';
-$labels['purge'] = 'מחיקה';
 $labels['quota'] = 'ניצול קיבולת';
 $labels['unknown'] = 'לא ידוע';
 $labels['unlimited'] = 'ללא הגבלה';
@@ -203,15 +202,45 @@
 $labels['name'] = 'שם להצגה';
 $labels['firstname'] = 'שם פרטי';
 $labels['surname'] = 'שם משפחה';
+$labels['middlename'] = 'שם אמצעי';
+$labels['nameprefix'] = 'קידומת';
+$labels['namesuffix'] = 'סיומת';
+$labels['nickname'] = 'שם חיבה';
+$labels['jobtitle'] = 'תפקיד באירגון';
+$labels['department'] = 'מחלקה';
+$labels['gender'] = 'מגדר';
+$labels['maidenname'] = 'שם משפחה לפני נישואין';
 $labels['email'] = 'כתובת דוא"ל';
+$labels['phone'] = 'מספר טלפון';
+$labels['address'] = 'כתובת';
+$labels['street'] = 'רחוב';
+$labels['locality'] = 'עיר';
+$labels['zipcode'] = 'מיקוד';
+$labels['region'] = 'אישור';
+$labels['country'] = 'מדינה';
+$labels['birthday'] = 'יום הולדת';
+$labels['anniversary'] = 'יום נישואין';
+$labels['website'] = 'אתר אינטרנט';
+$labels['instantmessenger'] = 'כינוי בצ\'ט';
+$labels['notes'] = 'הערות';
+$labels['male'] = 'זכר';
+$labels['female'] = 'נקבה';
+$labels['manager'] = 'מנהל/ת';
+$labels['assistant'] = 'עוזר/ת';
+$labels['spouse'] = 'בן/בת זוג';
+$labels['addfield'] = 'הוסף שדה';
 $labels['addcontact'] = 'הוספת איש קשר';
 $labels['editcontact'] = 'עריכת איש קשר';
 $labels['contacts'] = 'אנשי קשר';
 $labels['contactproperties'] = 'מאפייני איש קשר';
+$labels['personalinfo'] = 'מידע אישי';
 $labels['edit'] = 'עריכה';
 $labels['cancel'] = 'ביטול';
 $labels['save'] = 'שמירה';
 $labels['delete'] = 'מחיקה';
+$labels['rename'] = 'שינוי שם';
+$labels['addphoto'] = 'הוספה';
+$labels['replacephoto'] = 'החלפה';
 $labels['newcontact'] = 'איש קשר חדש';
 $labels['deletecontact'] = 'מחיקת אנשי קשר מסומנים';
 $labels['composeto'] = 'יצירת הודעה אל';
diff --git a/program/localization/he_IL/messages.inc b/program/localization/he_IL/messages.inc
index 9dd3c87..000fcb9 100644
--- a/program/localization/he_IL/messages.inc
+++ b/program/localization/he_IL/messages.inc
@@ -136,5 +136,6 @@
 $messages['nametoolong'] = 'השם ארוך מדי';
 $messages['folderupdated'] = 'התיק עודכן בהצלחה';
 $messages['foldercreated'] = 'התיק נוצר בהצלחה';
+$messages['invalidimageformat'] = 'פורמט תמונה לא חוקי';
 
 ?>
diff --git a/program/localization/hu_HU/labels.inc b/program/localization/hu_HU/labels.inc
index f5622a7..7b0bac7 100644
--- a/program/localization/hu_HU/labels.inc
+++ b/program/localization/hu_HU/labels.inc
@@ -49,7 +49,7 @@
 $labels['mailboxlist'] = 'Mappák';
 $labels['messagesfromto'] = 'Üzenetek: $from - $to / $count';
 $labels['threadsfromto'] = 'Témák ($from - $to, összesen $count)';
-$labels['messagenrof'] = '$nr / $coun t üzenet';
+$labels['messagenrof'] = '$nr / $count üzenet';
 $labels['copy'] = 'Másolás';
 $labels['move'] = 'Áthelyezés';
 $labels['moveto'] = 'áthelyezés...';
diff --git a/program/localization/it_IT/labels.inc b/program/localization/it_IT/labels.inc
index 7537df5..a6ec656 100644
--- a/program/localization/it_IT/labels.inc
+++ b/program/localization/it_IT/labels.inc
@@ -37,13 +37,14 @@
 $labels['from'] = 'Mittente';
 $labels['to'] = 'Destinatario';
 $labels['cc'] = 'Cc';
-$labels['bcc'] = 'Bcn';
+$labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Rispondi a';
 $labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Data';
 $labels['size'] = 'Dimensione';
 $labels['priority'] = 'Priorità';
 $labels['organization'] = 'Società';
+$labels['readstatus'] = 'Visualizza lo stato';
 $labels['mailboxlist'] = 'Cartelle';
 $labels['messagesfromto'] = 'Messaggi da $from a $to di $count';
 $labels['threadsfromto'] = 'Thread da $from a $to di $count';
@@ -97,7 +98,7 @@
 $labels['checkmail'] = 'Controlla nuovi messaggi';
 $labels['writenewmessage'] = 'Scrivi un nuovo messaggio';
 $labels['replytomessage'] = 'Rispondi al mittente';
-$labels['replytoallmessage'] = 'Rispondi a tutti o alla mailing list';
+$labels['replytoallmessage'] = 'Rispondi a l mittente e ai destinatari';
 $labels['replyall'] = 'Rispondi a tutti';
 $labels['replylist'] = 'Rispondi alla mailing list';
 $labels['forwardmessage'] = 'Inoltra il messaggio';
@@ -204,7 +205,33 @@
 $labels['name'] = 'Nome visualizzato';
 $labels['firstname'] = 'Nome';
 $labels['surname'] = 'Cognome';
+$labels['middlename'] = 'Secondo nome';
+$labels['nameprefix'] = 'Prefisso';
+$labels['namesuffix'] = 'Suffisso';
+$labels['nickname'] = 'Soprannome';
+$labels['jobtitle'] = 'Titolo';
+$labels['department'] = 'Dipartimento';
+$labels['gender'] = 'Sesso';
+$labels['maidenname'] = 'Cognome da nubile';
 $labels['email'] = 'E-Mail';
+$labels['phone'] = 'Telefono';
+$labels['address'] = 'Indirizzo';
+$labels['street'] = 'Via';
+$labels['locality'] = 'Città';
+$labels['zipcode'] = 'CAP';
+$labels['region'] = 'Regione';
+$labels['country'] = 'Stato';
+$labels['birthday'] = 'Compleanno';
+$labels['anniversary'] = 'Anniversario';
+$labels['website'] = 'Sito web';
+$labels['instantmessenger'] = 'IM';
+$labels['notes'] = 'Note';
+$labels['male'] = 'maschio';
+$labels['female'] = 'femmina';
+$labels['manager'] = 'Manager';
+$labels['assistant'] = 'Assistente';
+$labels['spouse'] = 'Coniuge';
+$labels['addfield'] = 'Aggiungi campo...';
 $labels['addcontact'] = 'Aggiungi contatto alla rubrica';
 $labels['editcontact'] = 'Modifica contatto';
 $labels['contacts'] = 'Contatti';
@@ -214,6 +241,8 @@
 $labels['save'] = 'Salva';
 $labels['delete'] = 'Elimina';
 $labels['rename'] = 'Rinomina';
+$labels['addphoto'] = 'Aggiungi';
+$labels['replacephoto'] = 'Sostituisci';
 $labels['newcontact'] = 'Crea un nuovo contatto';
 $labels['deletecontact'] = 'Elimina i contatti selezionati';
 $labels['composeto'] = 'Invia email a';
@@ -330,6 +359,7 @@
 $labels['properties'] = 'Proprietà';
 $labels['folderproperties'] = 'Proprietà cartella';
 $labels['parentfolder'] = 'Cartella padre';
+$labels['location'] = 'Ubicazione';
 $labels['info'] = 'Informazioni';
 $labels['getfoldersize'] = 'Click per la dimensione della cartella';
 $labels['changesubscription'] = 'Click per cambiare sottoscrizione';
@@ -360,3 +390,5 @@
 $labels['chinese'] = 'Cinese';
 
 ?>
+
+
diff --git a/program/localization/it_IT/messages.inc b/program/localization/it_IT/messages.inc
index fd259ab..7fdbc16 100644
--- a/program/localization/it_IT/messages.inc
+++ b/program/localization/it_IT/messages.inc
@@ -30,7 +30,7 @@
 $messages['invalidrequest'] = 'Richiesta non valida! Nessun dato salvato.';
 $messages['nomessagesfound'] = 'Nessun messaggio trovato in questa cartella';
 $messages['loggedout'] = 'Sessione chiusa correttamente. Arrivederci!';
-$messages['mailboxempty'] = 'La cartella è vuota';
+$messages['mailboxempty'] = 'La casella è vuota';
 $messages['loading'] = 'Caricamento...';
 $messages['uploading'] = 'Caricamento file...';
 $messages['loadingdata'] = 'Caricamento dati...';
@@ -138,5 +138,8 @@
 $messages['nametoolong'] = 'Nome troppo lungo';
 $messages['folderupdated'] = 'Cartella aggiornata correttamente';
 $messages['foldercreated'] = 'Cartella creata correttamente';
+$messages['invalidimageformat'] = 'Formato non valido';
 
 ?>
+
+
diff --git a/program/localization/ja_JP/labels.inc b/program/localization/ja_JP/labels.inc
index 08ccbb4..06c9fa4 100644
--- a/program/localization/ja_JP/labels.inc
+++ b/program/localization/ja_JP/labels.inc
@@ -16,7 +16,7 @@
 
 @version $Id$
 
-EN-Revision: 4353
+EN-Revision: 4441
 
 */
 
@@ -41,11 +41,11 @@
 $labels['cc'] = 'コピー';
 $labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Reply-To (返信先)';
-$labels['followupto'] = 'Followup-To';
+$labels['followupto'] = 'Followup-To (ML の宛先)';
 $labels['date'] = '日付';
 $labels['size'] = '容量';
 $labels['priority'] = '優先度';
-$labels['organization'] = '所属';
+$labels['organization'] = '企業名';
 $labels['readstatus'] = '閲覧の状態';
 $labels['mailboxlist'] = 'フォルダー一覧';
 $labels['messagesfromto'] = '表示中のメール: $from ~ $to (全: $count 件)';
@@ -157,7 +157,6 @@
 $labels['folderactions'] = 'フォルダーの操作...';
 $labels['compact'] = 'コンパクト';
 $labels['empty'] = '空';
-$labels['purge'] = 'ごみ箱を空にする';
 $labels['quota'] = 'ディスク使用量';
 $labels['unknown'] = '不明';
 $labels['unlimited'] = '無制限';
@@ -206,18 +205,47 @@
 $labels['yourmessage'] = 'これはあなたが送信したメールに対する開封確認です。';
 $labels['receiptnote'] = '注意: この開封確認はメールが受信者に表示されたことの通知です。受信者がメールを読んだこと、内容を理解したことを保証するものではありません。';
 $labels['name'] = '表示名';
-$labels['firstname'] = '名 (ファースト ネーム)';
-$labels['surname'] = '姓 (ラスト ネーム)';
+$labels['firstname'] = '名 (ファーストネーム)';
+$labels['surname'] = '姓 (ラストネーム)';
+$labels['middlename'] = 'ミドルネーム';
+$labels['nameprefix'] = '敬称 (名前の前)';
+$labels['namesuffix'] = '敬称 (名前の後)';
+$labels['nickname'] = 'ニックネーム';
+$labels['jobtitle'] = '肩書き';
+$labels['department'] = '部署名';
+$labels['gender'] = '性別';
+$labels['maidenname'] = '旧姓';
 $labels['email'] = 'メールアドレス';
+$labels['phone'] = '電話番号';
+$labels['address'] = '住所';
+$labels['street'] = '通り';
+$labels['locality'] = '都市';
+$labels['zipcode'] = '郵便番号';
+$labels['region'] = '州';
+$labels['country'] = '国';
+$labels['birthday'] = '誕生日';
+$labels['anniversary'] = '記念日';
+$labels['website'] = 'ウェブサイト';
+$labels['instantmessenger'] = 'IM';
+$labels['notes'] = 'Notes';
+$labels['male'] = '男性';
+$labels['female'] = '女性';
+$labels['manager'] = '管理者';
+$labels['assistant'] = 'アシスタント';
+$labels['spouse'] = '配偶者';
+$labels['addfield'] = '項目の追加...';
 $labels['addcontact'] = '連絡先の新規追加';
 $labels['editcontact'] = '連絡先の編集';
 $labels['contacts'] = '連絡先';
 $labels['contactproperties'] = '連絡先のプロパティ';
+$labels['personalinfo'] = '個人情報';
 $labels['edit'] = '編集';
 $labels['cancel'] = 'キャンセル';
 $labels['save'] = '保存';
 $labels['delete'] = '削除';
 $labels['rename'] = '名前の変更';
+$labels['addphoto'] = '追加';
+$labels['replacephoto'] = '置換';
 $labels['newcontact'] = '連絡先の新規作成';
 $labels['deletecontact'] = '連絡先の削除';
 $labels['composeto'] = 'この連絡先へメールの送信';
diff --git a/program/localization/ja_JP/messages.inc b/program/localization/ja_JP/messages.inc
index efd9183..657a1df 100644
--- a/program/localization/ja_JP/messages.inc
+++ b/program/localization/ja_JP/messages.inc
@@ -16,7 +16,7 @@
 
 @version $Id$
 
-//  EN-Revision: 4321
+//  EN-Revision: 4424
 
 */
 
@@ -140,5 +140,6 @@
 $messages['nametoolong'] = '名前が長すぎます。';
 $messages['folderupdated'] = 'フォルダーの更新に成功しました。';
 $messages['foldercreated'] = 'フォルダーの作成に成功しました。';
+$messages['invalidimageformat'] = '画像の形式が正しくありません。';
 
 ?>
diff --git a/program/localization/pt_PT/labels.inc b/program/localization/pt_PT/labels.inc
index f5380dd..c46d4e3 100644
--- a/program/localization/pt_PT/labels.inc
+++ b/program/localization/pt_PT/labels.inc
@@ -208,16 +208,45 @@
 $labels['name'] = 'Nome completo';
 $labels['firstname'] = 'Primeiro nome';
 $labels['surname'] = 'Apelido';
+$labels['middlename'] = 'Outros nomes/apelidos';
+$labels['nameprefix'] = 'Título';
+$labels['namesuffix'] = 'Sufixo';
+$labels['nickname'] = 'Alcunha';
+$labels['jobtitle'] = 'Cargo';
+$labels['department'] = 'Departamento';
+$labels['gender'] = 'Género';
+$labels['maidenname'] = 'Nome solteiro';
 $labels['email'] = 'E-mail';
+$labels['phone'] = 'Telefone';
+$labels['address'] = 'Endereço';
+$labels['street'] = 'Rua';
+$labels['locality'] = 'Cidade';
+$labels['zipcode'] = 'Código postal';
+$labels['region'] = 'Localidade';
+$labels['country'] = 'Pais';
+$labels['birthday'] = 'Data de nascimento';
+$labels['anniversary'] = 'Aniversário';
+$labels['website'] = 'Página web';
+$labels['instantmessenger'] = 'Endereço IM';
+$labels['notes'] = 'Notas';
+$labels['male'] = 'masculino';
+$labels['female'] = 'feminino';
+$labels['manager'] = 'Gerente';
+$labels['assistant'] = 'Assistente';
+$labels['spouse'] = 'Cônjuge';
+$labels['addfield'] = 'Adicionar campo...';
 $labels['addcontact'] = 'Criar novo contacto';
 $labels['editcontact'] = 'Editar contacto';
 $labels['contacts'] = 'Contactos';
 $labels['contactproperties'] = 'Propriedades dos contactos';
+$labels['personalinfo'] = 'Informação pessoal';
 $labels['edit'] = 'Editar';
 $labels['cancel'] = 'Cancelar';
 $labels['save'] = 'Guardar';
 $labels['delete'] = 'Eliminar';
 $labels['rename'] = 'Renomear';
+$labels['addphoto'] = 'Adicionar';
+$labels['replacephoto'] = 'Substituir';
 $labels['newcontact'] = 'Criar novo contacto';
 $labels['deletecontact'] = 'Eliminar contactos seleccionados';
 $labels['composeto'] = 'Escrever mensagem para';
diff --git a/program/localization/pt_PT/messages.inc b/program/localization/pt_PT/messages.inc
index 07caaa3..eb56751 100644
--- a/program/localization/pt_PT/messages.inc
+++ b/program/localization/pt_PT/messages.inc
@@ -140,5 +140,6 @@
 $messages['nametoolong'] = 'O nome é demasiado longo';
 $messages['folderupdated'] = 'Actualização da pasta concluída com sucesso';
 $messages['foldercreated'] = 'Pasta criada com sucesso';
+$messages['invalidimageformat'] = 'Formato de imagem não suportado';
 
 ?>
diff --git a/program/localization/ru_RU/labels.inc b/program/localization/ru_RU/labels.inc
index d8d050b..39e3ab5 100644
--- a/program/localization/ru_RU/labels.inc
+++ b/program/localization/ru_RU/labels.inc
@@ -156,7 +156,6 @@
 $labels['folderactions'] = 'Операции над папкой...';
 $labels['compact'] = 'Сжать';
 $labels['empty'] = 'Опустошить';
-$labels['purge'] = 'Очистить';
 $labels['quota'] = 'Квота';
 $labels['unknown'] = 'неизвестно';
 $labels['unlimited'] = 'без ограничений';
@@ -207,15 +206,45 @@
 $labels['name'] = 'Отображаемое имя';
 $labels['firstname'] = 'Имя';
 $labels['surname'] = 'Фамилия';
+$labels['middlename'] = 'Отчество';
+$labels['nameprefix'] = 'Префикс';
+$labels['namesuffix'] = 'Суффикс';
+$labels['nickname'] = 'Прозвище';
+$labels['jobtitle'] = 'Должность';
+$labels['department'] = 'Отдел';
+$labels['gender'] = 'Пол';
+$labels['maidenname'] = 'Девичья фамилия';
 $labels['email'] = 'E-Mail';
+$labels['phone'] = 'Телефон';
+$labels['address'] = 'Адрес';
+$labels['street'] = 'Улица';
+$labels['locality'] = 'Город';
+$labels['zipcode'] = 'Индекс';
+$labels['region'] = 'Область';
+$labels['country'] = 'Страна';
+$labels['birthday'] = 'День рождения';
+$labels['anniversary'] = 'Годовщина';
+$labels['website'] = 'Веб-сайт';
+$labels['instantmessenger'] = 'IM';
+$labels['notes'] = 'Заметки';
+$labels['male'] = 'мужской';
+$labels['female'] = 'женский';
+$labels['manager'] = 'Менеджер';
+$labels['assistant'] = 'Помощник';
+$labels['spouse'] = 'Супруг';
+$labels['addfield'] = 'Добавить поле...';
 $labels['addcontact'] = 'Добавить выбранные контакты в список контактов';
 $labels['editcontact'] = 'Редактировать контакт';
 $labels['contacts'] = 'Контакты';
 $labels['contactproperties'] = 'Свойства контакта';
+$labels['personalinfo'] = 'Личная информация';
 $labels['edit'] = 'Правка';
 $labels['cancel'] = 'Отмена';
 $labels['save'] = 'Сохранить';
 $labels['delete'] = 'Удалить';
+$labels['rename'] = 'Переименовать';
+$labels['addphoto'] = 'Добавить';
+$labels['replacephoto'] = 'Заменить';
 $labels['newcontact'] = 'Создать новый контакт';
 $labels['deletecontact'] = 'Удалить выбранные контакты';
 $labels['composeto'] = 'Создать сообщение для выбранных контактов';
diff --git a/program/localization/ru_RU/messages.inc b/program/localization/ru_RU/messages.inc
index 26cda01..83aa8a7 100644
--- a/program/localization/ru_RU/messages.inc
+++ b/program/localization/ru_RU/messages.inc
@@ -138,5 +138,6 @@
 $messages['nametoolong'] = 'Слишком длинное имя';
 $messages['folderupdated'] = 'Папка обновлена';
 $messages['foldercreated'] = 'Папка создана';
+$messages['invalidimageformat'] = 'Неверный формат изображения';
 
 ?>
diff --git a/program/localization/sk_SK/labels.inc b/program/localization/sk_SK/labels.inc
index ce93f88..25c8cb0 100644
--- a/program/localization/sk_SK/labels.inc
+++ b/program/localization/sk_SK/labels.inc
@@ -14,6 +14,7 @@
 |         Lukas Kraic  <lukas.kraic@truni.sk>                           |
 |         Peter Mann   <peter.mann@tuke.sk>                             |
 |         Ales Pospichal   <ales@pospichalales.info>                    |
+|         Martin Lacina	<martin@whistler.sk>                            |
 +-----------------------------------------------------------------------+
 
 @version $Id$
@@ -45,7 +46,7 @@
 $labels['size'] = 'Veľkosť';
 $labels['priority'] = 'Priorita';
 $labels['organization'] = 'Organizácia';
-$labels['reply-to'] = 'Odpovedať na';
+$labels['readstatus'] = 'Čítať stav';
 $labels['mailboxlist'] = 'Adresár';
 $labels['messagesfromto'] = 'Správy od $from do $to z $count';
 $labels['threadsfromto'] = 'Konverzácie od $from do $to z $count ';
@@ -100,6 +101,8 @@
 $labels['writenewmessage'] = 'Vytvoriť novú správu';
 $labels['replytomessage'] = 'Odpovedať';
 $labels['replytoallmessage'] = 'Odpovedať všetkým';
+$labels['replyall'] = 'Odpovedať všetkým';
+$labels['replylist'] = 'Zoznam odpovedí';
 $labels['forwardmessage'] = 'Poslať ďalej';
 $labels['deletemessage'] = 'Zmazať správu';
 $labels['movemessagetotrash'] = 'Presunúť správu do koša';
@@ -154,7 +157,6 @@
 $labels['folderactions'] = 'Akcie so zložkou...';
 $labels['compact'] = 'Zhustiť priečinok';
 $labels['empty'] = 'Prázdne';
-$labels['purge'] = 'Vyprázdniť';
 $labels['quota'] = 'Zaplnenie schránky';
 $labels['unknown'] = 'neznáme';
 $labels['unlimited'] = 'neobmedzené';
@@ -172,6 +174,7 @@
 $labels['charset'] = 'Znaková sada';
 $labels['editortype'] = 'Typ editora';
 $labels['returnreceipt'] = 'Potvrdenie o doručení';
+$labels['dsn'] = 'Doručenie oznámenia o stave';
 $labels['editidents'] = 'Editovať identity';
 $labels['checkspelling'] = 'Skontrolovať pravopis';
 $labels['resumeediting'] = 'Pokračovať v úpravách';
@@ -207,10 +210,12 @@
 $labels['addcontact'] = 'Pridať nový kontakt';
 $labels['editcontact'] = 'Upraviť kontakt';
 $labels['contacts'] = 'Kontakty';
+$labels['contactproperties'] = 'Vlastnosti kontaktu';
 $labels['edit'] = 'Upraviť';
 $labels['cancel'] = 'Zrušiť';
 $labels['save'] = 'Uložiť';
 $labels['delete'] = 'Zmazať';
+$labels['rename'] = 'Premenovať';
 $labels['newcontact'] = 'Vytvoriť nový kontakt';
 $labels['deletecontact'] = 'Zmazať zvolené kontakty';
 $labels['composeto'] = 'Vytvoriť správu pre';
@@ -254,6 +259,7 @@
 $labels['signature'] = 'Podpis';
 $labels['dstactive'] = 'Letný čas';
 $labels['htmleditor'] = 'Vytvoriť HTML správu';
+$labels['htmlonreply'] = 'len v odpovedi na HTML správy';
 $labels['htmlsignature'] = 'HTML podpis';
 $labels['previewpane'] = 'Ukázať náhľad';
 $labels['skin'] = 'Vzhľad';
@@ -266,6 +272,7 @@
 $labels['askuser'] = 'spýtať sa používateľa';
 $labels['autosend'] = 'poslať potvrdenie automaticky';
 $labels['autosendknown'] = 'poslať potvrdenie iba mojím kontaktom';
+$labels['autosendknownignore'] = 'poslať potvrdenie mojím kontaktom, inak ignorovať';
 $labels['ignore'] = 'ignorovať';
 $labels['readwhendeleted'] = 'Označiť správu ';
 $labels['flagfordeletion'] = 'Pri odstránení správy iba označiť správu ako odstránenú';
@@ -311,6 +318,8 @@
 $labels['previewpanemarkread'] = 'Označiť zobrazenej správy ako prečítané';
 $labels['afternseconds'] = 'po $ sekundách';
 $labels['reqmdn'] = 'Vždy požadovať doručenku';
+$labels['reqdsn'] = 'Vždy vyžadovať potvrdenie o doručení správy';
+$labels['replysamefolder'] = 'Umietniť odpoveď do adresára, kde je umiestnená správa, na ktorú sa odpovedalo';
 $labels['folder'] = 'Priečinok';
 $labels['folders'] = 'Priečinky';
 $labels['foldername'] = 'Názov priečinku';
@@ -320,6 +329,13 @@
 $labels['createfolder'] = 'Vytvor nový priečinok';
 $labels['managefolders'] = 'Spravovať priečinky';
 $labels['specialfolders'] = 'Špeciálne priečinky';
+$labels['properties'] = 'Vlastnosti';
+$labels['folderproperties'] = 'Vlastnosti adresára';
+$labels['parentfolder'] = 'Rodičovský adresár';
+$labels['location'] = 'Umiestnenie';
+$labels['info'] = 'Informácia';
+$labels['getfoldersize'] = 'Kliknúť pre získanie leľkosti adresára';
+$labels['changesubscription'] = 'Kliknúť pre zmenu prihlásenia odberu';
 $labels['sortby'] = 'Triediť podľa';
 $labels['sortasc'] = 'Triediť vzostupne';
 $labels['sortdesc'] = 'Triediť zostupne';
@@ -346,4 +362,4 @@
 $labels['korean'] = 'Korejčina';
 $labels['chinese'] = 'Čínština';
 
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/sk_SK/messages.inc b/program/localization/sk_SK/messages.inc
index 315038f..e44c65c 100644
--- a/program/localization/sk_SK/messages.inc
+++ b/program/localization/sk_SK/messages.inc
@@ -14,6 +14,7 @@
 |         Lukas Kraic  <lukas.kraic@truni.sk>                           |
 |         Peter Mann   <peter.mann@tuke.sk>                             |
 |         Ales Pospichal   <ales@pospichalales.info>                    |
+|         Martin Lacina	<martin@whistler.sk>                            |
 +-----------------------------------------------------------------------+
 
 @version $Id$
@@ -26,6 +27,9 @@
 $messages['sessionerror'] = 'Vaše prihlásenie je neplatné alebo vypršala jeho platnosť';
 $messages['imaperror'] = 'Nepodarilo sa spojiť s IMAP serverom';
 $messages['servererror'] = 'Chyba servera!';
+$messages['servererrormsg'] = 'Chyba servera: $msg';
+$messages['errorreadonly'] = 'Nemožno vykonať operáciu. Adresár je len na čítanie';
+$messages['errornoperm'] = 'Nemožno vykonať operáciu. Prístup odmietnutý';
 $messages['invalidrequest'] = 'Chybný požiadavek. Žiadne údaje neboli uložené.';
 $messages['nomessagesfound'] = 'Vo Vašej schránke nie je žiadna správa';
 $messages['loggedout'] = 'Odhlásenie prebehlo úspešne. Dovidenia.';
@@ -59,6 +63,8 @@
 $messages['purgefolderconfirm'] = 'Ste si istý, že chcete zmazať všetky správy v tomto priečinku?';
 $messages['folderdeleting'] = 'Odstraňuje sa priečinok ...';
 $messages['foldermoving'] = 'Prečinok sa presúva ...';
+$messages['foldersubscribing'] = 'Prihlasujem sa k adresáru...';
+$messages['folderunsubscribing'] = 'Odhlasujem sa z adresára...';
 $messages['formincomplete'] = 'Formulár nie je kompletne vyplnený';
 $messages['noemailwarning'] = 'Prosím, vložte platnú emailovú adresu';
 $messages['nonamewarning'] = 'Prosím, zadajte meno';
@@ -78,6 +84,10 @@
 $messages['checking'] = 'Kontroluje sa...';
 $messages['nospellerrors'] = 'Pri kontrole pravopisu neboli nájdené chyby';
 $messages['folderdeleted'] = 'Priečinok bol zmazaný';
+$messages['foldersubscribed'] = 'Úspešne prihlásený k adresáru';
+$messages['folderunsubscribed'] = 'Úspešne odhlásený z adresára';
+$messages['folderpurged'] = 'Adresár bol vyprázdnený';
+$messages['folderexpunged'] = 'Adresár bol zhustený';
 $messages['deletedsuccessfully'] = 'Úspešne zmazané';
 $messages['converting'] = 'Odstraňuje sa formátovanie správy...';
 $messages['messageopenerror'] = 'Nedá sa načítať správa zo servera';
@@ -89,6 +99,8 @@
 $messages['errorsavingcontact'] = 'Nedá sa uložiť adresa kontaktu';
 $messages['movingmessage'] = 'Správa sa presúva...';
 $messages['copyingmessage'] = 'Správa sa kopíruje...';
+$messages['deletingmessage'] = 'Mažem správu(y)...';
+$messages['markingmessage'] = 'Označujem správu(y)...';
 $messages['receiptsent'] = 'Potvrdenie o prijatí správy bolo odoslané';
 $messages['errorsendingreceipt'] = 'Potvrdenie o prijatí správy sa nedalo odoslať';
 $messages['nodeletelastidentity'] = 'Identita sa nedá odstrániť, je posledná a musí zostať.';
@@ -109,10 +121,25 @@
 $messages['smtpfromerror'] = 'Chyba SMTP: Nemožno nastaviť odosielateľa ($msg)';
 $messages['smtptoerror'] = 'Chyba SMTP: Nemožno pridať príjemca ($msg)';
 $messages['smtprecipientserror'] = 'Chyba SMTP: Nemožno spracovať zoznam príjemcov';
+$messages['smtpdsnerror'] = 'SMTP chyba: Oznámenie o doručení nie je podporované';
 $messages['smtperror'] = 'Chyba SMTP: $msg';
 $messages['emailformaterror'] = 'Neplatná e-mailová adresa: $email';
 $messages['toomanyrecipients'] = 'Príliš veľa príjemcov. Zmenšite počet príjemcov na $max.';
 $messages['maxgroupmembersreached'] = 'Počet členov skupiny dosiahol maxima z $max';
 $messages['internalerror'] = 'Došlo k internej chybe. Skúste to znova';
+$messages['contactdelerror'] = 'Nemôžem vymazať kontakt(y)';
+$messages['contactdeleted'] = 'Kontakt(y) bol vymazaný';
+$messages['groupdeleted'] = 'Skupina bola vymazaná';
+$messages['grouprenamed'] = 'Skupina bola premenovaná';
+$messages['groupcreated'] = 'Skupina bola vytvorená';
+$messages['messagedeleted'] = 'Správa(y) bola vymazaná';
+$messages['messagemoved'] = 'Správa(y) bola presunutá';
+$messages['messagecopied'] = 'Správa(y) bola skopírovaná';
+$messages['messagemarked'] = 'Správa(y) bola označená';
+$messages['autocompletechars'] = 'Zadajte najmenej $min znamkov pre automatické dopĺňanie';
+$messages['namecannotbeempty'] = 'Meno nemôže byť prázdne';
+$messages['nametoolong'] = 'Meno je príliš dlhé';
+$messages['folderupdated'] = 'Adresár bol aktualizovaný';
+$messages['foldercreated'] = 'Adresár bol vytvorený';
 
 ?>
diff --git a/program/localization/sv_SE/labels.inc b/program/localization/sv_SE/labels.inc
index 60f7e01..64da4c4 100644
--- a/program/localization/sv_SE/labels.inc
+++ b/program/localization/sv_SE/labels.inc
@@ -121,7 +121,7 @@
 $labels['markunread'] = 'Oläst';
 $labels['markflagged'] = 'Flaggat';
 $labels['markunflagged'] = 'Oflaggat';
-$labels['messageactions'] = 'Hantera meddelanden';
+$labels['messageactions'] = 'Hantera meddelande';
 $labels['select'] = 'Välj';
 $labels['all'] = 'Alla';
 $labels['none'] = 'Ingen';
@@ -156,7 +156,6 @@
 $labels['folderactions'] = 'Hantera kataloger';
 $labels['compact'] = 'Packa';
 $labels['empty'] = 'Töm';
-$labels['purge'] = 'Rensa';
 $labels['quota'] = 'Diskutrymme';
 $labels['unknown'] = 'okänt';
 $labels['unlimited'] = 'obegränsat';
@@ -207,7 +206,33 @@
 $labels['name'] = 'Namn';
 $labels['firstname'] = 'Förnamn';
 $labels['surname'] = 'Efternamn';
+$labels['middlename'] = 'Mellannamn';
+$labels['nameprefix'] = 'Prefix';
+$labels['namesuffix'] = 'Suffix';
+$labels['nickname'] = 'Smeknamn';
+$labels['jobtitle'] = 'Titel';
+$labels['department'] = 'Avdelning';
+$labels['gender'] = 'Kön';
+$labels['maidenname'] = 'Flicknamn';
 $labels['email'] = 'E-post';
+$labels['phone'] = 'Telefon';
+$labels['address'] = 'Adress';
+$labels['street'] = 'Gata';
+$labels['locality'] = 'Ort';
+$labels['zipcode'] = 'Postnummer';
+$labels['region'] = 'Region';
+$labels['country'] = 'Land';
+$labels['birthday'] = 'Födelsedag';
+$labels['anniversary'] = 'Årsdag';
+$labels['website'] = 'Webbplats';
+$labels['instantmessenger'] = 'IM';
+$labels['notes'] = 'Anteckningar';
+$labels['male'] = 'Man';
+$labels['female'] = 'Kvinna';
+$labels['manager'] = 'Chef';
+$labels['assistant'] = 'Assistent';
+$labels['spouse'] = 'Make/Maka';
+$labels['addfield'] = 'Lägg till fält...';
 $labels['addcontact'] = 'Lägg till ny kontakt';
 $labels['editcontact'] = 'Ändra kontakt';
 $labels['contacts'] = 'Kontakter';
@@ -216,6 +241,9 @@
 $labels['cancel'] = 'Avbryt';
 $labels['save'] = 'Spara';
 $labels['delete'] = 'Ta bort';
+$labels['rename'] = 'Ändra namn';
+$labels['addphoto'] = 'Lägg till';
+$labels['replacephoto'] = 'Ersätt';
 $labels['newcontact'] = 'Ny kontakt';
 $labels['deletecontact'] = 'Ta bort vald kontakt';
 $labels['composeto'] = 'Nytt meddelande till vald kontakt';
@@ -323,7 +351,7 @@
 $labels['folder'] = 'Katalog';
 $labels['folders'] = 'Kataloger';
 $labels['foldername'] = 'Katalognamn';
-$labels['subscribed']  = 'Prenumererad';
+$labels['subscribed'] = 'Prenumererad';
 $labels['messagecount'] = 'Meddelanden';
 $labels['create'] = 'Skapa';
 $labels['createfolder'] = 'Ny katalog';
diff --git a/program/localization/sv_SE/messages.inc b/program/localization/sv_SE/messages.inc
index bb0d331..07e97f7 100644
--- a/program/localization/sv_SE/messages.inc
+++ b/program/localization/sv_SE/messages.inc
@@ -139,5 +139,6 @@
 $messages['nametoolong'] = 'Namnet är för långt';
 $messages['folderupdated'] = 'Katalog uppdaterad';
 $messages['foldercreated'] = 'Katalog skapad';
+$messages['invalidimageformat'] = 'Ogiltigt bildfilsformat';
 
 ?>
diff --git a/program/localization/zh_TW/labels.inc b/program/localization/zh_TW/labels.inc
index 886d3a3..45c706d 100644
--- a/program/localization/zh_TW/labels.inc
+++ b/program/localization/zh_TW/labels.inc
@@ -46,9 +46,6 @@
 $labels['priority'] = '優先順序';
 $labels['organization'] = '組織';
 $labels['readstatus'] = '讀信狀態';
-$labels['reply-to'] = '回覆至';
-$labels['mail-reply-to'] = '信件回覆至';
-$labels['mail-followup-to'] = '信件跟隨至';
 $labels['mailboxlist'] = '資料夾';
 $labels['messagesfromto'] = '郵件 $from 至 $to,共有 $count 封郵件';
 $labels['threadsfromto'] = '郵件串 $from 至 $to,共有 $count 個';
@@ -159,7 +156,6 @@
 $labels['folderactions'] = '資料夾動作...';
 $labels['compact'] = '壓縮';
 $labels['empty'] = '清空';
-$labels['purge'] = '清除';
 $labels['quota'] = '磁碟使用量';
 $labels['unknown'] = '未知';
 $labels['unlimited'] = '無限制';
@@ -210,15 +206,45 @@
 $labels['name'] = '顯示名稱';
 $labels['firstname'] = '名稱';
 $labels['surname'] = '姓氏';
+$labels['middlename'] = '中名';
+$labels['nameprefix'] = '名';
+$labels['namesuffix'] = '姓';
+$labels['nickname'] = '暱稱';
+$labels['jobtitle'] = '職位';
+$labels['department'] = '部門';
+$labels['gender'] = '性別';
+$labels['maidenname'] = '姓';
 $labels['email'] = '電子郵件';
+$labels['phone'] = '電話';
+$labels['address'] = '地址';
+$labels['street'] = '街道';
+$labels['locality'] = '城市';
+$labels['zipcode'] = '郵遞區號';
+$labels['region'] = '地區';
+$labels['country'] = '國家';
+$labels['birthday'] = '生日';
+$labels['anniversary'] = '周年纪念日';
+$labels['website'] = '網站';
+$labels['instantmessenger'] = '即時通訊';
+$labels['notes'] = '註解';
+$labels['male'] = '男';
+$labels['female'] = '女';
+$labels['manager'] = '經理';
+$labels['assistant'] = '助理';
+$labels['spouse'] = '配偶';
+$labels['addfield'] = '新增欄位...';
 $labels['addcontact'] = '新增聯絡人';
 $labels['editcontact'] = '編輯聯絡人';
 $labels['contacts'] = '聯絡人';
 $labels['contactproperties'] = '聯絡人資訊';
+$labels['personalinfo'] = '個人資訊';
 $labels['edit'] = '編輯';
 $labels['cancel'] = '取消';
 $labels['save'] = '儲存';
 $labels['delete'] = '刪除';
+$labels['rename'] = '重新命名';
+$labels['addphoto'] = '新增';
+$labels['replacephoto'] = '取代';
 $labels['newcontact'] = '建立新聯絡人資料';
 $labels['deletecontact'] = '刪除所選擇的聯絡人';
 $labels['composeto'] = '寄信至所選擇的聯絡人';
@@ -332,6 +358,13 @@
 $labels['createfolder'] = '建立新資料夾';
 $labels['managefolders'] = '管理資料夾';
 $labels['specialfolders'] = '預設資料夾設定';
+$labels['properties'] = '屬性';
+$labels['folderproperties'] = '資料夾屬性';
+$labels['parentfolder'] = '上一層資料夾';
+$labels['location'] = '位置';
+$labels['info'] = '資訊';
+$labels['getfoldersize'] = '點擊顯示資料夾大小';
+$labels['changesubscription'] = '點擊以改變訂閱';
 $labels['sortby'] = '排序';
 $labels['sortasc'] = '遞增排序';
 $labels['sortdesc'] = '遞減排序';
diff --git a/program/localization/zh_TW/messages.inc b/program/localization/zh_TW/messages.inc
index 68c543f..99816dc 100644
--- a/program/localization/zh_TW/messages.inc
+++ b/program/localization/zh_TW/messages.inc
@@ -26,6 +26,8 @@
 $messages['imaperror'] = '連線到 IMAP 伺服器失敗';
 $messages['servererror'] = '伺服器錯誤!';
 $messages['servererrormsg'] = '伺服器錯誤:$msg';
+$messages['errorreadonly'] = '動作無法完成。資料夾唯讀';
+$messages['errornoperm'] = '動作無法完成。權限不符';
 $messages['invalidrequest'] = '要求無效!未儲存任何資料。';
 $messages['nomessagesfound'] = '此郵件匣沒有任何郵件';
 $messages['loggedout'] = '你已成功地登出並結束工作階段了。再見!';
@@ -59,6 +61,8 @@
 $messages['purgefolderconfirm'] = '你確定要刪除這個資料夾裡面所有的郵件嗎?';
 $messages['folderdeleting'] = '刪除資料夾中...';
 $messages['foldermoving'] = '移動資料夾中...';
+$messages['foldersubscribing'] = '訂閱資料夾...';
+$messages['folderunsubscribing'] = '取消訂閱資料夾...';
 $messages['formincomplete'] = '這個表單有部分未填,請完整填寫';
 $messages['noemailwarning'] = '請輸入一個有效的電子郵件位址';
 $messages['nonamewarning'] = '請輸入名字';
@@ -78,6 +82,10 @@
 $messages['checking'] = '檢查中...';
 $messages['nospellerrors'] = '沒有找到任何拼字錯誤';
 $messages['folderdeleted'] = '資料夾已經成功地被刪除';
+$messages['foldersubscribed'] = '資料夾成功訂閱';
+$messages['folderunsubscribed'] = '資料夾成功取消訂閱';
+$messages['folderpurged'] = '資料夾成功清空';
+$messages['folderexpunged'] = '資料夾成功壓縮';
 $messages['deletedsuccessfully'] = '刪除成功';
 $messages['converting'] = '移除郵件格式中...';
 $messages['messageopenerror'] = '無法從伺服器載入郵件';
@@ -127,5 +135,10 @@
 $messages['messagecopied'] = '訊息成功複製';
 $messages['messagemarked'] = '訊息成功標示';
 $messages['autocompletechars'] = '輸入至少 $min 字元才能自動完成自動完成';
+$messages['namecannotbeempty'] = '名稱不可空白';
+$messages['nametoolong'] = '名稱太長';
+$messages['folderupdated'] = '資料夾成功更新';
+$messages['foldercreated'] = '資料夾成功建立';
+$messages['invalidimageformat'] = '圖片格式錯誤';
 
 ?>
diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc
index f074f18..1c70b89 100644
--- a/program/steps/addressbook/save.inc
+++ b/program/steps/addressbook/save.inc
@@ -121,6 +121,18 @@
 
 
   if ($insert_id) {
+    // add new contact to the specified group
+    if ($CONTACTS->group_id) {
+      $plugin = $RCMAIL->plugins->exec_hook('group_addmembers', array('group_id' => $CONTACTS->group_id, 'ids' => $insert_id, 'source' => $source));
+
+      if (!$plugin['abort']) {
+        if (($maxnum = $RCMAIL->config->get('max_group_members', 0)) && ($CONTACTS->count()->count + 1 > $maxnum))
+          $OUTPUT->show_message('maxgroupmembersreached', 'warning', array('max' => $maxnum));
+
+        $CONTACTS->add_to_group($gid, $plugin['ids']);
+      }
+    }
+    
     // add contact row or jump to the page where it should appear
     $CONTACTS->reset();
     $result = $CONTACTS->search($CONTACTS->primary_key, $insert_id);
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index abf1122..b62e8a8 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -273,7 +273,7 @@
       if (in_array($col, array('from', 'to', 'cc', 'replyto')))
         $cont = Q(rcmail_address_string($header->$col, 3), 'show');
       else if ($col=='subject') {
-        $cont = abbreviate_string(trim($IMAP->decode_header($header->$col)), 160);
+        $cont = trim($IMAP->decode_header($header->$col));
         if (!$cont) $cont = rcube_label('nosubject');
         $cont = Q($cont);
       }
@@ -665,7 +665,8 @@
 
   // trigger plugin hook
   $data = $RCMAIL->plugins->exec_hook('message_part_before',
-    array('type' => $part->ctype_secondary, 'body' => $part->body) + $p + array('safe' => false, 'plain' => false, 'inline_html' => true));
+    array('type' => $part->ctype_secondary, 'body' => $part->body, 'id' => $part->mime_id)
+        + $p + array('safe' => false, 'plain' => false, 'inline_html' => true));
 
   // convert html to text/plain
   if ($data['type'] == 'html' && $data['plain']) {
@@ -698,7 +699,8 @@
     $body = rcmail_plain_body($body, $part->ctype_parameters['format'] == 'flowed');
 
   // allow post-processing of the message body
-  $data = $RCMAIL->plugins->exec_hook('message_part_after', array('type' => $part->ctype_secondary, 'body' => $body) + $data);
+  $data = $RCMAIL->plugins->exec_hook('message_part_after',
+    array('type' => $part->ctype_secondary, 'body' => $body, 'id' => $part->mime_id) + $data);
 
   return $data['type'] == 'html' ? $data['body'] : html::tag('pre', array(), $data['body']);
 }
@@ -827,10 +829,10 @@
 
     case 'style':
       // decode all escaped entities and reduce to ascii strings
-      $stripped = preg_replace('/[^a-zA-Z\(:]/', '', rcmail_xss_entity_decode($content));
+      $stripped = preg_replace('/[^a-zA-Z\(:;]/', '', rcmail_xss_entity_decode($content));
 
       // now check for evil strings like expression, behavior or url()
-      if (!preg_match('/expression|behavior|url\(|import/', $stripped)) {
+      if (!preg_match('/expression|behavior|url\(|import[^a]/', $stripped)) {
         $out = html::tag('style', array('type' => 'text/css'), $content);
         break;
       }
@@ -940,16 +942,25 @@
     $table->add(array('class' => 'header '.$hkey), Q($row['value'], ($hkey == 'subject' ? 'strict' : 'show')));
   }
 
-  // all headers division
-  $table->add(array('colspan' => 2, 'class' => "more-headers show-headers", 'onclick' => "return ".JS_OBJECT_NAME.".command('load-headers','',this)"), '');
-  $table->add_row(array('id' => "all-headers"));
-  $table->add(array('colspan' => 2, 'class' => "all"), html::div(array('id' => 'headers-source'), ''));
+  return $table->show($attrib);
+}
+
+
+/**
+ * return block to show full message headers
+ */
+function rcmail_message_full_headers($attrib, $headers=NULL)
+{
+  global $OUTPUT;
+  
+  $html = html::div(array('class' => "more-headers show-headers", 'onclick' => "return ".JS_OBJECT_NAME.".command('load-headers','',this)"), '');
+  $html .= html::div(array('id' => "all-headers", 'class' => "all", 'style' => 'display:none'), html::div(array('id' => 'headers-source'), ''));
   
   $OUTPUT->add_gui_object('all_headers_row', 'all-headers');
   $OUTPUT->add_gui_object('all_headers_box', 'headers-source');
-
-  return $table->show($attrib);
-  }
+  
+  return html::div($attrib, $html);
+}
 
 
 /**
@@ -1749,6 +1760,7 @@
   'quotadisplay' => 'rcmail_quota_display',
   'mailboxname' => 'rcmail_mailbox_name_display',
   'messageheaders' => 'rcmail_message_headers',
+  'messagefullheaders' => 'rcmail_message_full_headers',
   'messagebody' => 'rcmail_message_body',
   'messagecontentframe' => 'rcmail_messagecontent_frame',
   'messagepartframe' => 'rcmail_message_part_frame',
diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc
index 7ae4fb3..3494ba9 100644
--- a/program/steps/settings/folders.inc
+++ b/program/steps/settings/folders.inc
@@ -42,8 +42,16 @@
             }
         }
 
-        if ($result)
+        if ($result) {
+            // Handle subscription of protected folder (#1487656)
+            if ($CONFIG['protect_default_folders'] == true
+                && in_array($mbox, $CONFIG['default_imap_folders'])
+            ) {
+                $OUTPUT->command('disable_subscription', $mbox);
+            }
+
             $OUTPUT->show_message('foldersubscribed', 'confirmation');
+        }
         else
             rcmail_display_server_error('errorsaving');
     }
@@ -294,13 +302,16 @@
             $noselect = in_array('\\Noselect', $opts);
         }
 
+        $disabled = (($protected && $subscribed) || $noselect);
+
         $table->add_row(array('id' => 'rcmrow'.$idx, 'class' => join(' ', $classes)));
     
         $table->add('name', $display_folder);
         $table->add('subscribed', $checkbox_subscribe->show(($subscribed ? $folder_utf8 : ''),
-            array('value' => $folder_utf8, 'disabled' => ($protected || $noselect) ? 'disabled' : '')));
+            array('value' => $folder_utf8, 'disabled' => $disabled ? 'disabled' : '')));
 
-        $a_js_folders['rcmrow'.$idx] = array($folder_utf8, Q($display_folder), $protected || $folder['virtual']);
+        $a_js_folders['rcmrow'.$idx] = array($folder_utf8,
+            Q($display_folder), $protected || $folder['virtual']);
     }
 
     $RCMAIL->plugins->exec_hook('folders_list', array('table' => $table));
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index fb48e92..3a3d690 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -756,7 +756,6 @@
   return $skins;
 }
 
-
 // register UI objects
 $OUTPUT->add_handlers(array(
   'prefsframe' => 'rcmail_preferences_frame',
diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc
index 265c37e..feeb183 100644
--- a/program/steps/settings/save_prefs.inc
+++ b/program/steps/settings/save_prefs.inc
@@ -129,6 +129,8 @@
     if (isset($CONFIG['max_pagesize']) && ($a_user_prefs['pagesize'] > $CONFIG['max_pagesize']))
       $a_user_prefs['pagesize'] = (int) $CONFIG['max_pagesize'];
 
+    $a_user_prefs['timezone'] = $_SESSION['timezone'] = (string) $a_user_prefs['timezone'];
+
   break;
   case 'mailbox':
 
diff --git a/skins/default/common.css b/skins/default/common.css
index e052552..4a45c60 100644
--- a/skins/default/common.css
+++ b/skins/default/common.css
@@ -828,7 +828,7 @@
 span.tablink a,
 span.tablink-selected a
 {
-  display: block;
+  display: inline-block;
   padding: 5px 10px 0 5px;
   margin-left: 5px;
   height: 23px;
diff --git a/skins/default/ie6hacks.css b/skins/default/ie6hacks.css
index 1b8135d..aef4f17 100644
--- a/skins/default/ie6hacks.css
+++ b/skins/default/ie6hacks.css
@@ -116,7 +116,7 @@
   height: expression((parseInt(this.parentNode.offsetHeight)-23-parseInt(this.style.top?this.style.top:21))+'px');
 }
 
-#directorylistbox
+#directorylistbox, #folder-manager
 {
   height: expression((parseInt(document.documentElement.clientHeight)-105)+'px');
 }
diff --git a/skins/default/iehacks.css b/skins/default/iehacks.css
index 29ab8cb..e9b51a7 100644
--- a/skins/default/iehacks.css
+++ b/skins/default/iehacks.css
@@ -236,3 +236,8 @@
 {
   margin-top: 2px;
 }
+
+#directorylistbox div
+{
+  min-height: 0;
+}
diff --git a/skins/default/mail.css b/skins/default/mail.css
index 7bb308c..b5dfb80 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -383,6 +383,11 @@
   border-bottom: 1px solid #EBEBEB;
 }
 
+#mailboxlist li ul li:last-child
+{
+  border-bottom: none;
+}
+
 #mailboxlist li div
 {
   position: absolute;
@@ -1007,17 +1012,12 @@
   background-color: #EBEBEB;
 }
 
+#messagebody #full-headers,
 #messagebody table.headers-table
 {
   width: auto;
   margin: 6px 8px;
   background-color: #F4F4F4;
-  border: 1px solid #ccc;
-}
-
-#messageframe table.headers-table
-{
-  border-bottom: 1px solid #ccc;
 }
 
 table.headers-table tr td
@@ -1033,7 +1033,7 @@
   font-weight: bold;
   text-align: right;
   white-space: nowrap;
-  padding: 0 4px;
+  padding: 0 4px 0 8px;
 }
 
 table.headers-table tr td.header
@@ -1046,25 +1046,6 @@
   font-weight: bold;
 }
 
-table.headers-table tr td.all
-{
-  width: 100%;
-  color: #666666;
-  text-align: left;
-  padding-right: 10px;
-  text-align: center;
-  padding: 2px 6px 4px 6px;
-  border-bottom: 0;
-}
-
-table.headers-table tr td.more-headers
-{
-  cursor: pointer;
-  width: 100%;
-  height: 8px;
-  border-bottom: 0;
-}
-
 #attachment-list
 {
   margin: 0;
@@ -1073,6 +1054,16 @@
   list-style-image: none;
   list-style-type: none;
   background: url(images/icons/attachment.png) 4px 2px no-repeat #DFDFDF;
+}
+
+#messageframe #attachment-list
+{
+  border-bottom: 1px solid #ccc;
+}
+
+.messageheaderbox #attachment-list
+{
+  border-top: 1px solid #ccc;
 }
 
 #attachment-list:after
@@ -1210,31 +1201,45 @@
   border: 0;
 }
 
-td.show-headers
+#full-headers
+{
+  color: #666666;
+  text-align: center;
+  padding: 2px 6px;
+  border-bottom: 1px solid #ccc;
+  background-color: #EBEBEB;
+}
+
+.messageheaderbox #full-headers
+{
+  border-bottom: 0;
+}
+
+div.more-headers
+{
+  cursor: pointer;
+  height: 8px;
+  border-bottom: 0;
+}
+
+div.show-headers
 {
   background: url(images/icons/down_small.gif) no-repeat center;
 }
 
-td.hide-headers
+div.hide-headers
 {
   background: url(images/icons/up_small.gif) no-repeat center;
 }
 
-#all-headers
-{
-  height: 150px;
-  display: none;
-}
-
 #headers-source
 {
-  margin: 0 5px;
+  margin: 0 0 2px 0;
   padding: 0.5em;
   height: 145px;
   background: white;
   overflow: auto;
   font-size: 11px;
-  white-space: nowrap;
   border: 1px solid #999999;
   display: none;
   text-align: left;
diff --git a/skins/default/templates/addressbook.html b/skins/default/templates/addressbook.html
index 668b309..d486f2f 100644
--- a/skins/default/templates/addressbook.html
+++ b/skins/default/templates/addressbook.html
@@ -40,6 +40,7 @@
   <roundcube:object name="directorylist" id="directorylist" />
   <roundcube:object name="groupslist" id="contactgroupslist" />
 </div>
+<!--[if lte IE 7]><div></div><![endif]-->
 <div class="boxfooter">
   <roundcube:button command="group-create" type="link" title="newcontactgroup" class="buttonPas addgroup" classAct="button addgroup" content=" " />
   <roundcube:button name="groupmenulink" id="groupmenulink" type="link" title="groupactions" class="button groupactions" onclick="rcmail_ui.show_popup('groupmenu');return false" content=" " />
diff --git a/skins/default/templates/message.html b/skins/default/templates/message.html
index 8e8af93..d59210c 100644
--- a/skins/default/templates/message.html
+++ b/skins/default/templates/message.html
@@ -50,6 +50,7 @@
 <div id="messageframe">
 <div class="boxlistcontent" style="top:0; overflow-x:auto">
 <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" />
+<roundcube:object name="messageFullHeaders" id="full-headers" />
 <roundcube:object name="messageAttachments" id="attachment-list" />
 
 <roundcube:object name="blockedObjects" id="remote-objects-message" />
diff --git a/skins/default/templates/messagepreview.html b/skins/default/templates/messagepreview.html
index fbece6b..bfd7d7d 100644
--- a/skins/default/templates/messagepreview.html
+++ b/skins/default/templates/messagepreview.html
@@ -9,6 +9,7 @@
 <div class="messageheaderbox">
 <roundcube:button command="permaurl" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="messageviewlink" target="_blank" />
 <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" />
+<roundcube:object name="messageFullHeaders" id="full-headers" />
 <roundcube:object name="messageAttachments" id="attachment-list" />
 </div>
 

--
Gitblit v1.9.1