]> git.donarmstrong.com Git - roundcube.git/commitdiff
Imported Upstream version 0.5.3+dfsg
authorJérémy Bobbio <lunar@debian.org>
Sat, 18 Jun 2011 19:43:07 +0000 (21:43 +0200)
committerJérémy Bobbio <lunar@debian.org>
Sat, 18 Jun 2011 19:43:07 +0000 (21:43 +0200)
30 files changed:
CHANGELOG
INSTALL.orig [new file with mode: 0644]
index.php
installer/config.php
plugins/new_user_dialog/new_user_dialog.php
plugins/new_user_dialog/package.xml
program/include/iniset.php
program/include/main.inc
program/include/rcmail.php
program/include/rcmail.php.orig
program/include/rcube_imap.php
program/include/rcube_imap_generic.php
program/include/rcube_shared.inc
program/include/rcube_string_replacer.php
program/include/rcube_template.php
program/js/app.js
program/js/app.js.src
program/js/common.js
program/js/common.js.src
program/js/list.js
program/js/list.js.src
program/lib/html2text.php
program/lib/washtml.php
program/localization/pl_PL/labels.inc
program/steps/mail/func.inc
program/steps/settings/save_identity.inc
program/steps/utils/error.inc
skins/default/ie6hacks.css
skins/default/iehacks.css
skins/default/mail.css

index a4cd90bf83636c325d80b5d0586766406667d4b8..0e163fd79ce478f54c9ace7b38ca34a90c61f830 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,18 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix identities "reply-to" and "bcc" fields have a bogus value when left empty (#1487943)
+- Fix issue which cases IMAP disconnection when encrypt() method was used (#1487900)
+- Fix some CSS issues in Settings for Internet Explorer
+- Fixed handling of folder with name "0" in folder selector
+- Fix bug where messages were deleted instead moved to trash folder after Shift key was used (#1487902)
+- Fix relative URLs handling according to a <base> in HTML (#1487889)
+- Fix handling of top-level domains with more than 5 chars or unicode chars (#1487883)
+- Fix usage of non-standard HTTP error codes (#1487797)
+- Fix PHP warning on mistaken in_array() usage (#1487901)
+
+RELEASE 0.5.2
+-------------
 - TinyMCE 3.4.2 now compatible with IE9
 - PEAR::Net_SMTP 1.5.2, fixed timeout issue (#1487843)
 - Fix bug where template name without plugin prefix was used in render_page hook
diff --git a/INSTALL.orig b/INSTALL.orig
new file mode 100644 (file)
index 0000000..49aae92
--- /dev/null
@@ -0,0 +1,231 @@
+INTRODUCTION
+============
+
+This file describes the basic steps to install Roundcube Webmail on your
+web server. For additional information, please also consult the project's
+wiki page at http://trac.roundcube.net/wiki
+
+
+REQUIREMENTS
+============
+
+* The Apache or Lighttpd Webserver
+* .htaccess support allowing overrides for DirectoryIndex
+* PHP Version 5.2.1 or greater including
+   - PCRE, DOM, JSON, XML, Session, Sockets (required)
+   - libiconv (recommended)
+   - mbstring, fileinfo, mcrypt (optional)
+* PEAR packages distributed with Roundcube or external:
+   - MDB2 2.5.0 or newer
+   - Mail_Mime 1.8.1 or newer
+   - Net_SMTP 1.4.2 or newer
+   - Auth_SASL 1.0.3 or newer
+* php.ini options (see .htaccess file):
+   - error_reporting E_ALL & ~E_NOTICE (or lower)
+   - memory_limit > 16MB (increase as suitable to support large attachments)
+   - file_uploads enabled (for attachment upload features)
+   - session.auto_start disabled
+   - zend.ze1_compatibility_mode disabled
+   - suhosin.session.encrypt disabled
+   - mbstring.func_overload disabled
+* PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker
+* A MySQL (4.0.8 or newer), PostgreSQL, MSSQL database engine
+  or the SQLite extension for PHP
+* One of the above databases with permission to create tables
+* An SMTP server (recommended) or PHP configured for mail delivery
+
+
+INSTALLATION
+============
+
+1. Decompress and put this folder somewhere inside your document root
+2. Make sure that the following directories (and the files within)
+   are writable by the webserver
+   - /temp
+   - /logs
+3. Create a new database and a database user for Roundcube (see DATABASE SETUP)
+4. Point your browser to http://url-to-roundcube/installer/
+5. Follow the instructions of the install script (or see MANUAL CONFIGURATION)
+6. After creating and testing the configuration, remove the installer directory
+7. Done!
+
+
+CONFIGURATION HINTS
+===================
+
+Roundcube writes internal errors to the 'errors' log file located in the logs
+directory which can be configured in config/main.inc.php. If you want ordinary
+PHP errors to be logged there as well, enable the 'php_value error_log' line
+in the .htaccess file and set the path to the log file accordingly.
+
+By default the session_path settings of PHP are not modified by Roundcube.
+However if you want to limit the session cookies to the directory where
+Roundcube resides you can uncomment and configure the according line
+in the .htaccess file.
+
+
+DATABASE SETUP
+==============
+
+Note: Database for Roundcube must use UTF-8 character set.
+
+* MySQL
+-------
+Setting up the mysql database can be done by creating an empty database,
+importing the table layout and granting the proper permissions to the
+roundcube user. Here is an example of that procedure:
+
+# mysql
+> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
+    IDENTIFIED BY 'password';
+> quit
+
+# mysql roundcubemail < SQL/mysql.initial.sql
+
+Note 1: 'password' is the master password for the roundcube user. It is strongly
+recommended you replace this with a more secure password. Please keep in
+mind: You need to specify this password later in 'config/db.inc.php'.
+
+
+* SQLite
+--------
+You need sqlite 2 (preferably 2.8) to setup the sqlite db 
+(sqlite 3.x also doesn't work at the moment). Here is
+an example how you can setup the sqlite.db for roundcube:
+
+# sqlite -init SQL/sqlite.initial.sql sqlite.db
+Loading resources from SQL/sqlite.initial.sql
+SQLite version 2.8.16
+Enter ".help" for instructions
+sqlite> .exit
+# chmod o+rw sqlite.db
+
+Make sure your configuration points to the sqlite.db file and that the
+webserver can write to the file and the directory containing the file.
+
+
+* PostgreSQL
+------------
+To use Roundcube with PostgreSQL support you have to follow these
+simple steps, which have to be done as the postgres system user (or
+which ever is the database superuser):
+
+$ createuser roundcube
+$ createdb -O roundcube -E UNICODE roundcubemail
+$ psql roundcubemail
+
+roundcubemail =# ALTER USER roundcube WITH PASSWORD 'the_new_password';
+roundcubemail =# \c - roundcube
+roundcubemail => \i SQL/postgres.initial.sql
+
+All this has been tested with PostgreSQL 8.x and 7.4.x. Older
+versions don't have a -O option for the createdb, so if you are
+using that version you'll have to change ownership of the DB later.
+
+
+Database cleaning
+-----------------
+Do keep your database slick and clean we recommend to periodically execute
+bin/cleandb.sh which finally removes all records that are marked as deleted.
+Best solution is to install a cronjob running this script daily.
+
+
+
+MANUAL CONFIGURATION
+====================
+
+First of all, rename the files config/*.inc.php.dist to config/*.inc.php.
+You can then change these files according to your environment and your needs.
+Details about the config parameters can be found in the config files.
+See http://trac.roundcube.net/wiki/Howto_Install for even more guidance.
+
+You can also modify the default .htaccess file. This is necessary to
+increase the allowed size of file attachments, for example:
+       php_value       upload_max_filesize     2M
+
+
+UPGRADING
+=========
+
+If you already have a previous version of Roundcube installed,
+please refer to the instructions in UPGRADING guide.
+
+
+OPTIMISING
+==========
+
+There are two forms of optimisation here, compression and caching, both aimed
+at increasing an end user's experience using Roundcube Webmail. Compression
+allows the static web pages to be delivered with less bandwidth. The index.php
+of Roundcube Webmail already enables compression on its output. The settings
+below allow compression to occur for all static files. Caching sets HTTP 
+response headers that enable a user's web client to understand what is static
+and how to cache it.
+
+The caching directives used are:
+ * Etags - sets at tag so the client can request is the page has changed
+ * Cache-control - defines the age of the page and that the page is 'public'
+   This enables clients to cache javascript files that don't have private 
+   information between sessions even if using HTTPS. It also allows proxies
+   to share the same cached page between users.
+ * Expires - provides another hint to increase the lifetime of static pages.
+
+For more information refer to RFC 2616.
+
+Side effects:
+-------------
+These directives are designed for production use. If you are using this in
+a development environment you may get horribly confused if your webclient
+is caching stuff that you changed on the server. Disabling the expires 
+parts below should save you some grief.
+
+If you are changing the skins, it is recommended that you copy content to 
+a different directory apart from 'default'.
+
+Apache:
+-------
+To enable these features in apache the following modules need to be enabled:
+ * mod_deflate
+ * mod_expires
+ * mod_headers
+
+The optimisation is already included in the .htaccess file in the top 
+directory of your installation.
+
+If you are using Apache version 2.2.9 and later, in the .htaccess file
+change the 'append' word to 'merge' for a more correct response. Keeping
+as 'append' shouldn't cause any problems though changing to merge will 
+eliminate the possibility of duplicate 'public' headers in Cache-control.
+
+Lighttpd:
+---------
+With Lightty the addition of Expire: tags by mod_expire is incompatible with
+the addition of "Cache-control: public". Using Cache-control 'public' is 
+used below as it is assumed to give a better caching result.
+
+Enable modules in server.modules:
+    "mod_setenv"
+    "mod_compress"
+
+Mod_compress is a server side cache of compressed files to improve its performance.
+
+$HTTP["host"] == "www.example.com" {
+
+    static-file.etags = "enable"
+    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Etag.use-mtimeDetails
+    etag.use-mtime = "enable"
+
+    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSetEnv
+    $HTTP["url"] =~ "^/roundcubemail/(plugins|skins|program)" {
+        setenv.add-response-header  = ( "Cache-Control" => "public, max-age=2592000")
+    }
+
+    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCompress
+    # set compress.cache-dir to somewhere outside the docroot.
+    compress.cache-dir   = var.statedir + "/cache/compress"
+
+    compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png")
+}
+
+
index ff9bc8ec0c1aa254ca567eac31ed954ba7f45acf..f73e4f87fb64e83999e974745f675881efb20388 100644 (file)
--- a/index.php
+++ b/index.php
@@ -2,7 +2,7 @@
 /*
  +-------------------------------------------------------------------------+
  | Roundcube Webmail IMAP Client                                           |
- | Version 0.5.2                                                           |
+ | Version 0.5.3                                                           |
  |                                                                         |
  | Copyright (C) 2005-2011, Roundcube Dev. - Switzerland                   |
  |                                                                         |
@@ -23,7 +23,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                          |
  +-------------------------------------------------------------------------+
 
- $Id: index.php 4674 2011-04-20 09:03:08Z thomasb $
+ $Id: index.php 4831 2011-06-02 13:36:57Z thomasb $
 
 */
 
index 5250782f9bd85d35c8913e830a2b4424a2d59223..6b524079fadec44371eb57cd8f8db649bcebaa54 100644 (file)
@@ -81,7 +81,7 @@ echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1)
 ?>
 <label for="cfgipcheck">Check client IP in session authorization</label><br />
 
-<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changeing IPs.</p>
+<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changing IPs.</p>
 </dd>
 
 <dt class="propname">des_key</dt>
@@ -93,7 +93,7 @@ echo $input_deskey->show($RCI->getprop('des_key'));
 
 ?>
 <div>This key is used to encrypt the users imap password before storing in the session record</div>
-<p class="hint">It's a random generated string to ensure that every installation has it's own key.
+<p class="hint">It's a random generated string to ensure that every installation has its own key.
 If you enter it manually please provide a string of exactly 24 chars.</p>
 </dd>
 
index 96cd0da23768965e7da171915718e41cd0411305..c537b9b86a1a76fe84198fe3b2d37bd22bbb095b 100644 (file)
@@ -62,7 +62,7 @@ class new_user_dialog extends rcube_plugin
       $table->add(null, html::tag('input', array(
         'type' => 'text',
         'name' => '_email',
-        'value' => idn_to_utf8($identity['email']),
+        'value' => rcube_idn_to_utf8($identity['email']),
         'disabled' => ($identities_level == 1 || $identities_level == 3)
       )));
 
@@ -113,7 +113,7 @@ class new_user_dialog extends rcube_plugin
     if ($identities_level == 1 || $identities_level == 3)
       $save_data['email'] = $identity['email'];
     else
-      $save_data['email'] = idn_to_ascii($save_data['email']);
+      $save_data['email'] = rcube_idn_to_ascii($save_data['email']);
 
     // save data if not empty
     if (!empty($save_data['name']) && !empty($save_data['email'])) {
index 198a9fadb46812ff246a3c67edd7a7325eeee71c..52874701fdcfec4f202522771189db492a7b72ce 100644 (file)
                <email>roundcube@gmail.com</email>
                <active>yes</active>
        </lead>
-       <date>2010-12-02</date>
-       <time>12:00:00</time>
+       <date>2011-05-12</date>
+       <time>10:00</time>
        <version>
-               <release>1.3</release>
+               <release>1.4</release>
                <api>1.0</api>
        </version>
        <stability>
@@ -25,8 +25,7 @@
        </stability>
        <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license>
        <notes>
-- Added setting of focus on name input
-- Added gl_ES translation
+- Fixed IDNA encoding/decoding of e-mail addresses (#1487909)
     </notes>
        <contents>
                <dir baseinstalldir="/" name="/">
 - Fix possible error on form submission (#1486103)
             </notes>
         </release>
+        <release>
+               <date>2010-12-02</date>
+               <time>12:00:00</time>
+               <version>
+                       <release>1.3</release>
+                       <api>1.0</api>
+               </version>
+               <stability>
+                       <release>stable</release>
+                       <api>stable</api>
+               </stability>
+               <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license>
+               <notes>
+- Added setting of focus on name input
+- Added gl_ES translation
+            </notes>
+        </release>
     </changelog>
 </package>
index 92a2d90c0b848655751868a98b9da553a8a7e5a5..fea22d27fc50270e62ace4135b1ec50568d17967 100755 (executable)
@@ -16,7 +16,7 @@
  |         Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: iniset.php 4674 2011-04-20 09:03:08Z thomasb $
+ $Id: iniset.php 4831 2011-06-02 13:36:57Z thomasb $
 
 */
 
@@ -36,7 +36,7 @@ foreach ($crit_opts as $optname => $optval) {
 }
 
 // application constants
-define('RCMAIL_VERSION', '0.5.2');
+define('RCMAIL_VERSION', '0.5.3');
 define('RCMAIL_CHARSET', 'UTF-8');
 define('JS_OBJECT_NAME', 'rcmail');
 define('RCMAIL_START', microtime(true));
index 76db5670aa11e786cffe730a6fa08854ad81b421..87a04157689fb88dbab49f5417de5a44f8e80901 100644 (file)
@@ -15,7 +15,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: main.inc 4568 2011-02-24 12:12:09Z alec $
+ $Id: main.inc 4830 2011-06-02 12:36:32Z alec $
 
 */
 
@@ -1286,12 +1286,12 @@ function rcmail_mailbox_list($attrib)
 {
   global $RCMAIL;
   static $a_mailboxes;
-  
+
   $attrib += array('maxlength' => 100, 'realnames' => false);
 
   // add some labels to client
   $RCMAIL->output->add_label('purgefolderconfirm', 'deletemessagesconfirm');
-  
+
   $type = $attrib['type'] ? $attrib['type'] : 'ul';
   unset($attrib['type']);
 
@@ -1300,7 +1300,7 @@ function rcmail_mailbox_list($attrib)
 
   // get mailbox list
   $mbox_name = $RCMAIL->imap->get_mailbox_name();
-  
+
   // build the folders tree
   if (empty($a_mailboxes)) {
     // get mailbox list
@@ -1315,20 +1315,20 @@ function rcmail_mailbox_list($attrib)
   // allow plugins to alter the folder tree or to localize folder names
   $hook = $RCMAIL->plugins->exec_hook('render_mailboxlist', array('list' => $a_mailboxes, 'delimiter' => $delimiter));
 
-  if ($type=='select') {
+  if ($type == 'select') {
     $select = new html_select($attrib);
-    
+
     // add no-selection option
     if ($attrib['noselection'])
-      $select->add(rcube_label($attrib['noselection']), '0');
-    
+      $select->add(rcube_label($attrib['noselection']), '');
+
     rcmail_render_folder_tree_select($hook['list'], $mbox_name, $attrib['maxlength'], $select, $attrib['realnames']);
     $out = $select->show();
   }
   else {
     $js_mailboxlist = array();
     $out = html::tag('ul', $attrib, rcmail_render_folder_tree_html($hook['list'], $mbox_name, $js_mailboxlist, $attrib), html::$common_attrib);
-    
+
     $RCMAIL->output->add_gui_object('mailboxlist', $attrib['id']);
     $RCMAIL->output->set_env('mailboxes', $js_mailboxlist);
     $RCMAIL->output->set_env('collapsed_folders', $RCMAIL->config->get('collapsed_folders'));
@@ -1347,7 +1347,7 @@ function rcmail_mailbox_list($attrib)
 function rcmail_mailbox_select($p = array())
 {
   global $RCMAIL;
-  
+
   $p += array('maxlength' => 100, 'realnames' => false);
   $a_mailboxes = array();
 
@@ -1420,7 +1420,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='')
   if (strlen($subFolders))
     rcmail_build_folder_tree($arrFolders[$currentFolder]['folders'], $subFolders, $delm, $path.$delm);
 }
-  
+
 
 /**
  * Return html for a structured list &lt;ul&gt; for the mailbox tree
@@ -1430,7 +1430,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='')
 function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, &$jslist, $attrib, $nestLevel=0)
 {
   global $RCMAIL, $CONFIG;
-  
+
   $maxlength = intval($attrib['maxlength']);
   $realnames = (bool)$attrib['realnames'];
   $msgcounts = $RCMAIL->imap->get_cache('messagecount');
@@ -1473,15 +1473,15 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, &$jslist, $at
       $classes[] = 'inbox';
     else
       $classes[] = '_'.asciiwords($folder_class ? $folder_class : strtolower($folder['id']), true);
-      
+
     $classes[] = $zebra_class;
-    
+
     if ($folder['id'] == $mbox_name)
       $classes[] = 'selected';
 
     $collapsed = preg_match('/&'.rawurlencode($folder['id']).'&/', $RCMAIL->config->get('collapsed_folders'));
     $unread = $msgcounts ? intval($msgcounts[$folder['id']]['UNSEEN']) : 0;
-    
+
     if ($folder['virtual'])
       $classes[] = 'virtual';
     else if ($unread)
@@ -1505,9 +1505,9 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, &$jslist, $at
         'style' => "position:absolute",
         'onclick' => sprintf("%s.command('collapse-folder', '%s')", JS_OBJECT_NAME, $js_name)
       ), '&nbsp;') : ''));
-    
+
     $jslist[$folder_id] = array('id' => $folder['id'], 'name' => $foldername, 'virtual' => $folder['virtual']);
-    
+
     if (!empty($folder['folders'])) {
       $out .= html::tag('ul', array('style' => ($collapsed ? "display:none;" : null)),
         rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $jslist, $attrib, $nestLevel+1));
@@ -1527,32 +1527,28 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, &$jslist, $at
  * @return string
  */
 function rcmail_render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, &$select, $realnames=false, $nestLevel=0)
-  {
-  $idx = 0;
+{
   $out = '';
-  foreach ($arrFolders as $key=>$folder)
-    {
+
+  foreach ($arrFolders as $key=>$folder) {
     if (!$realnames && ($folder_class = rcmail_folder_classname($folder['id'])))
       $foldername = rcube_label($folder_class);
-    else
-      {
+    else {
       $foldername = $folder['name'];
-      
+
       // shorten the folder name to a given length
       if ($maxlength && $maxlength>1)
         $foldername = abbreviate_string($foldername, $maxlength);
-      }
+    }
 
     $select->add(str_repeat('&nbsp;', $nestLevel*4) . $foldername, $folder['id']);
 
     if (!empty($folder['folders']))
       $out .= rcmail_render_folder_tree_select($folder['folders'], $mbox_name, $maxlength, $select, $realnames, $nestLevel+1);
-
-    $idx++;
-    }
+  }
 
   return $out;
-  }
+}
 
 
 /**
@@ -1917,6 +1913,10 @@ function rcube_idn_convert($input, $is_utf=false)
 
   $domain = $is_utf ? idn_to_ascii($domain) : idn_to_utf8($domain);
 
+  if ($domain === false) {
+    return '';
+  }
+
   return $at ? $user . '@' . $domain : $domain;
 }
 
index 4aa95a0ded775d39a0aae422165e700fbddc8e9d..47144b64fc0f51681820972170ceb8da047b225d 100644 (file)
@@ -15,7 +15,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: rcmail.php 4626 2011-03-31 12:32:44Z alec $
+ $Id: rcmail.php 4779 2011-05-17 15:35:14Z alec $
 
 */
 
@@ -1078,6 +1078,9 @@ class rcmail
       if (is_object($book))
         $book->close();
 
+    if (is_object($this->imap))
+      $this->imap->close();
+
     // before closing the database connection, write session data
     if ($_SERVER['REMOTE_ADDR'])
       session_write_close();
@@ -1193,9 +1196,6 @@ class rcmail
       }
     }
 
-    if (is_object($this->imap))
-      $this->imap->close();
-
     return $base64 ? base64_encode($cipher) : $cipher;
   }
 
index 9613dba5ff246c40f2cec70c7af64117d6a3a75b..9ebfc6727f64a31b23981b4416ca80f521f74856 100644 (file)
@@ -15,7 +15,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: rcmail.php 4626 2011-03-31 12:32:44Z alec $
+ $Id: rcmail.php 4779 2011-05-17 15:35:14Z alec $
 
 */
 
@@ -1078,6 +1078,9 @@ class rcmail
       if (is_object($book))
         $book->close();
 
+    if (is_object($this->imap))
+      $this->imap->close();
+
     // before closing the database connection, write session data
     if ($_SERVER['REMOTE_ADDR'])
       session_write_close();
@@ -1193,9 +1196,6 @@ class rcmail
       }
     }
 
-    if (is_object($this->imap))
-      $this->imap->close();
-
     return $base64 ? base64_encode($cipher) : $cipher;
   }
 
index 9a09180989a7a8d94ef8d84dd0d3d40a6cfcae3f..c27be0ccbf169b2eedb9daf96d43ebe3acb873de 100644 (file)
@@ -16,7 +16,7 @@
  | Author: Aleksander Machniak <alec@alec.pl>                            |
  +-----------------------------------------------------------------------+
 
- $Id: rcube_imap.php 4643 2011-04-11 12:24:00Z alec $
+ $Id: rcube_imap.php 4763 2011-05-13 17:31:09Z alec $
 
 */
 
@@ -3564,7 +3564,7 @@ class rcube_imap
             return $this->conn->setMetadata($mailbox, $entries);
         }
         else if ($this->get_capability('ANNOTATEMORE') || $this->get_capability('ANNOTATEMORE2')) {
-            foreach ($entries as $entry => $value) {
+            foreach ((array)$entries as $entry => $value) {
                 list($ent, $attr) = $this->md2annotate($entry);
                 $entries[$entry] = array($ent, $attr, $value);
             }
@@ -3597,7 +3597,7 @@ class rcube_imap
             return $this->conn->deleteMetadata($mailbox, $entries);
         }
         else if ($this->get_capability('ANNOTATEMORE') || $this->get_capability('ANNOTATEMORE2')) {
-            foreach ($entries as $idx => $entry) {
+            foreach ((array)$entries as $idx => $entry) {
                 list($ent, $attr) = $this->md2annotate($entry);
                 $entries[$idx] = array($ent, $attr, NULL);
             }
@@ -3626,7 +3626,7 @@ class rcube_imap
             $mailbox = $this->mod_mailbox($mailbox);
 
         if ($this->get_capability('METADATA') || 
-            !strlen(($mailbox) && $this->get_capability('METADATA-SERVER'))
+            (!strlen($mailbox) && $this->get_capability('METADATA-SERVER'))
         ) {
             return $this->conn->getMetadata($mailbox, $entries, $options);
         }
@@ -3635,7 +3635,7 @@ class rcube_imap
             $res     = array();
 
             // Convert entry names
-            foreach ($entries as $entry) {
+            foreach ((array)$entries as $entry) {
                 list($ent, $attr) = $this->md2annotate($entry);
                 $queries[$attr][] = $ent;
             }
@@ -3656,11 +3656,11 @@ class rcube_imap
      * Converts the METADATA extension entry name into the correct
      * entry-attrib names for older ANNOTATEMORE version.
      *
-     * @param string Entry name
+     * @param string $entry Entry name
      *
      * @return array Entry-attribute list, NULL if not supported (?)
      */
-    private function md2annotate($name)
+    private function md2annotate($entry)
     {
         if (substr($entry, 0, 7) == '/shared') {
             return array(substr($entry, 7), 'value.shared');
index e2ee342f82603d8da0769a8697df6fa3ed8b9daf..324f94dbb9a56eecfba2037cf95953c37d73c0b6 100644 (file)
@@ -21,7 +21,7 @@
  | Author: Ryo Chijiiwa <Ryo@IlohaMail.org>                              |
  +-----------------------------------------------------------------------+
 
- $Id: rcube_imap_generic.php 4643 2011-04-11 12:24:00Z alec $
+ $Id: rcube_imap_generic.php 4729 2011-05-04 18:53:11Z alec $
 
 */
 
@@ -777,13 +777,6 @@ class rcube_imap_generic
                 // Now we're secure, capabilities need to be reread
                 $this->clearCapability();
             }
-
-            // Use best (for security) supported authentication method
-            foreach (array('DIGEST-MD5', 'CRAM-MD5', 'CRAM_MD5', 'PLAIN', 'LOGIN') as $auth_method) {
-                if (in_array($auth_method, $auth_methods)) {
-                    break;
-                }
-            }
         }
 
         // Send ID info
@@ -809,13 +802,13 @@ class rcube_imap_generic
             else if (!$login_disabled) {
                 $auth_methods[] = 'LOGIN';
             }
-\r
-            // Use best (for security) supported authentication method\r
-            foreach (array('DIGEST-MD5', 'CRAM-MD5', 'CRAM_MD5', 'PLAIN', 'LOGIN') as $auth_method) {\r
-                if (in_array($auth_method, $auth_methods)) {\r
-                    break;\r
-                }\r
-            }\r
+
+            // Use best (for security) supported authentication method
+            foreach (array('DIGEST-MD5', 'CRAM-MD5', 'CRAM_MD5', 'PLAIN', 'LOGIN') as $auth_method) {
+                if (in_array($auth_method, $auth_methods)) {
+                    break;
+                }
+            }
         }
         else {
             // Prevent from sending credentials in plain text when connection is not secure
@@ -1214,8 +1207,8 @@ class rcube_imap_generic
     {
         if (is_array($items) && !empty($items)) {
             foreach ($items as $key => $value) {
-                $args[] = $this->escape($key);
-                $args[] = $this->escape($value);
+                $args[] = $this->escape($key, true);
+                $args[] = $this->escape($value, true);
             }
         }
 
@@ -1226,7 +1219,7 @@ class rcube_imap_generic
 
         if ($code == self::ERROR_OK && preg_match('/\* ID /i', $response)) {
             $response = substr($response, 5); // remove prefix "* ID "
-            $items    = $this->tokenizeResponse($response);
+            $items    = $this->tokenizeResponse($response, 1);
             $result   = null;
 
             for ($i=0, $len=count($items); $i<$len; $i += 2) {
index ff62c8c090cc8588ffb7ea8f4e46bb404cef0a7a..b541e0763054646aea53c6e6b807cbe488a3ac40 100644 (file)
@@ -15,7 +15,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: rcube_shared.inc 4509 2011-02-09 10:51:50Z thomasb $
+ $Id: rcube_shared.inc 4729 2011-05-04 18:53:11Z alec $
 
 */
 
@@ -232,7 +232,7 @@ function make_absolute_url($path, $base_url)
   }
 
   // $path is absolute
-  if ($path{0}=='/')
+  if ($path[0] == '/')
     $abs_path = $host_url.$path;
   else
   {
@@ -244,13 +244,13 @@ function make_absolute_url($path, $base_url)
       {
         if (strrpos($base_url, '/'))
           $base_url = substr($base_url, 0, strrpos($base_url, '/'));
-        
+
         $path = substr($path, 3);
       }
 
     $abs_path = $base_url.'/'.$path;
   }
-    
+
   return $abs_path;
 }
 
index 0a0564673ae6386127d723b2947ab4034571494d..525571df9e9b06952843266c666754c99777a6ae 100644 (file)
@@ -15,7 +15,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: rcube_string_replacer.php 4402 2011-01-10 14:50:48Z thomasb $
+ $Id: rcube_string_replacer.php 4729 2011-05-04 18:53:11Z alec $
 
 */
 
@@ -36,7 +36,8 @@ class rcube_string_replacer
   function __construct()
   {
     // Simplified domain expression for UTF8 characters handling
-    $utf_domain = '[^?&@"\'\\/()\s\r\t\n]+\\.[a-z]{2,5}';
+    // Support unicode/punycode in top-level domain part
+    $utf_domain = '[^?&@"\'\\/()\s\r\t\n]+\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})';
     $url1 = '.:;';
     $url2 = 'a-z0-9%=#@+?&\\/_~\\[\\]-';
 
index 4709c7377f9477470612b94a2b324bf02830fb1e..8d73b6f16d111e2debef590a2ce9e4cf1665f74a 100755 (executable)
@@ -16,7 +16,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: rcube_template.php 4666 2011-04-17 09:34:02Z alec $
+ $Id: rcube_template.php 4763 2011-05-13 17:31:09Z alec $
 
  */
 
@@ -113,7 +113,6 @@ class rcube_template extends rcube_html_page
         }
     }
 
-
     /**
      * Set page title variable
      */
@@ -122,7 +121,6 @@ class rcube_template extends rcube_html_page
         $this->pagetitle = $title;
     }
 
-
     /**
      * Getter for the current page title
      *
@@ -143,7 +141,6 @@ class rcube_template extends rcube_html_page
         return $title;
     }
 
-
     /**
      * Set skin
      */
@@ -226,7 +223,6 @@ class rcube_template extends rcube_html_page
           $this->js_commands[] = $cmd;
     }
 
-
     /**
      * Add a localized label to the client environment
      */
@@ -241,7 +237,6 @@ class rcube_template extends rcube_html_page
         }
     }
 
-
     /**
      * Invoke display_message command
      *
@@ -262,7 +257,6 @@ class rcube_template extends rcube_html_page
         }
     }
 
-
     /**
      * Delete all stored env variables and commands
      *
@@ -282,7 +276,6 @@ class rcube_template extends rcube_html_page
         parent::reset();
     }
 
-
     /**
      * Redirect to a certain url
      *
@@ -296,7 +289,6 @@ class rcube_template extends rcube_html_page
         exit;
     }
 
-
     /**
      * Send the request output to the client.
      * This will either parse a skin tempalte or send an AJAX response
@@ -361,16 +353,15 @@ class rcube_template extends rcube_html_page
     }
 
     /**
-     * Parse a specific skin template and deliver to stdout
-     *
-     * Either returns nothing, or exists hard (exit();)
+     * Parse a specific skin template and deliver to stdout (or return)
      *
      * @param  string  Template name
      * @param  boolean Exit script
-     * @return void
+     * @param  boolean Don't write to stdout, return parsed content instead
+     *
      * @link   http://php.net/manual/en/function.exit.php
      */
-    private function parse($name = 'main', $exit = true)
+    function parse($name = 'main', $exit = true, $write = true)
     {
         $skin_path = $this->config['skin_path'];
         $plugin    = false;
@@ -428,22 +419,27 @@ class rcube_template extends rcube_html_page
         // trigger generic hook where plugins can put additional content to the page
         $hook = $this->app->plugins->exec_hook("render_page", array('template' => $realname, 'content' => $output));
 
-        // add debug console
-        if ($this->config['debug_level'] & 8) {
-            $this->add_footer('<div id="console" style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;z-index:9000;">
-                <a href="#toggle" onclick="con=$(\'#dbgconsole\');con[con.is(\':visible\')?\'hide\':\'show\']();return false">console</a>
-                <textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:10px" spellcheck="false"></textarea></div>'
-            );
+        $output = $this->parse_with_globals($hook['content']);
+
+        if ($write) {
+            // add debug console
+            if ($this->config['debug_level'] & 8) {
+                $this->add_footer('<div id="console" style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;z-index:9000;">
+                    <a href="#toggle" onclick="con=$(\'#dbgconsole\');con[con.is(\':visible\')?\'hide\':\'show\']();return false">console</a>
+                    <textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:10px" spellcheck="false"></textarea></div>'
+                );
+            }
+            $this->write(trim($output));
+        }
+        else {
+            return $output;
         }
 
-        $output = $this->parse_with_globals($hook['content']);
-        $this->write(trim($output));
         if ($exit) {
             exit;
         }
     }
 
-
     /**
      * Return executable javascript code for all registered commands
      *
index 091584707a1e7ea802b3600633ce775494e90412..904ffbd68302898b8b93b1618585465765ccd98d 100644 (file)
@@ -48,137 +48,136 @@ a=rcube_event.get_mouse_pos(a);e=this.env.folderlist_coords;a.y+=b;if(a.x<e.x1||
 if(e.hasClass("collapsed"))this.folder_auto_timer&&window.clearTimeout(this.folder_auto_timer),this.folder_auto_expand=g,this.folder_auto_timer=window.setTimeout(function(){rcmail.command("collapse-folder",rcmail.folder_auto_expand);rcmail.drag_start(null)},1E3);else if(this.folder_auto_timer)window.clearTimeout(this.folder_auto_timer),this.folder_auto_expand=this.folder_auto_timer=null;$(d).addClass("droptarget");this.env.folder_coords[g].on=1;this.env.last_folder_target=g;d="draglayer"+(b>1?"copy":
 "normal")}else this.env.last_folder_target=null;else if(e.on)$(this.get_folder_li(g)).removeClass("droptarget"),this.env.folder_coords[g].on=0;d!=f&&this.contact_list&&this.contact_list.draglayer&&this.contact_list.draglayer.attr("class",d)}};this.collapse_folder=function(a){var b=this.get_folder_li(a),d=$(b.getElementsByTagName("div")[0]);if(d&&(d.hasClass("collapsed")||d.hasClass("expanded"))){var e=$(b.getElementsByTagName("ul")[0]);d.hasClass("collapsed")?(e.show(),d.removeClass("collapsed").addClass("expanded"),
 this.set_env("collapsed_folders",this.env.collapsed_folders.replace(RegExp("&"+urlencode(a)+"&"),""))):(e.hide(),d.removeClass("expanded").addClass("collapsed"),this.set_env("collapsed_folders",this.env.collapsed_folders+"&"+urlencode(a)+"&"),this.env.mailbox.indexOf(a+this.env.delimiter)==0&&this.command("list",a));if(bw.ie6||bw.ie7)if((d=b.nextSibling?b.nextSibling.getElementsByTagName("ul"):null)&&d.length&&(b=d[0])&&b.style&&b.style.display!="none")b.style.display="none",b.style.display="";this.http_post("save-pref",
-"_name=collapsed_folders&_value="+urlencode(this.env.collapsed_folders));this.set_unread_count_display(a,!1)}};this.doc_mouse_up=function(a){var b,d;this.message_list?(rcube_mouse_is_over(a,this.message_list.list.parentNode)?this.message_list.focus():this.message_list.blur(),d=this.message_list,b=this.env.mailboxes):this.contact_list?(rcube_mouse_is_over(a,this.contact_list.list.parentNode)?this.contact_list.focus():this.contact_list.blur(),d=this.contact_list,b=this.env.contactfolders):this.ksearch_value&&
-this.ksearch_blur();if(this.drag_active&&b&&this.env.last_folder_target)b=b[this.env.last_folder_target],$(this.get_folder_li(this.env.last_folder_target)).removeClass("droptarget"),this.env.last_folder_target=null,d.draglayer.hide(),this.drag_menu(a,b)||this.command("moveto",b);if(this.buttons_sel){for(var e in this.buttons_sel)typeof e!="function"&&this.button_out(this.buttons_sel[e],e);this.buttons_sel={}}};this.click_on_list=function(){this.gui_objects.qsearchbox&&this.gui_objects.qsearchbox.blur();
-this.message_list?this.message_list.focus():this.contact_list&&this.contact_list.focus();return!0};this.msglist_select=function(a){this.preview_timer&&clearTimeout(this.preview_timer);this.preview_read_timer&&clearTimeout(this.preview_read_timer);var b=a.get_single_selection()!=null;this.enable_command(this.env.message_commands,b);b&&(this.env.mailbox==this.env.drafts_mailbox?this.enable_command("reply","reply-all","reply-list","forward",!1):this.env.messages[a.get_single_selection()].ml||this.enable_command("reply-list",
-!1));this.enable_command("delete","moveto","copy","mark",a.selection.length>0?!0:!1);if(b||a.selection.length&&a.selection.length!=a.rowcount)this.select_all_mode=!1;b&&this.env.contentframe&&!a.multi_selecting&&!this.dummy_select?this.preview_timer=window.setTimeout(function(){j.msglist_get_preview()},200):this.env.contentframe&&this.show_contentframe(!1)};this.msglist_click=function(a){if(!a.multi_selecting&&this.env.contentframe&&a.get_single_selection()&&window.frames&&window.frames[this.env.contentframe]&&
-window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)>=0)this.preview_timer&&clearTimeout(this.preview_timer),this.preview_read_timer&&clearTimeout(this.preview_read_timer),this.preview_timer=window.setTimeout(function(){j.msglist_get_preview()},200)};this.msglist_dbl_click=function(a){this.preview_timer&&clearTimeout(this.preview_timer);this.preview_read_timer&&clearTimeout(this.preview_read_timer);(a=a.get_single_selection())&&this.env.mailbox==this.env.drafts_mailbox?this.goto_url("compose",
-"_draft_uid="+a+"&_mbox="+urlencode(this.env.mailbox),!0):a&&this.show_message(a,!1,!1)};this.msglist_keypress=function(a){a.key_pressed==a.ENTER_KEY?this.command("show"):a.key_pressed==a.DELETE_KEY?this.command("delete"):a.key_pressed==a.BACKSPACE_KEY?this.command("delete"):a.key_pressed==33?this.command("previouspage"):a.key_pressed==34?this.command("nextpage"):a.shiftkey=!1};this.msglist_get_preview=function(){var a=this.get_single_uid();a&&this.env.contentframe&&!this.drag_active?this.show_message(a,
-!1,!0):this.env.contentframe&&this.show_contentframe(!1)};this.msglist_expand=function(a){if(this.env.messages[a.uid])this.env.messages[a.uid].expanded=a.expanded};this.msglist_set_coltypes=function(a){var b,d,e=a.list.tHead.rows[0].cells;this.env.coltypes=[];for(a=0;a<e.length;a++)e[a].id&&e[a].id.match(/^rcm/)&&(d=e[a].id.replace(/^rcm/,""),this.env.coltypes.push(d=="to"?"from":d));(b=$.inArray("flag",this.env.coltypes))>=0&&this.set_env("flagged_col",b);(b=$.inArray("subject",this.env.coltypes))>=
-0&&this.set_env("subject_col",b);this.http_post("save-pref",{_name:"list_cols",_value:this.env.coltypes,_session:"list_attrib/columns"})};this.check_droptarget=function(a){var b=!1,d=!1;if(this.task=="mail")b=this.env.mailboxes[a]&&this.env.mailboxes[a].id!=this.env.mailbox&&!this.env.mailboxes[a].virtual;else if(this.task=="settings")b=a!=this.env.mailbox;else if(this.task=="addressbook"&&a!=this.env.source&&this.env.contactfolders[a])this.env.contactfolders[a].type=="group"?(d=this.env.contactfolders[a].source,
-b=this.env.contactfolders[a].id!=this.env.group&&!this.env.contactfolders[d].readonly,d=d!=this.env.source):(b=!this.env.contactfolders[a].readonly,d=!0);return b?d?2:1:0};this.init_message_row=function(a){var b,d=this,e=a.uid,f=(this.env.status_col!=null?"status":"msg")+"icn"+a.uid;e&&this.env.messages[e]&&$.extend(a,this.env.messages[e]);if(a.icon=document.getElementById(f))a.icon._row=a.obj,a.icon.onmousedown=function(a){d.command("toggle_status",this);rcube_event.cancel(a)};a.msgicon=this.env.status_col!=
-null?document.getElementById("msgicn"+a.uid):a.icon;if(this.env.flagged_col!=null&&(a.flagicon=document.getElementById("flagicn"+a.uid)))a.flagicon._row=a.obj,a.flagicon.onmousedown=function(a){d.command("toggle_flag",this);rcube_event.cancel(a)};if(!a.depth&&a.has_children&&(b=document.getElementById("rcmexpando"+a.uid)))a.expando=b,b.onmousedown=function(a){return d.expand_message_row(a,e)};this.triggerEvent("insertrow",{uid:e,row:a})};this.add_message_row=function(a,b,d,e){if(!this.gui_objects.messagelist||
-!this.message_list)return!1;this.env.messages[a]||(this.env.messages[a]={});$.extend(this.env.messages[a],{deleted:d.deleted?1:0,replied:d.replied?1:0,unread:d.unread?1:0,forwarded:d.forwarded?1:0,flagged:d.flagged?1:0,has_children:d.has_children?1:0,depth:d.depth?d.depth:0,unread_children:d.unread_children?d.unread_children:0,parent_uid:d.parent_uid?d.parent_uid:0,selected:this.select_all_mode||this.message_list.in_selection(a),ml:d.ml?1:0,ctype:d.ctype,flags:d.extra_flags});var f,g=expando="",h=
-this.message_list,l=h.rows;f=this.env.messages[a];var k="message"+(this.gui_objects.messagelist.tBodies[0].rows.length%2?" even":" odd")+(d.unread?" unread":"")+(d.deleted?" deleted":"")+(d.flagged?" flagged":"")+(d.unread_children&&!d.unread&&!this.env.autoexpand_threads?" unroot":"")+(f.selected?" selected":""),j=document.createElement("tr"),m=document.createElement("td");j.id="rcmrow"+a;j.className=k;k="msgicon";this.env.status_col===null&&(k+=" status",d.deleted?k+=" deleted":d.unread?k+=" unread":
-d.unread_children>0&&(k+=" unreadchildren"));d.replied&&(k+=" replied");d.forwarded&&(k+=" forwarded");f.selected&&!h.in_selection(a)&&h.selection.push(a);if(this.env.threading){m=f.depth*15;if(f.depth)l[f.parent_uid]&&l[f.parent_uid].expanded===!1||(this.env.autoexpand_threads==0||this.env.autoexpand_threads==2)&&(!l[f.parent_uid]||!l[f.parent_uid].expanded)?(j.style.display="none",f.expanded=!1):f.expanded=!0;else if(f.has_children&&typeof f.expanded=="undefined"&&(this.env.autoexpand_threads==
-1||this.env.autoexpand_threads==2&&f.unread_children))f.expanded=!0;m&&(g+='<span id="rcmtab'+a+'" class="branch" style="width:'+m+'px;">&nbsp;&nbsp;</span>');f.has_children&&!f.depth&&(expando='<div id="rcmexpando'+a+'" class="'+(f.expanded?"expanded":"collapsed")+'">&nbsp;&nbsp;</div>')}g+='<span id="msgicn'+a+'" class="'+k+'">&nbsp;</span>';if(!bw.ie&&b.subject)m=d.mbox==this.env.drafts_mailbox?"_draft_uid":"_uid",b.subject='<a href="./?_task=mail&_action='+(d.mbox==this.env.drafts_mailbox?"compose":
-"show")+"&_mbox="+urlencode(d.mbox)+"&"+m+"="+a+'" onclick="return rcube_event.cancel(event)" onmouseover="rcube_webmail.long_subject_title(this,'+(f.depth+1)+')">'+b.subject+"</a>";for(var o in this.env.coltypes)f=this.env.coltypes[o],m=document.createElement("td"),m.className=String(f).toLowerCase(),f=="flag"?(k=d.flagged?"flagged":"unflagged",f='<span id="flagicn'+a+'" class="'+k+'">&nbsp;</span>'):f=="attachment"?f=/application\/|multipart\/m/.test(d.ctype)?'<span class="attachment">&nbsp;</span>':
-/multipart\/report/.test(d.ctype)?'<span class="report">&nbsp;</span>':"&nbsp;":f=="status"?(k=d.deleted?"deleted":d.unread?"unread":d.unread_children>0?"unreadchildren":"msgicon",f='<span id="statusicn'+a+'" class="'+k+'">&nbsp;</span>'):f=f=="threads"?expando:f=="subject"?g+b[f]:b[f],m.innerHTML=f,j.appendChild(m);h.insert_row(j,e);e&&this.env.pagesize&&h.rowcount>this.env.pagesize&&(a=h.get_last_row(),h.remove_row(a),h.clear_selection(a))};this.set_list_sorting=function(a,b){$("#rcm"+this.env.sort_col).removeClass("sorted"+
-this.env.sort_order.toUpperCase());a&&$("#rcm"+a).addClass("sorted"+b);this.env.sort_col=a;this.env.sort_order=b};this.set_list_options=function(a,b,d,e){var f,g="";if(typeof b=="undefined")b=this.env.sort_col;if(!d)d=this.env.sort_order;if(this.env.sort_col!=b||this.env.sort_order!=d)f=1,this.set_list_sorting(b,d);this.env.threading!=e&&(f=1,g+="&_threads="+e);if(a&&a.length){for(var h,l,k=[],j=this.env.coltypes,e=0;e<j.length;e++)l=j[e]=="to"?"from":j[e],h=$.inArray(l,a),h!=-1&&(k.push(l),delete a[h]);
-for(e=0;e<a.length;e++)a[e]&&k.push(a[e]);k.join()!=j.join()&&(f=1,g+="&_cols="+k.join(","))}f&&this.list_mailbox("","",b+"_"+d,g)};this.show_message=function(a,b,d){if(a){var e=window,f=d?"preview":"show",g="&_action="+f+"&_uid="+a+"&_mbox="+urlencode(this.env.mailbox);d&&this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(e=window.frames[this.env.contentframe],g+="&_framed=1");b&&(g+="&_safe=1");this.env.search_request&&(g+="&_search="+this.env.search_request);if(f=="preview"&&
-String(e.location.href).indexOf(g)>=0)this.show_contentframe(!0);else{if(!this.env.frame_lock)(this.is_framed()?parent.rcmail:this).env.frame_lock=this.set_busy(!0,"loading");e.location.href=this.env.comm_path+g;if(f=="preview"&&this.message_list&&this.message_list.rows[a]&&this.message_list.rows[a].unread&&this.env.preview_pane_mark_read>=0)this.preview_read_timer=window.setTimeout(function(){j.set_message(a,"unread",!1);j.update_thread_root(a,"read");j.env.unread_counts[j.env.mailbox]&&(j.env.unread_counts[j.env.mailbox]-=
-1,j.set_unread_count(j.env.mailbox,j.env.unread_counts[j.env.mailbox],j.env.mailbox=="INBOX"));j.env.preview_pane_mark_read>0&&j.http_post("mark","_uid="+a+"&_flag=read&_quiet=1")},this.env.preview_pane_mark_read*1E3)}}};this.show_contentframe=function(a){var b,d;if(this.env.contentframe&&(b=$("#"+this.env.contentframe))&&b.length)if(!a&&(d=window.frames[this.env.contentframe])){if(d.location&&d.location.href.indexOf(this.env.blankpage)<0)d.location.href=this.env.blankpage}else if(!bw.safari&&!bw.konq)b[a?
-"show":"hide"]();!a&&this.busy&&this.set_busy(!1,null,this.env.frame_lock)};this.list_page=function(a){a=="next"?a=this.env.current_page+1:a=="last"?a=this.env.pagecount:a=="prev"&&this.env.current_page>1?a=this.env.current_page-1:a=="first"&&this.env.current_page>1&&(a=1);if(a>0&&a<=this.env.pagecount)this.env.current_page=a,this.task=="mail"?this.list_mailbox(this.env.mailbox,a):this.task=="addressbook"&&this.list_contacts(this.env.source,this.env.group,a)};this.filter_mailbox=function(a){var b,
-d=this.set_busy(!0,"searching");if(this.gui_objects.qsearchbox)b=this.gui_objects.qsearchbox.value;this.clear_message_list();this.env.current_page=1;this.http_request("search","_filter="+a+(b?"&_q="+urlencode(b):"")+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):""),d)};this.list_mailbox=function(a,b,d,e){var f="",g=window;a||(a=this.env.mailbox?this.env.mailbox:"INBOX");e&&(f+=e);d&&(f+="&_sort="+d);this.env.search_request&&(f+="&_search="+this.env.search_request);if(this.env.mailbox!=a)b=
-1,this.env.current_page=b,this.select_all_mode=!1;this.clear_message_list();if(a!=this.env.mailbox||a==this.env.mailbox&&!b&&!d)f+="&_refresh=1";this.select_folder(a,this.env.mailbox);this.env.mailbox=a;if(this.gui_objects.messagelist)this.list_mailbox_remote(a,b,f);else if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(g=window.frames[this.env.contentframe],f+="&_framed=1"),a)this.set_busy(!0,"loading"),g.location.href=this.env.comm_path+"&_mbox="+urlencode(a)+(b?"&_page="+
-b:"")+f};this.clear_message_list=function(){this.env.messages={};this.last_selected=0;this.show_contentframe(!1);this.message_list&&this.message_list.clear(!0)};this.list_mailbox_remote=function(a,b,d){this.message_list.clear();a="_mbox="+urlencode(a)+(b?"&_page="+b:"");b=this.set_busy(!0,"loading");this.http_request("list",a+d,b)};this.update_selection=function(){var a=this.message_list.selection,b=this.message_list.rows,d,e=[];for(d in a)b[a[d]]&&e.push(a[d]);this.message_list.selection=e};this.expand_unread=
-function(){for(var a,b=this.gui_objects.messagelist.tBodies[0].firstChild;b;){if(b.nodeType==1&&(a=this.message_list.rows[b.uid])&&a.unread_children)this.message_list.expand_all(a),this.set_unread_children(a.uid);b=b.nextSibling}return!1};this.expand_message_row=function(a,b){var d=this.message_list.rows[b];d.expanded=!d.expanded;this.set_unread_children(b);d.expanded=!d.expanded;this.message_list.expand_row(a,b)};this.expand_threads=function(){if(this.env.threading&&this.env.autoexpand_threads&&
-this.message_list)switch(this.env.autoexpand_threads){case 2:this.expand_unread();break;case 1:this.message_list.expand_all()}};this.init_threads=function(a){for(var b=0,d=a.length;b<d;b++)this.add_tree_icons(a[b]);this.expand_threads()};this.add_tree_icons=function(a){var b,d,e,f,g=[],h=[],l,k=this.message_list.rows;for(l=a?k[a]?k[a].obj:null:this.message_list.list.tBodies[0].firstChild;l;){if(l.nodeType==1&&(d=k[l.uid]))if(d.depth){for(b=g.length-1;b>=0;b--)if(e=g[b].length,e>d.depth?(f=e-d.depth,
-g[b][f]&2||(g[b][f]=g[b][f]?g[b][f]+2:2)):e==d.depth&&(g[b][0]&2||(g[b][0]+=2)),d.depth>e)break;g.push(Array(d.depth));g[g.length-1][0]=1;h.push(d.uid)}else{if(g.length){for(b in g)this.set_tree_icons(h[b],g[b]);g=[];h=[]}if(a&&l!=k[a].obj)break}l=l.nextSibling}if(g.length)for(b in g)this.set_tree_icons(h[b],g[b])};this.set_tree_icons=function(a,b){var d,e=[],f="",g=b.length;for(d=0;d<g;d++)b[d]>2?e.push({"class":"l3",width:15}):b[d]>1?e.push({"class":"l2",width:15}):b[d]>0?e.push({"class":"l1",width:15}):
-e.length&&!e[e.length-1]["class"]?e[e.length-1].width+=15:e.push({"class":null,width:15});for(d=e.length-1;d>=0;d--)f+=e[d]["class"]?'<div class="tree '+e[d]["class"]+'" />':'<div style="width:'+e[d].width+'px" />';f&&$("#rcmtab"+a).html(f)};this.update_thread_root=function(a,b){if(this.env.threading){var d=this.message_list.find_root(a);if(a!=d){var e=this.message_list.rows[d];if(b=="read"&&e.unread_children)e.unread_children--;else if(b=="unread"&&e.has_children)e.unread_children=e.unread_children?
-e.unread_children+1:1;else return;this.set_message_icon(d);this.set_unread_children(d)}}};this.update_thread=function(a){if(!this.env.threading)return 0;var b,d=0,e=this.message_list.rows,f=e[a],g=e[a].depth,h=[];f.depth?f.unread&&(a=this.message_list.find_root(a),e[a].unread_children--,this.set_unread_children(a)):d--;a=f.parent_uid;for(f=f.obj.nextSibling;f;){if(f.nodeType==1&&(b=e[f.uid])){if(!b.depth||b.depth<=g)break;b.depth--;$("#rcmtab"+b.uid).width(b.depth*15).html("");if(b.depth){if(b.depth==
-g)b.parent_uid=a;b.unread&&h.length&&h[h.length-1].unread_children++}else{d++;b.parent_uid=0;if(b.has_children)$("#rcmrow"+b.uid+" .leaf:first").attr("id","rcmexpando"+b.uid).attr("class",b.obj.style.display!="none"?"expanded":"collapsed").bind("mousedown",{uid:b.uid,p:this},function(a){return a.data.p.expand_message_row(a,a.data.uid)}),b.unread_children=0,h.push(b);b.obj.style.display=="none"&&$(b.obj).show()}}f=f.nextSibling}for(b=0;b<h.length;b++)this.set_unread_children(h[b].uid);return d};this.delete_excessive_thread_rows=
-function(){for(var a=this.message_list.rows,b=this.message_list.list.tBodies[0].firstChild,d=this.env.pagesize+1;b;){if(b.nodeType==1&&(r=a[b.uid]))!r.depth&&d&&d--,d||this.message_list.remove_row(b.uid);b=b.nextSibling}};this.set_message_icon=function(a){var b=this.message_list.rows[a];if(!b)return!1;if(b.icon)a="msgicon",b.deleted?a+=" deleted":b.unread?a+=" unread":b.unread_children&&(a+=" unreadchildren"),b.msgicon==b.icon&&(b.replied&&(a+=" replied"),b.forwarded&&(a+=" forwarded"),a+=" status"),
-b.icon.className=a;if(b.msgicon&&b.msgicon!=b.icon)a="msgicon",!b.unread&&b.unread_children&&(a+=" unreadchildren"),b.replied&&(a+=" replied"),b.forwarded&&(a+=" forwarded"),b.msgicon.className=a;if(b.flagicon)a=b.flagged?"flagged":"unflagged",b.flagicon.className=a};this.set_message_status=function(a,b,d){a=this.message_list.rows[a];if(!a)return!1;if(b=="unread")a.unread=d;else if(b=="deleted")a.deleted=d;else if(b=="replied")a.replied=d;else if(b=="forwarded")a.forwarded=d;else if(b=="flagged")a.flagged=
-d};this.set_message=function(a,b,d){var e=this.message_list.rows[a];if(!e)return!1;b&&this.set_message_status(a,b,d);b=$(e.obj);e.unread&&!b.hasClass("unread")?b.addClass("unread"):!e.unread&&b.hasClass("unread")&&b.removeClass("unread");e.deleted&&!b.hasClass("deleted")?b.addClass("deleted"):!e.deleted&&b.hasClass("deleted")&&b.removeClass("deleted");e.flagged&&!b.hasClass("flagged")?b.addClass("flagged"):!e.flagged&&b.hasClass("flagged")&&b.removeClass("flagged");this.set_unread_children(a);this.set_message_icon(a)};
-this.set_unread_children=function(a){a=this.message_list.rows[a];a.parent_uid||(!a.unread&&a.unread_children&&!a.expanded?$(a.obj).addClass("unroot"):$(a.obj).removeClass("unroot"))};this.copy_messages=function(a){if(a&&typeof a=="object")a=a.id;if(a&&!(a==this.env.mailbox||!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length))){var b=[],d=this.display_message(this.get_label("copyingmessage"),"loading"),a="&_target_mbox="+urlencode(a)+"&_from="+(this.env.action?this.env.action:
-"");if(this.env.uid)b[0]=this.env.uid;else{var e=this.message_list.get_selection(),f;for(f in e)b.push(e[f])}a+="&_uid="+this.uids_to_list(b);this.http_post("copy","_mbox="+urlencode(this.env.mailbox)+a,d)}};this.move_messages=function(a){if(a&&typeof a=="object")a=a.id;if(a&&!(a==this.env.mailbox||!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length))){var b=!1,a="&_target_mbox="+urlencode(a)+"&_from="+(this.env.action?this.env.action:"");this.env.action=="show"?b=this.set_busy(!0,
-"movingmessage"):this.show_contentframe(!1);this.enable_command(this.env.message_commands,!1);this._with_selected_messages("moveto",b,a)}};this.delete_messages=function(){var a=this.message_list?$.merge([],this.message_list.get_selection()):[];if(this.env.uid||a.length){for(var b,d=0,e=a.length;d<e;d++)b=a[d],this.message_list.rows[b].has_children&&!this.message_list.rows[b].expanded&&this.message_list.select_childs(b);if(this.env.flag_for_deletion)return this.mark_message("delete"),!1;else!this.env.trash_mailbox||
-this.env.mailbox==this.env.trash_mailbox?this.permanently_remove_messages():this.message_list&&this.message_list.shiftkey?confirm(this.get_label("deletemessagesconfirm"))&&this.permanently_remove_messages():this.move_messages(this.env.trash_mailbox);return!0}};this.permanently_remove_messages=function(){if(this.env.uid||this.message_list&&this.message_list.get_selection().length)this.show_contentframe(!1),this._with_selected_messages("delete",!1,"&_from="+(this.env.action?this.env.action:""))};this._with_selected_messages=
-function(a,b,d){var e=[],f=0;if(this.env.uid)e[0]=this.env.uid;else{var g,h,j,k=[],n=this.message_list.get_selection();g=0;for(len=n.length;g<len;g++)h=n[g],e.push(h),this.env.threading&&(f+=this.update_thread(h),j=this.message_list.find_root(h),j!=h&&$.inArray(j,k)<0&&k.push(j)),this.message_list.remove_row(h,this.env.display_next&&g==n.length-1);this.env.display_next||this.message_list.clear_selection();g=0;for(len=k.length;g<len;g++)this.add_tree_icons(k[g])}this.env.search_request&&(d+="&_search="+
-this.env.search_request);this.env.display_next&&this.env.next_uid&&(d+="&_next_uid="+this.env.next_uid);f<0?d+="&_count="+f*-1:f>0&&this.delete_excessive_thread_rows();d+="&_uid="+this.uids_to_list(e);b||(b=this.display_message(this.get_label(a=="moveto"?"movingmessage":"deletingmessage"),"loading"));this.http_post(a,"_mbox="+urlencode(this.env.mailbox)+d,b)};this.mark_message=function(a,b){var d=[],e=[],f,g,h;h=this.message_list?this.message_list.get_selection():[];if(b)d[0]=b;else if(this.env.uid)d[0]=
-this.env.uid;else if(this.message_list){g=0;for(f=h.length;g<f;g++)d.push(h[g])}if(this.message_list){g=0;for(f=d.length;g<f;g++)h=d[g],(a=="read"&&this.message_list.rows[h].unread||a=="unread"&&!this.message_list.rows[h].unread||a=="delete"&&!this.message_list.rows[h].deleted||a=="undelete"&&this.message_list.rows[h].deleted||a=="flagged"&&!this.message_list.rows[h].flagged||a=="unflagged"&&this.message_list.rows[h].flagged)&&e.push(h)}else e=d;if(e.length||this.select_all_mode)switch(a){case "read":case "unread":this.toggle_read_status(a,
-e);break;case "delete":case "undelete":this.toggle_delete_status(e);break;case "flagged":case "unflagged":this.toggle_flagged_status(a,d)}};this.toggle_read_status=function(a,b){for(var d=0;d<b.length;d++)this.set_message(b[d],"unread",a=="unread"?!0:!1);var d="_uid="+this.uids_to_list(b)+"&_flag="+a,e=this.display_message(this.get_label("markingmessage"),"loading");this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_post("mark",d,e);for(d=0;d<b.length;d++)this.update_thread_root(b[d],
-a)};this.toggle_flagged_status=function(a,b){for(var d=0;d<b.length;d++)this.set_message(b[d],"flagged",a=="flagged"?!0:!1);var d="_uid="+this.uids_to_list(b)+"&_flag="+a,e=this.display_message(this.get_label("markingmessage"),"loading");this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_post("mark",d,e)};this.toggle_delete_status=function(a){var b=this.message_list?this.message_list.rows:[];if(a.length==1)return!b.length||b[a[0]]&&!b[a[0]].deleted?this.flag_as_deleted(a):
-this.flag_as_undeleted(a),!0;for(var d,e=!0,f=0,g=a.length;f<g;f++)if(d=a[f],b[d]&&!b[d].deleted){e=!1;break}e?this.flag_as_undeleted(a):this.flag_as_deleted(a);return!0};this.flag_as_undeleted=function(a){for(var b=0,d=a.length;b<d;b++)this.set_message(a[b],"deleted",!1);a="_uid="+this.uids_to_list(a)+"&_flag=undelete";b=this.display_message(this.get_label("markingmessage"),"loading");this.env.search_request&&(a+="&_search="+this.env.search_request);this.http_post("mark",a,b);return!0};this.flag_as_deleted=
-function(a){for(var b="",d=[],b=this.message_list?this.message_list.rows:[],e=0,f=0,g=a.length;f<g;f++)uid=a[f],b[uid]&&(b[uid].unread&&(d[d.length]=uid),this.env.skip_deleted?(e+=this.update_thread(uid),this.message_list.remove_row(uid,this.env.display_next&&f==this.message_list.selection.length-1)):this.set_message(uid,"deleted",!0));this.env.skip_deleted&&this.message_list&&(this.env.display_next||this.message_list.clear_selection(),e<0||e>0&&this.delete_excessive_thread_rows());b="&_from="+(this.env.action?
-this.env.action:"");lock=this.display_message(this.get_label("markingmessage"),"loading");d.length&&(b+="&_ruid="+this.uids_to_list(d));this.env.skip_deleted&&this.env.display_next&&this.env.next_uid&&(b+="&_next_uid="+this.env.next_uid);this.env.search_request&&(b+="&_search="+this.env.search_request);this.http_post("mark","_uid="+this.uids_to_list(a)+"&_flag=delete"+b,lock);return!0};this.flag_deleted_as_read=function(a){for(var b=this.message_list?this.message_list.rows:[],d=String(a).split(","),
-e=0;e<d.length;e++)a=d[e],b[a]&&this.set_message(a,"unread",!1)};this.uids_to_list=function(a){return this.select_all_mode?"*":a.join(",")};this.expunge_mailbox=function(a){var b=!1,d="_mbox="+urlencode(a);a==this.env.mailbox&&(b=this.set_busy(!0,"loading"),d+="&_reload=1");this.http_post("expunge",d,b)};this.purge_mailbox=function(a){var b=!1,d="_mbox="+urlencode(a);if(!confirm(this.get_label("purgefolderconfirm")))return!1;a==this.env.mailbox&&(b=this.set_busy(!0,"loading"),d+="&_reload=1");this.http_post("purge",
-d,b)};this.purge_mailbox_test=function(){return this.env.messagecount&&(this.env.mailbox==this.env.trash_mailbox||this.env.mailbox==this.env.junk_mailbox||this.env.mailbox.match("^"+RegExp.escape(this.env.trash_mailbox)+RegExp.escape(this.env.delimiter))||this.env.mailbox.match("^"+RegExp.escape(this.env.junk_mailbox)+RegExp.escape(this.env.delimiter)))};this.login_user_keyup=function(a){var b=rcube_event.get_keycode(a),d=$("#rcmloginpwd");if(b==13&&d.length&&!d.val())return d.focus(),rcube_event.cancel(a);
-return!0};this.init_messageform=function(){if(!this.gui_objects.messageform)return!1;var a=$("[name='_from']"),b=$("[name='_to']"),d=$("input[name='_subject']"),e=$("[name='_message']").get(0),f=$("input[name='_is_html']").val()=="1",g=["cc","bcc","replyto","followupto"];this.init_address_input_events(b);for(var h in g)this.init_address_input_events($("[name='_"+g[h]+"']"));f||(this.set_caret_pos(e,this.env.top_posting?0:$(e).val().length),a.attr("type")=="select-one"&&$("input[name='_draft_saveid']").val()==
-""&&this.change_identity(a[0]));b.val()==""?b.focus():d.val()==""?d.focus():e&&e.focus();this.env.compose_focus_elem=document.activeElement;this.compose_field_hash(!0);this.auto_save_start()};this.init_address_input_events=function(a){a[bw.ie||bw.safari||bw.chrome?"keydown":"keypress"](function(a){return j.ksearch_keydown(a,this)}).attr("autocomplete","off")};this.check_compose_input=function(){var a,b=$("[name='_to']"),d=$("[name='_cc']"),e=$("[name='_bcc']"),f=$("[name='_from']"),g=$("[name='_subject']"),
-h=$("[name='_message']");if(f.attr("type")=="text"&&!rcube_check_email(f.val(),!0))return alert(this.get_label("nosenderwarning")),f.focus(),!1;d=b.val()?b.val():d.val()?d.val():e.val();if(!rcube_check_email(d.replace(/^\s+/,"").replace(/[\s,;]+$/,""),!0))return alert(this.get_label("norecipientwarning")),b.focus(),!1;for(var j in this.env.attachments)if(typeof this.env.attachments[j]=="object"&&!this.env.attachments[j].complete)return alert(this.get_label("notuploadedwarning")),!1;if(g.val()=="")if(b=
-prompt(this.get_label("nosubjectwarning"),this.get_label("nosubject")),!b&&b!=="")return g.focus(),!1;else g.val(b?b:this.get_label("nosubject"));this.stop_spellchecking();window.tinyMCE&&(a=tinyMCE.get(this.env.composebody));if(!a&&h.val()==""&&!confirm(this.get_label("nobodywarning")))return h.focus(),!1;else if(a){if(!a.getContent()&&!confirm(this.get_label("nobodywarning")))return a.focus(),!1;tinyMCE.triggerSave()}return!0};this.toggle_editor=function(a){if(a.mode=="html")this.display_spellcheck_controls(!1),
-this.plain2html($("#"+a.id).val(),a.id),tinyMCE.execCommand("mceAddControl",!1,a.id);else{var b=tinyMCE.get(a.id);b.plugins.spellchecker&&b.plugins.spellchecker.active&&b.execCommand("mceSpellCheck",!1);if(b=b.getContent()){if(!confirm(this.get_label("editorwarning")))return!1;this.html2plain(b,a.id)}tinyMCE.execCommand("mceRemoveControl",!1,a.id);this.display_spellcheck_controls(!0)}return!0};this.stop_spellchecking=function(){var a;if(window.tinyMCE&&(a=tinyMCE.get(this.env.composebody)))a.plugins.spellchecker&&
-a.plugins.spellchecker.active&&a.execCommand("mceSpellCheck");else if((a=this.env.spellcheck)&&!this.spellcheck_ready)$(a.spell_span).trigger("click"),this.set_spellcheck_state("ready")};this.display_spellcheck_controls=function(a){this.env.spellcheck&&(a||this.stop_spellchecking(),$(this.env.spellcheck.spell_container).css("visibility",a?"visible":"hidden"))};this.set_spellcheck_state=function(a){this.spellcheck_ready=a=="ready"||a=="no_error_found";this.enable_command("spellcheck",this.spellcheck_ready)};
-this.set_draft_id=function(a){$("input[name='_draft_saveid']").val(a)};this.auto_save_start=function(){if(this.env.draft_autosave)this.save_timer=self.setTimeout(function(){j.command("savedraft")},this.env.draft_autosave*1E3);this.busy=!1};this.compose_field_hash=function(a){var b,d="",e=$("[name='_to']").val(),f=$("[name='_cc']").val(),g=$("[name='_bcc']").val(),h=$("[name='_subject']").val();e&&(d+=e+":");f&&(d+=f+":");g&&(d+=g+":");h&&(d+=h+":");d+=window.tinyMCE&&(b=tinyMCE.get(this.env.composebody))?
-b.getContent():$("[name='_message']").val();if(this.env.attachments)for(var j in this.env.attachments)d+=j;if(a)this.cmp_hash=d;return d};this.change_identity=function(a,b){if(!a||!a.options)return!1;if(!b)b=this.env.show_sig;var d,e=-1,f=a.options[a.selectedIndex].value,g=$("[name='_message']"),h=g.val(),j=$("input[name='_is_html']").val()=="1",k=this.env.identity;d=this.env.sig_above&&(this.env.compose_mode=="reply"||this.env.compose_mode=="forward")?"---":"-- ";this.env.signatures&&this.env.signatures[f]?
-(this.enable_command("insert-sig",!0),this.env.compose_commands.push("insert-sig")):this.enable_command("insert-sig",!1);if(j){if(b&&this.env.signatures&&(e=tinyMCE.get(this.env.composebody),g=e.dom.get("_rc_sig"),g||(k=e.getBody(),h=e.getDoc(),g=h.createElement("div"),g.setAttribute("id","_rc_sig"),this.env.sig_above?(e.getWin().focus(),e=e.selection.getNode(),e.nodeName=="BODY"?(k.insertBefore(g,k.firstChild),k.insertBefore(h.createElement("br"),k.firstChild)):(k.insertBefore(g,e.nextSibling),k.insertBefore(h.createElement("br"),
-e.nextSibling))):(bw.ie&&k.appendChild(h.createElement("br")),k.appendChild(g))),this.env.signatures[f]))this.env.signatures[f].is_html?(k=this.env.signatures[f].text,this.env.signatures[f].plain_text.match(/^--[ -]\r?\n/)||(k=d+"<br />"+k)):(k=this.env.signatures[f].text,k.match(/^--[ -]\r?\n/)||(k=d+"\n"+k),k="<pre>"+k+"</pre>"),g.innerHTML=k}else b&&k&&this.env.signatures&&this.env.signatures[k]&&(k=this.env.signatures[k].is_html?this.env.signatures[k].plain_text:this.env.signatures[k].text,k=
-k.replace(/\r\n/g,"\n"),k.match(/^--[ -]\n/)||(k=d+"\n"+k),e=this.env.sig_above?h.indexOf(k):h.lastIndexOf(k),e>=0&&(h=h.substring(0,e)+h.substring(e+k.length,h.length))),b&&this.env.signatures&&this.env.signatures[f]?(k=this.env.signatures[f].is_html?this.env.signatures[f].plain_text:this.env.signatures[f].text,k=k.replace(/\r\n/g,"\n"),k.match(/^--[ -]\n/)||(k=d+"\n"+k),this.env.sig_above?e>=0?(h=h.substring(0,e)+k+h.substring(e,h.length),d=e-1):(pos=this.get_caret_pos(g.get(0)))?(h=h.substring(0,
-pos)+"\n"+k+"\n\n"+h.substring(pos,h.length),d=pos):(d=0,h="\n\n"+k+"\n\n"+h.replace(/^[\r\n]+/,"")):(h=h.replace(/[\r\n]+$/,""),d=!this.env.top_posting&&h.length?h.length+1:0,h+="\n\n"+k)):d=this.env.top_posting?0:h.length,g.val(h),this.set_caret_pos(g.get(0),d);this.env.identity=f;return!0};this.upload_file=function(a){if(!a)return!1;for(var b=!1,d=0;d<a.elements.length;d++)if(a.elements[d].type=="file"&&a.elements[d].value){b=!0;break}if(b){b=(new Date).getTime();d="rcmupload"+b;if(document.all)document.body.insertAdjacentHTML("BeforeEnd",
-'<iframe name="'+d+'" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>');else{var e=document.createElement("iframe");e.name=d;e.style.border="none";e.style.width=0;e.style.height=0;e.style.visibility="hidden";document.body.appendChild(e)}$(d).bind("load",{ts:b},function(a){var b,d="";try{if(this.contentDocument)b=this.contentDocument;else if(this.contentWindow)b=this.contentWindow.document;d=b.childNodes[0].innerHTML}catch(e){}if(!d.match(/add2attachment/)&&(!bw.opera||
-rcmail.env.uploadframe&&rcmail.env.uploadframe==a.data.ts))d.match(/display_message/)||rcmail.display_message(rcmail.get_label("fileuploaderror"),"error"),rcmail.remove_from_attachment_list(a.data.ts);if(bw.opera)rcmail.env.uploadframe=a.data.ts});a.target=d;a.action=this.env.comm_path+"&_action=upload&_uploadid="+b;a.setAttribute("enctype","multipart/form-data");a.submit();e=this.get_label("uploading");this.env.loadingicon&&(e='<img src="'+this.env.loadingicon+'" alt="" />'+e);this.env.cancelicon&&
-(e='<a title="'+this.get_label("cancel")+'" onclick="return rcmail.cancel_attachment_upload(\''+b+"', '"+d+'\');" href="#cancelupload"><img src="'+this.env.cancelicon+'" alt="" /></a>'+e);this.add2attachment_list(b,{name:"",html:e,complete:!1})}this.gui_objects.attachmentform=a;return!0};this.add2attachment_list=function(a,b,d){if(!this.gui_objects.attachmentlist)return!1;var e=$("<li>").attr("id",a).html(b.html),f;d&&(f=document.getElementById(d))?e.replaceAll(f):e.appendTo(this.gui_objects.attachmentlist);
-d&&this.env.attachments[d]&&delete this.env.attachments[d];this.env.attachments[a]=b;return!0};this.remove_from_attachment_list=function(a){this.env.attachments[a]&&delete this.env.attachments[a];if(!this.gui_objects.attachmentlist)return!1;var b=this.gui_objects.attachmentlist.getElementsByTagName("li");for(i=0;i<b.length;i++)b[i].id==a&&this.gui_objects.attachmentlist.removeChild(b[i])};this.remove_attachment=function(a){a&&this.env.attachments[a]&&this.http_post("remove-attachment","_file="+urlencode(a));
-return!0};this.cancel_attachment_upload=function(a,b){if(!a||!b)return!1;this.remove_from_attachment_list(a);$("iframe[name='"+b+"']").remove();return!1};this.add_contact=function(a){a&&this.http_post("addcontact","_address="+a);return!0};this.qsearch=function(a){if(a!=""){var b="";if(this.message_list){if(this.clear_message_list(),this.env.search_mods){var d=this.env.search_mods[this.env.mailbox]?this.env.search_mods[this.env.mailbox]:this.env.search_mods["*"];if(d){var e=[],f;for(f in d)e.push(f);
-b+="&_headers="+e.join(",")}}}else this.contact_list&&(this.contact_list.clear(!0),this.show_contentframe(!1));this.gui_objects.search_filter&&(b+="&_filter="+this.gui_objects.search_filter.value);this.env.current_page=1;d=this.set_busy(!0,"searching");this.http_request("search","_q="+urlencode(a)+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):"")+(this.env.source?"&_source="+urlencode(this.env.source):"")+(this.env.group?"&_gid="+urlencode(this.env.group):"")+(b?b:""),d)}return!0};this.reset_qsearch=
-function(){if(this.gui_objects.qsearchbox)this.gui_objects.qsearchbox.value="";this.env.search_request=null;return!0};this.sent_successfully=function(a,b){this.display_message(b,a);window.setTimeout(function(){j.list_mailbox()},500)};this.ksearch_keydown=function(a,b){this.ksearch_timer&&clearTimeout(this.ksearch_timer);var d;d=rcube_event.get_keycode(a);var e=rcube_event.get_modifier(a);switch(d){case 38:case 40:if(!this.ksearch_pane)break;e=d==38?1:0;d=document.getElementById("rcmksearchSelected");
-if(!d)d=this.ksearch_pane.__ul.firstChild;d&&this.ksearch_select(e?d.previousSibling:d.nextSibling);return rcube_event.cancel(a);case 9:if(e==SHIFT_KEY)break;case 13:if(this.ksearch_selected===null||!this.ksearch_input||!this.ksearch_value)break;this.insert_recipient(this.ksearch_selected);this.ksearch_hide();return rcube_event.cancel(a);case 27:this.ksearch_hide();break;case 37:case 39:if(e!=SHIFT_KEY)return}this.ksearch_timer=window.setTimeout(function(){j.ksearch_get_results()},200);this.ksearch_input=
-b;return!0};this.ksearch_select=function(a){var b=$("#rcmksearchSelected");b[0]&&a&&b.removeAttr("id").removeClass("selected");if(a)$(a).attr("id","rcmksearchSelected").addClass("selected"),this.ksearch_selected=a._rcm_id};this.insert_recipient=function(a){if(this.env.contacts[a]&&this.ksearch_input){var b=this.ksearch_input.value,d=this.get_caret_pos(this.ksearch_input),d=b.lastIndexOf(this.ksearch_value,d),e="",f=b.substring(0,d),b=b.substring(d+this.ksearch_value.length,b.length);typeof this.env.contacts[a]==
-"object"&&this.env.contacts[a].id?(e+=this.env.contacts[a].name+", ",this.group2expand=$.extend({},this.env.contacts[a]),this.group2expand.input=this.ksearch_input,this.http_request("group-expand","_source="+urlencode(this.env.contacts[a].source)+"&_gid="+urlencode(this.env.contacts[a].id),!1)):typeof this.env.contacts[a]=="string"&&(e=this.env.contacts[a]+", ");this.ksearch_input.value=f+e+b;d+=e.length;this.ksearch_input.setSelectionRange&&this.ksearch_input.setSelectionRange(d,d)}};this.replace_group_recipients=
-function(a,b){if(this.group2expand&&this.group2expand.id==a)this.group2expand.input.value=this.group2expand.input.value.replace(this.group2expand.name,b),this.group2expand=null};this.ksearch_get_results=function(){var a=this.ksearch_input?this.ksearch_input.value:null;if(a!==null){this.ksearch_pane&&this.ksearch_pane.is(":visible")&&this.ksearch_pane.hide();var b=this.get_caret_pos(this.ksearch_input),d=a.lastIndexOf(",",b-1),a=a.substring(d+1,b),b=this.env.autocomplete_min_length,a=$.trim(a);if(a!=
-this.ksearch_value)if(a.length<b){if(!this.env.acinfo)a=this.get_label("autocompletechars"),a=a.replace("$min",b),this.env.acinfo=this.display_message(a)}else if(this.env.acinfo&&a.length==b&&this.hide_message(this.env.acinfo),b=this.ksearch_value,this.ksearch_value=a,a.length&&(!b||!b.length||!this.env.contacts||this.env.contacts.length||a.indexOf(b)!=0))b=this.display_message(this.get_label("searching"),"loading"),this.http_post("autocomplete","_search="+urlencode(a),b)}};this.ksearch_query_results=
-function(a,b){if(!(this.ksearch_value&&b!=this.ksearch_value))this.env.contacts=a?a:[],this.ksearch_display_results(this.env.contacts)};this.ksearch_display_results=function(a){if(a.length&&this.ksearch_input&&this.ksearch_value){var b,d,e,f=this.ksearch_value;if(!this.ksearch_pane)b=$("<ul>"),this.ksearch_pane=$("<div>").attr("id","rcmKSearchpane").css({position:"absolute","z-index":3E4}).append(b).appendTo(document.body),this.ksearch_pane.__ul=b[0];b=this.ksearch_pane.__ul;b.innerHTML="";for(i=
-0;i<a.length;i++)e=typeof a[i]=="object"?a[i].name:a[i],d=document.createElement("LI"),d.innerHTML=e.replace(RegExp("("+RegExp.escape(f)+")","ig"),"##$1%%").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/##([^%]+)%%/g,"<b>$1</b>"),d.onmouseover=function(){j.ksearch_select(this)},d.onmouseup=function(){j.ksearch_click(this)},d._rcm_id=i,b.appendChild(d);$(b.firstChild).attr("id","rcmksearchSelected").addClass("selected");this.ksearch_selected=0;a=$(this.ksearch_input).offset();this.ksearch_pane.css({left:a.left+
-"px",top:a.top+this.ksearch_input.offsetHeight+"px"}).show()}else this.ksearch_hide()};this.ksearch_click=function(a){this.ksearch_input&&this.ksearch_input.focus();this.insert_recipient(a._rcm_id);this.ksearch_hide()};this.ksearch_blur=function(){this.ksearch_timer&&clearTimeout(this.ksearch_timer);this.ksearch_value="";this.ksearch_input=null;this.ksearch_hide()};this.ksearch_hide=function(){this.ksearch_selected=null;this.ksearch_pane&&this.ksearch_pane.hide()};this.contactlist_keypress=function(a){a.key_pressed==
-a.DELETE_KEY&&this.command("delete")};this.contactlist_select=function(a){this.preview_timer&&clearTimeout(this.preview_timer);var b,d=this;(b=a.get_single_selection())?this.preview_timer=window.setTimeout(function(){d.load_contact(b,"show")},200):this.env.contentframe&&this.show_contentframe(!1);this.enable_command("compose",a.selection.length>0);this.enable_command("edit",b&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly?!0:!1);this.enable_command("delete",a.selection.length&&
-this.env.address_sources&&!this.env.address_sources[this.env.source].readonly);return!1};this.list_contacts=function(a,b,d){var e="",f=window;if(!a)a=this.env.source;if(d&&this.current_page==d&&a==this.env.source&&b==this.env.group)return!1;if(a!=this.env.source)d=this.env.current_page=1,this.reset_qsearch();else if(b!=this.env.group)d=this.env.current_page=1;this.select_folder(b?"G"+a+b:a,this.env.group?"G"+this.env.source+this.env.group:this.env.source);this.env.source=a;this.env.group=b;this.gui_objects.contactslist?
-this.list_contacts_remote(a,b,d):(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(f=window.frames[this.env.contentframe],e="&_framed=1"),b&&(e+="&_gid="+b),d&&(e+="&_page="+d),this.env.search_request&&(e+="&_search="+this.env.search_request),this.set_busy(!0,"loading"),f.location.href=this.env.comm_path+(a?"&_source="+urlencode(a):"")+e)};this.list_contacts_remote=function(a,b,d){this.contact_list.clear(!0);this.show_contentframe(!1);this.enable_command("delete","compose",
-!1);var d=(a?"_source="+urlencode(a):"")+(d?(a?"&":"")+"_page="+d:""),e=this.set_busy(!0,"loading");this.env.source=a;(this.env.group=b)&&(d+="&_gid="+b);this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_request("list",d,e)};this.load_contact=function(a,b,d){var e="",f=window;if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe])e="&_framed=1",f=window.frames[this.env.contentframe],this.show_contentframe(!0);else if(d)return!1;if(b&&(a||b=="add")&&
-!this.drag_active)this.env.group&&(e+="&_gid="+urlencode(this.env.group)),this.set_busy(!0),f.location.href=this.env.comm_path+"&_action="+b+"&_source="+urlencode(this.env.source)+"&_cid="+urlencode(a)+e;return!0};this.copy_contact=function(a,b){a||(a=this.contact_list.get_selection().join(","));b.type=="group"&&b.source==this.env.source?this.http_post("group-addmembers","_cid="+urlencode(a)+"&_source="+urlencode(this.env.source)+"&_gid="+urlencode(b.id)):b.type=="group"&&!this.env.address_sources[b.source].readonly?
-this.http_post("copy","_cid="+urlencode(a)+"&_source="+urlencode(this.env.source)+"&_to="+urlencode(b.source)+"&_togid="+urlencode(b.id)+(this.env.group?"&_gid="+urlencode(this.env.group):"")):b.id!=this.env.source&&a&&this.env.address_sources[b.id]&&!this.env.address_sources[b.id].readonly&&this.http_post("copy","_cid="+urlencode(a)+"&_source="+urlencode(this.env.source)+"&_to="+urlencode(b.id)+(this.env.group?"&_gid="+urlencode(this.env.group):""))};this.delete_contacts=function(){var a=this.contact_list.get_selection();
-if((a.length||this.env.cid)&&confirm(this.get_label("deletecontactconfirm"))){var b,d=[],e="";if(this.env.cid)d.push(this.env.cid);else{for(var f=0;f<a.length;f++)b=a[f],d.push(b),this.contact_list.remove_row(b,f==a.length-1);a.length==1&&this.show_contentframe(!1)}this.env.group&&(e+="&_gid="+urlencode(this.env.group));this.env.search_request&&(e+="&_search="+this.env.search_request);this.http_post("delete","_cid="+urlencode(d.join(","))+"&_source="+urlencode(this.env.source)+"&_from="+(this.env.action?
-this.env.action:"")+e);return!0}};this.update_contact_row=function(a,b,d){var e;if(this.contact_list.rows[a]&&(e=this.contact_list.rows[a].obj)){for(var f=0;f<b.length;f++)e.cells[f]&&$(e.cells[f]).html(b[f]);if(d)e.id="rcmrow"+d,this.contact_list.remove_row(a),this.contact_list.init_row(e),this.contact_list.selection[0]=d,e.style.display="";return!0}return!1};this.add_contact_row=function(a,b){if(!this.gui_objects.contactslist||!this.gui_objects.contactslist.tBodies[0])return!1;var d=this.gui_objects.contactslist.tBodies[0].rows.length%
-2,e=document.createElement("tr");e.id="rcmrow"+a;e.className="contact "+(d?"even":"odd");this.contact_list.in_selection(a)&&(e.className+=" selected");for(var f in b)col=document.createElement("td"),col.className=String(f).toLowerCase(),col.innerHTML=b[f],e.appendChild(col);this.contact_list.insert_row(e);this.enable_command("export",this.contact_list.rowcount>0)};this.group_create=function(){if(this.gui_objects.folderlist&&this.env.address_sources[this.env.source].groups){if(!this.name_input)this.name_input=
-$("<input>").attr("type","text"),this.name_input.bind("keydown",function(a){return rcmail.add_input_keydown(a)}),this.name_input_li=$("<li>").addClass("contactgroup").append(this.name_input),this.name_input_li.insertAfter(this.get_folder_li(this.env.source));this.name_input.select().focus()}};this.group_rename=function(){if(this.env.group&&this.gui_objects.folderlist){if(!this.name_input){this.enable_command("list","listgroup",!1);this.name_input=$("<input>").attr("type","text").val(this.env.contactgroups["G"+
-this.env.source+this.env.group].name);this.name_input.bind("keydown",function(a){return rcmail.add_input_keydown(a)});this.env.group_renaming=!0;var a,b=this.get_folder_li(this.env.source+this.env.group,"rcmliG");b&&(a=b.firstChild)&&$(a).hide().before(this.name_input)}this.name_input.select().focus()}};this.group_delete=function(){this.env.group&&this.http_post("group-delete","_source="+urlencode(this.env.source)+"&_gid="+urlencode(this.env.group),!0)};this.remove_group_item=function(a){var b,d=
-"G"+a.source+a.id;if(b=this.get_folder_li(d))this.triggerEvent("group_delete",{source:a.source,id:a.id,li:b}),b.parentNode.removeChild(b),delete this.env.contactfolders[d],delete this.env.contactgroups[d];this.list_contacts(a.source,0)};this.add_input_keydown=function(a){a=rcube_event.get_keycode(a);if(a==13){if(a=this.name_input.val()){var b=this.set_busy(!0,"loading");this.env.group_renaming?this.http_post("group-rename","_source="+urlencode(this.env.source)+"&_gid="+urlencode(this.env.group)+"&_name="+
-urlencode(a),b):this.http_post("group-create","_source="+urlencode(this.env.source)+"&_name="+urlencode(a),b)}return!1}else a==27&&this.reset_add_input();return!0};this.reset_add_input=function(){if(this.name_input){if(this.env.group_renaming)this.name_input.parent().children().last().show(),this.env.group_renaming=!1;this.name_input.remove();this.name_input_li&&this.name_input_li.remove();this.name_input=this.name_input_li=null}this.enable_command("list","listgroup",!0)};this.insert_contact_group=
-function(a){this.reset_add_input();a.type="group";var b="G"+a.source+a.id;this.env.contactfolders[b]=this.env.contactgroups[b]=a;var d=$("<a>").attr("href","#").bind("click",function(){return rcmail.command("listgroup",a,this)}).html(a.name),b=$("<li>").attr("id","rcmli"+b).addClass("contactgroup").append(d).insertAfter(this.get_folder_li(a.source));this.triggerEvent("group_insert",{id:a.id,source:a.source,name:a.name,li:b[0]})};this.update_contact_group=function(a){this.reset_add_input();var b="G"+
-a.source+a.id,d,e=this.get_folder_li(b);if(e&&(d=e.firstChild)&&d.tagName.toLowerCase()=="a")d.innerHTML=a.name;this.env.contactfolders[b].name=this.env.contactgroups[b].name=a.name;this.triggerEvent("group_update",{id:a.id,source:a.source,name:a.name,li:e[0]})};this.init_subscription_list=function(){var a=this;this.subscription_list=new rcube_list_widget(this.gui_objects.subscriptionlist,{multiselect:!1,draggable:!0,keyboard:!1,toggleselect:!0});this.subscription_list.addEventListener("select",function(b){a.subscription_select(b)});
-this.subscription_list.addEventListener("dragstart",function(){a.drag_active=!0});this.subscription_list.addEventListener("dragend",function(b){a.subscription_move_folder(b)});this.subscription_list.row_init=function(b){b.obj.onmouseover=function(){a.focus_subscription(b.id)};b.obj.onmouseout=function(){a.unfocus_subscription(b.id)}};this.subscription_list.init()};this.section_select=function(a){if(a=a.get_single_selection()){var b="",d=window;this.set_busy(!0);this.env.contentframe&&window.frames&&
-window.frames[this.env.contentframe]&&(b="&_framed=1",d=window.frames[this.env.contentframe]);d.location.href=this.env.comm_path+"&_action=edit-prefs&_section="+a+b}return!0};this.identity_select=function(a){var b;(b=a.get_single_selection())&&this.load_identity(b,"edit-identity")};this.load_identity=function(a,b){if(b=="edit-identity"&&(!a||a==this.env.iid))return!1;var d="",e=window;if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe])d="&_framed=1",e=window.frames[this.env.contentframe],
-document.getElementById(this.env.contentframe).style.visibility="inherit";if(b&&(a||b=="add-identity"))this.set_busy(!0),e.location.href=this.env.comm_path+"&_action="+b+"&_iid="+a+d;return!0};this.delete_identity=function(a){var b=this.identity_list.get_selection();if(b.length||this.env.iid)return a||(a=this.env.iid?this.env.iid:b[0]),this.goto_url("delete-identity","_iid="+a+"&_token="+this.env.request_token,!0),!0};this.focus_subscription=function(a){var b,d,e=RegExp.escape(this.env.delimiter),
-f=RegExp("["+e+"]?[^"+e+"]+$");if(this.drag_active&&this.env.mailbox&&(b=document.getElementById(a)))this.env.subscriptionrows[a]&&(d=this.env.subscriptionrows[a][0])?this.check_droptarget(d)&&!this.env.subscriptionrows[this.get_folder_row_id(this.env.mailbox)][2]&&d!=this.env.mailbox.replace(f,"")&&!d.match(RegExp("^"+RegExp.escape(this.env.mailbox+this.env.delimiter)))&&(this.set_env("dstfolder",d),$(b).addClass("droptarget")):this.env.mailbox.match(RegExp(e))&&(this.set_env("dstfolder",this.env.delimiter),
-$(this.subscription_list.frame).addClass("droptarget"))};this.unfocus_subscription=function(a){var b=$("#"+a);this.set_env("dstfolder",null);this.env.subscriptionrows[a]&&b[0]?b.removeClass("droptarget"):$(this.subscription_list.frame).removeClass("droptarget")};this.subscription_select=function(a){var b,d;a&&(b=a.get_single_selection())&&(d=this.env.subscriptionrows["rcmrow"+b])?(this.set_env("mailbox",d[0]),this.show_folder(d[0]),this.enable_command("delete-folder",!d[2])):(this.env.mailbox=null,
-this.show_contentframe(!1),this.enable_command("delete-folder","purge",!1))};this.subscription_move_folder=function(){var a=RegExp.escape(this.env.delimiter),b;this.env.mailbox&&this.env.dstfolder&&this.env.dstfolder!=this.env.mailbox&&this.env.dstfolder!=this.env.mailbox.replace(RegExp("["+a+"]?[^"+a+"]+$"),"")&&(b=RegExp("[^"+a+"]*["+a+"]","g"),a=this.set_busy(!0,"foldermoving"),b=this.env.mailbox.replace(b,""),b=this.env.dstfolder==this.env.delimiter?b:this.env.dstfolder+this.env.delimiter+b,this.http_post("rename-folder",
-"_folder_oldname="+urlencode(this.env.mailbox)+"&_folder_newname="+urlencode(b),a));this.drag_active=!1;this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder))};this.create_folder=function(){this.show_folder("",this.env.mailbox)};this.delete_folder=function(a){if((a=this.env.subscriptionrows[this.get_folder_row_id(a?a:this.env.mailbox)][0])&&confirm(this.get_label("deletefolderconfirm"))){var b=this.set_busy(!0,"folderdeleting");this.http_post("delete-folder","_mbox="+urlencode(a),b)}};
-this.add_folder_row=function(a,b,d,e){if(!this.gui_objects.subscriptionlist)return!1;var f,g;for(g in this.env.subscriptionrows)if(this.env.subscriptionrows[g]!=null&&!this.env.subscriptionrows[g][2]){f=g;break}var h;g=this.gui_objects.subscriptionlist.tBodies[0];var j="rcmrow"+(g.childNodes.length+1),k=this.subscription_list.get_single_selection();if(d&&d.id)f=j=d.id;if(!j||!f||!(h=document.getElementById(f)))return this.goto_url("folders"),!1;f=this.clone_table_row(h);f.id=j;e&&(e=this.get_folder_row_id(e))?
-g.insertBefore(f,document.getElementById(e)):g.appendChild(f);d&&g.removeChild(d);this.env.subscriptionrows[f.id]=[a,b,0];f.cells[0].innerHTML=b;if(!d)f.cells[1].innerHTML="*",$('input[name="_subscribed[]"]',f).val(a).attr("checked",!0);this.init_subscription_list();k&&document.getElementById("rcmrow"+k)&&this.subscription_list.select_row(k);document.getElementById(j).scrollIntoView&&document.getElementById(j).scrollIntoView()};this.replace_folder_row=function(a,b,d,e){a=this.get_folder_row_id(a);
-a=document.getElementById(a);this.add_folder_row(b,d,a,e)};this.remove_folder_row=function(a){var b;if((a=this.get_folder_row_id(a))&&(b=document.getElementById(a)))b.style.display="none"};this.subscribe=function(a){if(a){var b=this.display_message(this.get_label("foldersubscribing"),"loading");this.http_post("subscribe","_mbox="+urlencode(a),b)}};this.unsubscribe=function(a){if(a){var b=this.display_message(this.get_label("folderunsubscribing"),"loading");this.http_post("unsubscribe","_mbox="+urlencode(a),
-b)}};this.get_folder_row_id=function(a){for(var b in this.env.subscriptionrows)if(this.env.subscriptionrows[b]&&this.env.subscriptionrows[b][0]==a)break;return b};this.clone_table_row=function(a){for(var b,d,e=document.createElement("tr"),f=0;f<a.cells.length;f++){b=a.cells[f];d=document.createElement("td");if(b.className)d.className=b.className;b.align&&d.setAttribute("align",b.align);d.innerHTML=b.innerHTML;e.appendChild(d)}return e};this.show_folder=function(a,b,d){var e=window,a="&_action=edit-folder&_mbox="+
-urlencode(a);b&&(a+="&_path="+urlencode(b));this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(e=window.frames[this.env.contentframe],a+="&_framed=1");if(String(e.location.href).indexOf(a)>=0&&!d)this.show_contentframe(!0);else{if(!this.env.frame_lock)(parent.rcmail?parent.rcmail:this).env.frame_lock=this.set_busy(!0,"loading");e.location.href=this.env.comm_path+a}};this.disable_subscription=function(a){(a=this.get_folder_row_id(a))&&$('input[name="_subscribed[]"]',$("#"+
-a)).attr("disabled",!0)};this.folder_size=function(a){var b=this.set_busy(!0,"loading");this.http_post("folder-size","_mbox="+urlencode(a),b)};this.folder_size_update=function(a){$("#folder-size").replaceWith(a)};this.set_page_buttons=function(){this.enable_command("nextpage","lastpage",this.env.pagecount>this.env.current_page);this.enable_command("previouspage","firstpage",this.env.current_page>1)};this.init_buttons=function(){for(var a in this.buttons)if(typeof a=="string")for(var b=0;b<this.buttons[a].length;b++){var d=
-this.buttons[a][b],e=document.getElementById(d.id);if(e){var f=!1;if(d.type=="image")e=e.parentNode,f=!0;e._command=a;e._id=d.id;if(d.sel&&(e.onmousedown=function(){return rcmail.button_sel(this._command,this._id)},e.onmouseup=function(){return rcmail.button_out(this._command,this._id)},f))(new Image).src=d.sel;if(d.over&&(e.onmouseover=function(){return rcmail.button_over(this._command,this._id)},e.onmouseout=function(){return rcmail.button_out(this._command,this._id)},f))(new Image).src=d.over}}};
-this.set_button=function(a,b){var d,e,f=this.buttons[a];if(!f||!f.length)return!1;for(var g=0;g<f.length;g++){d=f[g];if((e=document.getElementById(d.id))&&d.type=="image"&&!d.status){if(d.pas=e._original_src?e._original_src:e.src,e.runtimeStyle&&e.runtimeStyle.filter&&e.runtimeStyle.filter.match(/src=['"]([^'"]+)['"]/))d.pas=RegExp.$1}else if(e&&!d.status)d.pas=String(e.className);if(e&&d.type=="image"&&d[b])d.status=b,e.src=d[b];else if(e&&typeof d[b]!="undefined")d.status=b,e.className=d[b];if(e&&
-d.type=="input")d.status=b,e.disabled=!b}};this.set_alttext=function(a,b){if(this.buttons[a]&&this.buttons[a].length)for(var d,e,f,g=0;g<this.buttons[a].length;g++)d=this.buttons[a][g],e=document.getElementById(d.id),d.type=="image"&&e?(e.setAttribute("alt",this.get_label(b)),(f=e.parentNode)&&f.tagName.toLowerCase()=="a"&&f.setAttribute("title",this.get_label(b))):e&&e.setAttribute("title",this.get_label(b))};this.button_over=function(a,b){var d,e,f=this.buttons[a];if(!f||!f.length)return!1;for(var g=
-0;g<f.length;g++)if(d=f[g],d.id==b&&d.status=="act"&&(e=document.getElementById(d.id))&&d.over)d.type=="image"?e.src=d.over:e.className=d.over};this.button_sel=function(a,b){var d,e,f=this.buttons[a];if(f&&f.length)for(var g=0;g<f.length;g++)if(d=f[g],d.id==b&&d.status=="act"){if((e=document.getElementById(d.id))&&d.sel)d.type=="image"?e.src=d.sel:e.className=d.sel;this.buttons_sel[b]=a}};this.button_out=function(a,b){var d,e,f=this.buttons[a];if(f&&f.length)for(var g=0;g<f.length;g++)if(d=f[g],d.id==
-b&&d.status=="act"&&(e=document.getElementById(d.id))&&d.act)d.type=="image"?e.src=d.act:e.className=d.act};this.set_pagetitle=function(a){if(a&&document.title)document.title=a};this.display_message=function(a,b){if(this.is_framed())return parent.rcmail.display_message(a,b);if(!this.gui_objects.message){if(b!="loading")this.pending_message=[a,b];return!1}var b=b?b:"notice",d=this,e=a,f=b+(new Date).getTime(),g=this.message_time*(b=="error"||b=="warning"?2:1);b=="loading"&&(e="loading",g=this.env.request_timeout*
-1E3,a||(a=this.get_label("loading")));if(this.messages[e])return this.messages[e].obj&&this.messages[e].obj.html(a),b=="loading"&&this.messages[e].labels.push({id:f,msg:a}),this.messages[e].elements.push(f),window.setTimeout(function(){d.hide_message(f,b=="loading")},g),f;var h=$("<div>").addClass(b).html(a).data("key",e);$(this.gui_objects.message).append(h).show();this.messages[e]={obj:h,elements:[f]};b=="loading"?this.messages[e].labels=[{id:f,msg:a}]:h.click(function(){return d.hide_message(h)});
-window.setTimeout(function(){d.hide_message(f,b=="loading")},g);return f};this.hide_message=function(a,b){if(this.is_framed())return parent.rcmail.hide_message(a,b);var d,e,f,g,h=this.messages;if(typeof a=="object")$(a)[b?"fadeOut":"hide"](),g=$(a).data("key"),this.messages[g]&&delete this.messages[g];else for(d in h)for(e in h[d].elements)if(h[d]&&h[d].elements[e]==a)if(h[d].elements.splice(e,1),h[d].elements.length){if(d=="loading")for(f in h[d].labels)h[d].labels[f].id==a?delete h[d].labels[f]:
-g=h[d].labels[f].msg,h[d].obj.html(g)}else h[d].obj[b?"fadeOut":"hide"](),delete h[d]};this.select_folder=function(a,b,d){if(this.gui_objects.folderlist){var e,f;(e=this.get_folder_li(b,d))&&$(e).removeClass("selected").addClass("unfocused");(f=this.get_folder_li(a,d))&&$(f).removeClass("unfocused").addClass("selected");this.triggerEvent("selectfolder",{folder:a,old:b,prefix:d})}};this.get_folder_li=function(a,b){b||(b="rcmli");if(this.gui_objects.folderlist)return a=String(a).replace(this.identifier_expr,
-"_"),document.getElementById(b+a);return null};this.set_message_coltypes=function(a,b){var d=this.message_list,e=d?d.list.tHead:null,f,g,h,j;this.env.coltypes=a;if(e){if(b){g=document.createElement("thead");h=document.createElement("tr");c=0;for(j=b.length;c<j;c++){f=document.createElement("td");f.innerHTML=b[c].html;if(b[c].id)f.id=b[c].id;if(b[c].className)f.className=b[c].className;h.appendChild(f)}g.appendChild(h);e.parentNode.replaceChild(g,e);e=g}h=0;for(j=this.env.coltypes.length;h<j;h++)if(g=
-this.env.coltypes[h],(f=e.rows[0].cells[h])&&(g=="from"||g=="to")){f.id="rcm"+g;if(f.firstChild&&f.firstChild.tagName.toLowerCase()=="a")f=f.firstChild,f.onclick=function(){return rcmail.command("sort",this.__col,this)},f.__col=g;f.innerHTML=this.get_label(g)}}this.env.subject_col=null;this.env.flagged_col=null;this.env.status_col=null;if((h=$.inArray("subject",this.env.coltypes))>=0)if(this.set_env("subject_col",h),d)d.subject_col=h;(h=$.inArray("flag",this.env.coltypes))>=0&&this.set_env("flagged_col",
-h);(h=$.inArray("status",this.env.coltypes))>=0&&this.set_env("status_col",h);d&&d.init_header()};this.set_rowcount=function(a){$(this.gui_objects.countdisplay).html(a);this.set_page_buttons()};this.set_mailboxname=function(a){if(this.gui_objects.mailboxname&&a)this.gui_objects.mailboxname.innerHTML=a};this.set_quota=function(a){a&&this.gui_objects.quotadisplay&&(typeof a=="object"&&a.type=="image"?this.percent_indicator(this.gui_objects.quotadisplay,a):$(this.gui_objects.quotadisplay).html(a))};
-this.set_unread_count=function(a,b,d){if(!this.gui_objects.mailboxlist)return!1;this.env.unread_counts[a]=b;this.set_unread_count_display(a,d)};this.set_unread_count_display=function(a,b){var d,e,f,g,h,j;if(f=this.get_folder_li(a)){g=this.env.unread_counts[a]?this.env.unread_counts[a]:0;e=f.getElementsByTagName("a")[0];d=/\s+\([0-9]+\)$/i;h=0;if((j=f.getElementsByTagName("div")[0])&&j.className.match(/collapsed/))for(var k in this.env.unread_counts)k.indexOf(a+this.env.delimiter)==0&&(h+=this.env.unread_counts[k]);
-g&&e.innerHTML.match(d)?e.innerHTML=e.innerHTML.replace(d," ("+g+")"):g?e.innerHTML+=" ("+g+")":e.innerHTML=e.innerHTML.replace(d,"");d=RegExp(RegExp.escape(this.env.delimiter)+"[^"+RegExp.escape(this.env.delimiter)+"]+$");a.match(d)&&this.set_unread_count_display(a.replace(d,""),!1);g+h>0?$(f).addClass("unread"):$(f).removeClass("unread")}d=/^\([0-9]+\)\s+/i;b&&document.title&&(e="",e=String(document.title),e=g&&e.match(d)?e.replace(d,"("+g+") "):g?"("+g+") "+e:e.replace(d,""),this.set_pagetitle(e))};
-this.new_message_focus=function(){this.env.framed&&window.parent?window.parent.focus():window.focus()};this.toggle_prefer_html=function(a){var b;if(b=document.getElementById("rcmfd_addrbook_show_images"))b.disabled=!a.checked};this.toggle_preview_pane=function(a){var b;if(b=document.getElementById("rcmfd_preview_pane_mark_read"))b.disabled=!a.checked};this.set_headers=function(a){this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&a&&$(this.gui_objects.all_headers_box).html(a).show()};
-this.load_headers=function(a){if(this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&this.env.uid)$(a).removeClass("show-headers").addClass("hide-headers"),$(this.gui_objects.all_headers_row).show(),a.onclick=function(){rcmail.hide_headers(a)},this.gui_objects.all_headers_box.innerHTML||this.http_post("headers","_uid="+this.env.uid,this.display_message(this.get_label("loading"),"loading"))};this.hide_headers=function(a){if(this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box)$(a).removeClass("hide-headers").addClass("show-headers"),
-$(this.gui_objects.all_headers_row).hide(),a.onclick=function(){rcmail.load_headers(a)}};this.percent_indicator=function(a,b){if(!b||!a)return!1;var d=b.width?b.width:this.env.indicator_width?this.env.indicator_width:100,e=b.height?b.height:this.env.indicator_height?this.env.indicator_height:14,f=b.percent?Math.abs(parseInt(b.percent)):0,g=parseInt(f/100*d),h=$(a).position();h.top=Math.max(0,h.top);this.env.indicator_width=d;this.env.indicator_height=e;g>d&&(g=d,f=100);if(b.title)b.title=this.get_label("quota")+
-": "+b.title;var j=$("<div>");j.css({position:"absolute",top:h.top,left:h.left,width:d+"px",height:e+"px",zIndex:100,lineHeight:e+"px"}).attr("title",b.title).addClass("quota_text").html(f+"%");var k=$("<div>");k.css({position:"absolute",top:h.top+1,left:h.left+1,width:g+"px",height:e+"px",zIndex:99});g=$("<div>");g.css({position:"absolute",top:h.top+1,left:h.left+1,width:d+"px",height:e+"px",zIndex:98}).addClass("quota_bg");f>=80?(j.addClass(" quota_text_high"),k.addClass("quota_high")):f>=55?(j.addClass(" quota_text_mid"),
-k.addClass("quota_mid")):(j.addClass(" quota_text_normal"),k.addClass("quota_low"));$(a).html("").append(k).append(g).append(j);$("#quotaimg").attr("title",b.title)};this.html2plain=function(a,b){var d=this,e=this.set_busy(!0,"converting");console.log("HTTP POST: ?_task=utils&_action=html2text");$.ajax({type:"POST",url:"?_task=utils&_action=html2text",data:a,contentType:"application/octet-stream",error:function(a,b,h){d.http_error(a,b,h,e)},success:function(a){d.set_busy(!1,null,e);$(document.getElementById(b)).val(a);
-console.log(a)}})};this.plain2html=function(a,b){var d=this.set_busy(!0,"converting");$(document.getElementById(b)).val("<pre>"+a+"</pre>");this.set_busy(!1,null,d)};this.redirect=function(a,b){(b||b===null)&&this.set_busy(!0);this.env.framed&&window.parent?parent.location.href=a:location.href=a};this.goto_url=function(a,b,d){var e=this.env.comm_path,b=b?"&"+b:"";if(a.match(/([a-z]+)\/([a-z-_]+)/))a=RegExp.$2,e=e.replace(/\_task=[a-z]+/,"_task="+RegExp.$1);this.redirect(e+"&_action="+a+b,d)};this.http_request=
-function(a,b,d){var e=this.env.comm_path;if(a.match(/([a-z]+)\/([a-z-_]+)/))a=RegExp.$2,e=e.replace(/\_task=[a-z]+/,"_task="+RegExp.$1);var f=this.triggerEvent("request"+a,b);if(typeof f!="undefined")if(f===!1)return!1;else b=f;e+="&_remote=1&_action="+a+(b?"&":"")+b;console.log("HTTP GET: "+e);$.ajax({type:"GET",url:e,data:{_unlock:d?d:0},dataType:"json",success:function(a){j.http_response(a)},error:function(a,b,e){rcmail.http_error(a,b,e,d)}})};this.http_post=function(a,b,d){var e=this.env.comm_path;
-if(a.match(/([a-z]+)\/([a-z-_]+)/))a=RegExp.$2,e=e.replace(/\_task=[a-z]+/,"_task="+RegExp.$1);e+="&_action="+a;b&&typeof b=="object"?(b._remote=1,b._unlock=d?d:0):b+=(b?"&":"")+"_remote=1"+(d?"&_unlock="+d:"");a=this.triggerEvent("request"+a,b);if(typeof a!="undefined")if(a===!1)return!1;else b=a;console.log("HTTP POST: "+e);$.ajax({type:"POST",url:e,data:b,dataType:"json",success:function(a){j.http_response(a)},error:function(a,b,e){rcmail.http_error(a,b,e,d)}})};this.http_response=function(a){if(a){a.unlock&&
-this.set_busy(!1);this.triggerEvent("responsebefore",{response:a});this.triggerEvent("responsebefore"+a.action,{response:a});a.env&&this.set_env(a.env);if(typeof a.texts=="object")for(var b in a.texts)typeof a.texts[b]=="string"&&this.add_label(b,a.texts[b]);a.exec&&(console.log(a.exec),eval(a.exec));if(a.callbacks&&a.callbacks.length)for(b=0;b<a.callbacks.length;b++)this.triggerEvent(a.callbacks[b][0],a.callbacks[b][1]);switch(a.action){case "delete":this.task=="addressbook"&&(b=this.contact_list.get_selection(),
-this.enable_command("compose",b&&this.contact_list.rows[b]),this.enable_command("delete","edit",b&&this.contact_list.rows[b]&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly),this.enable_command("export",this.contact_list&&this.contact_list.rowcount>0));case "moveto":this.env.action=="show"?(this.enable_command(this.env.message_commands,!0),this.env.list_post||this.enable_command("reply-list",!1)):this.task=="addressbook"&&this.triggerEvent("listupdate",{folder:this.env.source,
-rowcount:this.contact_list.rowcount});case "purge":case "expunge":this.task=="mail"&&(this.env.messagecount||(this.env.contentframe&&this.show_contentframe(!1),this.enable_command(this.env.message_commands,"purge","expunge","select-all","select-none","sort","expand-all","expand-unread","collapse-all",!1)),this.message_list&&this.triggerEvent("listupdate",{folder:this.env.mailbox,rowcount:this.message_list.rowcount}));break;case "check-recent":case "getunread":case "search":case "list":if(this.task==
-"mail"){if(this.enable_command("show","expunge","select-all","select-none","sort",this.env.messagecount>0),this.enable_command("purge",this.purge_mailbox_test()),this.enable_command("expand-all","expand-unread","collapse-all",this.env.threading&&this.env.messagecount),a.action=="list"||a.action=="search")this.msglist_select(this.message_list),this.triggerEvent("listupdate",{folder:this.env.mailbox,rowcount:this.message_list.rowcount})}else if(this.task=="addressbook"&&(this.enable_command("export",
-this.contact_list&&this.contact_list.rowcount>0),a.action=="list"||a.action=="search"))this.enable_command("group-create",this.env.address_sources[this.env.source].groups&&!this.env.address_sources[this.env.source].readonly),this.enable_command("group-rename","group-delete",this.env.address_sources[this.env.source].groups&&this.env.group&&!this.env.address_sources[this.env.source].readonly),this.triggerEvent("listupdate",{folder:this.env.source,rowcount:this.contact_list.rowcount})}a.unlock&&this.hide_message(a.unlock);
-this.triggerEvent("responseafter",{response:a});this.triggerEvent("responseafter"+a.action,{response:a})}};this.http_error=function(a,b,d,e){b=a.statusText;this.set_busy(!1,null,e);a.abort();b&&this.display_message(this.get_label("servererror")+" ("+b+")","error")};this.start_keepalive=function(){this._int&&clearInterval(this._int);if(this.env.keep_alive&&!this.env.framed&&this.task=="mail"&&this.gui_objects.mailboxlist)this._int=setInterval(function(){j.check_for_recent(!1)},this.env.keep_alive*
-1E3);else if(this.env.keep_alive&&!this.env.framed&&this.task!="login"&&this.env.action!="print")this._int=setInterval(function(){j.send_keep_alive()},this.env.keep_alive*1E3)};this.send_keep_alive=function(){this.http_request("keep-alive","_t="+(new Date).getTime())};this.check_for_recent=function(a){if(!this.busy){var b,d="_t="+(new Date).getTime()+"&_mbox="+urlencode(this.env.mailbox);a&&(b=this.set_busy(!0,"checkingmail"),d+="&_refresh=1",this.start_keepalive());this.gui_objects.messagelist&&
-(d+="&_list=1");this.gui_objects.quotadisplay&&(d+="&_quota=1");this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_request("check-recent",d,b)}};this.get_single_uid=function(){return this.env.uid?this.env.uid:this.message_list?this.message_list.get_single_selection():null};this.get_single_cid=function(){return this.env.cid?this.env.cid:this.contact_list?this.contact_list.get_single_selection():null};this.get_caret_pos=function(a){if(typeof a.selectionEnd!="undefined")return a.selectionEnd;
-else if(document.selection&&document.selection.createRange){var b=document.selection.createRange();if(b.parentElement()!=a)return 0;var d=b.duplicate();a.tagName=="TEXTAREA"?d.moveToElementText(a):d.expand("textedit");d.setEndPoint("EndToStart",b);b=d.text.length;return b<=a.value.length?b:-1}else return a.value.length};this.set_caret_pos=function(a,b){if(a.setSelectionRange)a.setSelectionRange(b,b);else if(a.createTextRange){var d=a.createTextRange();d.collapse(!0);d.moveEnd("character",b);d.moveStart("character",
-b);d.select()}};this.lock_form=function(a,b){if(a&&a.elements){var d,e,f;if(b)this.disabled_form_elements=[];d=0;for(e=a.elements.length;d<e;d++)if(f=a.elements[d],f.type!="hidden")if(b&&f.disabled)this.disabled_form_elements.push(f);else if(b||$.inArray(f,this.disabled_form_elements)<0)f.disabled=b}}}rcube_webmail.long_subject_title=function(j,a){if(!j.title){var b=$(j);if(b.width()+a*15>b.parent().width())j.title=b.html()}};rcube_webmail.prototype.addEventListener=rcube_event_engine.prototype.addEventListener;
-rcube_webmail.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener;rcube_webmail.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent;
+"_name=collapsed_folders&_value="+urlencode(this.env.collapsed_folders));this.set_unread_count_display(a,!1)}};this.doc_mouse_up=function(a){var b,d,e;(d=this.message_list)?(rcube_mouse_is_over(a,d.list.parentNode)?d.focus():d.blur(),b=this.env.mailboxes):(d=this.contact_list)?(rcube_mouse_is_over(a,d.list.parentNode)?d.focus():d.blur(),b=this.env.contactfolders):this.ksearch_value&&this.ksearch_blur();if(this.drag_active&&b&&this.env.last_folder_target)b=b[this.env.last_folder_target],$(this.get_folder_li(this.env.last_folder_target)).removeClass("droptarget"),
+this.env.last_folder_target=null,d.draglayer.hide(),this.drag_menu(a,b)||this.command("moveto",b);if(this.buttons_sel){for(e in this.buttons_sel)typeof e!="function"&&this.button_out(this.buttons_sel[e],e);this.buttons_sel={}}};this.click_on_list=function(){this.gui_objects.qsearchbox&&this.gui_objects.qsearchbox.blur();this.message_list?this.message_list.focus():this.contact_list&&this.contact_list.focus();return!0};this.msglist_select=function(a){this.preview_timer&&clearTimeout(this.preview_timer);
+this.preview_read_timer&&clearTimeout(this.preview_read_timer);var b=a.get_single_selection()!=null;this.enable_command(this.env.message_commands,b);b&&(this.env.mailbox==this.env.drafts_mailbox?this.enable_command("reply","reply-all","reply-list","forward",!1):this.env.messages[a.get_single_selection()].ml||this.enable_command("reply-list",!1));this.enable_command("delete","moveto","copy","mark",a.selection.length>0?!0:!1);if(b||a.selection.length&&a.selection.length!=a.rowcount)this.select_all_mode=
+!1;b&&this.env.contentframe&&!a.multi_selecting&&!this.dummy_select?this.preview_timer=window.setTimeout(function(){j.msglist_get_preview()},200):this.env.contentframe&&this.show_contentframe(!1)};this.msglist_click=function(a){if(!a.multi_selecting&&this.env.contentframe&&a.get_single_selection()&&window.frames&&window.frames[this.env.contentframe]&&window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)>=0)this.preview_timer&&clearTimeout(this.preview_timer),this.preview_read_timer&&
+clearTimeout(this.preview_read_timer),this.preview_timer=window.setTimeout(function(){j.msglist_get_preview()},200)};this.msglist_dbl_click=function(a){this.preview_timer&&clearTimeout(this.preview_timer);this.preview_read_timer&&clearTimeout(this.preview_read_timer);(a=a.get_single_selection())&&this.env.mailbox==this.env.drafts_mailbox?this.goto_url("compose","_draft_uid="+a+"&_mbox="+urlencode(this.env.mailbox),!0):a&&this.show_message(a,!1,!1)};this.msglist_keypress=function(a){a.key_pressed==
+a.ENTER_KEY?this.command("show"):a.key_pressed==a.DELETE_KEY?this.command("delete"):a.key_pressed==a.BACKSPACE_KEY?this.command("delete"):a.key_pressed==33?this.command("previouspage"):a.key_pressed==34&&this.command("nextpage")};this.msglist_get_preview=function(){var a=this.get_single_uid();a&&this.env.contentframe&&!this.drag_active?this.show_message(a,!1,!0):this.env.contentframe&&this.show_contentframe(!1)};this.msglist_expand=function(a){if(this.env.messages[a.uid])this.env.messages[a.uid].expanded=
+a.expanded};this.msglist_set_coltypes=function(a){var b,d,e=a.list.tHead.rows[0].cells;this.env.coltypes=[];for(a=0;a<e.length;a++)e[a].id&&e[a].id.match(/^rcm/)&&(d=e[a].id.replace(/^rcm/,""),this.env.coltypes.push(d=="to"?"from":d));(b=$.inArray("flag",this.env.coltypes))>=0&&this.set_env("flagged_col",b);(b=$.inArray("subject",this.env.coltypes))>=0&&this.set_env("subject_col",b);this.http_post("save-pref",{_name:"list_cols",_value:this.env.coltypes,_session:"list_attrib/columns"})};this.check_droptarget=
+function(a){var b=!1,d=!1;if(this.task=="mail")b=this.env.mailboxes[a]&&this.env.mailboxes[a].id!=this.env.mailbox&&!this.env.mailboxes[a].virtual;else if(this.task=="settings")b=a!=this.env.mailbox;else if(this.task=="addressbook"&&a!=this.env.source&&this.env.contactfolders[a])this.env.contactfolders[a].type=="group"?(d=this.env.contactfolders[a].source,b=this.env.contactfolders[a].id!=this.env.group&&!this.env.contactfolders[d].readonly,d=d!=this.env.source):(b=!this.env.contactfolders[a].readonly,
+d=!0);return b?d?2:1:0};this.init_message_row=function(a){var b,d=this,e=a.uid,f=(this.env.status_col!=null?"status":"msg")+"icn"+a.uid;e&&this.env.messages[e]&&$.extend(a,this.env.messages[e]);if(a.icon=document.getElementById(f))a.icon._row=a.obj,a.icon.onmousedown=function(a){d.command("toggle_status",this);rcube_event.cancel(a)};a.msgicon=this.env.status_col!=null?document.getElementById("msgicn"+a.uid):a.icon;if(this.env.flagged_col!=null&&(a.flagicon=document.getElementById("flagicn"+a.uid)))a.flagicon._row=
+a.obj,a.flagicon.onmousedown=function(a){d.command("toggle_flag",this);rcube_event.cancel(a)};if(!a.depth&&a.has_children&&(b=document.getElementById("rcmexpando"+a.uid)))a.expando=b,b.onmousedown=function(a){return d.expand_message_row(a,e)};this.triggerEvent("insertrow",{uid:e,row:a})};this.add_message_row=function(a,b,d,e){if(!this.gui_objects.messagelist||!this.message_list)return!1;this.env.messages[a]||(this.env.messages[a]={});$.extend(this.env.messages[a],{deleted:d.deleted?1:0,replied:d.replied?
+1:0,unread:d.unread?1:0,forwarded:d.forwarded?1:0,flagged:d.flagged?1:0,has_children:d.has_children?1:0,depth:d.depth?d.depth:0,unread_children:d.unread_children?d.unread_children:0,parent_uid:d.parent_uid?d.parent_uid:0,selected:this.select_all_mode||this.message_list.in_selection(a),ml:d.ml?1:0,ctype:d.ctype,flags:d.extra_flags});var f,g=expando="",h=this.message_list,l=h.rows;f=this.env.messages[a];var k="message"+(this.gui_objects.messagelist.tBodies[0].rows.length%2?" even":" odd")+(d.unread?
+" unread":"")+(d.deleted?" deleted":"")+(d.flagged?" flagged":"")+(d.unread_children&&!d.unread&&!this.env.autoexpand_threads?" unroot":"")+(f.selected?" selected":""),j=document.createElement("tr"),m=document.createElement("td");j.id="rcmrow"+a;j.className=k;k="msgicon";this.env.status_col===null&&(k+=" status",d.deleted?k+=" deleted":d.unread?k+=" unread":d.unread_children>0&&(k+=" unreadchildren"));d.replied&&(k+=" replied");d.forwarded&&(k+=" forwarded");f.selected&&!h.in_selection(a)&&h.selection.push(a);
+if(this.env.threading){m=f.depth*15;if(f.depth)l[f.parent_uid]&&l[f.parent_uid].expanded===!1||(this.env.autoexpand_threads==0||this.env.autoexpand_threads==2)&&(!l[f.parent_uid]||!l[f.parent_uid].expanded)?(j.style.display="none",f.expanded=!1):f.expanded=!0;else if(f.has_children&&typeof f.expanded=="undefined"&&(this.env.autoexpand_threads==1||this.env.autoexpand_threads==2&&f.unread_children))f.expanded=!0;m&&(g+='<span id="rcmtab'+a+'" class="branch" style="width:'+m+'px;">&nbsp;&nbsp;</span>');
+f.has_children&&!f.depth&&(expando='<div id="rcmexpando'+a+'" class="'+(f.expanded?"expanded":"collapsed")+'">&nbsp;&nbsp;</div>')}g+='<span id="msgicn'+a+'" class="'+k+'">&nbsp;</span>';if(!bw.ie&&b.subject)m=d.mbox==this.env.drafts_mailbox?"_draft_uid":"_uid",b.subject='<a href="./?_task=mail&_action='+(d.mbox==this.env.drafts_mailbox?"compose":"show")+"&_mbox="+urlencode(d.mbox)+"&"+m+"="+a+'" onclick="return rcube_event.cancel(event)" onmouseover="rcube_webmail.long_subject_title(this,'+(f.depth+
+1)+')">'+b.subject+"</a>";for(var o in this.env.coltypes)f=this.env.coltypes[o],m=document.createElement("td"),m.className=String(f).toLowerCase(),f=="flag"?(k=d.flagged?"flagged":"unflagged",f='<span id="flagicn'+a+'" class="'+k+'">&nbsp;</span>'):f=="attachment"?f=/application\/|multipart\/m/.test(d.ctype)?'<span class="attachment">&nbsp;</span>':/multipart\/report/.test(d.ctype)?'<span class="report">&nbsp;</span>':"&nbsp;":f=="status"?(k=d.deleted?"deleted":d.unread?"unread":d.unread_children>
+0?"unreadchildren":"msgicon",f='<span id="statusicn'+a+'" class="'+k+'">&nbsp;</span>'):f=f=="threads"?expando:f=="subject"?g+b[f]:b[f],m.innerHTML=f,j.appendChild(m);h.insert_row(j,e);e&&this.env.pagesize&&h.rowcount>this.env.pagesize&&(a=h.get_last_row(),h.remove_row(a),h.clear_selection(a))};this.set_list_sorting=function(a,b){$("#rcm"+this.env.sort_col).removeClass("sorted"+this.env.sort_order.toUpperCase());a&&$("#rcm"+a).addClass("sorted"+b);this.env.sort_col=a;this.env.sort_order=b};this.set_list_options=
+function(a,b,d,e){var f,g="";if(typeof b=="undefined")b=this.env.sort_col;if(!d)d=this.env.sort_order;if(this.env.sort_col!=b||this.env.sort_order!=d)f=1,this.set_list_sorting(b,d);this.env.threading!=e&&(f=1,g+="&_threads="+e);if(a&&a.length){for(var h,l,k=[],j=this.env.coltypes,e=0;e<j.length;e++)l=j[e]=="to"?"from":j[e],h=$.inArray(l,a),h!=-1&&(k.push(l),delete a[h]);for(e=0;e<a.length;e++)a[e]&&k.push(a[e]);k.join()!=j.join()&&(f=1,g+="&_cols="+k.join(","))}f&&this.list_mailbox("","",b+"_"+d,
+g)};this.show_message=function(a,b,d){if(a){var e=window,f=d?"preview":"show",g="&_action="+f+"&_uid="+a+"&_mbox="+urlencode(this.env.mailbox);d&&this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(e=window.frames[this.env.contentframe],g+="&_framed=1");b&&(g+="&_safe=1");this.env.search_request&&(g+="&_search="+this.env.search_request);if(f=="preview"&&String(e.location.href).indexOf(g)>=0)this.show_contentframe(!0);else{if(!this.env.frame_lock)(this.is_framed()?parent.rcmail:
+this).env.frame_lock=this.set_busy(!0,"loading");e.location.href=this.env.comm_path+g;if(f=="preview"&&this.message_list&&this.message_list.rows[a]&&this.message_list.rows[a].unread&&this.env.preview_pane_mark_read>=0)this.preview_read_timer=window.setTimeout(function(){j.set_message(a,"unread",!1);j.update_thread_root(a,"read");j.env.unread_counts[j.env.mailbox]&&(j.env.unread_counts[j.env.mailbox]-=1,j.set_unread_count(j.env.mailbox,j.env.unread_counts[j.env.mailbox],j.env.mailbox=="INBOX"));j.env.preview_pane_mark_read>
+0&&j.http_post("mark","_uid="+a+"&_flag=read&_quiet=1")},this.env.preview_pane_mark_read*1E3)}}};this.show_contentframe=function(a){var b,d;if(this.env.contentframe&&(b=$("#"+this.env.contentframe))&&b.length)if(!a&&(d=window.frames[this.env.contentframe])){if(d.location&&d.location.href.indexOf(this.env.blankpage)<0)d.location.href=this.env.blankpage}else if(!bw.safari&&!bw.konq)b[a?"show":"hide"]();!a&&this.busy&&this.set_busy(!1,null,this.env.frame_lock)};this.list_page=function(a){a=="next"?a=
+this.env.current_page+1:a=="last"?a=this.env.pagecount:a=="prev"&&this.env.current_page>1?a=this.env.current_page-1:a=="first"&&this.env.current_page>1&&(a=1);if(a>0&&a<=this.env.pagecount)this.env.current_page=a,this.task=="mail"?this.list_mailbox(this.env.mailbox,a):this.task=="addressbook"&&this.list_contacts(this.env.source,this.env.group,a)};this.filter_mailbox=function(a){var b,d=this.set_busy(!0,"searching");if(this.gui_objects.qsearchbox)b=this.gui_objects.qsearchbox.value;this.clear_message_list();
+this.env.current_page=1;this.http_request("search","_filter="+a+(b?"&_q="+urlencode(b):"")+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):""),d)};this.list_mailbox=function(a,b,d,e){var f="",g=window;a||(a=this.env.mailbox?this.env.mailbox:"INBOX");e&&(f+=e);d&&(f+="&_sort="+d);this.env.search_request&&(f+="&_search="+this.env.search_request);if(this.env.mailbox!=a)b=1,this.env.current_page=b,this.select_all_mode=!1;this.clear_message_list();if(a!=this.env.mailbox||a==this.env.mailbox&&!b&&
+!d)f+="&_refresh=1";this.select_folder(a,this.env.mailbox);this.env.mailbox=a;if(this.gui_objects.messagelist)this.list_mailbox_remote(a,b,f);else if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(g=window.frames[this.env.contentframe],f+="&_framed=1"),a)this.set_busy(!0,"loading"),g.location.href=this.env.comm_path+"&_mbox="+urlencode(a)+(b?"&_page="+b:"")+f};this.clear_message_list=function(){this.env.messages={};this.last_selected=0;this.show_contentframe(!1);this.message_list&&
+this.message_list.clear(!0)};this.list_mailbox_remote=function(a,b,d){this.message_list.clear();a="_mbox="+urlencode(a)+(b?"&_page="+b:"");b=this.set_busy(!0,"loading");this.http_request("list",a+d,b)};this.update_selection=function(){var a=this.message_list.selection,b=this.message_list.rows,d,e=[];for(d in a)b[a[d]]&&e.push(a[d]);this.message_list.selection=e};this.expand_unread=function(){for(var a,b=this.gui_objects.messagelist.tBodies[0].firstChild;b;){if(b.nodeType==1&&(a=this.message_list.rows[b.uid])&&
+a.unread_children)this.message_list.expand_all(a),this.set_unread_children(a.uid);b=b.nextSibling}return!1};this.expand_message_row=function(a,b){var d=this.message_list.rows[b];d.expanded=!d.expanded;this.set_unread_children(b);d.expanded=!d.expanded;this.message_list.expand_row(a,b)};this.expand_threads=function(){if(this.env.threading&&this.env.autoexpand_threads&&this.message_list)switch(this.env.autoexpand_threads){case 2:this.expand_unread();break;case 1:this.message_list.expand_all()}};this.init_threads=
+function(a){for(var b=0,d=a.length;b<d;b++)this.add_tree_icons(a[b]);this.expand_threads()};this.add_tree_icons=function(a){var b,d,e,f,g=[],h=[],l,k=this.message_list.rows;for(l=a?k[a]?k[a].obj:null:this.message_list.list.tBodies[0].firstChild;l;){if(l.nodeType==1&&(d=k[l.uid]))if(d.depth){for(b=g.length-1;b>=0;b--)if(e=g[b].length,e>d.depth?(f=e-d.depth,g[b][f]&2||(g[b][f]=g[b][f]?g[b][f]+2:2)):e==d.depth&&(g[b][0]&2||(g[b][0]+=2)),d.depth>e)break;g.push(Array(d.depth));g[g.length-1][0]=1;h.push(d.uid)}else{if(g.length){for(b in g)this.set_tree_icons(h[b],
+g[b]);g=[];h=[]}if(a&&l!=k[a].obj)break}l=l.nextSibling}if(g.length)for(b in g)this.set_tree_icons(h[b],g[b])};this.set_tree_icons=function(a,b){var d,e=[],f="",g=b.length;for(d=0;d<g;d++)b[d]>2?e.push({"class":"l3",width:15}):b[d]>1?e.push({"class":"l2",width:15}):b[d]>0?e.push({"class":"l1",width:15}):e.length&&!e[e.length-1]["class"]?e[e.length-1].width+=15:e.push({"class":null,width:15});for(d=e.length-1;d>=0;d--)f+=e[d]["class"]?'<div class="tree '+e[d]["class"]+'" />':'<div style="width:'+e[d].width+
+'px" />';f&&$("#rcmtab"+a).html(f)};this.update_thread_root=function(a,b){if(this.env.threading){var d=this.message_list.find_root(a);if(a!=d){var e=this.message_list.rows[d];if(b=="read"&&e.unread_children)e.unread_children--;else if(b=="unread"&&e.has_children)e.unread_children=e.unread_children?e.unread_children+1:1;else return;this.set_message_icon(d);this.set_unread_children(d)}}};this.update_thread=function(a){if(!this.env.threading)return 0;var b,d=0,e=this.message_list.rows,f=e[a],g=e[a].depth,
+h=[];f.depth?f.unread&&(a=this.message_list.find_root(a),e[a].unread_children--,this.set_unread_children(a)):d--;a=f.parent_uid;for(f=f.obj.nextSibling;f;){if(f.nodeType==1&&(b=e[f.uid])){if(!b.depth||b.depth<=g)break;b.depth--;$("#rcmtab"+b.uid).width(b.depth*15).html("");if(b.depth){if(b.depth==g)b.parent_uid=a;b.unread&&h.length&&h[h.length-1].unread_children++}else{d++;b.parent_uid=0;if(b.has_children)$("#rcmrow"+b.uid+" .leaf:first").attr("id","rcmexpando"+b.uid).attr("class",b.obj.style.display!=
+"none"?"expanded":"collapsed").bind("mousedown",{uid:b.uid,p:this},function(a){return a.data.p.expand_message_row(a,a.data.uid)}),b.unread_children=0,h.push(b);b.obj.style.display=="none"&&$(b.obj).show()}}f=f.nextSibling}for(b=0;b<h.length;b++)this.set_unread_children(h[b].uid);return d};this.delete_excessive_thread_rows=function(){for(var a=this.message_list.rows,b=this.message_list.list.tBodies[0].firstChild,d=this.env.pagesize+1;b;){if(b.nodeType==1&&(r=a[b.uid]))!r.depth&&d&&d--,d||this.message_list.remove_row(b.uid);
+b=b.nextSibling}};this.set_message_icon=function(a){var b=this.message_list.rows[a];if(!b)return!1;if(b.icon)a="msgicon",b.deleted?a+=" deleted":b.unread?a+=" unread":b.unread_children&&(a+=" unreadchildren"),b.msgicon==b.icon&&(b.replied&&(a+=" replied"),b.forwarded&&(a+=" forwarded"),a+=" status"),b.icon.className=a;if(b.msgicon&&b.msgicon!=b.icon)a="msgicon",!b.unread&&b.unread_children&&(a+=" unreadchildren"),b.replied&&(a+=" replied"),b.forwarded&&(a+=" forwarded"),b.msgicon.className=a;if(b.flagicon)a=
+b.flagged?"flagged":"unflagged",b.flagicon.className=a};this.set_message_status=function(a,b,d){a=this.message_list.rows[a];if(!a)return!1;if(b=="unread")a.unread=d;else if(b=="deleted")a.deleted=d;else if(b=="replied")a.replied=d;else if(b=="forwarded")a.forwarded=d;else if(b=="flagged")a.flagged=d};this.set_message=function(a,b,d){var e=this.message_list.rows[a];if(!e)return!1;b&&this.set_message_status(a,b,d);b=$(e.obj);e.unread&&!b.hasClass("unread")?b.addClass("unread"):!e.unread&&b.hasClass("unread")&&
+b.removeClass("unread");e.deleted&&!b.hasClass("deleted")?b.addClass("deleted"):!e.deleted&&b.hasClass("deleted")&&b.removeClass("deleted");e.flagged&&!b.hasClass("flagged")?b.addClass("flagged"):!e.flagged&&b.hasClass("flagged")&&b.removeClass("flagged");this.set_unread_children(a);this.set_message_icon(a)};this.set_unread_children=function(a){a=this.message_list.rows[a];a.parent_uid||(!a.unread&&a.unread_children&&!a.expanded?$(a.obj).addClass("unroot"):$(a.obj).removeClass("unroot"))};this.copy_messages=
+function(a){if(a&&typeof a=="object")a=a.id;if(a&&!(a==this.env.mailbox||!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length))){var b=[],d=this.display_message(this.get_label("copyingmessage"),"loading"),a="&_target_mbox="+urlencode(a)+"&_from="+(this.env.action?this.env.action:"");if(this.env.uid)b[0]=this.env.uid;else{var e=this.message_list.get_selection(),f;for(f in e)b.push(e[f])}a+="&_uid="+this.uids_to_list(b);this.http_post("copy","_mbox="+urlencode(this.env.mailbox)+
+a,d)}};this.move_messages=function(a){if(a&&typeof a=="object")a=a.id;if(a&&!(a==this.env.mailbox||!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length))){var b=!1,a="&_target_mbox="+urlencode(a)+"&_from="+(this.env.action?this.env.action:"");this.env.action=="show"?b=this.set_busy(!0,"movingmessage"):this.show_contentframe(!1);this.enable_command(this.env.message_commands,!1);this._with_selected_messages("moveto",b,a)}};this.delete_messages=function(){var a,b,d,e=this.env.trash_mailbox,
+f=this.message_list,g=f?$.merge([],f.get_selection()):[];if(this.env.uid||g.length){b=0;for(d=g.length;b<d;b++)a=g[b],f.rows[a].has_children&&!f.rows[a].expanded&&f.select_childs(a);if(this.env.flag_for_deletion)return this.mark_message("delete"),!1;else!e||this.env.mailbox==e?this.permanently_remove_messages():f&&f.shiftkey?confirm(this.get_label("deletemessagesconfirm"))&&this.permanently_remove_messages():this.move_messages(e);return!0}};this.permanently_remove_messages=function(){if(this.env.uid||
+this.message_list&&this.message_list.get_selection().length)this.show_contentframe(!1),this._with_selected_messages("delete",!1,"&_from="+(this.env.action?this.env.action:""))};this._with_selected_messages=function(a,b,d){var e=[],f=0;if(this.env.uid)e[0]=this.env.uid;else{var g,h,j,k=[],n=this.message_list.get_selection();g=0;for(len=n.length;g<len;g++)h=n[g],e.push(h),this.env.threading&&(f+=this.update_thread(h),j=this.message_list.find_root(h),j!=h&&$.inArray(j,k)<0&&k.push(j)),this.message_list.remove_row(h,
+this.env.display_next&&g==n.length-1);this.env.display_next||this.message_list.clear_selection();g=0;for(len=k.length;g<len;g++)this.add_tree_icons(k[g])}this.env.search_request&&(d+="&_search="+this.env.search_request);this.env.display_next&&this.env.next_uid&&(d+="&_next_uid="+this.env.next_uid);f<0?d+="&_count="+f*-1:f>0&&this.delete_excessive_thread_rows();d+="&_uid="+this.uids_to_list(e);b||(b=this.display_message(this.get_label(a=="moveto"?"movingmessage":"deletingmessage"),"loading"));this.http_post(a,
+"_mbox="+urlencode(this.env.mailbox)+d,b)};this.mark_message=function(a,b){var d=[],e=[],f,g,h;h=this.message_list?this.message_list.get_selection():[];if(b)d[0]=b;else if(this.env.uid)d[0]=this.env.uid;else if(this.message_list){g=0;for(f=h.length;g<f;g++)d.push(h[g])}if(this.message_list){g=0;for(f=d.length;g<f;g++)h=d[g],(a=="read"&&this.message_list.rows[h].unread||a=="unread"&&!this.message_list.rows[h].unread||a=="delete"&&!this.message_list.rows[h].deleted||a=="undelete"&&this.message_list.rows[h].deleted||
+a=="flagged"&&!this.message_list.rows[h].flagged||a=="unflagged"&&this.message_list.rows[h].flagged)&&e.push(h)}else e=d;if(e.length||this.select_all_mode)switch(a){case "read":case "unread":this.toggle_read_status(a,e);break;case "delete":case "undelete":this.toggle_delete_status(e);break;case "flagged":case "unflagged":this.toggle_flagged_status(a,d)}};this.toggle_read_status=function(a,b){for(var d=0;d<b.length;d++)this.set_message(b[d],"unread",a=="unread"?!0:!1);var d="_uid="+this.uids_to_list(b)+
+"&_flag="+a,e=this.display_message(this.get_label("markingmessage"),"loading");this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_post("mark",d,e);for(d=0;d<b.length;d++)this.update_thread_root(b[d],a)};this.toggle_flagged_status=function(a,b){for(var d=0;d<b.length;d++)this.set_message(b[d],"flagged",a=="flagged"?!0:!1);var d="_uid="+this.uids_to_list(b)+"&_flag="+a,e=this.display_message(this.get_label("markingmessage"),"loading");this.env.search_request&&(d+="&_search="+
+this.env.search_request);this.http_post("mark",d,e)};this.toggle_delete_status=function(a){var b=this.message_list?this.message_list.rows:[];if(a.length==1)return!b.length||b[a[0]]&&!b[a[0]].deleted?this.flag_as_deleted(a):this.flag_as_undeleted(a),!0;for(var d,e=!0,f=0,g=a.length;f<g;f++)if(d=a[f],b[d]&&!b[d].deleted){e=!1;break}e?this.flag_as_undeleted(a):this.flag_as_deleted(a);return!0};this.flag_as_undeleted=function(a){for(var b=0,d=a.length;b<d;b++)this.set_message(a[b],"deleted",!1);a="_uid="+
+this.uids_to_list(a)+"&_flag=undelete";b=this.display_message(this.get_label("markingmessage"),"loading");this.env.search_request&&(a+="&_search="+this.env.search_request);this.http_post("mark",a,b);return!0};this.flag_as_deleted=function(a){for(var b="",d=[],b=this.message_list?this.message_list.rows:[],e=0,f=0,g=a.length;f<g;f++)uid=a[f],b[uid]&&(b[uid].unread&&(d[d.length]=uid),this.env.skip_deleted?(e+=this.update_thread(uid),this.message_list.remove_row(uid,this.env.display_next&&f==this.message_list.selection.length-
+1)):this.set_message(uid,"deleted",!0));this.env.skip_deleted&&this.message_list&&(this.env.display_next||this.message_list.clear_selection(),e<0||e>0&&this.delete_excessive_thread_rows());b="&_from="+(this.env.action?this.env.action:"");lock=this.display_message(this.get_label("markingmessage"),"loading");d.length&&(b+="&_ruid="+this.uids_to_list(d));this.env.skip_deleted&&this.env.display_next&&this.env.next_uid&&(b+="&_next_uid="+this.env.next_uid);this.env.search_request&&(b+="&_search="+this.env.search_request);
+this.http_post("mark","_uid="+this.uids_to_list(a)+"&_flag=delete"+b,lock);return!0};this.flag_deleted_as_read=function(a){for(var b=this.message_list?this.message_list.rows:[],d=String(a).split(","),e=0;e<d.length;e++)a=d[e],b[a]&&this.set_message(a,"unread",!1)};this.uids_to_list=function(a){return this.select_all_mode?"*":a.join(",")};this.expunge_mailbox=function(a){var b=!1,d="_mbox="+urlencode(a);a==this.env.mailbox&&(b=this.set_busy(!0,"loading"),d+="&_reload=1");this.http_post("expunge",d,
+b)};this.purge_mailbox=function(a){var b=!1,d="_mbox="+urlencode(a);if(!confirm(this.get_label("purgefolderconfirm")))return!1;a==this.env.mailbox&&(b=this.set_busy(!0,"loading"),d+="&_reload=1");this.http_post("purge",d,b)};this.purge_mailbox_test=function(){return this.env.messagecount&&(this.env.mailbox==this.env.trash_mailbox||this.env.mailbox==this.env.junk_mailbox||this.env.mailbox.match("^"+RegExp.escape(this.env.trash_mailbox)+RegExp.escape(this.env.delimiter))||this.env.mailbox.match("^"+
+RegExp.escape(this.env.junk_mailbox)+RegExp.escape(this.env.delimiter)))};this.login_user_keyup=function(a){var b=rcube_event.get_keycode(a),d=$("#rcmloginpwd");if(b==13&&d.length&&!d.val())return d.focus(),rcube_event.cancel(a);return!0};this.init_messageform=function(){if(!this.gui_objects.messageform)return!1;var a=$("[name='_from']"),b=$("[name='_to']"),d=$("input[name='_subject']"),e=$("[name='_message']").get(0),f=$("input[name='_is_html']").val()=="1",g=["cc","bcc","replyto","followupto"];
+this.init_address_input_events(b);for(var h in g)this.init_address_input_events($("[name='_"+g[h]+"']"));f||(this.set_caret_pos(e,this.env.top_posting?0:$(e).val().length),a.attr("type")=="select-one"&&$("input[name='_draft_saveid']").val()==""&&this.change_identity(a[0]));b.val()==""?b.focus():d.val()==""?d.focus():e&&e.focus();this.env.compose_focus_elem=document.activeElement;this.compose_field_hash(!0);this.auto_save_start()};this.init_address_input_events=function(a){a[bw.ie||bw.safari||bw.chrome?
+"keydown":"keypress"](function(a){return j.ksearch_keydown(a,this)}).attr("autocomplete","off")};this.check_compose_input=function(){var a,b=$("[name='_to']"),d=$("[name='_cc']"),e=$("[name='_bcc']"),f=$("[name='_from']"),g=$("[name='_subject']"),h=$("[name='_message']");if(f.attr("type")=="text"&&!rcube_check_email(f.val(),!0))return alert(this.get_label("nosenderwarning")),f.focus(),!1;d=b.val()?b.val():d.val()?d.val():e.val();if(!rcube_check_email(d.replace(/^\s+/,"").replace(/[\s,;]+$/,""),!0))return alert(this.get_label("norecipientwarning")),
+b.focus(),!1;for(var j in this.env.attachments)if(typeof this.env.attachments[j]=="object"&&!this.env.attachments[j].complete)return alert(this.get_label("notuploadedwarning")),!1;if(g.val()=="")if(b=prompt(this.get_label("nosubjectwarning"),this.get_label("nosubject")),!b&&b!=="")return g.focus(),!1;else g.val(b?b:this.get_label("nosubject"));this.stop_spellchecking();window.tinyMCE&&(a=tinyMCE.get(this.env.composebody));if(!a&&h.val()==""&&!confirm(this.get_label("nobodywarning")))return h.focus(),
+!1;else if(a){if(!a.getContent()&&!confirm(this.get_label("nobodywarning")))return a.focus(),!1;tinyMCE.triggerSave()}return!0};this.toggle_editor=function(a){if(a.mode=="html")this.display_spellcheck_controls(!1),this.plain2html($("#"+a.id).val(),a.id),tinyMCE.execCommand("mceAddControl",!1,a.id);else{var b=tinyMCE.get(a.id);b.plugins.spellchecker&&b.plugins.spellchecker.active&&b.execCommand("mceSpellCheck",!1);if(b=b.getContent()){if(!confirm(this.get_label("editorwarning")))return!1;this.html2plain(b,
+a.id)}tinyMCE.execCommand("mceRemoveControl",!1,a.id);this.display_spellcheck_controls(!0)}return!0};this.stop_spellchecking=function(){var a;if(window.tinyMCE&&(a=tinyMCE.get(this.env.composebody)))a.plugins.spellchecker&&a.plugins.spellchecker.active&&a.execCommand("mceSpellCheck");else if((a=this.env.spellcheck)&&!this.spellcheck_ready)$(a.spell_span).trigger("click"),this.set_spellcheck_state("ready")};this.display_spellcheck_controls=function(a){this.env.spellcheck&&(a||this.stop_spellchecking(),
+$(this.env.spellcheck.spell_container).css("visibility",a?"visible":"hidden"))};this.set_spellcheck_state=function(a){this.spellcheck_ready=a=="ready"||a=="no_error_found";this.enable_command("spellcheck",this.spellcheck_ready)};this.set_draft_id=function(a){$("input[name='_draft_saveid']").val(a)};this.auto_save_start=function(){if(this.env.draft_autosave)this.save_timer=self.setTimeout(function(){j.command("savedraft")},this.env.draft_autosave*1E3);this.busy=!1};this.compose_field_hash=function(a){var b,
+d="",e=$("[name='_to']").val(),f=$("[name='_cc']").val(),g=$("[name='_bcc']").val(),h=$("[name='_subject']").val();e&&(d+=e+":");f&&(d+=f+":");g&&(d+=g+":");h&&(d+=h+":");d+=window.tinyMCE&&(b=tinyMCE.get(this.env.composebody))?b.getContent():$("[name='_message']").val();if(this.env.attachments)for(var j in this.env.attachments)d+=j;if(a)this.cmp_hash=d;return d};this.change_identity=function(a,b){if(!a||!a.options)return!1;if(!b)b=this.env.show_sig;var d,e=-1,f=a.options[a.selectedIndex].value,g=
+$("[name='_message']"),h=g.val(),j=$("input[name='_is_html']").val()=="1",k=this.env.identity;d=this.env.sig_above&&(this.env.compose_mode=="reply"||this.env.compose_mode=="forward")?"---":"-- ";this.env.signatures&&this.env.signatures[f]?(this.enable_command("insert-sig",!0),this.env.compose_commands.push("insert-sig")):this.enable_command("insert-sig",!1);if(j){if(b&&this.env.signatures&&(e=tinyMCE.get(this.env.composebody),g=e.dom.get("_rc_sig"),g||(k=e.getBody(),h=e.getDoc(),g=h.createElement("div"),
+g.setAttribute("id","_rc_sig"),this.env.sig_above?(e.getWin().focus(),e=e.selection.getNode(),e.nodeName=="BODY"?(k.insertBefore(g,k.firstChild),k.insertBefore(h.createElement("br"),k.firstChild)):(k.insertBefore(g,e.nextSibling),k.insertBefore(h.createElement("br"),e.nextSibling))):(bw.ie&&k.appendChild(h.createElement("br")),k.appendChild(g))),this.env.signatures[f]))this.env.signatures[f].is_html?(k=this.env.signatures[f].text,this.env.signatures[f].plain_text.match(/^--[ -]\r?\n/)||(k=d+"<br />"+
+k)):(k=this.env.signatures[f].text,k.match(/^--[ -]\r?\n/)||(k=d+"\n"+k),k="<pre>"+k+"</pre>"),g.innerHTML=k}else b&&k&&this.env.signatures&&this.env.signatures[k]&&(k=this.env.signatures[k].is_html?this.env.signatures[k].plain_text:this.env.signatures[k].text,k=k.replace(/\r\n/g,"\n"),k.match(/^--[ -]\n/)||(k=d+"\n"+k),e=this.env.sig_above?h.indexOf(k):h.lastIndexOf(k),e>=0&&(h=h.substring(0,e)+h.substring(e+k.length,h.length))),b&&this.env.signatures&&this.env.signatures[f]?(k=this.env.signatures[f].is_html?
+this.env.signatures[f].plain_text:this.env.signatures[f].text,k=k.replace(/\r\n/g,"\n"),k.match(/^--[ -]\n/)||(k=d+"\n"+k),this.env.sig_above?e>=0?(h=h.substring(0,e)+k+h.substring(e,h.length),d=e-1):(pos=this.get_caret_pos(g.get(0)))?(h=h.substring(0,pos)+"\n"+k+"\n\n"+h.substring(pos,h.length),d=pos):(d=0,h="\n\n"+k+"\n\n"+h.replace(/^[\r\n]+/,"")):(h=h.replace(/[\r\n]+$/,""),d=!this.env.top_posting&&h.length?h.length+1:0,h+="\n\n"+k)):d=this.env.top_posting?0:h.length,g.val(h),this.set_caret_pos(g.get(0),
+d);this.env.identity=f;return!0};this.upload_file=function(a){if(!a)return!1;for(var b=!1,d=0;d<a.elements.length;d++)if(a.elements[d].type=="file"&&a.elements[d].value){b=!0;break}if(b){b=(new Date).getTime();d="rcmupload"+b;if(document.all)document.body.insertAdjacentHTML("BeforeEnd",'<iframe name="'+d+'" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>');else{var e=document.createElement("iframe");e.name=d;e.style.border="none";e.style.width=0;e.style.height=0;e.style.visibility=
+"hidden";document.body.appendChild(e)}$(d).bind("load",{ts:b},function(a){var b,d="";try{if(this.contentDocument)b=this.contentDocument;else if(this.contentWindow)b=this.contentWindow.document;d=b.childNodes[0].innerHTML}catch(e){}if(!d.match(/add2attachment/)&&(!bw.opera||rcmail.env.uploadframe&&rcmail.env.uploadframe==a.data.ts))d.match(/display_message/)||rcmail.display_message(rcmail.get_label("fileuploaderror"),"error"),rcmail.remove_from_attachment_list(a.data.ts);if(bw.opera)rcmail.env.uploadframe=
+a.data.ts});a.target=d;a.action=this.env.comm_path+"&_action=upload&_uploadid="+b;a.setAttribute("enctype","multipart/form-data");a.submit();e=this.get_label("uploading");this.env.loadingicon&&(e='<img src="'+this.env.loadingicon+'" alt="" />'+e);this.env.cancelicon&&(e='<a title="'+this.get_label("cancel")+'" onclick="return rcmail.cancel_attachment_upload(\''+b+"', '"+d+'\');" href="#cancelupload"><img src="'+this.env.cancelicon+'" alt="" /></a>'+e);this.add2attachment_list(b,{name:"",html:e,complete:!1})}this.gui_objects.attachmentform=
+a;return!0};this.add2attachment_list=function(a,b,d){if(!this.gui_objects.attachmentlist)return!1;var e=$("<li>").attr("id",a).html(b.html),f;d&&(f=document.getElementById(d))?e.replaceAll(f):e.appendTo(this.gui_objects.attachmentlist);d&&this.env.attachments[d]&&delete this.env.attachments[d];this.env.attachments[a]=b;return!0};this.remove_from_attachment_list=function(a){this.env.attachments[a]&&delete this.env.attachments[a];if(!this.gui_objects.attachmentlist)return!1;var b=this.gui_objects.attachmentlist.getElementsByTagName("li");
+for(i=0;i<b.length;i++)b[i].id==a&&this.gui_objects.attachmentlist.removeChild(b[i])};this.remove_attachment=function(a){a&&this.env.attachments[a]&&this.http_post("remove-attachment","_file="+urlencode(a));return!0};this.cancel_attachment_upload=function(a,b){if(!a||!b)return!1;this.remove_from_attachment_list(a);$("iframe[name='"+b+"']").remove();return!1};this.add_contact=function(a){a&&this.http_post("addcontact","_address="+a);return!0};this.qsearch=function(a){if(a!=""){var b="";if(this.message_list){if(this.clear_message_list(),
+this.env.search_mods){var d=this.env.search_mods[this.env.mailbox]?this.env.search_mods[this.env.mailbox]:this.env.search_mods["*"];if(d){var e=[],f;for(f in d)e.push(f);b+="&_headers="+e.join(",")}}}else this.contact_list&&(this.contact_list.clear(!0),this.show_contentframe(!1));this.gui_objects.search_filter&&(b+="&_filter="+this.gui_objects.search_filter.value);this.env.current_page=1;d=this.set_busy(!0,"searching");this.http_request("search","_q="+urlencode(a)+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):
+"")+(this.env.source?"&_source="+urlencode(this.env.source):"")+(this.env.group?"&_gid="+urlencode(this.env.group):"")+(b?b:""),d)}return!0};this.reset_qsearch=function(){if(this.gui_objects.qsearchbox)this.gui_objects.qsearchbox.value="";this.env.search_request=null;return!0};this.sent_successfully=function(a,b){this.display_message(b,a);window.setTimeout(function(){j.list_mailbox()},500)};this.ksearch_keydown=function(a,b){this.ksearch_timer&&clearTimeout(this.ksearch_timer);var d;d=rcube_event.get_keycode(a);
+var e=rcube_event.get_modifier(a);switch(d){case 38:case 40:if(!this.ksearch_pane)break;e=d==38?1:0;d=document.getElementById("rcmksearchSelected");if(!d)d=this.ksearch_pane.__ul.firstChild;d&&this.ksearch_select(e?d.previousSibling:d.nextSibling);return rcube_event.cancel(a);case 9:if(e==SHIFT_KEY)break;case 13:if(this.ksearch_selected===null||!this.ksearch_input||!this.ksearch_value)break;this.insert_recipient(this.ksearch_selected);this.ksearch_hide();return rcube_event.cancel(a);case 27:this.ksearch_hide();
+break;case 37:case 39:if(e!=SHIFT_KEY)return}this.ksearch_timer=window.setTimeout(function(){j.ksearch_get_results()},200);this.ksearch_input=b;return!0};this.ksearch_select=function(a){var b=$("#rcmksearchSelected");b[0]&&a&&b.removeAttr("id").removeClass("selected");if(a)$(a).attr("id","rcmksearchSelected").addClass("selected"),this.ksearch_selected=a._rcm_id};this.insert_recipient=function(a){if(this.env.contacts[a]&&this.ksearch_input){var b=this.ksearch_input.value,d=this.get_caret_pos(this.ksearch_input),
+d=b.lastIndexOf(this.ksearch_value,d),e="",f=b.substring(0,d),b=b.substring(d+this.ksearch_value.length,b.length);typeof this.env.contacts[a]=="object"&&this.env.contacts[a].id?(e+=this.env.contacts[a].name+", ",this.group2expand=$.extend({},this.env.contacts[a]),this.group2expand.input=this.ksearch_input,this.http_request("group-expand","_source="+urlencode(this.env.contacts[a].source)+"&_gid="+urlencode(this.env.contacts[a].id),!1)):typeof this.env.contacts[a]=="string"&&(e=this.env.contacts[a]+
+", ");this.ksearch_input.value=f+e+b;d+=e.length;this.ksearch_input.setSelectionRange&&this.ksearch_input.setSelectionRange(d,d)}};this.replace_group_recipients=function(a,b){if(this.group2expand&&this.group2expand.id==a)this.group2expand.input.value=this.group2expand.input.value.replace(this.group2expand.name,b),this.group2expand=null};this.ksearch_get_results=function(){var a=this.ksearch_input?this.ksearch_input.value:null;if(a!==null){this.ksearch_pane&&this.ksearch_pane.is(":visible")&&this.ksearch_pane.hide();
+var b=this.get_caret_pos(this.ksearch_input),d=a.lastIndexOf(",",b-1),a=a.substring(d+1,b),b=this.env.autocomplete_min_length,a=$.trim(a);if(a!=this.ksearch_value)if(a.length<b){if(!this.env.acinfo)a=this.get_label("autocompletechars"),a=a.replace("$min",b),this.env.acinfo=this.display_message(a)}else if(this.env.acinfo&&a.length==b&&this.hide_message(this.env.acinfo),b=this.ksearch_value,this.ksearch_value=a,a.length&&(!b||!b.length||!this.env.contacts||this.env.contacts.length||a.indexOf(b)!=0))b=
+this.display_message(this.get_label("searching"),"loading"),this.http_post("autocomplete","_search="+urlencode(a),b)}};this.ksearch_query_results=function(a,b){if(!(this.ksearch_value&&b!=this.ksearch_value))this.env.contacts=a?a:[],this.ksearch_display_results(this.env.contacts)};this.ksearch_display_results=function(a){if(a.length&&this.ksearch_input&&this.ksearch_value){var b,d,e,f=this.ksearch_value;if(!this.ksearch_pane)b=$("<ul>"),this.ksearch_pane=$("<div>").attr("id","rcmKSearchpane").css({position:"absolute",
+"z-index":3E4}).append(b).appendTo(document.body),this.ksearch_pane.__ul=b[0];b=this.ksearch_pane.__ul;b.innerHTML="";for(i=0;i<a.length;i++)e=typeof a[i]=="object"?a[i].name:a[i],d=document.createElement("LI"),d.innerHTML=e.replace(RegExp("("+RegExp.escape(f)+")","ig"),"##$1%%").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/##([^%]+)%%/g,"<b>$1</b>"),d.onmouseover=function(){j.ksearch_select(this)},d.onmouseup=function(){j.ksearch_click(this)},d._rcm_id=i,b.appendChild(d);$(b.firstChild).attr("id",
+"rcmksearchSelected").addClass("selected");this.ksearch_selected=0;a=$(this.ksearch_input).offset();this.ksearch_pane.css({left:a.left+"px",top:a.top+this.ksearch_input.offsetHeight+"px"}).show()}else this.ksearch_hide()};this.ksearch_click=function(a){this.ksearch_input&&this.ksearch_input.focus();this.insert_recipient(a._rcm_id);this.ksearch_hide()};this.ksearch_blur=function(){this.ksearch_timer&&clearTimeout(this.ksearch_timer);this.ksearch_value="";this.ksearch_input=null;this.ksearch_hide()};
+this.ksearch_hide=function(){this.ksearch_selected=null;this.ksearch_pane&&this.ksearch_pane.hide()};this.contactlist_keypress=function(a){a.key_pressed==a.DELETE_KEY&&this.command("delete")};this.contactlist_select=function(a){this.preview_timer&&clearTimeout(this.preview_timer);var b,d=this;(b=a.get_single_selection())?this.preview_timer=window.setTimeout(function(){d.load_contact(b,"show")},200):this.env.contentframe&&this.show_contentframe(!1);this.enable_command("compose",a.selection.length>
+0);this.enable_command("edit",b&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly?!0:!1);this.enable_command("delete",a.selection.length&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly);return!1};this.list_contacts=function(a,b,d){var e="",f=window;if(!a)a=this.env.source;if(d&&this.current_page==d&&a==this.env.source&&b==this.env.group)return!1;if(a!=this.env.source)d=this.env.current_page=1,this.reset_qsearch();else if(b!=this.env.group)d=
+this.env.current_page=1;this.select_folder(b?"G"+a+b:a,this.env.group?"G"+this.env.source+this.env.group:this.env.source);this.env.source=a;this.env.group=b;this.gui_objects.contactslist?this.list_contacts_remote(a,b,d):(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(f=window.frames[this.env.contentframe],e="&_framed=1"),b&&(e+="&_gid="+b),d&&(e+="&_page="+d),this.env.search_request&&(e+="&_search="+this.env.search_request),this.set_busy(!0,"loading"),f.location.href=
+this.env.comm_path+(a?"&_source="+urlencode(a):"")+e)};this.list_contacts_remote=function(a,b,d){this.contact_list.clear(!0);this.show_contentframe(!1);this.enable_command("delete","compose",!1);var d=(a?"_source="+urlencode(a):"")+(d?(a?"&":"")+"_page="+d:""),e=this.set_busy(!0,"loading");this.env.source=a;(this.env.group=b)&&(d+="&_gid="+b);this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_request("list",d,e)};this.load_contact=function(a,b,d){var e="",f=window;if(this.env.contentframe&&
+window.frames&&window.frames[this.env.contentframe])e="&_framed=1",f=window.frames[this.env.contentframe],this.show_contentframe(!0);else if(d)return!1;if(b&&(a||b=="add")&&!this.drag_active)this.env.group&&(e+="&_gid="+urlencode(this.env.group)),this.set_busy(!0),f.location.href=this.env.comm_path+"&_action="+b+"&_source="+urlencode(this.env.source)+"&_cid="+urlencode(a)+e;return!0};this.copy_contact=function(a,b){a||(a=this.contact_list.get_selection().join(","));b.type=="group"&&b.source==this.env.source?
+this.http_post("group-addmembers","_cid="+urlencode(a)+"&_source="+urlencode(this.env.source)+"&_gid="+urlencode(b.id)):b.type=="group"&&!this.env.address_sources[b.source].readonly?this.http_post("copy","_cid="+urlencode(a)+"&_source="+urlencode(this.env.source)+"&_to="+urlencode(b.source)+"&_togid="+urlencode(b.id)+(this.env.group?"&_gid="+urlencode(this.env.group):"")):b.id!=this.env.source&&a&&this.env.address_sources[b.id]&&!this.env.address_sources[b.id].readonly&&this.http_post("copy","_cid="+
+urlencode(a)+"&_source="+urlencode(this.env.source)+"&_to="+urlencode(b.id)+(this.env.group?"&_gid="+urlencode(this.env.group):""))};this.delete_contacts=function(){var a=this.contact_list.get_selection();if((a.length||this.env.cid)&&confirm(this.get_label("deletecontactconfirm"))){var b,d=[],e="";if(this.env.cid)d.push(this.env.cid);else{for(var f=0;f<a.length;f++)b=a[f],d.push(b),this.contact_list.remove_row(b,f==a.length-1);a.length==1&&this.show_contentframe(!1)}this.env.group&&(e+="&_gid="+urlencode(this.env.group));
+this.env.search_request&&(e+="&_search="+this.env.search_request);this.http_post("delete","_cid="+urlencode(d.join(","))+"&_source="+urlencode(this.env.source)+"&_from="+(this.env.action?this.env.action:"")+e);return!0}};this.update_contact_row=function(a,b,d){var e;if(this.contact_list.rows[a]&&(e=this.contact_list.rows[a].obj)){for(var f=0;f<b.length;f++)e.cells[f]&&$(e.cells[f]).html(b[f]);if(d)e.id="rcmrow"+d,this.contact_list.remove_row(a),this.contact_list.init_row(e),this.contact_list.selection[0]=
+d,e.style.display="";return!0}return!1};this.add_contact_row=function(a,b){if(!this.gui_objects.contactslist||!this.gui_objects.contactslist.tBodies[0])return!1;var d=this.gui_objects.contactslist.tBodies[0].rows.length%2,e=document.createElement("tr");e.id="rcmrow"+a;e.className="contact "+(d?"even":"odd");this.contact_list.in_selection(a)&&(e.className+=" selected");for(var f in b)col=document.createElement("td"),col.className=String(f).toLowerCase(),col.innerHTML=b[f],e.appendChild(col);this.contact_list.insert_row(e);
+this.enable_command("export",this.contact_list.rowcount>0)};this.group_create=function(){if(this.gui_objects.folderlist&&this.env.address_sources[this.env.source].groups){if(!this.name_input)this.name_input=$("<input>").attr("type","text"),this.name_input.bind("keydown",function(a){return rcmail.add_input_keydown(a)}),this.name_input_li=$("<li>").addClass("contactgroup").append(this.name_input),this.name_input_li.insertAfter(this.get_folder_li(this.env.source));this.name_input.select().focus()}};
+this.group_rename=function(){if(this.env.group&&this.gui_objects.folderlist){if(!this.name_input){this.enable_command("list","listgroup",!1);this.name_input=$("<input>").attr("type","text").val(this.env.contactgroups["G"+this.env.source+this.env.group].name);this.name_input.bind("keydown",function(a){return rcmail.add_input_keydown(a)});this.env.group_renaming=!0;var a,b=this.get_folder_li(this.env.source+this.env.group,"rcmliG");b&&(a=b.firstChild)&&$(a).hide().before(this.name_input)}this.name_input.select().focus()}};
+this.group_delete=function(){this.env.group&&this.http_post("group-delete","_source="+urlencode(this.env.source)+"&_gid="+urlencode(this.env.group),!0)};this.remove_group_item=function(a){var b,d="G"+a.source+a.id;if(b=this.get_folder_li(d))this.triggerEvent("group_delete",{source:a.source,id:a.id,li:b}),b.parentNode.removeChild(b),delete this.env.contactfolders[d],delete this.env.contactgroups[d];this.list_contacts(a.source,0)};this.add_input_keydown=function(a){a=rcube_event.get_keycode(a);if(a==
+13){if(a=this.name_input.val()){var b=this.set_busy(!0,"loading");this.env.group_renaming?this.http_post("group-rename","_source="+urlencode(this.env.source)+"&_gid="+urlencode(this.env.group)+"&_name="+urlencode(a),b):this.http_post("group-create","_source="+urlencode(this.env.source)+"&_name="+urlencode(a),b)}return!1}else a==27&&this.reset_add_input();return!0};this.reset_add_input=function(){if(this.name_input){if(this.env.group_renaming)this.name_input.parent().children().last().show(),this.env.group_renaming=
+!1;this.name_input.remove();this.name_input_li&&this.name_input_li.remove();this.name_input=this.name_input_li=null}this.enable_command("list","listgroup",!0)};this.insert_contact_group=function(a){this.reset_add_input();a.type="group";var b="G"+a.source+a.id;this.env.contactfolders[b]=this.env.contactgroups[b]=a;var d=$("<a>").attr("href","#").bind("click",function(){return rcmail.command("listgroup",a,this)}).html(a.name),b=$("<li>").attr("id","rcmli"+b).addClass("contactgroup").append(d).insertAfter(this.get_folder_li(a.source));
+this.triggerEvent("group_insert",{id:a.id,source:a.source,name:a.name,li:b[0]})};this.update_contact_group=function(a){this.reset_add_input();var b="G"+a.source+a.id,d,e=this.get_folder_li(b);if(e&&(d=e.firstChild)&&d.tagName.toLowerCase()=="a")d.innerHTML=a.name;this.env.contactfolders[b].name=this.env.contactgroups[b].name=a.name;this.triggerEvent("group_update",{id:a.id,source:a.source,name:a.name,li:e[0]})};this.init_subscription_list=function(){var a=this;this.subscription_list=new rcube_list_widget(this.gui_objects.subscriptionlist,
+{multiselect:!1,draggable:!0,keyboard:!1,toggleselect:!0});this.subscription_list.addEventListener("select",function(b){a.subscription_select(b)});this.subscription_list.addEventListener("dragstart",function(){a.drag_active=!0});this.subscription_list.addEventListener("dragend",function(b){a.subscription_move_folder(b)});this.subscription_list.row_init=function(b){b.obj.onmouseover=function(){a.focus_subscription(b.id)};b.obj.onmouseout=function(){a.unfocus_subscription(b.id)}};this.subscription_list.init()};
+this.section_select=function(a){if(a=a.get_single_selection()){var b="",d=window;this.set_busy(!0);this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(b="&_framed=1",d=window.frames[this.env.contentframe]);d.location.href=this.env.comm_path+"&_action=edit-prefs&_section="+a+b}return!0};this.identity_select=function(a){var b;(b=a.get_single_selection())&&this.load_identity(b,"edit-identity")};this.load_identity=function(a,b){if(b=="edit-identity"&&(!a||a==this.env.iid))return!1;
+var d="",e=window;if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe])d="&_framed=1",e=window.frames[this.env.contentframe],document.getElementById(this.env.contentframe).style.visibility="inherit";if(b&&(a||b=="add-identity"))this.set_busy(!0),e.location.href=this.env.comm_path+"&_action="+b+"&_iid="+a+d;return!0};this.delete_identity=function(a){var b=this.identity_list.get_selection();if(b.length||this.env.iid)return a||(a=this.env.iid?this.env.iid:b[0]),this.goto_url("delete-identity",
+"_iid="+a+"&_token="+this.env.request_token,!0),!0};this.focus_subscription=function(a){var b,d,e=RegExp.escape(this.env.delimiter),f=RegExp("["+e+"]?[^"+e+"]+$");if(this.drag_active&&this.env.mailbox&&(b=document.getElementById(a)))this.env.subscriptionrows[a]&&(d=this.env.subscriptionrows[a][0])?this.check_droptarget(d)&&!this.env.subscriptionrows[this.get_folder_row_id(this.env.mailbox)][2]&&d!=this.env.mailbox.replace(f,"")&&!d.match(RegExp("^"+RegExp.escape(this.env.mailbox+this.env.delimiter)))&&
+(this.set_env("dstfolder",d),$(b).addClass("droptarget")):this.env.mailbox.match(RegExp(e))&&(this.set_env("dstfolder",this.env.delimiter),$(this.subscription_list.frame).addClass("droptarget"))};this.unfocus_subscription=function(a){var b=$("#"+a);this.set_env("dstfolder",null);this.env.subscriptionrows[a]&&b[0]?b.removeClass("droptarget"):$(this.subscription_list.frame).removeClass("droptarget")};this.subscription_select=function(a){var b,d;a&&(b=a.get_single_selection())&&(d=this.env.subscriptionrows["rcmrow"+
+b])?(this.set_env("mailbox",d[0]),this.show_folder(d[0]),this.enable_command("delete-folder",!d[2])):(this.env.mailbox=null,this.show_contentframe(!1),this.enable_command("delete-folder","purge",!1))};this.subscription_move_folder=function(){var a=RegExp.escape(this.env.delimiter),b;this.env.mailbox&&this.env.dstfolder&&this.env.dstfolder!=this.env.mailbox&&this.env.dstfolder!=this.env.mailbox.replace(RegExp("["+a+"]?[^"+a+"]+$"),"")&&(b=RegExp("[^"+a+"]*["+a+"]","g"),a=this.set_busy(!0,"foldermoving"),
+b=this.env.mailbox.replace(b,""),b=this.env.dstfolder==this.env.delimiter?b:this.env.dstfolder+this.env.delimiter+b,this.http_post("rename-folder","_folder_oldname="+urlencode(this.env.mailbox)+"&_folder_newname="+urlencode(b),a));this.drag_active=!1;this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder))};this.create_folder=function(){this.show_folder("",this.env.mailbox)};this.delete_folder=function(a){if((a=this.env.subscriptionrows[this.get_folder_row_id(a?a:this.env.mailbox)][0])&&
+confirm(this.get_label("deletefolderconfirm"))){var b=this.set_busy(!0,"folderdeleting");this.http_post("delete-folder","_mbox="+urlencode(a),b)}};this.add_folder_row=function(a,b,d,e){if(!this.gui_objects.subscriptionlist)return!1;var f,g;for(g in this.env.subscriptionrows)if(this.env.subscriptionrows[g]!=null&&!this.env.subscriptionrows[g][2]){f=g;break}var h;g=this.gui_objects.subscriptionlist.tBodies[0];var j="rcmrow"+(g.childNodes.length+1),k=this.subscription_list.get_single_selection();if(d&&
+d.id)f=j=d.id;if(!j||!f||!(h=document.getElementById(f)))return this.goto_url("folders"),!1;f=this.clone_table_row(h);f.id=j;e&&(e=this.get_folder_row_id(e))?g.insertBefore(f,document.getElementById(e)):g.appendChild(f);d&&g.removeChild(d);this.env.subscriptionrows[f.id]=[a,b,0];f.cells[0].innerHTML=b;if(!d)f.cells[1].innerHTML="*",$('input[name="_subscribed[]"]',f).val(a).attr("checked",!0);this.init_subscription_list();k&&document.getElementById("rcmrow"+k)&&this.subscription_list.select_row(k);
+document.getElementById(j).scrollIntoView&&document.getElementById(j).scrollIntoView()};this.replace_folder_row=function(a,b,d,e){a=this.get_folder_row_id(a);a=document.getElementById(a);this.add_folder_row(b,d,a,e)};this.remove_folder_row=function(a){var b;if((a=this.get_folder_row_id(a))&&(b=document.getElementById(a)))b.style.display="none"};this.subscribe=function(a){if(a){var b=this.display_message(this.get_label("foldersubscribing"),"loading");this.http_post("subscribe","_mbox="+urlencode(a),
+b)}};this.unsubscribe=function(a){if(a){var b=this.display_message(this.get_label("folderunsubscribing"),"loading");this.http_post("unsubscribe","_mbox="+urlencode(a),b)}};this.get_folder_row_id=function(a){for(var b in this.env.subscriptionrows)if(this.env.subscriptionrows[b]&&this.env.subscriptionrows[b][0]==a)break;return b};this.clone_table_row=function(a){for(var b,d,e=document.createElement("tr"),f=0;f<a.cells.length;f++){b=a.cells[f];d=document.createElement("td");if(b.className)d.className=
+b.className;b.align&&d.setAttribute("align",b.align);d.innerHTML=b.innerHTML;e.appendChild(d)}return e};this.show_folder=function(a,b,d){var e=window,a="&_action=edit-folder&_mbox="+urlencode(a);b&&(a+="&_path="+urlencode(b));this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(e=window.frames[this.env.contentframe],a+="&_framed=1");if(String(e.location.href).indexOf(a)>=0&&!d)this.show_contentframe(!0);else{if(!this.env.frame_lock)(parent.rcmail?parent.rcmail:this).env.frame_lock=
+this.set_busy(!0,"loading");e.location.href=this.env.comm_path+a}};this.disable_subscription=function(a){(a=this.get_folder_row_id(a))&&$('input[name="_subscribed[]"]',$("#"+a)).attr("disabled",!0)};this.folder_size=function(a){var b=this.set_busy(!0,"loading");this.http_post("folder-size","_mbox="+urlencode(a),b)};this.folder_size_update=function(a){$("#folder-size").replaceWith(a)};this.set_page_buttons=function(){this.enable_command("nextpage","lastpage",this.env.pagecount>this.env.current_page);
+this.enable_command("previouspage","firstpage",this.env.current_page>1)};this.init_buttons=function(){for(var a in this.buttons)if(typeof a=="string")for(var b=0;b<this.buttons[a].length;b++){var d=this.buttons[a][b],e=document.getElementById(d.id);if(e){var f=!1;if(d.type=="image")e=e.parentNode,f=!0;e._command=a;e._id=d.id;if(d.sel&&(e.onmousedown=function(){return rcmail.button_sel(this._command,this._id)},e.onmouseup=function(){return rcmail.button_out(this._command,this._id)},f))(new Image).src=
+d.sel;if(d.over&&(e.onmouseover=function(){return rcmail.button_over(this._command,this._id)},e.onmouseout=function(){return rcmail.button_out(this._command,this._id)},f))(new Image).src=d.over}}};this.set_button=function(a,b){var d,e,f=this.buttons[a];if(!f||!f.length)return!1;for(var g=0;g<f.length;g++){d=f[g];if((e=document.getElementById(d.id))&&d.type=="image"&&!d.status){if(d.pas=e._original_src?e._original_src:e.src,e.runtimeStyle&&e.runtimeStyle.filter&&e.runtimeStyle.filter.match(/src=['"]([^'"]+)['"]/))d.pas=
+RegExp.$1}else if(e&&!d.status)d.pas=String(e.className);if(e&&d.type=="image"&&d[b])d.status=b,e.src=d[b];else if(e&&typeof d[b]!="undefined")d.status=b,e.className=d[b];if(e&&d.type=="input")d.status=b,e.disabled=!b}};this.set_alttext=function(a,b){if(this.buttons[a]&&this.buttons[a].length)for(var d,e,f,g=0;g<this.buttons[a].length;g++)d=this.buttons[a][g],e=document.getElementById(d.id),d.type=="image"&&e?(e.setAttribute("alt",this.get_label(b)),(f=e.parentNode)&&f.tagName.toLowerCase()=="a"&&
+f.setAttribute("title",this.get_label(b))):e&&e.setAttribute("title",this.get_label(b))};this.button_over=function(a,b){var d,e,f=this.buttons[a];if(!f||!f.length)return!1;for(var g=0;g<f.length;g++)if(d=f[g],d.id==b&&d.status=="act"&&(e=document.getElementById(d.id))&&d.over)d.type=="image"?e.src=d.over:e.className=d.over};this.button_sel=function(a,b){var d,e,f=this.buttons[a];if(f&&f.length)for(var g=0;g<f.length;g++)if(d=f[g],d.id==b&&d.status=="act"){if((e=document.getElementById(d.id))&&d.sel)d.type==
+"image"?e.src=d.sel:e.className=d.sel;this.buttons_sel[b]=a}};this.button_out=function(a,b){var d,e,f=this.buttons[a];if(f&&f.length)for(var g=0;g<f.length;g++)if(d=f[g],d.id==b&&d.status=="act"&&(e=document.getElementById(d.id))&&d.act)d.type=="image"?e.src=d.act:e.className=d.act};this.set_pagetitle=function(a){if(a&&document.title)document.title=a};this.display_message=function(a,b){if(this.is_framed())return parent.rcmail.display_message(a,b);if(!this.gui_objects.message){if(b!="loading")this.pending_message=
+[a,b];return!1}var b=b?b:"notice",d=this,e=a,f=b+(new Date).getTime(),g=this.message_time*(b=="error"||b=="warning"?2:1);b=="loading"&&(e="loading",g=this.env.request_timeout*1E3,a||(a=this.get_label("loading")));if(this.messages[e])return this.messages[e].obj&&this.messages[e].obj.html(a),b=="loading"&&this.messages[e].labels.push({id:f,msg:a}),this.messages[e].elements.push(f),window.setTimeout(function(){d.hide_message(f,b=="loading")},g),f;var h=$("<div>").addClass(b).html(a).data("key",e);$(this.gui_objects.message).append(h).show();
+this.messages[e]={obj:h,elements:[f]};b=="loading"?this.messages[e].labels=[{id:f,msg:a}]:h.click(function(){return d.hide_message(h)});window.setTimeout(function(){d.hide_message(f,b=="loading")},g);return f};this.hide_message=function(a,b){if(this.is_framed())return parent.rcmail.hide_message(a,b);var d,e,f,g,h=this.messages;if(typeof a=="object")$(a)[b?"fadeOut":"hide"](),g=$(a).data("key"),this.messages[g]&&delete this.messages[g];else for(d in h)for(e in h[d].elements)if(h[d]&&h[d].elements[e]==
+a)if(h[d].elements.splice(e,1),h[d].elements.length){if(d=="loading")for(f in h[d].labels)h[d].labels[f].id==a?delete h[d].labels[f]:g=h[d].labels[f].msg,h[d].obj.html(g)}else h[d].obj[b?"fadeOut":"hide"](),delete h[d]};this.select_folder=function(a,b,d){if(this.gui_objects.folderlist){var e,f;(e=this.get_folder_li(b,d))&&$(e).removeClass("selected").addClass("unfocused");(f=this.get_folder_li(a,d))&&$(f).removeClass("unfocused").addClass("selected");this.triggerEvent("selectfolder",{folder:a,old:b,
+prefix:d})}};this.get_folder_li=function(a,b){b||(b="rcmli");if(this.gui_objects.folderlist)return a=String(a).replace(this.identifier_expr,"_"),document.getElementById(b+a);return null};this.set_message_coltypes=function(a,b){var d=this.message_list,e=d?d.list.tHead:null,f,g,h,j;this.env.coltypes=a;if(e){if(b){g=document.createElement("thead");h=document.createElement("tr");c=0;for(j=b.length;c<j;c++){f=document.createElement("td");f.innerHTML=b[c].html;if(b[c].id)f.id=b[c].id;if(b[c].className)f.className=
+b[c].className;h.appendChild(f)}g.appendChild(h);e.parentNode.replaceChild(g,e);e=g}h=0;for(j=this.env.coltypes.length;h<j;h++)if(g=this.env.coltypes[h],(f=e.rows[0].cells[h])&&(g=="from"||g=="to")){f.id="rcm"+g;if(f.firstChild&&f.firstChild.tagName.toLowerCase()=="a")f=f.firstChild,f.onclick=function(){return rcmail.command("sort",this.__col,this)},f.__col=g;f.innerHTML=this.get_label(g)}}this.env.subject_col=null;this.env.flagged_col=null;this.env.status_col=null;if((h=$.inArray("subject",this.env.coltypes))>=
+0)if(this.set_env("subject_col",h),d)d.subject_col=h;(h=$.inArray("flag",this.env.coltypes))>=0&&this.set_env("flagged_col",h);(h=$.inArray("status",this.env.coltypes))>=0&&this.set_env("status_col",h);d&&d.init_header()};this.set_rowcount=function(a){$(this.gui_objects.countdisplay).html(a);this.set_page_buttons()};this.set_mailboxname=function(a){if(this.gui_objects.mailboxname&&a)this.gui_objects.mailboxname.innerHTML=a};this.set_quota=function(a){a&&this.gui_objects.quotadisplay&&(typeof a=="object"&&
+a.type=="image"?this.percent_indicator(this.gui_objects.quotadisplay,a):$(this.gui_objects.quotadisplay).html(a))};this.set_unread_count=function(a,b,d){if(!this.gui_objects.mailboxlist)return!1;this.env.unread_counts[a]=b;this.set_unread_count_display(a,d)};this.set_unread_count_display=function(a,b){var d,e,f,g,h,j;if(f=this.get_folder_li(a)){g=this.env.unread_counts[a]?this.env.unread_counts[a]:0;e=f.getElementsByTagName("a")[0];d=/\s+\([0-9]+\)$/i;h=0;if((j=f.getElementsByTagName("div")[0])&&
+j.className.match(/collapsed/))for(var k in this.env.unread_counts)k.indexOf(a+this.env.delimiter)==0&&(h+=this.env.unread_counts[k]);g&&e.innerHTML.match(d)?e.innerHTML=e.innerHTML.replace(d," ("+g+")"):g?e.innerHTML+=" ("+g+")":e.innerHTML=e.innerHTML.replace(d,"");d=RegExp(RegExp.escape(this.env.delimiter)+"[^"+RegExp.escape(this.env.delimiter)+"]+$");a.match(d)&&this.set_unread_count_display(a.replace(d,""),!1);g+h>0?$(f).addClass("unread"):$(f).removeClass("unread")}d=/^\([0-9]+\)\s+/i;b&&document.title&&
+(e="",e=String(document.title),e=g&&e.match(d)?e.replace(d,"("+g+") "):g?"("+g+") "+e:e.replace(d,""),this.set_pagetitle(e))};this.new_message_focus=function(){this.env.framed&&window.parent?window.parent.focus():window.focus()};this.toggle_prefer_html=function(a){var b;if(b=document.getElementById("rcmfd_addrbook_show_images"))b.disabled=!a.checked};this.toggle_preview_pane=function(a){var b;if(b=document.getElementById("rcmfd_preview_pane_mark_read"))b.disabled=!a.checked};this.set_headers=function(a){this.gui_objects.all_headers_row&&
+this.gui_objects.all_headers_box&&a&&$(this.gui_objects.all_headers_box).html(a).show()};this.load_headers=function(a){if(this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&this.env.uid)$(a).removeClass("show-headers").addClass("hide-headers"),$(this.gui_objects.all_headers_row).show(),a.onclick=function(){rcmail.hide_headers(a)},this.gui_objects.all_headers_box.innerHTML||this.http_post("headers","_uid="+this.env.uid,this.display_message(this.get_label("loading"),"loading"))};this.hide_headers=
+function(a){if(this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box)$(a).removeClass("hide-headers").addClass("show-headers"),$(this.gui_objects.all_headers_row).hide(),a.onclick=function(){rcmail.load_headers(a)}};this.percent_indicator=function(a,b){if(!b||!a)return!1;var d=b.width?b.width:this.env.indicator_width?this.env.indicator_width:100,e=b.height?b.height:this.env.indicator_height?this.env.indicator_height:14,f=b.percent?Math.abs(parseInt(b.percent)):0,g=parseInt(f/100*d),h=
+$(a).position();h.top=Math.max(0,h.top);h.left=Math.max(0,h.left);this.env.indicator_width=d;this.env.indicator_height=e;g>d&&(g=d,f=100);if(b.title)b.title=this.get_label("quota")+": "+b.title;var j=$("<div>");j.css({position:"absolute",top:h.top,left:h.left,width:d+"px",height:e+"px",zIndex:100,lineHeight:e+"px"}).attr("title",b.title).addClass("quota_text").html(f+"%");var k=$("<div>");k.css({position:"absolute",top:h.top+1,left:h.left+1,width:g+"px",height:e+"px",zIndex:99});g=$("<div>");g.css({position:"absolute",
+top:h.top+1,left:h.left+1,width:d+"px",height:e+"px",zIndex:98}).addClass("quota_bg");f>=80?(j.addClass(" quota_text_high"),k.addClass("quota_high")):f>=55?(j.addClass(" quota_text_mid"),k.addClass("quota_mid")):(j.addClass(" quota_text_normal"),k.addClass("quota_low"));$(a).html("").append(k).append(g).append(j);$("#quotaimg").attr("title",b.title)};this.html2plain=function(a,b){var d=this,e=this.set_busy(!0,"converting");console.log("HTTP POST: ?_task=utils&_action=html2text");$.ajax({type:"POST",
+url:"?_task=utils&_action=html2text",data:a,contentType:"application/octet-stream",error:function(a,b,h){d.http_error(a,b,h,e)},success:function(a){d.set_busy(!1,null,e);$(document.getElementById(b)).val(a);console.log(a)}})};this.plain2html=function(a,b){var d=this.set_busy(!0,"converting");$(document.getElementById(b)).val("<pre>"+a+"</pre>");this.set_busy(!1,null,d)};this.redirect=function(a,b){(b||b===null)&&this.set_busy(!0);this.env.framed&&window.parent?parent.location.href=a:location.href=
+a};this.goto_url=function(a,b,d){var e=this.env.comm_path,b=b?"&"+b:"";if(a.match(/([a-z]+)\/([a-z-_]+)/))a=RegExp.$2,e=e.replace(/\_task=[a-z]+/,"_task="+RegExp.$1);this.redirect(e+"&_action="+a+b,d)};this.http_request=function(a,b,d){var e=this.env.comm_path;if(a.match(/([a-z]+)\/([a-z-_]+)/))a=RegExp.$2,e=e.replace(/\_task=[a-z]+/,"_task="+RegExp.$1);var f=this.triggerEvent("request"+a,b);if(typeof f!="undefined")if(f===!1)return!1;else b=f;e+="&_remote=1&_action="+a+(b?"&":"")+b;console.log("HTTP GET: "+
+e);$.ajax({type:"GET",url:e,data:{_unlock:d?d:0},dataType:"json",success:function(a){j.http_response(a)},error:function(a,b,e){rcmail.http_error(a,b,e,d)}})};this.http_post=function(a,b,d){var e=this.env.comm_path;if(a.match(/([a-z]+)\/([a-z-_]+)/))a=RegExp.$2,e=e.replace(/\_task=[a-z]+/,"_task="+RegExp.$1);e+="&_action="+a;b&&typeof b=="object"?(b._remote=1,b._unlock=d?d:0):b+=(b?"&":"")+"_remote=1"+(d?"&_unlock="+d:"");a=this.triggerEvent("request"+a,b);if(typeof a!="undefined")if(a===!1)return!1;
+else b=a;console.log("HTTP POST: "+e);$.ajax({type:"POST",url:e,data:b,dataType:"json",success:function(a){j.http_response(a)},error:function(a,b,e){rcmail.http_error(a,b,e,d)}})};this.http_response=function(a){if(a){a.unlock&&this.set_busy(!1);this.triggerEvent("responsebefore",{response:a});this.triggerEvent("responsebefore"+a.action,{response:a});a.env&&this.set_env(a.env);if(typeof a.texts=="object")for(var b in a.texts)typeof a.texts[b]=="string"&&this.add_label(b,a.texts[b]);a.exec&&(console.log(a.exec),
+eval(a.exec));if(a.callbacks&&a.callbacks.length)for(b=0;b<a.callbacks.length;b++)this.triggerEvent(a.callbacks[b][0],a.callbacks[b][1]);switch(a.action){case "delete":this.task=="addressbook"&&(b=this.contact_list.get_selection(),this.enable_command("compose",b&&this.contact_list.rows[b]),this.enable_command("delete","edit",b&&this.contact_list.rows[b]&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly),this.enable_command("export",this.contact_list&&this.contact_list.rowcount>
+0));case "moveto":this.env.action=="show"?(this.enable_command(this.env.message_commands,!0),this.env.list_post||this.enable_command("reply-list",!1)):this.task=="addressbook"&&this.triggerEvent("listupdate",{folder:this.env.source,rowcount:this.contact_list.rowcount});case "purge":case "expunge":this.task=="mail"&&(this.env.messagecount||(this.env.contentframe&&this.show_contentframe(!1),this.enable_command(this.env.message_commands,"purge","expunge","select-all","select-none","sort","expand-all",
+"expand-unread","collapse-all",!1)),this.message_list&&this.triggerEvent("listupdate",{folder:this.env.mailbox,rowcount:this.message_list.rowcount}));break;case "check-recent":case "getunread":case "search":case "list":if(this.task=="mail"){if(this.enable_command("show","expunge","select-all","select-none","sort",this.env.messagecount>0),this.enable_command("purge",this.purge_mailbox_test()),this.enable_command("expand-all","expand-unread","collapse-all",this.env.threading&&this.env.messagecount),
+a.action=="list"||a.action=="search")this.msglist_select(this.message_list),this.triggerEvent("listupdate",{folder:this.env.mailbox,rowcount:this.message_list.rowcount})}else if(this.task=="addressbook"&&(this.enable_command("export",this.contact_list&&this.contact_list.rowcount>0),a.action=="list"||a.action=="search"))this.enable_command("group-create",this.env.address_sources[this.env.source].groups&&!this.env.address_sources[this.env.source].readonly),this.enable_command("group-rename","group-delete",
+this.env.address_sources[this.env.source].groups&&this.env.group&&!this.env.address_sources[this.env.source].readonly),this.triggerEvent("listupdate",{folder:this.env.source,rowcount:this.contact_list.rowcount})}a.unlock&&this.hide_message(a.unlock);this.triggerEvent("responseafter",{response:a});this.triggerEvent("responseafter"+a.action,{response:a})}};this.http_error=function(a,b,d,e){b=a.statusText;this.set_busy(!1,null,e);a.abort();a.status&&b&&this.display_message(this.get_label("servererror")+
+" ("+b+")","error")};this.start_keepalive=function(){this._int&&clearInterval(this._int);if(this.env.keep_alive&&!this.env.framed&&this.task=="mail"&&this.gui_objects.mailboxlist)this._int=setInterval(function(){j.check_for_recent(!1)},this.env.keep_alive*1E3);else if(this.env.keep_alive&&!this.env.framed&&this.task!="login"&&this.env.action!="print")this._int=setInterval(function(){j.send_keep_alive()},this.env.keep_alive*1E3)};this.send_keep_alive=function(){this.http_request("keep-alive","_t="+
+(new Date).getTime())};this.check_for_recent=function(a){if(!this.busy){var b,d="_t="+(new Date).getTime()+"&_mbox="+urlencode(this.env.mailbox);a&&(b=this.set_busy(!0,"checkingmail"),d+="&_refresh=1",this.start_keepalive());this.gui_objects.messagelist&&(d+="&_list=1");this.gui_objects.quotadisplay&&(d+="&_quota=1");this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_request("check-recent",d,b)}};this.get_single_uid=function(){return this.env.uid?this.env.uid:this.message_list?
+this.message_list.get_single_selection():null};this.get_single_cid=function(){return this.env.cid?this.env.cid:this.contact_list?this.contact_list.get_single_selection():null};this.get_caret_pos=function(a){if(typeof a.selectionEnd!="undefined")return a.selectionEnd;else if(document.selection&&document.selection.createRange){var b=document.selection.createRange();if(b.parentElement()!=a)return 0;var d=b.duplicate();a.tagName=="TEXTAREA"?d.moveToElementText(a):d.expand("textedit");d.setEndPoint("EndToStart",
+b);b=d.text.length;return b<=a.value.length?b:-1}else return a.value.length};this.set_caret_pos=function(a,b){if(a.setSelectionRange)a.setSelectionRange(b,b);else if(a.createTextRange){var d=a.createTextRange();d.collapse(!0);d.moveEnd("character",b);d.moveStart("character",b);d.select()}};this.lock_form=function(a,b){if(a&&a.elements){var d,e,f;if(b)this.disabled_form_elements=[];d=0;for(e=a.elements.length;d<e;d++)if(f=a.elements[d],f.type!="hidden")if(b&&f.disabled)this.disabled_form_elements.push(f);
+else if(b||$.inArray(f,this.disabled_form_elements)<0)f.disabled=b}}}rcube_webmail.long_subject_title=function(j,a){if(!j.title){var b=$(j);if(b.width()+a*15>b.parent().width())j.title=b.html()}};rcube_webmail.prototype.addEventListener=rcube_event_engine.prototype.addEventListener;rcube_webmail.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener;rcube_webmail.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent;
index 472dc6e8b5b62c065abe1b79803b0877271ac076..411aa2ba4e31ca563063254d1634dc915474c076 100644 (file)
@@ -14,7 +14,7 @@
  | Requires: jquery.js, common.js, list.js                               |
  +-----------------------------------------------------------------------+
 
-  $Id: app.js 4666 2011-04-17 09:34:02Z alec $
+  $Id: app.js 4763 2011-05-13 17:31:09Z alec $
 */
 
 
@@ -647,13 +647,13 @@ function rcube_webmail()
 
       case 'delete':
         // mail task
-        if (this.task=='mail')
+        if (this.task == 'mail')
           this.delete_messages();
         // addressbook task
-        else if (this.task=='addressbook')
+        else if (this.task == 'addressbook')
           this.delete_contacts();
         // user settings task
-        else if (this.task=='settings')
+        else if (this.task == 'settings')
           this.delete_identity();
         break;
 
@@ -1353,22 +1353,20 @@ function rcube_webmail()
 
   this.doc_mouse_up = function(e)
   {
-    var model, list, li;
+    var model, list, li, id;
 
-    if (this.message_list) {
-      if (!rcube_mouse_is_over(e, this.message_list.list.parentNode))
-        this.message_list.blur();
+    if (list = this.message_list) {
+      if (!rcube_mouse_is_over(e, list.list.parentNode))
+        list.blur();
       else
-        this.message_list.focus();
-      list = this.message_list;
+        list.focus();
       model = this.env.mailboxes;
     }
-    else if (this.contact_list) {
-      if (!rcube_mouse_is_over(e, this.contact_list.list.parentNode))
-        this.contact_list.blur();
+    else if (list = this.contact_list) {
+      if (!rcube_mouse_is_over(e, list.list.parentNode))
+        list.blur();
       else
-        this.contact_list.focus();
-      list = this.contact_list;
+        list.focus();
       model = this.env.contactfolders;
     }
     else if (this.ksearch_value) {
@@ -1389,7 +1387,7 @@ function rcube_webmail()
 
     // reset 'pressed' buttons
     if (this.buttons_sel) {
-      for (var id in this.buttons_sel)
+      for (id in this.buttons_sel)
         if (typeof id != 'function')
           this.button_out(this.buttons_sel[id], id);
       this.buttons_sel = {};
@@ -1488,8 +1486,6 @@ function rcube_webmail()
       this.command('previouspage');
     else if (list.key_pressed == 34)
       this.command('nextpage');
-    else
-      list.shiftkey = false;
   };
 
   this.msglist_get_preview = function()
@@ -2415,17 +2411,19 @@ function rcube_webmail()
   // delete selected messages from the current mailbox
   this.delete_messages = function()
   {
-    var selection = this.message_list ? $.merge([], this.message_list.get_selection()) : [];
+    var uid, i, len, trash = this.env.trash_mailbox,
+      list = this.message_list,
+      selection = list ? $.merge([], list.get_selection()) : [];
 
     // exit if no mailbox specified or if selection is empty
     if (!this.env.uid && !selection.length)
       return;
 
     // also select childs of collapsed rows
-    for (var uid, i=0, len=selection.length; i<len; i++) {
+    for (i=0, len=selection.length; i<len; i++) {
       uid = selection[i];
-      if (this.message_list.rows[uid].has_children && !this.message_list.rows[uid].expanded)
-        this.message_list.select_childs(uid);
+      if (list.rows[uid].has_children && !list.rows[uid].expanded)
+        list.select_childs(uid);
     }
 
     // if config is set to flag for deletion
@@ -2434,17 +2432,18 @@ function rcube_webmail()
       return false;
     }
     // if there isn't a defined trash mailbox or we are in it
-    else if (!this.env.trash_mailbox || this.env.mailbox == this.env.trash_mailbox)
+    // @TODO: we should check if defined trash mailbox exists
+    else if (!trash || this.env.mailbox == trash)
       this.permanently_remove_messages();
     // if there is a trash mailbox defined and we're not currently in it
     else {
       // if shift was pressed delete it immediately
-      if (this.message_list && this.message_list.shiftkey) {
+      if (list && list.shiftkey) {
         if (confirm(this.get_label('deletemessagesconfirm')))
           this.permanently_remove_messages();
       }
       else
-        this.move_messages(this.env.trash_mailbox);
+        this.move_messages(trash);
     }
 
     return true;
@@ -4872,8 +4871,9 @@ function rcube_webmail()
       quota_width = parseInt(quota / 100 * width),
       pos = $(obj).position();
 
-    // Opera bug?
+    // workarounds for Opera and Webkit bugs
     pos.top = Math.max(0, pos.top);
+    pos.left = Math.max(0, pos.left);
 
     this.env.indicator_width = width;
     this.env.indicator_height = height;
@@ -5163,7 +5163,7 @@ function rcube_webmail()
     this.set_busy(false, null, lock);
     request.abort();
 
-    if (errmsg)
+    if (request.status && errmsg)
       this.display_message(this.get_label('servererror') + ' (' + errmsg + ')', 'error');
   };
 
index 6c3caa7d97dc5e77e906d24e95d8b320ab3dd322..df53da4c3275d244bf9c4a36dfb77fb508e374cc 100644 (file)
@@ -15,8 +15,8 @@ a;if(this._events&&this._events[a]&&!this._event_exec){this._event_exec=!0;for(v
 function rcube_layer(a,b){this.name=a;this.create=function(c){var b=c.x?c.x:0,e=c.y?c.y:0,f=c.width,g=c.height,i=c.zindex,j=c.vis,c=c.parent,h=document.createElement("DIV");with(h){a=this.name;with(style)position="absolute",visibility=j?j==2?"inherit":"visible":"hidden",left=b+"px",top=e+"px",f&&(width=f.toString().match(/\%$/)?f:f+"px"),g&&(height=g.toString().match(/\%$/)?g:g+"px"),i&&(zIndex=i)}c?c.appendChild(h):document.body.appendChild(h);this.elm=h};b!=null?(this.create(b),this.name=this.elm.id):
 this.elm=document.getElementById(a);if(!this.elm)return!1;this.css=this.elm.style;this.event=this.elm;this.width=this.elm.offsetWidth;this.height=this.elm.offsetHeight;this.x=parseInt(this.elm.offsetLeft);this.y=parseInt(this.elm.offsetTop);this.visible=this.css.visibility=="visible"||this.css.visibility=="show"||this.css.visibility=="inherit"?!0:!1;this.move=function(a,b){this.x=a;this.y=b;this.css.left=Math.round(this.x)+"px";this.css.top=Math.round(this.y)+"px"};this.resize=function(a,b){this.css.width=
 a+"px";this.css.height=b+"px";this.width=a;this.height=b};this.show=function(a){a==1?(this.css.visibility="visible",this.visible=!0):a==2?(this.css.visibility="inherit",this.visible=!0):(this.css.visibility="hidden",this.visible=!1)};this.write=function(a){this.elm.innerHTML=a}}
-function rcube_check_email(a,b){if(a&&window.RegExp)return(b?RegExp("(^|<|[,;s\n])((([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22)(\\x2e([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22))*\\x40([^@\\x2e]+\\x2e)+([a-z]{2,}|xn--[a-z0-9]{2,}))|(mailtest\\x40(\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631|\\u4f8b\\u5b50\\x2e\\u6d4b\\u8bd5|\\u4f8b\\u5b50\\x2e\\u6e2c\\u8a66|\\u03c0\\u03b1\\u03c1\\u03ac\\u03b4\\u03b5\\u03b9\\u03b3\\u03bc\\u03b1\\x2e\\u03b4\\u03bf\\u03ba\\u03b9\\u03bc\\u03ae|\\u0909\\u0926\\u093e\\u0939\\u0930\\u0923\\x2e\\u092a\\u0930\\u0940\\u0915\\u094d\\u0937\\u093e|\\u4f8b\\u3048\\x2e\\u30c6\\u30b9\\u30c8|\\uc2e4\\ub840\\x2e\\ud14c\\uc2a4\\ud2b8|\\u0645\\u062b\\u0627\\u0644\\x2e\\u0622\\u0632\\u0645\\u0627\\u06cc\\u0634\u06cc|\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\x2e\\u0438\\u0441\\u043f\\u044b\\u0442\\u0430\\u043d\\u0438\\u0435|\\u0b89\\u0ba4\\u0bbe\\u0bb0\\u0ba3\\u0bae\\u0bcd\\x2e\\u0baa\\u0bb0\\u0bbf\\u0b9f\\u0bcd\\u0b9a\\u0bc8|\\u05d1\\u05f2\\u05b7\\u05e9\\u05e4\\u05bc\\u05d9\\u05dc\\x2e\\u05d8\\u05e2\\u05e1\\u05d8)))($|>|[,;s\n])","i"):
-RegExp("^((([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22)(\\x2e([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22))*\\x40([^@\\x2e]+\\x2e)+([a-z]{2,}|xn--[a-z0-9]{2,}))|(mailtest\\x40(\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631|\\u4f8b\\u5b50\\x2e\\u6d4b\\u8bd5|\\u4f8b\\u5b50\\x2e\\u6e2c\\u8a66|\\u03c0\\u03b1\\u03c1\\u03ac\\u03b4\\u03b5\\u03b9\\u03b3\\u03bc\\u03b1\\x2e\\u03b4\\u03bf\\u03ba\\u03b9\\u03bc\\u03ae|\\u0909\\u0926\\u093e\\u0939\\u0930\\u0923\\x2e\\u092a\\u0930\\u0940\\u0915\\u094d\\u0937\\u093e|\\u4f8b\\u3048\\x2e\\u30c6\\u30b9\\u30c8|\\uc2e4\\ub840\\x2e\\ud14c\\uc2a4\\ud2b8|\\u0645\\u062b\\u0627\\u0644\\x2e\\u0622\\u0632\\u0645\\u0627\\u06cc\\u0634\u06cc|\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\x2e\\u0438\\u0441\\u043f\\u044b\\u0442\\u0430\\u043d\\u0438\\u0435|\\u0b89\\u0ba4\\u0bbe\\u0bb0\\u0ba3\\u0bae\\u0bcd\\x2e\\u0baa\\u0bb0\\u0bbf\\u0b9f\\u0bcd\\u0b9a\\u0bc8|\\u05d1\\u05f2\\u05b7\\u05e9\\u05e4\\u05bc\\u05d9\\u05dc\\x2e\\u05d8\\u05e2\\u05e1\\u05d8)))$",
+function rcube_check_email(a,b){if(a&&window.RegExp)return(b?RegExp("(^|<|[,;s\n])((([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22)(\\x2e([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22))*\\x40([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))|(mailtest\\x40(\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631|\\u4f8b\\u5b50\\x2e\\u6d4b\\u8bd5|\\u4f8b\\u5b50\\x2e\\u6e2c\\u8a66|\\u03c0\\u03b1\\u03c1\\u03ac\\u03b4\\u03b5\\u03b9\\u03b3\\u03bc\\u03b1\\x2e\\u03b4\\u03bf\\u03ba\\u03b9\\u03bc\\u03ae|\\u0909\\u0926\\u093e\\u0939\\u0930\\u0923\\x2e\\u092a\\u0930\\u0940\\u0915\\u094d\\u0937\\u093e|\\u4f8b\\u3048\\x2e\\u30c6\\u30b9\\u30c8|\\uc2e4\\ub840\\x2e\\ud14c\\uc2a4\\ud2b8|\\u0645\\u062b\\u0627\\u0644\\x2e\\u0622\\u0632\\u0645\\u0627\\u06cc\\u0634\u06cc|\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\x2e\\u0438\\u0441\\u043f\\u044b\\u0442\\u0430\\u043d\\u0438\\u0435|\\u0b89\\u0ba4\\u0bbe\\u0bb0\\u0ba3\\u0bae\\u0bcd\\x2e\\u0baa\\u0bb0\\u0bbf\\u0b9f\\u0bcd\\u0b9a\\u0bc8|\\u05d1\\u05f2\\u05b7\\u05e9\\u05e4\\u05bc\\u05d9\\u05dc\\x2e\\u05d8\\u05e2\\u05e1\\u05d8)))($|>|[,;s\n])","i"):
+RegExp("^((([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22)(\\x2e([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22))*\\x40([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))|(mailtest\\x40(\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631|\\u4f8b\\u5b50\\x2e\\u6d4b\\u8bd5|\\u4f8b\\u5b50\\x2e\\u6e2c\\u8a66|\\u03c0\\u03b1\\u03c1\\u03ac\\u03b4\\u03b5\\u03b9\\u03b3\\u03bc\\u03b1\\x2e\\u03b4\\u03bf\\u03ba\\u03b9\\u03bc\\u03ae|\\u0909\\u0926\\u093e\\u0939\\u0930\\u0923\\x2e\\u092a\\u0930\\u0940\\u0915\\u094d\\u0937\\u093e|\\u4f8b\\u3048\\x2e\\u30c6\\u30b9\\u30c8|\\uc2e4\\ub840\\x2e\\ud14c\\uc2a4\\ud2b8|\\u0645\\u062b\\u0627\\u0644\\x2e\\u0622\\u0632\\u0645\\u0627\\u06cc\\u0634\u06cc|\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\x2e\\u0438\\u0441\\u043f\\u044b\\u0442\\u0430\\u043d\\u0438\\u0435|\\u0b89\\u0ba4\\u0bbe\\u0bb0\\u0ba3\\u0bae\\u0bcd\\x2e\\u0baa\\u0bb0\\u0bbf\\u0b9f\\u0bcd\\u0b9a\\u0bc8|\\u05d1\\u05f2\\u05b7\\u05e9\\u05e4\\u05bc\\u05d9\\u05dc\\x2e\\u05d8\\u05e2\\u05e1\\u05d8)))$",
 "i")).test(a)?!0:!1;return!1}function rcube_clone_object(a){var b={},c;for(c in a)b[c]=a[c]&&typeof a[c]=="object"?clone_object(a[c]):a[c];return b}function urlencode(a){return window.encodeURIComponent?encodeURIComponent(a):escape(a)}
 function rcube_find_object(a,b){var c,d;b||(b=document);if(b.getElementsByName&&(c=b.getElementsByName(a)))d=c[0];!d&&b.getElementById&&(d=b.getElementById(a));!d&&b.all&&(d=b.all[a]);!d&&b.images.length&&(d=b.images[a]);if(!d&&b.forms.length)for(c=0;c<b.forms.length;c++)b.forms[c].name==a?d=b.forms[c]:b.forms[c].elements[a]&&(d=b.forms[c].elements[a]);if(!d&&b.layers){b.layers[a]&&(d=b.layers[a]);for(c=0;!d&&c<b.layers.length;c++)d=rcube_find_object(a,b.layers[c].document)}return d}
 function rcube_mouse_is_over(a,b){var c=rcube_event.get_mouse_pos(a),d=$(b).offset();return c.x>=d.left&&c.x<d.left+b.offsetWidth&&c.y>=d.top&&c.y<d.top+b.offsetHeight}function setCookie(a,b,c,d,e,f){a=a+"="+escape(b)+(c?"; expires="+c.toGMTString():"")+(d?"; path="+d:"")+(e?"; domain="+e:"")+(f?"; secure":"");document.cookie=a}
index 3c7b8c3730a46d9380d39d9550f135a0eb5eca4f..cb744c45be54bf5b91b4e8227296e1fca1d4eaf6 100644 (file)
@@ -10,7 +10,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
  
- $Id: common.js 4509 2011-02-09 10:51:50Z thomasb $
+ $Id: common.js 4729 2011-05-04 18:53:11Z alec $
 */
 
 // Constants
@@ -493,8 +493,8 @@ function rcube_check_email(input, inline)
       // So, e-mail address should be validated also on server side after idn_to_ascii() use
       //domain_literal = '\\x5b('+dtext+'|'+quoted_pair+')*\\x5d',
       //sub_domain = '('+atom+'|'+domain_literal+')',
-      // allow punycode in last domain part for ICANN test domains
-      domain = '([^@\\x2e]+\\x2e)+([a-z]{2,}|xn--[a-z0-9]{2,})',
+      // allow punycode/unicode top-level domain
+      domain = '([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})',
       // ICANN e-mail test (http://idn.icann.org/E-mail_test)
       icann_domains = [
         '\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631',
index 00410b7263f1ae97eba6141cee05644bdc2ca58b..14a23b188286be6d0e428e889f384de703256cab 100644 (file)
@@ -1,6 +1,6 @@
 function rcube_list_widget(a,b){this.ENTER_KEY=13;this.DELETE_KEY=46;this.BACKSPACE_KEY=8;this.list=a?a:null;this.frame=null;this.rows=[];this.selection=[];this.colcount=this.rowcount=0;this.subject_col=-1;this.col_drag_active=this.drag_active=this.dont_select=this.toggleselect=this.keyboard=this.column_movable=this.draggable=this.multi_selecting=this.multiexpand=this.multiselect=this.shiftkey=!1;this.column_fixed=null;this.shift_start=this.last_selected=0;this.focused=this.in_selection_before=!1;
 this.drag_mouse_start=null;this.dblclick_time=600;this.row_init=function(){};if(b&&typeof b=="object")for(var c in b)this[c]=b[c]}
-rcube_list_widget.prototype={init:function(){if(this.list&&this.list.tBodies[0]){this.rows=[];this.rowcount=0;var a,b,c=this.list.tBodies[0].rows;a=0;for(b=c.length;a<b;a++)this.init_row(c[a]),this.rowcount++;this.init_header();this.frame=this.list.parentNode;this.keyboard&&(rcube_event.add_listener({event:bw.opera?"keypress":"keydown",object:this,method:"key_press"}),rcube_event.add_listener({event:"keydown",object:this,method:"key_down"}))}},init_row:function(a){if(a&&String(a.id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)){var b=
+rcube_list_widget.prototype={init:function(){if(this.list&&this.list.tBodies[0]){this.rows=[];this.rowcount=0;var a,b,c=this.list.tBodies[0].rows;a=0;for(b=c.length;a<b;a++)this.init_row(c[a]),this.rowcount++;this.init_header();this.frame=this.list.parentNode;this.keyboard&&(rcube_event.add_listener({event:bw.opera?"keypress":"keydown",object:this,method:"key_press"}),rcube_event.add_listener({event:"keydown",object:this,method:"key_down"}))}},init_row:function(a){if(a&&String(a.id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i)){var b=
 this,c=RegExp.$1;a.uid=c;this.rows[c]={uid:c,id:a.id,obj:a};a.onmousedown=function(a){return b.drag_row(a,this.uid)};a.onmouseup=function(a){return b.click_row(a,this.uid)};if(bw.iphone||bw.ipad)a.addEventListener("touchstart",function(a){a.touches.length==1&&(b.drag_row(rcube_event.touchevent(a.touches[0]),this.uid)||a.preventDefault())},!1),a.addEventListener("touchend",function(a){a.changedTouches.length==1&&(b.click_row(rcube_event.touchevent(a.changedTouches[0]),this.uid)||a.preventDefault())},
 !1);if(document.all)a.onselectstart=function(){return!1};this.row_init(this.rows[c])}},init_header:function(){if(this.list&&this.list.tHead){this.colcount=0;var a,b,c=this;if(this.column_movable&&this.list.tHead&&this.list.tHead.rows)for(b=0;b<this.list.tHead.rows[0].cells.length;b++)if(this.column_fixed!=b)a=this.list.tHead.rows[0].cells[b],a.onmousedown=function(a){return c.drag_column(a,this)},this.colcount++}},clear:function(a){this.list.insertBefore(document.createElement("tbody"),this.list.tBodies[0]);
 this.list.removeChild(this.list.tBodies[1]);this.rows=[];this.rowcount=0;a&&this.clear_selection();if(this.frame)this.frame.scrollTop=0},remove_row:function(a,b){if(this.rows[a].obj)this.rows[a].obj.style.display="none";b&&this.select_next();delete this.rows[a];this.rowcount--},insert_row:function(a,b){var c=this.list.tBodies[0];b&&c.rows.length?c.insertBefore(a,c.firstChild):c.appendChild(a);this.init_row(a);this.rowcount++},focus:function(a){var b,c;this.focused=!0;for(b in this.selection)c=this.selection[b],
@@ -14,7 +14,7 @@ e&&this.in_selection(b)?this.triggerEvent("dblclick"):this.triggerEvent("click")
 collapse_all:function(a){var b,c,d;if(a){if(a.expanded=!1,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded}),b&&this.multiexpand)return!1}else c=this.list.tBodies[0].firstChild,b=0;for(;c;){if(c.nodeType==1&&(d=this.rows[c.uid])){if(a&&(!d.depth||d.depth<=b))break;(a||d.depth)&&$(c).css("display","none");if(d.has_children&&d.expanded)d.expanded=!1,this.update_expando(d.uid,!1),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c=
 c.nextSibling}return!1},expand_all:function(a){var b,c,d;a?(a.expanded=!0,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid,!0),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded})):(c=this.list.tBodies[0].firstChild,b=0);for(;c;){if(c.nodeType==1&&(d=this.rows[c.uid])){if(a&&d.depth<=b)break;$(c).css("display","");if(d.has_children&&!d.expanded)d.expanded=!0,this.update_expando(d.uid,!0),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c=c.nextSibling}return!1},
 update_expando:function(a,b){var c=document.getElementById("rcmexpando"+a);if(c)c.className=b?"expanded":"collapsed"},get_next_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.nextSibling:null;a&&(a.nodeType!=1||a.style.display=="none");)a=a.nextSibling;return a},get_prev_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.previousSibling:null;a&&(a.nodeType!=1||a.style.display=="none");)a=a.previousSibling;return a},get_first_row:function(){if(this.rowcount){var a,
-b,c=this.list.tBodies[0].rows;a=0;for(b=c.length-1;a<b;a++)if(c[a].id&&String(c[a].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)&&this.rows[RegExp.$1]!=null)return RegExp.$1}return null},get_last_row:function(){if(this.rowcount){var a,b=this.list.tBodies[0].rows;for(a=b.length-1;a>=0;a--)if(b[a].id&&String(b[a].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)&&this.rows[RegExp.$1]!=null)return RegExp.$1}return null},select_row:function(a,b,c){var d=this.selection.join(",");this.multiselect||(b=0);if(!this.shift_start)this.shift_start=
+b,c=this.list.tBodies[0].rows;a=0;for(b=c.length-1;a<b;a++)if(c[a].id&&String(c[a].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i)&&this.rows[RegExp.$1]!=null)return RegExp.$1}return null},get_last_row:function(){if(this.rowcount){var a,b=this.list.tBodies[0].rows;for(a=b.length-1;a>=0;a--)if(b[a].id&&String(b[a].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i)&&this.rows[RegExp.$1]!=null)return RegExp.$1}return null},select_row:function(a,b,c){var d=this.selection.join(",");this.multiselect||(b=0);if(!this.shift_start)this.shift_start=
 a;if(b){switch(b){case SHIFT_KEY:this.shift_select(a,!1);break;case CONTROL_KEY:c||this.highlight_row(a,!0);break;case CONTROL_SHIFT_KEY:this.shift_select(a,!0);break;default:this.highlight_row(a,!1)}this.multi_selecting=!0}else this.shift_start=a,this.highlight_row(a,!1),this.multi_selecting=!1;this.selection.join(",")!=d&&this.triggerEvent("select");this.last_selected!=0&&this.rows[this.last_selected]&&$(this.rows[this.last_selected].obj).removeClass("focused");this.toggleselect&&this.last_selected==
 a?(this.clear_selection(),a=null):$(this.rows[a].obj).addClass("focused");if(!this.selection.length)this.shift_start=null;this.last_selected=a},select:function(a){this.select_row(a,!1);this.scrollto(a)},select_next:function(){var a=this.get_next_row(),b=this.get_prev_row();(a=a?a:b)&&this.select_row(a.uid,!1,!1)},select_first:function(a){var b=this.get_first_row();b&&(a?(this.shift_select(b,a),this.triggerEvent("select"),this.scrollto(b)):this.select(b))},select_last:function(a){var b=this.get_last_row();
 b&&(a?(this.shift_select(b,a),this.triggerEvent("select"),this.scrollto(b)):this.select(b))},select_childs:function(a){if(this.rows[a]&&this.rows[a].has_children)for(var b=this.rows[a].depth,a=this.rows[a].obj.nextSibling;a;){if(a.nodeType==1&&(r=this.rows[a.uid])){if(!r.depth||r.depth<=b)break;this.in_selection(r.uid)||this.select_row(r.uid,CONTROL_KEY)}a=a.nextSibling}},shift_select:function(a,b){if(!this.rows[this.shift_start]||!this.selection.length)this.shift_start=a;var c,d=this.rows[this.shift_start].obj.rowIndex,
@@ -22,7 +22,7 @@ e=this.rows[a].obj.rowIndex,f=d<e?d:e,d=d>e?d:e;for(c in this.rows)this.rows[c].
 this.highlight_row(b,!0)):$(this.rows[b].obj).removeClass("selected").removeClass("unfocused");this.selection.join(",")!=c&&this.triggerEvent("select");this.focus();return!0},invert_selection:function(){if(!this.rows||!this.rows.length)return!1;var a,b=this.selection.join(",");for(a in this.rows)this.highlight_row(a,!0);this.selection.join(",")!=b&&this.triggerEvent("select");this.focus();return!0},clear_selection:function(a){var b,c=this.selection.length;if(a)for(b in this.selection){if(this.selection[b]==
 a){this.selection.splice(b,1);break}}else{for(b in this.selection)this.rows[this.selection[b]]&&$(this.rows[this.selection[b]].obj).removeClass("selected").removeClass("unfocused");this.selection=[]}c&&!this.selection.length&&this.triggerEvent("select")},get_selection:function(){return this.selection},get_single_selection:function(){return this.selection.length==1?this.selection[0]:null},highlight_row:function(a,b){if(this.rows[a]&&!b){if(this.selection.length>1||!this.in_selection(a))this.clear_selection(),
 this.selection[0]=a,$(this.rows[a].obj).addClass("selected")}else if(this.rows[a])if(this.in_selection(a)){var c=$.inArray(a,this.selection),d=this.selection.slice(0,c),c=this.selection.slice(c+1,this.selection.length);this.selection=d.concat(c);$(this.rows[a].obj).removeClass("selected").removeClass("unfocused")}else this.selection[this.selection.length]=a,$(this.rows[a].obj).addClass("selected")},key_press:function(a){if(this.focused!=!0)return!0;var b=rcube_event.get_keycode(a),c=rcube_event.get_modifier(a);
-switch(b){case 40:case 38:case 63233:case 63232:return rcube_event.cancel(a),this.use_arrow_key(b,c);case 61:case 107:case 109:case 32:return rcube_event.cancel(a),a=this.use_plusminus_key(b,c),this.key_pressed=b,this.triggerEvent("keypress"),a;case 36:return this.select_first(c),rcube_event.cancel(a);case 35:return this.select_last(c),rcube_event.cancel(a);default:if(this.shiftkey=a.shiftKey,this.key_pressed=b,this.triggerEvent("keypress"),this.key_pressed==this.BACKSPACE_KEY)return rcube_event.cancel(a)}return!0},
+switch(b){case 40:case 38:case 63233:case 63232:return rcube_event.cancel(a),this.use_arrow_key(b,c);case 61:case 107:case 109:case 32:return rcube_event.cancel(a),a=this.use_plusminus_key(b,c),this.key_pressed=b,this.triggerEvent("keypress"),a;case 36:return this.select_first(c),rcube_event.cancel(a);case 35:return this.select_last(c),rcube_event.cancel(a);default:if(this.shiftkey=a.shiftKey,this.key_pressed=b,this.triggerEvent("keypress"),this.shiftkey=!1,this.key_pressed==this.BACKSPACE_KEY)return rcube_event.cancel(a)}return!0},
 key_down:function(a){switch(rcube_event.get_keycode(a)){case 27:if(this.drag_active)return this.drag_mouse_up(a);if(this.col_drag_active)return this.selected_column=null,this.column_drag_mouse_up(a);case 40:case 38:case 63233:case 63232:case 61:case 107:case 109:case 32:if(!rcube_event.get_modifier(a)&&this.focused)return rcube_event.cancel(a)}return!0},use_arrow_key:function(a,b){var c;if(a==40||a==63233)c=this.get_next_row();else if(a==38||a==63232)c=this.get_prev_row();c&&(this.select_row(c.uid,
 b,!0),this.scrollto(c.uid));return!1},use_plusminus_key:function(a,b){var c=this.rows[this.last_selected];if(c)return a==32&&(a=c.expanded?109:61),a==61||a==107?b==CONTROL_KEY||this.multiexpand?this.expand_all(c):this.expand(c):b==CONTROL_KEY||this.multiexpand?this.collapse_all(c):this.collapse(c),this.update_expando(c.uid,c.expanded),!1},scrollto:function(a){var b=this.rows[a].obj;if(b&&this.frame){var c=Number(b.offsetTop);!c&&this.rows[a].parent_uid&&(this.expand_all(this.rows[this.find_root(this.rows[a].uid)]),
 c=Number(b.offsetTop));if(c<Number(this.frame.scrollTop))this.frame.scrollTop=c;else if(c+Number(b.offsetHeight)>Number(this.frame.scrollTop)+Number(this.frame.offsetHeight))this.frame.scrollTop=c+Number(b.offsetHeight)-Number(this.frame.offsetHeight)}},drag_mouse_move:function(a){if(a.type=="touchmove")if(a.changedTouches.length==1)a=rcube_event.touchevent(a.changedTouches[0]);else return rcube_event.cancel(a);if(this.drag_start){var b=rcube_event.get_mouse_pos(a);if(!this.drag_mouse_start||Math.abs(b.x-
index 78cf994a8c5c4dc45686aa6c43dd4f47e55ad48b..27daf32cb736fe99d0cec36ff3899c656e684383 100644 (file)
@@ -13,7 +13,7 @@
  | Requires: common.js                                                   |
  +-----------------------------------------------------------------------+
 
-  $Id: list.js 4666 2011-04-17 09:34:02Z alec $
+  $Id: list.js 4763 2011-05-13 17:31:09Z alec $
 */
 
 
@@ -101,7 +101,7 @@ init: function()
 init_row: function(row)
 {
   // make references in internal array and set event handlers
-  if (row && String(row.id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)) {
+  if (row && String(row.id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i)) {
     var self = this,
       uid = RegExp.$1;
     row.uid = uid;
@@ -601,7 +601,7 @@ get_first_row: function()
     var i, len, rows = this.list.tBodies[0].rows;
 
     for (i=0, len=rows.length-1; i<len; i++)
-      if (rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
+      if (rows[i].id && String(rows[i].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
            return RegExp.$1;
   }
 
@@ -614,7 +614,7 @@ get_last_row: function()
     var i, rows = this.list.tBodies[0].rows;
 
     for (i=rows.length-1; i>=0; i--)
-      if (rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
+      if (rows[i].id && String(rows[i].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
         return RegExp.$1;
   }
 
@@ -988,6 +988,8 @@ key_press: function(e)
       this.shiftkey = e.shiftKey;
       this.key_pressed = keyCode;
       this.triggerEvent('keypress');
+      // reset shiftkey flag, we need it only for registered events
+      this.shiftkey = false;
 
       if (this.key_pressed == this.BACKSPACE_KEY)
         return rcube_event.cancel(e);
index 48df4592c552cb6b7781d8048ce98be418a15489..1ab16055bebb5aeb88733e37bc082fa101b2d34a 100644 (file)
@@ -515,6 +515,9 @@ class html2text
         $text = preg_replace("/\n\s+\n/", "\n\n", $text);
         $text = preg_replace("/[\n]{3,}/", "\n\n", $text);
 
+        // remove leading empty lines (can be produced by eg. P tag on the beginning)
+        $text = preg_replace('/^\n+/', '', $text);
+
         // Wrap the text to a readable format
         // for PHP versions >= 4.0.2. Default width is 75
         // If width is 0 or less, don't wrap the text.
index e8befe835e92934d4247875cf8760d237af5cec0..a5eeb841b880413b213a9b1d24f6103627044f1e 100644 (file)
@@ -274,7 +274,7 @@ class washtml
 
     // Remove invalid HTML comments (#1487759)
     // Don't remove valid conditional comments
-    $html = preg_replace('/<!--[^->[]*>/', '', $html);
+    $html = preg_replace('/<!--[^->[\n]*>/', '', $html);
 
     @$node->loadHTML($html);
     return $this->dumpHtml($node);
index d6ab97b7ca5519a46a3b1aabc5a732acf055556f..0323e3ef78c47b52a374cffc3fb98d50ebd51dc4 100644 (file)
@@ -18,7 +18,7 @@
 |         Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
 
-@version $Id: labels.inc 4362 2010-12-22 18:45:15Z alec $
+@version $Id: labels.inc 4763 2011-05-13 17:31:09Z alec $
 
 */
 
@@ -357,7 +357,7 @@ $labels['reqdsn'] = 'Zawsze żądaj statusu dostarczenia (DSN)';
 $labels['replysamefolder'] = 'Umieszczaj odpowiedzi w folderze wiadomości, na którą odpowiadam';
 $labels['contactproperties'] = 'Właściwości';
 $labels['properties'] = 'Właściwości';
-$labels['folderproperties'] = 'Włąściwości folderu';
+$labels['folderproperties'] = 'Właściwości folderu';
 $labels['parentfolder'] = 'Folder nadrzędny';
 $labels['location'] = 'Położenie';
 $labels['info'] = 'Informacje';
index ea82b9f50408a71fef2556948a195deeb6465274..2f16e1a52348ab3400e53725c2e1bdf3f2071672 100644 (file)
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: func.inc 4643 2011-04-11 12:24:00Z alec $
+ $Id: func.inc 4830 2011-06-02 12:36:32Z alec $
 
 */
 
 // setup some global vars used by mail steps
 $SENT_MBOX = $RCMAIL->config->get('sent_mbox');
 $DRAFTS_MBOX = $RCMAIL->config->get('drafts_mbox');
-$SEARCH_MODS_DEFAULT = array('*' => array('subject'=>1, 'from'=>1), $SENT_MBOX => array('subject'=>1, 'to'=>1), $DRAFTS_MBOX => array('subject'=>1, 'to'=>1));
-
-// Simplified for IDN in Unicode
-//$EMAIL_ADDRESS_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9][a-z0-9\-\.]*\\.[a-z]{2,5})';
-$EMAIL_ADDRESS_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.[a-z]{2,5})';
+$SEARCH_MODS_DEFAULT = array(
+    '*'         => array('subject'=>1, 'from'=>1),
+    $SENT_MBOX  => array('subject'=>1, 'to'=>1),
+    $DRAFTS_MBOX => array('subject'=>1, 'to'=>1)
+);
 
 // actions that do not require imap connection here
 $NOIMAP_ACTIONS = array('addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment', 'get');
@@ -575,7 +575,7 @@ function rcmail_wash_html($html, $p = array(), $cid_replaces)
     '',
     '<html>',
   );
-  $html = preg_replace($html_search, $html_replace, $html);
+  $html = preg_replace($html_search, $html_replace, trim($html));
 
   // PCRE errors handling (#1486856), should we use something like for every preg_* use?
   if ($html === null && ($preg_error = preg_last_error()) != PREG_NO_ERROR) {
@@ -607,6 +607,7 @@ function rcmail_wash_html($html, $p = array(), $cid_replaces)
       $html = '<head></head>'. $html;
     $html = substr_replace($html, '<meta http-equiv="Content-Type" content="text/html; charset='.RCMAIL_CHARSET.'" />', intval(stripos($html, '<head>')+6), 0);
   }
+
   // turn relative into absolute urls
   $html = rcmail_resolve_base($html);
 
@@ -955,13 +956,13 @@ function rcmail_message_headers($attrib, $headers=NULL)
 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 html::div($attrib, $html);
 }
 
@@ -1086,8 +1087,8 @@ function rcmail_resolve_base($body)
     $replacer = new rcube_base_replacer($regs[2]);
 
     // replace all relative paths
-    $body = preg_replace_callback('/(src|background|href)=(["\']?)([\.\/]+[^"\'\s]+)(\2|\s|>)/Ui', array($replacer, 'callback'), $body);
-    $body = preg_replace_callback('/(url\s*\()(["\']?)([\.\/]+[^"\'\)\s]+)(\2)\)/Ui', array($replacer, 'callback'), $body);
+    $body = preg_replace_callback('/(src|background|href)=(["\']?)([^"\'\s]+)(\2|\s|>)/Ui', array($replacer, 'callback'), $body);
+    $body = preg_replace_callback('/(url\s*\()(["\']?)([^"\'\)\s]+)(\2)\)/Ui', array($replacer, 'callback'), $body);
   }
 
   return $body;
@@ -1197,7 +1198,10 @@ function rcmail_html4inline($body, $container_id, $body_id='', &$attributes=null
  */
 function rcmail_alter_html_link($matches)
 {
-  global $RCMAIL, $EMAIL_ADDRESS_PATTERN;
+  global $RCMAIL;
+
+  // Support unicode/punycode in top-level domain part
+  $EMAIL_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))';
 
   $tag = $matches[1];
   $attrib = parse_attrib_string($matches[2]);
@@ -1212,12 +1216,12 @@ function rcmail_alter_html_link($matches)
     $attrib['href'] = $RCMAIL->url(array('task' => 'utils', 'action' => 'modcss', 'u' => $tempurl, 'c' => $GLOBALS['rcmail_html_container_id']));
     $end = ' />';
   }
-  else if (preg_match('/^mailto:'.$EMAIL_ADDRESS_PATTERN.'(\?[^"\'>]+)?/i', $attrib['href'], $mailto)) {
+  else if (preg_match('/^mailto:'.$EMAIL_PATTERN.'(\?[^"\'>]+)?/i', $attrib['href'], $mailto)) {
     $attrib['href'] = $mailto[0];
     $attrib['onclick'] = sprintf(
       "return %s.command('compose','%s',this)",
       JS_OBJECT_NAME,
-      JQ($mailto[1].$mailto[2]));
+      JQ($mailto[1].$mailto[3]));
   }
   else if (!empty($attrib['href']) && $attrib['href'][0] != '#') {
     $attrib['target'] = '_blank';
index b576970f5f62749a689e722f7b57016ec242065b..d6be9ccacb65e51ba2f34b06be50d4b35ba3da32 100644 (file)
@@ -15,7 +15,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: save_identity.inc 4509 2011-02-09 10:51:50Z thomasb $
+ $Id: save_identity.inc 4830 2011-06-02 12:36:32Z alec $
 
 */
 
@@ -116,9 +116,12 @@ else if (IDENTITIES_LEVEL < 2)
   $plugin = $RCMAIL->plugins->exec_hook('identity_create', array('record' => $save_data));
   $save_data = $plugin['record'];
 
-  $save_data['email']    = rcube_idn_to_ascii($save_data['email']);
-  $save_data['bcc']      = rcube_idn_to_ascii($save_data['bcc']);
-  $save_data['reply-to'] = rcube_idn_to_ascii($save_data['reply-to']);
+  if ($save_data['email'])
+    $save_data['email']    = rcube_idn_to_ascii($save_data['email']);
+  if ($save_data['bcc'])
+    $save_data['bcc']      = rcube_idn_to_ascii($save_data['bcc']);
+  if ($save_data['reply-to'])
+    $save_data['reply-to'] = rcube_idn_to_ascii($save_data['reply-to']);
 
   if (!$plugin['abort'])
     $insert_id = $save_data['email'] ? $USER->insert_identity($save_data) : null;
@@ -127,7 +130,7 @@ else if (IDENTITIES_LEVEL < 2)
 
   if ($insert_id) {
     $OUTPUT->show_message('successfullysaved', 'confirmation', null, false);
-    
+
     $_GET['_iid'] = $insert_id;
 
     if (!empty($_POST['_standard']))
index 2a2763abee9d27376d90c0ce1b60251faf25581b..0dcb9500ce299afe253f6f83a40a156265f02440 100644 (file)
@@ -15,7 +15,7 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
 
- $Id: error.inc 4509 2011-02-09 10:51:50Z thomasb $
+ $Id: error.inc 4729 2011-05-04 18:53:11Z alec $
 
 */
 
@@ -91,10 +91,11 @@ else {
     $__error_text = sprintf('Error No. [%s]', $ERROR_CODE);
 }
 
+$HTTP_ERR_CODE = $ERROR_CODE && $ERROR_CODE < 600 ? $ERROR_CODE : 500;
 
 // Ajax request
 if ($OUTPUT && ($OUTPUT instanceof rcube_json_output)) {
-  header("HTTP/1.0 $ERROR_CODE $__error_title");
+  header("HTTP/1.0 $HTTP_ERR_CODE $__error_title");
   die;
 }
 
@@ -112,12 +113,13 @@ if ($OUTPUT && $OUTPUT->template_exists('error')) {
 }
 
 $__skin = $CONFIG->skin ? $CONFIG->skin : 'default';
+$__productname = $CONFIG['product_name'] ? $CONFIG['product_name'] : 'Roundcube Webmail';
 
 // print system error page
 print <<<EOF
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"><head>
-<title>Roundcube|Mail : ERROR $ERROR_CODE</title>
+<title>$__productname :: ERROR</title>
 <link rel="stylesheet" type="text/css" href="skins/$__skin/common.css" />
 </head>
 <body>
index aef4f17fb97fe72671de53dfefd3166a09757475..c23f77ed6aa48a403fb6cd262e9848fc862512dd 100644 (file)
@@ -143,3 +143,12 @@ ul.toolbarmenu li.separator_below
   background-image: url(images/messageicons.gif);
 }
 
+body.iframe .boxtitle
+{
+  position: absolute;
+}
+
+#subscription-table
+{
+  width: auto;
+}
index a5c65464d1c1855feef679dfeb2c2b2cdf3ff0fc..87dbc937b4b4614c8176812ebd05e7b7cc4e7324 100644 (file)
@@ -117,11 +117,6 @@ input, textarea
   width: expression((parseInt(document.documentElement.clientWidth)-240)+'px');
 }
 
-#subscription-table
-{
-  width: auto;
-}
-
 #messagelist
 {
   width: inherit;
@@ -181,9 +176,11 @@ div.message-part div.pre
 }
 
 #contacts-box,
-#prefs-box
+#prefs-box,
+#folder-box
 {
   width: expression((parseInt(this.parentNode.offsetWidth)-555)+'px');
+  overflow: hidden;
 }
 
 #rcmdraglayer
index b5630e3423a9eab3cd1ba1c29a12f125d48972e0..605bcb23754e79cc67afa728a0b1f0dc7532721a 100644 (file)
   padding-left: 15px;
 }
 
-#messagetoolbar select.mboxlist option[value="0"]
+#messagetoolbar select.mboxlist option[value=""]
 {
   padding-left: 2px;
 }