From: Jérémy Bobbio
Date: Sat, 18 Jun 2011 15:02:44 +0000 (+0200)
Subject: Imported Upstream version 0.2.1
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=1213c6e65f2bab1e140369839a9d0f6db28a9492;p=roundcube.git
Imported Upstream version 0.2.1
---
diff --git a/.htaccess b/.htaccess
index fcb8f6c..36d5748 100644
--- a/.htaccess
+++ b/.htaccess
@@ -23,11 +23,6 @@ php_value session.gc_probability 1
php_value mbstring.func_overload 0
-
- Order allow,deny
- Deny from all
-
-
RewriteEngine On
RewriteRule ^favicon.ico$ skins/default/images/favicon.ico
diff --git a/CHANGELOG b/CHANGELOG
index 6a2b489..78bf9d4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,204 +1,46 @@
CHANGELOG RoundCube Webmail
----------------------------
+===========================
-- Fix mark popup in IE 7 (#1485369)
-- Fix line-break issue when copy & paste in Firefox (#1485425)
-- Fix autocomplete "unknown server error" (#1485637)
-- Fix STARTTLS before AUTH in SMTP connection (#1484883)
-- Support multiple quota values in QUOTAROOT resonse (#1485626)
-- Only abbreviate file name for IE < 7 browsers (#1485063)
-- Performance: allow setting imap rootdir and delimiter before connect (#1485172)
-- Fix sorting of folders with more than 2 levels (#1485569)
-- Fix search results page jumps in LDAP addressbook (#1485253)
-- Fix empty line before the signature in IE (#1485351)
-- Fix horizontal scrollbar in preview pane on IE (#1484633)
-- Add Robots meta tag in login page and installer (#1484846)
-- Added 'show_images' option, removed 'addrbook_show_images' (#1485597)
-- Option to check for new mails in all folders (#1484374)
-- Don't set client busy when checking for new messages (#1485276)
-- Allow UTF-8 folder names in config (#1485579)
-- Add junk_mbox option configuration in installer (#1485579)
-- Do serverside addressbook queries for autocompletion (#1485531)
-- Allow setting attachment col position in 'list_cols' option
-- Allow override 'list_cols' via skin (#1485577)
-- Fix 'cache' table cleanup on session destroy (#1485516)
-- Increase speed of session destroy and garbage clean up
-- Fix session timeout when DB server got clock skew (#1485490)
-- Fix handling of some malformed messages (#1484438)
-- Speed up raw message body handling
-- Better HTML entities conversion in html2text (#1485519)
-- Fix big memory consumption and speed up searching on servers without SORT capability
-- Fix setting locale to tr_TR, ku and az_AZ (#1485470)
-- Use SORT for searching on servers with SORT capability
-- Added message status filter
-- Fix empty file sending (#1485389)
-- Improved searching with many criterias (calling one SEARCH command)
-- Fix HTML editor initialization on IE (#1485304)
-- Add warning when switching editor mode from html to plain (#1485488)
-- Make identities list scrollable (#1485538)
-- Fix problem with numeric folder names (#1485527)
-- Added BYE response simple support to prevent from endless loops in imap.inc (#1483956)
-- Fix unread message unintentionally marked as read if read_when_deleted=true (#1485409)
-- Remove port number from SERVER_NAME in smtp_helo_host (#1485518)
-- Don't send disposition notification receipts for messages marked as 'read' (#1485523)
-- Added 'keep_alive' and 'min_keep_alive' options (#1485360)
-- Added option 'identities_level', removed 'multiple_identities'
-- Allow deleting identities when multiple_identities=false (#1485435)
-- Added option focus_on_new_message (#1485374)
-- Fix html2text class autoloading on Windows (#1485505)
-- Fix html signature formatting when identity save error occured (#1485426)
-- Add feedback and set busy when moving folder (#1485497)
-- Fix 'Empty' link visibility for some languages e.g. Slovak (#1485489)
-- Fix messages count bar overlapping (#1485270)
-- Fix adding signature in drafts compose mode (#1485484)
-- Fix iil_C_Sort() to support very long and/or divided responses (#1485283)
-- Fix matching case sensitivity when setting identity on reply (#1485480)
-- Prefer default identity on reply
-- Fix imap searching on ISMail server (#1485466)
-- Add css class for flagged messages (#1485464)
-- Write username instead of id in sendmail log (#1485477)
-- Fix htmlspecialchars() use for PHP version < 5.2.3 (#1485475)
-- Fix js keywords escaping in json_serialize() for IE/Opera (#1485472)
-- Added bin/killcache.php script (#1485434)
-- Add support for SJIS, GB2312, BIG5 in rc_detect_encoding()
-- Fix vCard file encoding detection for non-UTF-8 strings (#1485410)
-- Add 'skip_deleted' option in User Preferences (#1485445)
-- Minimize "inline" javascript scripts use (#1485433)
-- Fix css class setting for folders with names matching defined classes names (#1485355)
-- Fix race conditions when changing mailbox
-- Fix spellchecking when switching to html editor (#1485362)
-- Fix compose window width/height (#1485396)
-- Allow calling msgimport.sh/msgexport.sh from any directory (#1485431)
-- Localized filesize units (#1485340)
-- Better handling of "no identity" and "no email in identity" situations (#1485117)
-- Added 'mime_param_folding' option with possibility to choose long/non-ascii attachment names encoding eg. to be readable in MS Outlook/OE (#1485320)
-- Added "advanced options" feature in User Preferences
-- Fix unread counter when displaying cached massage in preview panel (#1485290)
-- Fix htmleditor spellchecking on MS Windows (#1485397)
-- Fix problem with non-ascii attachment names in Mail_mime (#1485267, #1485096)
-- Fix language autodetection (#1485401)
-- Fix button label in folders management (#1485405)
-- Fix collapsed folder not indicating unread msgs count of all subfolders (#1485403)
-- Fix handling of apostrophes in filenames decoded according to rfc2231
-
-RELEASE 0.2-BETA
-
-- Made config files location configurable (#1485215)
-- Reduced memory footprint when forwarding attachments (#1485345)
-- Allow and use spellcheck attribute for input/textarea fields (#1485060)
-- Added icons for forwarded/forwarded+replied messages (#1485257)
-- Added Reply-To to forwarded emails (#1485315)
-- Display progress message for folders create/delete/rename (#1485357)
-- Smart Tags and NOBR tag support in html messages (#1485363, #1485327)
-- Redesign of the identities settings (#1484042)
-- Add config option to disable creation/deletion of identities (#1484498)
-- Added 'sendmail_delay' option to restrict messages sending interval (#1484491)
-- Added vertical splitter for folders list resizing
-- Added possibility to view all headers in message view
-- Fixed splitter drag/resize on Opera (#1485170)
-- Fixed quota img height/width setting from template (#1484857)
-- Refactor drag & drop functionality. Don't rely on browser events anymore (#1484453)
-- Insert "virtual" folders in subscription list (#1484779)
-- Added link to open message in new window
-- Enable export of address book contacts as vCard
-- Add feature to import contacts from vcard files (#1326103)
-- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1484946)
-- Allowed max. attachment size now indicated in compose screen (#1485030)
-- Also capture backspace key in list mode (#1484566)
-- Allow application/pgp parts to be displayed (#1484753)
-- Correctly handle options in mailto-links (#1485228)
-- Immediately save sort_col/sort_order in user prefs (#1485265)
-- Truncate very long (above 50 characters) attachment filenames when displaying
-- Allow to auto-detect client language if none set (#1484434)
-- Auto-detect the client timezone (user configurable)
-- Add RFC2231 header value continuations support for attachment filenames + hack for servers that not support that feature
-- Fix Reply-To header displaying (#1485314)
-- Mark form buttons that provide the most obvious operation (mainaction)
-- Added option 'quota_zero_as_unlimited' (#1484604)
-- Added PRE handling in html2text class (#1484740)
-- Added folder hierarchy collapsing
-- Added options to use syslog instead of log file (#1484850)
-- Added Logging & Debugging section in Installer
-- Fix In-Reply-To and References headers when composing saved draft message (#1485288)
-- Fix html message charset conversion for charsets with underline (#1485287)
-- Fix buttons status after contacts deletion (#1485233)
-- Fix escaping of To: and From: fields when building message body for reply or forward in the HTML editor (#1484904)
-- Use current mailbox name in template (#1485256)
-- Better fix for skipping untagged responses (#1485261)
-- Added pspell support patch by Kris Steinhoff (#1483960)
-- Enable spellchecker for HTML editor (#1485114)
-- Respect spellcheck_uri in tinyMCE spellchecker (#1484196)
-- Case insensitive contacts searching using PostgreSQL (#1485259)
-- Make default imap folders configurable for each user (#1485075)
-- Save outgoing mail to selectable folder (#1324581)
-- Fix hiding of mark menu when clicking th button again (#1484944)
-- Use long date format in print mode (#1485191)
-- Updated TinyMCE to version 3.1.0.1
-- Re-enable autocomplete attribute for login form (#1485211)
-- Check PERMANENTFLAGS before saving $MDNSent flag (#1484963, #1485163)
-- Added flag column on messages list (#1484623)
-- Patched Mail/MimePart.php (http://pear.php.net/bugs/bug.php?id=14232)
-- Allow trash/junk subfolders to be purged (#1485085)
-- Store compose parameters in session and redirect to a unique URL
-- Fixed CRAM-MD5 authentication (#1484819)
-- Fixed forwarding messages with one HTML attachment (#1484442)
-- Fixed encoding of message/rfc822 attachments and image/pjpeg handling (#1484914)
-- Added option to select skin in user preferences
-- Added option to configure displaying of attached images below the message body
-- Added option to display images in messages from known senders (#1484601)
-- User preferences grouped in more fieldsets
-- Fix corrupted MIME headers of messages in Sent folder (#1485111)
-- Fixed bug in MDB2 package: http://pear.php.net/bugs/bug.php?id=14124
-- Use keypress instead of keydown to select list's row (#1484816)
-- Don't call expunge and don't remove message row after message move if flag_for_deletion is set to true (#1485002)
-
-RELEASE 0.2-ALPHA
-
-- Added option to disable autocompletion from selected LDAP address books (#1484922)
-- TLS support in LDAP connections: 'use_tls' property (#1485104)
-- Fixed removing messages from search set after deleting them (#1485106)
-- imap.inc: Fixed iil_C_FetchStructureString() to handle many
- literal strings in response (#1484969)
-- Support for subfolders in default/protected folders (#1484665)
-- Disallowed delimiter in folder name (#1484803)
-- Support " and \ in folder names
-- Escape \ in login (#1484614)
-- Better HTML sanitization with the DOM-based washtml script (#1484701)
-- Fixed sorting of folders with non-ascii characters
-- Fixed Mysql DDL for default identities creation (#1485070)
-- In Preferences added possibility to configure 'read_when_deleted',
- 'mdn_requests', 'flag_for_deletion' options
-- Made IMAP auth type configurable (#1483825)
-- Fixed empty values with FROM_UNIXTIME() in rcube_mdb2 (#1485055)
-- Fixed attachment list on IE 6/7 (#1484807)
-- Fixed JavaScript in compose.html that shows cc/bcc fields if populated
-- Make password input fields of type password in installer (#1484886)
-- Don't attempt to delete cache entries if enable_caching is FALSE (#1485051)
-- Optimized messages sorting on servers without sort capability (#1485049)
-- Corrected message headers decoding when charset isn't specified and improved
- support for native languages (#1485050, #1485048)
-- Expanded LDAP configuration options to support LDAP server writes.
-- Installer: encode special characters in DB username/password (#1485042)
-- Fixed management of folders with national characters in names (#1485036, #1485001)
-- Fixed identities saving when using MDB2 pgsql driver (#1485032)
-- Fixed BCC header reset (#1484997)
-- Improved messages list performance - patch from Justin Heesemann
-- Append skin_path to images location only when it starts with '/' sign (#1484859)
-- Fix IMAP response in message body when message has no body (#1484964)
-- Fixed non-RFC dates formatting (#1484901)
-- Fixed typo in set_charset() (#1484991)
-- Decode entities when inserting HTML signature to plain text message (#1484990)
-- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6
-- Fixed signature loading on Windows (#1484545)
-- Added language support to HTML editing (#1484862)
-- Fixed remove signature when replying (#1333167)
-- Fixed problem with line with a space at the end (#1484916)
-- Fixed tag filtering (#1484391)
-- Fixed tag filtering (#1484403)
-- Added sections (fieldset+label) in Settings interface
-- Mark as read in one action with message preview (#1484972)
-- Deleted redundant quota reads (#1484972)
-- Added options for empty trash and expunge inbox on logout (#1483863)
-- Removed lines wrapping when displaying message
-- Fixed month localization
-- Changed codebase to PHP5 with autoloader
+- Use US-ASCII as failover when Unicode searching fails (#1485762)
+- Fix errors handling in IMAP command continuations (#1485762)
+- Fix FETCH result parsing for servers returning flags at the end of result (#1485763)
+- Fix datetime columns defaults in mysql's DDL (#1485641)
+- Fix attaching more than nine inline images (#1485759)
+- Support 'UNICODE-1-1-UTF-7' alias for UTF-7 encoding (#1485758)
+- Fix mime-type detection using a hard-coded map (#1485311)
+- Don't return empty string if charset conversion failed (#1485757)
+- Disable concurrent autocomplete query results display (#1485743)
+- Fix new lines stripped from message footer (#1485751)
+- Fix IE problem with mouse click autocomplete (#1485739)
+- Fix html body washing on reply/forward + fix attachments handling (#1485676)
+- Fix multiple recipients input parsing (#1485733)
+- Fix replying to message with html attachment (#1485676)
+- Use default_charset for messages without specified charset (#1485661, #1484961)
+- Support non-standard "GMT-XXXX" literal in date header (#1485729)
+- Added TNEF support to decode MS Outlook attachments (winmail.dat)
+- Fix "value continuation" MIME headers by adding required semicolon (#1485727)
+- Fix pressing select all/unread multiple times (#1485723)
+- Fix selecting all unread does not honor new messages (#1485724)
+- Fix some base64 encoded attachments handling (#1485725)
+- Support NGINX as IMAP backend: better BAD response handling (#1485720)
+- Performance fix: don't fetch attachment parts headers twice to parse filename
+- Fix checking for recent messages on various IMAP servers (#1485702)
+- Performance fix: Don't fetch quota and recent messages in "message view" mode
+- Fix displaying of alternative-inside-alternative messages (#1485713)
+- Fix MDNSent flag checking, use arbitrary keywords (asterisk) flag (#1485706)
+- Fix creation of folders with '&' sign in name
+- Fix parsing of email addresses without angle brackets (#1485693)
+- Save spellcheck corrections when switching from plain to html editor (and spellchecking is on)
+- Fix large search results on server without SORT capability (#1485668)
+- Get rid of preg_replace() with eval modifier and create_function usage (#1485686)
+- Bring back and tags in HTML messages
+- Fix XSS vulnerability through background attributes as reported by Julien Cayssol
+- Fix problems with backslash as IMAP hierarchy delimiter (#1484467)
+- Secure vcard export by getting rid of preg's 'e' modifier use (#1485689)
+- Fix authentication when submitting form with existing session (#1485679)
+- Allow absolute URLs to images in HTML messages/sigs (#1485666)
+- Fix message body which contains both inline attachments and emotions
+- Fix SQL query execution errors handling in rcube_mdb2 class (#1485509)
+- Fix address names with '@' sign handling (#1485654)
+- Improve messages display performance
+- Fix messages searching with 'to:' modifier
diff --git a/INSTALL b/INSTALL
index 0cbc43b..fe71cdf 100644
--- a/INSTALL
+++ b/INSTALL
@@ -59,7 +59,7 @@ importing the table layout and granting the proper permissions to the
roundcube user. Here is an example of that procedure:
# mysql
-> CREATE DATABASE roundcubemail;
+> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
IDENTIFIED BY 'password';
> quit
@@ -94,7 +94,7 @@ simple steps, which have to be done as the postgres system user (or
which ever is the database superuser):
$ createuser roundcube
-$ createdb -O roundcube roundcubemail
+$ createdb -O roundcube -E UNICODE roundcubemail
$ psql roundcubemail
roundcubemail =# ALTER USER roundcube WITH PASSWORD 'the_new_password';
diff --git a/SQL/mysql.initial.sql b/SQL/mysql.initial.sql
index 5a1bfd1..9815282 100644
--- a/SQL/mysql.initial.sql
+++ b/SQL/mysql.initial.sql
@@ -10,8 +10,8 @@
CREATE TABLE `session` (
`sess_id` varchar(40) NOT NULL,
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
- `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
`ip` varchar(40) NOT NULL,
`vars` text NOT NULL,
PRIMARY KEY(`sess_id`),
@@ -26,8 +26,8 @@ CREATE TABLE `users` (
`username` varchar(128) NOT NULL,
`mail_host` varchar(128) NOT NULL,
`alias` varchar(128) NOT NULL,
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
- `last_login` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `last_login` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
`language` varchar(5),
`preferences` text,
PRIMARY KEY(`user_id`),
@@ -43,14 +43,14 @@ CREATE TABLE `messages` (
`user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
`del` tinyint(1) NOT NULL DEFAULT '0',
`cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
`idx` int(11) UNSIGNED NOT NULL DEFAULT '0',
`uid` int(11) UNSIGNED NOT NULL DEFAULT '0',
`subject` varchar(255) NOT NULL,
`from` varchar(255) NOT NULL,
`to` varchar(255) NOT NULL,
`cc` varchar(255) NOT NULL,
- `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `date` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
`size` int(11) UNSIGNED NOT NULL DEFAULT '0',
`headers` text NOT NULL,
`structure` text,
@@ -70,7 +70,7 @@ CREATE TABLE `messages` (
CREATE TABLE `cache` (
`cache_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL ,
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
`data` longtext NOT NULL,
`user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY(`cache_id`),
@@ -88,7 +88,7 @@ CREATE TABLE `cache` (
CREATE TABLE `contacts` (
`contact_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
- `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
`del` tinyint(1) NOT NULL DEFAULT '0',
`name` varchar(128) NOT NULL,
`email` varchar(128) NOT NULL,
diff --git a/UPGRADING b/UPGRADING
index 54a4ca3..b2c1977 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -20,8 +20,9 @@ of RoundCube Webmail.
in your local config/main.inc.php file.
3. Let the update script/installer check your configuration and
update your config files as suggested by the updater.
-4. Run all commands in ./SQL/[yourdbtype].update.sql that are superscribed
- with the currently installed version number.
+4. If suggested by the update script, run all commands in
+ ./SQL/[yourdbtype].update.sql that are superscribed with the
+ currently installed version number.
5. Make sure 'enable_installer' is set to false again.
diff --git a/bin/html2text.php b/bin/html2text.php
index b245b31..5b5c3c0 100644
--- a/bin/html2text.php
+++ b/bin/html2text.php
@@ -5,7 +5,7 @@
| bin/html2text.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: html2text.php 2187 2008-12-24 14:19:27Z thomasb $
+ $Id: html2text.php 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/bin/killcache.php b/bin/killcache.php
index 8951eb4..cf2a648 100644
--- a/bin/killcache.php
+++ b/bin/killcache.php
@@ -5,7 +5,7 @@
| bin/killcache.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,39 +15,48 @@
| Author: Dennis P. Nikolaenko |
+-----------------------------------------------------------------------+
- $Id: killcache.php 1955 2008-10-07 19:11:06Z alec $
+ $Id: killcache.php 2238 2009-01-17 03:27:41Z till $
*/
define('INSTALL_PATH', realpath(dirname(__FILE__).'/..') . '/');
-require INSTALL_PATH.'program/include/iniset.php';
+require INSTALL_PATH . 'program/include/iniset.php';
$config = new rcube_config();
// don't allow public access if not in devel_mode
if (!$config->get('devel_mode') && $_SERVER['REMOTE_ADDR']) {
- header("HTTP/1.0 401 Access denied");
- die("Access denied!");
+ header("HTTP/1.0 401 Access denied");
+ die("Access denied!");
}
+$options = array(
+ 'use_transactions' => false,
+ 'log_line_break' => "\n",
+ 'idxname_format' => '%s',
+ 'debug' => false,
+ 'quote_identifier' => true,
+ 'force_defaults' => false,
+ 'portability' => true
+);
-$dbh =& MDB2::factory($config->get('db_dsnw'), $options);
+$dbh = MDB2::factory($config->get('db_dsnw'), $options);
if (PEAR::isError($dbh)) {
- exit($mdb2->getMessage());
+ exit($mdb2->getMessage());
}
//TODO: transaction here (if supported by DB) would be a good thing
$res =& $dbh->exec("DELETE FROM cache");
if (PEAR::isError($res)) {
- $dbh->disconnect();
- exit($res->getMessage());
-};
+ $dbh->disconnect();
+ exit($res->getMessage());
+}
$res =& $dbh->exec("DELETE FROM messages");
if (PEAR::isError($res)) {
- $dbh->disconnect();
- exit($res->getMessage());
-};
+ $dbh->disconnect();
+ exit($res->getMessage());
+}
echo "Cache cleared\n";
diff --git a/bin/modcss.php b/bin/modcss.php
index b56accb..093add6 100644
--- a/bin/modcss.php
+++ b/bin/modcss.php
@@ -5,7 +5,7 @@
| bin/modcss.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2007-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2007-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: modcss.php 2187 2008-12-24 14:19:27Z thomasb $
+ $Id: modcss.php 2249 2009-01-22 11:23:00Z thomasb $
*/
@@ -24,46 +24,64 @@ require INSTALL_PATH . 'program/include/iniset.php';
$RCMAIL = rcmail::get_instance();
-$source = "";
-if (!empty($RCMAIL->user->ID) && ($url = preg_replace('/[^a-z0-9.-_\?\$&=%]/i', '', $_GET['u'])))
-{
- $a_uri = parse_url($url);
- $port = $a_uri['port'] ? $a_uri['port'] : 80;
- $host = $a_uri['host'];
- $path = $a_uri['path'] . ($a_uri['query'] ? '?'.$a_uri['query'] : '');
+$source = '';
+$error = 'Requires a valid user session and source url';
+if (empty($RCMAIL->user->ID)) {
+ header('HTTP/1.1 403 Forbidden');
+ echo $error;
+ exit;
+}
+
+$url = preg_replace('/[^a-z0-9.-_\?\$&=%]/i', '', $_GET['u']);
+if ($url === null) {
+ header('HTTP/1.1 403 Forbidden');
+ echo $error;
+ exit;
+}
- if ($fp = fsockopen($host, $port, $errno, $errstr, 30))
- {
- $out = "GET $path HTTP/1.0\r\n";
- $out .= "Host: $host\r\n";
- $out .= "Connection: Close\r\n\r\n";
- fwrite($fp, $out);
+$a_uri = parse_url($url);
+$port = $a_uri['port'] ? $a_uri['port'] : 80;
+$host = $a_uri['host'];
+$path = $a_uri['path'] . ($a_uri['query'] ? '?'.$a_uri['query'] : '');
- $header = true;
- while (!feof($fp))
- {
- $line = trim(fgets($fp, 4048));
-
- if ($header && preg_match('/^HTTP\/1\..\s+(\d+)/', $line, $regs) && intval($regs[1]) != 200)
- break;
- else if (empty($line) && $header)
- $header = false;
- else if (!$header)
- $source .= "$line\n";
- }
- fclose($fp);
- }
+if (!($fp = fsockopen($host, $port, $errno, $errstr, 30))) {
+ header('HTTP/1.1 500 Internal Server Error');
+ echo $error;
+ exit;
}
-if (!empty($source))
-{
- header("Content-Type: text/css");
- echo rcmail_mod_css_styles($source, preg_replace('/[^a-z0-9]/i', '', $_GET['c']), $url);
+$out = "GET $path HTTP/1.0\r\n";
+$out .= "Host: $host\r\n";
+$out .= "Connection: Close\r\n\r\n";
+fwrite($fp, $out);
+
+$header = true;
+while (!feof($fp)) {
+ $line = trim(fgets($fp, 4048));
+
+ if ($header
+ && preg_match('/^HTTP\/1\..\s+(\d+)/', $line, $regs)
+ && intval($regs[1]) != 200) {
+ break;
+ } else if (empty($line) && $header) {
+ $header = false;
+ } else if (!$header) {
+ $source .= "$line\n";
+ }
}
-else {
- header("HTTP/1.0 404 Not Found");
- echo "Requires a valid user session and source url";
+fclose($fp);
+
+if (!empty($source)) {
+ header('Content-Type: text/css');
+ echo rcmail_mod_css_styles(
+ $source,
+ preg_replace('/[^a-z0-9]/i', '', $_GET['c']),
+ $url
+ );
+ exit;
}
-?>
+header('HTTP/1.0 404 Not Found');
+echo $error;
+exit;
diff --git a/bin/msgexport.sh b/bin/msgexport.sh
index b15da1f..7dd56e9 100755
--- a/bin/msgexport.sh
+++ b/bin/msgexport.sh
@@ -1,5 +1,8 @@
-#!/usr/bin/php
+#!/usr/bin/env php
\ No newline at end of file
+?>
diff --git a/bin/msgimport.sh b/bin/msgimport.sh
index fa5678c..a5161e0 100755
--- a/bin/msgimport.sh
+++ b/bin/msgimport.sh
@@ -1,5 +1,8 @@
-#!/usr/bin/php
+#!/usr/bin/env php
\ No newline at end of file
+?>
diff --git a/bin/quotaimg.php b/bin/quotaimg.php
index 6e3d7de..ed6ce81 100644
--- a/bin/quotaimg.php
+++ b/bin/quotaimg.php
@@ -4,7 +4,7 @@
| bin/quotaimg.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -14,7 +14,7 @@
| Author: Brett Patterson |
+-----------------------------------------------------------------------+
- $Id: quotaimg.php 2187 2008-12-24 14:19:27Z thomasb $
+ $Id: quotaimg.php 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/bin/update.sh b/bin/update.sh
index a9a917c..c93d92d 100755
--- a/bin/update.sh
+++ b/bin/update.sh
@@ -1,6 +1,8 @@
-#!/usr/bin/php
+#!/usr/bin/env php
\ No newline at end of file
+?>
diff --git a/config/db.inc.php.dist b/config/db.inc.php.dist
index 255fb3e..4020b26 100644
--- a/config/db.inc.php.dist
+++ b/config/db.inc.php.dist
@@ -5,7 +5,7 @@
| Configuration file for database access |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index f8d9b29..1870852 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -5,7 +5,7 @@
| Main configuration file |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -152,7 +152,7 @@ $rcmail_config['date_long'] = 'd.m.Y H:i';
$rcmail_config['date_today'] = 'H:i';
// add this user-agent to message headers when sending
-$rcmail_config['useragent'] = 'RoundCube Webmail/0.2';
+$rcmail_config['useragent'] = 'RoundCube Webmail/0.2.1';
// use this name to compose page titles
$rcmail_config['product_name'] = 'RoundCube Webmail';
@@ -248,43 +248,43 @@ $rcmail_config['ldap_public'] = array();
// o=root
// ou=people
// uid=user@domain
-// mail=contact@contactdomain
-//
+// mail=contact@contactdomain
+//
// So the base_dn would be uid=%fu,ou=people,o=root
// The bind_dn would be the same as based_dn or some super user login.
-/**
+/*
* example config for Verisign directory
*
- * $rcmail_config['ldap_public']['Verisign'] = array(
- * 'name' => 'Verisign.com',
- * 'hosts' => array('directory.verisign.com'),
- * 'port' => 389,
- * 'use_tls' => false,
- * 'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
- * // %fu - The full username provided, assumes the username is an email
- * // address, uses the username_domain value if not an email address.
- * // %u - The username prior to the '@'.
- * // %d - The domain name after the '@'.
- * 'base_dn' => '',
- * 'bind_dn' => '',
- * 'bind_pass' => '',
- * 'writable' => false, // Indicates if we can write to the LDAP directory or not.
- * // If writable is true then these fields need to be populated:
- * // LDAP_Object_Classes, required_fields, LDAP_rdn
- * 'LDAP_Object_Classes' => array("top", "inetOrgPerson"), // To create a new contact these are the object classes to specify (or any other classes you wish to use).
- * 'required_fields' => array("cn", "sn", "mail"), // The required fields needed to build a new contact as required by the object classes (can include additional fields not required by the object classes).
- * 'LDAP_rdn' => 'mail', // The RDN field that is used for new entries, this field needs to be one of the search_fields, the base of base_dn is appended to the RDN to insert into the LDAP directory.
- * 'ldap_version' => 3, // using LDAPv3
- * 'search_fields' => array('mail', 'cn'), // fields to search in
- * 'name_field' => 'cn', // this field represents the contact's name
- * 'email_field' => 'mail', // this field represents the contact's e-mail
- * 'surname_field' => 'sn', // this field represents the contact's last name
- * 'firstname_field' => 'gn', // this field represents the contact's first name
- * 'sort' => 'cn', // The field to sort the listing by.
- * 'scope' => 'sub', // search mode: sub|base|list
- * 'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
- * 'fuzzy_search' => true); // server allows wildcard search
- */
+$rcmail_config['ldap_public']['Verisign'] = array(
+ 'name' => 'Verisign.com',
+ 'hosts' => array('directory.verisign.com'),
+ 'port' => 389,
+ 'use_tls' => false,
+ 'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
+ // %fu - The full username provided, assumes the username is an email
+ // address, uses the username_domain value if not an email address.
+ // %u - The username prior to the '@'.
+ // %d - The domain name after the '@'.
+ 'base_dn' => '',
+ 'bind_dn' => '',
+ 'bind_pass' => '',
+ 'writable' => false, // Indicates if we can write to the LDAP directory or not.
+ // If writable is true then these fields need to be populated:
+ // LDAP_Object_Classes, required_fields, LDAP_rdn
+ 'LDAP_Object_Classes' => array("top", "inetOrgPerson"), // To create a new contact these are the object classes to specify (or any other classes you wish to use).
+ 'required_fields' => array("cn", "sn", "mail"), // The required fields needed to build a new contact as required by the object classes (can include additional fields not required by the object classes).
+ 'LDAP_rdn' => 'mail', // The RDN field that is used for new entries, this field needs to be one of the search_fields, the base of base_dn is appended to the RDN to insert into the LDAP directory.
+ 'ldap_version' => 3, // using LDAPv3
+ 'search_fields' => array('mail', 'cn'), // fields to search in
+ 'name_field' => 'cn', // this field represents the contact's name
+ 'email_field' => 'mail', // this field represents the contact's e-mail
+ 'surname_field' => 'sn', // this field represents the contact's last name
+ 'firstname_field' => 'gn', // this field represents the contact's first name
+ 'sort' => 'cn', // The field to sort the listing by.
+ 'scope' => 'sub', // search mode: sub|base|list
+ 'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
+ 'fuzzy_search' => true); // server allows wildcard search
+*/
// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
diff --git a/config/mimetypes.php b/config/mimetypes.php
new file mode 100644
index 0000000..2e95a29
--- /dev/null
+++ b/config/mimetypes.php
@@ -0,0 +1,46 @@
+ 'application/vnd.ms-excel',
+ 'xlm' => 'application/vnd.ms-excel',
+ 'xla' => 'application/vnd.ms-excel',
+ 'xlc' => 'application/vnd.ms-excel',
+ 'xlt' => 'application/vnd.ms-excel',
+ 'xlw' => 'application/vnd.ms-excel',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'pps' => 'application/vnd.ms-powerpoint',
+ 'pot' => 'application/vnd.ms-powerpoint',
+ 'doc' => 'application/msword',
+ 'dot' => 'application/msword',
+ 'odc' => 'application/vnd.oasis.opendocument.chart',
+ 'otc' => 'application/vnd.oasis.opendocument.chart-template',
+ 'odf' => 'application/vnd.oasis.opendocument.formula',
+ 'otf' => 'application/vnd.oasis.opendocument.formula-template',
+ 'odg' => 'application/vnd.oasis.opendocument.graphics',
+ 'otg' => 'application/vnd.oasis.opendocument.graphics-template',
+ 'odi' => 'application/vnd.oasis.opendocument.image',
+ 'oti' => 'application/vnd.oasis.opendocument.image-template',
+ 'odp' => 'application/vnd.oasis.opendocument.presentation',
+ 'otp' => 'application/vnd.oasis.opendocument.presentation-template',
+ 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
+ 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
+ 'odt' => 'application/vnd.oasis.opendocument.text',
+ 'otm' => 'application/vnd.oasis.opendocument.text-master',
+ 'ott' => 'application/vnd.oasis.opendocument.text-template',
+ 'oth' => 'application/vnd.oasis.opendocument.text-web',
+ 'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+ 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+ 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
+ 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'xps' => 'application/vnd.ms-xpsdocument',
+ 'rar' => 'application/x-rar-compressed',
+);
+
+?>
\ No newline at end of file
diff --git a/index.php b/index.php
index 5d19369..fa9ac50 100644
--- a/index.php
+++ b/index.php
@@ -2,9 +2,9 @@
/*
+-------------------------------------------------------------------------+
| RoundCube Webmail IMAP Client |
- | Version 0.2-stable |
+ | Version 0.2.1 |
| |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License version 2 |
@@ -23,7 +23,7 @@
| Author: Thomas Bruederli |
+-------------------------------------------------------------------------+
- $Id: index.php 2201 2008-12-30 14:33:28Z thomasb $
+ $Id: index.php 2348 2009-03-10 08:13:26Z thomasb $
*/
@@ -72,6 +72,10 @@ if ($RCMAIL->action=='error' && !empty($_GET['_code'])) {
// try to log in
if ($RCMAIL->action=='login' && $RCMAIL->task=='mail') {
+ // purge the session in case of new login when a session already exists
+ $RCMAIL->kill_session();
+
+ // set IMAP host
$host = $RCMAIL->autoselect_host();
// check if client supports cookies
diff --git a/installer/index.php b/installer/index.php
index f7a5cea..549b6f0 100644
--- a/installer/index.php
+++ b/installer/index.php
@@ -13,6 +13,7 @@ $include_path .= ini_get('include_path');
set_include_path($include_path);
+require_once 'rcube_shared.inc';
require_once 'utils.php';
session_start();
@@ -105,7 +106,7 @@ if ($RCI->configured && empty($_REQUEST['_step'])) {
step]) {
include $include_steps[$RCI->step];
diff --git a/installer/rcube_install.php b/installer/rcube_install.php
index 96134d2..b2b8257 100644
--- a/installer/rcube_install.php
+++ b/installer/rcube_install.php
@@ -5,7 +5,7 @@
| rcube_install.php |
| |
| This file is part of the RoundCube Webmail package |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU Public License |
+-----------------------------------------------------------------------+
diff --git a/program/include/html.php b/program/include/html.php
index 032915f..01ad415 100644
--- a/program/include/html.php
+++ b/program/include/html.php
@@ -5,7 +5,7 @@
| program/include/html.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev, - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev, - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/iniset.php b/program/include/iniset.php
index 78eb270..7bcca4e 100755
--- a/program/include/iniset.php
+++ b/program/include/iniset.php
@@ -5,7 +5,7 @@
| program/include/iniset.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev, - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev, - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -22,7 +22,7 @@
// application constants
-define('RCMAIL_VERSION', '0.2-stable');
+define('RCMAIL_VERSION', '0.2.1');
define('RCMAIL_CHARSET', 'UTF-8');
define('JS_OBJECT_NAME', 'rcmail');
@@ -50,11 +50,15 @@ if (set_include_path($include_path) === false) {
die('Fatal error: ini_set/set_include_path does not work.');
}
+ini_set('error_reporting', E_ALL&~E_NOTICE);
+if (isset($_SERVER['HTTPS'])) {
+ ini_set('session.cookie_secure', ($_SERVER['HTTPS'] && ($_SERVER['HTTPS'] != 'off'))?1:0);
+} else {
+ ini_set('session.cookie_secure', 0);
+}
ini_set('session.name', 'roundcube_sessid');
ini_set('session.use_cookies', 1);
ini_set('session.only_use_cookies', 1);
-ini_set('session.cookie_secure', ($_SERVER['HTTPS'] && ($_SERVER['HTTPS'] != 'off')));
-ini_set('error_reporting', E_ALL&~E_NOTICE);
set_magic_quotes_runtime(0);
// increase maximum execution time for php scripts
@@ -72,6 +76,7 @@ if(extension_loaded('mbstring'))
* Use PHP5 autoload for dynamic class loading
*
* @todo Make Zend, PEAR etc play with this
+ * @todo Make our classes conform to a more straight forward CS.
*/
function __autoload($classname)
{
@@ -90,7 +95,7 @@ function __autoload($classname)
),
$classname
);
- include_once $filename. '.php';
+ include $filename. '.php';
}
/**
@@ -112,4 +117,3 @@ require_once 'include/rcube_shared.inc';
// set PEAR error handling (will also load the PEAR main class)
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'rcube_pear_error');
-
diff --git a/program/include/main.inc b/program/include/main.inc
index d308d93..c8bd137 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -5,7 +5,7 @@
| program/include/main.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev, - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev, - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: main.inc 2187 2008-12-24 14:19:27Z thomasb $
+ $Id: main.inc 2321 2009-03-01 08:14:14Z alec $
*/
@@ -182,6 +182,12 @@ function rcube_charset_convert($str, $from, $to=NULL)
$to = $to==NULL ? strtoupper(RCMAIL_CHARSET) : strtoupper($to);
$error = false; $conv = null;
+ # RFC1642
+ if ($from == 'UNICODE-1-1-UTF-7')
+ $from = 'UTF-7';
+ if ($to == 'UNICODE-1-1-UTF-7')
+ $to = 'UTF-7';
+
if ($from==$to || $str=='' || empty($from))
return $str;
@@ -197,23 +203,19 @@ function rcube_charset_convert($str, $from, $to=NULL)
);
// convert charset using iconv module
- if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7')
- {
+ if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7') {
$aliases['GB2312'] = 'GB18030';
$_iconv = iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
- if ($_iconv !== false)
- {
+ if ($_iconv !== false) {
return $_iconv;
- }
}
-
+ }
if (is_null($mbstring_loaded))
$mbstring_loaded = extension_loaded('mbstring');
// convert charset using mbstring module
- if ($mbstring_loaded)
- {
+ if ($mbstring_loaded) {
$aliases['UTF-7'] = 'UTF7-IMAP';
$aliases['WINDOWS-1257'] = 'ISO-8859-13';
@@ -226,45 +228,48 @@ function rcube_charset_convert($str, $from, $to=NULL)
$mb_to = $aliases[$to] ? $aliases[$to] : $to;
// return if encoding found, string matches encoding and convert succeeded
- if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list))
- if (mb_check_encoding($str, $mb_from))
- if ($out = mb_convert_encoding($str, $mb_to, $mb_from))
- return $out;
+ if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list)) {
+ if (mb_check_encoding($str, $mb_from) && ($out = mb_convert_encoding($str, $mb_to, $mb_from)))
+ return $out;
}
-
-
+ }
+
+ # try to convert with custom classes
if (class_exists('utf8'))
$conv = new utf8();
// convert string to UTF-8
- if ($from == 'UTF-7')
- $str = utf7_to_utf8($str);
- else if (($from == 'ISO-8859-1') && function_exists('utf8_encode'))
+ if ($from == 'UTF-7') {
+ if ($_str = utf7_to_utf8($str))
+ $str = $_str;
+ }
+ else if (($from == 'ISO-8859-1') && function_exists('utf8_encode')) {
$str = utf8_encode($str);
- else if ($from != 'UTF-8' && $conv)
- {
+ }
+ else if ($from != 'UTF-8' && $conv) {
$conv->loadCharset($from);
$str = $conv->strToUtf8($str);
- }
- else if ($from != 'UTF-8')
+ }
+ else if ($from != 'UTF-8') {}
$error = true;
// encode string for output
- if ($to == 'UTF-7')
+ if ($to == 'UTF-7') {
return utf8_to_utf7($str);
- else if ($to == 'ISO-8859-1' && function_exists('utf8_decode'))
+ }
+ else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) {
return utf8_decode($str);
- else if ($to != 'UTF-8' && $conv)
- {
+ }
+ else if ($to != 'UTF-8' && $conv) {
$conv->loadCharset($to);
return $conv->utf8ToStr($str);
- }
- else if ($to != 'UTF-8')
+ }
+ else if ($to != 'UTF-8') {
$error = true;
-
+ }
+
// report error
- if ($error && !$convert_warning)
- {
+ if ($error && !$convert_warning){
raise_error(array(
'code' => 500,
'type' => 'php',
@@ -273,7 +278,7 @@ function rcube_charset_convert($str, $from, $to=NULL)
), true, false);
$convert_warning = true;
- }
+ }
// return UTF-8 string
return $str;
@@ -583,25 +588,24 @@ function rcmail_get_edit_field($col, $value, $attrib, $type='text')
* @param string Container ID to use as prefix
* @return string Modified CSS source
*/
-function rcmail_mod_css_styles($source, $container_id, $base_url = '')
+function rcmail_mod_css_styles($source, $container_id)
{
- $a_css_values = array();
$last_pos = 0;
+ $replacements = new rcube_string_replacer;
// ignore the whole block if evil styles are detected
$stripped = preg_replace('/[^a-z\(:]/', '', rcmail_xss_entitiy_decode($source));
if (preg_match('/expression|behavior|url\(|import/', $stripped))
- return '';
+ return '/* evil! */';
// cut out all contents between { and }
while (($pos = strpos($source, '{', $last_pos)) && ($pos2 = strpos($source, '}', $pos)))
{
- $key = sizeof($a_css_values);
- $a_css_values[$key] = substr($source, $pos+1, $pos2-($pos+1));
- $source = substr($source, 0, $pos+1) . "<>" . substr($source, $pos2, strlen($source)-$pos2);
+ $key = $replacements->add(substr($source, $pos+1, $pos2-($pos+1)));
+ $source = substr($source, 0, $pos+1) . $replacements->get_replacement($key) . substr($source, $pos2, strlen($source)-$pos2);
$last_pos = $pos+2;
}
-
+
// remove html comments and add #container to each tag selector.
// also replace body definition because we also stripped off the tag
$styles = preg_replace(
@@ -617,17 +621,8 @@ function rcmail_mod_css_styles($source, $container_id, $base_url = '')
),
$source);
- // replace all @import statements to modify the imported CSS sources too
- $styles = preg_replace_callback(
- '/@import\s+(url\()?[\'"]?([^\)\'"]+)[\'"]?(\))?/im',
- create_function('$matches', "return sprintf(\"@import url('./bin/modcss.php?u=%s&c=%s')\", urlencode(make_absolute_url(\$matches[2],'$base_url')), urlencode('$container_id'));"),
- $styles);
-
// put block contents back in
- $styles = preg_replace_callback(
- '/<>/',
- create_function('$matches', "\$values = ".var_export($a_css_values, true)."; return \$values[\$matches[1]];"),
- $styles);
+ $styles = $replacements->resolve($styles);
return $styles;
}
@@ -643,12 +638,23 @@ function rcmail_mod_css_styles($source, $container_id, $base_url = '')
function rcmail_xss_entitiy_decode($content)
{
$out = html_entity_decode(html_entity_decode($content));
- $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', create_function('$matches', 'return chr(hexdec($matches[1]));'), $out);
+ $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', 'rcmail_xss_entitiy_decode_callback', $out);
$out = preg_replace('#/\*.*\*/#Um', '', $out);
return $out;
}
+/**
+ * preg_replace_callback callback for rcmail_xss_entitiy_decode_callback
+ *
+ * @param array matches result from preg_replace_callback
+ * @return string decoded entity
+ */
+function rcmail_xss_entitiy_decode_callback($matches)
+{
+ return chr(hexdec($matches[1]));
+}
+
/**
* Compose a valid attribute string for HTML tags
*
@@ -708,6 +714,8 @@ function format_date($date, $format=NULL)
$ts = $date;
else if (!empty($date))
{
+ // support non-standard "GMTXXXX" literal
+ $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date);
// if date parsing fails, we have a date in non-rfc format.
// remove token from the end and try again
while ((($ts = @strtotime($date))===false) || ($ts < 0))
@@ -1205,4 +1213,25 @@ function rcube_html_editor($mode='')
$OUTPUT->add_script('rcmail_editor_init("$__skin_path", "'.JQ($tinylang).'", '.intval($CONFIG['enable_spellcheck']).', "'.$mode.'");');
}
+
+
+/**
+ * Helper class to turn relative urls into absolute ones
+ * using a predefined base
+ */
+class rcube_base_replacer
+{
+ private $base_url;
+
+ public function __construct($base)
+ {
+ $this->base_url = $base;
+ }
+
+ public function callback($matches)
+ {
+ return $matches[1] . '="' . make_absolute_url($matches[3], $this->base_url) . '"';
+ }
+}
+
?>
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index fcd3950..f109c16 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -5,7 +5,7 @@
| program/include/rcmail.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -47,7 +47,7 @@ class rcmail
/**
* This implements the 'singleton' design pattern
*
- * @return object qvert The one and only instance
+ * @return object rcmail The one and only instance
*/
static function get_instance()
{
diff --git a/program/include/rcube_browser.php b/program/include/rcube_browser.php
index 162844f..56e6d3c 100644
--- a/program/include/rcube_browser.php
+++ b/program/include/rcube_browser.php
@@ -5,7 +5,7 @@
| program/include/rcube_browser.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2007-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2007-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/rcube_config.php b/program/include/rcube_config.php
index 7903407..7be2b0d 100644
--- a/program/include/rcube_config.php
+++ b/program/include/rcube_config.php
@@ -5,7 +5,7 @@
| program/include/rcube_config.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/rcube_contacts.php b/program/include/rcube_contacts.php
index 7ef2af1..65d89ca 100644
--- a/program/include/rcube_contacts.php
+++ b/program/include/rcube_contacts.php
@@ -5,7 +5,7 @@
| program/include/rcube_contacts.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2006-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/rcube_html_page.php b/program/include/rcube_html_page.php
index ab8eba5..78f6176 100644
--- a/program/include/rcube_html_page.php
+++ b/program/include/rcube_html_page.php
@@ -5,7 +5,7 @@
| program/include/rcube_html_page.php |
| |
| This file is part of the RoundCube PHP suite |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| CONTENTS: |
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index ab49dca..edbdb39 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -5,7 +5,7 @@
| program/include/rcube_imap.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -16,7 +16,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: rcube_imap.php 2189 2008-12-25 08:33:21Z alec $
+ $Id: rcube_imap.php 2335 2009-03-06 20:58:32Z alec $
*/
@@ -26,6 +26,7 @@
*/
require_once('lib/imap.inc');
require_once('lib/mime.inc');
+require_once('lib/tnef_decoder.inc');
/**
@@ -354,8 +355,9 @@ class rcube_imap
*/
function check_permflag($flag)
{
- $flagsmap = $GLOBALS['IMAP_FLAGS'];
- return (($imap_flag = $flagsmap[strtoupper($flag)]) && in_array_nocase($imap_flag, $this->conn->permanentflags));
+ $flag = strtoupper($flag);
+ $imap_flag = $GLOBALS['IMAP_FLAGS'][$flag];
+ return (in_array_nocase($imap_flag, $this->conn->permanentflags));
}
@@ -685,9 +687,9 @@ class rcube_imap
$cnt = count($msgs);
if ($cnt > 300 && $cnt > $this->page_size) { // experimantal value for best result
// use memory less expensive (and quick) method for big result set
- $a_index = $this->message_index($mailbox, $this->sort_field, $this->sort_order);
+ $a_index = $this->message_index('', $this->sort_field, $this->sort_order);
// get messages uids for one page...
- $msgs = array_slice(array_keys($a_index), $start_msg, min($cnt-$start_msg, $this->page_size));
+ $msgs = array_slice($a_index, $start_msg, min($cnt-$start_msg, $this->page_size));
// ...and fetch headers
$this->_fetch_headers($mailbox, join(',', $msgs), $a_msg_headers, NULL);
@@ -953,11 +955,11 @@ class rcube_imap
$results = $this->_search_index($mailbox, $str, $charset, $sort_field);
- // try search with ISO charset (should be supported by server)
+ // try search with US-ASCII charset (should be supported by server)
// only if UTF-8 search is not supported
- if (empty($results) && !is_array($results) && !empty($charset) && $charset!='ISO-8859-1')
+ if (empty($results) && !is_array($results) && !empty($charset) && $charset!='US-ASCII')
{
- // convert strings to ISO-8859-1
+ // convert strings to US_ASCII
if(preg_match_all('/\{([0-9]+)\}\r\n/', $str, $matches, PREG_OFFSET_CAPTURE))
{
$last = 0; $res = '';
@@ -965,7 +967,8 @@ class rcube_imap
{
$string_offset = $m[1] + strlen($m[0]) + 4; // {}\r\n
$string = substr($str, $string_offset - 1, $m[0]);
- $string = rcube_charset_convert($string, $charset, 'ISO-8859-1');
+ $string = rcube_charset_convert($string, $charset, 'US-ASCII');
+ if (!$string) continue;
$res .= sprintf("%s{%d}\r\n%s", substr($str, $last, $m[1] - $last - 1), strlen($string), $string);
$last = $m[0] + $string_offset - 1;
}
@@ -975,7 +978,7 @@ class rcube_imap
else // strings for conversion not found
$res = $str;
- $results = $this->search($mbox_name, $res, 'ISO-8859-1', $sort_field);
+ $results = $this->search($mbox_name, $res, 'US-ASCII', $sort_field);
}
$this->set_search_set($str, $results, $charset, $sort_field);
@@ -1047,9 +1050,10 @@ class rcube_imap
* @param int Message ID
* @param string Mailbox to read from
* @param boolean True if $id is the message UID
+ * @param boolean True if we need also BODYSTRUCTURE in headers
* @return object Message headers representation
*/
- function get_headers($id, $mbox_name=NULL, $is_uid=TRUE)
+ function get_headers($id, $mbox_name=NULL, $is_uid=TRUE, $bodystr=FALSE)
{
$mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
$uid = $is_uid ? $id : $this->_id2uid($id);
@@ -1058,7 +1062,7 @@ class rcube_imap
if ($uid && ($headers = &$this->get_cached_message($mailbox.'.msg', $uid)))
return $headers;
- $headers = iil_C_FetchHeader($this->conn, $mailbox, $id, $is_uid);
+ $headers = iil_C_FetchHeader($this->conn, $mailbox, $id, $is_uid, $bodystr);
// write headers cache
if ($headers)
@@ -1078,9 +1082,10 @@ class rcube_imap
* an object structure similar to the one generated by PEAR::Mail_mimeDecode
*
* @param int Message UID to fetch
+ * @param string Message BODYSTRUCTURE string (optional)
* @return object rcube_message_part Message part tree or False on failure
*/
- function &get_structure($uid)
+ function &get_structure($uid, $structure_str='')
{
$cache_key = $this->mailbox.'.msg';
$headers = &$this->get_cached_message($cache_key, $uid, true);
@@ -1095,7 +1100,8 @@ class rcube_imap
return FALSE;
}
- $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id);
+ if (!$structure_str)
+ $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id);
$structure = iml_GetRawStructureArray($structure_str);
$struct = false;
@@ -1130,7 +1136,7 @@ class rcube_imap
*
* @access private
*/
- function &_structure_part($part, $count=0, $parent='')
+ function &_structure_part($part, $count=0, $parent='', $raw_headers=null)
{
$struct = new rcube_message_part;
$struct->mime_id = empty($parent) ? (string)$count : "$parent.$count";
@@ -1150,11 +1156,25 @@ class rcube_imap
$struct->mimetype = 'multipart/'.$struct->ctype_secondary;
+ // build parts list for headers pre-fetching
+ for ($i=0, $count=0; $i 3)
+ // fetch message headers if message/rfc822 or named part (could contain Content-Location header)
+ if (strtolower($part[$i][0]) == 'message' ||
+ (in_array('name', (array)$part[$i][2]) && (empty($part[$i][3]) || $part[$i][3]=='NIL'))) {
+ $part_headers[] = $struct->mime_id ? $struct->mime_id.'.'.$i+1 : $i+1;
+ }
+
+ // pre-fetch headers of all parts (in one command for better performance)
+ if ($part_headers)
+ $part_headers = iil_C_FetchMIMEHeaders($this->conn, $this->mailbox, $this->_msg_id, $part_headers);
+
$struct->parts = array();
for ($i=0, $count=0; $i 3)
- $struct->parts[] = $this->_structure_part($part[$i], ++$count, $struct->mime_id);
-
+ $struct->parts[] = $this->_structure_part($part[$i], ++$count, $struct->mime_id,
+ $part_headers[$struct->mime_id ? $struck->mime_id.'.'.$i+1 : $i+1]);
+
return $struct;
}
@@ -1219,8 +1239,9 @@ class rcube_imap
// fetch message headers if message/rfc822 or named part (could contain Content-Location header)
if ($struct->ctype_primary == 'message' || ($struct->ctype_parameters['name'] && !$struct->content_id)) {
- $part_headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id);
- $struct->headers = $this->_parse_headers($part_headers) + $struct->headers;
+ if (empty($raw_headers))
+ $raw_headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id);
+ $struct->headers = $this->_parse_headers($raw_headers) + $struct->headers;
}
if ($struct->ctype_primary=='message') {
@@ -1229,7 +1250,7 @@ class rcube_imap
}
// normalize filename property
- $this->_set_part_filename($struct);
+ $this->_set_part_filename($struct, $raw_headers);
return $struct;
}
@@ -1240,8 +1261,9 @@ class rcube_imap
*
* @access private
* @param object rcube_message_part Part object
+ * @param string Part's raw headers
*/
- function _set_part_filename(&$part)
+ function _set_part_filename(&$part, $headers=null)
{
if (!empty($part->d_parameters['filename']))
$filename_mime = $part->d_parameters['filename'];
@@ -1259,10 +1281,9 @@ class rcube_imap
}
// some servers (eg. dovecot-1.x) have no support for parameter value continuations
// we must fetch and parse headers "manually"
- //TODO: fetching headers for a second time is not effecient, this code should be moved somewhere earlier --tensor
if ($i<2) {
- // TODO: fetch only Content-Type/Content-Disposition header
- $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
+ if (!$headers)
+ $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
$filename_mime = '';
$i = 0;
while (preg_match('/filename\*'.$i.'\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
@@ -1278,7 +1299,8 @@ class rcube_imap
$i++;
}
if ($i<2) {
- $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
+ if (!$headers)
+ $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
$filename_encoded = '';
$i = 0; $matches = array();
while (preg_match('/filename\*'.$i.'\*\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
@@ -1294,7 +1316,8 @@ class rcube_imap
$i++;
}
if ($i<2) {
- $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
+ if (!$headers)
+ $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
$filename_mime = '';
$i = 0; $matches = array();
while (preg_match('/\s+name\*'.$i.'\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
@@ -1310,7 +1333,8 @@ class rcube_imap
$i++;
}
if ($i<2) {
- $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
+ if (!$headers)
+ $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
$filename_encoded = '';
$i = 0; $matches = array();
while (preg_match('/\s+name\*'.$i.'\*\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
@@ -1550,7 +1574,6 @@ class rcube_imap
*/
function save_message($mbox_name, &$message)
{
- $mbox_name = stripslashes($mbox_name);
$mailbox = $this->_mod_mailbox($mbox_name);
// make sure mailbox exists
@@ -1577,13 +1600,11 @@ class rcube_imap
*/
function move_message($uids, $to_mbox, $from_mbox='')
{
- $to_mbox_in = stripslashes($to_mbox);
- $from_mbox = stripslashes($from_mbox);
- $to_mbox = $this->_mod_mailbox($to_mbox_in);
+ $to_mbox = $this->_mod_mailbox($to_mbox);
$from_mbox = $from_mbox ? $this->_mod_mailbox($from_mbox) : $this->mailbox;
// make sure mailbox exists
- if (!in_array($to_mbox, $this->_list_mailboxes()))
+ if ($to_mbox != 'INBOX' && !in_array($to_mbox, $this->_list_mailboxes()))
{
if (in_array($to_mbox_in, $this->default_folders))
$this->create_mailbox($to_mbox_in, TRUE);
@@ -1654,7 +1675,6 @@ class rcube_imap
*/
function delete_message($uids, $mbox_name='')
{
- $mbox_name = stripslashes($mbox_name);
$mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
// convert the list of uids to array
@@ -1711,7 +1731,6 @@ class rcube_imap
*/
function clear_mailbox($mbox_name=NULL)
{
- $mbox_name = stripslashes($mbox_name);
$mailbox = !empty($mbox_name) ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
$msg_count = $this->_messagecount($mailbox, 'ALL');
@@ -1744,7 +1763,6 @@ class rcube_imap
*/
function expunge($mbox_name='', $clear_cache=TRUE)
{
- $mbox_name = stripslashes($mbox_name);
$mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
return $this->_expunge($mailbox, $clear_cache);
}
@@ -1863,9 +1881,6 @@ class rcube_imap
{
$result = FALSE;
- // replace backslashes
- $name = preg_replace('/[\\\]+/', '-', $name);
-
// reduce mailbox name to 100 chars
$name = substr($name, 0, 100);
@@ -1894,9 +1909,6 @@ class rcube_imap
{
$result = FALSE;
- // replace backslashes
- $name = preg_replace('/[\\\]+/', '-', $new_name);
-
// encode mailbox name and reduce it to 100 chars
$name = substr($new_name, 0, 100);
@@ -2341,7 +2353,7 @@ class rcube_imap
{
if (empty($key) || !is_object($headers) || empty($headers->uid))
return;
-
+
// add to internal (fast) cache
$this->cache['__single_msg'][$headers->uid] = $headers;
$this->cache['__single_msg'][$headers->uid]->structure = $struct;
@@ -2482,6 +2494,40 @@ class rcube_imap
return $out;
}
+
+
+ /**
+ * Decode a Microsoft Outlook TNEF part (winmail.dat)
+ *
+ * @param object rcube_message_part Message part to decode
+ * @param string UID of the message
+ * @return array List of rcube_message_parts extracted from windmail.dat
+ */
+ function tnef_decode(&$part, $uid)
+ {
+ if (!isset($part->body))
+ $part->body = $this->get_message_part($uid, $part->mime_id, $part);
+
+ $pid = 0;
+ $tnef_parts = array();
+ $tnef_arr = tnef_decode($part->body);
+ foreach ($tnef_arr as $winatt) {
+ $tpart = new rcube_message_part;
+ $tpart->filename = $winatt["name"];
+ $tpart->encoding = 'stream';
+ $tpart->ctype_primary = $winatt["type0"];
+ $tpart->ctype_secondary = $winatt["type1"];
+ $tpart->mimetype = strtolower($winatt["type0"] . "/" . $winatt["type1"]);
+ $tpart->mime_id = "winmail." . $part->mime_id . ".$pid";
+ $tpart->size = $winatt["size"];
+ $tpart->body = $winatt['stream'];
+
+ $tnef_parts[] = $tpart;
+ $pid++;
+ }
+
+ return $tnef_parts;
+ }
/**
@@ -2913,53 +2959,33 @@ class rcube_imap
function _parse_address_list($str, $decode=true)
{
// remove any newlines and carriage returns before
- $a = $this->_explode_quoted_string('[,;]', preg_replace( "/[\r\n]/", " ", $str));
+ $a = rcube_explode_quoted_string('[,;]', preg_replace( "/[\r\n]/", " ", $str));
$result = array();
-
+
foreach ($a as $key => $val)
{
$val = preg_replace("/([\"\w])", "$1 <", $val);
- $sub_a = $this->_explode_quoted_string(' ', $decode ? $this->decode_header($val) : $val);
+ $sub_a = rcube_explode_quoted_string(' ', $decode ? $this->decode_header($val) : $val);
$result[$key]['name'] = '';
foreach ($sub_a as $k => $v)
{
- if (strpos($v, '@') > 0)
- $result[$key]['address'] = str_replace('<', '', str_replace('>', '', $v));
+ // use angle brackets in regexp to not handle names with @ sign
+ if (preg_match('/^<\S+@\S+>$/', $v))
+ $result[$key]['address'] = trim($v, '<>');
else
$result[$key]['name'] .= (empty($result[$key]['name'])?'':' ').str_replace("\"",'',stripslashes($v));
}
if (empty($result[$key]['name']))
$result[$key]['name'] = $result[$key]['address'];
+ elseif (empty($result[$key]['address']))
+ $result[$key]['address'] = $result[$key]['name'];
}
return $result;
}
-
- /**
- * @access private
- */
- function _explode_quoted_string($delimiter, $string)
- {
- $result = array();
- $strlen = strlen($string);
- for ($q=$p=$i=0; $i < $strlen; $i++)
- {
- if ($string{$i} == "\"" && $string{$i-1} != "\\")
- $q = $q ? false : true;
- else if (!$q && preg_match("/$delimiter/", $string{$i}))
- {
- $result[] = substr($string, $p, $i - $p);
- $p = $i + 1;
- }
- }
-
- $result[] = substr($string, $p);
- return $result;
- }
-
} // end class rcube_imap
diff --git a/program/include/rcube_json_output.php b/program/include/rcube_json_output.php
index 00b7697..0bd3a2b 100644
--- a/program/include/rcube_json_output.php
+++ b/program/include/rcube_json_output.php
@@ -5,7 +5,7 @@
| program/include/rcube_json_output.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php
index 7143aaf..f1bbab6 100644
--- a/program/include/rcube_ldap.php
+++ b/program/include/rcube_ldap.php
@@ -4,7 +4,7 @@
| program/include/rcube_ldap.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2006-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -14,7 +14,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: rcube_ldap.php 2157 2008-12-16 15:28:07Z thomasb $
+ $Id: rcube_ldap.php 2237 2009-01-17 01:55:39Z till $
*/
@@ -71,7 +71,7 @@ class rcube_ldap
global $RCMAIL;
if (!function_exists('ldap_connect'))
- raise_error(array('type' => 'ldap', 'message' => "No ldap support in this installation of PHP"), true);
+ raise_error(array('code' => 100, 'type' => 'ldap', 'message' => "No ldap support in this installation of PHP"), true);
if (is_resource($this->conn))
return true;
@@ -122,7 +122,7 @@ class rcube_ldap
$this->ready = $this->bind($this->prop['bind_dn'], $this->prop['bind_pass']);
}
else
- raise_error(array('type' => 'ldap', 'message' => "Could not connect to any LDAP server, tried $host:{$this->prop[port]} last"), true);
+ raise_error(array('code' => 100, 'type' => 'ldap', 'message' => "Could not connect to any LDAP server, tried $host:{$this->prop[port]} last"), true);
// See if the directory is writeable.
if ($this->prop['writable']) {
diff --git a/program/include/rcube_mail_mime.php b/program/include/rcube_mail_mime.php
index c86be49..f59354f 100644
--- a/program/include/rcube_mail_mime.php
+++ b/program/include/rcube_mail_mime.php
@@ -5,7 +5,7 @@
| program/include/rcube_mail_mime.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2007-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2007-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -128,7 +128,7 @@ class rcube_mail_mime extends Mail_mime
{
// if header contains e-mail addresses
if (preg_match('/\s<.+@[a-z0-9\-\.]+\.[a-z]+>/U', $hdr_value)) {
- $chunks = $this->_explode_quoted_string(',', $hdr_value);
+ $chunks = rcube_explode_quoted_string(',', $hdr_value);
}
else {
$chunks = array($hdr_value);
@@ -187,24 +187,6 @@ class rcube_mail_mime extends Mail_mime
}
- function _explode_quoted_string($delimiter, $string)
- {
- $result = array();
- $strlen = strlen($string);
- for ($q=$p=$i=0; $i < $strlen; $i++) {
- if ($string{$i} == "\"" && $string{$i-1} != "\\") {
- $q = $q ? false : true;
- }
- else if (!$q && $string{$i} == $delimiter) {
- $result[] = substr($string, $p, $i - $p);
- $p = $i + 1;
- }
- }
-
- $result[] = substr($string, $p);
- return $result;
- }
-
/**
* Provides caching of body of constructed MIME Message to avoid
* duplicate construction of message and damage of MIME headers
diff --git a/program/include/rcube_mdb2.php b/program/include/rcube_mdb2.php
index b8238a3..36b5cc7 100644
--- a/program/include/rcube_mdb2.php
+++ b/program/include/rcube_mdb2.php
@@ -5,7 +5,7 @@
| program/include/rcube_mdb2.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -16,7 +16,7 @@
| Author: Lukas Kahwe Smith |
+-----------------------------------------------------------------------+
- $Id: rcube_mdb2.php 1978 2008-10-14 12:49:44Z thomasb $
+ $Id: rcube_mdb2.php 2237 2009-01-17 01:55:39Z till $
*/
@@ -288,17 +288,18 @@ class rcube_mdb2
/**
- * Get number of affected rows fort he last query
+ * Get number of affected rows for the last query
*
+ * @param number Optional query handle identifier
* @return mixed Number of rows or FALSE on failure
* @access public
*/
- function affected_rows($result = null)
+ function affected_rows($res_id = null)
{
if (!$this->db_handle)
return FALSE;
- return $this->_get_result($result);
+ return (int) $this->_get_result($res_id);
}
@@ -350,7 +351,7 @@ class rcube_mdb2
/**
- * Get co values for a result row
+ * Get col values for a result row
*
* @param object Query result handle
* @param number Fetch mode identifier
@@ -359,12 +360,8 @@ class rcube_mdb2
*/
function _fetch_row($result, $mode)
{
- if (PEAR::isError($result))
- {
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $this->db_link->getMessage()), TRUE, FALSE);
+ if ($result === FALSE || PEAR::isError($result))
return FALSE;
- }
return $result->fetchRow($mode);
}
@@ -398,13 +395,13 @@ class rcube_mdb2
* @param string Value to quote
* @return string Quoted string for use in query
* @deprecated Replaced by rcube_MDB2::quote_identifier
- * @see rcube_MDB2::quote_identifier
+ * @see rcube_mdb2::quote_identifier
* @access public
*/
function quoteIdentifier($str)
- {
+ {
return $this->quote_identifier($str);
- }
+ }
/**
@@ -529,7 +526,7 @@ class rcube_mdb2
* Adds a query result and returns a handle ID
*
* @param object Query handle
- * @return mixed Handle ID or FALE on failure
+ * @return mixed Handle ID
* @access private
*/
function _add_result($res)
@@ -537,26 +534,27 @@ class rcube_mdb2
// sql error occured
if (PEAR::isError($res))
{
+ $this->db_error = TRUE;
+ $this->db_error_msg = $res->getMessage();
raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $res->getMessage() . " Query: " . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)), TRUE, FALSE);
- return FALSE;
- }
- else
- {
- $res_id = sizeof($this->a_query_results);
- $this->a_query_results[$res_id] = $res;
- $this->last_res_id = $res_id;
- return $res_id;
+ 'message' => $res->getMessage() . " Query: "
+ . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)),
+ TRUE, FALSE);
}
+
+ $res_id = sizeof($this->a_query_results);
+ $this->last_res_id = $res_id;
+ $this->a_query_results[$res_id] = $res;
+ return $res_id;
}
/**
* Resolves a given handle ID and returns the according query handle
- * If no ID is specified, the last ressource handle will be returned
+ * If no ID is specified, the last resource handle will be returned
*
* @param number Handle ID
- * @return mixed Ressource handle or FALE on failure
+ * @return mixed Resource handle or FALSE on failure
* @access private
*/
function _get_result($res_id=NULL)
@@ -564,10 +562,11 @@ class rcube_mdb2
if ($res_id==NULL)
$res_id = $this->last_res_id;
- if ($res_id && isset($this->a_query_results[$res_id]))
- return $this->a_query_results[$res_id];
- else
- return FALSE;
+ if (isset($this->a_query_results[$res_id]))
+ if (!PEAR::isError($this->a_query_results[$res_id]))
+ return $this->a_query_results[$res_id];
+
+ return FALSE;
}
diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index 6f4963b..ec3be4b 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -5,7 +5,7 @@
| program/include/rcube_message.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -65,19 +65,19 @@ class rcube_message
$this->imap = $this->app->imap;
$this->uid = $uid;
- $this->headers = $this->imap->get_headers($uid);
+ $this->headers = $this->imap->get_headers($uid, NULL, true, true);
+
$this->subject = rcube_imap::decode_mime_string($this->headers->subject, $this->headers->charset);
list(, $this->sender) = each($this->imap->decode_address_list($this->headers->from));
$this->set_safe((intval($_GET['_safe']) || $_SESSION['safe_messages'][$uid]));
-
$this->opt = array(
'safe' => $this->is_safe,
'prefer_html' => $this->app->config->get('prefer_html'),
'get_url' => rcmail_url('get', array('_mbox' => $this->imap->get_mailbox_name(), '_uid' => $uid))
);
- if ($this->structure = $this->imap->get_structure($uid)) {
+ if ($this->structure = $this->imap->get_structure($uid, $this->headers->body_structure)) {
$this->get_mime_numbers($this->structure);
$this->parse_structure($this->structure);
}
@@ -166,17 +166,13 @@ class rcube_message
*/
function first_html_part()
{
- $html_part = null;
-
// check all message parts
foreach ($this->mime_parts as $mime_id => $part) {
$mimetype = strtolower($part->ctype_primary . '/' . $part->ctype_secondary);
if ($mimetype == 'text/html') {
- $html_part = $this->imap->get_message_part($this->uid, $mime_id, $part);
+ return $this->imap->get_message_part($this->uid, $mime_id, $part);
}
}
-
- return $html_part;
}
@@ -266,7 +262,7 @@ class rcube_message
$html_part = $p;
else if ($sub_ctype_primary=='text' && $sub_ctype_secondary=='enriched')
$enriched_part = $p;
- else if ($sub_ctype_primary=='multipart' && ($sub_ctype_secondary=='related' || $sub_ctype_secondary=='mixed'))
+ else if ($sub_ctype_primary=='multipart' && in_array($sub_ctype_secondary, array('related', 'mixed', 'alternative')))
$related_part = $p;
}
@@ -366,6 +362,14 @@ class rcube_message
// ignore "virtual" protocol parts
else if ($primary_type == 'protocol')
continue;
+
+ // part is Microsoft outlook TNEF (winmail.dat)
+ else if ($primary_type == 'application' && $secondary_type == 'ms-tnef') {
+ foreach ((array)$this->imap->tnef_decode($mail_part, $structure->headers['uid']) as $tnef_part) {
+ $this->mime_parts[$tnef_part->mime_id] = $tnef_part;
+ $this->attachments[] = $tnef_part;
+ }
+ }
// part is file/attachment
else if ($mail_part->disposition == 'attachment' || $mail_part->disposition == 'inline' ||
@@ -381,10 +385,10 @@ class rcube_message
if ($mail_part->headers['content-location'])
$mail_part->content_location = $mail_part->headers['content-base'] . $mail_part->headers['content-location'];
- if ($mail_part->content_id || $mail_part->content_location) {
+ if ($mail_part->content_id || $mail_part->content_location) {
$this->inline_parts[] = $mail_part;
}
- }
+ }
// is regular attachment
else {
if (!$mail_part->filename)
diff --git a/program/include/rcube_result_set.php b/program/include/rcube_result_set.php
index b3afe69..036ebc3 100644
--- a/program/include/rcube_result_set.php
+++ b/program/include/rcube_result_set.php
@@ -5,7 +5,7 @@
| program/include/rcube_result_set.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2006-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index 345f75e..370b4bc 100644
--- a/program/include/rcube_shared.inc
+++ b/program/include/rcube_shared.inc
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: rcube_shared.inc 2147 2008-12-11 17:29:50Z alec $
+ $Id: rcube_shared.inc 2313 2009-02-27 10:18:18Z thomasb $
*/
@@ -309,7 +309,7 @@ function make_absolute_url($path, $base_url)
return $path;
// cut base_url to the last directory
- if (strpos($base_url, '/')>7)
+ if (strrpos($base_url, '/')>7)
{
$host_url = substr($base_url, 0, strpos($base_url, '/'));
$base_url = substr($base_url, 0, strrpos($base_url, '/'));
@@ -535,6 +535,7 @@ function get_offset_time($offset_str, $factor=1)
* A method to guess the mime_type of an attachment.
*
* @param string $path Path to the file.
+ * @param string $name File name (with suffix)
* @param string $failover Mime type supplied for failover.
*
* @return string
@@ -542,25 +543,34 @@ function get_offset_time($offset_str, $factor=1)
* @see http://de2.php.net/manual/en/ref.fileinfo.php
* @see http://de2.php.net/mime_content_type
*/
-function rc_mime_content_type($path, $failover = 'application/octet-stream')
+function rc_mime_content_type($path, $name, $failover = 'application/octet-stream')
{
$mime_type = null;
$mime_magic = rcmail::get_instance()->config->get('mime_magic');
+ $mime_ext = @include(RCMAIL_CONFIG_DIR . '/mimetypes.php');
+ $suffix = $name ? substr($name, strrpos($name, '.')+1) : '*';
- if (!extension_loaded('fileinfo')) {
- @dl('fileinfo.' . PHP_SHLIB_SUFFIX);
+ // use file name suffix with hard-coded mime-type map
+ if (is_array($mime_ext)) {
+ $mime_type = $mime_ext[$suffix];
}
-
- if (function_exists('finfo_open')) {
- if ($finfo = finfo_open(FILEINFO_MIME, $mime_magic)) {
- $mime_type = finfo_file($finfo, $path);
- finfo_close($finfo);
+ // try fileinfo extension if available
+ if (!$mime_type) {
+ if (!extension_loaded('fileinfo')) {
+ @dl('fileinfo.' . PHP_SHLIB_SUFFIX);
+ }
+ if (function_exists('finfo_open')) {
+ if ($finfo = finfo_open(FILEINFO_MIME, $mime_magic)) {
+ $mime_type = finfo_file($finfo, $path);
+ finfo_close($finfo);
+ }
}
}
+ // try PHP's mime_content_type
if (!$mime_type && function_exists('mime_content_type')) {
$mime_type = mime_content_type($path);
}
-
+ // fall back to user-submitted string
if (!$mime_type) {
$mime_type = $failover;
}
@@ -599,4 +609,30 @@ function rc_detect_encoding($string, $failover='')
return $result ? $result : $failover;
}
+
+/**
+ * Explode quoted string
+ *
+ * @param string Delimiter expression string for preg_match()
+ * @param string Input string
+ */
+function rcube_explode_quoted_string($delimiter, $string)
+{
+ $result = array();
+ $strlen = strlen($string);
+
+ for ($q=$p=$i=0; $i < $strlen; $i++) {
+ if ($string[$i] == "\"" && $string[$i-1] != "\\") {
+ $q = $q ? false : true;
+ }
+ else if (!$q && preg_match("/$delimiter/", $string[$i])) {
+ $result[] = substr($string, $p, $i - $p);
+ $p = $i + 1;
+ }
+ }
+
+ $result[] = substr($string, $p);
+ return $result;
+}
+
?>
diff --git a/program/include/rcube_smtp.inc b/program/include/rcube_smtp.inc
index 309d420..f4995d8 100644
--- a/program/include/rcube_smtp.inc
+++ b/program/include/rcube_smtp.inc
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: rcube_smtp.inc 2155 2008-12-16 13:00:55Z alec $
+ $Id: rcube_smtp.inc 2291 2009-02-13 10:44:49Z alec $
*/
@@ -327,7 +327,7 @@ function smtp_parse_rfc822($recipients)
$recipients = implode(', ', $recipients);
$addresses = array();
- $recipients = smtp_explode_quoted_str(",", $recipients);
+ $recipients = rcube_explode_quoted_string(',', $recipients);
reset($recipients);
while (list($k, $recipient) = each($recipients))
@@ -346,24 +346,4 @@ function smtp_parse_rfc822($recipients)
return $addresses;
}
-
-/**
- * @access private
- */
-function smtp_explode_quoted_str($delimiter, $string)
- {
- $quotes=explode("\"", $string);
- while ( list($key, $val) = each($quotes))
- if (($key % 2) == 1)
- $quotes[$key] = str_replace($delimiter, "_!@!_", $quotes[$key]);
- $string=implode("\"", $quotes);
-
- $result=explode($delimiter, $string);
- while (list($key, $val) = each($result))
- $result[$key] = str_replace("_!@!_", $delimiter, $result[$key]);
-
- return $result;
- }
-
-
?>
diff --git a/program/include/rcube_string_replacer.php b/program/include/rcube_string_replacer.php
new file mode 100644
index 0000000..fe082a5
--- /dev/null
+++ b/program/include/rcube_string_replacer.php
@@ -0,0 +1,116 @@
+ |
+ +-----------------------------------------------------------------------+
+
+ $Id: $
+
+*/
+
+
+/**
+ * Helper class for string replacements based on preg_replace_callback
+ *
+ * @package Core
+ */
+class rcube_string_replacer
+{
+ public static $pattern = '/##str_replacement\[([0-9]+)\]##/';
+
+ private $values = array();
+
+
+ /**
+ * Add a string to the internal list
+ *
+ * @param string String value
+ * @return int Index of value for retrieval
+ */
+ public function add($str)
+ {
+ $i = count($this->values);
+ $this->values[$i] = $str;
+ return $i;
+ }
+
+ /**
+ * Build replacement string
+ */
+ public function get_replacement($i)
+ {
+ return '##str_replacement['.$i.']##';
+ }
+
+ /**
+ * Callback function used to build HTML links around URL strings
+ *
+ * @param array Matches result from preg_replace_callback
+ * @return int Index of saved string value
+ */
+ public function link_callback($matches)
+ {
+ $i = -1;
+ $scheme = strtolower($matches[1]);
+
+ if ($scheme == 'http' || $scheme == 'https' || $scheme == 'ftp') {
+ $url = $matches[1] . '://' . $matches[2];
+ $i = $this->add(html::a(array('href' => $url, 'target' => "_blank"), Q($url)));
+ }
+ else if ($matches[2] == 'www.') {
+ $url = $matches[2] . $matches[3];
+ $i = $this->add($matches[1] . html::a(array('href' => 'http://' . $url, 'target' => "_blank"), Q($url)));
+ }
+
+ return $i >= 0 ? $this->get_replacement($i) : '';
+ }
+
+ /**
+ * Callback function used to build mailto: links around e-mail strings
+ *
+ * @param array Matches result from preg_replace_callback
+ * @return int Index of saved string value
+ */
+ public function mailto_callback($matches)
+ {
+ $i = $this->add(html::a(array(
+ 'href' => 'mailto:' . $matches[1],
+ 'onclick' => "return ".JS_OBJECT_NAME.".command('compose','".JQ($matches[1])."',this)",
+ ),
+ Q($matches[1])));
+
+ return $i >= 0 ? $this->get_replacement($i) : '';
+ }
+
+ /**
+ * Look up the index from the preg_replace matches array
+ * and return the substitution value.
+ *
+ * @param array Matches result from preg_replace_callback
+ * @return string Value at index $matches[1]
+ */
+ public function replace_callback($matches)
+ {
+ return $this->values[$matches[1]];
+ }
+
+ /**
+ * Replace substituted strings with original values
+ */
+ public function resolve($str)
+ {
+ return preg_replace_callback(self::$pattern, array($this, 'replace_callback'), $str);
+ }
+
+}
\ No newline at end of file
diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index 5e45fb6..1e732ca 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -5,7 +5,7 @@
| program/include/rcube_template.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2006-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index 64d2c75..b8833b3 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -5,7 +5,7 @@
| program/include/rcube_user.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/include/rcube_vcard.php b/program/include/rcube_vcard.php
index 3179766..ce5087a 100644
--- a/program/include/rcube_vcard.php
+++ b/program/include/rcube_vcard.php
@@ -5,7 +5,7 @@
| program/include/rcube_vcard.php |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -226,10 +226,14 @@ class rcube_vcard
return $vcard;
}
+ private static function rfc2425_fold_callback($matches)
+ {
+ return ":\n ".rtrim(chunk_split($matches[1], 72, "\n "));
+ }
private static function rfc2425_fold($val)
{
- return preg_replace('/:([^\n]{72,})/e', '":\n ".rtrim(chunk_split("\\1", 72, "\n "))', $val) . "\n";
+ return preg_replace_callback('/:([^\n]{72,})/', array('self', 'rfc2425_fold_callback'), $val) . "\n";
}
diff --git a/program/include/session.inc b/program/include/session.inc
index 9efded0..b1ff1d2 100644
--- a/program/include/session.inc
+++ b/program/include/session.inc
@@ -5,7 +5,7 @@
| program/include/session.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: session.inc 2084 2008-11-23 13:24:49Z thomasb $
+ $Id: session.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/js/app.js b/program/js/app.js
index b5e8a4f..e4f6a2a 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1,3310 +1,4222 @@
+/*
+ +-----------------------------------------------------------------------+
+ | RoundCube Webmail Client Script |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2009, RoundCube Dev, - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Authors: Thomas Bruederli |
+ | Charles McNulty |
+ +-----------------------------------------------------------------------+
+ | Requires: common.js, list.js |
+ +-----------------------------------------------------------------------+
+
+ $Id: app.js 2318 2009-02-27 11:06:29Z thomasb $
+*/
+
+
var rcube_webmail_client;
-function rcube_webmail(){
-this.env=new Object();
-this.labels=new Object();
-this.buttons=new Object();
-this.gui_objects=new Object();
-this.commands=new Object();
-this.onloads=new Array();
-rcube_webmail_client=this;
-this.ref="rcube_webmail_client";
-var _1=this;
-this.dblclick_time=500;
-this.message_time=3000;
-this.identifier_expr=new RegExp("[^0-9a-z-_]","gi");
-this.mimetypes=new Array("text/plain","text/html","text/xml","image/jpeg","image/gif","image/png","application/x-javascript","application/pdf","application/x-shockwave-flash");
-this.env.keep_alive=60;
-this.env.request_timeout=180;
-this.env.draft_autosave=0;
-this.env.comm_path="./";
-this.env.bin_path="./bin/";
-this.env.blankpage="program/blank.gif";
-this.set_env=function(p,_3){
-if(p!=null&&typeof (p)=="object"&&!_3){
-for(var n in p){
-this.env[n]=p[n];
-}
-}else{
-this.env[p]=_3;
-}
-};
-this.add_label=function(_5,_6){
-this.labels[_5]=_6;
-};
-this.register_button=function(_7,id,_9,_a,_b,_c){
-if(!this.buttons[_7]){
-this.buttons[_7]=new Array();
-}
-var _d={id:id,type:_9};
-if(_a){
-_d.act=_a;
-}
-if(_b){
-_d.sel=_b;
-}
-if(_c){
-_d.over=_c;
-}
-this.buttons[_7][this.buttons[_7].length]=_d;
-};
-this.gui_object=function(_e,id){
-this.gui_objects[_e]=id;
-};
-this.add_onload=function(f){
-this.onloads[this.onloads.length]=f;
-};
-this.init=function(){
-var p=this;
-this.task=this.env.task;
-if(!bw.dom||!bw.xmlhttp_test()){
-this.goto_url("error","_code=0x199");
-return;
-}
-for(var n in this.gui_objects){
-this.gui_objects[n]=rcube_find_object(this.gui_objects[n]);
-}
-if(this.env.framed&&parent.rcmail&&parent.rcmail.set_busy){
-parent.rcmail.set_busy(false);
-}
-this.enable_command("logout","mail","addressbook","settings",true);
-if(this.env.permaurl){
-this.enable_command("permaurl",true);
-}
-switch(this.task){
-case "mail":
-if(this.gui_objects.messagelist){
-this.message_list=new rcube_list_widget(this.gui_objects.messagelist,{multiselect:true,draggable:true,keyboard:true,dblclick_time:this.dblclick_time});
-this.message_list.row_init=function(o){
-p.init_message_row(o);
-};
-this.message_list.addEventListener("dblclick",function(o){
-p.msglist_dbl_click(o);
-});
-this.message_list.addEventListener("keypress",function(o){
-p.msglist_keypress(o);
-});
-this.message_list.addEventListener("select",function(o){
-p.msglist_select(o);
-});
-this.message_list.addEventListener("dragstart",function(o){
-p.drag_start(o);
-});
-this.message_list.addEventListener("dragmove",function(o,e){
-p.drag_move(e);
-});
-this.message_list.addEventListener("dragend",function(o){
-p.drag_active=false;
-});
-this.message_list.init();
-this.enable_command("toggle_status","toggle_flag",true);
-if(this.gui_objects.mailcontframe){
-this.gui_objects.mailcontframe.onmousedown=function(e){
-return p.click_on_list(e);
-};
-document.onmouseup=function(e){
-return p.doc_mouse_up(e);
-};
-}else{
-this.message_list.focus();
-}
-}
-if(this.env.coltypes){
-this.set_message_coltypes(this.env.coltypes);
-}
-this.enable_command("list","checkmail","compose","add-contact","search","reset-search","collapse-folder",true);
-if(this.env.search_text!=null&&document.getElementById("quicksearchbox")!=null){
-document.getElementById("quicksearchbox").value=this.env.search_text;
-}
-if(this.env.action=="show"||this.env.action=="preview"){
-this.enable_command("show","reply","reply-all","forward","moveto","delete","mark","viewsource","print","load-attachment","load-headers",true);
-if(this.env.next_uid){
-this.enable_command("nextmessage",true);
-this.enable_command("lastmessage",true);
-}
-if(this.env.prev_uid){
-this.enable_command("previousmessage",true);
-this.enable_command("firstmessage",true);
-}
-}
-if(this.env.trash_mailbox&&this.env.mailbox!=this.env.trash_mailbox){
-this.set_alttext("delete","movemessagetotrash");
-}
-if(this.env.action=="preview"&&this.env.framed&&parent.rcmail){
-this.enable_command("compose","add-contact",false);
-parent.rcmail.show_contentframe(true);
-}
-if((this.env.action=="show"||this.env.action=="preview")&&this.env.blockedobjects){
-if(this.gui_objects.remoteobjectsmsg){
-this.gui_objects.remoteobjectsmsg.style.display="block";
-}
-this.enable_command("load-images","always-load",true);
-}
-if(this.env.action=="compose"){
-this.enable_command("add-attachment","send-attachment","remove-attachment","send",true);
-if(this.env.spellcheck){
-this.env.spellcheck.spelling_state_observer=function(s){
-_1.set_spellcheck_state(s);
-};
-this.set_spellcheck_state("ready");
-if(rcube_find_object("_is_html").value=="1"){
-this.display_spellcheck_controls(false);
-}
-}
-if(this.env.drafts_mailbox){
-this.enable_command("savedraft",true);
-}
-document.onmouseup=function(e){
-return p.doc_mouse_up(e);
-};
-}
-if(this.env.messagecount){
-this.enable_command("select-all","select-none","expunge",true);
-}
-if(this.purge_mailbox_test()){
-this.enable_command("purge",true);
-}
-this.set_page_buttons();
-if(this.env.action=="compose"){
-this.init_messageform();
-}
-if(this.env.action=="print"){
-window.print();
-}
-if(this.gui_objects.mailboxlist){
-this.env.unread_counts={};
-this.gui_objects.folderlist=this.gui_objects.mailboxlist;
-this.http_request("getunread","");
-}
-if(this.env.mdn_request&&this.env.uid){
-var _1f="_uid="+this.env.uid+"&_mbox="+urlencode(this.env.mailbox);
-if(confirm(this.get_label("mdnrequest"))){
-this.http_post("sendmdn",_1f);
-}else{
-this.http_post("mark",_1f+"&_flag=mdnsent");
-}
-}
-break;
-case "addressbook":
-if(this.gui_objects.contactslist){
-this.contact_list=new rcube_list_widget(this.gui_objects.contactslist,{multiselect:true,draggable:true,keyboard:true});
-this.contact_list.addEventListener("keypress",function(o){
-p.contactlist_keypress(o);
-});
-this.contact_list.addEventListener("select",function(o){
-p.contactlist_select(o);
-});
-this.contact_list.addEventListener("dragstart",function(o){
-p.drag_start(o);
-});
-this.contact_list.addEventListener("dragmove",function(o,e){
-p.drag_move(e);
-});
-this.contact_list.addEventListener("dragend",function(o){
-p.drag_active=false;
-});
-this.contact_list.init();
-if(this.env.cid){
-this.contact_list.highlight_row(this.env.cid);
-}
-if(this.gui_objects.contactslist.parentNode){
-this.gui_objects.contactslist.parentNode.onmousedown=function(e){
-return p.click_on_list(e);
-};
-document.onmouseup=function(e){
-return p.doc_mouse_up(e);
-};
-}else{
-this.contact_list.focus();
-}
-}
-this.set_page_buttons();
-if(this.env.address_sources&&this.env.address_sources[this.env.source]&&!this.env.address_sources[this.env.source].readonly){
-this.enable_command("add",true);
-}
-if(this.env.cid){
-this.enable_command("show","edit",true);
-}
-if((this.env.action=="add"||this.env.action=="edit")&&this.gui_objects.editform){
-this.enable_command("save",true);
-}else{
-this.enable_command("search","reset-search","moveto","import",true);
-}
-if(this.contact_list&&this.contact_list.rowcount>0){
-this.enable_command("export",true);
-}
-this.enable_command("list",true);
-break;
-case "settings":
-this.enable_command("preferences","identities","save","folders",true);
-if(this.env.action=="identities"||this.env.action=="edit-identity"||this.env.action=="add-identity"){
-this.enable_command("add",this.env.identities_level<2);
-this.enable_command("delete","edit",true);
-}
-if(this.env.action=="edit-identity"||this.env.action=="add-identity"){
-this.enable_command("save",true);
-}
-if(this.env.action=="folders"){
-this.enable_command("subscribe","unsubscribe","create-folder","rename-folder","delete-folder",true);
-}
-if(this.gui_objects.identitieslist){
-this.identity_list=new rcube_list_widget(this.gui_objects.identitieslist,{multiselect:false,draggable:false,keyboard:false});
-this.identity_list.addEventListener("select",function(o){
-p.identity_select(o);
-});
-this.identity_list.init();
-this.identity_list.focus();
-if(this.env.iid){
-this.identity_list.highlight_row(this.env.iid);
-}
-}
-if(this.gui_objects.subscriptionlist){
-this.init_subscription_list();
-}
-break;
-case "login":
-var _29=rcube_find_object("rcmloginuser");
-var _2a=rcube_find_object("rcmloginpwd");
-var _2b=rcube_find_object("rcmlogintz");
-if(_29){
-_29.onkeyup=function(e){
-return rcmail.login_user_keyup(e);
-};
-}
-if(_29&&_29.value==""){
-_29.focus();
-}else{
-if(_2a){
-_2a.focus();
-}
-}
-if(_2b){
-_2b.value=new Date().getTimezoneOffset()/-60;
-}
-this.enable_command("login",true);
-break;
-default:
-break;
-}
-this.enable_command("logout",true);
-this.loaded=true;
-if(this.pending_message){
-this.display_message(this.pending_message[0],this.pending_message[1]);
-}
-this.start_keepalive();
-for(var i=0;i=0){
-this.set_env("flagged_col",_32+1);
-}
-}
-if(this.env.flagged_col&&(row.flagged_icon=row.obj.cells[this.env.flagged_col].childNodes[0])&&row.flagged_icon.nodeName=="IMG"){
-var p=this;
-row.flagged_icon.id="flaggedicn_"+row.uid;
-row.flagged_icon._row=row.obj;
-row.flagged_icon.onmousedown=function(e){
-p.command("toggle_flag",this);
-};
-}
-};
-this.init_messageform=function(){
-if(!this.gui_objects.messageform){
-return false;
-}
-var _34=rcube_find_object("_from");
-var _35=rcube_find_object("_to");
-var _36=rcube_find_object("_cc");
-var _37=rcube_find_object("_bcc");
-var _38=rcube_find_object("_replyto");
-var _39=rcube_find_object("_subject");
-var _3a=rcube_find_object("_message");
-var _3b=rcube_find_object("_draft_saveid");
-if(_35){
-this.init_address_input_events(_35);
-}
-if(_36){
-this.init_address_input_events(_36);
-}
-if(_37){
-this.init_address_input_events(_37);
-}
-if(_34&&_34.type=="select-one"&&(!_3b||_3b.value=="")&&rcube_find_object("_is_html").value!="1"){
-this.change_identity(_34);
-}
-if(_35&&_35.value==""){
-_35.focus();
-}else{
-if(_39&&_39.value==""){
-_39.focus();
-}else{
-if(_3a){
-this.set_caret2start(_3a);
-}
-}
-}
-this.compose_field_hash(true);
-this.auto_save_start();
-};
-this.init_address_input_events=function(obj){
-var _3d=function(e){
-return _1.ksearch_keypress(e,this);
-};
-if(obj.addEventListener){
-obj.addEventListener(bw.safari?"keydown":"keypress",_3d,false);
-}else{
-obj.onkeydown=_3d;
-}
-obj.setAttribute("autocomplete","off");
-};
-this.command=function(_3f,_40,obj){
-if(obj&&obj.blur){
-obj.blur();
-}
-if(this.busy){
-return false;
-}
-if(!this.commands[_3f]){
-if(this.env.framed&&parent.rcmail&&parent.rcmail.command){
-parent.rcmail.command(_3f,_40);
-}
-return false;
-}
-if(this.task=="mail"&&this.env.action=="compose"&&(_3f=="list"||_3f=="mail"||_3f=="addressbook"||_3f=="settings")){
-if(this.cmp_hash!=this.compose_field_hash()&&!confirm(this.get_label("notsentwarning"))){
-return false;
-}
-}
-switch(_3f){
-case "login":
-if(this.gui_objects.loginform){
-this.gui_objects.loginform.submit();
-}
-break;
-case "logout":
-this.goto_url("logout","",true);
-break;
-case "mail":
-case "addressbook":
-case "settings":
-this.switch_task(_3f);
-break;
-case "permaurl":
-if(obj&&obj.href&&obj.target){
-return true;
-}else{
-if(this.env.permaurl){
-parent.location.href=this.env.permaurl;
-}
-}
-break;
-case "list":
-if(this.task=="mail"){
-if(this.env.search_request<0||(_40!=""&&(this.env.search_request&&_40!=this.env.mailbox))){
-this.reset_qsearch();
-}
-this.list_mailbox(_40);
-if(this.env.trash_mailbox){
-this.set_alttext("delete",this.env.mailbox!=this.env.trash_mailbox?"movemessagetotrash":"deletemessage");
-}
-}else{
-if(this.task=="addressbook"){
-if(this.env.search_request<0||(this.env.search_request&&_40!=this.env.source)){
-this.reset_qsearch();
-}
-this.list_contacts(_40);
-this.enable_command("add",(this.env.address_sources&&!this.env.address_sources[_40].readonly));
-}
-}
-break;
-case "load-headers":
-this.load_headers(obj);
-break;
-case "sort":
-var _42=_40.split("_");
-var _43=_42[0];
-var _44=_42[1]?_42[1].toUpperCase():null;
-var _45;
-if(_44==null){
-if(this.env.sort_col==_43){
-_44=this.env.sort_order=="ASC"?"DESC":"ASC";
-}else{
-_44=this.env.sort_order;
-}
-}
-if(this.env.sort_col==_43&&this.env.sort_order==_44){
-break;
-}
-if(_45=document.getElementById("rcm"+this.env.sort_col)){
-this.set_classname(_45,"sorted"+(this.env.sort_order.toUpperCase()),false);
-}
-if(_45=document.getElementById("rcm"+_43)){
-this.set_classname(_45,"sorted"+_44,true);
-}
-this.env.sort_col=_43;
-this.env.sort_order=_44;
-this.list_mailbox("","",_43+"_"+_44);
-break;
-case "nextpage":
-this.list_page("next");
-break;
-case "lastpage":
-this.list_page("last");
-break;
-case "previouspage":
-this.list_page("prev");
-break;
-case "firstpage":
-this.list_page("first");
-break;
-case "expunge":
-if(this.env.messagecount){
-this.expunge_mailbox(this.env.mailbox);
-}
-break;
-case "purge":
-case "empty-mailbox":
-if(this.env.messagecount){
-this.purge_mailbox(this.env.mailbox);
-}
-break;
-case "show":
-if(this.task=="mail"){
-var uid=this.get_single_uid();
-if(uid&&(!this.env.uid||uid!=this.env.uid)){
-if(this.env.mailbox==this.env.drafts_mailbox){
-this.goto_url("compose","_draft_uid="+uid+"&_mbox="+urlencode(this.env.mailbox),true);
-}else{
-this.show_message(uid);
-}
-}
-}else{
-if(this.task=="addressbook"){
-var cid=_40?_40:this.get_single_cid();
-if(cid&&!(this.env.action=="show"&&cid==this.env.cid)){
-this.load_contact(cid,"show");
-}
-}
-}
-break;
-case "add":
-if(this.task=="addressbook"){
-this.load_contact(0,"add");
-}else{
-if(this.task=="settings"){
-this.identity_list.clear_selection();
-this.load_identity(0,"add-identity");
-}
-}
-break;
-case "edit":
-var cid;
-if(this.task=="addressbook"&&(cid=this.get_single_cid())){
-this.load_contact(cid,"edit");
-}else{
-if(this.task=="settings"&&_40){
-this.load_identity(_40,"edit-identity");
-}
-}
-break;
-case "save-identity":
-case "save":
-if(this.gui_objects.editform){
-var _48=rcube_find_object("_pagesize");
-var _49=rcube_find_object("_name");
-var _4a=rcube_find_object("_email");
-if(_48&&isNaN(parseInt(_48.value))){
-alert(this.get_label("nopagesizewarning"));
-_48.focus();
-break;
-}else{
-if(_49&&_49.value==""){
-alert(this.get_label("nonamewarning"));
-_49.focus();
-break;
-}else{
-if(_4a&&!rcube_check_email(_4a.value)){
-alert(this.get_label("noemailwarning"));
-_4a.focus();
-break;
-}
-}
-}
-this.gui_objects.editform.submit();
-}
-break;
-case "delete":
-if(this.task=="mail"){
-this.delete_messages();
-}else{
-if(this.task=="addressbook"){
-this.delete_contacts();
-}else{
-if(this.task=="settings"){
-this.delete_identity();
-}
-}
-}
-break;
-case "move":
-case "moveto":
-if(this.task=="mail"){
-this.move_messages(_40);
-}else{
-if(this.task=="addressbook"&&this.drag_active){
-this.copy_contact(null,_40);
-}
-}
-break;
-case "mark":
-if(_40){
-this.mark_message(_40);
-}
-break;
-case "toggle_status":
-if(_40&&!_40._row){
-break;
-}
-var uid;
-var _4b="read";
-if(_40._row.uid){
-uid=_40._row.uid;
-if(this.message_list.rows[uid].deleted){
-_4b="undelete";
-}else{
-if(!this.message_list.rows[uid].unread){
-_4b="unread";
-}
-}
-}
-this.mark_message(_4b,uid);
-break;
-case "toggle_flag":
-if(_40&&!_40._row){
-break;
-}
-var uid;
-var _4b="flagged";
-if(_40._row.uid){
-uid=_40._row.uid;
-if(this.message_list.rows[uid].flagged){
-_4b="unflagged";
-}
-}
-this.mark_message(_4b,uid);
-break;
-case "always-load":
-if(this.env.uid&&this.env.sender){
-this.add_contact(urlencode(this.env.sender));
-window.setTimeout(function(){
-_1.command("load-images");
-},300);
-break;
-}
-case "load-images":
-if(this.env.uid){
-this.show_message(this.env.uid,true,this.env.action=="preview");
-}
-break;
-case "load-attachment":
-var _4c="_mbox="+urlencode(this.env.mailbox)+"&_uid="+this.env.uid+"&_part="+_40.part;
-if(this.env.uid&&_40.mimetype&&find_in_array(_40.mimetype,this.mimetypes)>=0){
-if(_40.mimetype=="text/html"){
-_4c+="&_safe=1";
-}
-this.attachment_win=window.open(this.env.comm_path+"&_action=get&"+_4c+"&_frame=1","rcubemailattachment");
-if(this.attachment_win){
-window.setTimeout(function(){
-_1.attachment_win.focus();
-},10);
-break;
-}
-}
-this.goto_url("get",_4c+"&_download=1",false);
-break;
-case "select-all":
-this.message_list.select_all(_40);
-break;
-case "select-none":
-this.message_list.clear_selection();
-break;
-case "nextmessage":
-if(this.env.next_uid){
-this.show_message(this.env.next_uid,false,this.env.action=="preview");
-}
-break;
-case "lastmessage":
-if(this.env.last_uid){
-this.show_message(this.env.last_uid);
-}
-break;
-case "previousmessage":
-if(this.env.prev_uid){
-this.show_message(this.env.prev_uid,false,this.env.action=="preview");
-}
-break;
-case "firstmessage":
-if(this.env.first_uid){
-this.show_message(this.env.first_uid);
-}
-break;
-case "checkmail":
-this.check_for_recent(true);
-break;
-case "compose":
-var url=this.env.comm_path+"&_action=compose";
-if(this.task=="mail"){
-url+="&_mbox="+urlencode(this.env.mailbox);
-if(this.env.mailbox==this.env.drafts_mailbox){
-var uid;
-if(uid=this.get_single_uid()){
-url+="&_draft_uid="+uid;
-}
-}else{
-if(_40){
-url+="&_to="+urlencode(_40);
-}
-}
-}else{
-if(this.task=="addressbook"){
-if(_40&&_40.indexOf("@")>0){
-url=this.get_task_url("mail",url);
-this.redirect(url+"&_to="+urlencode(_40));
-break;
-}
-var _4e=new Array();
-if(_40){
-_4e[_4e.length]=_40;
-}else{
-if(this.contact_list){
-var _4f=this.contact_list.get_selection();
-for(var n=0;n<_4f.length;n++){
-_4e[_4e.length]=_4f[n];
-}
-}
-}
-if(_4e.length){
-this.http_request("mailto","_cid="+urlencode(_4e.join(","))+"&_source="+urlencode(this.env.source),true);
-}
-break;
-}
-}
-url=url.replace(/&_framed=1/,"");
-this.redirect(url);
-break;
-case "spellcheck":
-if(window.tinyMCE&&tinyMCE.get("compose-body")){
-tinyMCE.execCommand("mceSpellCheck",true);
-}else{
-if(this.env.spellcheck&&this.env.spellcheck.spellCheck&&this.spellcheck_ready){
-this.env.spellcheck.spellCheck(this.env.spellcheck.check_link);
-this.set_spellcheck_state("checking");
-}
-}
-break;
-case "savedraft":
-self.clearTimeout(this.save_timer);
-if(!this.gui_objects.messageform){
-break;
-}
-if(!this.env.drafts_mailbox||this.cmp_hash==this.compose_field_hash()){
-break;
-}
-this.set_busy(true,"savingmessage");
-var _51=this.gui_objects.messageform;
-_51.target="savetarget";
-_51._draft.value="1";
-_51.submit();
-break;
-case "send":
-if(!this.gui_objects.messageform){
-break;
-}
-if(!this.check_compose_input()){
-break;
-}
-self.clearTimeout(this.save_timer);
-this.set_busy(true,"sendingmessage");
-var _51=this.gui_objects.messageform;
-_51.target="savetarget";
-_51._draft.value="";
-_51.submit();
-clearTimeout(this.request_timer);
-break;
-case "add-attachment":
-this.show_attachment_form(true);
-case "send-attachment":
-self.clearTimeout(this.save_timer);
-this.upload_file(_40);
-break;
-case "remove-attachment":
-this.remove_attachment(_40);
-break;
-case "reply-all":
-case "reply":
-var uid;
-if(uid=this.get_single_uid()){
-this.goto_url("compose","_reply_uid="+uid+"&_mbox="+urlencode(this.env.mailbox)+(_3f=="reply-all"?"&_all=1":""),true);
-}
-break;
-case "forward":
-var uid;
-if(uid=this.get_single_uid()){
-this.goto_url("compose","_forward_uid="+uid+"&_mbox="+urlencode(this.env.mailbox),true);
-}
-break;
-case "print":
-var uid;
-if(uid=this.get_single_uid()){
-_1.printwin=window.open(this.env.comm_path+"&_action=print&_uid="+uid+"&_mbox="+urlencode(this.env.mailbox)+(this.env.safemode?"&_safe=1":""));
-if(this.printwin){
-window.setTimeout(function(){
-_1.printwin.focus();
-},20);
-if(this.env.action!="show"){
-this.mark_message("read",uid);
-}
-}
-}
-break;
-case "viewsource":
-var uid;
-if(uid=this.get_single_uid()){
-_1.sourcewin=window.open(this.env.comm_path+"&_action=viewsource&_uid="+this.env.uid+"&_mbox="+urlencode(this.env.mailbox));
-if(this.sourcewin){
-window.setTimeout(function(){
-_1.sourcewin.focus();
-},20);
-}
-}
-break;
-case "add-contact":
-this.add_contact(_40);
-break;
-case "search":
-if(!_40&&this.gui_objects.qsearchbox){
-_40=this.gui_objects.qsearchbox.value;
-}
-if(_40){
-this.qsearch(_40);
-break;
-}
-case "reset-search":
-var s=this.env.search_request;
-this.reset_qsearch();
-if(s&&this.env.mailbox){
-this.list_mailbox(this.env.mailbox);
-}else{
-if(s&&this.task=="addressbook"){
-this.list_contacts(this.env.source);
-}
-}
-break;
-case "import":
-if(this.env.action=="import"&&this.gui_objects.importform){
-var _53=document.getElementById("rcmimportfile");
-if(_53&&!_53.value){
-alert(this.get_label("selectimportfile"));
-break;
-}
-this.gui_objects.importform.submit();
-this.set_busy(true,"importwait");
-this.lock_form(this.gui_objects.importform,true);
-}else{
-this.goto_url("import");
-}
-break;
-case "export":
-if(this.contact_list.rowcount>0){
-var _54=(this.env.source?"_source="+urlencode(this.env.source)+"&":"");
-if(this.env.search_request){
-_54+="_search="+this.env.search_request;
-}
-this.goto_url("export",_54);
-}
-break;
-case "collapse-folder":
-if(_40){
-this.collapse_folder(_40);
-}
-break;
-case "preferences":
-this.goto_url("");
-break;
-case "identities":
-this.goto_url("identities");
-break;
-case "delete-identity":
-this.delete_identity();
-case "folders":
-this.goto_url("folders");
-break;
-case "subscribe":
-this.subscribe_folder(_40);
-break;
-case "unsubscribe":
-this.unsubscribe_folder(_40);
-break;
-case "create-folder":
-this.create_folder(_40);
-break;
-case "rename-folder":
-this.rename_folder(_40);
-break;
-case "delete-folder":
-this.delete_folder(_40);
-break;
-}
-return obj?false:true;
-};
-this.enable_command=function(){
-var _55=arguments;
-if(!_55.length){
-return -1;
-}
-var _56;
-var _57=_55[_55.length-1];
-for(var n=0;n<_55.length-1;n++){
-_56=_55[n];
-this.commands[_56]=_57;
-this.set_button(_56,(_57?"act":"pas"));
-}
-return true;
-};
-this.set_busy=function(a,_5a){
-if(a&&_5a){
-var msg=this.get_label(_5a);
-if(msg==_5a){
-msg="Loading...";
-}
-this.display_message(msg,"loading",true);
-}else{
-if(!a){
-this.hide_message();
-}
-}
-this.busy=a;
-if(this.gui_objects.editform){
-this.lock_form(this.gui_objects.editform,a);
-}
-if(this.request_timer){
-clearTimeout(this.request_timer);
-}
-if(a&&this.env.request_timeout){
-this.request_timer=window.setTimeout(function(){
-_1.request_timed_out();
-},this.env.request_timeout*1000);
-}
-};
-this.get_label=function(_5c){
-if(this.labels[_5c]){
-return this.labels[_5c];
-}else{
-return _5c;
-}
-};
-this.switch_task=function(_5d){
-if(this.task===_5d&&_5d!="mail"){
-return;
-}
-var url=this.get_task_url(_5d);
-if(_5d=="mail"){
-url+="&_mbox=INBOX";
-}
-this.redirect(url);
-};
-this.get_task_url=function(_5f,url){
-if(!url){
-url=this.env.comm_path;
-}
-return url.replace(/_task=[a-z]+/,"_task="+_5f);
-};
-this.request_timed_out=function(){
-this.set_busy(false);
-this.display_message("Request timed out!","error");
-};
-this.doc_mouse_up=function(e){
-var _62,li;
-if(this.message_list){
-this.message_list.blur();
-_62=this.env.mailboxes;
-}else{
-if(this.contact_list){
-this.contact_list.blur();
-_62=this.env.address_sources;
-}else{
-if(this.ksearch_value){
-this.ksearch_blur();
-}
-}
-}
-if(this.drag_active&&_62&&this.env.last_folder_target){
-this.set_classname(this.get_folder_li(this.env.last_folder_target),"droptarget",false);
-this.command("moveto",_62[this.env.last_folder_target].id);
-this.env.last_folder_target=null;
-}
-};
-this.drag_start=function(_64){
-var _65=this.task=="mail"?this.env.mailboxes:this.env.address_sources;
-this.drag_active=true;
-if(this.preview_timer){
-clearTimeout(this.preview_timer);
-}
-if(this.gui_objects.folderlist&&_65){
-var li,pos,_64,_68;
-_64=rcube_find_object(this.task=="mail"?"mailboxlist":"directorylist");
-pos=rcube_get_object_pos(_64);
-this.env.folderlist_coords={x1:pos.x,y1:pos.y,x2:pos.x+_64.offsetWidth,y2:pos.y+_64.offsetHeight};
-this.env.folder_coords=new Array();
-for(var k in _65){
-if(li=this.get_folder_li(k)){
-pos=rcube_get_object_pos(li.firstChild);
-if(_68=li.firstChild.offsetHeight){
-this.env.folder_coords[k]={x1:pos.x,y1:pos.y,x2:pos.x+li.firstChild.offsetWidth,y2:pos.y+_68};
-}
-}
-}
-}
-};
-this.drag_move=function(e){
-if(this.gui_objects.folderlist&&this.env.folder_coords){
-var li,pos,_6d;
-_6d=rcube_event.get_mouse_pos(e);
-pos=this.env.folderlist_coords;
-if(_6d.x=pos.x2||_6d.y=pos.y2){
-if(this.env.last_folder_target){
-this.set_classname(this.get_folder_li(this.env.last_folder_target),"droptarget",false);
-this.env.last_folder_target=null;
-}
-return;
-}
-for(var k in this.env.folder_coords){
-pos=this.env.folder_coords[k];
-if(this.check_droptarget(k)&&((_6d.x>=pos.x1)&&(_6d.x=pos.y1)&&(_6d.y0)&&li.nextSibling.getElementsByTagName("ul")[0].style&&(li.nextSibling.getElementsByTagName("ul")[0].style.display!="none")){
-li.nextSibling.getElementsByTagName("ul")[0].style.display="none";
-li.nextSibling.getElementsByTagName("ul")[0].style.display="";
-}
-this.http_post("save-pref","_name=collapsed_folders&_value="+urlencode(this.env.collapsed_folders));
-this.set_unread_count_display(id,false);
-}
-};
-this.click_on_list=function(e){
-if(this.message_list){
-this.message_list.focus();
-}else{
-if(this.contact_list){
-this.contact_list.focus();
-}
-}
-var _74;
-if(_74=this.get_folder_li()){
-this.set_classname(_74,"unfocused",true);
-}
-return rcube_event.get_button(e)==2?true:rcube_event.cancel(e);
-};
-this.msglist_select=function(_75){
-if(this.preview_timer){
-clearTimeout(this.preview_timer);
-}
-var _76=_75.selection.length==1;
-if(this.env.mailbox==this.env.drafts_mailbox){
-this.enable_command("reply","reply-all","forward",false);
-this.enable_command("show",_76);
-this.enable_command("delete","moveto","mark",(_75.selection.length>0?true:false));
-}else{
-this.enable_command("show","reply","reply-all","forward","print",_76);
-this.enable_command("delete","moveto","mark",(_75.selection.length>0?true:false));
-}
-if(_76&&this.env.contentframe&&!_75.multi_selecting){
-this.preview_timer=window.setTimeout(function(){
-_1.msglist_get_preview();
-},200);
-}else{
-if(this.env.contentframe){
-this.show_contentframe(false);
-}
-}
-};
-this.msglist_dbl_click=function(_77){
-if(this.preview_timer){
-clearTimeout(this.preview_timer);
-}
-var uid=_77.get_single_selection();
-if(uid&&this.env.mailbox==this.env.drafts_mailbox){
-this.goto_url("compose","_draft_uid="+uid+"&_mbox="+urlencode(this.env.mailbox),true);
-}else{
-if(uid){
-this.show_message(uid,false,false);
-}
-}
-};
-this.msglist_keypress=function(_79){
-if(_79.key_pressed==_79.ENTER_KEY){
-this.command("show");
-}else{
-if(_79.key_pressed==_79.DELETE_KEY){
-this.command("delete");
-}else{
-if(_79.key_pressed==_79.BACKSPACE_KEY){
-this.command("delete");
-}else{
-_79.shiftkey=false;
-}
-}
-}
-};
-this.msglist_get_preview=function(){
-var uid=this.get_single_uid();
-if(uid&&this.env.contentframe&&!this.drag_active){
-this.show_message(uid,false,true);
-}else{
-if(this.env.contentframe){
-this.show_contentframe(false);
-}
-}
-};
-this.check_droptarget=function(id){
-if(this.task=="mail"){
-return (this.env.mailboxes[id]&&this.env.mailboxes[id].id!=this.env.mailbox&&!this.env.mailboxes[id].virtual);
-}else{
-if(this.task=="addressbook"){
-return (id!=this.env.source&&this.env.address_sources[id]&&!this.env.address_sources[id].readonly);
-}else{
-if(this.task=="settings"){
-return (id!=this.env.folder);
-}
-}
-}
-};
-this.show_message=function(id,_7d,_7e){
-if(!id){
-return;
-}
-var _7f="";
-var _80=_7e?"preview":"show";
-var _81=window;
-if(_7e&&this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
-_81=window.frames[this.env.contentframe];
-_7f="&_framed=1";
-}
-if(_7d){
-_7f="&_safe=1";
-}
-if(this.env.search_request){
-_7f+="&_search="+this.env.search_request;
-}
-var url="&_action="+_80+"&_uid="+id+"&_mbox="+urlencode(this.env.mailbox)+_7f;
-if(_80=="preview"&&String(_81.location.href).indexOf(url)>=0){
-this.show_contentframe(true);
-}else{
-this.set_busy(true,"loading");
-_81.location.href=this.env.comm_path+url;
-if(_80=="preview"&&this.message_list&&this.message_list.rows[id]&&this.message_list.rows[id].unread){
-this.set_message(id,"unread",false);
-if(this.env.unread_counts[this.env.mailbox]){
-this.env.unread_counts[this.env.mailbox]-=1;
-this.set_unread_count(this.env.mailbox,this.env.unread_counts[this.env.mailbox],this.env.mailbox=="INBOX");
-}
-}
-}
-};
-this.show_contentframe=function(_83){
-var frm;
-if(this.env.contentframe&&(frm=rcube_find_object(this.env.contentframe))){
-if(!_83&&window.frames[this.env.contentframe]){
-if(window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0){
-window.frames[this.env.contentframe].location.href=this.env.blankpage;
-}
-}else{
-if(!bw.safari){
-frm.style.display=_83?"block":"none";
-}
-}
-}
-if(!_83&&this.busy){
-this.set_busy(false);
-}
-};
-this.list_page=function(_85){
-if(_85=="next"){
-_85=this.env.current_page+1;
-}
-if(_85=="last"){
-_85=this.env.pagecount;
-}
-if(_85=="prev"&&this.env.current_page>1){
-_85=this.env.current_page-1;
-}
-if(_85=="first"&&this.env.current_page>1){
-_85=1;
-}
-if(_85>0&&_85<=this.env.pagecount){
-this.env.current_page=_85;
-if(this.task=="mail"){
-this.list_mailbox(this.env.mailbox,_85);
-}else{
-if(this.task=="addressbook"){
-this.list_contacts(this.env.source,_85);
-}
-}
-}
-};
-this.filter_mailbox=function(_86){
-var _87;
-if(this.gui_objects.qsearchbox){
-_87=this.gui_objects.qsearchbox.value;
-}
-this.message_list.clear();
-this.env.current_page=1;
-this.set_busy(true,"searching");
-this.http_request("search","_filter="+_86+(_87?"&_q="+urlencode(_87):"")+(this.env.mailbox?"&_mbox="+urlencode(this.env.mailbox):""),true);
-};
-this.list_mailbox=function(_88,_89,_8a){
-this.last_selected=0;
-var _8b="";
-var _8c=window;
-if(!_88){
-_88=this.env.mailbox;
-}
-if(_8a){
-_8b+="&_sort="+_8a;
-}
-if(this.env.search_request){
-_8b+="&_search="+this.env.search_request;
-}
-if(!_89&&_88!=this.env.mailbox){
-_89=1;
-this.env.current_page=_89;
-if(this.message_list){
-this.message_list.clear_selection();
-}
-this.show_contentframe(false);
-}
-if(_88!=this.env.mailbox||(_88==this.env.mailbox&&!_89&&!_8a)){
-_8b+="&_refresh=1";
-}
-this.select_folder(_88,this.env.mailbox);
-this.env.mailbox=_88;
-if(this.gui_objects.messagelist){
-this.list_mailbox_remote(_88,_89,_8b);
-return;
-}
-if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
-_8c=window.frames[this.env.contentframe];
-_8b+="&_framed=1";
-}
-if(_88){
-this.set_busy(true,"loading");
-_8c.location.href=this.env.comm_path+"&_mbox="+urlencode(_88)+(_89?"&_page="+_89:"")+_8b;
-}
-};
-this.list_mailbox_remote=function(_8d,_8e,_8f){
-this.message_list.clear();
-var url="_mbox="+urlencode(_8d)+(_8e?"&_page="+_8e:"");
-this.set_busy(true,"loading");
-this.http_request("list",url+_8f,true);
-};
-this.expunge_mailbox=function(_91){
-var _92=false;
-var _93="";
-if(_91==this.env.mailbox){
-_92=true;
-this.set_busy(true,"loading");
-_93="&_reload=1";
-}
-var url="_mbox="+urlencode(_91);
-this.http_post("expunge",url+_93,_92);
-};
-this.purge_mailbox=function(_95){
-var _96=false;
-var _97="";
-if(!confirm(this.get_label("purgefolderconfirm"))){
-return false;
-}
-if(_95==this.env.mailbox){
-_96=true;
-this.set_busy(true,"loading");
-_97="&_reload=1";
-}
-var url="_mbox="+urlencode(_95);
-this.http_post("purge",url+_97,_96);
-return true;
-};
-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.set_message_icon=function(uid){
-var _9a;
-var _9b=this.message_list.rows;
-if(!_9b[uid]){
-return false;
-}
-if(_9b[uid].deleted&&this.env.deletedicon){
-_9a=this.env.deletedicon;
-}else{
-if(_9b[uid].replied&&this.env.repliedicon){
-if(_9b[uid].forwarded&&this.env.forwardedrepliedicon){
-_9a=this.env.forwardedrepliedicon;
-}else{
-_9a=this.env.repliedicon;
-}
-}else{
-if(_9b[uid].forwarded&&this.env.forwardedicon){
-_9a=this.env.forwardedicon;
-}else{
-if(_9b[uid].unread&&this.env.unreadicon){
-_9a=this.env.unreadicon;
-}else{
-if(this.env.messageicon){
-_9a=this.env.messageicon;
-}
-}
-}
-}
-}
-if(_9a&&_9b[uid].icon){
-_9b[uid].icon.src=_9a;
-}
-_9a="";
-if(_9b[uid].flagged&&this.env.flaggedicon){
-_9a=this.env.flaggedicon;
-}else{
-if(!_9b[uid].flagged&&this.env.unflaggedicon){
-_9a=this.env.unflaggedicon;
-}
-}
-if(_9b[uid].flagged_icon&&_9a){
-_9b[uid].flagged_icon.src=_9a;
-}
-};
-this.set_message_status=function(uid,_9d,_9e){
-var _9f=this.message_list.rows;
-if(!_9f[uid]){
-return false;
-}
-if(_9d=="unread"){
-_9f[uid].unread=_9e;
-}else{
-if(_9d=="deleted"){
-_9f[uid].deleted=_9e;
-}else{
-if(_9d=="replied"){
-_9f[uid].replied=_9e;
-}else{
-if(_9d=="forwarded"){
-_9f[uid].forwarded=_9e;
-}else{
-if(_9d=="flagged"){
-_9f[uid].flagged=_9e;
-}
-}
-}
-}
-}
-this.env.messages[uid]=_9f[uid];
-};
-this.set_message=function(uid,_a1,_a2){
-var _a3=this.message_list.rows;
-if(!_a3[uid]){
-return false;
-}
-if(_a1){
-this.set_message_status(uid,_a1,_a2);
-}
-if(_a3[uid].unread&&_a3[uid].classname.indexOf("unread")<0){
-_a3[uid].classname+=" unread";
-this.set_classname(_a3[uid].obj,"unread",true);
-}else{
-if(!_a3[uid].unread&&_a3[uid].classname.indexOf("unread")>=0){
-_a3[uid].classname=_a3[uid].classname.replace(/\s*unread/,"");
-this.set_classname(_a3[uid].obj,"unread",false);
-}
-}
-if(_a3[uid].deleted&&_a3[uid].classname.indexOf("deleted")<0){
-_a3[uid].classname+=" deleted";
-this.set_classname(_a3[uid].obj,"deleted",true);
-}else{
-if(!_a3[uid].deleted&&_a3[uid].classname.indexOf("deleted")>=0){
-_a3[uid].classname=_a3[uid].classname.replace(/\s*deleted/,"");
-this.set_classname(_a3[uid].obj,"deleted",false);
-}
-}
-if(_a3[uid].flagged&&_a3[uid].classname.indexOf("flagged")<0){
-_a3[uid].classname+=" flagged";
-this.set_classname(_a3[uid].obj,"flagged",true);
-}else{
-if(!_a3[uid].flagged&&_a3[uid].classname.indexOf("flagged")>=0){
-_a3[uid].classname=_a3[uid].classname.replace(/\s*flagged/,"");
-this.set_classname(_a3[uid].obj,"flagged",false);
-}
-}
-this.set_message_icon(uid);
-};
-this.move_messages=function(_a4){
-if(!_a4||_a4==this.env.mailbox||(!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length))){
-return;
-}
-var _a5=false;
-var _a6="&_target_mbox="+urlencode(_a4)+"&_from="+(this.env.action?this.env.action:"");
-if(this.env.action=="show"){
-_a5=true;
-this.set_busy(true,"movingmessage");
-}else{
-if(!this.env.flag_for_deletion){
-this.show_contentframe(false);
-}
-}
-this.enable_command("reply","reply-all","forward","delete","mark","print",false);
-this._with_selected_messages("moveto",_a5,_a6,(this.env.flag_for_deletion?false:true));
-};
-this.delete_messages=function(){
-var _a7=this.message_list?this.message_list.get_selection():new Array();
-if(!this.env.uid&&!_a7.length){
-return;
-}
-if(this.env.trash_mailbox&&String(this.env.mailbox).toLowerCase()!=String(this.env.trash_mailbox).toLowerCase()){
-if(this.message_list&&this.message_list.shiftkey){
-if(confirm(this.get_label("deletemessagesconfirm"))){
-this.permanently_remove_messages();
-}
-}else{
-this.move_messages(this.env.trash_mailbox);
-}
-}else{
-if(this.env.trash_mailbox&&String(this.env.mailbox).toLowerCase()==String(this.env.trash_mailbox).toLowerCase()){
-this.permanently_remove_messages();
-}else{
-if(!this.env.trash_mailbox&&this.env.flag_for_deletion){
-this.mark_message("delete");
-if(this.env.action=="show"){
-this.command("nextmessage","",this);
-}else{
-if(_a7.length==1){
-this.message_list.select_next();
-}
-}
-}else{
-if(!this.env.trash_mailbox){
-this.permanently_remove_messages();
-}
-}
-}
-}
-};
-this.permanently_remove_messages=function(){
-if(!this.env.uid&&(!this.message_list||!this.message_list.get_selection().length)){
-return;
-}
-this.show_contentframe(false);
-this._with_selected_messages("delete",false,"&_from="+(this.env.action?this.env.action:""),true);
-};
-this._with_selected_messages=function(_a8,_a9,_aa,_ab){
-var _ac=new Array();
-if(this.env.uid){
-_ac[0]=this.env.uid;
-}else{
-var _ad=this.message_list.get_selection();
-var _ae=this.message_list.rows;
-var id;
-for(var n=0;n<_ad.length;n++){
-id=_ad[n];
-_ac[_ac.length]=id;
-if(_ab){
-this.message_list.remove_row(id,(n==_ad.length-1));
-}else{
-this.set_message_status(id,"deleted",true);
-if(this.env.read_when_deleted){
-this.set_message_status(id,"unread",false);
-}
-this.set_message(id);
-}
-}
-}
-if(this.env.search_request){
-_aa+="&_search="+this.env.search_request;
-}
-this.http_post(_a8,"_uid="+_ac.join(",")+"&_mbox="+urlencode(this.env.mailbox)+_aa,_a9);
-};
-this.mark_message=function(_b1,uid){
-var _b3=new Array();
-var _b4=new Array();
-var _b5=this.message_list?this.message_list.get_selection():new Array();
-if(uid){
-_b3[0]=uid;
-}else{
-if(this.env.uid){
-_b3[0]=this.env.uid;
-}else{
-if(this.message_list){
-for(var n=0;n<_b5.length;n++){
-_b3[_b3.length]=_b5[n];
-}
-}
-}
-}
-if(!this.message_list){
-_b4=_b3;
-}else{
-for(var id,n=0;n<_b3.length;n++){
-id=_b3[n];
-if((_b1=="read"&&this.message_list.rows[id].unread)||(_b1=="unread"&&!this.message_list.rows[id].unread)||(_b1=="delete"&&!this.message_list.rows[id].deleted)||(_b1=="undelete"&&this.message_list.rows[id].deleted)||(_b1=="flagged"&&!this.message_list.rows[id].flagged)||(_b1=="unflagged"&&this.message_list.rows[id].flagged)){
-_b4[_b4.length]=id;
-}
-}
-}
-if(!_b4.length){
-return;
-}
-switch(_b1){
-case "read":
-case "unread":
-this.toggle_read_status(_b1,_b4);
-break;
-case "delete":
-case "undelete":
-this.toggle_delete_status(_b4);
-break;
-case "flagged":
-case "unflagged":
-this.toggle_flagged_status(_b1,_b3);
-break;
-}
-};
-this.toggle_read_status=function(_b8,_b9){
-for(var i=0;i<_b9.length;i++){
-this.set_message(_b9[i],"unread",(_b8=="unread"?true:false));
-}
-this.http_post("mark","_uid="+_b9.join(",")+"&_flag="+_b8);
-};
-this.toggle_flagged_status=function(_bb,_bc){
-for(var i=0;i<_bc.length;i++){
-this.set_message(_bc[i],"flagged",(_bb=="flagged"?true:false));
-}
-this.http_post("mark","_uid="+_bc.join(",")+"&_flag="+_bb);
-};
-this.toggle_delete_status=function(_be){
-var _bf=this.message_list?this.message_list.rows:new Array();
-if(_be.length==1){
-if(!_bf.length||(_bf[_be[0]]&&!_bf[_be[0]].deleted)){
-this.flag_as_deleted(_be);
-}else{
-this.flag_as_undeleted(_be);
-}
-return true;
-}
-var _c0=true;
-for(var i=0;i<_be.length;i++){
-uid=_be[i];
-if(_bf[uid]){
-if(!_bf[uid].deleted){
-_c0=false;
-break;
-}
-}
-}
-if(_c0){
-this.flag_as_undeleted(_be);
-}else{
-this.flag_as_deleted(_be);
-}
-return true;
-};
-this.flag_as_undeleted=function(_c2){
-for(var i=0;i<_c2.length;i++){
-this.set_message(_c2[i],"deleted",false);
-}
-this.http_post("mark","_uid="+_c2.join(",")+"&_flag=undelete");
-return true;
-};
-this.flag_as_deleted=function(_c4){
-var _c5="";
-var _c6=new Array();
-var _c7=this.message_list?this.message_list.rows:new Array();
-for(var i=0;i<_c4.length;i++){
-uid=_c4[i];
-if(_c7[uid]){
-this.set_message(uid,"deleted",true);
-if(_c7[uid].unread){
-_c6[_c6.length]=uid;
-}
-}
-}
-if(_c6.length){
-_c5="&_ruid="+_c6.join(",");
-}
-this.http_post("mark","_uid="+_c4.join(",")+"&_flag=delete"+_c5);
-return true;
-};
-this.flag_deleted_as_read=function(_c9){
-var _ca;
-var _cb=this.message_list?this.message_list.rows:new Array();
-var str=String(_c9);
-var _cd=new Array();
-_cd=str.split(",");
-for(var uid,i=0;i<_cd.length;i++){
-uid=_cd[i];
-if(_cb[uid]){
-this.set_message(uid,"unread",false);
-}
-}
-};
-this.login_user_keyup=function(e){
-var key=rcube_event.get_keycode(e);
-var elm;
-if((key==13)&&(elm=rcube_find_object("_pass"))){
-elm.focus();
-return false;
-}
-};
-this.check_compose_input=function(){
-var _d3=rcube_find_object("_to");
-var _d4=rcube_find_object("_cc");
-var _d5=rcube_find_object("_bcc");
-var _d6=rcube_find_object("_from");
-var _d7=rcube_find_object("_subject");
-var _d8=rcube_find_object("_message");
-if(_d6.type=="text"&&!rcube_check_email(_d6.value,true)){
-alert(this.get_label("nosenderwarning"));
-_d6.focus();
-return false;
-}
-var _d9=_d3.value?_d3.value:(_d4.value?_d4.value:_d5.value);
-if(!rcube_check_email(_d9.replace(/^\s+/,"").replace(/[\s,;]+$/,""),true)){
-alert(this.get_label("norecipientwarning"));
-_d3.focus();
-return false;
-}
-if(_d7&&_d7.value==""){
-var _da=prompt(this.get_label("nosubjectwarning"),this.get_label("nosubject"));
-if(!_da&&_da!==""){
-_d7.focus();
-return false;
-}else{
-_d7.value=_da?_da:this.get_label("nosubject");
-}
-}
-if((!window.tinyMCE||!tinyMCE.get("compose-body"))&&_d8.value==""&&!confirm(this.get_label("nobodywarning"))){
-_d8.focus();
-return false;
-}else{
-if(window.tinyMCE&&tinyMCE.get("compose-body")&&!tinyMCE.get("compose-body").getContent()&&!confirm(this.get_label("nobodywarning"))){
-tinyMCE.get("compose-body").focus();
-return false;
-}
-}
-this.stop_spellchecking();
-return true;
-};
-this.stop_spellchecking=function(){
-if(this.env.spellcheck&&!this.spellcheck_ready){
-exec_event(this.env.spellcheck.check_link,"click");
-this.set_spellcheck_state("ready");
-}
-};
-this.display_spellcheck_controls=function(vis){
-if(this.env.spellcheck){
-if(!vis){
-this.stop_spellchecking();
-}
-this.env.spellcheck.check_link.style.visibility=vis?"visible":"hidden";
-this.env.spellcheck.switch_lan_pic.style.visibility=vis?"visible":"hidden";
-}
-};
-this.set_spellcheck_state=function(s){
-this.spellcheck_ready=(s=="check_spelling"||s=="ready");
-this.enable_command("spellcheck",this.spellcheck_ready);
-};
-this.set_draft_id=function(id){
-var f;
-if(f=rcube_find_object("_draft_saveid")){
-f.value=id;
-}
-};
-this.auto_save_start=function(){
-if(this.env.draft_autosave){
-this.save_timer=self.setTimeout(function(){
-_1.command("savedraft");
-},this.env.draft_autosave*1000);
-}
-this.busy=false;
-};
-this.compose_field_hash=function(_df){
-var _e0=rcube_find_object("_to");
-var _e1=rcube_find_object("_cc");
-var _e2=rcube_find_object("_bcc");
-var _e3=rcube_find_object("_subject");
-var _e4,_e5;
-var str="";
-if(_e0&&_e0.value){
-str+=_e0.value+":";
-}
-if(_e1&&_e1.value){
-str+=_e1.value+":";
-}
-if(_e2&&_e2.value){
-str+=_e2.value+":";
-}
-if(_e3&&_e3.value){
-str+=_e3.value+":";
-}
-if(_e4=tinyMCE.get("compose-body")){
-str+=_e4.getContent();
-}else{
-_e5=rcube_find_object("_message");
-str+=_e5.value;
-}
-if(_df){
-this.cmp_hash=str;
-}
-return str;
-};
-this.change_identity=function(obj){
-if(!obj||!obj.options){
-return false;
-}
-var id=obj.options[obj.selectedIndex].value;
-var _e9=rcube_find_object("_message");
-var _ea=_e9?_e9.value:"";
-var _eb=(rcube_find_object("_is_html").value=="1");
-var sig,p;
-if(!this.env.identity){
-this.env.identity=id;
-}
-if(!_eb){
-if(this.env.identity&&this.env.signatures&&this.env.signatures[this.env.identity]){
-if(this.env.signatures[this.env.identity]["is_html"]){
-sig=this.env.signatures[this.env.identity]["plain_text"];
-}else{
-sig=this.env.signatures[this.env.identity]["text"];
-}
-if(sig.indexOf("-- ")!=0){
-sig="-- \n"+sig;
-}
-p=_ea.lastIndexOf(sig);
-if(p>=0){
-_ea=_ea.substring(0,p-1)+_ea.substring(p+sig.length,_ea.length);
-}
-}
-_ea=_ea.replace(/[\r\n]+$/,"");
-if(this.env.signatures&&this.env.signatures[id]){
-sig=this.env.signatures[id]["text"];
-if(this.env.signatures[id]["is_html"]){
-sig=this.env.signatures[id]["plain_text"];
-}
-if(sig.indexOf("-- ")!=0){
-sig="-- \n"+sig;
-}
-_ea+="\n\n"+sig;
-}
-}else{
-var _ee=tinyMCE.get("compose-body");
-if(this.env.signatures){
-var _ef=_ee.dom.get("_rc_sig");
-var _f0="";
-var _f1=true;
-if(!_ef){
-if(bw.ie){
-_ee.getBody().appendChild(_ee.getDoc().createElement("br"));
-}
-_ef=_ee.getDoc().createElement("div");
-_ef.setAttribute("id","_rc_sig");
-_ee.getBody().appendChild(_ef);
-}
-if(this.env.signatures[id]){
-_f0=this.env.signatures[id]["text"];
-_f1=this.env.signatures[id]["is_html"];
-}
-if(_f1){
-_ef.innerHTML=_f0;
-}else{
-_ef.innerHTML=""+_f0+"
";
-}
-}
-}
-if(_e9){
-_e9.value=_ea;
-}
-this.env.identity=id;
-return true;
-};
-this.show_attachment_form=function(a){
-if(!this.gui_objects.uploadbox){
-return false;
-}
-var elm,_f4;
-if(elm=this.gui_objects.uploadbox){
-if(a&&(_f4=this.gui_objects.attachmentlist)){
-var pos=rcube_get_object_pos(_f4);
-var _f6=pos.x;
-var top=pos.y+_f4.offsetHeight+10;
-elm.style.top=top+"px";
-elm.style.left=_f6+"px";
-}
-elm.style.visibility=a?"visible":"hidden";
-}
-try{
-if(!a&&this.gui_objects.attachmentform!=this.gui_objects.messageform){
-this.gui_objects.attachmentform.reset();
-}
-}
-catch(e){
-}
-return true;
-};
-this.upload_file=function(_f8){
-if(!_f8){
-return false;
-}
-var _f9=false;
-for(var n=0;n<_f8.elements.length;n++){
-if(_f8.elements[n].type=="file"&&_f8.elements[n].value){
-_f9=true;
-break;
-}
-}
-if(_f9){
-var ts=new Date().getTime();
-var _fc="rcmupload"+ts;
-if(document.all){
-var _fd="";
-document.body.insertAdjacentHTML("BeforeEnd",_fd);
-}else{
-var _fe=document.createElement("IFRAME");
-_fe.name=_fc;
-_fe.style.border="none";
-_fe.style.width=0;
-_fe.style.height=0;
-_fe.style.visibility="hidden";
-document.body.appendChild(_fe);
-}
-_f8.target=_fc;
-_f8.action=this.env.comm_path+"&_action=upload";
-_f8.setAttribute("enctype","multipart/form-data");
-_f8.submit();
-}
-this.gui_objects.attachmentform=_f8;
-return true;
-};
-this.add2attachment_list=function(_ff,_100){
-if(!this.gui_objects.attachmentlist){
-return false;
-}
-var li=document.createElement("LI");
-li.id=_ff;
-li.innerHTML=_100;
-this.gui_objects.attachmentlist.appendChild(li);
-return true;
-};
-this.remove_from_attachment_list=function(name){
-if(!this.gui_objects.attachmentlist){
-return false;
-}
-var list=this.gui_objects.attachmentlist.getElementsByTagName("li");
-for(i=0;i/g,">").replace(/##([^%]+)%%/g,"$1");
-li.onmouseover=function(){
-_1.ksearch_select(this);
-};
-li.onmouseup=function(){
-_1.ksearch_click(this);
-};
-li._rcm_id=_122[i];
-ul.appendChild(li);
-}
-if(this.ksearch_selected!==null){
-p=find_in_array(this.ksearch_selected,_122);
-if(p>=0&&ul.childNodes){
-ul.childNodes[p].setAttribute("id","rcmksearchSelected");
-this.set_classname(ul.childNodes[p],"selected",true);
-}else{
-this.ksearch_selected=null;
-}
-}
-if(this.ksearch_selected===null){
-ul.firstChild.setAttribute("id","rcmksearchSelected");
-this.set_classname(ul.firstChild,"selected",true);
-this.ksearch_selected=_122[0];
-}
-var pos=rcube_get_object_pos(this.ksearch_input);
-this.ksearch_pane.move(pos.x,pos.y+this.ksearch_input.offsetHeight);
-this.ksearch_pane.show(1);
-}else{
-this.ksearch_hide();
-}
-};
-this.ksearch_click=function(node){
-this.insert_recipient(node._rcm_id);
-this.ksearch_hide();
-if(_1.ksearch_input){
-this.ksearch_input.focus();
-}
-};
-this.ksearch_blur=function(){
-if(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;
-if(this.ksearch_pane){
-this.ksearch_pane.show(0);
-}
-};
-this.contactlist_keypress=function(list){
-if(list.key_pressed==list.DELETE_KEY){
-this.command("delete");
-}
-};
-this.contactlist_select=function(list){
-if(this.preview_timer){
-clearTimeout(this.preview_timer);
-}
-var id,_12c,_1=this;
-if(id=list.get_single_selection()){
-this.preview_timer=window.setTimeout(function(){
-_1.load_contact(id,"show");
-},200);
-}else{
-if(this.env.contentframe){
-this.show_contentframe(false);
-}
-}
-this.enable_command("compose",list.selection.length>0);
-this.enable_command("edit",(id&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly)?true:false);
-this.enable_command("delete",list.selection.length&&this.env.address_sources&&!this.env.address_sources[this.env.source].readonly);
-return false;
-};
-this.list_contacts=function(src,page){
-var _12f="";
-var _130=window;
-if(!src){
-src=this.env.source;
-}
-if(page&&this.current_page==page&&src==this.env.source){
-return false;
-}
-if(src!=this.env.source){
-page=1;
-this.env.current_page=page;
-this.reset_qsearch();
-}
-this.select_folder(src,this.env.source);
-this.env.source=src;
-if(this.gui_objects.contactslist){
-this.list_contacts_remote(src,page);
-return;
-}
-if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
-_130=window.frames[this.env.contentframe];
-_12f="&_framed=1";
-}
-if(this.env.search_request){
-_12f+="&_search="+this.env.search_request;
-}
-this.set_busy(true,"loading");
-_130.location.href=this.env.comm_path+(src?"&_source="+urlencode(src):"")+(page?"&_page="+page:"")+_12f;
-};
-this.list_contacts_remote=function(src,page){
-this.contact_list.clear(true);
-this.show_contentframe(false);
-this.enable_command("delete","compose",false);
-var url=(src?"_source="+urlencode(src):"")+(page?(src?"&":"")+"_page="+page:"");
-this.env.source=src;
-if(this.env.search_request){
-url+="&_search="+this.env.search_request;
-}
-this.set_busy(true,"loading");
-this.http_request("list",url,true);
-};
-this.load_contact=function(cid,_135,_136){
-var _137="";
-var _138=window;
-if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
-_137="&_framed=1";
-_138=window.frames[this.env.contentframe];
-this.show_contentframe(true);
-}else{
-if(_136){
-return false;
-}
-}
-if(_135&&(cid||_135=="add")&&!this.drag_active){
-this.set_busy(true);
-_138.location.href=this.env.comm_path+"&_action="+_135+"&_source="+urlencode(this.env.source)+"&_cid="+urlencode(cid)+_137;
-}
-return true;
-};
-this.copy_contact=function(cid,to){
-if(!cid){
-cid=this.contact_list.get_selection().join(",");
-}
-if(to!=this.env.source&&cid&&this.env.address_sources[to]&&!this.env.address_sources[to].readonly){
-this.http_post("copy","_cid="+urlencode(cid)+"&_source="+urlencode(this.env.source)+"&_to="+urlencode(to));
-}
-};
-this.delete_contacts=function(){
-var _13b=this.contact_list.get_selection();
-if(!(_13b.length||this.env.cid)||!confirm(this.get_label("deletecontactconfirm"))){
-return;
-}
-var _13c=new Array();
-var qs="";
-if(this.env.cid){
-_13c[_13c.length]=this.env.cid;
-}else{
-var id;
-for(var n=0;n<_13b.length;n++){
-id=_13b[n];
-_13c[_13c.length]=id;
-this.contact_list.remove_row(id,(n==_13b.length-1));
-}
-if(_13b.length==1){
-this.show_contentframe(false);
-}
-}
-if(this.env.search_request){
-qs+="&_search="+this.env.search_request;
-}
-this.http_post("delete","_cid="+urlencode(_13c.join(","))+"&_source="+urlencode(this.env.source)+"&_from="+(this.env.action?this.env.action:"")+qs);
-return true;
-};
-this.update_contact_row=function(cid,_141){
-var row;
-if(this.contact_list.rows[cid]&&(row=this.contact_list.rows[cid].obj)){
-for(var c=0;c<_141.length;c++){
-if(row.cells[c]){
-row.cells[c].innerHTML=_141[c];
-}
-}
-return true;
-}
-return false;
-};
-this.init_subscription_list=function(){
-var p=this;
-this.subscription_list=new rcube_list_widget(this.gui_objects.subscriptionlist,{multiselect:false,draggable:true,keyboard:false,toggleselect:true});
-this.subscription_list.addEventListener("select",function(o){
-p.subscription_select(o);
-});
-this.subscription_list.addEventListener("dragstart",function(o){
-p.drag_active=true;
-});
-this.subscription_list.addEventListener("dragend",function(o){
-p.subscription_move_folder(o);
-});
-this.subscription_list.row_init=function(row){
-var _149=row.obj.getElementsByTagName("A");
-if(_149[0]){
-_149[0].onclick=function(){
-p.rename_folder(row.id);
-return false;
-};
-}
-if(_149[1]){
-_149[1].onclick=function(){
-p.delete_folder(row.id);
-return false;
-};
-}
-row.obj.onmouseover=function(){
-p.focus_subscription(row.id);
-};
-row.obj.onmouseout=function(){
-p.unfocus_subscription(row.id);
-};
-};
-this.subscription_list.init();
-};
-this.identity_select=function(list){
-var id;
-if(id=list.get_single_selection()){
-this.load_identity(id,"edit-identity");
-}
-};
-this.load_identity=function(id,_14d){
-if(_14d=="edit-identity"&&(!id||id==this.env.iid)){
-return false;
-}
-var _14e="";
-var _14f=window;
-if(this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]){
-_14e="&_framed=1";
-_14f=window.frames[this.env.contentframe];
-document.getElementById(this.env.contentframe).style.visibility="inherit";
-}
-if(_14d&&(id||_14d=="add-identity")){
-this.set_busy(true);
-_14f.location.href=this.env.comm_path+"&_action="+_14d+"&_iid="+id+_14e;
-}
-return true;
-};
-this.delete_identity=function(id){
-var _151=this.identity_list.get_selection();
-if(!(_151.length||this.env.iid)){
-return;
-}
-if(!id){
-id=this.env.iid?this.env.iid:_151[0];
-}
-this.goto_url("delete-identity","_iid="+id,true);
-return true;
-};
-this.focus_subscription=function(id){
-var row,_154;
-var reg=RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
-if(this.drag_active&&this.env.folder&&(row=document.getElementById(id))){
-if(this.env.subscriptionrows[id]&&(_154=this.env.subscriptionrows[id][0])){
-if(this.check_droptarget(_154)&&!this.env.subscriptionrows[this.get_folder_row_id(this.env.folder)][2]&&(_154!=this.env.folder.replace(reg,""))&&(!_154.match(new RegExp("^"+RegExp.escape(this.env.folder+this.env.delimiter))))){
-this.set_env("dstfolder",_154);
-this.set_classname(row,"droptarget",true);
-}
-}else{
-if(this.env.folder.match(new RegExp(RegExp.escape(this.env.delimiter)))){
-this.set_env("dstfolder",this.env.delimiter);
-this.set_classname(this.subscription_list.frame,"droptarget",true);
-}
-}
-}
-};
-this.unfocus_subscription=function(id){
-var row;
-this.set_env("dstfolder",null);
-if(this.env.subscriptionrows[id]&&(row=document.getElementById(id))){
-this.set_classname(row,"droptarget",false);
-}else{
-this.set_classname(this.subscription_list.frame,"droptarget",false);
-}
-};
-this.subscription_select=function(list){
-var id,_15a;
-if((id=list.get_single_selection())&&this.env.subscriptionrows["rcmrow"+id]&&(_15a=this.env.subscriptionrows["rcmrow"+id][0])){
-this.set_env("folder",_15a);
-}else{
-this.set_env("folder",null);
-}
-if(this.gui_objects.createfolderhint){
-this.gui_objects.createfolderhint.innerHTML=this.env.folder?this.get_label("addsubfolderhint"):"";
-}
-};
-this.subscription_move_folder=function(list){
-var reg=RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
-if(this.env.folder&&this.env.dstfolder&&(this.env.dstfolder!=this.env.folder)&&(this.env.dstfolder!=this.env.folder.replace(reg,""))){
-var reg=new RegExp("[^"+RegExp.escape(this.env.delimiter)+"]*["+RegExp.escape(this.env.delimiter)+"]","g");
-var _15d=this.env.folder.replace(reg,"");
-var _15e=this.env.dstfolder==this.env.delimiter?_15d:this.env.dstfolder+this.env.delimiter+_15d;
-this.set_busy(true,"foldermoving");
-this.http_post("rename-folder","_folder_oldname="+urlencode(this.env.folder)+"&_folder_newname="+urlencode(_15e),true);
-}
-this.drag_active=false;
-this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder));
-};
-this.create_folder=function(name){
-if(this.edit_folder){
-this.reset_folder_rename();
-}
-var form;
-if((form=this.gui_objects.editform)&&form.elements["_folder_name"]){
-name=form.elements["_folder_name"].value;
-if(name.indexOf(this.env.delimiter)>=0){
-alert(this.get_label("forbiddencharacter")+" ("+this.env.delimiter+")");
-return false;
-}
-if(this.env.folder&&name!=""){
-name=this.env.folder+this.env.delimiter+name;
-}
-this.set_busy(true,"foldercreating");
-this.http_post("create-folder","_name="+urlencode(name),true);
-}else{
-if(form.elements["_folder_name"]){
-form.elements["_folder_name"].focus();
-}
-}
-};
-this.rename_folder=function(id){
-var temp,row,form;
-if(temp=this.edit_folder){
-this.reset_folder_rename();
-if(temp==id){
-return;
-}
-}
-if(id&&this.env.subscriptionrows[id]&&(row=document.getElementById(id))){
-var reg=new RegExp(".*["+RegExp.escape(this.env.delimiter)+"]");
-this.name_input=document.createElement("INPUT");
-this.name_input.value=this.env.subscriptionrows[id][0].replace(reg,"");
-this.name_input.style.width="100%";
-reg=new RegExp("["+RegExp.escape(this.env.delimiter)+"]?[^"+RegExp.escape(this.env.delimiter)+"]+$");
-this.name_input.__parent=this.env.subscriptionrows[id][0].replace(reg,"");
-this.name_input.onkeypress=function(e){
-rcmail.name_input_keypress(e);
-};
-row.cells[0].replaceChild(this.name_input,row.cells[0].firstChild);
-this.edit_folder=id;
-this.name_input.select();
-if(form=this.gui_objects.editform){
-form.onsubmit=function(){
-return false;
-};
-}
-}
-};
-this.reset_folder_rename=function(){
-var cell=this.name_input?this.name_input.parentNode:null;
-if(cell&&this.edit_folder&&this.env.subscriptionrows[this.edit_folder]){
-cell.innerHTML=this.env.subscriptionrows[this.edit_folder][1];
-}
-this.edit_folder=null;
-};
-this.name_input_keypress=function(e){
-var key=rcube_event.get_keycode(e);
-if(key==13){
-var _16a=this.name_input?this.name_input.value:null;
-if(this.edit_folder&&_16a){
-if(_16a.indexOf(this.env.delimiter)>=0){
-alert(this.get_label("forbiddencharacter")+" ("+this.env.delimiter+")");
-return false;
-}
-if(this.name_input.__parent){
-_16a=this.name_input.__parent+this.env.delimiter+_16a;
-}
-this.set_busy(true,"folderrenaming");
-this.http_post("rename-folder","_folder_oldname="+urlencode(this.env.subscriptionrows[this.edit_folder][0])+"&_folder_newname="+urlencode(_16a),true);
-}
-}else{
-if(key==27){
-this.reset_folder_rename();
-}
-}
-};
-this.delete_folder=function(id){
-var _16c=this.env.subscriptionrows[id][0];
-if(this.edit_folder){
-this.reset_folder_rename();
-}
-if(_16c&&confirm(this.get_label("deletefolderconfirm"))){
-this.set_busy(true,"folderdeleting");
-this.http_post("delete-folder","_mboxes="+urlencode(_16c),true);
-this.set_env("folder",null);
-if(this.gui_objects.createfolderhint){
-this.gui_objects.createfolderhint.innerHTML="";
-}
-}
-};
-this.add_folder_row=function(name,_16e,_16f,_170){
-if(!this.gui_objects.subscriptionlist){
-return false;
-}
-for(var _171 in this.env.subscriptionrows){
-if(this.env.subscriptionrows[_171]!=null&&!this.env.subscriptionrows[_171][2]){
-break;
-}
-}
-var _172,form;
-var _174=this.gui_objects.subscriptionlist.tBodies[0];
-var id="rcmrow"+(_174.childNodes.length+1);
-var _176=this.subscription_list.get_single_selection();
-if(_16f&&_16f.id){
-id=_16f.id;
-_171=_16f.id;
-}
-if(!id||!(_172=document.getElementById(_171))){
-this.goto_url("folders");
-}else{
-var row=this.clone_table_row(_172);
-row.id=id;
-if(_170&&(_170=this.get_folder_row_id(_170))){
-_174.insertBefore(row,document.getElementById(_170));
-}else{
-_174.appendChild(row);
-}
-if(_16f){
-_174.removeChild(_16f);
-}
-}
-this.env.subscriptionrows[row.id]=[name,_16e,0];
-row.cells[0].innerHTML=_16e;
-if(!_16f){
-row.cells[1].innerHTML="*";
-}
-if(!_16f&&row.cells[2]&&row.cells[2].firstChild.tagName=="INPUT"){
-row.cells[2].firstChild.value=name;
-row.cells[2].firstChild.checked=true;
-}
-if(!_16f&&(form=this.gui_objects.editform)){
-if(form.elements["_folder_oldname"]){
-form.elements["_folder_oldname"].options[form.elements["_folder_oldname"].options.length]=new Option(name,name);
-}
-if(form.elements["_folder_name"]){
-form.elements["_folder_name"].value="";
-}
-}
-this.init_subscription_list();
-if(_176&&document.getElementById("rcmrow"+_176)){
-this.subscription_list.select_row(_176);
-}
-if(document.getElementById(id).scrollIntoView){
-document.getElementById(id).scrollIntoView();
-}
-};
-this.replace_folder_row=function(_178,_179,_17a,_17b){
-var id=this.get_folder_row_id(_178);
-var row=document.getElementById(id);
-this.add_folder_row(_179,_17a,row,_17b);
-var form,elm;
-if((form=this.gui_objects.editform)&&(elm=form.elements["_folder_oldname"])){
-for(var i=0;ithis.env.current_page));
-this.enable_command("lastpage",(this.env.pagecount>this.env.current_page));
-this.enable_command("previouspage",(this.env.current_page>1));
-this.enable_command("firstpage",(this.env.current_page>1));
-};
-this.set_button=function(_18f,_190){
-var _191=this.buttons[_18f];
-var _192,obj;
-if(!_191||!_191.length){
-return false;
-}
-for(var n=0;n<_191.length;n++){
-_192=_191[n];
-obj=document.getElementById(_192.id);
-if(obj&&_192.type=="image"&&!_192.status){
-_192.pas=obj._original_src?obj._original_src:obj.src;
-if(obj.runtimeStyle&&obj.runtimeStyle.filter&&obj.runtimeStyle.filter.match(/src=['"]([^'"]+)['"]/)){
-_192.pas=RegExp.$1;
-}
-}else{
-if(obj&&!_192.status){
-_192.pas=String(obj.className);
-}
-}
-if(obj&&_192.type=="image"&&_192[_190]){
-_192.status=_190;
-obj.src=_192[_190];
-}else{
-if(obj&&typeof (_192[_190])!="undefined"){
-_192.status=_190;
-obj.className=_192[_190];
-}
-}
-if(obj&&_192.type=="input"){
-_192.status=_190;
-obj.disabled=!_190;
-}
-}
-};
-this.set_alttext=function(_195,_196){
-if(!this.buttons[_195]||!this.buttons[_195].length){
-return;
-}
-var _197,obj,link;
-for(var n=0;n"+cont+"";
-}
-var _1b6=this;
-this.gui_objects.message.innerHTML=cont;
-this.gui_objects.message.style.display="block";
-if(type!="loading"){
-this.gui_objects.message.onmousedown=function(){
-_1b6.hide_message();
-return true;
-};
-}
-if(!hold){
-this.message_timer=window.setTimeout(function(){
-_1.hide_message();
-},this.message_time);
-}
-};
-this.hide_message=function(){
-if(this.gui_objects.message){
-this.gui_objects.message.style.display="none";
-this.gui_objects.message.onmousedown=null;
-}
-};
-this.select_folder=function(name,old){
-if(this.gui_objects.folderlist){
-var _1b9,_1ba;
-if((_1b9=this.get_folder_li(old))){
-this.set_classname(_1b9,"selected",false);
-this.set_classname(_1b9,"unfocused",false);
-}
-if((_1ba=this.get_folder_li(name))){
-this.set_classname(_1ba,"unfocused",false);
-this.set_classname(_1ba,"selected",true);
-}
-}
-};
-this.get_folder_li=function(name){
-if(this.gui_objects.folderlist){
-name=String(name).replace(this.identifier_expr,"");
-return document.getElementById("rcmli"+name);
-}
-return null;
-};
-this.set_message_coltypes=function(_1bc){
-this.coltypes=_1bc;
-var cell,col;
-var _1bf=this.gui_objects.messagelist?this.gui_objects.messagelist.tHead:null;
-for(var n=0;_1bf&&n":"";
-row.appendChild(col);
-for(var n=0;n";
-}else{
-if(!_1c3.flagged&&this.env.unflaggedicon){
-col.innerHTML="
";
-}
-}
-}else{
-if(c=="attachment"){
-col.innerHTML=_1c4&&this.env.attachmenticon?"
":" ";
-}else{
-col.innerHTML=cols[c];
-}
-}
-row.appendChild(col);
-}
-this.message_list.insert_row(row,_1c5);
-if(_1c5&&this.env.pagesize&&this.message_list.rowcount>this.env.pagesize){
-var uid=this.message_list.get_last_row();
-this.message_list.remove_row(uid);
-this.message_list.clear_selection(uid);
-}
-};
-this.set_rowcount=function(text){
-if(this.gui_objects.countdisplay){
-this.gui_objects.countdisplay.innerHTML=text;
-}
-this.set_page_buttons();
-};
-this.set_mailboxname=function(_1cf){
-if(this.gui_objects.mailboxname&&_1cf){
-this.gui_objects.mailboxname.innerHTML=_1cf;
-}
-};
-this.set_quota=function(_1d0){
-if(this.gui_objects.quotadisplay&&_1d0){
-this.gui_objects.quotadisplay.innerHTML=_1d0;
-}
-};
-this.set_unread_count=function(mbox,_1d2,_1d3){
-if(!this.gui_objects.mailboxlist){
-return false;
-}
-this.env.unread_counts[mbox]=_1d2;
-this.set_unread_count_display(mbox,_1d3);
-};
-this.set_unread_count_display=function(mbox,_1d5){
-var reg,_1d7,item,_1d9,_1da,div;
-if(item=this.get_folder_li(mbox)){
-_1d9=this.env.unread_counts[mbox]?this.env.unread_counts[mbox]:0;
-_1d7=item.getElementsByTagName("a")[0];
-reg=/\s+\([0-9]+\)$/i;
-_1da=0;
-if((div=item.getElementsByTagName("div")[0])&&div.className.match(/collapsed/)){
-for(var k in this.env.unread_counts){
-if(k.indexOf(mbox+this.env.delimiter)==0){
-_1da+=this.env.unread_counts[k];
-}
-}
-}
-if(_1d9&&_1d7.innerHTML.match(reg)){
-_1d7.innerHTML=_1d7.innerHTML.replace(reg," ("+_1d9+")");
-}else{
-if(_1d9){
-_1d7.innerHTML+=" ("+_1d9+")";
-}else{
-_1d7.innerHTML=_1d7.innerHTML.replace(reg,"");
-}
-}
-reg=new RegExp(RegExp.escape(this.env.delimiter)+"[^"+RegExp.escape(this.env.delimiter)+"]+$");
-if(mbox.match(reg)){
-this.set_unread_count_display(mbox.replace(reg,""),false);
-}
-this.set_classname(item,"unread",(_1d9+_1da)>0?true:false);
-}
-reg=/^\([0-9]+\)\s+/i;
-if(_1d5&&document.title){
-var _1dd=String(document.title);
-var _1de="";
-if(_1d9&&_1dd.match(reg)){
-_1de=_1dd.replace(reg,"("+_1d9+") ");
-}else{
-if(_1d9){
-_1de="("+_1d9+") "+_1dd;
-}else{
-_1de=_1dd.replace(reg,"");
-}
-}
-this.set_pagetitle(_1de);
-}
-};
-this.new_message_focus=function(){
-if(this.env.framed&&window.parent){
-window.parent.focus();
-}else{
-window.focus();
-}
-};
-this.add_contact_row=function(cid,cols,_1e1){
-if(!this.gui_objects.contactslist||!this.gui_objects.contactslist.tBodies[0]){
-return false;
-}
-var _1e2=this.gui_objects.contactslist.tBodies[0];
-var _1e3=_1e2.rows.length;
-var even=_1e3%2;
-var row=document.createElement("TR");
-row.id="rcmrow"+cid;
-row.className="contact "+(even?"even":"odd");
-if(this.contact_list.in_selection(cid)){
-row.className+=" selected";
-}
-for(var c in cols){
-col=document.createElement("TD");
-col.className=String(c).toLowerCase();
-col.innerHTML=cols[c];
-row.appendChild(col);
-}
-this.contact_list.insert_row(row);
-this.enable_command("export",(this.contact_list.rowcount>0));
-};
-this.toggle_prefer_html=function(_1e7){
-var _1e8;
-if(_1e8=document.getElementById("rcmfd_addrbook_show_images")){
-_1e8.disabled=!_1e7.checked;
-}
-};
-this.set_headers=function(_1e9){
-if(this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&_1e9){
-var box=this.gui_objects.all_headers_box;
-box.innerHTML=_1e9;
-box.style.display="block";
-if(this.env.framed&&parent.rcmail){
-parent.rcmail.set_busy(false);
-}else{
-this.set_busy(false);
-}
-}
-};
-this.load_headers=function(elem){
-if(!this.gui_objects.all_headers_row||!this.gui_objects.all_headers_box||!this.env.uid){
-return;
-}
-this.set_classname(elem,"show-headers",false);
-this.set_classname(elem,"hide-headers",true);
-this.gui_objects.all_headers_row.style.display=bw.ie?"block":"table-row";
-elem.onclick=function(){
-rcmail.hide_headers(elem);
-};
-if(!this.gui_objects.all_headers_box.innerHTML){
-this.display_message(this.get_label("loading"),"loading",true);
-this.http_post("headers","_uid="+this.env.uid);
-}
-};
-this.hide_headers=function(elem){
-if(!this.gui_objects.all_headers_row||!this.gui_objects.all_headers_box){
-return;
-}
-this.set_classname(elem,"hide-headers",false);
-this.set_classname(elem,"show-headers",true);
-this.gui_objects.all_headers_row.style.display="none";
-elem.onclick=function(){
-rcmail.load_headers(elem);
-};
-};
-this.html2plain=function(_1ed,id){
-var _1ef=new rcube_http_request();
-var url=this.env.bin_path+"html2text.php";
-var _1f1=this;
-this.set_busy(true,"converting");
-_1ef.onerror=function(o){
-_1f1.http_error(o);
-};
-_1ef.oncomplete=function(o){
-_1f1.set_text_value(o,id);
-};
-_1ef.POST(url,_1ed,"application/octet-stream");
-};
-this.set_text_value=function(_1f4,id){
-this.set_busy(false);
-document.getElementById(id).value=_1f4.get_text();
-};
-this.redirect=function(url,lock){
-if(lock||lock===null){
-this.set_busy(true);
-}
-if(this.env.framed&&window.parent){
-parent.location.href=url;
-}else{
-location.href=url;
-}
-};
-this.goto_url=function(_1f8,_1f9,lock){
-var _1fb=_1f9?"&"+_1f9:"";
-this.redirect(this.env.comm_path+"&_action="+_1f8+_1fb,lock);
-};
-this.http_sockets=new Array();
-this.get_request_obj=function(){
-for(var n=0;n0));
-}
-case "moveto":
-if(this.env.action=="show"){
-this.command("list");
-}else{
-if(this.message_list){
-this.message_list.init();
-}
-}
-break;
-case "purge":
-case "expunge":
-if(!this.env.messagecount&&this.task=="mail"){
-if(this.env.contentframe){
-this.show_contentframe(false);
-}
-this.enable_command("show","reply","reply-all","forward","moveto","delete","mark","viewsource","print","load-attachment","purge","expunge","select-all","select-none","sort",false);
-}
-break;
-case "check-recent":
-case "getunread":
-case "list":
-if(this.task=="mail"){
-if(this.message_list&&_20c.__action=="list"){
-this.msglist_select(this.message_list);
-}
-this.enable_command("show","expunge","select-all","select-none","sort",(this.env.messagecount>0));
-this.enable_command("purge",this.purge_mailbox_test());
-}else{
-if(this.task=="addressbook"){
-this.enable_command("export",(this.contact_list&&this.contact_list.rowcount>0));
-}
-}
-break;
-}
-_20c.reset();
-};
-this.http_error=function(_210){
-if(_210.__lock){
-this.set_busy(false);
-}
-_210.reset();
-_210.__lock=false;
-this.display_message("Unknown Server Error!","error");
-};
-this.send_keep_alive=function(){
-var d=new Date();
-this.http_request("keep-alive","_t="+d.getTime());
-};
-this.check_for_recent=function(_212){
-if(this.busy){
-return;
-}
-if(_212){
-this.set_busy(true,"checkingmail");
-}
-this.http_request("check-recent",(this.env.search_request?"_search="+this.env.search_request+"&":"")+"_t="+(new Date().getTime()),true);
-};
-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(obj){
-if(typeof (obj.selectionEnd)!="undefined"){
-return obj.selectionEnd;
-}else{
-if(document.selection&&document.selection.createRange){
-var _214=document.selection.createRange();
-if(_214.parentElement()!=obj){
-return 0;
-}
-var gm=_214.duplicate();
-if(obj.tagName=="TEXTAREA"){
-gm.moveToElementText(obj);
-}else{
-gm.expand("textedit");
-}
-gm.setEndPoint("EndToStart",_214);
-var p=gm.text.length;
-return p<=obj.value.length?p:-1;
-}else{
-return obj.value.length;
-}
-}
-};
-this.set_caret2start=function(obj){
-if(obj.createTextRange){
-var _218=obj.createTextRange();
-_218.collapse(true);
-_218.select();
-}else{
-if(obj.setSelectionRange){
-obj.setSelectionRange(0,0);
-}
-}
-obj.focus();
-};
-this.lock_form=function(form,lock){
-if(!form||!form.elements){
-return;
-}
-var type;
-for(var n=0;n 0)
+ this.enable_command('export', true);
+
+ this.enable_command('list', true);
+ break;
+
+
+ case 'settings':
+ this.enable_command('preferences', 'identities', 'save', 'folders', true);
+
+ if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity') {
+ this.enable_command('add', this.env.identities_level < 2);
+ this.enable_command('delete', 'edit', true);
+ }
+
+ if (this.env.action=='edit-identity' || this.env.action=='add-identity')
+ this.enable_command('save', true);
+
+ if (this.env.action=='folders')
+ this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', 'delete-folder', true);
+
+ if (this.gui_objects.identitieslist)
+ {
+ this.identity_list = new rcube_list_widget(this.gui_objects.identitieslist, {multiselect:false, draggable:false, keyboard:false});
+ this.identity_list.addEventListener('select', function(o){ p.identity_select(o); });
+ this.identity_list.init();
+ this.identity_list.focus();
+
+ if (this.env.iid)
+ this.identity_list.highlight_row(this.env.iid);
+ }
+
+ if (this.gui_objects.subscriptionlist)
+ this.init_subscription_list();
+
+ break;
+
+ case 'login':
+ var input_user = rcube_find_object('rcmloginuser');
+ var input_pass = rcube_find_object('rcmloginpwd');
+ var input_tz = rcube_find_object('rcmlogintz');
+
+ if (input_user)
+ input_user.onkeyup = function(e){ return rcmail.login_user_keyup(e); };
+ if (input_user && input_user.value=='')
+ input_user.focus();
+ else if (input_pass)
+ input_pass.focus();
+
+ // detect client timezone
+ if (input_tz)
+ input_tz.value = new Date().getTimezoneOffset() / -60;
+
+ this.enable_command('login', true);
+ break;
+
+ default:
+ break;
+ }
+
+ // enable basic commands
+ this.enable_command('logout', true);
+
+ // flag object as complete
+ this.loaded = true;
+
+ // show message
+ if (this.pending_message)
+ this.display_message(this.pending_message[0], this.pending_message[1]);
+
+ // start keep-alive interval
+ this.start_keepalive();
+
+ // execute all foreign onload scripts
+ for (var i=0; i= 0)
+ this.set_env('flagged_col', found+1);
+ }
+
+ // set eventhandler to flag icon, if icon found
+ if (this.env.flagged_col && (row.flagged_icon = row.obj.cells[this.env.flagged_col].childNodes[0])
+ && row.flagged_icon.nodeName=='IMG')
+ {
+ var p = this;
+ row.flagged_icon.id = 'flaggedicn_'+row.uid;
+ row.flagged_icon._row = row.obj;
+ row.flagged_icon.onmousedown = function(e) { p.command('toggle_flag', this); };
+ }
+ };
+
+ // init message compose form: set focus and eventhandlers
+ this.init_messageform = function()
+ {
+ if (!this.gui_objects.messageform)
+ return false;
+
+ //this.messageform = this.gui_objects.messageform;
+ var input_from = rcube_find_object('_from');
+ var input_to = rcube_find_object('_to');
+ var input_cc = rcube_find_object('_cc');
+ var input_bcc = rcube_find_object('_bcc');
+ var input_replyto = rcube_find_object('_replyto');
+ var input_subject = rcube_find_object('_subject');
+ var input_message = rcube_find_object('_message');
+ var draftid = rcube_find_object('_draft_saveid');
+
+ // init live search events
+ if (input_to)
+ this.init_address_input_events(input_to);
+ if (input_cc)
+ this.init_address_input_events(input_cc);
+ if (input_bcc)
+ this.init_address_input_events(input_bcc);
+
+ // add signature according to selected identity
+ if (input_from && input_from.type=='select-one' && (!draftid || draftid.value=='')
+ // if we have HTML editor, signature is added in callback
+ && rcube_find_object('_is_html').value != '1')
+ {
+ this.change_identity(input_from);
+ }
+
+ if (input_to && input_to.value=='')
+ input_to.focus();
+ else if (input_subject && input_subject.value=='')
+ input_subject.focus();
+ else if (input_message)
+ this.set_caret2start(input_message);
+
+ // get summary of all field values
+ this.compose_field_hash(true);
+
+ // start the auto-save timer
+ this.auto_save_start();
+ };
+
+ this.init_address_input_events = function(obj)
+ {
+ var handler = function(e){ return ref.ksearch_keypress(e,this); };
+
+ if (obj.addEventListener)
+ obj.addEventListener(bw.safari ? 'keydown' : 'keypress', handler, false);
+ else
+ obj.onkeydown = handler;
+
+ obj.setAttribute('autocomplete', 'off');
+ };
+
+
+ /*********************************************************/
+ /********* client command interface *********/
+ /*********************************************************/
+
+ // execute a specific command on the web client
+ this.command = function(command, props, obj)
+ {
+ if (obj && obj.blur)
+ obj.blur();
+
+ if (this.busy)
+ return false;
+
+ // command not supported or allowed
+ if (!this.commands[command])
+ {
+ // pass command to parent window
+ if (this.env.framed && parent.rcmail && parent.rcmail.command)
+ parent.rcmail.command(command, props);
+
+ return false;
+ }
+
+ // check input before leaving compose step
+ if (this.task=='mail' && this.env.action=='compose' && (command=='list' || command=='mail' || command=='addressbook' || command=='settings'))
+ {
+ if (this.cmp_hash != this.compose_field_hash() && !confirm(this.get_label('notsentwarning')))
+ return false;
+ }
+
+ // process command
+ switch (command)
+ {
+ case 'login':
+ if (this.gui_objects.loginform)
+ this.gui_objects.loginform.submit();
+ break;
+
+ case 'logout':
+ this.goto_url('logout', '', true);
+ break;
+
+ // commands to switch task
+ case 'mail':
+ case 'addressbook':
+ case 'settings':
+ this.switch_task(command);
+ break;
+
+ case 'permaurl':
+ if (obj && obj.href && obj.target)
+ return true;
+ else if (this.env.permaurl)
+ parent.location.href = this.env.permaurl;
+ break;
+
+ // misc list commands
+ case 'list':
+ if (this.task=='mail')
+ {
+ if (this.env.search_request<0 || (props != '' && (this.env.search_request && props != this.env.mailbox)))
+ this.reset_qsearch();
+
+ this.list_mailbox(props);
+
+ if (this.env.trash_mailbox)
+ this.set_alttext('delete', this.env.mailbox != this.env.trash_mailbox ? 'movemessagetotrash' : 'deletemessage');
+ }
+ else if (this.task=='addressbook')
+ {
+ if (this.env.search_request<0 || (this.env.search_request && props != this.env.source))
+ this.reset_qsearch();
+
+ this.list_contacts(props);
+ this.enable_command('add', (this.env.address_sources && !this.env.address_sources[props].readonly));
+ }
+ break;
+
+
+ case 'load-headers':
+ this.load_headers(obj);
+ break;
+
+
+ case 'sort':
+ // get the type of sorting
+ var a_sort = props.split('_');
+ var sort_col = a_sort[0];
+ var sort_order = a_sort[1] ? a_sort[1].toUpperCase() : null;
+ var header;
+
+ // no sort order specified: toggle
+ if (sort_order==null)
+ {
+ if (this.env.sort_col==sort_col)
+ sort_order = this.env.sort_order=='ASC' ? 'DESC' : 'ASC';
+ else
+ sort_order = this.env.sort_order;
+ }
+
+ if (this.env.sort_col==sort_col && this.env.sort_order==sort_order)
+ break;
+
+ // set table header class
+ if (header = document.getElementById('rcm'+this.env.sort_col))
+ this.set_classname(header, 'sorted'+(this.env.sort_order.toUpperCase()), false);
+ if (header = document.getElementById('rcm'+sort_col))
+ this.set_classname(header, 'sorted'+sort_order, true);
+
+ // save new sort properties
+ this.env.sort_col = sort_col;
+ this.env.sort_order = sort_order;
+
+ // reload message list
+ this.list_mailbox('', '', sort_col+'_'+sort_order);
+ break;
+
+ case 'nextpage':
+ this.list_page('next');
+ break;
+
+ case 'lastpage':
+ this.list_page('last');
+ break;
+
+ case 'previouspage':
+ this.list_page('prev');
+ break;
+
+ case 'firstpage':
+ this.list_page('first');
+ break;
+
+ case 'expunge':
+ if (this.env.messagecount)
+ this.expunge_mailbox(this.env.mailbox);
+ break;
+
+ case 'purge':
+ case 'empty-mailbox':
+ if (this.env.messagecount)
+ this.purge_mailbox(this.env.mailbox);
+ break;
+
+
+ // common commands used in multiple tasks
+ case 'show':
+ if (this.task=='mail')
+ {
+ var uid = this.get_single_uid();
+ if (uid && (!this.env.uid || uid != this.env.uid))
+ {
+ if (this.env.mailbox == this.env.drafts_mailbox)
+ this.goto_url('compose', '_draft_uid='+uid+'&_mbox='+urlencode(this.env.mailbox), true);
+ else
+ this.show_message(uid);
+ }
+ }
+ else if (this.task=='addressbook')
+ {
+ var cid = props ? props : this.get_single_cid();
+ if (cid && !(this.env.action=='show' && cid==this.env.cid))
+ this.load_contact(cid, 'show');
+ }
+ break;
+
+ case 'add':
+ if (this.task=='addressbook')
+ this.load_contact(0, 'add');
+ else if (this.task=='settings')
+ {
+ this.identity_list.clear_selection();
+ this.load_identity(0, 'add-identity');
+ }
+ break;
+
+ case 'edit':
+ var cid;
+ if (this.task=='addressbook' && (cid = this.get_single_cid()))
+ this.load_contact(cid, 'edit');
+ else if (this.task=='settings' && props)
+ this.load_identity(props, 'edit-identity');
+ break;
+
+ case 'save-identity':
+ case 'save':
+ if (this.gui_objects.editform)
+ {
+ var input_pagesize = rcube_find_object('_pagesize');
+ var input_name = rcube_find_object('_name');
+ var input_email = rcube_find_object('_email');
+
+ // user prefs
+ if (input_pagesize && isNaN(parseInt(input_pagesize.value)))
+ {
+ alert(this.get_label('nopagesizewarning'));
+ input_pagesize.focus();
+ break;
+ }
+ // contacts/identities
+ else
+ {
+ if (input_name && input_name.value == '')
+ {
+ alert(this.get_label('nonamewarning'));
+ input_name.focus();
+ break;
+ }
+ else if (input_email && !rcube_check_email(input_email.value))
+ {
+ alert(this.get_label('noemailwarning'));
+ input_email.focus();
+ break;
+ }
+ }
+
+ this.gui_objects.editform.submit();
+ }
+ break;
+
+ case 'delete':
+ // mail task
+ if (this.task=='mail')
+ this.delete_messages();
+ // addressbook task
+ else if (this.task=='addressbook')
+ this.delete_contacts();
+ // user settings task
+ else if (this.task=='settings')
+ this.delete_identity();
+ break;
+
+
+ // mail task commands
+ case 'move':
+ case 'moveto':
+ if (this.task == 'mail')
+ this.move_messages(props);
+ else if (this.task == 'addressbook' && this.drag_active)
+ this.copy_contact(null, props);
+ break;
+
+ case 'mark':
+ if (props)
+ this.mark_message(props);
+ break;
+
+ case 'toggle_status':
+ if (props && !props._row)
+ break;
+
+ var uid;
+ var flag = 'read';
+
+ if (props._row.uid)
+ {
+ uid = props._row.uid;
+
+ // toggle read/unread
+ if (this.message_list.rows[uid].deleted) {
+ flag = 'undelete';
+ } else if (!this.message_list.rows[uid].unread)
+ flag = 'unread';
+ }
+
+ this.mark_message(flag, uid);
+ break;
+
+ case 'toggle_flag':
+ if (props && !props._row)
+ break;
+
+ var uid;
+ var flag = 'flagged';
+
+ if (props._row.uid)
+ {
+ uid = props._row.uid;
+ // toggle flagged/unflagged
+ if (this.message_list.rows[uid].flagged)
+ flag = 'unflagged';
+ }
+ this.mark_message(flag, uid);
+ break;
+
+ case 'always-load':
+ if (this.env.uid && this.env.sender) {
+ this.add_contact(urlencode(this.env.sender));
+ window.setTimeout(function(){ ref.command('load-images'); }, 300);
+ break;
+ }
+
+ case 'load-images':
+ if (this.env.uid)
+ this.show_message(this.env.uid, true, this.env.action=='preview');
+ break;
+
+ case 'load-attachment':
+ var qstring = '_mbox='+urlencode(this.env.mailbox)+'&_uid='+this.env.uid+'&_part='+props.part;
+
+ // open attachment in frame if it's of a supported mimetype
+ if (this.env.uid && props.mimetype && find_in_array(props.mimetype, this.mimetypes)>=0)
+ {
+ if (props.mimetype == 'text/html')
+ qstring += '&_safe=1';
+ this.attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment');
+ if (this.attachment_win)
+ {
+ window.setTimeout(function(){ ref.attachment_win.focus(); }, 10);
+ break;
+ }
+ }
+
+ this.goto_url('get', qstring+'&_download=1', false);
+ break;
+
+ case 'select-all':
+ this.message_list.select_all(props);
+ break;
+
+ case 'select-none':
+ this.message_list.clear_selection();
+ break;
+
+ case 'nextmessage':
+ if (this.env.next_uid)
+ this.show_message(this.env.next_uid, false, this.env.action=='preview');
+ break;
+
+ case 'lastmessage':
+ if (this.env.last_uid)
+ this.show_message(this.env.last_uid);
+ break;
+
+ case 'previousmessage':
+ if (this.env.prev_uid)
+ this.show_message(this.env.prev_uid, false, this.env.action=='preview');
+ break;
+
+ case 'firstmessage':
+ if (this.env.first_uid)
+ this.show_message(this.env.first_uid);
+ break;
+
+ case 'checkmail':
+ this.check_for_recent(true);
+ break;
+
+ case 'compose':
+ var url = this.env.comm_path+'&_action=compose';
+
+ if (this.task=='mail')
+ {
+ url += '&_mbox='+urlencode(this.env.mailbox);
+
+ if (this.env.mailbox==this.env.drafts_mailbox)
+ {
+ var uid;
+ if (uid = this.get_single_uid())
+ url += '&_draft_uid='+uid;
+ }
+ else if (props)
+ url += '&_to='+urlencode(props);
+ }
+ // modify url if we're in addressbook
+ else if (this.task=='addressbook')
+ {
+ // switch to mail compose step directly
+ if (props && props.indexOf('@') > 0)
+ {
+ url = this.get_task_url('mail', url);
+ this.redirect(url + '&_to='+urlencode(props));
+ break;
+ }
+
+ // use contact_id passed as command parameter
+ var a_cids = new Array();
+ if (props)
+ a_cids[a_cids.length] = props;
+ // get selected contacts
+ else if (this.contact_list)
+ {
+ var selection = this.contact_list.get_selection();
+ for (var n=0; n 0) {
+ var add_url = (this.env.source ? '_source='+urlencode(this.env.source)+'&' : '');
+ if (this.env.search_request)
+ add_url += '_search='+this.env.search_request;
+
+ this.goto_url('export', add_url);
+ }
+ break;
+
+ // collapse/expand folder
+ case 'collapse-folder':
+ if (props)
+ this.collapse_folder(props);
+ break;
+
+ // user settings commands
+ case 'preferences':
+ this.goto_url('');
+ break;
+
+ case 'identities':
+ this.goto_url('identities');
+ break;
+
+ case 'delete-identity':
+ this.delete_identity();
+
+ case 'folders':
+ this.goto_url('folders');
+ break;
+
+ case 'subscribe':
+ this.subscribe_folder(props);
+ break;
+
+ case 'unsubscribe':
+ this.unsubscribe_folder(props);
+ break;
+
+ case 'create-folder':
+ this.create_folder(props);
+ break;
+
+ case 'rename-folder':
+ this.rename_folder(props);
+ break;
+
+ case 'delete-folder':
+ this.delete_folder(props);
+ break;
+
+ }
+
+ return obj ? false : true;
+ };
+
+ // set command enabled or disabled
+ this.enable_command = function()
+ {
+ var args = arguments;
+ if(!args.length) return -1;
+
+ var command;
+ var enable = args[args.length-1];
+
+ for(var n=0; n= pos.x2
+ || mouse.y < pos.y1 || mouse.y >= pos.y2)
+ {
+ if (this.env.last_folder_target) {
+ this.set_classname(this.get_folder_li(this.env.last_folder_target), 'droptarget', false);
+ this.env.last_folder_target = null;
+ }
+ return;
+ }
+
+ // over the folders
+ for (var k in this.env.folder_coords)
+ {
+ pos = this.env.folder_coords[k];
+ if (this.check_droptarget(k) && ((mouse.x >= pos.x1) && (mouse.x < pos.x2)
+ && (mouse.y >= pos.y1) && (mouse.y < pos.y2)))
+ {
+ this.set_classname(this.get_folder_li(k), 'droptarget', true);
+ this.env.last_folder_target = k;
+ }
+ else
+ this.set_classname(this.get_folder_li(k), 'droptarget', false);
+ }
+ }
+ };
+
+ this.collapse_folder = function(id)
+ {
+ var div;
+ if ((li = this.get_folder_li(id)) &&
+ (div = li.getElementsByTagName("div")[0]) &&
+ (div.className.match(/collapsed/) || div.className.match(/expanded/)))
+ {
+ var ul = li.getElementsByTagName("ul")[0];
+ if (div.className.match(/collapsed/))
+ {
+ ul.style.display = '';
+ this.set_classname(div, 'collapsed', false);
+ this.set_classname(div, 'expanded', true);
+ var reg = new RegExp('&'+urlencode(id)+'&');
+ this.set_env('collapsed_folders', this.env.collapsed_folders.replace(reg, ''));
+ }
+ else
+ {
+ ul.style.display = 'none';
+ this.set_classname(div, 'expanded', false);
+ this.set_classname(div, 'collapsed', true);
+ this.set_env('collapsed_folders', this.env.collapsed_folders+'&'+urlencode(id)+'&');
+
+ // select parent folder if one of its childs is currently selected
+ if (this.env.mailbox.indexOf(id + this.env.delimiter) == 0)
+ this.command('list', id);
+ }
+
+ // Work around a bug in IE6 and IE7, see #1485309
+ if ((bw.ie6 || bw.ie7) &&
+ li.nextSibling &&
+ (li.nextSibling.getElementsByTagName("ul").length>0) &&
+ li.nextSibling.getElementsByTagName("ul")[0].style &&
+ (li.nextSibling.getElementsByTagName("ul")[0].style.display!='none'))
+ {
+ li.nextSibling.getElementsByTagName("ul")[0].style.display = 'none';
+ li.nextSibling.getElementsByTagName("ul")[0].style.display = '';
+ }
+
+ this.http_post('save-pref', '_name=collapsed_folders&_value='+urlencode(this.env.collapsed_folders));
+ this.set_unread_count_display(id, false);
+ }
+ }
+
+ this.click_on_list = function(e)
+ {
+ if (this.message_list)
+ this.message_list.focus();
+ else if (this.contact_list)
+ this.contact_list.focus();
+
+ var mbox_li;
+ if (mbox_li = this.get_folder_li())
+ this.set_classname(mbox_li, 'unfocused', true);
+
+ return rcube_event.get_button(e) == 2 ? true : rcube_event.cancel(e);
+ };
+
+ this.msglist_select = function(list)
+ {
+ if (this.preview_timer)
+ clearTimeout(this.preview_timer);
+
+ var selected = list.selection.length==1;
+
+ // Hide certain command buttons when Drafts folder is selected
+ if (this.env.mailbox == this.env.drafts_mailbox)
+ {
+ this.enable_command('reply', 'reply-all', 'forward', false);
+ this.enable_command('show', 'print', selected);
+ this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));
+ }
+ else
+ {
+ this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected);
+ this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));
+ }
+
+ // start timer for message preview (wait for double click)
+ if (selected && this.env.contentframe && !list.multi_selecting)
+ this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, 200);
+ else if (this.env.contentframe)
+ this.show_contentframe(false);
+ };
+
+ this.msglist_dbl_click = function(list)
+ {
+ if (this.preview_timer)
+ clearTimeout(this.preview_timer);
+
+ var uid = list.get_single_selection();
+ if (uid && this.env.mailbox == this.env.drafts_mailbox)
+ this.goto_url('compose', '_draft_uid='+uid+'&_mbox='+urlencode(this.env.mailbox), true);
+ else if (uid)
+ this.show_message(uid, false, false);
+ };
+
+ this.msglist_keypress = function(list)
+ {
+ if (list.key_pressed == list.ENTER_KEY)
+ this.command('show');
+ else if (list.key_pressed == list.DELETE_KEY)
+ this.command('delete');
+ else if (list.key_pressed == list.BACKSPACE_KEY)
+ this.command('delete');
+ else
+ list.shiftkey = false;
+ };
+
+ this.msglist_get_preview = function()
+ {
+ var uid = this.get_single_uid();
+ if (uid && this.env.contentframe && !this.drag_active)
+ this.show_message(uid, false, true);
+ else if (this.env.contentframe)
+ this.show_contentframe(false);
+ };
+
+ this.check_droptarget = function(id)
+ {
+ if (this.task == 'mail')
+ return (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual);
+ else if (this.task == 'addressbook')
+ return (id != this.env.source && this.env.address_sources[id] && !this.env.address_sources[id].readonly);
+ else if (this.task == 'settings')
+ return (id != this.env.folder);
+ };
+
+
+ /*********************************************************/
+ /********* (message) list functionality *********/
+ /*********************************************************/
+
+ // when user doble-clicks on a row
+ this.show_message = function(id, safe, preview)
+ {
+ if (!id) return;
+
+ var add_url = '';
+ var action = preview ? 'preview': 'show';
+ var target = window;
+
+ if (preview && this.env.contentframe && window.frames && window.frames[this.env.contentframe])
+ {
+ target = window.frames[this.env.contentframe];
+ add_url = '&_framed=1';
+ }
+
+ if (safe)
+ add_url = '&_safe=1';
+
+ // also send search request to get the right messages
+ if (this.env.search_request)
+ add_url += '&_search='+this.env.search_request;
+ var url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox)+add_url;
+ if (action == 'preview' && String(target.location.href).indexOf(url) >= 0)
+ this.show_contentframe(true);
+ else
+ {
+ this.set_busy(true, 'loading');
+ target.location.href = this.env.comm_path+url;
+ // mark as read and change mbox unread counter
+ if (action == 'preview' && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread)
+ {
+ this.set_message(id, 'unread', false);
+ if (this.env.unread_counts[this.env.mailbox])
+ {
+ this.env.unread_counts[this.env.mailbox] -= 1;
+ this.set_unread_count(this.env.mailbox, this.env.unread_counts[this.env.mailbox], this.env.mailbox == 'INBOX');
+ }
+ }
+ }
+ };
+
+ this.show_contentframe = function(show)
+ {
+ var frm;
+ if (this.env.contentframe && (frm = rcube_find_object(this.env.contentframe)))
+ {
+ if (!show && window.frames[this.env.contentframe])
+ {
+ if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0)
+ window.frames[this.env.contentframe].location.href = this.env.blankpage;
+ }
+ else if (!bw.safari)
+ frm.style.display = show ? 'block' : 'none';
+ }
+
+ if (!show && this.busy)
+ this.set_busy(false);
+ };
+
+ // list a specific page
+ this.list_page = function(page)
+ {
+ if (page=='next')
+ page = this.env.current_page+1;
+ if (page=='last')
+ page = this.env.pagecount;
+ if (page=='prev' && this.env.current_page>1)
+ page = this.env.current_page-1;
+ if (page=='first' && this.env.current_page>1)
+ page = 1;
+
+ if (page > 0 && page <= this.env.pagecount)
+ {
+ this.env.current_page = page;
+
+ if (this.task=='mail')
+ this.list_mailbox(this.env.mailbox, page);
+ else if (this.task=='addressbook')
+ this.list_contacts(this.env.source, page);
+ }
+ };
+
+ // list messages of a specific mailbox using filter
+ this.filter_mailbox = function(filter)
+ {
+ var search;
+ if (this.gui_objects.qsearchbox)
+ search = this.gui_objects.qsearchbox.value;
+
+ this.message_list.clear();
+
+ // reset vars
+ this.env.current_page = 1;
+ this.set_busy(true, 'searching');
+ this.http_request('search', '_filter='+filter
+ + (search ? '&_q='+urlencode(search) : '')
+ + (this.env.mailbox ? '&_mbox='+urlencode(this.env.mailbox) : ''), true);
+ }
+
+
+ // list messages of a specific mailbox
+ this.list_mailbox = function(mbox, page, sort)
+ {
+ this.last_selected = 0;
+ var add_url = '';
+ var target = window;
+
+ if (!mbox)
+ mbox = this.env.mailbox;
+
+ // add sort to url if set
+ if (sort)
+ add_url += '&_sort=' + sort;
+
+ // also send search request to get the right messages
+ if (this.env.search_request)
+ add_url += '&_search='+this.env.search_request;
+
+ // set page=1 if changeing to another mailbox
+ if (!page && mbox != this.env.mailbox)
+ {
+ page = 1;
+ this.env.current_page = page;
+ if (this.message_list)
+ this.message_list.clear_selection();
+ this.show_contentframe(false);
+ }
+
+ if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort))
+ add_url += '&_refresh=1';
+
+ this.select_folder(mbox, this.env.mailbox);
+ this.env.mailbox = mbox;
+
+ // load message list remotely
+ if (this.gui_objects.messagelist)
+ {
+ this.list_mailbox_remote(mbox, page, add_url);
+ return;
+ }
+
+ if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
+ {
+ target = window.frames[this.env.contentframe];
+ add_url += '&_framed=1';
+ }
+
+ // load message list to target frame/window
+ if (mbox)
+ {
+ this.set_busy(true, 'loading');
+ target.location.href = this.env.comm_path+'&_mbox='+urlencode(mbox)+(page ? '&_page='+page : '')+add_url;
+ }
+ };
+
+ // send remote request to load message list
+ this.list_mailbox_remote = function(mbox, page, add_url)
+ {
+ // clear message list first
+ this.message_list.clear();
+
+ // send request to server
+ var url = '_mbox='+urlencode(mbox)+(page ? '&_page='+page : '');
+ this.set_busy(true, 'loading');
+ this.http_request('list', url+add_url, true);
+ };
+
+ this.expunge_mailbox = function(mbox)
+ {
+ var lock = false;
+ var add_url = '';
+
+ // lock interface if it's the active mailbox
+ if (mbox == this.env.mailbox)
+ {
+ lock = true;
+ this.set_busy(true, 'loading');
+ add_url = '&_reload=1';
+ }
+
+ // send request to server
+ var url = '_mbox='+urlencode(mbox);
+ this.http_post('expunge', url+add_url, lock);
+ };
+
+ this.purge_mailbox = function(mbox)
+ {
+ var lock = false;
+ var add_url = '';
+
+ if (!confirm(this.get_label('purgefolderconfirm')))
+ return false;
+
+ // lock interface if it's the active mailbox
+ if (mbox == this.env.mailbox)
+ {
+ lock = true;
+ this.set_busy(true, 'loading');
+ add_url = '&_reload=1';
+ }
+
+ // send request to server
+ var url = '_mbox='+urlencode(mbox);
+ this.http_post('purge', url+add_url, lock);
+ return true;
+ };
+
+ // test if purge command is allowed
+ 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))));
+ };
+
+ // set message icon
+ this.set_message_icon = function(uid)
+ {
+ var icn_src;
+ var rows = this.message_list.rows;
+
+ if (!rows[uid])
+ return false;
+
+ if (rows[uid].deleted && this.env.deletedicon)
+ icn_src = this.env.deletedicon;
+ else if (rows[uid].replied && this.env.repliedicon)
+ {
+ if (rows[uid].forwarded && this.env.forwardedrepliedicon)
+ icn_src = this.env.forwardedrepliedicon;
+ else
+ icn_src = this.env.repliedicon;
+ }
+ else if (rows[uid].forwarded && this.env.forwardedicon)
+ icn_src = this.env.forwardedicon;
+ else if (rows[uid].unread && this.env.unreadicon)
+ icn_src = this.env.unreadicon;
+ else if (this.env.messageicon)
+ icn_src = this.env.messageicon;
+
+ if (icn_src && rows[uid].icon)
+ rows[uid].icon.src = icn_src;
+
+ icn_src = '';
+
+ if (rows[uid].flagged && this.env.flaggedicon)
+ icn_src = this.env.flaggedicon;
+ else if (!rows[uid].flagged && this.env.unflaggedicon)
+ icn_src = this.env.unflaggedicon;
+
+ if (rows[uid].flagged_icon && icn_src)
+ rows[uid].flagged_icon.src = icn_src;
+ }
+
+ // set message status
+ this.set_message_status = function(uid, flag, status)
+ {
+ var rows = this.message_list.rows;
+
+ if (!rows[uid]) return false;
+
+ if (flag == 'unread')
+ rows[uid].unread = status;
+ else if(flag == 'deleted')
+ rows[uid].deleted = status;
+ else if (flag == 'replied')
+ rows[uid].replied = status;
+ else if (flag == 'forwarded')
+ rows[uid].forwarded = status;
+ else if (flag == 'flagged')
+ rows[uid].flagged = status;
+
+ this.env.messages[uid] = rows[uid];
+ }
+
+ // set message row status, class and icon
+ this.set_message = function(uid, flag, status)
+ {
+ var rows = this.message_list.rows;
+
+ if (!rows[uid]) return false;
+
+ if (flag)
+ this.set_message_status(uid, flag, status);
+
+ if (rows[uid].unread && rows[uid].classname.indexOf('unread')<0)
+ {
+ rows[uid].classname += ' unread';
+ this.set_classname(rows[uid].obj, 'unread', true);
+ }
+ else if (!rows[uid].unread && rows[uid].classname.indexOf('unread')>=0)
+ {
+ rows[uid].classname = rows[uid].classname.replace(/\s*unread/, '');
+ this.set_classname(rows[uid].obj, 'unread', false);
+ }
+
+ if (rows[uid].deleted && rows[uid].classname.indexOf('deleted')<0)
+ {
+ rows[uid].classname += ' deleted';
+ this.set_classname(rows[uid].obj, 'deleted', true);
+ }
+ else if (!rows[uid].deleted && rows[uid].classname.indexOf('deleted')>=0)
+ {
+ rows[uid].classname = rows[uid].classname.replace(/\s*deleted/, '');
+ this.set_classname(rows[uid].obj, 'deleted', false);
+ }
+
+ if (rows[uid].flagged && rows[uid].classname.indexOf('flagged')<0)
+ {
+ rows[uid].classname += ' flagged';
+ this.set_classname(rows[uid].obj, 'flagged', true);
+ }
+ else if (!rows[uid].flagged && rows[uid].classname.indexOf('flagged')>=0)
+ {
+ rows[uid].classname = rows[uid].classname.replace(/\s*flagged/, '');
+ this.set_classname(rows[uid].obj, 'flagged', false);
+ }
+
+ this.set_message_icon(uid);
+ }
+
+ // move selected messages to the specified mailbox
+ this.move_messages = function(mbox)
+ {
+ // exit if current or no mailbox specified or if selection is empty
+ if (!mbox || mbox == this.env.mailbox || (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length)))
+ return;
+
+ var lock = false;
+ var add_url = '&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : '');
+
+ // show wait message
+ if (this.env.action=='show')
+ {
+ lock = true;
+ this.set_busy(true, 'movingmessage');
+ }
+ else if (!this.env.flag_for_deletion)
+ this.show_contentframe(false);
+
+ // Hide message command buttons until a message is selected
+ this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', false);
+
+ this._with_selected_messages('moveto', lock, add_url, (this.env.flag_for_deletion ? false : true));
+ };
+
+ // delete selected messages from the current mailbox
+ this.delete_messages = function()
+ {
+ var selection = this.message_list ? this.message_list.get_selection() : new Array();
+
+ // exit if no mailbox specified or if selection is empty
+ if (!this.env.uid && !selection.length)
+ return;
+
+ // if there is a trash mailbox defined and we're not currently in it:
+ if (this.env.trash_mailbox && String(this.env.mailbox).toLowerCase() != String(this.env.trash_mailbox).toLowerCase())
+ {
+ // if shift was pressed delete it immediately
+ if (this.message_list && this.message_list.shiftkey)
+ {
+ if (confirm(this.get_label('deletemessagesconfirm')))
+ this.permanently_remove_messages();
+ }
+ else
+ this.move_messages(this.env.trash_mailbox);
+ }
+ // if there is a trash mailbox defined but we *are* in it:
+ else if (this.env.trash_mailbox && String(this.env.mailbox).toLowerCase() == String(this.env.trash_mailbox).toLowerCase())
+ this.permanently_remove_messages();
+ // if there isn't a defined trash mailbox and the config is set to flag for deletion
+ else if (!this.env.trash_mailbox && this.env.flag_for_deletion)
+ {
+ this.mark_message('delete');
+ if(this.env.action=="show")
+ this.command('nextmessage','',this);
+ else if (selection.length == 1)
+ this.message_list.select_next();
+ }
+ // if there isn't a defined trash mailbox and the config is set NOT to flag for deletion
+ else if (!this.env.trash_mailbox)
+ this.permanently_remove_messages();
+ };
+
+ // delete the selected messages permanently
+ this.permanently_remove_messages = function()
+ {
+ // exit if no mailbox specified or if selection is empty
+ if (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length))
+ return;
+
+ this.show_contentframe(false);
+ this._with_selected_messages('delete', false, '&_from='+(this.env.action ? this.env.action : ''), true);
+ };
+
+ // Send a specifc request with UIDs of all selected messages
+ // @private
+ this._with_selected_messages = function(action, lock, add_url, remove)
+ {
+ var a_uids = new Array();
+
+ if (this.env.uid)
+ a_uids[0] = this.env.uid;
+ else
+ {
+ var selection = this.message_list.get_selection();
+ var rows = this.message_list.rows;
+ var id;
+ for (var n=0; n=0)
+ message = message.substring(0, p-1) + message.substring(p+sig.length, message.length);
+ }
+
+ message = message.replace(/[\r\n]+$/, '');
+
+ // add the new signature string
+ if (this.env.signatures && this.env.signatures[id])
+ {
+ sig = this.env.signatures[id]['text'];
+ if (this.env.signatures[id]['is_html'])
+ {
+ sig = this.env.signatures[id]['plain_text'];
+ }
+ if (sig.indexOf('-- ')!=0)
+ sig = '-- \n'+sig;
+ message += '\n\n'+sig;
+ }
+ }
+ else
+ {
+ var editor = tinyMCE.get('compose-body');
+
+ if (this.env.signatures)
+ {
+ // Append the signature as a div within the body
+ var sigElem = editor.dom.get('_rc_sig');
+ var newsig = '';
+ var htmlsig = true;
+
+ if (!sigElem)
+ {
+ // add empty line before signature on IE
+ if (bw.ie)
+ editor.getBody().appendChild(editor.getDoc().createElement('br'));
+
+ sigElem = editor.getDoc().createElement('div');
+ sigElem.setAttribute('id', '_rc_sig');
+ editor.getBody().appendChild(sigElem);
+ }
+
+ if (this.env.signatures[id])
+ {
+ newsig = this.env.signatures[id]['text'];
+ htmlsig = this.env.signatures[id]['is_html'];
+ }
+
+ if (htmlsig)
+ sigElem.innerHTML = newsig;
+ else
+ sigElem.innerHTML = '' + newsig + '
';
+ }
+ }
+
+ if (input_message)
+ input_message.value = message;
+
+ this.env.identity = id;
+ return true;
+ };
+
+ this.show_attachment_form = function(a)
+ {
+ if (!this.gui_objects.uploadbox)
+ return false;
+
+ var elm, list;
+ if (elm = this.gui_objects.uploadbox)
+ {
+ if (a && (list = this.gui_objects.attachmentlist))
+ {
+ var pos = rcube_get_object_pos(list);
+ var left = pos.x;
+ var top = pos.y + list.offsetHeight + 10;
+
+ elm.style.top = top+'px';
+ elm.style.left = left+'px';
+ }
+
+ elm.style.visibility = a ? 'visible' : 'hidden';
+ }
+
+ // clear upload form
+ try {
+ if (!a && this.gui_objects.attachmentform != this.gui_objects.messageform)
+ this.gui_objects.attachmentform.reset();
+ }
+ catch(e){} // ignore errors
+
+ return true;
+ };
+
+ // upload attachment file
+ this.upload_file = function(form)
+ {
+ if (!form)
+ return false;
+
+ // get file input fields
+ var send = false;
+ for (var n=0; n';
+ document.body.insertAdjacentHTML('BeforeEnd',html);
+ }
+ else // for standards-compilant browsers
+ {
+ var frame = document.createElement('IFRAME');
+ frame.name = frame_name;
+ frame.style.border = 'none';
+ frame.style.width = 0;
+ frame.style.height = 0;
+ frame.style.visibility = 'hidden';
+ document.body.appendChild(frame);
+ }
+
+ form.target = frame_name;
+ form.action = this.env.comm_path+'&_action=upload';
+ form.setAttribute('enctype', 'multipart/form-data');
+ form.submit();
+ }
+
+ // set reference to the form object
+ this.gui_objects.attachmentform = form;
+ return true;
+ };
+
+ // add file name to attachment list
+ // called from upload page
+ this.add2attachment_list = function(name, content)
+ {
+ if (!this.gui_objects.attachmentlist)
+ return false;
+
+ var li = document.createElement('LI');
+ li.id = name;
+ li.innerHTML = content;
+ this.gui_objects.attachmentlist.appendChild(li);
+ return true;
+ };
+
+ this.remove_from_attachment_list = function(name)
+ {
+ if (!this.gui_objects.attachmentlist)
+ return false;
+
+ var list = this.gui_objects.attachmentlist.getElementsByTagName("li");
+ for (i=0;i/g, '>').replace(/##([^%]+)%%/g, '$1');
+ li.onmouseover = function(){ ref.ksearch_select(this); };
+ li.onmouseup = function(){ ref.ksearch_click(this) };
+ li._rcm_id = a_result_ids[i];
+ ul.appendChild(li);
+ }
+
+ // check if last selected item is still in result list
+ if (this.ksearch_selected !== null) {
+ p = find_in_array(this.ksearch_selected, a_result_ids);
+ if (p >= 0 && ul.childNodes) {
+ ul.childNodes[p].setAttribute('id', 'rcmksearchSelected');
+ this.set_classname(ul.childNodes[p], 'selected', true);
+ }
+ else
+ this.ksearch_selected = null;
+ }
+
+ // if no item selected, select the first one
+ if (this.ksearch_selected === null) {
+ ul.firstChild.setAttribute('id', 'rcmksearchSelected');
+ this.set_classname(ul.firstChild, 'selected', true);
+ this.ksearch_selected = a_result_ids[0];
+ }
+
+ // move the results pane right under the input box and make it visible
+ var pos = rcube_get_object_pos(this.ksearch_input);
+ this.ksearch_pane.move(pos.x, pos.y+this.ksearch_input.offsetHeight);
+ this.ksearch_pane.show(1);
+ }
+ // hide results pane
+ else
+ this.ksearch_hide();
+ };
+
+ this.ksearch_click = function(node)
+ {
+ if (this.ksearch_input)
+ this.ksearch_input.focus();
+
+ this.insert_recipient(node._rcm_id);
+ this.ksearch_hide();
+ };
+
+ this.ksearch_blur = function()
+ {
+ if (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;
+
+ if (this.ksearch_pane)
+ this.ksearch_pane.show(0);
+ };
+
+
+ /*********************************************************/
+ /********* address book methods *********/
+ /*********************************************************/
+
+ this.contactlist_keypress = function(list)
+ {
+ if (list.key_pressed == list.DELETE_KEY)
+ this.command('delete');
+ };
+
+ this.contactlist_select = function(list)
+ {
+ if (this.preview_timer)
+ clearTimeout(this.preview_timer);
+
+ var id, frame, ref = this;
+ if (id = list.get_single_selection())
+ this.preview_timer = window.setTimeout(function(){ ref.load_contact(id, 'show'); }, 200);
+ else if (this.env.contentframe)
+ this.show_contentframe(false);
+
+ this.enable_command('compose', list.selection.length > 0);
+ this.enable_command('edit', (id && this.env.address_sources && !this.env.address_sources[this.env.source].readonly) ? true : false);
+ this.enable_command('delete', list.selection.length && this.env.address_sources && !this.env.address_sources[this.env.source].readonly);
+
+ return false;
+ };
+
+ this.list_contacts = function(src, page)
+ {
+ var add_url = '';
+ var target = window;
+
+ if (!src)
+ src = this.env.source;
+
+ if (page && this.current_page==page && src == this.env.source)
+ return false;
+
+ if (src != this.env.source)
+ {
+ page = 1;
+ this.env.current_page = page;
+ this.reset_qsearch();
+ }
+
+ this.select_folder(src, this.env.source);
+ this.env.source = src;
+
+ // load contacts remotely
+ if (this.gui_objects.contactslist)
+ {
+ this.list_contacts_remote(src, page);
+ return;
+ }
+
+ if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
+ {
+ target = window.frames[this.env.contentframe];
+ add_url = '&_framed=1';
+ }
+
+ // also send search request to get the correct listing
+ if (this.env.search_request)
+ add_url += '&_search='+this.env.search_request;
+
+ this.set_busy(true, 'loading');
+ target.location.href = this.env.comm_path+(src ? '&_source='+urlencode(src) : '')+(page ? '&_page='+page : '')+add_url;
+ };
+
+ // send remote request to load contacts list
+ this.list_contacts_remote = function(src, page)
+ {
+ // clear message list first
+ this.contact_list.clear(true);
+ this.show_contentframe(false);
+ this.enable_command('delete', 'compose', false);
+
+ // send request to server
+ var url = (src ? '_source='+urlencode(src) : '') + (page ? (src?'&':'') + '_page='+page : '');
+ this.env.source = src;
+
+ // also send search request to get the right messages
+ if (this.env.search_request)
+ url += '&_search='+this.env.search_request;
+
+ this.set_busy(true, 'loading');
+ this.http_request('list', url, true);
+ };
+
+ // load contact record
+ this.load_contact = function(cid, action, framed)
+ {
+ var add_url = '';
+ var target = window;
+ if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
+ {
+ add_url = '&_framed=1';
+ target = window.frames[this.env.contentframe];
+ this.show_contentframe(true);
+ }
+ else if (framed)
+ return false;
+
+ if (action && (cid || action=='add') && !this.drag_active)
+ {
+ this.set_busy(true);
+ target.location.href = this.env.comm_path+'&_action='+action+'&_source='+urlencode(this.env.source)+'&_cid='+urlencode(cid) + add_url;
+ }
+ return true;
+ };
+
+ // copy a contact to the specified target (group or directory)
+ this.copy_contact = function(cid, to)
+ {
+ if (!cid)
+ cid = this.contact_list.get_selection().join(',');
+
+ if (to != this.env.source && cid && this.env.address_sources[to] && !this.env.address_sources[to].readonly)
+ this.http_post('copy', '_cid='+urlencode(cid)+'&_source='+urlencode(this.env.source)+'&_to='+urlencode(to));
+ };
+
+
+ this.delete_contacts = function()
+ {
+ // exit if no mailbox specified or if selection is empty
+ var selection = this.contact_list.get_selection();
+ if (!(selection.length || this.env.cid) || !confirm(this.get_label('deletecontactconfirm')))
+ return;
+
+ var a_cids = new Array();
+ var qs = '';
+
+ if (this.env.cid)
+ a_cids[a_cids.length] = this.env.cid;
+ else
+ {
+ var id;
+ for (var n=0; n=0)
+ {
+ alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
+ return false;
+ }
+
+ if (this.env.folder && name != '')
+ name = this.env.folder+this.env.delimiter+name;
+
+ this.set_busy(true, 'foldercreating');
+ this.http_post('create-folder', '_name='+urlencode(name), true);
+ }
+ else if (form.elements['_folder_name'])
+ form.elements['_folder_name'].focus();
+ };
+
+ // start renaming the mailbox name.
+ // this will replace the name string with an input field
+ this.rename_folder = function(id)
+ {
+ var temp, row, form;
+
+ // reset current renaming
+ if (temp = this.edit_folder)
+ {
+ this.reset_folder_rename();
+ if (temp == id)
+ return;
+ }
+
+ if (id && this.env.subscriptionrows[id] && (row = document.getElementById(id)))
+ {
+ var reg = new RegExp('.*['+RegExp.escape(this.env.delimiter)+']');
+ this.name_input = document.createElement('INPUT');
+ this.name_input.value = this.env.subscriptionrows[id][0].replace(reg, '');
+ this.name_input.style.width = '100%';
+
+ reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
+ this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, '');
+ this.name_input.onkeypress = function(e){ rcmail.name_input_keypress(e); };
+
+ row.cells[0].replaceChild(this.name_input, row.cells[0].firstChild);
+ this.edit_folder = id;
+ this.name_input.select();
+
+ if (form = this.gui_objects.editform)
+ form.onsubmit = function(){ return false; };
+ }
+ };
+
+ // remove the input field and write the current mailbox name to the table cell
+ this.reset_folder_rename = function()
+ {
+ var cell = this.name_input ? this.name_input.parentNode : null;
+
+ if (cell && this.edit_folder && this.env.subscriptionrows[this.edit_folder])
+ cell.innerHTML = this.env.subscriptionrows[this.edit_folder][1];
+
+ this.edit_folder = null;
+ };
+
+ // handler for keyboard events on the input field
+ this.name_input_keypress = function(e)
+ {
+ var key = rcube_event.get_keycode(e);
+
+ // enter
+ if (key==13)
+ {
+ var newname = this.name_input ? this.name_input.value : null;
+ if (this.edit_folder && newname)
+ {
+ if (newname.indexOf(this.env.delimiter)>=0)
+ {
+ alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
+ return false;
+ }
+
+ if (this.name_input.__parent)
+ newname = this.name_input.__parent + this.env.delimiter + newname;
+
+ this.set_busy(true, 'folderrenaming');
+ this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname), true);
+ }
+ }
+ // escape
+ else if (key==27)
+ this.reset_folder_rename();
+ };
+
+ // delete a specific mailbox with all its messages
+ this.delete_folder = function(id)
+ {
+ var folder = this.env.subscriptionrows[id][0];
+
+ if (this.edit_folder)
+ this.reset_folder_rename();
+
+ if (folder && confirm(this.get_label('deletefolderconfirm')))
+ {
+ this.set_busy(true, 'folderdeleting');
+ this.http_post('delete-folder', '_mboxes='+urlencode(folder), true);
+ this.set_env('folder', null);
+
+ if (this.gui_objects.createfolderhint)
+ this.gui_objects.createfolderhint.innerHTML = '';
+ }
+ };
+
+ // add a new folder to the subscription list by cloning a folder row
+ this.add_folder_row = function(name, display_name, replace, before)
+ {
+ if (!this.gui_objects.subscriptionlist)
+ return false;
+
+ // find not protected folder
+ for (var refid in this.env.subscriptionrows)
+ if (this.env.subscriptionrows[refid]!=null && !this.env.subscriptionrows[refid][2])
+ break;
+
+ var refrow, form;
+ var tbody = this.gui_objects.subscriptionlist.tBodies[0];
+ var id = 'rcmrow'+(tbody.childNodes.length+1);
+ var selection = this.subscription_list.get_single_selection();
+
+ if (replace && replace.id)
+ {
+ id = replace.id;
+ refid = replace.id;
+ }
+
+ if (!id || !(refrow = document.getElementById(refid)))
+ {
+ // Refresh page if we don't have a table row to clone
+ this.goto_url('folders');
+ }
+ else
+ {
+ // clone a table row if there are existing rows
+ var row = this.clone_table_row(refrow);
+ row.id = id;
+
+ if (before && (before = this.get_folder_row_id(before)))
+ tbody.insertBefore(row, document.getElementById(before));
+ else
+ tbody.appendChild(row);
+
+ if (replace)
+ tbody.removeChild(replace);
+ }
+
+ // add to folder/row-ID map
+ this.env.subscriptionrows[row.id] = [name, display_name, 0];
+
+ // set folder name
+ row.cells[0].innerHTML = display_name;
+
+ // set messages count to zero
+ if (!replace)
+ row.cells[1].innerHTML = '*';
+
+ if (!replace && row.cells[2] && row.cells[2].firstChild.tagName=='INPUT')
+ {
+ row.cells[2].firstChild.value = name;
+ row.cells[2].firstChild.checked = true;
+ }
+
+ // add new folder to rename-folder list and clear input field
+ if (!replace && (form = this.gui_objects.editform))
+ {
+ if (form.elements['_folder_oldname'])
+ form.elements['_folder_oldname'].options[form.elements['_folder_oldname'].options.length] = new Option(name,name);
+ if (form.elements['_folder_name'])
+ form.elements['_folder_name'].value = '';
+ }
+
+ this.init_subscription_list();
+ if (selection && document.getElementById('rcmrow'+selection))
+ this.subscription_list.select_row(selection);
+
+ if (document.getElementById(id).scrollIntoView)
+ document.getElementById(id).scrollIntoView();
+ };
+
+ // replace an existing table row with a new folder line
+ this.replace_folder_row = function(oldfolder, newfolder, display_name, before)
+ {
+ var id = this.get_folder_row_id(oldfolder);
+ var row = document.getElementById(id);
+
+ // replace an existing table row (if found)
+ this.add_folder_row(newfolder, display_name, row, before);
+
+ // rename folder in rename-folder dropdown
+ var form, elm;
+ if ((form = this.gui_objects.editform) && (elm = form.elements['_folder_oldname']))
+ {
+ for (var i=0;i this.env.current_page));
+ this.enable_command('lastpage', (this.env.pagecount > this.env.current_page));
+ this.enable_command('previouspage', (this.env.current_page > 1));
+ this.enable_command('firstpage', (this.env.current_page > 1));
+ }
+
+ // set button to a specific state
+ this.set_button = function(command, state)
+ {
+ var a_buttons = this.buttons[command];
+ var button, obj;
+
+ if(!a_buttons || !a_buttons.length)
+ return false;
+
+ for(var n=0; n'+cont+'';
+
+ var _rcube = this;
+ this.gui_objects.message.innerHTML = cont;
+ this.gui_objects.message.style.display = 'block';
+
+ if (type!='loading')
+ this.gui_objects.message.onmousedown = function(){ _rcube.hide_message(); return true; };
+
+ if (!hold)
+ this.message_timer = window.setTimeout(function(){ ref.hide_message(); }, this.message_time);
+ };
+
+ // make a message row disapear
+ this.hide_message = function()
+ {
+ if (this.gui_objects.message)
+ {
+ this.gui_objects.message.style.display = 'none';
+ this.gui_objects.message.onmousedown = null;
+ }
+ };
+
+ // mark a mailbox as selected and set environment variable
+ this.select_folder = function(name, old)
+ {
+ if (this.gui_objects.folderlist)
+ {
+ var current_li, target_li;
+
+ if ((current_li = this.get_folder_li(old)))
+ {
+ this.set_classname(current_li, 'selected', false);
+ this.set_classname(current_li, 'unfocused', false);
+ }
+
+ if ((target_li = this.get_folder_li(name)))
+ {
+ this.set_classname(target_li, 'unfocused', false);
+ this.set_classname(target_li, 'selected', true);
+ }
+ }
+ };
+
+ // helper method to find a folder list item
+ this.get_folder_li = function(name)
+ {
+ if (this.gui_objects.folderlist)
+ {
+ name = String(name).replace(this.identifier_expr, '');
+ return document.getElementById('rcmli'+name);
+ }
+
+ return null;
+ };
+
+ // for reordering column array, Konqueror workaround
+ this.set_message_coltypes = function(coltypes)
+ {
+ this.coltypes = coltypes;
+
+ // set correct list titles
+ var cell, col;
+ var thead = this.gui_objects.messagelist ? this.gui_objects.messagelist.tHead : null;
+ for (var n=0; thead && n' : '';
+ row.appendChild(col);
+
+ // add each submitted col
+ for (var n = 0; n < this.coltypes.length; n++)
+ {
+ var c = this.coltypes[n];
+ col = document.createElement('TD');
+ col.className = String(c).toLowerCase();
+
+ if (c=='flag')
+ {
+ if (flags.flagged && this.env.flaggedicon)
+ col.innerHTML = '
';
+ else if(!flags.flagged && this.env.unflaggedicon)
+ col.innerHTML = '
';
+ }
+ else if (c=='attachment')
+ col.innerHTML = attachment && this.env.attachmenticon ? '
' : ' ';
+ else
+ col.innerHTML = cols[c];
+
+ row.appendChild(col);
+ }
+
+ this.message_list.insert_row(row, attop);
+
+ // remove 'old' row
+ if (attop && this.env.pagesize && this.message_list.rowcount > this.env.pagesize)
+ {
+ var uid = this.message_list.get_last_row();
+ this.message_list.remove_row(uid);
+ this.message_list.clear_selection(uid);
+ }
+ };
+
+ // replace content of row count display
+ this.set_rowcount = function(text)
+ {
+ if (this.gui_objects.countdisplay)
+ this.gui_objects.countdisplay.innerHTML = text;
+
+ // update page navigation buttons
+ this.set_page_buttons();
+ };
+
+ // replace content of mailboxname display
+ this.set_mailboxname = function(content)
+ {
+ if (this.gui_objects.mailboxname && content)
+ this.gui_objects.mailboxname.innerHTML = content;
+ };
+
+ // replace content of quota display
+ this.set_quota = function(content)
+ {
+ if (this.gui_objects.quotadisplay && content)
+ this.gui_objects.quotadisplay.innerHTML = content;
+ };
+
+ // update the mailboxlist
+ this.set_unread_count = function(mbox, count, set_title)
+ {
+ if (!this.gui_objects.mailboxlist)
+ return false;
+
+ this.env.unread_counts[mbox] = count;
+ this.set_unread_count_display(mbox, set_title);
+ }
+
+ // update the mailbox count display
+ this.set_unread_count_display = function(mbox, set_title)
+ {
+ var reg, text_obj, item, mycount, childcount, div;
+ if (item = this.get_folder_li(mbox))
+ {
+ mycount = this.env.unread_counts[mbox] ? this.env.unread_counts[mbox] : 0;
+ text_obj = item.getElementsByTagName('a')[0];
+ reg = /\s+\([0-9]+\)$/i;
+
+ childcount = 0;
+ if ((div = item.getElementsByTagName('div')[0]) &&
+ div.className.match(/collapsed/))
+ {
+ // add children's counters
+ for (var k in this.env.unread_counts)
+ if (k.indexOf(mbox + this.env.delimiter) == 0) {
+ childcount += this.env.unread_counts[k];
+ }
+ }
+
+ if (mycount && text_obj.innerHTML.match(reg))
+ text_obj.innerHTML = text_obj.innerHTML.replace(reg, ' ('+mycount+')');
+ else if (mycount)
+ text_obj.innerHTML += ' ('+mycount+')';
+ else
+ text_obj.innerHTML = text_obj.innerHTML.replace(reg, '');
+
+ // set parent's display
+ reg = new RegExp(RegExp.escape(this.env.delimiter) + '[^' + RegExp.escape(this.env.delimiter) + ']+$');
+ if (mbox.match(reg))
+ this.set_unread_count_display(mbox.replace(reg, ''), false);
+
+ // set the right classes
+ this.set_classname(item, 'unread', (mycount+childcount)>0 ? true : false);
+ }
+
+ // set unread count to window title
+ reg = /^\([0-9]+\)\s+/i;
+ if (set_title && document.title)
+ {
+ var doc_title = String(document.title);
+ var new_title = "";
+
+ if (mycount && doc_title.match(reg))
+ new_title = doc_title.replace(reg, '('+mycount+') ');
+ else if (mycount)
+ new_title = '('+mycount+') '+doc_title;
+ else
+ new_title = doc_title.replace(reg, '');
+
+ this.set_pagetitle(new_title);
+ }
+ };
+
+ // notifies that a new message(s) has hit the mailbox
+ this.new_message_focus = function()
+ {
+ // focus main window
+ if (this.env.framed && window.parent)
+ window.parent.focus();
+ else
+ window.focus();
+ }
+
+ // add row to contacts list
+ this.add_contact_row = function(cid, cols, select)
+ {
+ if (!this.gui_objects.contactslist || !this.gui_objects.contactslist.tBodies[0])
+ return false;
+
+ var tbody = this.gui_objects.contactslist.tBodies[0];
+ var rowcount = tbody.rows.length;
+ var even = rowcount%2;
+
+ var row = document.createElement('TR');
+ row.id = 'rcmrow'+cid;
+ row.className = 'contact '+(even ? 'even' : 'odd');
+
+ if (this.contact_list.in_selection(cid))
+ row.className += ' selected';
+
+ // add each submitted col
+ for (var c in cols)
+ {
+ col = document.createElement('TD');
+ col.className = String(c).toLowerCase();
+ col.innerHTML = cols[c];
+ row.appendChild(col);
+ }
+
+ this.contact_list.insert_row(row);
+ this.enable_command('export', (this.contact_list.rowcount > 0));
+ };
+
+ this.toggle_prefer_html = function(checkbox)
+ {
+ var addrbook_show_images;
+ if (addrbook_show_images = document.getElementById('rcmfd_addrbook_show_images'))
+ addrbook_show_images.disabled = !checkbox.checked;
+ }
+
+ // display fetched raw headers
+ this.set_headers = function(content)
+ {
+ if (this.gui_objects.all_headers_row && this.gui_objects.all_headers_box && content)
+ {
+ var box = this.gui_objects.all_headers_box;
+ box.innerHTML = content;
+ box.style.display = 'block';
+
+ if (this.env.framed && parent.rcmail)
+ parent.rcmail.set_busy(false);
+ else
+ this.set_busy(false);
+ }
+ };
+
+ // display all-headers row and fetch raw message headers
+ this.load_headers = function(elem)
+ {
+ if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box || !this.env.uid)
+ return;
+
+ this.set_classname(elem, 'show-headers', false);
+ this.set_classname(elem, 'hide-headers', true);
+ this.gui_objects.all_headers_row.style.display = bw.ie ? 'block' : 'table-row';
+ elem.onclick = function() { rcmail.hide_headers(elem); }
+
+ // fetch headers only once
+ if (!this.gui_objects.all_headers_box.innerHTML)
+ {
+ this.display_message(this.get_label('loading'), 'loading', true);
+ this.http_post('headers', '_uid='+this.env.uid);
+ }
+ }
+
+ // hide all-headers row
+ this.hide_headers = function(elem)
+ {
+ if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box)
+ return;
+
+ this.set_classname(elem, 'hide-headers', false);
+ this.set_classname(elem, 'show-headers', true);
+ this.gui_objects.all_headers_row.style.display = 'none';
+ elem.onclick = function() { rcmail.load_headers(elem); }
+ }
+
+
+ /********************************************************/
+ /********* html to text conversion functions *********/
+ /********************************************************/
+
+ this.html2plain = function(htmlText, id)
+ {
+ var http_request = new rcube_http_request();
+ var url = this.env.bin_path+'html2text.php';
+ var rcmail = this;
+
+ this.set_busy(true, 'converting');
+ console.log('HTTP POST: '+url);
+
+ http_request.onerror = function(o) { rcmail.http_error(o); };
+ http_request.oncomplete = function(o) { rcmail.set_text_value(o, id); };
+ http_request.POST(url, htmlText, 'application/octet-stream');
+ }
+
+ this.set_text_value = function(httpRequest, id)
+ {
+ this.set_busy(false);
+ document.getElementById(id).value = httpRequest.get_text();
+ console.log(httpRequest.get_text());
+ }
+
+
+ /********************************************************/
+ /********* remote request methods *********/
+ /********************************************************/
+
+ this.redirect = function(url, lock)
+ {
+ if (lock || lock === null)
+ this.set_busy(true);
+
+ if (this.env.framed && window.parent)
+ parent.location.href = url;
+ else
+ location.href = url;
+ };
+
+ this.goto_url = function(action, query, lock)
+ {
+ var querystring = query ? '&'+query : '';
+ this.redirect(this.env.comm_path+'&_action='+action+querystring, lock);
+ };
+
+ this.http_sockets = new Array();
+
+ // find a non-busy socket or create a new one
+ this.get_request_obj = function()
+ {
+ for (var n=0; n execute it
+ if (request_obj.get_text() && (ctype=='text/javascript' || ctype=='application/x-javascript'))
+ eval(request_obj.get_text());
+
+ // process the response data according to the sent action
+ switch (request_obj.__action) {
+ case 'delete':
+ if (this.task == 'addressbook') {
+ var uid = this.contact_list.get_selection();
+ this.enable_command('compose', (uid && this.contact_list.rows[uid]));
+ this.enable_command('delete', 'edit', (uid && this.contact_list.rows[uid] && 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':
+ if (this.env.action == 'show')
+ this.command('list');
+ else if (this.message_list)
+ this.message_list.init();
+ break;
+
+ case 'purge':
+ case 'expunge':
+ if (!this.env.messagecount && this.task == 'mail') {
+ // clear preview pane content
+ if (this.env.contentframe)
+ this.show_contentframe(false);
+ // disable commands useless when mailbox is empty
+ this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource',
+ 'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
+ }
+ break;
+
+ case 'check-recent':
+ case 'getunread':
+ case 'list':
+ if (this.task == 'mail') {
+ if (this.message_list && request_obj.__action == 'list')
+ this.msglist_select(this.message_list);
+ this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0));
+ this.enable_command('purge', this.purge_mailbox_test());
+ }
+ else if (this.task == 'addressbook')
+ this.enable_command('export', (this.contact_list && this.contact_list.rowcount > 0));
+
+ break;
+ }
+
+ request_obj.reset();
+ };
+
+ // handle HTTP request errors
+ this.http_error = function(request_obj)
+ {
+ //alert('Error sending request: '+request_obj.url+' => HTTP '+request_obj.xmlhttp.status);
+ if (request_obj.__lock)
+ this.set_busy(false);
+
+ request_obj.reset();
+ request_obj.__lock = false;
+ this.display_message('Unknown Server Error!', 'error');
+ };
+
+ // use an image to send a keep-alive siganl to the server
+ this.send_keep_alive = function()
+ {
+ var d = new Date();
+ this.http_request('keep-alive', '_t='+d.getTime());
+ };
+
+ // send periodic request to check for recent messages
+ this.check_for_recent = function(setbusy)
+ {
+ if (this.busy)
+ return;
+
+ if (setbusy)
+ this.set_busy(true, 'checkingmail');
+
+ var addurl = '_t=' + (new Date().getTime());
+
+ if (this.gui_objects.messagelist)
+ addurl += '&_list=1';
+ if (this.gui_objects.quotadisplay)
+ addurl += '&_quota=1';
+ if (this.env.search_request)
+ addurl += '&_search=' + this.env.search_request;
+
+ this.http_request('check-recent', addurl, true);
+ };
+
+
+ /********************************************************/
+ /********* helper methods *********/
+ /********************************************************/
+
+ // check if we're in show mode or if we have a unique selection
+ // and return the message uid
+ this.get_single_uid = function()
+ {
+ return this.env.uid ? this.env.uid : (this.message_list ? this.message_list.get_single_selection() : null);
+ };
+
+ // same as above but for contacts
+ 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(obj)
+ {
+ if (typeof(obj.selectionEnd)!='undefined')
+ return obj.selectionEnd;
+ else if (document.selection && document.selection.createRange)
+ {
+ var range = document.selection.createRange();
+ if (range.parentElement()!=obj)
+ return 0;
+
+ var gm = range.duplicate();
+ if (obj.tagName=='TEXTAREA')
+ gm.moveToElementText(obj);
+ else
+ gm.expand('textedit');
+
+ gm.setEndPoint('EndToStart', range);
+ var p = gm.text.length;
+
+ return p<=obj.value.length ? p : -1;
+ }
+ else
+ return obj.value.length;
+ };
+
+ this.set_caret2start = function(obj)
+ {
+ if (obj.createTextRange)
+ {
+ var range = obj.createTextRange();
+ range.collapse(true);
+ range.select();
+ }
+ else if (obj.setSelectionRange)
+ obj.setSelectionRange(0,0);
+
+ obj.focus();
+ };
+
+ // set all fields of a form disabled
+ this.lock_form = function(form, lock)
+ {
+ if (!form || !form.elements)
+ return;
+
+ var type;
+ for (var n=0; n |
- | Charles McNulty |
- +-----------------------------------------------------------------------+
- | Requires: common.js, list.js |
- +-----------------------------------------------------------------------+
-
- $Id: app.js 2203 2008-12-30 15:22:35Z thomasb $
-*/
-
-
-var rcube_webmail_client;
-
-function rcube_webmail()
- {
- this.env = new Object();
- this.labels = new Object();
- this.buttons = new Object();
- this.gui_objects = new Object();
- this.commands = new Object();
- this.onloads = new Array();
-
- // create protected reference to myself
- rcube_webmail_client = this;
- this.ref = 'rcube_webmail_client';
- var ref = this;
-
- // webmail client settings
- this.dblclick_time = 500;
- this.message_time = 3000;
-
- this.identifier_expr = new RegExp('[^0-9a-z\-_]', 'gi');
-
- // mimetypes supported by the browser (default settings)
- this.mimetypes = new Array('text/plain', 'text/html', 'text/xml',
- 'image/jpeg', 'image/gif', 'image/png',
- 'application/x-javascript', 'application/pdf',
- 'application/x-shockwave-flash');
-
- // default environment vars
- this.env.keep_alive = 60; // seconds
- this.env.request_timeout = 180; // seconds
- this.env.draft_autosave = 0; // seconds
- this.env.comm_path = './';
- this.env.bin_path = './bin/';
- this.env.blankpage = 'program/blank.gif';
-
-
- // set environment variable(s)
- this.set_env = function(p, value)
- {
- if (p != null && typeof(p) == 'object' && !value)
- for (var n in p)
- this.env[n] = p[n];
- else
- this.env[p] = value;
- };
-
- // add a localized label to the client environment
- this.add_label = function(key, value)
- {
- this.labels[key] = value;
- };
-
- // add a button to the button list
- this.register_button = function(command, id, type, act, sel, over)
- {
- if (!this.buttons[command])
- this.buttons[command] = new Array();
-
- var button_prop = {id:id, type:type};
- if (act) button_prop.act = act;
- if (sel) button_prop.sel = sel;
- if (over) button_prop.over = over;
-
- this.buttons[command][this.buttons[command].length] = button_prop;
- };
-
- // register a specific gui object
- this.gui_object = function(name, id)
- {
- this.gui_objects[name] = id;
- };
-
- // execute the given script on load
- this.add_onload = function(f)
- {
- this.onloads[this.onloads.length] = f;
- };
-
- // initialize webmail client
- this.init = function()
- {
- var p = this;
- this.task = this.env.task;
-
- // check browser
- if (!bw.dom || !bw.xmlhttp_test())
- {
- this.goto_url('error', '_code=0x199');
- return;
- }
-
- // find all registered gui objects
- for (var n in this.gui_objects)
- this.gui_objects[n] = rcube_find_object(this.gui_objects[n]);
-
- // tell parent window that this frame is loaded
- if (this.env.framed && parent.rcmail && parent.rcmail.set_busy)
- parent.rcmail.set_busy(false);
-
- // enable general commands
- this.enable_command('logout', 'mail', 'addressbook', 'settings', true);
-
- if (this.env.permaurl)
- this.enable_command('permaurl', true);
-
- switch (this.task)
- {
- case 'mail':
- if (this.gui_objects.messagelist)
- {
- this.message_list = new rcube_list_widget(this.gui_objects.messagelist, {multiselect:true, draggable:true, keyboard:true, dblclick_time:this.dblclick_time});
- this.message_list.row_init = function(o){ p.init_message_row(o); };
- this.message_list.addEventListener('dblclick', function(o){ p.msglist_dbl_click(o); });
- this.message_list.addEventListener('keypress', function(o){ p.msglist_keypress(o); });
- this.message_list.addEventListener('select', function(o){ p.msglist_select(o); });
- this.message_list.addEventListener('dragstart', function(o){ p.drag_start(o); });
- this.message_list.addEventListener('dragmove', function(o, e){ p.drag_move(e); });
- this.message_list.addEventListener('dragend', function(o){ p.drag_active = false; });
-
- this.message_list.init();
- this.enable_command('toggle_status', 'toggle_flag', true);
-
- if (this.gui_objects.mailcontframe)
- {
- this.gui_objects.mailcontframe.onmousedown = function(e){ return p.click_on_list(e); };
- document.onmouseup = function(e){ return p.doc_mouse_up(e); };
- }
- else
- this.message_list.focus();
- }
-
- if (this.env.coltypes)
- this.set_message_coltypes(this.env.coltypes);
-
- // enable mail commands
- this.enable_command('list', 'checkmail', 'compose', 'add-contact', 'search', 'reset-search', 'collapse-folder', true);
-
- if (this.env.search_text != null && document.getElementById('quicksearchbox') != null)
- document.getElementById('quicksearchbox').value = this.env.search_text;
-
- if (this.env.action=='show' || this.env.action=='preview')
- {
- this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource', 'print', 'load-attachment', 'load-headers', true);
- if (this.env.next_uid)
- {
- this.enable_command('nextmessage', true);
- this.enable_command('lastmessage', true);
- }
- if (this.env.prev_uid)
- {
- this.enable_command('previousmessage', true);
- this.enable_command('firstmessage', true);
- }
- }
-
- if (this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox)
- this.set_alttext('delete', 'movemessagetotrash');
-
- // make preview/message frame visible
- if (this.env.action == 'preview' && this.env.framed && parent.rcmail)
- {
- this.enable_command('compose', 'add-contact', false);
- parent.rcmail.show_contentframe(true);
- }
-
- if ((this.env.action=='show' || this.env.action=='preview') && this.env.blockedobjects)
- {
- if (this.gui_objects.remoteobjectsmsg)
- this.gui_objects.remoteobjectsmsg.style.display = 'block';
- this.enable_command('load-images', 'always-load', true);
- }
-
- if (this.env.action=='compose')
- {
- this.enable_command('add-attachment', 'send-attachment', 'remove-attachment', 'send', true);
- if (this.env.spellcheck)
- {
- this.env.spellcheck.spelling_state_observer = function(s){ ref.set_spellcheck_state(s); };
- this.set_spellcheck_state('ready');
- if (rcube_find_object('_is_html').value == '1')
- this.display_spellcheck_controls(false);
- }
- if (this.env.drafts_mailbox)
- this.enable_command('savedraft', true);
-
- document.onmouseup = function(e){ return p.doc_mouse_up(e); };
- }
-
- if (this.env.messagecount)
- this.enable_command('select-all', 'select-none', 'expunge', true);
-
- if (this.purge_mailbox_test())
- this.enable_command('purge', true);
-
- this.set_page_buttons();
-
- // init message compose form
- if (this.env.action=='compose')
- this.init_messageform();
-
- // show printing dialog
- if (this.env.action=='print')
- window.print();
-
- // get unread count for each mailbox
- if (this.gui_objects.mailboxlist)
- {
- this.env.unread_counts = {};
- this.gui_objects.folderlist = this.gui_objects.mailboxlist;
- this.http_request('getunread', '');
- }
-
- // ask user to send MDN
- if (this.env.mdn_request && this.env.uid)
- {
- var mdnurl = '_uid='+this.env.uid+'&_mbox='+urlencode(this.env.mailbox);
- if (confirm(this.get_label('mdnrequest')))
- this.http_post('sendmdn', mdnurl);
- else
- this.http_post('mark', mdnurl+'&_flag=mdnsent');
- }
-
- break;
-
-
- case 'addressbook':
- if (this.gui_objects.contactslist)
- {
- this.contact_list = new rcube_list_widget(this.gui_objects.contactslist, {multiselect:true, draggable:true, keyboard:true});
- this.contact_list.addEventListener('keypress', function(o){ p.contactlist_keypress(o); });
- this.contact_list.addEventListener('select', function(o){ p.contactlist_select(o); });
- this.contact_list.addEventListener('dragstart', function(o){ p.drag_start(o); });
- this.contact_list.addEventListener('dragmove', function(o, e){ p.drag_move(e); });
- this.contact_list.addEventListener('dragend', function(o){ p.drag_active = false; });
- this.contact_list.init();
-
- if (this.env.cid)
- this.contact_list.highlight_row(this.env.cid);
-
- if (this.gui_objects.contactslist.parentNode)
- {
- this.gui_objects.contactslist.parentNode.onmousedown = function(e){ return p.click_on_list(e); };
- document.onmouseup = function(e){ return p.doc_mouse_up(e); };
- }
- else
- this.contact_list.focus();
- }
-
- this.set_page_buttons();
-
- if (this.env.address_sources && this.env.address_sources[this.env.source] && !this.env.address_sources[this.env.source].readonly)
- this.enable_command('add', true);
-
- if (this.env.cid)
- this.enable_command('show', 'edit', true);
-
- if ((this.env.action=='add' || this.env.action=='edit') && this.gui_objects.editform)
- this.enable_command('save', true);
- else
- this.enable_command('search', 'reset-search', 'moveto', 'import', true);
-
- if (this.contact_list && this.contact_list.rowcount > 0)
- this.enable_command('export', true);
-
- this.enable_command('list', true);
- break;
-
-
- case 'settings':
- this.enable_command('preferences', 'identities', 'save', 'folders', true);
-
- if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity') {
- this.enable_command('add', this.env.identities_level < 2);
- this.enable_command('delete', 'edit', true);
- }
-
- if (this.env.action=='edit-identity' || this.env.action=='add-identity')
- this.enable_command('save', true);
-
- if (this.env.action=='folders')
- this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', 'delete-folder', true);
-
- if (this.gui_objects.identitieslist)
- {
- this.identity_list = new rcube_list_widget(this.gui_objects.identitieslist, {multiselect:false, draggable:false, keyboard:false});
- this.identity_list.addEventListener('select', function(o){ p.identity_select(o); });
- this.identity_list.init();
- this.identity_list.focus();
-
- if (this.env.iid)
- this.identity_list.highlight_row(this.env.iid);
- }
-
- if (this.gui_objects.subscriptionlist)
- this.init_subscription_list();
-
- break;
-
- case 'login':
- var input_user = rcube_find_object('rcmloginuser');
- var input_pass = rcube_find_object('rcmloginpwd');
- var input_tz = rcube_find_object('rcmlogintz');
-
- if (input_user)
- input_user.onkeyup = function(e){ return rcmail.login_user_keyup(e); };
- if (input_user && input_user.value=='')
- input_user.focus();
- else if (input_pass)
- input_pass.focus();
-
- // detect client timezone
- if (input_tz)
- input_tz.value = new Date().getTimezoneOffset() / -60;
-
- this.enable_command('login', true);
- break;
-
- default:
- break;
- }
-
- // enable basic commands
- this.enable_command('logout', true);
-
- // flag object as complete
- this.loaded = true;
-
- // show message
- if (this.pending_message)
- this.display_message(this.pending_message[0], this.pending_message[1]);
-
- // start keep-alive interval
- this.start_keepalive();
-
- // execute all foreign onload scripts
- for (var i=0; i= 0)
- this.set_env('flagged_col', found+1);
- }
-
- // set eventhandler to flag icon, if icon found
- if (this.env.flagged_col && (row.flagged_icon = row.obj.cells[this.env.flagged_col].childNodes[0])
- && row.flagged_icon.nodeName=='IMG')
- {
- var p = this;
- row.flagged_icon.id = 'flaggedicn_'+row.uid;
- row.flagged_icon._row = row.obj;
- row.flagged_icon.onmousedown = function(e) { p.command('toggle_flag', this); };
- }
- };
-
- // init message compose form: set focus and eventhandlers
- this.init_messageform = function()
- {
- if (!this.gui_objects.messageform)
- return false;
-
- //this.messageform = this.gui_objects.messageform;
- var input_from = rcube_find_object('_from');
- var input_to = rcube_find_object('_to');
- var input_cc = rcube_find_object('_cc');
- var input_bcc = rcube_find_object('_bcc');
- var input_replyto = rcube_find_object('_replyto');
- var input_subject = rcube_find_object('_subject');
- var input_message = rcube_find_object('_message');
- var draftid = rcube_find_object('_draft_saveid');
-
- // init live search events
- if (input_to)
- this.init_address_input_events(input_to);
- if (input_cc)
- this.init_address_input_events(input_cc);
- if (input_bcc)
- this.init_address_input_events(input_bcc);
-
- // add signature according to selected identity
- if (input_from && input_from.type=='select-one' && (!draftid || draftid.value=='')
- // if we have HTML editor, signature is added in callback
- && rcube_find_object('_is_html').value != '1')
- {
- this.change_identity(input_from);
- }
-
- if (input_to && input_to.value=='')
- input_to.focus();
- else if (input_subject && input_subject.value=='')
- input_subject.focus();
- else if (input_message)
- this.set_caret2start(input_message);
-
- // get summary of all field values
- this.compose_field_hash(true);
-
- // start the auto-save timer
- this.auto_save_start();
- };
-
- this.init_address_input_events = function(obj)
- {
- var handler = function(e){ return ref.ksearch_keypress(e,this); };
-
- if (obj.addEventListener)
- obj.addEventListener(bw.safari ? 'keydown' : 'keypress', handler, false);
- else
- obj.onkeydown = handler;
-
- obj.setAttribute('autocomplete', 'off');
- };
-
-
- /*********************************************************/
- /********* client command interface *********/
- /*********************************************************/
-
- // execute a specific command on the web client
- this.command = function(command, props, obj)
- {
- if (obj && obj.blur)
- obj.blur();
-
- if (this.busy)
- return false;
-
- // command not supported or allowed
- if (!this.commands[command])
- {
- // pass command to parent window
- if (this.env.framed && parent.rcmail && parent.rcmail.command)
- parent.rcmail.command(command, props);
-
- return false;
- }
-
- // check input before leaving compose step
- if (this.task=='mail' && this.env.action=='compose' && (command=='list' || command=='mail' || command=='addressbook' || command=='settings'))
- {
- if (this.cmp_hash != this.compose_field_hash() && !confirm(this.get_label('notsentwarning')))
- return false;
- }
-
- // process command
- switch (command)
- {
- case 'login':
- if (this.gui_objects.loginform)
- this.gui_objects.loginform.submit();
- break;
-
- case 'logout':
- this.goto_url('logout', '', true);
- break;
-
- // commands to switch task
- case 'mail':
- case 'addressbook':
- case 'settings':
- this.switch_task(command);
- break;
-
- case 'permaurl':
- if (obj && obj.href && obj.target)
- return true;
- else if (this.env.permaurl)
- parent.location.href = this.env.permaurl;
- break;
-
- // misc list commands
- case 'list':
- if (this.task=='mail')
- {
- if (this.env.search_request<0 || (props != '' && (this.env.search_request && props != this.env.mailbox)))
- this.reset_qsearch();
-
- this.list_mailbox(props);
-
- if (this.env.trash_mailbox)
- this.set_alttext('delete', this.env.mailbox != this.env.trash_mailbox ? 'movemessagetotrash' : 'deletemessage');
- }
- else if (this.task=='addressbook')
- {
- if (this.env.search_request<0 || (this.env.search_request && props != this.env.source))
- this.reset_qsearch();
-
- this.list_contacts(props);
- this.enable_command('add', (this.env.address_sources && !this.env.address_sources[props].readonly));
- }
- break;
-
-
- case 'load-headers':
- this.load_headers(obj);
- break;
-
-
- case 'sort':
- // get the type of sorting
- var a_sort = props.split('_');
- var sort_col = a_sort[0];
- var sort_order = a_sort[1] ? a_sort[1].toUpperCase() : null;
- var header;
-
- // no sort order specified: toggle
- if (sort_order==null)
- {
- if (this.env.sort_col==sort_col)
- sort_order = this.env.sort_order=='ASC' ? 'DESC' : 'ASC';
- else
- sort_order = this.env.sort_order;
- }
-
- if (this.env.sort_col==sort_col && this.env.sort_order==sort_order)
- break;
-
- // set table header class
- if (header = document.getElementById('rcm'+this.env.sort_col))
- this.set_classname(header, 'sorted'+(this.env.sort_order.toUpperCase()), false);
- if (header = document.getElementById('rcm'+sort_col))
- this.set_classname(header, 'sorted'+sort_order, true);
-
- // save new sort properties
- this.env.sort_col = sort_col;
- this.env.sort_order = sort_order;
-
- // reload message list
- this.list_mailbox('', '', sort_col+'_'+sort_order);
- break;
-
- case 'nextpage':
- this.list_page('next');
- break;
-
- case 'lastpage':
- this.list_page('last');
- break;
-
- case 'previouspage':
- this.list_page('prev');
- break;
-
- case 'firstpage':
- this.list_page('first');
- break;
-
- case 'expunge':
- if (this.env.messagecount)
- this.expunge_mailbox(this.env.mailbox);
- break;
-
- case 'purge':
- case 'empty-mailbox':
- if (this.env.messagecount)
- this.purge_mailbox(this.env.mailbox);
- break;
-
-
- // common commands used in multiple tasks
- case 'show':
- if (this.task=='mail')
- {
- var uid = this.get_single_uid();
- if (uid && (!this.env.uid || uid != this.env.uid))
- {
- if (this.env.mailbox == this.env.drafts_mailbox)
- this.goto_url('compose', '_draft_uid='+uid+'&_mbox='+urlencode(this.env.mailbox), true);
- else
- this.show_message(uid);
- }
- }
- else if (this.task=='addressbook')
- {
- var cid = props ? props : this.get_single_cid();
- if (cid && !(this.env.action=='show' && cid==this.env.cid))
- this.load_contact(cid, 'show');
- }
- break;
-
- case 'add':
- if (this.task=='addressbook')
- this.load_contact(0, 'add');
- else if (this.task=='settings')
- {
- this.identity_list.clear_selection();
- this.load_identity(0, 'add-identity');
- }
- break;
-
- case 'edit':
- var cid;
- if (this.task=='addressbook' && (cid = this.get_single_cid()))
- this.load_contact(cid, 'edit');
- else if (this.task=='settings' && props)
- this.load_identity(props, 'edit-identity');
- break;
-
- case 'save-identity':
- case 'save':
- if (this.gui_objects.editform)
- {
- var input_pagesize = rcube_find_object('_pagesize');
- var input_name = rcube_find_object('_name');
- var input_email = rcube_find_object('_email');
-
- // user prefs
- if (input_pagesize && isNaN(parseInt(input_pagesize.value)))
- {
- alert(this.get_label('nopagesizewarning'));
- input_pagesize.focus();
- break;
- }
- // contacts/identities
- else
- {
- if (input_name && input_name.value == '')
- {
- alert(this.get_label('nonamewarning'));
- input_name.focus();
- break;
- }
- else if (input_email && !rcube_check_email(input_email.value))
- {
- alert(this.get_label('noemailwarning'));
- input_email.focus();
- break;
- }
- }
-
- this.gui_objects.editform.submit();
- }
- break;
-
- case 'delete':
- // mail task
- if (this.task=='mail')
- this.delete_messages();
- // addressbook task
- else if (this.task=='addressbook')
- this.delete_contacts();
- // user settings task
- else if (this.task=='settings')
- this.delete_identity();
- break;
-
-
- // mail task commands
- case 'move':
- case 'moveto':
- if (this.task == 'mail')
- this.move_messages(props);
- else if (this.task == 'addressbook' && this.drag_active)
- this.copy_contact(null, props);
- break;
-
- case 'mark':
- if (props)
- this.mark_message(props);
- break;
-
- case 'toggle_status':
- if (props && !props._row)
- break;
-
- var uid;
- var flag = 'read';
-
- if (props._row.uid)
- {
- uid = props._row.uid;
-
- // toggle read/unread
- if (this.message_list.rows[uid].deleted) {
- flag = 'undelete';
- } else if (!this.message_list.rows[uid].unread)
- flag = 'unread';
- }
-
- this.mark_message(flag, uid);
- break;
-
- case 'toggle_flag':
- if (props && !props._row)
- break;
-
- var uid;
- var flag = 'flagged';
-
- if (props._row.uid)
- {
- uid = props._row.uid;
- // toggle flagged/unflagged
- if (this.message_list.rows[uid].flagged)
- flag = 'unflagged';
- }
- this.mark_message(flag, uid);
- break;
-
- case 'always-load':
- if (this.env.uid && this.env.sender) {
- this.add_contact(urlencode(this.env.sender));
- window.setTimeout(function(){ ref.command('load-images'); }, 300);
- break;
- }
-
- case 'load-images':
- if (this.env.uid)
- this.show_message(this.env.uid, true, this.env.action=='preview');
- break;
-
- case 'load-attachment':
- var qstring = '_mbox='+urlencode(this.env.mailbox)+'&_uid='+this.env.uid+'&_part='+props.part;
-
- // open attachment in frame if it's of a supported mimetype
- if (this.env.uid && props.mimetype && find_in_array(props.mimetype, this.mimetypes)>=0)
- {
- if (props.mimetype == 'text/html')
- qstring += '&_safe=1';
- this.attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment');
- if (this.attachment_win)
- {
- window.setTimeout(function(){ ref.attachment_win.focus(); }, 10);
- break;
- }
- }
-
- this.goto_url('get', qstring+'&_download=1', false);
- break;
-
- case 'select-all':
- this.message_list.select_all(props);
- break;
-
- case 'select-none':
- this.message_list.clear_selection();
- break;
-
- case 'nextmessage':
- if (this.env.next_uid)
- this.show_message(this.env.next_uid, false, this.env.action=='preview');
- break;
-
- case 'lastmessage':
- if (this.env.last_uid)
- this.show_message(this.env.last_uid);
- break;
-
- case 'previousmessage':
- if (this.env.prev_uid)
- this.show_message(this.env.prev_uid, false, this.env.action=='preview');
- break;
-
- case 'firstmessage':
- if (this.env.first_uid)
- this.show_message(this.env.first_uid);
- break;
-
- case 'checkmail':
- this.check_for_recent(true);
- break;
-
- case 'compose':
- var url = this.env.comm_path+'&_action=compose';
-
- if (this.task=='mail')
- {
- url += '&_mbox='+urlencode(this.env.mailbox);
-
- if (this.env.mailbox==this.env.drafts_mailbox)
- {
- var uid;
- if (uid = this.get_single_uid())
- url += '&_draft_uid='+uid;
- }
- else if (props)
- url += '&_to='+urlencode(props);
- }
- // modify url if we're in addressbook
- else if (this.task=='addressbook')
- {
- // switch to mail compose step directly
- if (props && props.indexOf('@') > 0)
- {
- url = this.get_task_url('mail', url);
- this.redirect(url + '&_to='+urlencode(props));
- break;
- }
-
- // use contact_id passed as command parameter
- var a_cids = new Array();
- if (props)
- a_cids[a_cids.length] = props;
- // get selected contacts
- else if (this.contact_list)
- {
- var selection = this.contact_list.get_selection();
- for (var n=0; n 0) {
- var add_url = (this.env.source ? '_source='+urlencode(this.env.source)+'&' : '');
- if (this.env.search_request)
- add_url += '_search='+this.env.search_request;
-
- this.goto_url('export', add_url);
- }
- break;
-
- // collapse/expand folder
- case 'collapse-folder':
- if (props)
- this.collapse_folder(props);
- break;
-
- // user settings commands
- case 'preferences':
- this.goto_url('');
- break;
-
- case 'identities':
- this.goto_url('identities');
- break;
-
- case 'delete-identity':
- this.delete_identity();
-
- case 'folders':
- this.goto_url('folders');
- break;
-
- case 'subscribe':
- this.subscribe_folder(props);
- break;
-
- case 'unsubscribe':
- this.unsubscribe_folder(props);
- break;
-
- case 'create-folder':
- this.create_folder(props);
- break;
-
- case 'rename-folder':
- this.rename_folder(props);
- break;
-
- case 'delete-folder':
- this.delete_folder(props);
- break;
-
- }
-
- return obj ? false : true;
- };
-
- // set command enabled or disabled
- this.enable_command = function()
- {
- var args = arguments;
- if(!args.length) return -1;
-
- var command;
- var enable = args[args.length-1];
-
- for(var n=0; n= pos.x2
- || mouse.y < pos.y1 || mouse.y >= pos.y2)
- {
- if (this.env.last_folder_target) {
- this.set_classname(this.get_folder_li(this.env.last_folder_target), 'droptarget', false);
- this.env.last_folder_target = null;
- }
- return;
- }
-
- // over the folders
- for (var k in this.env.folder_coords)
- {
- pos = this.env.folder_coords[k];
- if (this.check_droptarget(k) && ((mouse.x >= pos.x1) && (mouse.x < pos.x2)
- && (mouse.y >= pos.y1) && (mouse.y < pos.y2)))
- {
- this.set_classname(this.get_folder_li(k), 'droptarget', true);
- this.env.last_folder_target = k;
- }
- else
- this.set_classname(this.get_folder_li(k), 'droptarget', false);
- }
- }
- };
-
- this.collapse_folder = function(id)
- {
- var div;
- if ((li = this.get_folder_li(id)) &&
- (div = li.getElementsByTagName("div")[0]) &&
- (div.className.match(/collapsed/) || div.className.match(/expanded/)))
- {
- var ul = li.getElementsByTagName("ul")[0];
- if (div.className.match(/collapsed/))
- {
- ul.style.display = '';
- this.set_classname(div, 'collapsed', false);
- this.set_classname(div, 'expanded', true);
- var reg = new RegExp('&'+urlencode(id)+'&');
- this.set_env('collapsed_folders', this.env.collapsed_folders.replace(reg, ''));
- }
- else
- {
- ul.style.display = 'none';
- this.set_classname(div, 'expanded', false);
- this.set_classname(div, 'collapsed', true);
- this.set_env('collapsed_folders', this.env.collapsed_folders+'&'+urlencode(id)+'&');
-
- // select parent folder if one of its childs is currently selected
- if (this.env.mailbox.indexOf(id + this.env.delimiter) == 0)
- this.command('list', id);
- }
-
- // Work around a bug in IE6 and IE7, see #1485309
- if ((bw.ie6 || bw.ie7) &&
- li.nextSibling &&
- (li.nextSibling.getElementsByTagName("ul").length>0) &&
- li.nextSibling.getElementsByTagName("ul")[0].style &&
- (li.nextSibling.getElementsByTagName("ul")[0].style.display!='none'))
- {
- li.nextSibling.getElementsByTagName("ul")[0].style.display = 'none';
- li.nextSibling.getElementsByTagName("ul")[0].style.display = '';
- }
-
- this.http_post('save-pref', '_name=collapsed_folders&_value='+urlencode(this.env.collapsed_folders));
- this.set_unread_count_display(id, false);
- }
- }
-
- this.click_on_list = function(e)
- {
- if (this.message_list)
- this.message_list.focus();
- else if (this.contact_list)
- this.contact_list.focus();
-
- var mbox_li;
- if (mbox_li = this.get_folder_li())
- this.set_classname(mbox_li, 'unfocused', true);
-
- return rcube_event.get_button(e) == 2 ? true : rcube_event.cancel(e);
- };
-
- this.msglist_select = function(list)
- {
- if (this.preview_timer)
- clearTimeout(this.preview_timer);
-
- var selected = list.selection.length==1;
-
- // Hide certain command buttons when Drafts folder is selected
- if (this.env.mailbox == this.env.drafts_mailbox)
- {
- this.enable_command('reply', 'reply-all', 'forward', false);
- this.enable_command('show', selected);
- this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));
- }
- else
- {
- this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected);
- this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));
- }
-
- // start timer for message preview (wait for double click)
- if (selected && this.env.contentframe && !list.multi_selecting)
- this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, 200);
- else if (this.env.contentframe)
- this.show_contentframe(false);
- };
-
- this.msglist_dbl_click = function(list)
- {
- if (this.preview_timer)
- clearTimeout(this.preview_timer);
-
- var uid = list.get_single_selection();
- if (uid && this.env.mailbox == this.env.drafts_mailbox)
- this.goto_url('compose', '_draft_uid='+uid+'&_mbox='+urlencode(this.env.mailbox), true);
- else if (uid)
- this.show_message(uid, false, false);
- };
-
- this.msglist_keypress = function(list)
- {
- if (list.key_pressed == list.ENTER_KEY)
- this.command('show');
- else if (list.key_pressed == list.DELETE_KEY)
- this.command('delete');
- else if (list.key_pressed == list.BACKSPACE_KEY)
- this.command('delete');
- else
- list.shiftkey = false;
- };
-
- this.msglist_get_preview = function()
- {
- var uid = this.get_single_uid();
- if (uid && this.env.contentframe && !this.drag_active)
- this.show_message(uid, false, true);
- else if (this.env.contentframe)
- this.show_contentframe(false);
- };
-
- this.check_droptarget = function(id)
- {
- if (this.task == 'mail')
- return (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual);
- else if (this.task == 'addressbook')
- return (id != this.env.source && this.env.address_sources[id] && !this.env.address_sources[id].readonly);
- else if (this.task == 'settings')
- return (id != this.env.folder);
- };
-
-
- /*********************************************************/
- /********* (message) list functionality *********/
- /*********************************************************/
-
- // when user doble-clicks on a row
- this.show_message = function(id, safe, preview)
- {
- if (!id) return;
-
- var add_url = '';
- var action = preview ? 'preview': 'show';
- var target = window;
-
- if (preview && this.env.contentframe && window.frames && window.frames[this.env.contentframe])
- {
- target = window.frames[this.env.contentframe];
- add_url = '&_framed=1';
- }
-
- if (safe)
- add_url = '&_safe=1';
-
- // also send search request to get the right messages
- if (this.env.search_request)
- add_url += '&_search='+this.env.search_request;
- var url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox)+add_url;
- if (action == 'preview' && String(target.location.href).indexOf(url) >= 0)
- this.show_contentframe(true);
- else
- {
- this.set_busy(true, 'loading');
- target.location.href = this.env.comm_path+url;
- // mark as read and change mbox unread counter
- if (action == 'preview' && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread)
- {
- this.set_message(id, 'unread', false);
- if (this.env.unread_counts[this.env.mailbox])
- {
- this.env.unread_counts[this.env.mailbox] -= 1;
- this.set_unread_count(this.env.mailbox, this.env.unread_counts[this.env.mailbox], this.env.mailbox == 'INBOX');
- }
- }
- }
- };
-
- this.show_contentframe = function(show)
- {
- var frm;
- if (this.env.contentframe && (frm = rcube_find_object(this.env.contentframe)))
- {
- if (!show && window.frames[this.env.contentframe])
- {
- if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0)
- window.frames[this.env.contentframe].location.href = this.env.blankpage;
- }
- else if (!bw.safari)
- frm.style.display = show ? 'block' : 'none';
- }
-
- if (!show && this.busy)
- this.set_busy(false);
- };
-
- // list a specific page
- this.list_page = function(page)
- {
- if (page=='next')
- page = this.env.current_page+1;
- if (page=='last')
- page = this.env.pagecount;
- if (page=='prev' && this.env.current_page>1)
- page = this.env.current_page-1;
- if (page=='first' && this.env.current_page>1)
- page = 1;
-
- if (page > 0 && page <= this.env.pagecount)
- {
- this.env.current_page = page;
-
- if (this.task=='mail')
- this.list_mailbox(this.env.mailbox, page);
- else if (this.task=='addressbook')
- this.list_contacts(this.env.source, page);
- }
- };
-
- // list messages of a specific mailbox using filter
- this.filter_mailbox = function(filter)
- {
- var search;
- if (this.gui_objects.qsearchbox)
- search = this.gui_objects.qsearchbox.value;
-
- this.message_list.clear();
-
- // reset vars
- this.env.current_page = 1;
- this.set_busy(true, 'searching');
- this.http_request('search', '_filter='+filter
- + (search ? '&_q='+urlencode(search) : '')
- + (this.env.mailbox ? '&_mbox='+urlencode(this.env.mailbox) : ''), true);
- }
-
-
- // list messages of a specific mailbox
- this.list_mailbox = function(mbox, page, sort)
- {
- this.last_selected = 0;
- var add_url = '';
- var target = window;
-
- if (!mbox)
- mbox = this.env.mailbox;
-
- // add sort to url if set
- if (sort)
- add_url += '&_sort=' + sort;
-
- // also send search request to get the right messages
- if (this.env.search_request)
- add_url += '&_search='+this.env.search_request;
-
- // set page=1 if changeing to another mailbox
- if (!page && mbox != this.env.mailbox)
- {
- page = 1;
- this.env.current_page = page;
- if (this.message_list)
- this.message_list.clear_selection();
- this.show_contentframe(false);
- }
-
- if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort))
- add_url += '&_refresh=1';
-
- this.select_folder(mbox, this.env.mailbox);
- this.env.mailbox = mbox;
-
- // load message list remotely
- if (this.gui_objects.messagelist)
- {
- this.list_mailbox_remote(mbox, page, add_url);
- return;
- }
-
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
- {
- target = window.frames[this.env.contentframe];
- add_url += '&_framed=1';
- }
-
- // load message list to target frame/window
- if (mbox)
- {
- this.set_busy(true, 'loading');
- target.location.href = this.env.comm_path+'&_mbox='+urlencode(mbox)+(page ? '&_page='+page : '')+add_url;
- }
- };
-
- // send remote request to load message list
- this.list_mailbox_remote = function(mbox, page, add_url)
- {
- // clear message list first
- this.message_list.clear();
-
- // send request to server
- var url = '_mbox='+urlencode(mbox)+(page ? '&_page='+page : '');
- this.set_busy(true, 'loading');
- this.http_request('list', url+add_url, true);
- };
-
- this.expunge_mailbox = function(mbox)
- {
- var lock = false;
- var add_url = '';
-
- // lock interface if it's the active mailbox
- if (mbox == this.env.mailbox)
- {
- lock = true;
- this.set_busy(true, 'loading');
- add_url = '&_reload=1';
- }
-
- // send request to server
- var url = '_mbox='+urlencode(mbox);
- this.http_post('expunge', url+add_url, lock);
- };
-
- this.purge_mailbox = function(mbox)
- {
- var lock = false;
- var add_url = '';
-
- if (!confirm(this.get_label('purgefolderconfirm')))
- return false;
-
- // lock interface if it's the active mailbox
- if (mbox == this.env.mailbox)
- {
- lock = true;
- this.set_busy(true, 'loading');
- add_url = '&_reload=1';
- }
-
- // send request to server
- var url = '_mbox='+urlencode(mbox);
- this.http_post('purge', url+add_url, lock);
- return true;
- };
-
- // test if purge command is allowed
- 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))));
- };
-
- // set message icon
- this.set_message_icon = function(uid)
- {
- var icn_src;
- var rows = this.message_list.rows;
-
- if (!rows[uid])
- return false;
-
- if (rows[uid].deleted && this.env.deletedicon)
- icn_src = this.env.deletedicon;
- else if (rows[uid].replied && this.env.repliedicon)
- {
- if (rows[uid].forwarded && this.env.forwardedrepliedicon)
- icn_src = this.env.forwardedrepliedicon;
- else
- icn_src = this.env.repliedicon;
- }
- else if (rows[uid].forwarded && this.env.forwardedicon)
- icn_src = this.env.forwardedicon;
- else if (rows[uid].unread && this.env.unreadicon)
- icn_src = this.env.unreadicon;
- else if (this.env.messageicon)
- icn_src = this.env.messageicon;
-
- if (icn_src && rows[uid].icon)
- rows[uid].icon.src = icn_src;
-
- icn_src = '';
-
- if (rows[uid].flagged && this.env.flaggedicon)
- icn_src = this.env.flaggedicon;
- else if (!rows[uid].flagged && this.env.unflaggedicon)
- icn_src = this.env.unflaggedicon;
-
- if (rows[uid].flagged_icon && icn_src)
- rows[uid].flagged_icon.src = icn_src;
- }
-
- // set message status
- this.set_message_status = function(uid, flag, status)
- {
- var rows = this.message_list.rows;
-
- if (!rows[uid]) return false;
-
- if (flag == 'unread')
- rows[uid].unread = status;
- else if(flag == 'deleted')
- rows[uid].deleted = status;
- else if (flag == 'replied')
- rows[uid].replied = status;
- else if (flag == 'forwarded')
- rows[uid].forwarded = status;
- else if (flag == 'flagged')
- rows[uid].flagged = status;
-
- this.env.messages[uid] = rows[uid];
- }
-
- // set message row status, class and icon
- this.set_message = function(uid, flag, status)
- {
- var rows = this.message_list.rows;
-
- if (!rows[uid]) return false;
-
- if (flag)
- this.set_message_status(uid, flag, status);
-
- if (rows[uid].unread && rows[uid].classname.indexOf('unread')<0)
- {
- rows[uid].classname += ' unread';
- this.set_classname(rows[uid].obj, 'unread', true);
- }
- else if (!rows[uid].unread && rows[uid].classname.indexOf('unread')>=0)
- {
- rows[uid].classname = rows[uid].classname.replace(/\s*unread/, '');
- this.set_classname(rows[uid].obj, 'unread', false);
- }
-
- if (rows[uid].deleted && rows[uid].classname.indexOf('deleted')<0)
- {
- rows[uid].classname += ' deleted';
- this.set_classname(rows[uid].obj, 'deleted', true);
- }
- else if (!rows[uid].deleted && rows[uid].classname.indexOf('deleted')>=0)
- {
- rows[uid].classname = rows[uid].classname.replace(/\s*deleted/, '');
- this.set_classname(rows[uid].obj, 'deleted', false);
- }
-
- if (rows[uid].flagged && rows[uid].classname.indexOf('flagged')<0)
- {
- rows[uid].classname += ' flagged';
- this.set_classname(rows[uid].obj, 'flagged', true);
- }
- else if (!rows[uid].flagged && rows[uid].classname.indexOf('flagged')>=0)
- {
- rows[uid].classname = rows[uid].classname.replace(/\s*flagged/, '');
- this.set_classname(rows[uid].obj, 'flagged', false);
- }
-
- this.set_message_icon(uid);
- }
-
- // move selected messages to the specified mailbox
- this.move_messages = function(mbox)
- {
- // exit if current or no mailbox specified or if selection is empty
- if (!mbox || mbox == this.env.mailbox || (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length)))
- return;
-
- var lock = false;
- var add_url = '&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : '');
-
- // show wait message
- if (this.env.action=='show')
- {
- lock = true;
- this.set_busy(true, 'movingmessage');
- }
- else if (!this.env.flag_for_deletion)
- this.show_contentframe(false);
-
- // Hide message command buttons until a message is selected
- this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', false);
-
- this._with_selected_messages('moveto', lock, add_url, (this.env.flag_for_deletion ? false : true));
- };
-
- // delete selected messages from the current mailbox
- this.delete_messages = function()
- {
- var selection = this.message_list ? this.message_list.get_selection() : new Array();
-
- // exit if no mailbox specified or if selection is empty
- if (!this.env.uid && !selection.length)
- return;
-
- // if there is a trash mailbox defined and we're not currently in it:
- if (this.env.trash_mailbox && String(this.env.mailbox).toLowerCase() != String(this.env.trash_mailbox).toLowerCase())
- {
- // if shift was pressed delete it immediately
- if (this.message_list && this.message_list.shiftkey)
- {
- if (confirm(this.get_label('deletemessagesconfirm')))
- this.permanently_remove_messages();
- }
- else
- this.move_messages(this.env.trash_mailbox);
- }
- // if there is a trash mailbox defined but we *are* in it:
- else if (this.env.trash_mailbox && String(this.env.mailbox).toLowerCase() == String(this.env.trash_mailbox).toLowerCase())
- this.permanently_remove_messages();
- // if there isn't a defined trash mailbox and the config is set to flag for deletion
- else if (!this.env.trash_mailbox && this.env.flag_for_deletion)
- {
- this.mark_message('delete');
- if(this.env.action=="show")
- this.command('nextmessage','',this);
- else if (selection.length == 1)
- this.message_list.select_next();
- }
- // if there isn't a defined trash mailbox and the config is set NOT to flag for deletion
- else if (!this.env.trash_mailbox)
- this.permanently_remove_messages();
- };
-
- // delete the selected messages permanently
- this.permanently_remove_messages = function()
- {
- // exit if no mailbox specified or if selection is empty
- if (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length))
- return;
-
- this.show_contentframe(false);
- this._with_selected_messages('delete', false, '&_from='+(this.env.action ? this.env.action : ''), true);
- };
-
- // Send a specifc request with UIDs of all selected messages
- // @private
- this._with_selected_messages = function(action, lock, add_url, remove)
- {
- var a_uids = new Array();
-
- if (this.env.uid)
- a_uids[0] = this.env.uid;
- else
- {
- var selection = this.message_list.get_selection();
- var rows = this.message_list.rows;
- var id;
- for (var n=0; n=0)
- message = message.substring(0, p-1) + message.substring(p+sig.length, message.length);
- }
-
- message = message.replace(/[\r\n]+$/, '');
-
- // add the new signature string
- if (this.env.signatures && this.env.signatures[id])
- {
- sig = this.env.signatures[id]['text'];
- if (this.env.signatures[id]['is_html'])
- {
- sig = this.env.signatures[id]['plain_text'];
- }
- if (sig.indexOf('-- ')!=0)
- sig = '-- \n'+sig;
- message += '\n\n'+sig;
- }
- }
- else
- {
- var editor = tinyMCE.get('compose-body');
-
- if (this.env.signatures)
- {
- // Append the signature as a div within the body
- var sigElem = editor.dom.get('_rc_sig');
- var newsig = '';
- var htmlsig = true;
-
- if (!sigElem)
- {
- // add empty line before signature on IE
- if (bw.ie)
- editor.getBody().appendChild(editor.getDoc().createElement('br'));
-
- sigElem = editor.getDoc().createElement('div');
- sigElem.setAttribute('id', '_rc_sig');
- editor.getBody().appendChild(sigElem);
- }
-
- if (this.env.signatures[id])
- {
- newsig = this.env.signatures[id]['text'];
- htmlsig = this.env.signatures[id]['is_html'];
- }
-
- if (htmlsig)
- sigElem.innerHTML = newsig;
- else
- sigElem.innerHTML = '' + newsig + '
';
- }
- }
-
- if (input_message)
- input_message.value = message;
-
- this.env.identity = id;
- return true;
- };
-
- this.show_attachment_form = function(a)
- {
- if (!this.gui_objects.uploadbox)
- return false;
-
- var elm, list;
- if (elm = this.gui_objects.uploadbox)
- {
- if (a && (list = this.gui_objects.attachmentlist))
- {
- var pos = rcube_get_object_pos(list);
- var left = pos.x;
- var top = pos.y + list.offsetHeight + 10;
-
- elm.style.top = top+'px';
- elm.style.left = left+'px';
- }
-
- elm.style.visibility = a ? 'visible' : 'hidden';
- }
-
- // clear upload form
- try {
- if (!a && this.gui_objects.attachmentform != this.gui_objects.messageform)
- this.gui_objects.attachmentform.reset();
- }
- catch(e){} // ignore errors
-
- return true;
- };
-
- // upload attachment file
- this.upload_file = function(form)
- {
- if (!form)
- return false;
-
- // get file input fields
- var send = false;
- for (var n=0; n';
- document.body.insertAdjacentHTML('BeforeEnd',html);
- }
- else // for standards-compilant browsers
- {
- var frame = document.createElement('IFRAME');
- frame.name = frame_name;
- frame.style.border = 'none';
- frame.style.width = 0;
- frame.style.height = 0;
- frame.style.visibility = 'hidden';
- document.body.appendChild(frame);
- }
-
- form.target = frame_name;
- form.action = this.env.comm_path+'&_action=upload';
- form.setAttribute('enctype', 'multipart/form-data');
- form.submit();
- }
-
- // set reference to the form object
- this.gui_objects.attachmentform = form;
- return true;
- };
-
- // add file name to attachment list
- // called from upload page
- this.add2attachment_list = function(name, content)
- {
- if (!this.gui_objects.attachmentlist)
- return false;
-
- var li = document.createElement('LI');
- li.id = name;
- li.innerHTML = content;
- this.gui_objects.attachmentlist.appendChild(li);
- return true;
- };
-
- this.remove_from_attachment_list = function(name)
- {
- if (!this.gui_objects.attachmentlist)
- return false;
-
- var list = this.gui_objects.attachmentlist.getElementsByTagName("li");
- for (i=0;i/g, '>').replace(/##([^%]+)%%/g, '$1');
- li.onmouseover = function(){ ref.ksearch_select(this); };
- li.onmouseup = function(){ ref.ksearch_click(this) };
- li._rcm_id = a_result_ids[i];
- ul.appendChild(li);
- }
-
- // check if last selected item is still in result list
- if (this.ksearch_selected !== null) {
- p = find_in_array(this.ksearch_selected, a_result_ids);
- if (p >= 0 && ul.childNodes) {
- ul.childNodes[p].setAttribute('id', 'rcmksearchSelected');
- this.set_classname(ul.childNodes[p], 'selected', true);
- }
- else
- this.ksearch_selected = null;
- }
-
- // if no item selected, select the first one
- if (this.ksearch_selected === null) {
- ul.firstChild.setAttribute('id', 'rcmksearchSelected');
- this.set_classname(ul.firstChild, 'selected', true);
- this.ksearch_selected = a_result_ids[0];
- }
-
- // move the results pane right under the input box and make it visible
- var pos = rcube_get_object_pos(this.ksearch_input);
- this.ksearch_pane.move(pos.x, pos.y+this.ksearch_input.offsetHeight);
- this.ksearch_pane.show(1);
- }
- // hide results pane
- else
- this.ksearch_hide();
- };
-
- this.ksearch_click = function(node)
- {
- this.insert_recipient(node._rcm_id);
- this.ksearch_hide();
-
- if (ref.ksearch_input)
- this.ksearch_input.focus();
- };
-
- this.ksearch_blur = function()
- {
- if (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;
-
- if (this.ksearch_pane)
- this.ksearch_pane.show(0);
- };
-
-
- /*********************************************************/
- /********* address book methods *********/
- /*********************************************************/
-
- this.contactlist_keypress = function(list)
- {
- if (list.key_pressed == list.DELETE_KEY)
- this.command('delete');
- };
-
- this.contactlist_select = function(list)
- {
- if (this.preview_timer)
- clearTimeout(this.preview_timer);
-
- var id, frame, ref = this;
- if (id = list.get_single_selection())
- this.preview_timer = window.setTimeout(function(){ ref.load_contact(id, 'show'); }, 200);
- else if (this.env.contentframe)
- this.show_contentframe(false);
-
- this.enable_command('compose', list.selection.length > 0);
- this.enable_command('edit', (id && this.env.address_sources && !this.env.address_sources[this.env.source].readonly) ? true : false);
- this.enable_command('delete', list.selection.length && this.env.address_sources && !this.env.address_sources[this.env.source].readonly);
-
- return false;
- };
-
- this.list_contacts = function(src, page)
- {
- var add_url = '';
- var target = window;
-
- if (!src)
- src = this.env.source;
-
- if (page && this.current_page==page && src == this.env.source)
- return false;
-
- if (src != this.env.source)
- {
- page = 1;
- this.env.current_page = page;
- this.reset_qsearch();
- }
-
- this.select_folder(src, this.env.source);
- this.env.source = src;
-
- // load contacts remotely
- if (this.gui_objects.contactslist)
- {
- this.list_contacts_remote(src, page);
- return;
- }
-
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
- {
- target = window.frames[this.env.contentframe];
- add_url = '&_framed=1';
- }
-
- // also send search request to get the correct listing
- if (this.env.search_request)
- add_url += '&_search='+this.env.search_request;
-
- this.set_busy(true, 'loading');
- target.location.href = this.env.comm_path+(src ? '&_source='+urlencode(src) : '')+(page ? '&_page='+page : '')+add_url;
- };
-
- // send remote request to load contacts list
- this.list_contacts_remote = function(src, page)
- {
- // clear message list first
- this.contact_list.clear(true);
- this.show_contentframe(false);
- this.enable_command('delete', 'compose', false);
-
- // send request to server
- var url = (src ? '_source='+urlencode(src) : '') + (page ? (src?'&':'') + '_page='+page : '');
- this.env.source = src;
-
- // also send search request to get the right messages
- if (this.env.search_request)
- url += '&_search='+this.env.search_request;
-
- this.set_busy(true, 'loading');
- this.http_request('list', url, true);
- };
-
- // load contact record
- this.load_contact = function(cid, action, framed)
- {
- var add_url = '';
- var target = window;
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
- {
- add_url = '&_framed=1';
- target = window.frames[this.env.contentframe];
- this.show_contentframe(true);
- }
- else if (framed)
- return false;
-
- if (action && (cid || action=='add') && !this.drag_active)
- {
- this.set_busy(true);
- target.location.href = this.env.comm_path+'&_action='+action+'&_source='+urlencode(this.env.source)+'&_cid='+urlencode(cid) + add_url;
- }
- return true;
- };
-
- // copy a contact to the specified target (group or directory)
- this.copy_contact = function(cid, to)
- {
- if (!cid)
- cid = this.contact_list.get_selection().join(',');
-
- if (to != this.env.source && cid && this.env.address_sources[to] && !this.env.address_sources[to].readonly)
- this.http_post('copy', '_cid='+urlencode(cid)+'&_source='+urlencode(this.env.source)+'&_to='+urlencode(to));
- };
-
-
- this.delete_contacts = function()
- {
- // exit if no mailbox specified or if selection is empty
- var selection = this.contact_list.get_selection();
- if (!(selection.length || this.env.cid) || !confirm(this.get_label('deletecontactconfirm')))
- return;
-
- var a_cids = new Array();
- var qs = '';
-
- if (this.env.cid)
- a_cids[a_cids.length] = this.env.cid;
- else
- {
- var id;
- for (var n=0; n=0)
- {
- alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
- return false;
- }
-
- if (this.env.folder && name != '')
- name = this.env.folder+this.env.delimiter+name;
-
- this.set_busy(true, 'foldercreating');
- this.http_post('create-folder', '_name='+urlencode(name), true);
- }
- else if (form.elements['_folder_name'])
- form.elements['_folder_name'].focus();
- };
-
- // start renaming the mailbox name.
- // this will replace the name string with an input field
- this.rename_folder = function(id)
- {
- var temp, row, form;
-
- // reset current renaming
- if (temp = this.edit_folder)
- {
- this.reset_folder_rename();
- if (temp == id)
- return;
- }
-
- if (id && this.env.subscriptionrows[id] && (row = document.getElementById(id)))
- {
- var reg = new RegExp('.*['+RegExp.escape(this.env.delimiter)+']');
- this.name_input = document.createElement('INPUT');
- this.name_input.value = this.env.subscriptionrows[id][0].replace(reg, '');
- this.name_input.style.width = '100%';
-
- reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
- this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, '');
- this.name_input.onkeypress = function(e){ rcmail.name_input_keypress(e); };
-
- row.cells[0].replaceChild(this.name_input, row.cells[0].firstChild);
- this.edit_folder = id;
- this.name_input.select();
-
- if (form = this.gui_objects.editform)
- form.onsubmit = function(){ return false; };
- }
- };
-
- // remove the input field and write the current mailbox name to the table cell
- this.reset_folder_rename = function()
- {
- var cell = this.name_input ? this.name_input.parentNode : null;
-
- if (cell && this.edit_folder && this.env.subscriptionrows[this.edit_folder])
- cell.innerHTML = this.env.subscriptionrows[this.edit_folder][1];
-
- this.edit_folder = null;
- };
-
- // handler for keyboard events on the input field
- this.name_input_keypress = function(e)
- {
- var key = rcube_event.get_keycode(e);
-
- // enter
- if (key==13)
- {
- var newname = this.name_input ? this.name_input.value : null;
- if (this.edit_folder && newname)
- {
- if (newname.indexOf(this.env.delimiter)>=0)
- {
- alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
- return false;
- }
-
- if (this.name_input.__parent)
- newname = this.name_input.__parent + this.env.delimiter + newname;
-
- this.set_busy(true, 'folderrenaming');
- this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname), true);
- }
- }
- // escape
- else if (key==27)
- this.reset_folder_rename();
- };
-
- // delete a specific mailbox with all its messages
- this.delete_folder = function(id)
- {
- var folder = this.env.subscriptionrows[id][0];
-
- if (this.edit_folder)
- this.reset_folder_rename();
-
- if (folder && confirm(this.get_label('deletefolderconfirm')))
- {
- this.set_busy(true, 'folderdeleting');
- this.http_post('delete-folder', '_mboxes='+urlencode(folder), true);
- this.set_env('folder', null);
-
- if (this.gui_objects.createfolderhint)
- this.gui_objects.createfolderhint.innerHTML = '';
- }
- };
-
- // add a new folder to the subscription list by cloning a folder row
- this.add_folder_row = function(name, display_name, replace, before)
- {
- if (!this.gui_objects.subscriptionlist)
- return false;
-
- // find not protected folder
- for (var refid in this.env.subscriptionrows)
- if (this.env.subscriptionrows[refid]!=null && !this.env.subscriptionrows[refid][2])
- break;
-
- var refrow, form;
- var tbody = this.gui_objects.subscriptionlist.tBodies[0];
- var id = 'rcmrow'+(tbody.childNodes.length+1);
- var selection = this.subscription_list.get_single_selection();
-
- if (replace && replace.id)
- {
- id = replace.id;
- refid = replace.id;
- }
-
- if (!id || !(refrow = document.getElementById(refid)))
- {
- // Refresh page if we don't have a table row to clone
- this.goto_url('folders');
- }
- else
- {
- // clone a table row if there are existing rows
- var row = this.clone_table_row(refrow);
- row.id = id;
-
- if (before && (before = this.get_folder_row_id(before)))
- tbody.insertBefore(row, document.getElementById(before));
- else
- tbody.appendChild(row);
-
- if (replace)
- tbody.removeChild(replace);
- }
-
- // add to folder/row-ID map
- this.env.subscriptionrows[row.id] = [name, display_name, 0];
-
- // set folder name
- row.cells[0].innerHTML = display_name;
-
- // set messages count to zero
- if (!replace)
- row.cells[1].innerHTML = '*';
-
- if (!replace && row.cells[2] && row.cells[2].firstChild.tagName=='INPUT')
- {
- row.cells[2].firstChild.value = name;
- row.cells[2].firstChild.checked = true;
- }
-
- // add new folder to rename-folder list and clear input field
- if (!replace && (form = this.gui_objects.editform))
- {
- if (form.elements['_folder_oldname'])
- form.elements['_folder_oldname'].options[form.elements['_folder_oldname'].options.length] = new Option(name,name);
- if (form.elements['_folder_name'])
- form.elements['_folder_name'].value = '';
- }
-
- this.init_subscription_list();
- if (selection && document.getElementById('rcmrow'+selection))
- this.subscription_list.select_row(selection);
-
- if (document.getElementById(id).scrollIntoView)
- document.getElementById(id).scrollIntoView();
- };
-
- // replace an existing table row with a new folder line
- this.replace_folder_row = function(oldfolder, newfolder, display_name, before)
- {
- var id = this.get_folder_row_id(oldfolder);
- var row = document.getElementById(id);
-
- // replace an existing table row (if found)
- this.add_folder_row(newfolder, display_name, row, before);
-
- // rename folder in rename-folder dropdown
- var form, elm;
- if ((form = this.gui_objects.editform) && (elm = form.elements['_folder_oldname']))
- {
- for (var i=0;i this.env.current_page));
- this.enable_command('lastpage', (this.env.pagecount > this.env.current_page));
- this.enable_command('previouspage', (this.env.current_page > 1));
- this.enable_command('firstpage', (this.env.current_page > 1));
- }
-
- // set button to a specific state
- this.set_button = function(command, state)
- {
- var a_buttons = this.buttons[command];
- var button, obj;
-
- if(!a_buttons || !a_buttons.length)
- return false;
-
- for(var n=0; n'+cont+'';
-
- var _rcube = this;
- this.gui_objects.message.innerHTML = cont;
- this.gui_objects.message.style.display = 'block';
-
- if (type!='loading')
- this.gui_objects.message.onmousedown = function(){ _rcube.hide_message(); return true; };
-
- if (!hold)
- this.message_timer = window.setTimeout(function(){ ref.hide_message(); }, this.message_time);
- };
-
- // make a message row disapear
- this.hide_message = function()
- {
- if (this.gui_objects.message)
- {
- this.gui_objects.message.style.display = 'none';
- this.gui_objects.message.onmousedown = null;
- }
- };
-
- // mark a mailbox as selected and set environment variable
- this.select_folder = function(name, old)
- {
- if (this.gui_objects.folderlist)
- {
- var current_li, target_li;
-
- if ((current_li = this.get_folder_li(old)))
- {
- this.set_classname(current_li, 'selected', false);
- this.set_classname(current_li, 'unfocused', false);
- }
-
- if ((target_li = this.get_folder_li(name)))
- {
- this.set_classname(target_li, 'unfocused', false);
- this.set_classname(target_li, 'selected', true);
- }
- }
- };
-
- // helper method to find a folder list item
- this.get_folder_li = function(name)
- {
- if (this.gui_objects.folderlist)
- {
- name = String(name).replace(this.identifier_expr, '');
- return document.getElementById('rcmli'+name);
- }
-
- return null;
- };
-
- // for reordering column array, Konqueror workaround
- this.set_message_coltypes = function(coltypes)
- {
- this.coltypes = coltypes;
-
- // set correct list titles
- var cell, col;
- var thead = this.gui_objects.messagelist ? this.gui_objects.messagelist.tHead : null;
- for (var n=0; thead && n' : '';
- row.appendChild(col);
-
- // add each submitted col
- for (var n = 0; n < this.coltypes.length; n++)
- {
- var c = this.coltypes[n];
- col = document.createElement('TD');
- col.className = String(c).toLowerCase();
-
- if (c=='flag')
- {
- if (flags.flagged && this.env.flaggedicon)
- col.innerHTML = '
';
- else if(!flags.flagged && this.env.unflaggedicon)
- col.innerHTML = '
';
- }
- else if (c=='attachment')
- col.innerHTML = attachment && this.env.attachmenticon ? '
' : ' ';
- else
- col.innerHTML = cols[c];
-
- row.appendChild(col);
- }
-
- this.message_list.insert_row(row, attop);
-
- // remove 'old' row
- if (attop && this.env.pagesize && this.message_list.rowcount > this.env.pagesize)
- {
- var uid = this.message_list.get_last_row();
- this.message_list.remove_row(uid);
- this.message_list.clear_selection(uid);
- }
- };
-
- // replace content of row count display
- this.set_rowcount = function(text)
- {
- if (this.gui_objects.countdisplay)
- this.gui_objects.countdisplay.innerHTML = text;
-
- // update page navigation buttons
- this.set_page_buttons();
- };
-
- // replace content of mailboxname display
- this.set_mailboxname = function(content)
- {
- if (this.gui_objects.mailboxname && content)
- this.gui_objects.mailboxname.innerHTML = content;
- };
-
- // replace content of quota display
- this.set_quota = function(content)
- {
- if (this.gui_objects.quotadisplay && content)
- this.gui_objects.quotadisplay.innerHTML = content;
- };
-
- // update the mailboxlist
- this.set_unread_count = function(mbox, count, set_title)
- {
- if (!this.gui_objects.mailboxlist)
- return false;
-
- this.env.unread_counts[mbox] = count;
- this.set_unread_count_display(mbox, set_title);
- }
-
- // update the mailbox count display
- this.set_unread_count_display = function(mbox, set_title)
- {
- var reg, text_obj, item, mycount, childcount, div;
- if (item = this.get_folder_li(mbox))
- {
- mycount = this.env.unread_counts[mbox] ? this.env.unread_counts[mbox] : 0;
- text_obj = item.getElementsByTagName('a')[0];
- reg = /\s+\([0-9]+\)$/i;
-
- childcount = 0;
- if ((div = item.getElementsByTagName('div')[0]) &&
- div.className.match(/collapsed/))
- {
- // add children's counters
- for (var k in this.env.unread_counts)
- if (k.indexOf(mbox + this.env.delimiter) == 0) {
- childcount += this.env.unread_counts[k];
- }
- }
-
- if (mycount && text_obj.innerHTML.match(reg))
- text_obj.innerHTML = text_obj.innerHTML.replace(reg, ' ('+mycount+')');
- else if (mycount)
- text_obj.innerHTML += ' ('+mycount+')';
- else
- text_obj.innerHTML = text_obj.innerHTML.replace(reg, '');
-
- // set parent's display
- reg = new RegExp(RegExp.escape(this.env.delimiter) + '[^' + RegExp.escape(this.env.delimiter) + ']+$');
- if (mbox.match(reg))
- this.set_unread_count_display(mbox.replace(reg, ''), false);
-
- // set the right classes
- this.set_classname(item, 'unread', (mycount+childcount)>0 ? true : false);
- }
-
- // set unread count to window title
- reg = /^\([0-9]+\)\s+/i;
- if (set_title && document.title)
- {
- var doc_title = String(document.title);
- var new_title = "";
-
- if (mycount && doc_title.match(reg))
- new_title = doc_title.replace(reg, '('+mycount+') ');
- else if (mycount)
- new_title = '('+mycount+') '+doc_title;
- else
- new_title = doc_title.replace(reg, '');
-
- this.set_pagetitle(new_title);
- }
- };
-
- // notifies that a new message(s) has hit the mailbox
- this.new_message_focus = function()
- {
- // focus main window
- if (this.env.framed && window.parent)
- window.parent.focus();
- else
- window.focus();
- }
-
- // add row to contacts list
- this.add_contact_row = function(cid, cols, select)
- {
- if (!this.gui_objects.contactslist || !this.gui_objects.contactslist.tBodies[0])
- return false;
-
- var tbody = this.gui_objects.contactslist.tBodies[0];
- var rowcount = tbody.rows.length;
- var even = rowcount%2;
-
- var row = document.createElement('TR');
- row.id = 'rcmrow'+cid;
- row.className = 'contact '+(even ? 'even' : 'odd');
-
- if (this.contact_list.in_selection(cid))
- row.className += ' selected';
-
- // add each submitted col
- for (var c in cols)
- {
- col = document.createElement('TD');
- col.className = String(c).toLowerCase();
- col.innerHTML = cols[c];
- row.appendChild(col);
- }
-
- this.contact_list.insert_row(row);
- this.enable_command('export', (this.contact_list.rowcount > 0));
- };
-
- this.toggle_prefer_html = function(checkbox)
- {
- var addrbook_show_images;
- if (addrbook_show_images = document.getElementById('rcmfd_addrbook_show_images'))
- addrbook_show_images.disabled = !checkbox.checked;
- }
-
- // display fetched raw headers
- this.set_headers = function(content)
- {
- if (this.gui_objects.all_headers_row && this.gui_objects.all_headers_box && content)
- {
- var box = this.gui_objects.all_headers_box;
- box.innerHTML = content;
- box.style.display = 'block';
-
- if (this.env.framed && parent.rcmail)
- parent.rcmail.set_busy(false);
- else
- this.set_busy(false);
- }
- };
-
- // display all-headers row and fetch raw message headers
- this.load_headers = function(elem)
- {
- if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box || !this.env.uid)
- return;
-
- this.set_classname(elem, 'show-headers', false);
- this.set_classname(elem, 'hide-headers', true);
- this.gui_objects.all_headers_row.style.display = bw.ie ? 'block' : 'table-row';
- elem.onclick = function() { rcmail.hide_headers(elem); }
-
- // fetch headers only once
- if (!this.gui_objects.all_headers_box.innerHTML)
- {
- this.display_message(this.get_label('loading'), 'loading', true);
- this.http_post('headers', '_uid='+this.env.uid);
- }
- }
-
- // hide all-headers row
- this.hide_headers = function(elem)
- {
- if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box)
- return;
-
- this.set_classname(elem, 'hide-headers', false);
- this.set_classname(elem, 'show-headers', true);
- this.gui_objects.all_headers_row.style.display = 'none';
- elem.onclick = function() { rcmail.load_headers(elem); }
- }
-
-
- /********************************************************/
- /********* html to text conversion functions *********/
- /********************************************************/
-
- this.html2plain = function(htmlText, id)
- {
- var http_request = new rcube_http_request();
- var url = this.env.bin_path+'html2text.php';
- var rcmail = this;
-
- this.set_busy(true, 'converting');
- //console.log('HTTP POST: '+url);
-
- http_request.onerror = function(o) { rcmail.http_error(o); };
- http_request.oncomplete = function(o) { rcmail.set_text_value(o, id); };
- http_request.POST(url, htmlText, 'application/octet-stream');
- }
-
- this.set_text_value = function(httpRequest, id)
- {
- this.set_busy(false);
- document.getElementById(id).value = httpRequest.get_text();
- //console.log(httpRequest.get_text());
- }
-
-
- /********************************************************/
- /********* remote request methods *********/
- /********************************************************/
-
- this.redirect = function(url, lock)
- {
- if (lock || lock === null)
- this.set_busy(true);
-
- if (this.env.framed && window.parent)
- parent.location.href = url;
- else
- location.href = url;
- };
-
- this.goto_url = function(action, query, lock)
- {
- var querystring = query ? '&'+query : '';
- this.redirect(this.env.comm_path+'&_action='+action+querystring, lock);
- };
-
- this.http_sockets = new Array();
-
- // find a non-busy socket or create a new one
- this.get_request_obj = function()
- {
- for (var n=0; n execute it
- if (request_obj.get_text() && (ctype=='text/javascript' || ctype=='application/x-javascript'))
- eval(request_obj.get_text());
-
- // process the response data according to the sent action
- switch (request_obj.__action) {
- case 'delete':
- if (this.task == 'addressbook') {
- var uid = this.contact_list.get_selection();
- this.enable_command('compose', (uid && this.contact_list.rows[uid]));
- this.enable_command('delete', 'edit', (uid && this.contact_list.rows[uid] && 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':
- if (this.env.action == 'show')
- this.command('list');
- else if (this.message_list)
- this.message_list.init();
- break;
-
- case 'purge':
- case 'expunge':
- if (!this.env.messagecount && this.task == 'mail') {
- // clear preview pane content
- if (this.env.contentframe)
- this.show_contentframe(false);
- // disable commands useless when mailbox is empty
- this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource',
- 'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
- }
- break;
-
- case 'check-recent':
- case 'getunread':
- case 'list':
- if (this.task == 'mail') {
- if (this.message_list && request_obj.__action == 'list')
- this.msglist_select(this.message_list);
- this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0));
- this.enable_command('purge', this.purge_mailbox_test());
- }
- else if (this.task == 'addressbook')
- this.enable_command('export', (this.contact_list && this.contact_list.rowcount > 0));
-
- break;
- }
-
- request_obj.reset();
- };
-
- // handle HTTP request errors
- this.http_error = function(request_obj)
- {
- //alert('Error sending request: '+request_obj.url+' => HTTP '+request_obj.xmlhttp.status);
- if (request_obj.__lock)
- this.set_busy(false);
-
- request_obj.reset();
- request_obj.__lock = false;
- this.display_message('Unknown Server Error!', 'error');
- };
-
- // use an image to send a keep-alive siganl to the server
- this.send_keep_alive = function()
- {
- var d = new Date();
- this.http_request('keep-alive', '_t='+d.getTime());
- };
-
- // send periodic request to check for recent messages
- this.check_for_recent = function(setbusy)
- {
- if (this.busy)
- return;
-
- if (setbusy)
- this.set_busy(true, 'checkingmail');
-
- this.http_request('check-recent', (this.env.search_request ? '_search='+this.env.search_request+'&' : '') + '_t='+(new Date().getTime()), true);
- };
-
-
- /********************************************************/
- /********* helper methods *********/
- /********************************************************/
-
- // check if we're in show mode or if we have a unique selection
- // and return the message uid
- this.get_single_uid = function()
- {
- return this.env.uid ? this.env.uid : (this.message_list ? this.message_list.get_single_selection() : null);
- };
-
- // same as above but for contacts
- 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(obj)
- {
- if (typeof(obj.selectionEnd)!='undefined')
- return obj.selectionEnd;
-
- else if (document.selection && document.selection.createRange)
- {
- var range = document.selection.createRange();
- if (range.parentElement()!=obj)
- return 0;
-
- var gm = range.duplicate();
- if (obj.tagName=='TEXTAREA')
- gm.moveToElementText(obj);
- else
- gm.expand('textedit');
-
- gm.setEndPoint('EndToStart', range);
- var p = gm.text.length;
-
- return p<=obj.value.length ? p : -1;
- }
-
- else
- return obj.value.length;
- };
-
- this.set_caret2start = function(obj)
- {
- if (obj.createTextRange)
- {
- var range = obj.createTextRange();
- range.collapse(true);
- range.select();
- }
- else if (obj.setSelectionRange)
- obj.setSelectionRange(0,0);
-
- obj.focus();
- };
-
- // set all fields of a form disabled
- this.lock_form = function(form, lock)
- {
- if (!form || !form.elements)
- return;
-
- var type;
- for (var n=0; n=0)?true:false;
-this.mac=(this.platform.indexOf("mac")>=0)?true:false;
-this.linux=(this.platform.indexOf("linux")>=0)?true:false;
-this.unix=(this.platform.indexOf("unix")>=0)?true:false;
-this.dom=document.getElementById?true:false;
-this.dom2=(document.addEventListener&&document.removeEventListener);
-this.ie=(document.all)?true:false;
-this.ie4=(this.ie&&!this.dom);
-this.ie5=(this.dom&&this.appver.indexOf("MSIE 5")>0);
-this.ie6=(this.dom&&this.appver.indexOf("MSIE 6")>0);
-this.ie7=(this.dom&&this.appver.indexOf("MSIE 7")>0);
-this.mz=(this.dom&&this.ver>=5);
-this.ns=((this.ver<5&&this.name=="Netscape")||(this.ver>=5&&this.vendor.indexOf("Netscape")>=0));
-this.ns6=(this.ns&&parseInt(this.vendver)==6);
-this.ns7=(this.ns&&parseInt(this.vendver)==7);
-this.safari=(this.agent.toLowerCase().indexOf("safari")>0||this.agent.toLowerCase().indexOf("applewebkit")>0);
-this.konq=(this.agent.toLowerCase().indexOf("konqueror")>0);
-this.opera=(window.opera)?true:false;
-if(this.opera&&window.RegExp){
-this.vendver=(/opera(\s|\/)([0-9\.]+)/i.test(navigator.userAgent))?parseFloat(RegExp.$2):-1;
-}else{
-if(!this.vendver&&this.safari){
-this.vendver=(/(safari|applewebkit)\/([0-9]+)/i.test(this.agent))?parseInt(RegExp.$2):0;
-}else{
-if((!this.vendver&&this.mz)||this.agent.indexOf("Camino")>0){
-this.vendver=(/rv:([0-9\.]+)/.test(this.agent))?parseFloat(RegExp.$1):0;
-}else{
-if(this.ie&&window.RegExp){
-this.vendver=(/msie\s+([0-9\.]+)/i.test(this.agent))?parseFloat(RegExp.$1):0;
-}else{
-if(this.konq&&window.RegExp){
-this.vendver=(/khtml\/([0-9\.]+)/i.test(this.agent))?parseFloat(RegExp.$1):0;
-}
-}
-}
-}
-}
-if(this.safari&&(/;\s+([a-z]{2})-[a-z]{2}\)/i.test(this.agent))){
-this.lang=RegExp.$1;
-}
-this.dhtml=((this.ie4&&this.win)||this.ie5||this.ie6||this.ns4||this.mz);
-this.vml=(this.win&&this.ie&&this.dom&&!this.opera);
-this.pngalpha=(this.mz||(this.opera&&this.vendver>=6)||(this.ie&&this.mac&&this.vendver>=5)||(this.ie&&this.win&&this.vendver>=5.5)||this.safari);
-this.opacity=(this.mz||(this.ie&&this.vendver>=5.5&&!this.opera)||(this.safari&&this.vendver>=100));
-this.cookies=navigator.cookieEnabled;
-this.xmlhttp_test=function(){
-var _1=new Function("try{var o=new ActiveXObject('Microsoft.XMLHTTP');return true;}catch(err){return false;}");
-this.xmlhttp=(window.XMLHttpRequest||(window.ActiveXObject&&_1()))?true:false;
-return this.xmlhttp;
-};
-};
-var rcube_event={get_target:function(e){
-e=e||window.event;
-return e&&e.target?e.target:e.srcElement;
-},get_keycode:function(e){
-e=e||window.event;
-return e&&e.keyCode?e.keyCode:(e&&e.which?e.which:0);
-},get_button:function(e){
-e=e||window.event;
-return e&&(typeof e.button!="undefined")?e.button:(e&&e.which?e.which:0);
-},get_modifier:function(e){
-var _6=0;
-e=e||window.event;
-if(bw.mac&&e){
-_6+=(e.metaKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);
-return _6;
-}
-if(e){
-_6+=(e.ctrlKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);
-return _6;
-}
-},get_mouse_pos:function(e){
-if(!e){
-e=window.event;
-}
-var mX=(e.pageX)?e.pageX:e.clientX;
-var mY=(e.pageY)?e.pageY:e.clientY;
-if(document.body&&document.all){
-mX+=document.body.scrollLeft;
-mY+=document.body.scrollTop;
-}
-if(e._offset){
-mX+=e._offset.x;
-mY+=e._offset.y;
-}
-return {x:mX,y:mY};
-},add_listener:function(p){
-if(!p.object||!p.method){
-return;
-}
-if(!p.element){
-p.element=document;
-}
-if(!p.object._rc_events){
-p.object._rc_events=[];
-}
-var _b=p.event+"*"+p.method;
-if(!p.object._rc_events[_b]){
-p.object._rc_events[_b]=function(e){
-return p.object[p.method](e);
-};
-}
-if(p.element.addEventListener){
-p.element.addEventListener(p.event,p.object._rc_events[_b],false);
-}else{
-if(p.element.attachEvent){
-p.element.detachEvent("on"+p.event,p.object._rc_events[_b]);
-p.element.attachEvent("on"+p.event,p.object._rc_events[_b]);
-}else{
-p.element["on"+p.event]=p.object._rc_events[_b];
-}
-}
-},remove_listener:function(p){
-if(!p.element){
-p.element=document;
-}
-var _e=p.event+"*"+p.method;
-if(p.object&&p.object._rc_events&&p.object._rc_events[_e]){
-if(p.element.removeEventListener){
-p.element.removeEventListener(p.event,p.object._rc_events[_e],false);
-}else{
-if(p.element.detachEvent){
-p.element.detachEvent("on"+p.event,p.object._rc_events[_e]);
-}else{
-p.element["on"+p.event]=null;
-}
-}
-}
-},cancel:function(_f){
-var e=_f?_f:window.event;
-if(e.preventDefault){
-e.preventDefault();
-}
-if(e.stopPropagation){
-e.stopPropagation();
-}
-e.cancelBubble=true;
-e.returnValue=false;
-return false;
-}};
-var rcube_layer_objects=new Array();
-function rcube_layer(id,_12){
-this.name=id;
-this.create=function(arg){
-var l=(arg.x)?arg.x:0;
-var t=(arg.y)?arg.y:0;
-var w=arg.width;
-var h=arg.height;
-var z=arg.zindex;
-var vis=arg.vis;
-var _1a=arg.parent;
-var obj;
-obj=document.createElement("DIV");
-with(obj){
-id=this.name;
-with(style){
-position="absolute";
-visibility=(vis)?(vis==2)?"inherit":"visible":"hidden";
-left=l+"px";
-top=t+"px";
-if(w){
-width=w.toString().match(/\%$/)?w:w+"px";
-}
-if(h){
-height=h.toString().match(/\%$/)?h:h+"px";
-}
-if(z){
-zIndex=z;
-}
-}
-}
-if(_1a){
-_1a.appendChild(obj);
-}else{
-document.body.appendChild(obj);
-}
-this.elm=obj;
-};
-if(_12!=null){
-this.create(_12);
-this.name=this.elm.id;
-}else{
-this.elm=document.getElementById(id);
-}
-if(!this.elm){
-return false;
-}
-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")?true:false;
-this.id=rcube_layer_objects.length;
-this.obj="rcube_layer_objects["+this.id+"]";
-rcube_layer_objects[this.id]=this;
-this.move=function(x,y){
-this.x=x;
-this.y=y;
-this.css.left=Math.round(this.x)+"px";
-this.css.top=Math.round(this.y)+"px";
-};
-this.shift=function(x,y){
-x=Math.round(x*100)/100;
-y=Math.round(y*100)/100;
-this.move(this.x+x,this.y+y);
-};
-this.resize=function(w,h){
-this.css.width=w+"px";
-this.css.height=h+"px";
-this.width=w;
-this.height=h;
-};
-this.clip=function(t,w,h,l){
-this.css.clip="rect("+t+" "+w+" "+h+" "+l+")";
-this.clip_height=h;
-this.clip_width=w;
-};
-this.show=function(a){
-if(a==1){
-this.css.visibility="visible";
-this.visible=true;
-}else{
-if(a==2){
-this.css.visibility="inherit";
-this.visible=true;
-}else{
-this.css.visibility="hidden";
-this.visible=false;
-}
-}
-};
-this.write=function(_27){
-this.elm.innerHTML=_27;
-};
-this.set_bgcolor=function(c){
-if(!c||c=="#"){
-c="transparent";
-}
-this.css.backgroundColor=c;
-};
-this.set_opacity=function(v){
-if(!bw.opacity){
-return;
-}
-var op=v<=1?Math.round(v*100):parseInt(v);
-if(bw.ie){
-this.css.filter="alpha(opacity:"+op+")";
-}else{
-if(bw.safari){
-this.css.opacity=op/100;
-this.css.KhtmlOpacity=op/100;
-}else{
-if(bw.mz){
-this.css.MozOpacity=op/100;
-}
-}
-}
-};
-};
-function rcube_check_email(_2b,_2c){
-if(_2b&&window.RegExp){
-var _2d="[^\\x0d\\x22\\x5c\\x80-\\xff]";
-var _2e="[^\\x0d\\x5b-\\x5d\\x80-\\xff]";
-var _2f="[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+";
-var _30="\\x5c[\\x00-\\x7f]";
-var _31="\\x5b("+_2e+"|"+_30+")*\\x5d";
-var _32="\\x22("+_2d+"|"+_30+")*\\x22";
-var _33="("+_2f+"|"+_31+")";
-var _34="("+_2f+"|"+_32+")";
-var _35=_33+"(\\x2e"+_33+")*";
-var _36=_34+"(\\x2e"+_34+")*";
-var _37=_36+"\\x40"+_35;
-var _38="[,;s\n]";
-var _39=_2c?new RegExp("(^|<|"+_38+")"+_37+"($|>|"+_38+")","i"):new RegExp("^"+_37+"$","i");
-return _39.test(_2b)?true:false;
-}
-return false;
-};
-function find_in_array(){
-var _3a=find_in_array.arguments;
-if(!_3a.length){
-return -1;
-}
-var _3b=typeof (_3a[0])=="object"?_3a[0]:_3a.length>1&&typeof (_3a[1])=="object"?_3a[1]:new Array();
-var _3c=typeof (_3a[0])!="object"?_3a[0]:_3a.length>1&&typeof (_3a[1])!="object"?_3a[1]:"";
-var _3d=_3a.length==3?_3a[2]:false;
-if(!_3b.length){
-return -1;
-}
-for(var i=0;i<_3b.length;i++){
-if(_3d&&_3b[i].toLowerCase()==_3c.toLowerCase()){
-return i;
-}else{
-if(_3b[i]==_3c){
-return i;
-}
-}
-}
-return -1;
-};
-function urlencode(str){
-return window.encodeURIComponent?encodeURIComponent(str):escape(str);
-};
-function rcube_find_object(id,d){
-var n,f,obj,e;
-if(!d){
-d=document;
-}
-if(d.getElementsByName&&(e=d.getElementsByName(id))){
-obj=e[0];
-}
-if(!obj&&d.getElementById){
-obj=d.getElementById(id);
-}
-if(!obj&&d.all){
-obj=d.all[id];
-}
-if(!obj&&d.images.length){
-obj=d.images[id];
-}
-if(!obj&&d.forms.length){
-for(f=0;f=pos.x)&&(_4d.x<(pos.x+obj.offsetWidth))&&(_4d.y>=pos.y)&&(_4d.y<(pos.y+obj.offsetHeight)));
-};
-function get_elements_computed_style(_4f,_50,_51){
-if(arguments.length==2){
-_51=_50;
-}
-var el=_4f;
-if(typeof (_4f)=="string"){
-el=rcube_find_object(_4f);
-}
-if(el&&el.currentStyle){
-return el.currentStyle[_50];
-}else{
-if(el&&document.defaultView&&document.defaultView.getComputedStyle){
-return document.defaultView.getComputedStyle(el,null).getPropertyValue(_51);
-}else{
-return false;
-}
-}
-};
-function setCookie(_53,_54,_55,_56,_57,_58){
-var _59=_53+"="+escape(_54)+(_55?"; expires="+_55.toGMTString():"")+(_56?"; path="+_56:"")+(_57?"; domain="+_57:"")+(_58?"; secure":"");
-document.cookie=_59;
-};
-roundcube_browser.prototype.set_cookie=setCookie;
-function getCookie(_5a){
-var dc=document.cookie;
-var _5c=_5a+"=";
-var _5d=dc.indexOf("; "+_5c);
-if(_5d==-1){
-_5d=dc.indexOf(_5c);
-if(_5d!=0){
-return null;
-}
-}else{
-_5d+=2;
-}
-var end=document.cookie.indexOf(";",_5d);
-if(end==-1){
-end=dc.length;
-}
-return unescape(dc.substring(_5d+_5c.length,end));
-};
-roundcube_browser.prototype.get_cookie=getCookie;
-function rcube_console(){
-this.log=function(msg){
-box=rcube_find_object("console");
-if(box){
-if(msg.charAt(msg.length-1)=="\n"){
-box.value+=msg+"--------------------------------------\n";
-}else{
-box.value+=msg+"\n--------------------------------------\n";
-}
-}
-};
-this.reset=function(){
-box=rcube_find_object("console");
-if(box){
-box.value="";
-}
-};
-};
-var bw=new roundcube_browser();
-if(!window.console){
-console=new rcube_console();
+/*
+ +-----------------------------------------------------------------------+
+ | RoundCube common js library |
+ | |
+ | This file is part of the RoundCube web development suite |
+ | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli |
+ +-----------------------------------------------------------------------+
+
+ $Id: common.js 2150 2008-12-14 19:00:09Z alec $
+*/
+
+// Constants
+var CONTROL_KEY = 1;
+var SHIFT_KEY = 2;
+var CONTROL_SHIFT_KEY = 3;
+
+
+/**
+ * Default browser check class
+ * @construcotr
+ */
+function roundcube_browser()
+ {
+ this.ver = parseFloat(navigator.appVersion);
+ this.appver = navigator.appVersion;
+ this.agent = navigator.userAgent;
+ this.name = navigator.appName;
+ this.vendor = navigator.vendor ? navigator.vendor : '';
+ this.vendver = navigator.vendorSub ? parseFloat(navigator.vendorSub) : 0;
+ this.product = navigator.product ? navigator.product : '';
+ this.platform = String(navigator.platform).toLowerCase();
+ this.lang = (navigator.language) ? navigator.language.substring(0,2) :
+ (navigator.browserLanguage) ? navigator.browserLanguage.substring(0,2) :
+ (navigator.systemLanguage) ? navigator.systemLanguage.substring(0,2) : 'en';
+
+ this.win = (this.platform.indexOf('win')>=0) ? true : false;
+ this.mac = (this.platform.indexOf('mac')>=0) ? true : false;
+ this.linux = (this.platform.indexOf('linux')>=0) ? true : false;
+ this.unix = (this.platform.indexOf('unix')>=0) ? true : false;
+
+ this.dom = document.getElementById ? true : false;
+ this.dom2 = (document.addEventListener && document.removeEventListener);
+
+ this.ie = (document.all) ? true : false;
+ this.ie4 = (this.ie && !this.dom);
+ this.ie5 = (this.dom && this.appver.indexOf('MSIE 5')>0);
+ this.ie6 = (this.dom && this.appver.indexOf('MSIE 6')>0);
+ this.ie7 = (this.dom && this.appver.indexOf('MSIE 7')>0);
+
+ this.mz = (this.dom && this.ver>=5); // (this.dom && this.product=='Gecko')
+ this.ns = ((this.ver<5 && this.name=='Netscape') || (this.ver>=5 && this.vendor.indexOf('Netscape')>=0));
+ this.ns6 = (this.ns && parseInt(this.vendver)==6); // (this.mz && this.ns) ? true : false;
+ this.ns7 = (this.ns && parseInt(this.vendver)==7); // this.agent.indexOf('Netscape/7')>0);
+ this.safari = (this.agent.toLowerCase().indexOf('safari')>0 || this.agent.toLowerCase().indexOf('applewebkit')>0);
+ this.konq = (this.agent.toLowerCase().indexOf('konqueror')>0);
+
+ this.opera = (window.opera) ? true : false;
+
+ if(this.opera && window.RegExp)
+ this.vendver = (/opera(\s|\/)([0-9\.]+)/i.test(navigator.userAgent)) ? parseFloat(RegExp.$2) : -1;
+ else if(!this.vendver && this.safari)
+ this.vendver = (/(safari|applewebkit)\/([0-9]+)/i.test(this.agent)) ? parseInt(RegExp.$2) : 0;
+ else if((!this.vendver && this.mz) || this.agent.indexOf('Camino')>0)
+ this.vendver = (/rv:([0-9\.]+)/.test(this.agent)) ? parseFloat(RegExp.$1) : 0;
+ else if(this.ie && window.RegExp)
+ this.vendver = (/msie\s+([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0;
+ else if(this.konq && window.RegExp)
+ this.vendver = (/khtml\/([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0;
+
+
+ // get real language out of safari's user agent
+ if(this.safari && (/;\s+([a-z]{2})-[a-z]{2}\)/i.test(this.agent)))
+ this.lang = RegExp.$1;
+
+ this.dhtml = ((this.ie4 && this.win) || this.ie5 || this.ie6 || this.ns4 || this.mz);
+ this.vml = (this.win && this.ie && this.dom && !this.opera);
+ this.pngalpha = (this.mz || (this.opera && this.vendver>=6) || (this.ie && this.mac && this.vendver>=5) ||
+ (this.ie && this.win && this.vendver>=5.5) || this.safari);
+ this.opacity = (this.mz || (this.ie && this.vendver>=5.5 && !this.opera) || (this.safari && this.vendver>=100));
+ this.cookies = navigator.cookieEnabled;
+
+ // test for XMLHTTP support
+ this.xmlhttp_test = function()
+ {
+ var activeX_test = new Function("try{var o=new ActiveXObject('Microsoft.XMLHTTP');return true;}catch(err){return false;}");
+ this.xmlhttp = (window.XMLHttpRequest || (window.ActiveXObject && activeX_test())) ? true : false;
+ return this.xmlhttp;
+ }
+ }
+
+
+// static functions for event handling
+var rcube_event = {
+
+/**
+ * returns the event target element
+ */
+get_target: function(e)
+{
+ e = e || window.event;
+ return e && e.target ? e.target : e.srcElement;
+},
+
+/**
+ * returns the event key code
+ */
+get_keycode: function(e)
+{
+ e = e || window.event;
+ return e && e.keyCode ? e.keyCode : (e && e.which ? e.which : 0);
+},
+
+/**
+ * returns the event key code
+ */
+get_button: function(e)
+{
+ e = e || window.event;
+ return e && (typeof e.button != 'undefined') ? e.button : (e && e.which ? e.which : 0);
+},
+
+/**
+ * returns modifier key (constants defined at top of file)
+ */
+get_modifier: function(e)
+{
+ var opcode = 0;
+ e = e || window.event;
+
+ if (bw.mac && e)
+ {
+ opcode += (e.metaKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);
+ return opcode;
+ }
+ if (e)
+ {
+ opcode += (e.ctrlKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);
+ return opcode;
+ }
+},
+
+/**
+ * Return absolute mouse position of an event
+ */
+get_mouse_pos: function(e)
+{
+ if (!e) e = window.event;
+ var mX = (e.pageX) ? e.pageX : e.clientX;
+ var mY = (e.pageY) ? e.pageY : e.clientY;
+
+ if (document.body && document.all)
+ {
+ mX += document.body.scrollLeft;
+ mY += document.body.scrollTop;
+ }
+
+ if (e._offset) {
+ mX += e._offset.x;
+ mY += e._offset.y;
+ }
+
+ return { x:mX, y:mY };
+},
+
+/**
+ * Add an object method as event listener to a certain element
+ */
+add_listener: function(p)
+{
+ if (!p.object || !p.method) // not enough arguments
+ return;
+ if (!p.element)
+ p.element = document;
+
+ if (!p.object._rc_events)
+ p.object._rc_events = [];
+
+ var key = p.event + '*' + p.method;
+ if (!p.object._rc_events[key])
+ p.object._rc_events[key] = function(e){ return p.object[p.method](e); };
+
+ if (p.element.addEventListener)
+ p.element.addEventListener(p.event, p.object._rc_events[key], false);
+ else if (p.element.attachEvent)
+ {
+ // IE allows multiple events with the same function to be applied to the same object
+ // forcibly detach the event, then attach
+ p.element.detachEvent('on'+p.event, p.object._rc_events[key]);
+ p.element.attachEvent('on'+p.event, p.object._rc_events[key]);
+ }
+ else
+ p.element['on'+p.event] = p.object._rc_events[key];
+},
+
+/**
+ * Remove event listener
+ */
+remove_listener: function(p)
+{
+ if (!p.element)
+ p.element = document;
+
+ var key = p.event + '*' + p.method;
+ if (p.object && p.object._rc_events && p.object._rc_events[key]) {
+ if (p.element.removeEventListener)
+ p.element.removeEventListener(p.event, p.object._rc_events[key], false);
+ else if (p.element.detachEvent)
+ p.element.detachEvent('on'+p.event, p.object._rc_events[key]);
+ else
+ p.element['on'+p.event] = null;
+ }
+},
+
+/**
+ * Prevent event propagation and bubbeling
+ */
+cancel: function(evt)
+{
+ var e = evt ? evt : window.event;
+ if (e.preventDefault)
+ e.preventDefault();
+ if (e.stopPropagation)
+ e.stopPropagation();
+
+ e.cancelBubble = true;
+ e.returnValue = false;
+ return false;
}
-RegExp.escape=function(str){
-return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1");
+
};
-if(bw.ie){
-document._getElementById=document.getElementById;
-document.getElementById=function(id){
-var i=0;
-var o=document._getElementById(id);
-if(!o||o.id!=id){
-while((o=document.all[i])&&o.id!=id){
-i++;
-}
+
+
+var rcube_layer_objects = new Array();
+
+
+/**
+ * RoundCube generic layer (floating box) class
+ *
+ * @constructor
+ */
+function rcube_layer(id, attributes)
+ {
+ this.name = id;
+
+ // create a new layer in the current document
+ this.create = function(arg)
+ {
+ var l = (arg.x) ? arg.x : 0;
+ var t = (arg.y) ? arg.y : 0;
+ var w = arg.width;
+ var h = arg.height;
+ var z = arg.zindex;
+ var vis = arg.vis;
+ var parent = arg.parent;
+ var obj;
+
+ obj = document.createElement('DIV');
+
+ with(obj)
+ {
+ id = this.name;
+ with(style)
+ {
+ position = 'absolute';
+ visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden';
+ left = l+'px';
+ top = t+'px';
+ if (w)
+ width = w.toString().match(/\%$/) ? w : w+'px';
+ if (h)
+ height = h.toString().match(/\%$/) ? h : h+'px';
+ if(z) zIndex = z;
+ }
+ }
+
+ if (parent)
+ parent.appendChild(obj);
+ else
+ document.body.appendChild(obj);
+
+ this.elm = obj;
+ };
+
+
+ // create new layer
+ if(attributes!=null)
+ {
+ this.create(attributes);
+ this.name = this.elm.id;
+ }
+ else // just refer to the object
+ this.elm = document.getElementById(id);
+
+
+ if(!this.elm)
+ return false;
+
+
+ // ********* layer object properties *********
+
+ 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') ? true : false;
+
+ this.id = rcube_layer_objects.length;
+ this.obj = 'rcube_layer_objects['+this.id+']';
+ rcube_layer_objects[this.id] = this;
+
+
+ // ********* layer object methods *********
+
+
+ // move the layer to a specific position
+ this.move = function(x, y)
+ {
+ this.x = x;
+ this.y = y;
+ this.css.left = Math.round(this.x)+'px';
+ this.css.top = Math.round(this.y)+'px';
+ }
+
+
+ // move the layer for a specific step
+ this.shift = function(x,y)
+ {
+ x = Math.round(x*100)/100;
+ y = Math.round(y*100)/100;
+ this.move(this.x+x, this.y+y);
+ }
+
+
+ // change the layers width and height
+ this.resize = function(w,h)
+ {
+ this.css.width = w+'px';
+ this.css.height = h+'px';
+ this.width = w;
+ this.height = h;
+ }
+
+
+ // cut the layer (top,width,height,left)
+ this.clip = function(t,w,h,l)
+ {
+ this.css.clip='rect('+t+' '+w+' '+h+' '+l+')';
+ this.clip_height = h;
+ this.clip_width = w;
+ }
+
+
+ // show or hide the layer
+ this.show = function(a)
+ {
+ if(a==1)
+ {
+ this.css.visibility = 'visible';
+ this.visible = true;
+ }
+ else if(a==2)
+ {
+ this.css.visibility = 'inherit';
+ this.visible = true;
+ }
+ else
+ {
+ this.css.visibility = 'hidden';
+ this.visible = false;
+ }
+ }
+
+
+ // write new content into a Layer
+ this.write = function(cont)
+ {
+ this.elm.innerHTML = cont;
+ }
+
+
+ // set the given color to the layer background
+ this.set_bgcolor = function(c)
+ {
+ if(!c || c=='#')
+ c = 'transparent';
+
+ this.css.backgroundColor = c;
+ }
+
+
+ // set the opacity of a layer to the given ammount (in %)
+ this.set_opacity = function(v)
+ {
+ if(!bw.opacity)
+ return;
+
+ var op = v<=1 ? Math.round(v*100) : parseInt(v);
+
+ if(bw.ie)
+ this.css.filter = 'alpha(opacity:'+op+')';
+ else if(bw.safari)
+ {
+ this.css.opacity = op/100;
+ this.css.KhtmlOpacity = op/100;
+ }
+ else if(bw.mz)
+ this.css.MozOpacity = op/100;
+ }
+ }
+
+
+// check if input is a valid email address
+// By Cal Henderson
+// http://code.iamcal.com/php/rfc822/
+function rcube_check_email(input, inline)
+ {
+ if (input && window.RegExp)
+ {
+ var qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
+ var dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
+ var atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
+ var quoted_pair = '\\x5c[\\x00-\\x7f]';
+ var domain_literal = '\\x5b('+dtext+'|'+quoted_pair+')*\\x5d';
+ var quoted_string = '\\x22('+qtext+'|'+quoted_pair+')*\\x22';
+ var sub_domain = '('+atom+'|'+domain_literal+')';
+ var word = '('+atom+'|'+quoted_string+')';
+ var domain = sub_domain+'(\\x2e'+sub_domain+')*';
+ var local_part = word+'(\\x2e'+word+')*';
+ var addr_spec = local_part+'\\x40'+domain;
+ var delim = '[,;\s\n]';
+ var reg1 = inline ? new RegExp('(^|<|'+delim+')'+addr_spec+'($|>|'+delim+')', 'i') : new RegExp('^'+addr_spec+'$', 'i');
+ return reg1.test(input) ? true : false;
+ }
+ return false;
+ }
+
+
+// find a value in a specific array and returns the index
+function find_in_array()
+ {
+ var args = find_in_array.arguments;
+ if(!args.length) return -1;
+
+ var haystack = typeof(args[0])=='object' ? args[0] : args.length>1 && typeof(args[1])=='object' ? args[1] : new Array();
+ var needle = typeof(args[0])!='object' ? args[0] : args.length>1 && typeof(args[1])!='object' ? args[1] : '';
+ var nocase = args.length==3 ? args[2] : false;
+
+ if(!haystack.length) return -1;
+
+ for(var i=0; i= pos.x) && (mouse.x < (pos.x + obj.offsetWidth)) &&
+ (mouse.y >= pos.y) && (mouse.y < (pos.y + obj.offsetHeight)));
}
-function exec_event(_64,_65){
-if(document.createEventObject){
-var evt=document.createEventObject();
-return _64.fireEvent("on"+_65,evt);
-}else{
-var evt=document.createEvent("HTMLEvents");
-evt.initEvent(_65,true,true);
-return !_64.dispatchEvent(evt);
+
+
+/**
+ * Return the currently applied value of a css property
+ *
+ * @param {Object} html_element Node reference
+ * @param {String} css_property Property name to read in Javascript notation (eg. 'textAlign')
+ * @param {String} mozilla_equivalent Equivalent property name in CSS notation (eg. 'text-align')
+ * @return CSS property value
+ * @type String
+ */
+function get_elements_computed_style(html_element, css_property, mozilla_equivalent)
+ {
+ if (arguments.length==2)
+ mozilla_equivalent = css_property;
+
+ var el = html_element;
+ if (typeof(html_element)=='string')
+ el = rcube_find_object(html_element);
+
+ if (el && el.currentStyle)
+ return el.currentStyle[css_property];
+ else if (el && document.defaultView && document.defaultView.getComputedStyle)
+ return document.defaultView.getComputedStyle(el, null).getPropertyValue(mozilla_equivalent);
+ else
+ return false;
+ }
+
+
+// cookie functions by GoogieSpell
+function setCookie(name, value, expires, path, domain, secure)
+ {
+ var curCookie = name + "=" + escape(value) +
+ (expires ? "; expires=" + expires.toGMTString() : "") +
+ (path ? "; path=" + path : "") +
+ (domain ? "; domain=" + domain : "") +
+ (secure ? "; secure" : "");
+ document.cookie = curCookie;
+ }
+
+roundcube_browser.prototype.set_cookie = setCookie;
+
+function getCookie(name)
+ {
+ var dc = document.cookie;
+ var prefix = name + "=";
+ var begin = dc.indexOf("; " + prefix);
+ if (begin == -1)
+ {
+ begin = dc.indexOf(prefix);
+ if (begin != 0) return null;
+ }
+ else
+ begin += 2;
+ var end = document.cookie.indexOf(";", begin);
+ if (end == -1)
+ end = dc.length;
+ return unescape(dc.substring(begin + prefix.length, end));
+ }
+
+roundcube_browser.prototype.get_cookie = getCookie;
+
+
+// tiny replacement for Firebox functionality
+function rcube_console()
+{
+ this.log = function(msg)
+ {
+ box = rcube_find_object('console');
+
+ if (box)
+ if (msg.charAt(msg.length-1)=='\n')
+ box.value += msg+'--------------------------------------\n';
+ else
+ box.value += msg+'\n--------------------------------------\n';
+ };
+
+ this.reset = function()
+ {
+ box = rcube_find_object('console');
+ if (box)
+ box.value = '';
+ };
}
-};
+var bw = new roundcube_browser();
+
+if (!window.console)
+ console = new rcube_console();
+
+
+// Add escape() method to RegExp object
+// http://dev.rubyonrails.org/changeset/7271
+RegExp.escape = function(str)
+ {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+ }
+
+
+// Make getElementById() case-sensitive on IE
+if (bw.ie)
+ {
+ document._getElementById = document.getElementById;
+ document.getElementById = function(id)
+ {
+ var i = 0;
+ var o = document._getElementById(id);
+
+ if (!o || o.id != id)
+ while ((o = document.all[i]) && o.id != id)
+ i++;
+
+ return o;
+ }
+ }
+
+
+// Fire event on specified element
+function exec_event(element,event)
+{
+ if (document.createEventObject) {
+ // dispatch for IE
+ var evt = document.createEventObject();
+ return element.fireEvent('on'+event,evt)
+ }
+ else {
+ // dispatch for firefox + others
+ var evt = document.createEvent("HTMLEvents");
+ evt.initEvent(event, true, true); // event type,bubbling,cancelable
+ return !element.dispatchEvent(evt);
+ }
+}
diff --git a/program/js/common.js.src b/program/js/common.js.src
deleted file mode 100644
index 7610e57..0000000
--- a/program/js/common.js.src
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
- +-----------------------------------------------------------------------+
- | RoundCube common js library |
- | |
- | This file is part of the RoundCube web development suite |
- | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli |
- +-----------------------------------------------------------------------+
-
- $Id: common.js 2150 2008-12-14 19:00:09Z alec $
-*/
-
-// Constants
-var CONTROL_KEY = 1;
-var SHIFT_KEY = 2;
-var CONTROL_SHIFT_KEY = 3;
-
-
-/**
- * Default browser check class
- * @construcotr
- */
-function roundcube_browser()
- {
- this.ver = parseFloat(navigator.appVersion);
- this.appver = navigator.appVersion;
- this.agent = navigator.userAgent;
- this.name = navigator.appName;
- this.vendor = navigator.vendor ? navigator.vendor : '';
- this.vendver = navigator.vendorSub ? parseFloat(navigator.vendorSub) : 0;
- this.product = navigator.product ? navigator.product : '';
- this.platform = String(navigator.platform).toLowerCase();
- this.lang = (navigator.language) ? navigator.language.substring(0,2) :
- (navigator.browserLanguage) ? navigator.browserLanguage.substring(0,2) :
- (navigator.systemLanguage) ? navigator.systemLanguage.substring(0,2) : 'en';
-
- this.win = (this.platform.indexOf('win')>=0) ? true : false;
- this.mac = (this.platform.indexOf('mac')>=0) ? true : false;
- this.linux = (this.platform.indexOf('linux')>=0) ? true : false;
- this.unix = (this.platform.indexOf('unix')>=0) ? true : false;
-
- this.dom = document.getElementById ? true : false;
- this.dom2 = (document.addEventListener && document.removeEventListener);
-
- this.ie = (document.all) ? true : false;
- this.ie4 = (this.ie && !this.dom);
- this.ie5 = (this.dom && this.appver.indexOf('MSIE 5')>0);
- this.ie6 = (this.dom && this.appver.indexOf('MSIE 6')>0);
- this.ie7 = (this.dom && this.appver.indexOf('MSIE 7')>0);
-
- this.mz = (this.dom && this.ver>=5); // (this.dom && this.product=='Gecko')
- this.ns = ((this.ver<5 && this.name=='Netscape') || (this.ver>=5 && this.vendor.indexOf('Netscape')>=0));
- this.ns6 = (this.ns && parseInt(this.vendver)==6); // (this.mz && this.ns) ? true : false;
- this.ns7 = (this.ns && parseInt(this.vendver)==7); // this.agent.indexOf('Netscape/7')>0);
- this.safari = (this.agent.toLowerCase().indexOf('safari')>0 || this.agent.toLowerCase().indexOf('applewebkit')>0);
- this.konq = (this.agent.toLowerCase().indexOf('konqueror')>0);
-
- this.opera = (window.opera) ? true : false;
-
- if(this.opera && window.RegExp)
- this.vendver = (/opera(\s|\/)([0-9\.]+)/i.test(navigator.userAgent)) ? parseFloat(RegExp.$2) : -1;
- else if(!this.vendver && this.safari)
- this.vendver = (/(safari|applewebkit)\/([0-9]+)/i.test(this.agent)) ? parseInt(RegExp.$2) : 0;
- else if((!this.vendver && this.mz) || this.agent.indexOf('Camino')>0)
- this.vendver = (/rv:([0-9\.]+)/.test(this.agent)) ? parseFloat(RegExp.$1) : 0;
- else if(this.ie && window.RegExp)
- this.vendver = (/msie\s+([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0;
- else if(this.konq && window.RegExp)
- this.vendver = (/khtml\/([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0;
-
-
- // get real language out of safari's user agent
- if(this.safari && (/;\s+([a-z]{2})-[a-z]{2}\)/i.test(this.agent)))
- this.lang = RegExp.$1;
-
- this.dhtml = ((this.ie4 && this.win) || this.ie5 || this.ie6 || this.ns4 || this.mz);
- this.vml = (this.win && this.ie && this.dom && !this.opera);
- this.pngalpha = (this.mz || (this.opera && this.vendver>=6) || (this.ie && this.mac && this.vendver>=5) ||
- (this.ie && this.win && this.vendver>=5.5) || this.safari);
- this.opacity = (this.mz || (this.ie && this.vendver>=5.5 && !this.opera) || (this.safari && this.vendver>=100));
- this.cookies = navigator.cookieEnabled;
-
- // test for XMLHTTP support
- this.xmlhttp_test = function()
- {
- var activeX_test = new Function("try{var o=new ActiveXObject('Microsoft.XMLHTTP');return true;}catch(err){return false;}");
- this.xmlhttp = (window.XMLHttpRequest || (window.ActiveXObject && activeX_test())) ? true : false;
- return this.xmlhttp;
- }
- }
-
-
-// static functions for event handling
-var rcube_event = {
-
-/**
- * returns the event target element
- */
-get_target: function(e)
-{
- e = e || window.event;
- return e && e.target ? e.target : e.srcElement;
-},
-
-/**
- * returns the event key code
- */
-get_keycode: function(e)
-{
- e = e || window.event;
- return e && e.keyCode ? e.keyCode : (e && e.which ? e.which : 0);
-},
-
-/**
- * returns the event key code
- */
-get_button: function(e)
-{
- e = e || window.event;
- return e && (typeof e.button != 'undefined') ? e.button : (e && e.which ? e.which : 0);
-},
-
-/**
- * returns modifier key (constants defined at top of file)
- */
-get_modifier: function(e)
-{
- var opcode = 0;
- e = e || window.event;
-
- if (bw.mac && e)
- {
- opcode += (e.metaKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);
- return opcode;
- }
- if (e)
- {
- opcode += (e.ctrlKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);
- return opcode;
- }
-},
-
-/**
- * Return absolute mouse position of an event
- */
-get_mouse_pos: function(e)
-{
- if (!e) e = window.event;
- var mX = (e.pageX) ? e.pageX : e.clientX;
- var mY = (e.pageY) ? e.pageY : e.clientY;
-
- if (document.body && document.all)
- {
- mX += document.body.scrollLeft;
- mY += document.body.scrollTop;
- }
-
- if (e._offset) {
- mX += e._offset.x;
- mY += e._offset.y;
- }
-
- return { x:mX, y:mY };
-},
-
-/**
- * Add an object method as event listener to a certain element
- */
-add_listener: function(p)
-{
- if (!p.object || !p.method) // not enough arguments
- return;
- if (!p.element)
- p.element = document;
-
- if (!p.object._rc_events)
- p.object._rc_events = [];
-
- var key = p.event + '*' + p.method;
- if (!p.object._rc_events[key])
- p.object._rc_events[key] = function(e){ return p.object[p.method](e); };
-
- if (p.element.addEventListener)
- p.element.addEventListener(p.event, p.object._rc_events[key], false);
- else if (p.element.attachEvent)
- {
- // IE allows multiple events with the same function to be applied to the same object
- // forcibly detach the event, then attach
- p.element.detachEvent('on'+p.event, p.object._rc_events[key]);
- p.element.attachEvent('on'+p.event, p.object._rc_events[key]);
- }
- else
- p.element['on'+p.event] = p.object._rc_events[key];
-},
-
-/**
- * Remove event listener
- */
-remove_listener: function(p)
-{
- if (!p.element)
- p.element = document;
-
- var key = p.event + '*' + p.method;
- if (p.object && p.object._rc_events && p.object._rc_events[key]) {
- if (p.element.removeEventListener)
- p.element.removeEventListener(p.event, p.object._rc_events[key], false);
- else if (p.element.detachEvent)
- p.element.detachEvent('on'+p.event, p.object._rc_events[key]);
- else
- p.element['on'+p.event] = null;
- }
-},
-
-/**
- * Prevent event propagation and bubbeling
- */
-cancel: function(evt)
-{
- var e = evt ? evt : window.event;
- if (e.preventDefault)
- e.preventDefault();
- if (e.stopPropagation)
- e.stopPropagation();
-
- e.cancelBubble = true;
- e.returnValue = false;
- return false;
-}
-
-};
-
-
-var rcube_layer_objects = new Array();
-
-
-/**
- * RoundCube generic layer (floating box) class
- *
- * @constructor
- */
-function rcube_layer(id, attributes)
- {
- this.name = id;
-
- // create a new layer in the current document
- this.create = function(arg)
- {
- var l = (arg.x) ? arg.x : 0;
- var t = (arg.y) ? arg.y : 0;
- var w = arg.width;
- var h = arg.height;
- var z = arg.zindex;
- var vis = arg.vis;
- var parent = arg.parent;
- var obj;
-
- obj = document.createElement('DIV');
-
- with(obj)
- {
- id = this.name;
- with(style)
- {
- position = 'absolute';
- visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden';
- left = l+'px';
- top = t+'px';
- if (w)
- width = w.toString().match(/\%$/) ? w : w+'px';
- if (h)
- height = h.toString().match(/\%$/) ? h : h+'px';
- if(z) zIndex = z;
- }
- }
-
- if (parent)
- parent.appendChild(obj);
- else
- document.body.appendChild(obj);
-
- this.elm = obj;
- };
-
-
- // create new layer
- if(attributes!=null)
- {
- this.create(attributes);
- this.name = this.elm.id;
- }
- else // just refer to the object
- this.elm = document.getElementById(id);
-
-
- if(!this.elm)
- return false;
-
-
- // ********* layer object properties *********
-
- 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') ? true : false;
-
- this.id = rcube_layer_objects.length;
- this.obj = 'rcube_layer_objects['+this.id+']';
- rcube_layer_objects[this.id] = this;
-
-
- // ********* layer object methods *********
-
-
- // move the layer to a specific position
- this.move = function(x, y)
- {
- this.x = x;
- this.y = y;
- this.css.left = Math.round(this.x)+'px';
- this.css.top = Math.round(this.y)+'px';
- }
-
-
- // move the layer for a specific step
- this.shift = function(x,y)
- {
- x = Math.round(x*100)/100;
- y = Math.round(y*100)/100;
- this.move(this.x+x, this.y+y);
- }
-
-
- // change the layers width and height
- this.resize = function(w,h)
- {
- this.css.width = w+'px';
- this.css.height = h+'px';
- this.width = w;
- this.height = h;
- }
-
-
- // cut the layer (top,width,height,left)
- this.clip = function(t,w,h,l)
- {
- this.css.clip='rect('+t+' '+w+' '+h+' '+l+')';
- this.clip_height = h;
- this.clip_width = w;
- }
-
-
- // show or hide the layer
- this.show = function(a)
- {
- if(a==1)
- {
- this.css.visibility = 'visible';
- this.visible = true;
- }
- else if(a==2)
- {
- this.css.visibility = 'inherit';
- this.visible = true;
- }
- else
- {
- this.css.visibility = 'hidden';
- this.visible = false;
- }
- }
-
-
- // write new content into a Layer
- this.write = function(cont)
- {
- this.elm.innerHTML = cont;
- }
-
-
- // set the given color to the layer background
- this.set_bgcolor = function(c)
- {
- if(!c || c=='#')
- c = 'transparent';
-
- this.css.backgroundColor = c;
- }
-
-
- // set the opacity of a layer to the given ammount (in %)
- this.set_opacity = function(v)
- {
- if(!bw.opacity)
- return;
-
- var op = v<=1 ? Math.round(v*100) : parseInt(v);
-
- if(bw.ie)
- this.css.filter = 'alpha(opacity:'+op+')';
- else if(bw.safari)
- {
- this.css.opacity = op/100;
- this.css.KhtmlOpacity = op/100;
- }
- else if(bw.mz)
- this.css.MozOpacity = op/100;
- }
- }
-
-
-// check if input is a valid email address
-// By Cal Henderson
-// http://code.iamcal.com/php/rfc822/
-function rcube_check_email(input, inline)
- {
- if (input && window.RegExp)
- {
- var qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
- var dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
- var atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
- var quoted_pair = '\\x5c[\\x00-\\x7f]';
- var domain_literal = '\\x5b('+dtext+'|'+quoted_pair+')*\\x5d';
- var quoted_string = '\\x22('+qtext+'|'+quoted_pair+')*\\x22';
- var sub_domain = '('+atom+'|'+domain_literal+')';
- var word = '('+atom+'|'+quoted_string+')';
- var domain = sub_domain+'(\\x2e'+sub_domain+')*';
- var local_part = word+'(\\x2e'+word+')*';
- var addr_spec = local_part+'\\x40'+domain;
- var delim = '[,;\s\n]';
- var reg1 = inline ? new RegExp('(^|<|'+delim+')'+addr_spec+'($|>|'+delim+')', 'i') : new RegExp('^'+addr_spec+'$', 'i');
- return reg1.test(input) ? true : false;
- }
- return false;
- }
-
-
-// find a value in a specific array and returns the index
-function find_in_array()
- {
- var args = find_in_array.arguments;
- if(!args.length) return -1;
-
- var haystack = typeof(args[0])=='object' ? args[0] : args.length>1 && typeof(args[1])=='object' ? args[1] : new Array();
- var needle = typeof(args[0])!='object' ? args[0] : args.length>1 && typeof(args[1])!='object' ? args[1] : '';
- var nocase = args.length==3 ? args[2] : false;
-
- if(!haystack.length) return -1;
-
- for(var i=0; i= pos.x) && (mouse.x < (pos.x + obj.offsetWidth)) &&
- (mouse.y >= pos.y) && (mouse.y < (pos.y + obj.offsetHeight)));
-}
-
-
-/**
- * Return the currently applied value of a css property
- *
- * @param {Object} html_element Node reference
- * @param {String} css_property Property name to read in Javascript notation (eg. 'textAlign')
- * @param {String} mozilla_equivalent Equivalent property name in CSS notation (eg. 'text-align')
- * @return CSS property value
- * @type String
- */
-function get_elements_computed_style(html_element, css_property, mozilla_equivalent)
- {
- if (arguments.length==2)
- mozilla_equivalent = css_property;
-
- var el = html_element;
- if (typeof(html_element)=='string')
- el = rcube_find_object(html_element);
-
- if (el && el.currentStyle)
- return el.currentStyle[css_property];
- else if (el && document.defaultView && document.defaultView.getComputedStyle)
- return document.defaultView.getComputedStyle(el, null).getPropertyValue(mozilla_equivalent);
- else
- return false;
- }
-
-
-// cookie functions by GoogieSpell
-function setCookie(name, value, expires, path, domain, secure)
- {
- var curCookie = name + "=" + escape(value) +
- (expires ? "; expires=" + expires.toGMTString() : "") +
- (path ? "; path=" + path : "") +
- (domain ? "; domain=" + domain : "") +
- (secure ? "; secure" : "");
- document.cookie = curCookie;
- }
-
-roundcube_browser.prototype.set_cookie = setCookie;
-
-function getCookie(name)
- {
- var dc = document.cookie;
- var prefix = name + "=";
- var begin = dc.indexOf("; " + prefix);
- if (begin == -1)
- {
- begin = dc.indexOf(prefix);
- if (begin != 0) return null;
- }
- else
- begin += 2;
- var end = document.cookie.indexOf(";", begin);
- if (end == -1)
- end = dc.length;
- return unescape(dc.substring(begin + prefix.length, end));
- }
-
-roundcube_browser.prototype.get_cookie = getCookie;
-
-
-// tiny replacement for Firebox functionality
-function rcube_console()
-{
- this.log = function(msg)
- {
- box = rcube_find_object('console');
-
- if (box)
- if (msg.charAt(msg.length-1)=='\n')
- box.value += msg+'--------------------------------------\n';
- else
- box.value += msg+'\n--------------------------------------\n';
- };
-
- this.reset = function()
- {
- box = rcube_find_object('console');
- if (box)
- box.value = '';
- };
-}
-
-var bw = new roundcube_browser();
-
-if (!window.console)
- console = new rcube_console();
-
-
-// Add escape() method to RegExp object
-// http://dev.rubyonrails.org/changeset/7271
-RegExp.escape = function(str)
- {
- return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
- }
-
-
-// Make getElementById() case-sensitive on IE
-if (bw.ie)
- {
- document._getElementById = document.getElementById;
- document.getElementById = function(id)
- {
- var i = 0;
- var o = document._getElementById(id);
-
- if (!o || o.id != id)
- while ((o = document.all[i]) && o.id != id)
- i++;
-
- return o;
- }
- }
-
-
-// Fire event on specified element
-function exec_event(element,event)
-{
- if (document.createEventObject) {
- // dispatch for IE
- var evt = document.createEventObject();
- return element.fireEvent('on'+event,evt)
- }
- else {
- // dispatch for firefox + others
- var evt = document.createEvent("HTMLEvents");
- evt.initEvent(event, true, true); // event type,bubbling,cancelable
- return !element.dispatchEvent(evt);
- }
-}
diff --git a/program/js/editor.js b/program/js/editor.js
index a3f0d34..6b847ba 100644
--- a/program/js/editor.js
+++ b/program/js/editor.js
@@ -28,6 +28,8 @@ function rcmail_editor_init(skin_path, editor_lang, spellcheck, mode)
theme_advanced_buttons1 : 'bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,charmap,hr,link,unlink,code,forecolor',
theme_advanced_buttons2 : ',fontselect,fontsizeselect',
theme_advanced_buttons3 : '',
+ relative_urls : false,
+ remove_script_host : false,
gecko_spellcheck : true
});
else // mail compose
@@ -49,6 +51,8 @@ function rcmail_editor_init(skin_path, editor_lang, spellcheck, mode)
external_image_list_url : 'program/js/editor_images.js',
spellchecker_languages : (rcmail.env.spellcheck_langs ? rcmail.env.spellcheck_langs : 'Dansk=da,Deutsch=de,+English=en,Espanol=es,Francais=fr,Italiano=it,Nederlands=nl,Polski=pl,Portugues=pt,Suomi=fi,Svenska=sv'),
gecko_spellcheck : true,
+ relative_urls : false,
+ remove_script_host : false ,
rc_client: rcube_webmail_client,
oninit : 'rcmail_editor_callback'
});
@@ -70,10 +74,9 @@ function rcmail_toggle_editor(ishtml, textAreaId, flagElement)
if (ishtml)
{
- var existingPlainText = composeElement.value;
- var htmlText = "" + existingPlainText + "
";
-
rcmail.display_spellcheck_controls(false);
+ var htmlText = "" + composeElement.value + "
";
+
composeElement.value = htmlText;
tinyMCE.execCommand('mceAddControl', true, textAreaId);
if (flagElement && (flag = rcube_find_object(flagElement)))
diff --git a/program/js/googiespell.js b/program/js/googiespell.js
index eb103e7..8b9d1cc 100644
--- a/program/js/googiespell.js
+++ b/program/js/googiespell.js
@@ -1,983 +1,1308 @@
-var AJS={getElement:function(id){
-if(typeof (id)=="string"){
-return document.getElementById(id);
-}else{
-return id;
-}
-},getElements:function(){
-var _2=new Array();
-for(var i=0;i=2){
-for(var i=1;i= 2) {
+ for(var i=1; i < arguments.length; i++) {
+ var n = arguments[i];
+ if(typeof(n) == "string")
+ n = document.createTextNode(n);
+ if(this.isDefined(n))
+ node.appendChild(n);
+ }
+ }
+ return node;
+ },
+
+ /**
+ * Replaces a nodes children with another node(s)
+ */
+ replaceChildNodes: function(node/*, nodes...*/) {
+ var child;
+ while ((child = node.firstChild)) {
+ node.removeChild(child);
+ }
+ if (arguments.length < 2) {
+ return node;
+ } else {
+ return this.appendChildNodes.apply(this, arguments);
+ }
+ },
+
+ /**
+ * Insert a node after another node
+ */
+ insertAfter: function(node, referenceNode) {
+ referenceNode.parentNode.insertBefore(node, referenceNode.nextSibling);
+ },
+
+ /**
+ * Insert a node before another node
+ */
+ insertBefore: function(node, referenceNode) {
+ referenceNode.parentNode.insertBefore(node, referenceNode);
+ },
+
+ /**
+ * Shows the element
+ */
+ showElement: function(elm) {
+ elm.style.display = '';
+ },
+
+ /**
+ * Hides the element
+ */
+ hideElement: function(elm) {
+ elm.style.display = 'none';
+ },
+
+ isElementHidden: function(elm) {
+ return elm.style.visibility == "hidden";
+ },
+
+ /**
+ * Swaps one element with another. To delete use swapDOM(elm, null)
+ */
+ swapDOM: function(dest, src) {
+ dest = this.getElement(dest);
+ var parent = dest.parentNode;
+ if (src) {
+ src = this.getElement(src);
+ parent.replaceChild(src, dest);
+ } else {
+ parent.removeChild(dest);
+ }
+ return src;
+ },
+
+ /**
+ * Removes an element from the world
+ */
+ removeElement: function(elm) {
+ this.swapDOM(elm, null);
+ },
+
+ /**
+ * @returns Is an object a dictionary?
+ */
+ isDict: function(o) {
+ var str_repr = String(o);
+ return str_repr.indexOf(" Object") != -1;
+ },
+
+ /**
+ * Creates a DOM element
+ * @param {String} name The elements DOM name
+ * @param {Dict} attrs Attributes sent to the function
+ */
+ createDOM: function(name, attrs) {
+ var i=0;
+ elm = document.createElement(name);
+
+ if(this.isDict(attrs[i])) {
+ for(k in attrs[0]) {
+ if(k == "style")
+ elm.style.cssText = attrs[0][k];
+ else if(k == "class")
+ elm.className = attrs[0][k];
+ else
+ elm.setAttribute(k, attrs[0][k]);
+ }
+ i++;
+ }
+
+ if(attrs[0] == null)
+ i = 1;
+
+ for(i; i < attrs.length; i++) {
+ var n = attrs[i];
+ if(this.isDefined(n)) {
+ if(typeof(n) == "string")
+ n = document.createTextNode(n);
+ elm.appendChild(n);
+ }
+ }
+ return elm;
+ },
+
+ UL: function() { return this.createDOM.apply(this, ["ul", arguments]); },
+ LI: function() { return this.createDOM.apply(this, ["li", arguments]); },
+ TD: function() { return this.createDOM.apply(this, ["td", arguments]); },
+ TR: function() { return this.createDOM.apply(this, ["tr", arguments]); },
+ TH: function() { return this.createDOM.apply(this, ["th", arguments]); },
+ TBODY: function() { return this.createDOM.apply(this, ["tbody", arguments]); },
+ TABLE: function() { return this.createDOM.apply(this, ["table", arguments]); },
+ INPUT: function() { return this.createDOM.apply(this, ["input", arguments]); },
+ SPAN: function() { return this.createDOM.apply(this, ["span", arguments]); },
+ B: function() { return this.createDOM.apply(this, ["b", arguments]); },
+ A: function() { return this.createDOM.apply(this, ["a", arguments]); },
+ DIV: function() { return this.createDOM.apply(this, ["div", arguments]); },
+ IMG: function() { return this.createDOM.apply(this, ["img", arguments]); },
+ BUTTON: function() { return this.createDOM.apply(this, ["button", arguments]); },
+ H1: function() { return this.createDOM.apply(this, ["h1", arguments]); },
+ H2: function() { return this.createDOM.apply(this, ["h2", arguments]); },
+ H3: function() { return this.createDOM.apply(this, ["h3", arguments]); },
+ BR: function() { return this.createDOM.apply(this, ["br", arguments]); },
+ TEXTAREA: function() { return this.createDOM.apply(this, ["textarea", arguments]); },
+ FORM: function() { return this.createDOM.apply(this, ["form", arguments]); },
+ P: function() { return this.createDOM.apply(this, ["p", arguments]); },
+ SELECT: function() { return this.createDOM.apply(this, ["select", arguments]); },
+ OPTION: function() { return this.createDOM.apply(this, ["option", arguments]); },
+ TN: function(text) { return document.createTextNode(text); },
+ IFRAME: function() { return this.createDOM.apply(this, ["iframe", arguments]); },
+ SCRIPT: function() { return this.createDOM.apply(this, ["script", arguments]); },
+
+////
+// Ajax functions
+////
+ /**
+ * @returns A new XMLHttpRequest object
+ */
+ getXMLHttpRequest: function() {
+ var try_these = [
+ function () { return new XMLHttpRequest(); },
+ function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
+ function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
+ function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
+ function () { throw "Browser does not support XMLHttpRequest"; }
+ ];
+ for (var i = 0; i < try_these.length; i++) {
+ var func = try_these[i];
+ try {
+ return func();
+ } catch (e) {
+ }
+ }
+ },
+
+ /**
+ * Use this function to do a simple HTTP Request
+ */
+ doSimpleXMLHttpRequest: function(url) {
+ var req = this.getXMLHttpRequest();
+ req.open("GET", url, true);
+ return this.sendXMLHttpRequest(req);
+ },
+
+ getRequest: function(url, data) {
+ var req = this.getXMLHttpRequest();
+ req.open("POST", url, true);
+ req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ return this.sendXMLHttpRequest(req);
+ },
+
+ /**
+ * Send a XMLHttpRequest
+ */
+ sendXMLHttpRequest: function(req, data) {
+ var d = new AJSDeferred(req);
+
+ var onreadystatechange = function () {
+ if (req.readyState == 4) {
+ try {
+ var status = req.status;
+ }
+ catch(e) {};
+ if(status == 200 || status == 304 || req.responseText == null) {
+ d.callback(req, data);
+ }
+ else {
+ d.errback();
+ }
+ }
+ }
+ req.onreadystatechange = onreadystatechange;
+ return d;
+ },
+
+ /**
+ * Represent an object as a string
+ */
+ reprString: function(o) {
+ return ('"' + o.replace(/(["\\])/g, '\\$1') + '"'
+ ).replace(/[\f]/g, "\\f"
+ ).replace(/[\b]/g, "\\b"
+ ).replace(/[\n]/g, "\\n"
+ ).replace(/[\t]/g, "\\t"
+ ).replace(/[\r]/g, "\\r");
+ },
+
+ /**
+ * Serialize an object to JSON notation
+ */
+ serializeJSON: function(o) {
+ var objtype = typeof(o);
+ if (objtype == "undefined") {
+ return "undefined";
+ } else if (objtype == "number" || objtype == "boolean") {
+ return o + "";
+ } else if (o === null) {
+ return "null";
+ }
+ if (objtype == "string") {
+ return this.reprString(o);
+ }
+ var me = arguments.callee;
+ var newObj;
+ if (typeof(o.__json__) == "function") {
+ newObj = o.__json__();
+ if (o !== newObj) {
+ return me(newObj);
+ }
+ }
+ if (typeof(o.json) == "function") {
+ newObj = o.json();
+ if (o !== newObj) {
+ return me(newObj);
+ }
+ }
+ if (objtype != "function" && typeof(o.length) == "number") {
+ var res = [];
+ for (var i = 0; i < o.length; i++) {
+ var val = me(o[i]);
+ if (typeof(val) != "string") {
+ val = "undefined";
+ }
+ res.push(val);
+ }
+ return "[" + res.join(",") + "]";
+ }
+ res = [];
+ for (var k in o) {
+ var useKey;
+ if (typeof(k) == "number") {
+ useKey = '"' + k + '"';
+ } else if (typeof(k) == "string") {
+ useKey = this.reprString(k);
+ } else {
+ // skip non-string or number keys
+ continue;
+ }
+ val = me(o[k]);
+ if (typeof(val) != "string") {
+ // skip non-serializable values
+ continue;
+ }
+ res.push(useKey + ":" + val);
+ }
+ return "{" + res.join(",") + "}";
+ },
+
+ /**
+ * Send and recive JSON using GET
+ */
+ loadJSONDoc: function(url) {
+ var d = this.getRequest(url);
+ var eval_req = function(req) {
+ var text = req.responseText;
+ return eval('(' + text + ')');
+ };
+ d.addCallback(eval_req);
+ return d;
+ },
+
+
+////
+// Misc.
+////
+ /**
+ * Alert the objects key attrs
+ */
+ keys: function(obj) {
+ var rval = [];
+ for (var prop in obj) {
+ rval.push(prop);
+ }
+ return rval;
+ },
+
+ urlencode: function(str) {
+ return encodeURIComponent(str.toString());
+ },
+
+ /**
+ * @returns True if the object is defined, otherwise false
+ */
+ isDefined: function(o) {
+ return (o != "undefined" && o != null)
+ },
+
+ /**
+ * @returns True if an object is a array, false otherwise
+ */
+ isArray: function(obj) {
+ try { return (typeof(obj.length) == "undefined") ? false : true; }
+ catch(e)
+ { return false; }
+ },
+
+ isObject: function(obj) {
+ return (obj && typeof obj == 'object');
+ },
+
+ /**
+ * Export DOM elements to the global namespace
+ */
+ exportDOMElements: function() {
+ UL = this.UL;
+ LI = this.LI;
+ TD = this.TD;
+ TR = this.TR;
+ TH = this.TH;
+ TBODY = this.TBODY;
+ TABLE = this.TABLE;
+ INPUT = this.INPUT;
+ SPAN = this.SPAN;
+ B = this.B;
+ A = this.A;
+ DIV = this.DIV;
+ IMG = this.IMG;
+ BUTTON = this.BUTTON;
+ H1 = this.H1;
+ H2 = this.H2;
+ H3 = this.H3;
+ BR = this.BR;
+ TEXTAREA = this.TEXTAREA;
+ FORM = this.FORM;
+ P = this.P;
+ SELECT = this.SELECT;
+ OPTION = this.OPTION;
+ TN = this.TN;
+ IFRAME = this.IFRAME;
+ SCRIPT = this.SCRIPT;
+ },
+
+ /**
+ * Export AmiJS functions to the global namespace
+ */
+ exportToGlobalScope: function() {
+ getElement = this.getElement;
+ getQueryArgument = this.getQueryArgument;
+ isIe = this.isIe;
+ $ = this.getElement;
+ getElements = this.getElements;
+ getBody = this.getBody;
+ getElementsByTagAndClassName = this.getElementsByTagAndClassName;
+ appendChildNodes = this.appendChildNodes;
+ ACN = appendChildNodes;
+ replaceChildNodes = this.replaceChildNodes;
+ RCN = replaceChildNodes;
+ insertAfter = this.insertAfter;
+ insertBefore = this.insertBefore;
+ showElement = this.showElement;
+ hideElement = this.hideElement;
+ isElementHidden = this.isElementHidden;
+ swapDOM = this.swapDOM;
+ removeElement = this.removeElement;
+ isDict = this.isDict;
+ createDOM = this.createDOM;
+ this.exportDOMElements();
+ getXMLHttpRequest = this.getXMLHttpRequest;
+ doSimpleXMLHttpRequest = this.doSimpleXMLHttpRequest;
+ getRequest = this.getRequest;
+ sendXMLHttpRequest = this.sendXMLHttpRequest;
+ reprString = this.reprString;
+ serializeJSON = this.serializeJSON;
+ loadJSONDoc = this.loadJSONDoc;
+ keys = this.keys;
+ isDefined = this.isDefined;
+ isArray = this.isArray;
+ }
}
+
+
+
+AJSDeferred = function(req) {
+ this.callbacks = [];
+ this.req = req;
+
+ this.callback = function (res) {
+ while (this.callbacks.length > 0) {
+ var fn = this.callbacks.pop();
+ res = fn(res);
+ }
+ };
+
+ this.errback = function(e){
+ alert("Error encountered:\n" + e);
+ };
+
+ this.addErrback = function(fn) {
+ this.errback = fn;
+ };
+
+ this.addCallback = function(fn) {
+ this.callbacks.unshift(fn);
+ };
+
+ this.addCallbacks = function(fn1, fn2) {
+ this.addCallback(fn1);
+ this.addErrback(fn2);
+ };
+
+ this.sendReq = function(data) {
+ if(AJS.isObject(data)) {
+ var post_data = [];
+ for(k in data) {
+ post_data.push(k + "=" + AJS.urlencode(data[k]));
+ }
+ post_data = post_data.join("&");
+ this.req.send(post_data);
+ }
+ else if(AJS.isDefined(data))
+ this.req.send(data);
+ else {
+ this.req.send("");
+ }
+ };
};
-req.onreadystatechange=_33;
-return d;
-},reprString:function(o){
-return ("\""+o.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
-},serializeJSON:function(o){
-var _37=typeof (o);
-if(_37=="undefined"){
-return "undefined";
-}else{
-if(_37=="number"||_37=="boolean"){
-return o+"";
-}else{
-if(o===null){
-return "null";
-}
-}
-}
-if(_37=="string"){
-return this.reprString(o);
-}
-var me=arguments.callee;
-var _39;
-if(typeof (o.__json__)=="function"){
-_39=o.__json__();
-if(o!==_39){
-return me(_39);
-}
-}
-if(typeof (o.json)=="function"){
-_39=o.json();
-if(o!==_39){
-return me(_39);
-}
-}
-if(_37!="function"&&typeof (o.length)=="number"){
-var res=[];
-for(var i=0;i0){
-var fn=this.callbacks.pop();
-res=fn(res);
+AJSDeferred.prototype = new AJSDeferred();
+
+
+
+
+
+
+/****
+Last Modified: 28/04/06 15:26:06
+
+ GoogieSpell
+ Google spell checker for your own web-apps :)
+ Copyright Amir Salihefendic 2006
+ LICENSE
+ GPL (see gpl.txt for more information)
+ This basically means that you can't use this script with/in proprietary software!
+ There is another license that permits you to use this script with proprietary software. Check out:... for more info.
+ AUTHOR
+ 4mir Salihefendic (http://amix.dk) - amix@amix.dk
+ VERSION
+ 3.22
+****/
+var GOOGIE_CUR_LANG = "en";
+
+function GoogieSpell(img_dir, server_url) {
+ var cookie_value;
+ var lang;
+ cookie_value = getCookie('language');
+
+ if(cookie_value != null)
+ GOOGIE_CUR_LANG = cookie_value;
+
+ this.img_dir = img_dir;
+ this.server_url = server_url;
+
+ this.lang_to_word = {"da": "Dansk", "de": "Deutsch", "en": "English",
+ "es": "Español", "fr": "Français", "it": "Italiano",
+ "nl": "Nederlands", "pl": "Polski", "pt": "Português",
+ "fi": "Suomi", "sv": "Svenska"};
+ this.langlist_codes = AJS.keys(this.lang_to_word);
+
+ this.show_change_lang_pic = true;
+
+ this.lang_state_observer = null;
+
+ this.spelling_state_observer = null;
+
+ this.request = null;
+ this.error_window = null;
+ this.language_window = null;
+ this.edit_layer = null;
+ this.orginal_text = null;
+ this.results = null;
+ this.text_area = null;
+ this.gselm = null;
+ this.ta_scroll_top = 0;
+ this.el_scroll_top = 0;
+
+ this.lang_chck_spell = "Check spelling";
+ this.lang_rsm_edt = "Resume editing";
+ this.lang_close = "Close";
+ this.lang_no_error_found = "No spelling errors found";
+ this.lang_revert = "Revert to";
+ this.show_spell_img = false; // modified by roundcube
}
-};
-this.errback=function(e){
-alert("Error encountered:\n"+e);
-};
-this.addErrback=function(fn){
-this.errback=fn;
-};
-this.addCallback=function(fn){
-this.callbacks.unshift(fn);
-};
-this.addCallbacks=function(fn1,fn2){
-this.addCallback(fn1);
-this.addErrback(fn2);
-};
-this.sendReq=function(_53){
-if(AJS.isObject(_53)){
-var _54=[];
-for(k in _53){
-_54.push(k+"="+AJS.urlencode(_53[k]));
+
+GoogieSpell.prototype.setStateChanged = function(current_state) {
+ if(this.spelling_state_observer != null)
+ this.spelling_state_observer(current_state);
}
-_54=_54.join("&");
-this.req.send(_54);
-}else{
-if(AJS.isDefined(_53)){
-this.req.send(_53);
-}else{
-this.req.send("");
+
+GoogieSpell.item_onmouseover = function(e) {
+ var elm = GoogieSpell.getEventElm(e);
+ if(elm.className != "googie_list_close" && elm.className != "googie_list_revert")
+ elm.className = "googie_list_onhover";
+ else
+ elm.parentNode.className = "googie_list_onhover";
}
+
+GoogieSpell.item_onmouseout = function(e) {
+ var elm = GoogieSpell.getEventElm(e);
+ if(elm.className != "googie_list_close" && elm.className != "googie_list_revert")
+ elm.className = "googie_list_onout";
+ else
+ elm.parentNode.className = "googie_list_onout";
}
-};
-};
-AJSDeferred.prototype=new AJSDeferred();
-var GOOGIE_CUR_LANG="en";
-function GoogieSpell(_55,_56){
-var _57;
-var _58;
-_57=getCookie("language");
-if(_57!=null){
-GOOGIE_CUR_LANG=_57;
-}
-this.img_dir=_55;
-this.server_url=_56;
-this.lang_to_word={"da":"Dansk","de":"Deutsch","en":"English","es":"Español","fr":"Français","it":"Italiano","nl":"Nederlands","pl":"Polski","pt":"Português","fi":"Suomi","sv":"Svenska"};
-this.langlist_codes=AJS.keys(this.lang_to_word);
-this.show_change_lang_pic=true;
-this.lang_state_observer=null;
-this.spelling_state_observer=null;
-this.request=null;
-this.error_window=null;
-this.language_window=null;
-this.edit_layer=null;
-this.orginal_text=null;
-this.results=null;
-this.text_area=null;
-this.gselm=null;
-this.ta_scroll_top=0;
-this.el_scroll_top=0;
-this.lang_chck_spell="Check spelling";
-this.lang_rsm_edt="Resume editing";
-this.lang_close="Close";
-this.lang_no_error_found="No spelling errors found";
-this.lang_revert="Revert to";
-this.show_spell_img=false;
-};
-GoogieSpell.prototype.setStateChanged=function(_59){
-if(this.spelling_state_observer!=null){
-this.spelling_state_observer(_59);
+
+GoogieSpell.prototype.getGoogleUrl = function() {
+ return this.server_url + GOOGIE_CUR_LANG;
}
-};
-GoogieSpell.item_onmouseover=function(e){
-var elm=GoogieSpell.getEventElm(e);
-if(elm.className!="googie_list_close"&&elm.className!="googie_list_revert"){
-elm.className="googie_list_onhover";
-}else{
-elm.parentNode.className="googie_list_onhover";
+
+GoogieSpell.prototype.spellCheck = function(elm, name) {
+ this.ta_scroll_top = this.text_area.scrollTop;
+
+ this.appendIndicator(elm);
+
+ try {
+ this.hideLangWindow();
+ }
+ catch(e) {}
+
+ this.gselm = elm;
+
+ this.createEditLayer(this.text_area.offsetWidth, this.text_area.offsetHeight);
+
+ this.createErrorWindow();
+ AJS.getBody().appendChild(this.error_window);
+
+ try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }
+ catch (e) { }
+
+ this.gselm.onclick = null;
+
+ this.orginal_text = this.text_area.value;
+ var me = this;
+
+ //Create request
+ var d = AJS.getRequest(this.getGoogleUrl());
+ var reqdone = function(req) {
+ var r_text = req.responseText;
+ if(r_text.match(//) != null) {
+ var results = GoogieSpell.parseResult(r_text);
+ //Before parsing be sure that errors were found
+ me.results = results;
+ me.showErrorsInIframe(results);
+ me.resumeEditingState();
+ }
+ else {
+ me.flashNoSpellingErrorState();
+ }
+ me.removeIndicator();
+ };
+
+ var reqfailed = function(req) {
+ alert("An error was encountered on the server. Please try again later.");
+ AJS.removeElement(me.gselm);
+ me.checkSpellingState();
+ me.removeIndicator();
+ };
+
+ d.addCallback(reqdone);
+ d.addErrback(reqfailed);
+
+ var req_text = GoogieSpell.escapeSepcial(this.orginal_text);
+ d.sendReq(GoogieSpell.createXMLReq(req_text));
}
-};
-GoogieSpell.item_onmouseout=function(e){
-var elm=GoogieSpell.getEventElm(e);
-if(elm.className!="googie_list_close"&&elm.className!="googie_list_revert"){
-elm.className="googie_list_onout";
-}else{
-elm.parentNode.className="googie_list_onout";
+
+GoogieSpell.escapeSepcial = function(val) {
+ return val.replace(/&/g, "&").replace(//g, ">");
}
-};
-GoogieSpell.prototype.getGoogleUrl=function(){
-return this.server_url+GOOGIE_CUR_LANG;
-};
-GoogieSpell.prototype.spellCheck=function(elm,_5f){
-this.ta_scroll_top=this.text_area.scrollTop;
-this.appendIndicator(elm);
-try{
-this.hideLangWindow();
-}
-catch(e){
-}
-this.gselm=elm;
-this.createEditLayer(this.text_area.offsetWidth,this.text_area.offsetHeight);
-this.createErrorWindow();
-AJS.getBody().appendChild(this.error_window);
-try{
-netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
-}
-catch(e){
-}
-this.gselm.onclick=null;
-this.orginal_text=this.text_area.value;
-var me=this;
-var d=AJS.getRequest(this.getGoogleUrl());
-var _62=function(req){
-var _64=req.responseText;
-if(_64.match(//)!=null){
-var _65=GoogieSpell.parseResult(_64);
-me.results=_65;
-me.showErrorsInIframe(_65);
-me.resumeEditingState();
-}else{
-me.flashNoSpellingErrorState();
-}
-me.removeIndicator();
-};
-var _66=function(req){
-alert("An error was encountered on the server. Please try again later.");
-AJS.removeElement(me.gselm);
-me.checkSpellingState();
-me.removeIndicator();
-};
-d.addCallback(_62);
-d.addErrback(_66);
-var _68=GoogieSpell.escapeSepcial(this.orginal_text);
-d.sendReq(GoogieSpell.createXMLReq(_68));
-};
-GoogieSpell.escapeSepcial=function(val){
-return val.replace(/&/g,"&").replace(//g,">");
-};
-GoogieSpell.createXMLReq=function(_6a){
-return ""+_6a+"";
-};
-GoogieSpell.parseResult=function(_6b){
-var _6c=/\w="\d+"/g;
-var _6d=/\t/g;
-var _6e=_6b.match(/]*>[^<]*<\/c>/g);
-var _6f=new Array();
-for(var i=0;i<_6e.length;i++){
-var _71=new Array();
-_71["attrs"]=new Array();
-var _72=_6e[i].match(_6c);
-for(var j=0;j<_72.length;j++){
-var _74=_72[j].split(/=/);
-_71["attrs"][_74[0]]=parseInt(_74[1].replace("\"",""));
-}
-_71["suggestions"]=new Array();
-var _75=_6e[i].replace(/<[^>]*>/g,"");
-var _76=_75.split(_6d);
-for(var k=0;k<_76.length;k++){
-if(_76[k]!=""){
-_71["suggestions"].push(_76[k]);
-}
-}
-_6f.push(_71);
-}
-return _6f;
-};
-GoogieSpell.prototype.createErrorWindow=function(){
-this.error_window=AJS.DIV();
-this.error_window.className="googie_window";
-};
-GoogieSpell.prototype.hideErrorWindow=function(){
-this.error_window.style.visibility="hidden";
-};
-GoogieSpell.prototype.updateOrginalText=function(_78,_79,_7a,id){
-var _7c=this.orginal_text.substring(0,_78);
-var _7d=this.orginal_text.substring(_78+_79.length);
-this.orginal_text=_7c+_7a+_7d;
-var _7e=_7a.length-_79.length;
-for(var j=0;jid){
-this.results[j]["attrs"]["o"]+=_7e;
+
+GoogieSpell.createXMLReq = function (text) {
+ return '' + text + '';
}
+
+//Retunrs an array
+//result[item] -> ['attrs']
+// ['suggestions']
+GoogieSpell.parseResult = function(r_text) {
+ var re_split_attr_c = /\w="\d+"/g;
+ var re_split_text = /\t/g;
+
+ var matched_c = r_text.match(/]*>[^<]*<\/c>/g);
+ var results = new Array();
+
+ for(var i=0; i < matched_c.length; i++) {
+ var item = new Array();
+
+ //Get attributes
+ item['attrs'] = new Array();
+ var split_c = matched_c[i].match(re_split_attr_c);
+ for(var j=0; j < split_c.length; j++) {
+ var c_attr = split_c[j].split(/=/);
+ item['attrs'][c_attr[0]] = parseInt(c_attr[1].replace('"', ''));
+ }
+
+ //Get suggestions
+ item['suggestions'] = new Array();
+ var only_text = matched_c[i].replace(/<[^>]*>/g, "");
+ var split_t = only_text.split(re_split_text);
+ for(var k=0; k < split_t.length; k++) {
+ if(split_t[k] != "")
+ item['suggestions'].push(split_t[k]);
+ }
+ results.push(item);
+ }
+ return results;
}
-};
-GoogieSpell.prototype.saveOldValue=function(id,_81){
-this.results[id]["is_changed"]=true;
-this.results[id]["old_value"]=_81;
-};
-GoogieSpell.prototype.showErrorWindow=function(elm,id){
-var me=this;
-var _85=GoogieSpell.absolutePosition(elm);
-_85.y-=this.edit_layer.scrollTop;
-this.error_window.style.visibility="visible";
-this.error_window.style.top=(_85.y+20)+"px";
-this.error_window.style.left=(_85.x)+"px";
-this.error_window.innerHTML="";
-var _86=AJS.TABLE({"class":"googie_list"});
-var _87=AJS.TBODY();
-var _88=this.results[id]["suggestions"];
-var _89=this.results[id]["attrs"]["o"];
-var len=this.results[id]["attrs"]["l"];
-if(_88.length==0){
-var row=AJS.TR();
-var _8c=AJS.TD();
-var _8d=AJS.SPAN();
-_8c.appendChild(AJS.TN("No suggestions :("));
-row.appendChild(_8c);
-_87.appendChild(row);
-}
-for(i=0;i<_88.length;i++){
-var row=AJS.TR();
-var _8c=AJS.TD();
-var _8d=AJS.SPAN();
-_8d.innerHTML=_88[i];
-_8c.appendChild(AJS.TN(_8d.innerHTML));
-_8c.onclick=function(e){
-var _8f=GoogieSpell.getEventElm(e);
-var _90=elm.innerHTML;
-var _91=_8f.innerHTML;
-elm.style.color="green";
-elm.innerHTML=_8f.innerHTML;
-me.hideErrorWindow();
-me.updateOrginalText(_89,_90,_91,id);
-me.results[id]["attrs"]["l"]=_91.length;
-me.saveOldValue(id,_90);
-};
-_8c.onmouseover=GoogieSpell.item_onmouseover;
-_8c.onmouseout=GoogieSpell.item_onmouseout;
-row.appendChild(_8c);
-_87.appendChild(row);
-}
-if(this.results[id]["is_changed"]){
-var _92=this.results[id]["old_value"];
-var _89=this.results[id]["attrs"]["o"];
-var _93=AJS.TR();
-var _94=AJS.TD();
-_94.onmouseover=GoogieSpell.item_onmouseover;
-_94.onmouseout=GoogieSpell.item_onmouseout;
-var _95=AJS.SPAN({"class":"googie_list_revert"});
-_95.innerHTML=this.lang_revert+" "+_92;
-_94.appendChild(_95);
-_94.onclick=function(e){
-me.updateOrginalText(_89,elm.innerHTML,_92,id);
-elm.style.color="#b91414";
-elm.innerHTML=_92;
-me.hideErrorWindow();
-};
-_93.appendChild(_94);
-_87.appendChild(_93);
-}
-var _97=AJS.TR();
-var _98=AJS.TD();
-var _99=AJS.INPUT({"style":"width: 120px; margin:0; padding:0"});
-var _9a=function(){
-if(_99.value!=""){
-me.saveOldValue(id,elm.innerHTML);
-me.updateOrginalText(_89,elm.innerHTML,_99.value,id);
-elm.style.color="green";
-elm.innerHTML=_99.value;
-me.hideErrorWindow();
-return false;
+
+/****
+ Error window (the drop-down window)
+****/
+GoogieSpell.prototype.createErrorWindow = function() {
+ this.error_window = AJS.DIV();
+ this.error_window.className = "googie_window";
}
-};
-var _9b=AJS.IMG({"src":this.img_dir+"ok.gif","style":"width: 32px; height: 16px; margin-left: 2px; margin-right: 2px;"});
-var _9c=AJS.FORM({"style":"margin: 0; padding: 0"},_99,_9b);
-_9b.onclick=_9a;
-_9c.onsubmit=_9a;
-_98.appendChild(_9c);
-_97.appendChild(_98);
-_87.appendChild(_97);
-var _9d=AJS.TR();
-var _9e=AJS.TD();
-_9e.onmouseover=GoogieSpell.item_onmouseover;
-_9e.onmouseout=GoogieSpell.item_onmouseout;
-var _9f=AJS.SPAN({"class":"googie_list_close"});
-_9f.innerHTML=this.lang_close;
-_9e.appendChild(_9f);
-_9e.onclick=function(){
-me.hideErrorWindow();
-};
-_9d.appendChild(_9e);
-_87.appendChild(_9d);
-_86.appendChild(_87);
-this.error_window.appendChild(_86);
-};
-GoogieSpell.prototype.createEditLayer=function(_a0,_a1){
-this.edit_layer=AJS.DIV({"class":"googie_edit_layer"});
-this.edit_layer.className=this.text_area.className;
-this.edit_layer.style.border="1px solid #999";
-this.edit_layer.style.overflow="auto";
-this.edit_layer.style.backgroundColor="#F1EDFE";
-this.edit_layer.style.padding="3px";
-this.edit_layer.style.width=(_a0-8)+"px";
-this.edit_layer.style.height=_a1+"px";
-};
-GoogieSpell.prototype.resumeEditing=function(e,me){
-this.setStateChanged("check_spelling");
-me.switch_lan_pic.style.display="inline";
-this.el_scroll_top=me.edit_layer.scrollTop;
-var elm=GoogieSpell.getEventElm(e);
-AJS.replaceChildNodes(elm,this.createSpellDiv());
-elm.onclick=function(e){
-me.spellCheck(elm,me.text_area.id);
-};
-me.hideErrorWindow();
-me.edit_layer.parentNode.removeChild(me.edit_layer);
-me.text_area.value=me.orginal_text;
-AJS.showElement(me.text_area);
-me.gselm.className="googie_no_style";
-me.text_area.scrollTop=this.el_scroll_top;
-elm.onmouseout=null;
-};
-GoogieSpell.prototype.createErrorLink=function(_a6,id){
-var elm=AJS.SPAN({"class":"googie_link"});
-var me=this;
-elm.onclick=function(){
-me.showErrorWindow(elm,id);
-};
-elm.innerHTML=_a6;
-return elm;
-};
-GoogieSpell.createPart=function(_aa){
-if(_aa==" "){
-return AJS.TN(" ");
-}
-var _ab=AJS.SPAN();
-var _ac=true;
-var _ad=(navigator.userAgent.toLowerCase().indexOf("safari")!=-1);
-var _ae=AJS.SPAN();
-_aa=GoogieSpell.escapeSepcial(_aa);
-_aa=_aa.replace(/\n/g,"
");
-_aa=_aa.replace(/ /g," ");
-_aa=_aa.replace(/^ /g," ");
-_aa=_aa.replace(/ $/g," ");
-_ae.innerHTML=_aa;
-return _ae;
-};
-GoogieSpell.prototype.showErrorsInIframe=function(_af){
-var _b0=AJS.DIV();
-_b0.style.textAlign="left";
-var _b1=0;
-for(var i=0;i<_af.length;i++){
-var _b3=_af[i]["attrs"]["o"];
-var len=_af[i]["attrs"]["l"];
-var _b5=this.orginal_text.substring(_b1,_b3);
-var _b6=GoogieSpell.createPart(_b5);
-_b0.appendChild(_b6);
-_b1+=_b3-_b1;
-_b0.appendChild(this.createErrorLink(this.orginal_text.substr(_b3,len),i));
-_b1+=len;
-}
-var _b7=this.orginal_text.substr(_b1,this.orginal_text.length);
-var _b8=GoogieSpell.createPart(_b7);
-_b0.appendChild(_b8);
-this.edit_layer.appendChild(_b0);
-AJS.hideElement(this.text_area);
-this.text_area.parentNode.insertBefore(this.edit_layer,this.text_area.nextSibling);
-this.edit_layer.scrollTop=this.ta_scroll_top;
-};
-GoogieSpell.Position=function(x,y){
-this.x=x;
-this.y=y;
-};
-GoogieSpell.absolutePosition=function(_bb){
-var _bc=new GoogieSpell.Position(_bb.offsetLeft,_bb.offsetTop);
-if(_bb.offsetParent){
-var _bd=GoogieSpell.absolutePosition(_bb.offsetParent);
-_bc.x+=_bd.x;
-_bc.y+=_bd.y;
-}
-return _bc;
-};
-GoogieSpell.getEventElm=function(e){
-var _bf;
-if(!e){
-var e=window.event;
+
+GoogieSpell.prototype.hideErrorWindow = function() {
+ this.error_window.style.visibility = "hidden";
+}
+
+GoogieSpell.prototype.updateOrginalText = function(offset, old_value, new_value, id) {
+ var part_1 = this.orginal_text.substring(0, offset);
+ var part_2 = this.orginal_text.substring(offset+old_value.length);
+ this.orginal_text = part_1 + new_value + part_2;
+ var add_2_offset = new_value.length - old_value.length;
+ for(var j=0; j < this.results.length; j++) {
+ //Don't edit the offset of the current item
+ if(j != id && j > id){
+ this.results[j]['attrs']['o'] += add_2_offset;
+ }
+ }
+}
+
+GoogieSpell.prototype.saveOldValue = function (id, old_value) {
+ this.results[id]['is_changed'] = true;
+ this.results[id]['old_value'] = old_value;
}
-if(e.target){
-_bf=e.target;
-}else{
-if(e.srcElement){
-_bf=e.srcElement;
+
+GoogieSpell.prototype.showErrorWindow = function(elm, id) {
+ var me = this;
+
+ var abs_pos = GoogieSpell.absolutePosition(elm);
+ abs_pos.y -= this.edit_layer.scrollTop;
+ this.error_window.style.visibility = "visible";
+ this.error_window.style.top = (abs_pos.y+20) + "px";
+ this.error_window.style.left = (abs_pos.x) + "px";
+ this.error_window.innerHTML = "";
+
+ //Build up the result list
+ var table = AJS.TABLE({'class': 'googie_list'});
+ var list = AJS.TBODY();
+
+ var suggestions = this.results[id]['suggestions'];
+ var offset = this.results[id]['attrs']['o'];
+ var len = this.results[id]['attrs']['l'];
+
+ if(suggestions.length == 0) {
+ var row = AJS.TR();
+ var item = AJS.TD();
+ var dummy = AJS.SPAN();
+ item.appendChild(AJS.TN("No suggestions :("));
+ row.appendChild(item);
+ list.appendChild(row);
+ }
+
+ for(i=0; i < suggestions.length; i++) {
+ var row = AJS.TR();
+ var item = AJS.TD();
+ var dummy = AJS.SPAN();
+ dummy.innerHTML = suggestions[i];
+ item.appendChild(AJS.TN(dummy.innerHTML));
+
+ item.onclick = function(e) {
+ var l_elm = GoogieSpell.getEventElm(e);
+ var old_value = elm.innerHTML;
+ var new_value = l_elm.innerHTML;
+
+ elm.style.color = "green";
+ elm.innerHTML = l_elm.innerHTML;
+ me.hideErrorWindow();
+
+ me.updateOrginalText(offset, old_value, new_value, id);
+
+ //Update to the new length
+ me.results[id]['attrs']['l'] = new_value.length;
+ me.saveOldValue(id, old_value);
+ };
+ item.onmouseover = GoogieSpell.item_onmouseover;
+ item.onmouseout = GoogieSpell.item_onmouseout;
+ row.appendChild(item);
+ list.appendChild(row);
+ }
+
+ //The element is changed, append the revert
+ if(this.results[id]['is_changed']) {
+ var old_value = this.results[id]['old_value'];
+ var offset = this.results[id]['attrs']['o'];
+ var revert_row = AJS.TR();
+ var revert = AJS.TD();
+
+ revert.onmouseover = GoogieSpell.item_onmouseover;
+ revert.onmouseout = GoogieSpell.item_onmouseout;
+ var rev_span = AJS.SPAN({'class': 'googie_list_revert'});
+ rev_span.innerHTML = this.lang_revert + " " + old_value;
+ revert.appendChild(rev_span);
+
+ revert.onclick = function(e) {
+ me.updateOrginalText(offset, elm.innerHTML, old_value, id);
+ elm.style.color = "#b91414";
+ elm.innerHTML = old_value;
+ me.hideErrorWindow();
+ };
+
+ revert_row.appendChild(revert);
+ list.appendChild(revert_row);
+ }
+
+ //Append the edit box
+ var edit_row = AJS.TR();
+ var edit = AJS.TD();
+
+ var edit_input = AJS.INPUT({'style': 'width: 120px; margin:0; padding:0'});
+
+ var onsub = function () {
+ if(edit_input.value != "") {
+ me.saveOldValue(id, elm.innerHTML);
+ me.updateOrginalText(offset, elm.innerHTML, edit_input.value, id);
+ elm.style.color = "green"
+ elm.innerHTML = edit_input.value;
+
+ me.hideErrorWindow();
+ return false;
+ }
+ };
+
+ var ok_pic = AJS.IMG({'src': this.img_dir + "ok.gif", 'style': 'width: 32px; height: 16px; margin-left: 2px; margin-right: 2px;'});
+ var edit_form = AJS.FORM({'style': 'margin: 0; padding: 0'}, edit_input, ok_pic);
+ ok_pic.onclick = onsub;
+ edit_form.onsubmit = onsub;
+
+ edit.appendChild(edit_form);
+ edit_row.appendChild(edit);
+ list.appendChild(edit_row);
+
+ //Close button
+ var close_row = AJS.TR();
+ var close = AJS.TD();
+
+ close.onmouseover = GoogieSpell.item_onmouseover;
+ close.onmouseout = GoogieSpell.item_onmouseout;
+
+ var spn_close = AJS.SPAN({'class': 'googie_list_close'});
+ spn_close.innerHTML = this.lang_close;
+ close.appendChild(spn_close);
+ close.onclick = function() { me.hideErrorWindow()};
+ close_row.appendChild(close);
+ list.appendChild(close_row);
+
+ table.appendChild(list);
+ this.error_window.appendChild(table);
}
+
+
+/****
+ Edit layer (the layer where the suggestions are stored)
+****/
+GoogieSpell.prototype.createEditLayer = function(width, height) {
+ this.edit_layer = AJS.DIV({'class': 'googie_edit_layer'});
+
+ //Set the style so it looks like edit areas
+ this.edit_layer.className = this.text_area.className;
+ this.edit_layer.style.border = "1px solid #999";
+ this.edit_layer.style.overflow = "auto";
+ this.edit_layer.style.backgroundColor = "#F1EDFE";
+ this.edit_layer.style.padding = "3px";
+
+ this.edit_layer.style.width = (width-8) + "px";
+ this.edit_layer.style.height = height + "px";
}
-if(_bf.nodeType==3){
-_bf=_bf.parentNode;
+
+GoogieSpell.prototype.resumeEditing = function(e, me) {
+ this.setStateChanged("check_spelling");
+ me.switch_lan_pic.style.display = "inline";
+
+ this.el_scroll_top = me.edit_layer.scrollTop;
+
+ var elm = GoogieSpell.getEventElm(e);
+ AJS.replaceChildNodes(elm, this.createSpellDiv());
+
+ elm.onclick = function(e) {
+ me.spellCheck(elm, me.text_area.id);
+ };
+ me.hideErrorWindow();
+
+ //Remove the EDIT_LAYER
+ me.edit_layer.parentNode.removeChild(me.edit_layer);
+
+ me.text_area.value = me.orginal_text;
+ AJS.showElement(me.text_area);
+ me.gselm.className = "googie_no_style";
+
+ me.text_area.scrollTop = this.el_scroll_top;
+
+ elm.onmouseout = null;
}
-return _bf;
-};
-GoogieSpell.prototype.removeIndicator=function(elm){
-if(window.rcube_webmail_client){
-rcube_webmail_client.set_busy(false);
+
+GoogieSpell.prototype.createErrorLink = function(text, id) {
+ var elm = AJS.SPAN({'class': 'googie_link'});
+ var me = this;
+ elm.onclick = function () {
+ me.showErrorWindow(elm, id);
+ };
+ elm.innerHTML = text;
+ return elm;
}
-};
-GoogieSpell.prototype.appendIndicator=function(elm){
-if(window.rcube_webmail_client){
-rcube_webmail_client.set_busy(true,"checking");
+
+GoogieSpell.createPart = function(txt_part) {
+ if(txt_part == " ")
+ return AJS.TN(" ");
+ var result = AJS.SPAN();
+
+ var is_first = true;
+ var is_safari = (navigator.userAgent.toLowerCase().indexOf("safari") != -1);
+
+ var part = AJS.SPAN();
+ txt_part = GoogieSpell.escapeSepcial(txt_part);
+ txt_part = txt_part.replace(/\n/g, "
");
+ txt_part = txt_part.replace(/ /g, " ");
+ txt_part = txt_part.replace(/^ /g, " ");
+ txt_part = txt_part.replace(/ $/g, " ");
+
+ part.innerHTML = txt_part;
+
+ return part;
}
-};
-GoogieSpell.prototype.createLangWindow=function(){
-this.language_window=AJS.DIV({"class":"googie_window"});
-this.language_window.style.width="130px";
-var _c2=AJS.TABLE({"class":"googie_list"});
-var _c3=AJS.TBODY();
-this.lang_elms=new Array();
-for(i=0;i= 2) {
- for(var i=1; i < arguments.length; i++) {
- var n = arguments[i];
- if(typeof(n) == "string")
- n = document.createTextNode(n);
- if(this.isDefined(n))
- node.appendChild(n);
- }
- }
- return node;
- },
-
- /**
- * Replaces a nodes children with another node(s)
- */
- replaceChildNodes: function(node/*, nodes...*/) {
- var child;
- while ((child = node.firstChild)) {
- node.removeChild(child);
- }
- if (arguments.length < 2) {
- return node;
- } else {
- return this.appendChildNodes.apply(this, arguments);
- }
- },
-
- /**
- * Insert a node after another node
- */
- insertAfter: function(node, referenceNode) {
- referenceNode.parentNode.insertBefore(node, referenceNode.nextSibling);
- },
-
- /**
- * Insert a node before another node
- */
- insertBefore: function(node, referenceNode) {
- referenceNode.parentNode.insertBefore(node, referenceNode);
- },
-
- /**
- * Shows the element
- */
- showElement: function(elm) {
- elm.style.display = '';
- },
-
- /**
- * Hides the element
- */
- hideElement: function(elm) {
- elm.style.display = 'none';
- },
-
- isElementHidden: function(elm) {
- return elm.style.visibility == "hidden";
- },
-
- /**
- * Swaps one element with another. To delete use swapDOM(elm, null)
- */
- swapDOM: function(dest, src) {
- dest = this.getElement(dest);
- var parent = dest.parentNode;
- if (src) {
- src = this.getElement(src);
- parent.replaceChild(src, dest);
- } else {
- parent.removeChild(dest);
- }
- return src;
- },
-
- /**
- * Removes an element from the world
- */
- removeElement: function(elm) {
- this.swapDOM(elm, null);
- },
-
- /**
- * @returns Is an object a dictionary?
- */
- isDict: function(o) {
- var str_repr = String(o);
- return str_repr.indexOf(" Object") != -1;
- },
-
- /**
- * Creates a DOM element
- * @param {String} name The elements DOM name
- * @param {Dict} attrs Attributes sent to the function
- */
- createDOM: function(name, attrs) {
- var i=0;
- elm = document.createElement(name);
-
- if(this.isDict(attrs[i])) {
- for(k in attrs[0]) {
- if(k == "style")
- elm.style.cssText = attrs[0][k];
- else if(k == "class")
- elm.className = attrs[0][k];
- else
- elm.setAttribute(k, attrs[0][k]);
- }
- i++;
- }
-
- if(attrs[0] == null)
- i = 1;
-
- for(i; i < attrs.length; i++) {
- var n = attrs[i];
- if(this.isDefined(n)) {
- if(typeof(n) == "string")
- n = document.createTextNode(n);
- elm.appendChild(n);
- }
- }
- return elm;
- },
-
- UL: function() { return this.createDOM.apply(this, ["ul", arguments]); },
- LI: function() { return this.createDOM.apply(this, ["li", arguments]); },
- TD: function() { return this.createDOM.apply(this, ["td", arguments]); },
- TR: function() { return this.createDOM.apply(this, ["tr", arguments]); },
- TH: function() { return this.createDOM.apply(this, ["th", arguments]); },
- TBODY: function() { return this.createDOM.apply(this, ["tbody", arguments]); },
- TABLE: function() { return this.createDOM.apply(this, ["table", arguments]); },
- INPUT: function() { return this.createDOM.apply(this, ["input", arguments]); },
- SPAN: function() { return this.createDOM.apply(this, ["span", arguments]); },
- B: function() { return this.createDOM.apply(this, ["b", arguments]); },
- A: function() { return this.createDOM.apply(this, ["a", arguments]); },
- DIV: function() { return this.createDOM.apply(this, ["div", arguments]); },
- IMG: function() { return this.createDOM.apply(this, ["img", arguments]); },
- BUTTON: function() { return this.createDOM.apply(this, ["button", arguments]); },
- H1: function() { return this.createDOM.apply(this, ["h1", arguments]); },
- H2: function() { return this.createDOM.apply(this, ["h2", arguments]); },
- H3: function() { return this.createDOM.apply(this, ["h3", arguments]); },
- BR: function() { return this.createDOM.apply(this, ["br", arguments]); },
- TEXTAREA: function() { return this.createDOM.apply(this, ["textarea", arguments]); },
- FORM: function() { return this.createDOM.apply(this, ["form", arguments]); },
- P: function() { return this.createDOM.apply(this, ["p", arguments]); },
- SELECT: function() { return this.createDOM.apply(this, ["select", arguments]); },
- OPTION: function() { return this.createDOM.apply(this, ["option", arguments]); },
- TN: function(text) { return document.createTextNode(text); },
- IFRAME: function() { return this.createDOM.apply(this, ["iframe", arguments]); },
- SCRIPT: function() { return this.createDOM.apply(this, ["script", arguments]); },
-
-////
-// Ajax functions
-////
- /**
- * @returns A new XMLHttpRequest object
- */
- getXMLHttpRequest: function() {
- var try_these = [
- function () { return new XMLHttpRequest(); },
- function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
- function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
- function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
- function () { throw "Browser does not support XMLHttpRequest"; }
- ];
- for (var i = 0; i < try_these.length; i++) {
- var func = try_these[i];
- try {
- return func();
- } catch (e) {
- }
- }
- },
-
- /**
- * Use this function to do a simple HTTP Request
- */
- doSimpleXMLHttpRequest: function(url) {
- var req = this.getXMLHttpRequest();
- req.open("GET", url, true);
- return this.sendXMLHttpRequest(req);
- },
-
- getRequest: function(url, data) {
- var req = this.getXMLHttpRequest();
- req.open("POST", url, true);
- req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- return this.sendXMLHttpRequest(req);
- },
-
- /**
- * Send a XMLHttpRequest
- */
- sendXMLHttpRequest: function(req, data) {
- var d = new AJSDeferred(req);
-
- var onreadystatechange = function () {
- if (req.readyState == 4) {
- try {
- var status = req.status;
- }
- catch(e) {};
- if(status == 200 || status == 304 || req.responseText == null) {
- d.callback(req, data);
- }
- else {
- d.errback();
- }
- }
- }
- req.onreadystatechange = onreadystatechange;
- return d;
- },
-
- /**
- * Represent an object as a string
- */
- reprString: function(o) {
- return ('"' + o.replace(/(["\\])/g, '\\$1') + '"'
- ).replace(/[\f]/g, "\\f"
- ).replace(/[\b]/g, "\\b"
- ).replace(/[\n]/g, "\\n"
- ).replace(/[\t]/g, "\\t"
- ).replace(/[\r]/g, "\\r");
- },
-
- /**
- * Serialize an object to JSON notation
- */
- serializeJSON: function(o) {
- var objtype = typeof(o);
- if (objtype == "undefined") {
- return "undefined";
- } else if (objtype == "number" || objtype == "boolean") {
- return o + "";
- } else if (o === null) {
- return "null";
- }
- if (objtype == "string") {
- return this.reprString(o);
- }
- var me = arguments.callee;
- var newObj;
- if (typeof(o.__json__) == "function") {
- newObj = o.__json__();
- if (o !== newObj) {
- return me(newObj);
- }
- }
- if (typeof(o.json) == "function") {
- newObj = o.json();
- if (o !== newObj) {
- return me(newObj);
- }
- }
- if (objtype != "function" && typeof(o.length) == "number") {
- var res = [];
- for (var i = 0; i < o.length; i++) {
- var val = me(o[i]);
- if (typeof(val) != "string") {
- val = "undefined";
- }
- res.push(val);
- }
- return "[" + res.join(",") + "]";
- }
- res = [];
- for (var k in o) {
- var useKey;
- if (typeof(k) == "number") {
- useKey = '"' + k + '"';
- } else if (typeof(k) == "string") {
- useKey = this.reprString(k);
- } else {
- // skip non-string or number keys
- continue;
- }
- val = me(o[k]);
- if (typeof(val) != "string") {
- // skip non-serializable values
- continue;
- }
- res.push(useKey + ":" + val);
- }
- return "{" + res.join(",") + "}";
- },
-
- /**
- * Send and recive JSON using GET
- */
- loadJSONDoc: function(url) {
- var d = this.getRequest(url);
- var eval_req = function(req) {
- var text = req.responseText;
- return eval('(' + text + ')');
- };
- d.addCallback(eval_req);
- return d;
- },
-
-
-////
-// Misc.
-////
- /**
- * Alert the objects key attrs
- */
- keys: function(obj) {
- var rval = [];
- for (var prop in obj) {
- rval.push(prop);
- }
- return rval;
- },
-
- urlencode: function(str) {
- return encodeURIComponent(str.toString());
- },
-
- /**
- * @returns True if the object is defined, otherwise false
- */
- isDefined: function(o) {
- return (o != "undefined" && o != null)
- },
-
- /**
- * @returns True if an object is a array, false otherwise
- */
- isArray: function(obj) {
- try { return (typeof(obj.length) == "undefined") ? false : true; }
- catch(e)
- { return false; }
- },
-
- isObject: function(obj) {
- return (obj && typeof obj == 'object');
- },
-
- /**
- * Export DOM elements to the global namespace
- */
- exportDOMElements: function() {
- UL = this.UL;
- LI = this.LI;
- TD = this.TD;
- TR = this.TR;
- TH = this.TH;
- TBODY = this.TBODY;
- TABLE = this.TABLE;
- INPUT = this.INPUT;
- SPAN = this.SPAN;
- B = this.B;
- A = this.A;
- DIV = this.DIV;
- IMG = this.IMG;
- BUTTON = this.BUTTON;
- H1 = this.H1;
- H2 = this.H2;
- H3 = this.H3;
- BR = this.BR;
- TEXTAREA = this.TEXTAREA;
- FORM = this.FORM;
- P = this.P;
- SELECT = this.SELECT;
- OPTION = this.OPTION;
- TN = this.TN;
- IFRAME = this.IFRAME;
- SCRIPT = this.SCRIPT;
- },
-
- /**
- * Export AmiJS functions to the global namespace
- */
- exportToGlobalScope: function() {
- getElement = this.getElement;
- getQueryArgument = this.getQueryArgument;
- isIe = this.isIe;
- $ = this.getElement;
- getElements = this.getElements;
- getBody = this.getBody;
- getElementsByTagAndClassName = this.getElementsByTagAndClassName;
- appendChildNodes = this.appendChildNodes;
- ACN = appendChildNodes;
- replaceChildNodes = this.replaceChildNodes;
- RCN = replaceChildNodes;
- insertAfter = this.insertAfter;
- insertBefore = this.insertBefore;
- showElement = this.showElement;
- hideElement = this.hideElement;
- isElementHidden = this.isElementHidden;
- swapDOM = this.swapDOM;
- removeElement = this.removeElement;
- isDict = this.isDict;
- createDOM = this.createDOM;
- this.exportDOMElements();
- getXMLHttpRequest = this.getXMLHttpRequest;
- doSimpleXMLHttpRequest = this.doSimpleXMLHttpRequest;
- getRequest = this.getRequest;
- sendXMLHttpRequest = this.sendXMLHttpRequest;
- reprString = this.reprString;
- serializeJSON = this.serializeJSON;
- loadJSONDoc = this.loadJSONDoc;
- keys = this.keys;
- isDefined = this.isDefined;
- isArray = this.isArray;
- }
-}
-
-
-
-AJSDeferred = function(req) {
- this.callbacks = [];
- this.req = req;
-
- this.callback = function (res) {
- while (this.callbacks.length > 0) {
- var fn = this.callbacks.pop();
- res = fn(res);
- }
- };
-
- this.errback = function(e){
- alert("Error encountered:\n" + e);
- };
-
- this.addErrback = function(fn) {
- this.errback = fn;
- };
-
- this.addCallback = function(fn) {
- this.callbacks.unshift(fn);
- };
-
- this.addCallbacks = function(fn1, fn2) {
- this.addCallback(fn1);
- this.addErrback(fn2);
- };
-
- this.sendReq = function(data) {
- if(AJS.isObject(data)) {
- var post_data = [];
- for(k in data) {
- post_data.push(k + "=" + AJS.urlencode(data[k]));
- }
- post_data = post_data.join("&");
- this.req.send(post_data);
- }
- else if(AJS.isDefined(data))
- this.req.send(data);
- else {
- this.req.send("");
- }
- };
-};
-AJSDeferred.prototype = new AJSDeferred();
-
-
-
-
-
-
-/****
-Last Modified: 28/04/06 15:26:06
-
- GoogieSpell
- Google spell checker for your own web-apps :)
- Copyright Amir Salihefendic 2006
- LICENSE
- GPL (see gpl.txt for more information)
- This basically means that you can't use this script with/in proprietary software!
- There is another license that permits you to use this script with proprietary software. Check out:... for more info.
- AUTHOR
- 4mir Salihefendic (http://amix.dk) - amix@amix.dk
- VERSION
- 3.22
-****/
-var GOOGIE_CUR_LANG = "en";
-
-function GoogieSpell(img_dir, server_url) {
- var cookie_value;
- var lang;
- cookie_value = getCookie('language');
-
- if(cookie_value != null)
- GOOGIE_CUR_LANG = cookie_value;
-
- this.img_dir = img_dir;
- this.server_url = server_url;
-
- this.lang_to_word = {"da": "Dansk", "de": "Deutsch", "en": "English",
- "es": "Español", "fr": "Français", "it": "Italiano",
- "nl": "Nederlands", "pl": "Polski", "pt": "Português",
- "fi": "Suomi", "sv": "Svenska"};
- this.langlist_codes = AJS.keys(this.lang_to_word);
-
- this.show_change_lang_pic = true;
-
- this.lang_state_observer = null;
-
- this.spelling_state_observer = null;
-
- this.request = null;
- this.error_window = null;
- this.language_window = null;
- this.edit_layer = null;
- this.orginal_text = null;
- this.results = null;
- this.text_area = null;
- this.gselm = null;
- this.ta_scroll_top = 0;
- this.el_scroll_top = 0;
-
- this.lang_chck_spell = "Check spelling";
- this.lang_rsm_edt = "Resume editing";
- this.lang_close = "Close";
- this.lang_no_error_found = "No spelling errors found";
- this.lang_revert = "Revert to";
- this.show_spell_img = false; // modified by roundcube
-}
-
-GoogieSpell.prototype.setStateChanged = function(current_state) {
- if(this.spelling_state_observer != null)
- this.spelling_state_observer(current_state);
-}
-
-GoogieSpell.item_onmouseover = function(e) {
- var elm = GoogieSpell.getEventElm(e);
- if(elm.className != "googie_list_close" && elm.className != "googie_list_revert")
- elm.className = "googie_list_onhover";
- else
- elm.parentNode.className = "googie_list_onhover";
-}
-
-GoogieSpell.item_onmouseout = function(e) {
- var elm = GoogieSpell.getEventElm(e);
- if(elm.className != "googie_list_close" && elm.className != "googie_list_revert")
- elm.className = "googie_list_onout";
- else
- elm.parentNode.className = "googie_list_onout";
-}
-
-GoogieSpell.prototype.getGoogleUrl = function() {
- return this.server_url + GOOGIE_CUR_LANG;
-}
-
-GoogieSpell.prototype.spellCheck = function(elm, name) {
- this.ta_scroll_top = this.text_area.scrollTop;
-
- this.appendIndicator(elm);
-
- try {
- this.hideLangWindow();
- }
- catch(e) {}
-
- this.gselm = elm;
-
- this.createEditLayer(this.text_area.offsetWidth, this.text_area.offsetHeight);
-
- this.createErrorWindow();
- AJS.getBody().appendChild(this.error_window);
-
- try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }
- catch (e) { }
-
- this.gselm.onclick = null;
-
- this.orginal_text = this.text_area.value;
- var me = this;
-
- //Create request
- var d = AJS.getRequest(this.getGoogleUrl());
- var reqdone = function(req) {
- var r_text = req.responseText;
- if(r_text.match(//) != null) {
- var results = GoogieSpell.parseResult(r_text);
- //Before parsing be sure that errors were found
- me.results = results;
- me.showErrorsInIframe(results);
- me.resumeEditingState();
- }
- else {
- me.flashNoSpellingErrorState();
- }
- me.removeIndicator();
- };
-
- var reqfailed = function(req) {
- alert("An error was encountered on the server. Please try again later.");
- AJS.removeElement(me.gselm);
- me.checkSpellingState();
- me.removeIndicator();
- };
-
- d.addCallback(reqdone);
- d.addErrback(reqfailed);
-
- var req_text = GoogieSpell.escapeSepcial(this.orginal_text);
- d.sendReq(GoogieSpell.createXMLReq(req_text));
-}
-
-GoogieSpell.escapeSepcial = function(val) {
- return val.replace(/&/g, "&").replace(//g, ">");
-}
-
-GoogieSpell.createXMLReq = function (text) {
- return '' + text + '';
-}
-
-//Retunrs an array
-//result[item] -> ['attrs']
-// ['suggestions']
-GoogieSpell.parseResult = function(r_text) {
- var re_split_attr_c = /\w="\d+"/g;
- var re_split_text = /\t/g;
-
- var matched_c = r_text.match(/]*>[^<]*<\/c>/g);
- var results = new Array();
-
- for(var i=0; i < matched_c.length; i++) {
- var item = new Array();
-
- //Get attributes
- item['attrs'] = new Array();
- var split_c = matched_c[i].match(re_split_attr_c);
- for(var j=0; j < split_c.length; j++) {
- var c_attr = split_c[j].split(/=/);
- item['attrs'][c_attr[0]] = parseInt(c_attr[1].replace('"', ''));
- }
-
- //Get suggestions
- item['suggestions'] = new Array();
- var only_text = matched_c[i].replace(/<[^>]*>/g, "");
- var split_t = only_text.split(re_split_text);
- for(var k=0; k < split_t.length; k++) {
- if(split_t[k] != "")
- item['suggestions'].push(split_t[k]);
- }
- results.push(item);
- }
- return results;
-}
-
-/****
- Error window (the drop-down window)
-****/
-GoogieSpell.prototype.createErrorWindow = function() {
- this.error_window = AJS.DIV();
- this.error_window.className = "googie_window";
-}
-
-GoogieSpell.prototype.hideErrorWindow = function() {
- this.error_window.style.visibility = "hidden";
-}
-
-GoogieSpell.prototype.updateOrginalText = function(offset, old_value, new_value, id) {
- var part_1 = this.orginal_text.substring(0, offset);
- var part_2 = this.orginal_text.substring(offset+old_value.length);
- this.orginal_text = part_1 + new_value + part_2;
- var add_2_offset = new_value.length - old_value.length;
- for(var j=0; j < this.results.length; j++) {
- //Don't edit the offset of the current item
- if(j != id && j > id){
- this.results[j]['attrs']['o'] += add_2_offset;
- }
- }
-}
-
-GoogieSpell.prototype.saveOldValue = function (id, old_value) {
- this.results[id]['is_changed'] = true;
- this.results[id]['old_value'] = old_value;
-}
-
-GoogieSpell.prototype.showErrorWindow = function(elm, id) {
- var me = this;
-
- var abs_pos = GoogieSpell.absolutePosition(elm);
- abs_pos.y -= this.edit_layer.scrollTop;
- this.error_window.style.visibility = "visible";
- this.error_window.style.top = (abs_pos.y+20) + "px";
- this.error_window.style.left = (abs_pos.x) + "px";
- this.error_window.innerHTML = "";
-
- //Build up the result list
- var table = AJS.TABLE({'class': 'googie_list'});
- var list = AJS.TBODY();
-
- var suggestions = this.results[id]['suggestions'];
- var offset = this.results[id]['attrs']['o'];
- var len = this.results[id]['attrs']['l'];
-
- if(suggestions.length == 0) {
- var row = AJS.TR();
- var item = AJS.TD();
- var dummy = AJS.SPAN();
- item.appendChild(AJS.TN("No suggestions :("));
- row.appendChild(item);
- list.appendChild(row);
- }
-
- for(i=0; i < suggestions.length; i++) {
- var row = AJS.TR();
- var item = AJS.TD();
- var dummy = AJS.SPAN();
- dummy.innerHTML = suggestions[i];
- item.appendChild(AJS.TN(dummy.innerHTML));
-
- item.onclick = function(e) {
- var l_elm = GoogieSpell.getEventElm(e);
- var old_value = elm.innerHTML;
- var new_value = l_elm.innerHTML;
-
- elm.style.color = "green";
- elm.innerHTML = l_elm.innerHTML;
- me.hideErrorWindow();
-
- me.updateOrginalText(offset, old_value, new_value, id);
-
- //Update to the new length
- me.results[id]['attrs']['l'] = new_value.length;
- me.saveOldValue(id, old_value);
- };
- item.onmouseover = GoogieSpell.item_onmouseover;
- item.onmouseout = GoogieSpell.item_onmouseout;
- row.appendChild(item);
- list.appendChild(row);
- }
-
- //The element is changed, append the revert
- if(this.results[id]['is_changed']) {
- var old_value = this.results[id]['old_value'];
- var offset = this.results[id]['attrs']['o'];
- var revert_row = AJS.TR();
- var revert = AJS.TD();
-
- revert.onmouseover = GoogieSpell.item_onmouseover;
- revert.onmouseout = GoogieSpell.item_onmouseout;
- var rev_span = AJS.SPAN({'class': 'googie_list_revert'});
- rev_span.innerHTML = this.lang_revert + " " + old_value;
- revert.appendChild(rev_span);
-
- revert.onclick = function(e) {
- me.updateOrginalText(offset, elm.innerHTML, old_value, id);
- elm.style.color = "#b91414";
- elm.innerHTML = old_value;
- me.hideErrorWindow();
- };
-
- revert_row.appendChild(revert);
- list.appendChild(revert_row);
- }
-
- //Append the edit box
- var edit_row = AJS.TR();
- var edit = AJS.TD();
-
- var edit_input = AJS.INPUT({'style': 'width: 120px; margin:0; padding:0'});
-
- var onsub = function () {
- if(edit_input.value != "") {
- me.saveOldValue(id, elm.innerHTML);
- me.updateOrginalText(offset, elm.innerHTML, edit_input.value, id);
- elm.style.color = "green"
- elm.innerHTML = edit_input.value;
-
- me.hideErrorWindow();
- return false;
- }
- };
-
- var ok_pic = AJS.IMG({'src': this.img_dir + "ok.gif", 'style': 'width: 32px; height: 16px; margin-left: 2px; margin-right: 2px;'});
- var edit_form = AJS.FORM({'style': 'margin: 0; padding: 0'}, edit_input, ok_pic);
- ok_pic.onclick = onsub;
- edit_form.onsubmit = onsub;
-
- edit.appendChild(edit_form);
- edit_row.appendChild(edit);
- list.appendChild(edit_row);
-
- //Close button
- var close_row = AJS.TR();
- var close = AJS.TD();
-
- close.onmouseover = GoogieSpell.item_onmouseover;
- close.onmouseout = GoogieSpell.item_onmouseout;
-
- var spn_close = AJS.SPAN({'class': 'googie_list_close'});
- spn_close.innerHTML = this.lang_close;
- close.appendChild(spn_close);
- close.onclick = function() { me.hideErrorWindow()};
- close_row.appendChild(close);
- list.appendChild(close_row);
-
- table.appendChild(list);
- this.error_window.appendChild(table);
-}
-
-
-/****
- Edit layer (the layer where the suggestions are stored)
-****/
-GoogieSpell.prototype.createEditLayer = function(width, height) {
- this.edit_layer = AJS.DIV({'class': 'googie_edit_layer'});
-
- //Set the style so it looks like edit areas
- this.edit_layer.className = this.text_area.className;
- this.edit_layer.style.border = "1px solid #999";
- this.edit_layer.style.overflow = "auto";
- this.edit_layer.style.backgroundColor = "#F1EDFE";
- this.edit_layer.style.padding = "3px";
-
- this.edit_layer.style.width = (width-8) + "px";
- this.edit_layer.style.height = height + "px";
-}
-
-GoogieSpell.prototype.resumeEditing = function(e, me) {
- this.setStateChanged("check_spelling");
- me.switch_lan_pic.style.display = "inline";
-
- this.el_scroll_top = me.edit_layer.scrollTop;
-
- var elm = GoogieSpell.getEventElm(e);
- AJS.replaceChildNodes(elm, this.createSpellDiv());
-
- elm.onclick = function(e) {
- me.spellCheck(elm, me.text_area.id);
- };
- me.hideErrorWindow();
-
- //Remove the EDIT_LAYER
- me.edit_layer.parentNode.removeChild(me.edit_layer);
-
- me.text_area.value = me.orginal_text;
- AJS.showElement(me.text_area);
- me.gselm.className = "googie_no_style";
-
- me.text_area.scrollTop = this.el_scroll_top;
-
- elm.onmouseout = null;
-}
-
-GoogieSpell.prototype.createErrorLink = function(text, id) {
- var elm = AJS.SPAN({'class': 'googie_link'});
- var me = this;
- elm.onclick = function () {
- me.showErrorWindow(elm, id);
- };
- elm.innerHTML = text;
- return elm;
-}
-
-GoogieSpell.createPart = function(txt_part) {
- if(txt_part == " ")
- return AJS.TN(" ");
- var result = AJS.SPAN();
-
- var is_first = true;
- var is_safari = (navigator.userAgent.toLowerCase().indexOf("safari") != -1);
-
- var part = AJS.SPAN();
- txt_part = GoogieSpell.escapeSepcial(txt_part);
- txt_part = txt_part.replace(/\n/g, "
");
- txt_part = txt_part.replace(/ /g, " ");
- txt_part = txt_part.replace(/^ /g, " ");
- txt_part = txt_part.replace(/ $/g, " ");
-
- part.innerHTML = txt_part;
-
- return part;
-}
-
-GoogieSpell.prototype.showErrorsInIframe = function(results) {
- var output = AJS.DIV();
- output.style.textAlign = "left";
- var pointer = 0;
- for(var i=0; i < results.length; i++) {
- var offset = results[i]['attrs']['o'];
- var len = results[i]['attrs']['l'];
-
- var part_1_text = this.orginal_text.substring(pointer, offset);
- var part_1 = GoogieSpell.createPart(part_1_text);
- output.appendChild(part_1);
- pointer += offset - pointer;
-
- //If the last child was an error, then insert some space
- output.appendChild(this.createErrorLink(this.orginal_text.substr(offset, len), i));
- pointer += len;
- }
- //Insert the rest of the orginal text
- var part_2_text = this.orginal_text.substr(pointer, this.orginal_text.length);
-
- var part_2 = GoogieSpell.createPart(part_2_text);
- output.appendChild(part_2);
-
- this.edit_layer.appendChild(output);
-
- //Hide text area
- AJS.hideElement(this.text_area);
- this.text_area.parentNode.insertBefore(this.edit_layer, this.text_area.nextSibling);
- this.edit_layer.scrollTop = this.ta_scroll_top;
-}
-
-GoogieSpell.Position = function(x, y) {
- this.x = x;
- this.y = y;
-}
-
-//Get the absolute position of menu_slide
-GoogieSpell.absolutePosition = function(element) {
- //Create a new object that has elements y and x pos...
- var posObj = new GoogieSpell.Position(element.offsetLeft, element.offsetTop);
-
- //Check if the element has an offsetParent - if it has .. loop until it has not
- if(element.offsetParent) {
- var temp_pos = GoogieSpell.absolutePosition(element.offsetParent);
- posObj.x += temp_pos.x;
- posObj.y += temp_pos.y;
- }
- return posObj;
-}
-
-GoogieSpell.getEventElm = function(e) {
- var targ;
- if (!e) var e = window.event;
- if (e.target) targ = e.target;
- else if (e.srcElement) targ = e.srcElement;
- if (targ.nodeType == 3) // defeat Safari bug
- targ = targ.parentNode;
- return targ;
-}
-
-GoogieSpell.prototype.removeIndicator = function(elm) {
- // modified by roundcube
- if (window.rcube_webmail_client)
- rcube_webmail_client.set_busy(false);
- //AJS.removeElement(this.indicator);
-}
-
-GoogieSpell.prototype.appendIndicator = function(elm) {
- // modified by roundcube
- if (window.rcube_webmail_client)
- rcube_webmail_client.set_busy(true, 'checking');
-/*
- var img = AJS.IMG({'src': this.img_dir + 'indicator.gif', 'style': 'margin-right: 5px;'});
- img.style.width = "16px";
- img.style.height = "16px";
- this.indicator = img;
- img.style.textDecoration = "none";
- AJS.insertBefore(img, elm);
- */
-}
-
-/****
- Choose language
-****/
-GoogieSpell.prototype.createLangWindow = function() {
- this.language_window = AJS.DIV({'class': 'googie_window'});
- this.language_window.style.width = "130px";
-
- //Build up the result list
- var table = AJS.TABLE({'class': 'googie_list'});
- var list = AJS.TBODY();
-
- this.lang_elms = new Array();
-
- for(i=0; i < this.langlist_codes.length; i++) {
- var row = AJS.TR();
- var item = AJS.TD();
- item.googieId = this.langlist_codes[i];
- this.lang_elms.push(item);
- var lang_span = AJS.SPAN();
- lang_span.innerHTML = this.lang_to_word[this.langlist_codes[i]];
- item.appendChild(AJS.TN(lang_span.innerHTML));
-
- var me = this;
-
- item.onclick = function(e) {
- var elm = GoogieSpell.getEventElm(e);
- me.deHighlightCurSel();
-
- me.setCurrentLanguage(elm.googieId);
-
- if(me.lang_state_observer != null) {
- me.lang_state_observer();
- }
-
- me.highlightCurSel();
- me.hideLangWindow();
- };
-
- item.onmouseover = function(e) {
- var i_it = GoogieSpell.getEventElm(e);
- if(i_it.className != "googie_list_selected")
- i_it.className = "googie_list_onhover";
- };
- item.onmouseout = function(e) {
- var i_it = GoogieSpell.getEventElm(e);
- if(i_it.className != "googie_list_selected")
- i_it.className = "googie_list_onout";
- };
-
- row.appendChild(item);
- list.appendChild(row);
- }
-
- this.highlightCurSel();
-
- //Close button
- var close_row = AJS.TR();
- var close = AJS.TD();
- close.onmouseover = GoogieSpell.item_onmouseover;
- close.onmouseout = GoogieSpell.item_onmouseout;
- var spn_close = AJS.SPAN({'class': 'googie_list_close'});
- spn_close.innerHTML = this.lang_close;
- close.appendChild(spn_close);
- var me = this;
- close.onclick = function(e) {
- me.hideLangWindow(); GoogieSpell.item_onmouseout(e);
- };
- close_row.appendChild(close);
- list.appendChild(close_row);
-
- table.appendChild(list);
- this.language_window.appendChild(table);
-}
-
-GoogieSpell.prototype.setCurrentLanguage = function(lan_code) {
- GOOGIE_CUR_LANG = lan_code;
-
- //Set cookie
- var now = new Date();
- now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000);
- setCookie('language', lan_code, now);
-}
-
-GoogieSpell.prototype.hideLangWindow = function() {
- this.language_window.style.visibility = "hidden";
- this.switch_lan_pic.className = "googie_lang_3d_on";
-}
-
-GoogieSpell.prototype.deHighlightCurSel = function() {
- this.lang_cur_elm.className = "googie_list_onout";
-}
-
-GoogieSpell.prototype.highlightCurSel = function() {
- for(var i=0; i < this.lang_elms.length; i++) {
- if(this.lang_elms[i].googieId == GOOGIE_CUR_LANG) {
- this.lang_elms[i].className = "googie_list_selected";
- this.lang_cur_elm = this.lang_elms[i];
- }
- else {
- this.lang_elms[i].className = "googie_list_onout";
- }
- }
-}
-
-GoogieSpell.prototype.showLangWindow = function(elm, ofst_top, ofst_left) {
- if(!AJS.isDefined(ofst_top))
- ofst_top = 20;
- if(!AJS.isDefined(ofst_left))
- ofst_left = 50;
-
- this.createLangWindow();
- AJS.getBody().appendChild(this.language_window);
-
- var abs_pos = GoogieSpell.absolutePosition(elm);
- AJS.showElement(this.language_window);
- this.language_window.style.top = (abs_pos.y+ofst_top) + "px";
- this.language_window.style.left = (abs_pos.x+ofst_left-this.language_window.offsetWidth) + "px";
- this.highlightCurSel();
- this.language_window.style.visibility = "visible";
-}
-
-GoogieSpell.prototype.flashNoSpellingErrorState = function() {
- this.setStateChanged("no_error_found");
- var me = this;
- AJS.hideElement(this.switch_lan_pic);
- this.gselm.innerHTML = this.lang_no_error_found;
- this.gselm.className = "googie_check_spelling_ok";
- this.gselm.style.textDecoration = "none";
- this.gselm.style.cursor = "default";
- var fu = function() {
- AJS.removeElement(me.gselm);
- me.checkSpellingState();
- };
- setTimeout(fu, 1000);
-}
-
-GoogieSpell.prototype.resumeEditingState = function() {
- this.setStateChanged("resume_editing");
- var me = this;
- AJS.hideElement(me.switch_lan_pic);
-
- //Change link text to resume
- me.gselm.innerHTML = this.lang_rsm_edt;
- me.gselm.onclick = function(e) {
- me.resumeEditing(e, me);
- }
- me.gselm.className = "googie_check_spelling_ok";
- me.edit_layer.scrollTop = me.ta_scroll_top;
-}
-
-GoogieSpell.prototype.createChangeLangPic = function() {
- var switch_lan = AJS.A({'class': 'googie_lang_3d_on', 'style': 'padding-left: 6px;'}, AJS.IMG({'src': this.img_dir + 'change_lang.gif', 'alt': "Change language"}));
- switch_lan.onmouseover = function() {
- if(this.className != "googie_lang_3d_click")
- this.className = "googie_lang_3d_on";
- }
-
- var me = this;
- switch_lan.onclick = function() {
- if(this.className == "googie_lang_3d_click") {
- me.hideLangWindow();
- }
- else {
- me.showLangWindow(switch_lan);
- this.className = "googie_lang_3d_click";
- }
- }
- return switch_lan;
-}
-
-GoogieSpell.prototype.createSpellDiv = function() {
- var chk_spell = AJS.SPAN({'class': 'googie_check_spelling_link'});
- chk_spell.innerHTML = this.lang_chck_spell;
- var spell_img = null;
- if(this.show_spell_img)
- spell_img = AJS.IMG({'src': this.img_dir + "spellc.gif"});
- return AJS.SPAN(spell_img, " ", chk_spell);
-}
-
-GoogieSpell.prototype.checkSpellingState = function() {
- this.setStateChanged("check_spelling");
- var me = this;
- if(this.show_change_lang_pic)
- this.switch_lan_pic = this.createChangeLangPic();
- else
- this.switch_lan_pic = AJS.SPAN();
-
- var span_chck = this.createSpellDiv();
- span_chck.onclick = function() {
- me.spellCheck(span_chck);
- }
- AJS.appendChildNodes(this.spell_container, span_chck, " ", this.switch_lan_pic);
- // modified by roundcube
- this.check_link = span_chck;
-}
-
-GoogieSpell.prototype.setLanguages = function(lang_dict) {
- this.lang_to_word = lang_dict;
- this.langlist_codes = AJS.keys(lang_dict);
-}
-
-GoogieSpell.prototype.decorateTextarea = function(id, /*optional*/spell_container_id, force_width) {
- var me = this;
-
- if(typeof(id) == "string")
- this.text_area = AJS.getElement(id);
- else
- this.text_area = id;
-
- var r_width;
-
- if(this.text_area != null) {
- if(AJS.isDefined(spell_container_id)) {
- if(typeof(spell_container_id) == "string")
- this.spell_container = AJS.getElement(spell_container_id);
- else
- this.spell_container = spell_container_id;
- }
- else {
- var table = AJS.TABLE();
- var tbody = AJS.TBODY();
- var tr = AJS.TR();
- if(AJS.isDefined(force_width)) {
- r_width = force_width;
- }
- else {
- r_width = this.text_area.offsetWidth + "px";
- }
-
- var spell_container = AJS.TD();
- this.spell_container = spell_container;
-
- tr.appendChild(spell_container);
-
- tbody.appendChild(tr);
- table.appendChild(tbody);
-
- AJS.insertBefore(table, this.text_area);
-
- //Set width
- table.style.width = '100%'; // modified by roundcube (old: r_width)
- spell_container.style.width = r_width;
- spell_container.style.textAlign = "right";
- }
-
- this.checkSpellingState();
- }
- else {
- alert("Text area not found");
- }
-}
diff --git a/program/js/list.js b/program/js/list.js
index e58616e..51e2041 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -1,557 +1,894 @@
-function rcube_list_widget(_1,p){
-this.ENTER_KEY=13;
-this.DELETE_KEY=46;
-this.BACKSPACE_KEY=8;
-this.list=_1?_1:null;
-this.frame=null;
-this.rows=[];
-this.selection=[];
-this.rowcount=0;
-this.subject_col=-1;
-this.shiftkey=false;
-this.multiselect=false;
-this.multi_selecting=false;
-this.draggable=false;
-this.keyboard=false;
-this.toggleselect=false;
-this.dont_select=false;
-this.drag_active=false;
-this.last_selected=0;
-this.shift_start=0;
-this.in_selection_before=false;
-this.focused=false;
-this.drag_mouse_start=null;
-this.dblclick_time=600;
-this.row_init=function(){
-};
-this.events={click:[],dblclick:[],select:[],keypress:[],dragstart:[],dragmove:[],dragend:[]};
-if(p&&typeof (p)=="object"){
-for(var n in p){
-this[n]=p[n];
-}
-}
-};
-rcube_list_widget.prototype={init:function(){
-if(this.list&&this.list.tBodies[0]){
-this.rows=new Array();
-this.rowcount=0;
-var _4;
-for(var r=0;r |
+ | Charles McNulty |
+ +-----------------------------------------------------------------------+
+ | Requires: common.js |
+ +-----------------------------------------------------------------------+
+
+ $Id: list.js 2277 2009-02-06 14:42:39Z alec $
+*/
+
+
+/**
+ * RoundCube List Widget class
+ * @contructor
+ */
+function rcube_list_widget(list, p)
+ {
+ // static contants
+ this.ENTER_KEY = 13;
+ this.DELETE_KEY = 46;
+ this.BACKSPACE_KEY = 8;
+
+ this.list = list ? list : null;
+ this.frame = null;
+ this.rows = [];
+ this.selection = [];
+ this.rowcount = 0;
+
+ this.subject_col = -1;
+ this.shiftkey = false;
+ this.multiselect = false;
+ this.multi_selecting = false;
+ this.draggable = false;
+ this.keyboard = false;
+ this.toggleselect = false;
+
+ this.dont_select = false;
+ this.drag_active = false;
+ this.last_selected = 0;
+ this.shift_start = 0;
+ this.in_selection_before = false;
+ this.focused = false;
+ this.drag_mouse_start = null;
+ this.dblclick_time = 600;
+ this.row_init = function(){};
+ this.events = { click:[], dblclick:[], select:[], keypress:[], dragstart:[], dragmove:[], dragend:[] };
+
+ // overwrite default paramaters
+ if (p && typeof(p)=='object')
+ for (var n in p)
+ this[n] = p[n];
+ }
+
+
+rcube_list_widget.prototype = {
+
+
+/**
+ * get all message rows from HTML table and init each row
+ */
+init: function()
+{
+ if (this.list && this.list.tBodies[0])
+ {
+ this.rows = new Array();
+ this.rowcount = 0;
+
+ var row;
+ for(var r=0; r=0; i--)
+ if(rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=]+)/i) && this.rows[RegExp.$1] != null)
+ return RegExp.$1;
+ }
+
+ return null;
+},
+
+
+/**
+ * selects or unselects the proper row depending on the modifier key pressed
+ */
+select_row: function(id, mod_key, with_mouse)
+{
+ var select_before = this.selection.join(',');
+ if (!this.multiselect)
+ mod_key = 0;
+
+ if (!this.shift_start)
+ this.shift_start = id
+
+ if (!mod_key)
+ {
+ this.shift_start = id;
+ this.highlight_row(id, false);
+ this.multi_selecting = false;
+ }
+ else
+ {
+ switch (mod_key)
+ {
+ case SHIFT_KEY:
+ this.shift_select(id, false);
+ break;
+
+ case CONTROL_KEY:
+ if (!with_mouse)
+ this.highlight_row(id, true);
+ break;
+
+ case CONTROL_SHIFT_KEY:
+ this.shift_select(id, true);
+ break;
+
+ default:
+ this.highlight_row(id, false);
+ break;
+ }
+ this.multi_selecting = true;
+ }
+
+ // trigger event if selection changed
+ if (this.selection.join(',') != select_before)
+ this.trigger_event('select');
+
+ if (this.last_selected != 0 && this.rows[this.last_selected])
+ this.set_classname(this.rows[this.last_selected].obj, 'focused', false);
+
+ // unselect if toggleselect is active and the same row was clicked again
+ if (this.toggleselect && this.last_selected == id)
+ {
+ this.clear_selection();
+ id = null;
+ }
+ else
+ this.set_classname(this.rows[id].obj, 'focused', true);
+
+ if (!this.selection.length)
+ this.shift_start = null;
+
+ this.last_selected = id;
+},
+
+
+/**
+ * Alias method for select_row
+ */
+select: function(id)
+{
+ this.select_row(id, false);
+ this.scrollto(id);
+},
+
+
+/**
+ * Select row next to the last selected one.
+ * Either below or above.
+ */
+select_next: function()
+{
+ var next_row = this.get_next_row();
+ var prev_row = this.get_prev_row();
+ var new_row = (next_row) ? next_row : prev_row;
+ if (new_row)
+ this.select_row(new_row.uid, false, false);
+},
+
+
+/**
+ * Perform selection when shift key is pressed
+ */
+shift_select: function(id, control)
+{
+ if (!this.rows[this.shift_start] || !this.selection.length)
+ this.shift_start = id;
+
+ var from_rowIndex = this.rows[this.shift_start].obj.rowIndex;
+ var to_rowIndex = this.rows[id].obj.rowIndex;
+
+ var i = ((from_rowIndex < to_rowIndex)? from_rowIndex : to_rowIndex);
+ var j = ((from_rowIndex > to_rowIndex)? from_rowIndex : to_rowIndex);
+
+ // iterate through the entire message list
+ for (var n in this.rows)
+ {
+ if ((this.rows[n].obj.rowIndex >= i) && (this.rows[n].obj.rowIndex <= j))
+ {
+ if (!this.in_selection(n))
+ this.highlight_row(n, true);
+ }
+ else
+ {
+ if (this.in_selection(n) && !control)
+ this.highlight_row(n, true);
+ }
+ }
+},
+
+
+/**
+ * Check if given id is part of the current selection
+ */
+in_selection: function(id)
+{
+ for(var n in this.selection)
+ if (this.selection[n]==id)
+ return true;
+
+ return false;
+},
+
+
+/**
+ * Select each row in list
+ */
+select_all: function(filter)
+{
+ if (!this.rows || !this.rows.length)
+ return false;
+
+ // reset but remember selection first
+ var select_before = this.selection.join(',');
+ this.selection = new Array();
+
+ for (var n in this.rows)
+ {
+ if (!filter || (this.rows[n] && this.rows[n][filter] == true))
+ {
+ this.last_selected = n;
+ this.highlight_row(n, true);
+ }
+ else if (this.rows[n])
+ {
+ this.set_classname(this.rows[n].obj, 'selected', false);
+ this.set_classname(this.rows[n].obj, 'unfocused', false);
+ }
+ }
+
+ // trigger event if selection changed
+ if (this.selection.join(',') != select_before)
+ this.trigger_event('select');
+
+ this.focus();
+
+ return true;
+},
+
+
+/**
+ * Unselect selected row(s)
+ */
+clear_selection: function(id)
+{
+ var num_select = this.selection.length;
+
+ // one row
+ if (id)
+ {
+ for (var n=0; n 1 || !this.in_selection(id))
+ {
+ this.clear_selection();
+ this.selection[0] = id;
+ this.set_classname(this.rows[id].obj, 'selected', true);
+ }
+ }
+ else if (this.rows[id])
+ {
+ if (!this.in_selection(id)) // select row
+ {
+ this.selection[this.selection.length] = id;
+ this.set_classname(this.rows[id].obj, 'selected', true);
+ }
+ else // unselect row
+ {
+ var p = find_in_array(id, this.selection);
+ var a_pre = this.selection.slice(0, p);
+ var a_post = this.selection.slice(p+1, this.selection.length);
+ this.selection = a_pre.concat(a_post);
+ this.set_classname(this.rows[id].obj, 'selected', false);
+ this.set_classname(this.rows[id].obj, 'unfocused', false);
+ }
+ }
+},
+
+
+/**
+ * Handler for keyboard events
+ */
+key_press: function(e)
+{
+ if (this.focused != true)
+ return true;
+
+ var keyCode = rcube_event.get_keycode(e);
+ var mod_key = rcube_event.get_modifier(e);
+ switch (keyCode)
+ {
+ case 40:
+ case 38:
+ case 63233: // "down", in safari keypress
+ case 63232: // "up", in safari keypress
+ // Stop propagation so that the browser doesn't scroll
+ rcube_event.cancel(e);
+ return this.use_arrow_key(keyCode, mod_key);
+ default:
+ this.shiftkey = e.shiftKey;
+ this.key_pressed = keyCode;
+ this.trigger_event('keypress');
+
+ if (this.key_pressed == this.BACKSPACE_KEY)
+ return rcube_event.cancel(e);
+ }
+
+ return true;
+},
+
+/**
+ * Handler for keydown events
+ */
+key_down: function(e)
+{
+ switch (rcube_event.get_keycode(e))
+ {
+ case 40:
+ case 38:
+ case 63233:
+ case 63232:
+ if (!rcube_event.get_modifier(e) && this.focused)
+ return rcube_event.cancel(e);
+
+ default:
+ }
+
+ return true;
+},
+
+
+/**
+ * Special handling method for arrow keys
+ */
+use_arrow_key: function(keyCode, mod_key)
+{
+ var new_row;
+ // Safari uses the nonstandard keycodes 63232/63233 for up/down, if we're
+ // using the keypress event (but not the keydown or keyup event).
+ if (keyCode == 40 || keyCode == 63233) // down arrow key pressed
+ new_row = this.get_next_row();
+ else if (keyCode == 38 || keyCode == 63232) // up arrow key pressed
+ new_row = this.get_prev_row();
+
+ if (new_row)
+ {
+ this.select_row(new_row.uid, mod_key, true);
+ this.scrollto(new_row.uid);
+ }
+
+ return false;
+},
+
+
+/**
+ * Try to scroll the list to make the specified row visible
+ */
+scrollto: function(id)
+{
+ var row = this.rows[id].obj;
+ if (row && this.frame)
+ {
+ var scroll_to = Number(row.offsetTop);
+
+ if (scroll_to < Number(this.frame.scrollTop))
+ this.frame.scrollTop = scroll_to;
+ else if (scroll_to + Number(row.offsetHeight) > Number(this.frame.scrollTop) + Number(this.frame.offsetHeight))
+ this.frame.scrollTop = (scroll_to + Number(row.offsetHeight)) - Number(this.frame.offsetHeight);
+ }
+},
+
+
+/**
+ * Handler for mouse move events
+ */
+drag_mouse_move: function(e)
+{
+ if (this.drag_start)
+ {
+ // check mouse movement, of less than 3 pixels, don't start dragging
+ var m = rcube_event.get_mouse_pos(e);
+
+ if (!this.drag_mouse_start || (Math.abs(m.x - this.drag_mouse_start.x) < 3 && Math.abs(m.y - this.drag_mouse_start.y) < 3))
+ return false;
+
+ if (!this.draglayer)
+ this.draglayer = new rcube_layer('rcmdraglayer', {x:0, y:0, vis:0, zindex:2000});
+
+ // get subjects of selectedd messages
+ var names = '';
+ var c, i, node, subject, obj;
+ for(var n=0; n12) // only show 12 lines
+ {
+ names += '...';
+ break;
+ }
+
+ if (this.rows[this.selection[n]].obj)
+ {
+ obj = this.rows[this.selection[n]].obj;
+ subject = '';
+
+ for(c=0, i=0; i= 0 && this.subject_col == c)))
+ {
+ subject = node.nodeType==3 ? node.data : node.innerHTML;
+ names += (subject.length > 50 ? subject.substring(0, 50)+'...' : subject) + '
';
+ break;
+ }
+ c++;
+ }
+ }
+ }
+ }
+
+ this.draglayer.write(names);
+ this.draglayer.show(1);
+
+ this.drag_active = true;
+ this.trigger_event('dragstart');
+ }
+
+ if (this.drag_active && this.draglayer)
+ {
+ var pos = rcube_event.get_mouse_pos(e);
+ this.draglayer.move(pos.x+20, pos.y-5);
+ this.trigger_event('dragmove', e);
+ }
+
+ this.drag_start = false;
+
+ return false;
+},
+
+
+/**
+ * Handler for mouse up events
+ */
+drag_mouse_up: function(e)
+{
+ document.onmousemove = null;
+
+ if (this.draglayer && this.draglayer.visible)
+ this.draglayer.show(0);
+
+ this.drag_active = false;
+ this.trigger_event('dragend');
+
+ rcube_event.remove_listener({element:document, event:'mousemove', object:this, method:'drag_mouse_move'});
+ rcube_event.remove_listener({element:document, event:'mouseup', object:this, method:'drag_mouse_up'});
+
+ var iframes = document.getElementsByTagName('IFRAME');
+ for (var n in iframes) {
+ var iframedoc;
+
+ if (iframes[n].contentDocument)
+ iframedoc = iframes[n].contentDocument;
+ else if (iframes[n].contentWindow)
+ iframedoc = iframes[n].contentWindow.document;
+ else if (iframes[n].document)
+ iframedoc = iframes[n].document;
+
+ if (iframedoc) {
+ if (this.iframe_events[n]) {
+ if (iframedoc.removeEventListener)
+ iframedoc.removeEventListener('mousemove', this.iframe_events[n], false);
+ else if (iframedoc.detachEvent)
+ iframedoc.detachEvent('onmousemove', this.iframe_events[n]);
+ else
+ iframedoc['onmousemove'] = null;
+ }
+ rcube_event.remove_listener({element:iframedoc, event:'mouseup', object:this, method:'drag_mouse_up'});
+ }
+ }
+
+ this.focus();
+
+ return rcube_event.cancel(e);
+},
+
+
+
+/**
+ * set/unset a specific class name
+ */
+set_classname: function(obj, classname, set)
+{
+ var reg = new RegExp('\s*'+classname, 'i');
+ if (!set && obj.className.match(reg))
+ obj.className = obj.className.replace(reg, '');
+ else if (set && !obj.className.match(reg))
+ obj.className += ' '+classname;
+},
+
+
+/**
+ * Setter for object event handlers
+ *
+ * @param {String} Event name
+ * @param {Function} Handler function
+ * @return Listener ID (used to remove this handler later on)
+ */
+addEventListener: function(evt, handler)
+{
+ if (this.events[evt]) {
+ var handle = this.events[evt].length;
+ this.events[evt][handle] = handler;
+ return handle;
+ }
+ else
+ return false;
+},
+
+
+/**
+ * Removes a specific event listener
+ *
+ * @param {String} Event name
+ * @param {Int} Listener ID to remove
+ */
+removeEventListener: function(evt, handle)
+{
+ if (this.events[evt] && this.events[evt][handle])
+ this.events[evt][handle] = null;
+},
+
+
+/**
+ * This will execute all registered event handlers
+ * @private
+ */
+trigger_event: function(evt, p)
+{
+ if (this.events[evt] && this.events[evt].length) {
+ for (var i=0; i=0;i--){
-if(_2a[i].id&&String(_2a[i].id).match(/rcmrow([a-z0-9\-_=]+)/i)&&this.rows[RegExp.$1]!=null){
-return RegExp.$1;
-}
-}
-}
-return null;
-},select_row:function(id,_2d,_2e){
-var _2f=this.selection.join(",");
-if(!this.multiselect){
-_2d=0;
-}
-if(!this.shift_start){
-this.shift_start=id;
-}
-if(!_2d){
-this.shift_start=id;
-this.highlight_row(id,false);
-this.multi_selecting=false;
-}else{
-switch(_2d){
-case SHIFT_KEY:
-this.shift_select(id,false);
-break;
-case CONTROL_KEY:
-if(!_2e){
-this.highlight_row(id,true);
-}
-break;
-case CONTROL_SHIFT_KEY:
-this.shift_select(id,true);
-break;
-default:
-this.highlight_row(id,false);
-break;
-}
-this.multi_selecting=true;
-}
-if(this.selection.join(",")!=_2f){
-this.trigger_event("select");
-}
-if(this.last_selected!=0&&this.rows[this.last_selected]){
-this.set_classname(this.rows[this.last_selected].obj,"focused",false);
-}
-if(this.toggleselect&&this.last_selected==id){
-this.clear_selection();
-id=null;
-}else{
-this.set_classname(this.rows[id].obj,"focused",true);
-}
-if(!this.selection.length){
-this.shift_start=null;
-}
-this.last_selected=id;
-},select:function(id){
-this.select_row(id,false);
-this.scrollto(id);
-},select_next:function(){
-var _31=this.get_next_row();
-var _32=this.get_prev_row();
-var _33=(_31)?_31:_32;
-if(_33){
-this.select_row(_33.uid,false,false);
-}
-},shift_select:function(id,_35){
-if(!this.rows[this.shift_start]||!this.selection.length){
-this.shift_start=id;
-}
-var _36=this.rows[this.shift_start].obj.rowIndex;
-var _37=this.rows[id].obj.rowIndex;
-var i=((_36<_37)?_36:_37);
-var j=((_36>_37)?_36:_37);
-for(var n in this.rows){
-if((this.rows[n].obj.rowIndex>=i)&&(this.rows[n].obj.rowIndex<=j)){
-if(!this.in_selection(n)){
-this.highlight_row(n,true);
-}
-}else{
-if(this.in_selection(n)&&!_35){
-this.highlight_row(n,true);
-}
-}
-}
-},in_selection:function(id){
-for(var n in this.selection){
-if(this.selection[n]==id){
-return true;
-}
-}
-return false;
-},select_all:function(_3d){
-if(!this.rows||!this.rows.length){
-return false;
-}
-var _3e=this.selection.join(",");
-this.clear_selection();
-for(var n in this.rows){
-if(!_3d||this.rows[n][_3d]==true){
-this.last_selected=n;
-this.highlight_row(n,true);
-}
-}
-if(this.selection.join(",")!=_3e){
-this.trigger_event("select");
-}
-this.focus();
-return true;
-},clear_selection:function(id){
-var _41=this.selection.length;
-if(id){
-for(var n=0;n1||!this.in_selection(id)){
-this.clear_selection();
-this.selection[0]=id;
-this.set_classname(this.rows[id].obj,"selected",true);
-}
-}else{
-if(this.rows[id]){
-if(!this.in_selection(id)){
-this.selection[this.selection.length]=id;
-this.set_classname(this.rows[id].obj,"selected",true);
-}else{
-var p=find_in_array(id,this.selection);
-var _46=this.selection.slice(0,p);
-var _47=this.selection.slice(p+1,this.selection.length);
-this.selection=_46.concat(_47);
-this.set_classname(this.rows[id].obj,"selected",false);
-this.set_classname(this.rows[id].obj,"unfocused",false);
-}
-}
-}
-},key_press:function(e){
-if(this.focused!=true){
-return true;
-}
-var _49=rcube_event.get_keycode(e);
-var _4a=rcube_event.get_modifier(e);
-switch(_49){
-case 40:
-case 38:
-case 63233:
-case 63232:
-rcube_event.cancel(e);
-return this.use_arrow_key(_49,_4a);
-default:
-this.shiftkey=e.shiftKey;
-this.key_pressed=_49;
-this.trigger_event("keypress");
-if(this.key_pressed==this.BACKSPACE_KEY){
-return rcube_event.cancel(e);
-}
-}
-return true;
-},key_down:function(e){
-switch(rcube_event.get_keycode(e)){
-case 40:
-case 38:
-case 63233:
-case 63232:
-if(!rcube_event.get_modifier(e)&&this.focused){
-return rcube_event.cancel(e);
-}
-default:
-}
-return true;
-},use_arrow_key:function(_4c,_4d){
-var _4e;
-if(_4c==40||_4c==63233){
-_4e=this.get_next_row();
-}else{
-if(_4c==38||_4c==63232){
-_4e=this.get_prev_row();
-}
-}
-if(_4e){
-this.select_row(_4e.uid,_4d,true);
-this.scrollto(_4e.uid);
-}
-return false;
-},scrollto:function(id){
-var row=this.rows[id].obj;
-if(row&&this.frame){
-var _51=Number(row.offsetTop);
-if(_51Number(this.frame.scrollTop)+Number(this.frame.offsetHeight)){
-this.frame.scrollTop=(_51+Number(row.offsetHeight))-Number(this.frame.offsetHeight);
-}
-}
-}
-},drag_mouse_move:function(e){
-if(this.drag_start){
-var m=rcube_event.get_mouse_pos(e);
-if(!this.drag_mouse_start||(Math.abs(m.x-this.drag_mouse_start.x)<3&&Math.abs(m.y-this.drag_mouse_start.y)<3)){
-return false;
-}
-if(!this.draglayer){
-this.draglayer=new rcube_layer("rcmdraglayer",{x:0,y:0,vis:0,zindex:2000});
-}
-var _54="";
-var c,i,_57,_58,obj;
-for(var n=0;n12){
-_54+="...";
-break;
-}
-if(this.rows[this.selection[n]].obj){
-obj=this.rows[this.selection[n]].obj;
-_58="";
-for(c=0,i=0;i=0&&this.subject_col==c))){
-_58=_57.nodeType==3?_57.data:_57.innerHTML;
-_54+=(_58.length>50?_58.substring(0,50)+"...":_58)+"
";
-break;
-}
-c++;
-}
-}
-}
-}
-this.draglayer.write(_54);
-this.draglayer.show(1);
-this.drag_active=true;
-this.trigger_event("dragstart");
-}
-if(this.drag_active&&this.draglayer){
-var pos=rcube_event.get_mouse_pos(e);
-this.draglayer.move(pos.x+20,pos.y-5);
-this.trigger_event("dragmove",e);
-}
-this.drag_start=false;
-return false;
-},drag_mouse_up:function(e){
-document.onmousemove=null;
-if(this.draglayer&&this.draglayer.visible){
-this.draglayer.show(0);
-}
-this.drag_active=false;
-this.trigger_event("dragend");
-rcube_event.remove_listener({element:document,event:"mousemove",object:this,method:"drag_mouse_move"});
-rcube_event.remove_listener({element:document,event:"mouseup",object:this,method:"drag_mouse_up"});
-var _5d=document.getElementsByTagName("IFRAME");
-for(var n in _5d){
-var _5f;
-if(_5d[n].contentDocument){
-_5f=_5d[n].contentDocument;
-}else{
-if(_5d[n].contentWindow){
-_5f=_5d[n].contentWindow.document;
-}else{
-if(_5d[n].document){
-_5f=_5d[n].document;
-}
-}
-}
-if(_5f){
-if(this.iframe_events[n]){
-if(_5f.removeEventListener){
-_5f.removeEventListener("mousemove",this.iframe_events[n],false);
-}else{
-if(_5f.detachEvent){
-_5f.detachEvent("onmousemove",this.iframe_events[n]);
-}else{
-_5f["onmousemove"]=null;
-}
-}
-}
-rcube_event.remove_listener({element:_5f,event:"mouseup",object:this,method:"drag_mouse_up"});
-}
-}
-this.focus();
-return rcube_event.cancel(e);
-},set_classname:function(obj,_61,set){
-var reg=new RegExp("s*"+_61,"i");
-if(!set&&obj.className.match(reg)){
-obj.className=obj.className.replace(reg,"");
-}else{
-if(set&&!obj.className.match(reg)){
-obj.className+=" "+_61;
-}
-}
-},addEventListener:function(evt,_65){
-if(this.events[evt]){
-var _66=this.events[evt].length;
-this.events[evt][_66]=_65;
-return _66;
-}else{
-return false;
-}
-},removeEventListener:function(evt,_68){
-if(this.events[evt]&&this.events[evt][_68]){
-this.events[evt][_68]=null;
-}
-},trigger_event:function(evt,p){
-if(this.events[evt]&&this.events[evt].length){
-for(var i=0;i |
- | Charles McNulty |
- +-----------------------------------------------------------------------+
- | Requires: common.js |
- +-----------------------------------------------------------------------+
-
- $Id: list.js 344 2006-09-18 03:49:28Z thomasb $
-*/
-
-
-/**
- * RoundCube List Widget class
- * @contructor
- */
-function rcube_list_widget(list, p)
- {
- // static contants
- this.ENTER_KEY = 13;
- this.DELETE_KEY = 46;
- this.BACKSPACE_KEY = 8;
-
- this.list = list ? list : null;
- this.frame = null;
- this.rows = [];
- this.selection = [];
- this.rowcount = 0;
-
- this.subject_col = -1;
- this.shiftkey = false;
- this.multiselect = false;
- this.multi_selecting = false;
- this.draggable = false;
- this.keyboard = false;
- this.toggleselect = false;
-
- this.dont_select = false;
- this.drag_active = false;
- this.last_selected = 0;
- this.shift_start = 0;
- this.in_selection_before = false;
- this.focused = false;
- this.drag_mouse_start = null;
- this.dblclick_time = 600;
- this.row_init = function(){};
- this.events = { click:[], dblclick:[], select:[], keypress:[], dragstart:[], dragmove:[], dragend:[] };
-
- // overwrite default paramaters
- if (p && typeof(p)=='object')
- for (var n in p)
- this[n] = p[n];
- }
-
-
-rcube_list_widget.prototype = {
-
-
-/**
- * get all message rows from HTML table and init each row
- */
-init: function()
-{
- if (this.list && this.list.tBodies[0])
- {
- this.rows = new Array();
- this.rowcount = 0;
-
- var row;
- for(var r=0; r=0; i--)
- if(rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=]+)/i) && this.rows[RegExp.$1] != null)
- return RegExp.$1;
- }
-
- return null;
-},
-
-
-/**
- * selects or unselects the proper row depending on the modifier key pressed
- */
-select_row: function(id, mod_key, with_mouse)
-{
- var select_before = this.selection.join(',');
- if (!this.multiselect)
- mod_key = 0;
-
- if (!this.shift_start)
- this.shift_start = id
-
- if (!mod_key)
- {
- this.shift_start = id;
- this.highlight_row(id, false);
- this.multi_selecting = false;
- }
- else
- {
- switch (mod_key)
- {
- case SHIFT_KEY:
- this.shift_select(id, false);
- break;
-
- case CONTROL_KEY:
- if (!with_mouse)
- this.highlight_row(id, true);
- break;
-
- case CONTROL_SHIFT_KEY:
- this.shift_select(id, true);
- break;
-
- default:
- this.highlight_row(id, false);
- break;
- }
- this.multi_selecting = true;
- }
-
- // trigger event if selection changed
- if (this.selection.join(',') != select_before)
- this.trigger_event('select');
-
- if (this.last_selected != 0 && this.rows[this.last_selected])
- this.set_classname(this.rows[this.last_selected].obj, 'focused', false);
-
- // unselect if toggleselect is active and the same row was clicked again
- if (this.toggleselect && this.last_selected == id)
- {
- this.clear_selection();
- id = null;
- }
- else
- this.set_classname(this.rows[id].obj, 'focused', true);
-
- if (!this.selection.length)
- this.shift_start = null;
-
- this.last_selected = id;
-},
-
-
-/**
- * Alias method for select_row
- */
-select: function(id)
-{
- this.select_row(id, false);
- this.scrollto(id);
-},
-
-
-/**
- * Select row next to the last selected one.
- * Either below or above.
- */
-select_next: function()
-{
- var next_row = this.get_next_row();
- var prev_row = this.get_prev_row();
- var new_row = (next_row) ? next_row : prev_row;
- if (new_row)
- this.select_row(new_row.uid, false, false);
-},
-
-
-/**
- * Perform selection when shift key is pressed
- */
-shift_select: function(id, control)
-{
- if (!this.rows[this.shift_start] || !this.selection.length)
- this.shift_start = id;
-
- var from_rowIndex = this.rows[this.shift_start].obj.rowIndex;
- var to_rowIndex = this.rows[id].obj.rowIndex;
-
- var i = ((from_rowIndex < to_rowIndex)? from_rowIndex : to_rowIndex);
- var j = ((from_rowIndex > to_rowIndex)? from_rowIndex : to_rowIndex);
-
- // iterate through the entire message list
- for (var n in this.rows)
- {
- if ((this.rows[n].obj.rowIndex >= i) && (this.rows[n].obj.rowIndex <= j))
- {
- if (!this.in_selection(n))
- this.highlight_row(n, true);
- }
- else
- {
- if (this.in_selection(n) && !control)
- this.highlight_row(n, true);
- }
- }
-},
-
-
-/**
- * Check if given id is part of the current selection
- */
-in_selection: function(id)
-{
- for(var n in this.selection)
- if (this.selection[n]==id)
- return true;
-
- return false;
-},
-
-
-/**
- * Select each row in list
- */
-select_all: function(filter)
-{
- if (!this.rows || !this.rows.length)
- return false;
-
- // reset but remember selection first
- var select_before = this.selection.join(',');
- this.clear_selection();
-
- for (var n in this.rows)
- {
- if (!filter || this.rows[n][filter]==true)
- {
- this.last_selected = n;
- this.highlight_row(n, true);
- }
- }
-
- // trigger event if selection changed
- if (this.selection.join(',') != select_before)
- this.trigger_event('select');
-
- this.focus();
-
- return true;
-},
-
-
-/**
- * Unselect selected row(s)
- */
-clear_selection: function(id)
-{
- var num_select = this.selection.length;
-
- // one row
- if (id)
- {
- for (var n=0; n 1 || !this.in_selection(id))
- {
- this.clear_selection();
- this.selection[0] = id;
- this.set_classname(this.rows[id].obj, 'selected', true);
- }
- }
- else if (this.rows[id])
- {
- if (!this.in_selection(id)) // select row
- {
- this.selection[this.selection.length] = id;
- this.set_classname(this.rows[id].obj, 'selected', true);
- }
- else // unselect row
- {
- var p = find_in_array(id, this.selection);
- var a_pre = this.selection.slice(0, p);
- var a_post = this.selection.slice(p+1, this.selection.length);
- this.selection = a_pre.concat(a_post);
- this.set_classname(this.rows[id].obj, 'selected', false);
- this.set_classname(this.rows[id].obj, 'unfocused', false);
- }
- }
-},
-
-
-/**
- * Handler for keyboard events
- */
-key_press: function(e)
-{
- if (this.focused != true)
- return true;
-
- var keyCode = rcube_event.get_keycode(e);
- var mod_key = rcube_event.get_modifier(e);
- switch (keyCode)
- {
- case 40:
- case 38:
- case 63233: // "down", in safari keypress
- case 63232: // "up", in safari keypress
- // Stop propagation so that the browser doesn't scroll
- rcube_event.cancel(e);
- return this.use_arrow_key(keyCode, mod_key);
- default:
- this.shiftkey = e.shiftKey;
- this.key_pressed = keyCode;
- this.trigger_event('keypress');
-
- if (this.key_pressed == this.BACKSPACE_KEY)
- return rcube_event.cancel(e);
- }
-
- return true;
-},
-
-/**
- * Handler for keydown events
- */
-key_down: function(e)
-{
- switch (rcube_event.get_keycode(e))
- {
- case 40:
- case 38:
- case 63233:
- case 63232:
- if (!rcube_event.get_modifier(e) && this.focused)
- return rcube_event.cancel(e);
-
- default:
- }
-
- return true;
-},
-
-
-/**
- * Special handling method for arrow keys
- */
-use_arrow_key: function(keyCode, mod_key)
-{
- var new_row;
- // Safari uses the nonstandard keycodes 63232/63233 for up/down, if we're
- // using the keypress event (but not the keydown or keyup event).
- if (keyCode == 40 || keyCode == 63233) // down arrow key pressed
- new_row = this.get_next_row();
- else if (keyCode == 38 || keyCode == 63232) // up arrow key pressed
- new_row = this.get_prev_row();
-
- if (new_row)
- {
- this.select_row(new_row.uid, mod_key, true);
- this.scrollto(new_row.uid);
- }
-
- return false;
-},
-
-
-/**
- * Try to scroll the list to make the specified row visible
- */
-scrollto: function(id)
-{
- var row = this.rows[id].obj;
- if (row && this.frame)
- {
- var scroll_to = Number(row.offsetTop);
-
- if (scroll_to < Number(this.frame.scrollTop))
- this.frame.scrollTop = scroll_to;
- else if (scroll_to + Number(row.offsetHeight) > Number(this.frame.scrollTop) + Number(this.frame.offsetHeight))
- this.frame.scrollTop = (scroll_to + Number(row.offsetHeight)) - Number(this.frame.offsetHeight);
- }
-},
-
-
-/**
- * Handler for mouse move events
- */
-drag_mouse_move: function(e)
-{
- if (this.drag_start)
- {
- // check mouse movement, of less than 3 pixels, don't start dragging
- var m = rcube_event.get_mouse_pos(e);
-
- if (!this.drag_mouse_start || (Math.abs(m.x - this.drag_mouse_start.x) < 3 && Math.abs(m.y - this.drag_mouse_start.y) < 3))
- return false;
-
- if (!this.draglayer)
- this.draglayer = new rcube_layer('rcmdraglayer', {x:0, y:0, vis:0, zindex:2000});
-
- // get subjects of selectedd messages
- var names = '';
- var c, i, node, subject, obj;
- for(var n=0; n12) // only show 12 lines
- {
- names += '...';
- break;
- }
-
- if (this.rows[this.selection[n]].obj)
- {
- obj = this.rows[this.selection[n]].obj;
- subject = '';
-
- for(c=0, i=0; i= 0 && this.subject_col == c)))
- {
- subject = node.nodeType==3 ? node.data : node.innerHTML;
- names += (subject.length > 50 ? subject.substring(0, 50)+'...' : subject) + '
';
- break;
- }
- c++;
- }
- }
- }
- }
-
- this.draglayer.write(names);
- this.draglayer.show(1);
-
- this.drag_active = true;
- this.trigger_event('dragstart');
- }
-
- if (this.drag_active && this.draglayer)
- {
- var pos = rcube_event.get_mouse_pos(e);
- this.draglayer.move(pos.x+20, pos.y-5);
- this.trigger_event('dragmove', e);
- }
-
- this.drag_start = false;
-
- return false;
-},
-
-
-/**
- * Handler for mouse up events
- */
-drag_mouse_up: function(e)
-{
- document.onmousemove = null;
-
- if (this.draglayer && this.draglayer.visible)
- this.draglayer.show(0);
-
- this.drag_active = false;
- this.trigger_event('dragend');
-
- rcube_event.remove_listener({element:document, event:'mousemove', object:this, method:'drag_mouse_move'});
- rcube_event.remove_listener({element:document, event:'mouseup', object:this, method:'drag_mouse_up'});
-
- var iframes = document.getElementsByTagName('IFRAME');
- for (var n in iframes) {
- var iframedoc;
-
- if (iframes[n].contentDocument)
- iframedoc = iframes[n].contentDocument;
- else if (iframes[n].contentWindow)
- iframedoc = iframes[n].contentWindow.document;
- else if (iframes[n].document)
- iframedoc = iframes[n].document;
-
- if (iframedoc) {
- if (this.iframe_events[n]) {
- if (iframedoc.removeEventListener)
- iframedoc.removeEventListener('mousemove', this.iframe_events[n], false);
- else if (iframedoc.detachEvent)
- iframedoc.detachEvent('onmousemove', this.iframe_events[n]);
- else
- iframedoc['onmousemove'] = null;
- }
- rcube_event.remove_listener({element:iframedoc, event:'mouseup', object:this, method:'drag_mouse_up'});
- }
- }
-
- this.focus();
-
- return rcube_event.cancel(e);
-},
-
-
-
-/**
- * set/unset a specific class name
- */
-set_classname: function(obj, classname, set)
-{
- var reg = new RegExp('\s*'+classname, 'i');
- if (!set && obj.className.match(reg))
- obj.className = obj.className.replace(reg, '');
- else if (set && !obj.className.match(reg))
- obj.className += ' '+classname;
-},
-
-
-/**
- * Setter for object event handlers
- *
- * @param {String} Event name
- * @param {Function} Handler function
- * @return Listener ID (used to remove this handler later on)
- */
-addEventListener: function(evt, handler)
-{
- if (this.events[evt]) {
- var handle = this.events[evt].length;
- this.events[evt][handle] = handler;
- return handle;
- }
- else
- return false;
-},
-
-
-/**
- * Removes a specific event listener
- *
- * @param {String} Event name
- * @param {Int} Listener ID to remove
- */
-removeEventListener: function(evt, handle)
-{
- if (this.events[evt] && this.events[evt][handle])
- this.events[evt][handle] = null;
-},
-
-
-/**
- * This will execute all registered event handlers
- * @private
- */
-trigger_event: function(evt, p)
-{
- if (this.events[evt] && this.events[evt].length) {
- for (var i=0; i and
"\t* \\1\n", // and
"\n\t* ", //
- "\n-------------------------\n", //
- "\n\n", //
+ "\n-------------------------\n", //
+ "\n\n", //
"\n", // and
"\t\t\\1\n", // and |
' ', // Non-breaking space
@@ -220,7 +219,6 @@ class html2text
'*',
'£',
'EUR', // Euro sign. ?
- '', // Unknown/unhandled entities
' ' // Runs of spaces, post-handling
);
@@ -249,11 +247,11 @@ class html2text
* @see $pre_replace
*/
var $pre_search = array(
- "/\n/",
- "/\t/",
- '/ /',
- '/]*>/',
- '/<\/pre>/'
+ "/\n/",
+ "/\t/",
+ '/ /',
+ '/]*>/',
+ '/<\/pre>/'
);
/**
@@ -264,11 +262,11 @@ class html2text
* @see $pre_search
*/
var $pre_replace = array(
- '
',
- ' ',
- ' ',
- '',
- ''
+ '
',
+ ' ',
+ ' ',
+ '',
+ ''
);
/**
@@ -344,10 +342,10 @@ class html2text
if ( !empty($source) ) {
$this->set_html($source, $from_file);
}
-
+
$this->set_base_url();
- $this->_do_links = $do_links;
- $this->width = $width;
+ $this->_do_links = $do_links;
+ $this->width = $width;
}
/**
@@ -361,10 +359,10 @@ class html2text
function set_html( $source, $from_file = false )
{
if ( $from_file && file_exists($source) ) {
- $this->html = file_get_contents($source);
+ $this->html = file_get_contents($source);
}
else
- $this->html = $source;
+ $this->html = $source;
$this->_converted = false;
}
@@ -465,15 +463,18 @@ class html2text
$text = trim(stripslashes($this->html));
- // Convert
+ // Convert
$this->_convert_pre($text);
// Run our defined search-and-replace
$text = preg_replace($this->search, $this->replace, $text);
$text = preg_replace_callback($this->callback_search, array('html2text', '_preg_callback'), $text);
- // Replace known html entities
- $text = html_entity_decode($text, ENT_COMPAT, 'UTF-8');
+ // Replace known html entities
+ $text = html_entity_decode($text, ENT_COMPAT, 'UTF-8');
+
+ // Remove unknown/unhandled entities (this cannot be done in search-and-replace block)
+ $text = preg_replace('/&[^&;]+;/i', '', $text);
// Strip any other HTML tags
$text = strip_tags($text, $this->allowed_tags);
@@ -546,11 +547,10 @@ class html2text
*/
function _convert_pre(&$text)
{
- while(preg_match('/]*>(.*)<\/pre>/ismU', $text, $matches))
- {
- $result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]);
- $text = preg_replace('/]*>.*<\/pre>/ismU', '
' . $result . '
', $text, 1);
- }
+ while(preg_match('/]*>(.*)<\/pre>/ismU', $text, $matches)) {
+ $result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]);
+ $text = preg_replace('/]*>.*<\/pre>/ismU', '
' . $result . '
', $text, 1);
+ }
}
/**
@@ -562,18 +562,17 @@ class html2text
*/
function _preg_callback($matches)
{
- switch($matches[1])
- {
- case 'b':
- case 'strong':
- return $this->_strtoupper($matches[2]);
- case 'hr':
- return $this->_strtoupper("\t\t". $matches[2] ."\n");
- case 'h':
- return $this->_strtoupper("\n\n". $matches[2] ."\n\n");
- case 'a':
- return $this->_build_link_list($matches[3], $matches[4]);
- }
+ switch($matches[1]) {
+ case 'b':
+ case 'strong':
+ return $this->_strtoupper($matches[2]);
+ case 'hr':
+ return $this->_strtoupper("\t\t". $matches[2] ."\n");
+ case 'h':
+ return $this->_strtoupper("\n\n". $matches[2] ."\n\n");
+ case 'a':
+ return $this->_build_link_list($matches[3], $matches[4]);
+ }
}
/**
@@ -585,10 +584,10 @@ class html2text
*/
function _strtoupper($str)
{
- if (function_exists('mb_strtoupper'))
- return mb_strtoupper($str);
- else
- return strtoupper($str);
+ if (function_exists('mb_strtoupper'))
+ return mb_strtoupper($str);
+ else
+ return strtoupper($str);
}
}
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 65bb54c..67a2b7b 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -53,7 +53,7 @@
- Removed some debuggers (echo ...)
File altered by Aleksander Machniak
- trim(chop()) replaced by trim()
- - added iil_Escape() with support for " and \ in folder names
+ - added iil_Escape()/iil_UnEscape() with support for " and \ in folder names
- support \ character in username in iil_C_Login()
- fixed iil_MultLine(): use iil_ReadBytes() instead of iil_ReadLine()
- fixed iil_C_FetchStructureString() to handle many literal strings in response
@@ -68,7 +68,7 @@
- iil_C_HandlePartBody(): added 6th argument and fixed endless loop
- added iil_PutLineC()
- fixed iil_C_Sort() to support very long and/or divided responses
- - added BYE response simple support for endless loop prevention
+ - added BYE/BAD response simple support for endless loop prevention
- added 3rd argument in iil_StartsWith* functions
- fix iil_C_FetchPartHeader() in some cases by use of iil_C_HandlePartBody()
- allow iil_C_HandlePartBody() to fetch whole message
@@ -76,6 +76,9 @@
- added 4th argument to iil_Connect()
- allow setting rootdir and delimiter before connect
- support multiquota result
+ - include BODYSTRUCTURE in iil_C_FetchHeaders()
+ - added iil_C_FetchMIMEHeaders() function
+ - added \* flag support
********************************************************/
@@ -112,7 +115,9 @@ $GLOBALS['IMAP_FLAGS'] = array(
'DRAFT' => '\\Draft',
'FLAGGED' => '\\Flagged',
'FORWARDED' => '$Forwarded',
- 'MDNSENT' => '$MDNSent');
+ 'MDNSENT' => '$MDNSent',
+ '*' => '\\*',
+);
$iil_error;
$iil_errornum;
@@ -163,6 +168,7 @@ class iilBasicHeader
var $flags;
var $timestamp;
var $f;
+ var $body_structure;
var $internaldate;
var $references;
var $priority;
@@ -214,6 +220,9 @@ function iil_PutLineC($fp, $string, $endln=true) {
if(preg_match('/^\{[0-9]+\}\r\n$/', $parts[$i+1])) {
$res += iil_PutLine($fp, $parts[$i].$parts[$i+1], false);
$line = iil_ReadLine($fp, 1000);
+ // handle error in command
+ if ($line[0] != '+')
+ return false;
$i++;
}
else
@@ -286,7 +295,7 @@ function iil_ReadReply($fp) {
}
function iil_ParseResult($string) {
- $a=explode(' ', $string);
+ $a = explode(' ', $string);
if (count($a) > 2) {
if (strcasecmp($a[1], 'OK') == 0) {
return 0;
@@ -301,8 +310,8 @@ function iil_ParseResult($string) {
return -4;
}
-// check if $string starts with $match
-function iil_StartsWith($string, $match, $bye=false) {
+// check if $string starts with $match (or * BYE/BAD)
+function iil_StartsWith($string, $match, $error=false) {
$len = strlen($match);
if ($len == 0) {
return false;
@@ -310,7 +319,7 @@ function iil_StartsWith($string, $match, $bye=false) {
if (strncmp($string, $match, $len) == 0) {
return true;
}
- if ($bye && strncmp($string, '* BYE ', 6) == 0) {
+ if ($error && preg_match('/^\* (BYE|BAD) /', $string)) {
return true;
}
return false;
@@ -335,6 +344,11 @@ function iil_Escape($string)
return strtr($string, array('"'=>'\\"', '\\' => '\\\\'));
}
+function iil_UnEscape($string)
+{
+ return strtr($string, array('\\"'=>'"', '\\\\' => '\\'));
+}
+
function iil_C_GetCapability(&$conn, $name)
{
if (in_array($name, $conn->capability)) {
@@ -494,6 +508,7 @@ function iil_C_NameSpace(&$conn) {
$line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) {
$i = 0;
+ $line = iil_UnEscape($line);
$data = iil_ParseNamespace2(substr($line,11), $i, 0, 0);
}
} while (!iil_StartsWith($line, 'ns1', true));
@@ -543,7 +558,7 @@ function iil_Connect($host, $user, $password, $options=null) {
}
if (empty($auth_method))
- $auth_method = 'plain';
+ $auth_method = 'check';
$message = "INITIAL: $auth_method\n";
@@ -1617,7 +1632,7 @@ function iil_IndexThreads(&$tree) {
return $t_index;
}
-function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
+function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false, $bodystr=false)
{
global $IMAP_USE_INTERNAL_DATE;
@@ -1661,7 +1676,10 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
/* FETCH uid, size, flags and headers */
$key = 'FH12';
$request = $key . ($uidfetch ? ' UID' : '') . " FETCH $message_set ";
- $request .= "(UID RFC822.SIZE FLAGS INTERNALDATE BODY.PEEK[HEADER.FIELDS ";
+ $request .= "(UID RFC822.SIZE FLAGS INTERNALDATE ";
+ if ($bodystr)
+ $request .= "BODYSTRUCTURE ";
+ $request .= "BODY.PEEK[HEADER.FIELDS ";
$request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC ";
$request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID ";
$request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])";
@@ -1670,7 +1688,9 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
return false;
}
do {
- $line = chop(iil_ReadLine($fp, 1024));
+ $line = iil_ReadLine($fp, 1024);
+ $line = iil_MultLine($fp, $line);
+
$a = explode(' ', $line);
if (($line[0] == '*') && ($a[2] == 'FETCH')) {
$id = $a[1];
@@ -1680,22 +1700,25 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
$result[$id]->subject = '';
$result[$id]->messageID = 'mid:' . $id;
+ $lines = array();
+ $ln = 0;
/*
Sample reply line:
* 321 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen)
- INTERNALDATE "16-Nov-2008 21:08:46 +0100" BODY[HEADER.FIELDS ...
+ INTERNALDATE "16-Nov-2008 21:08:46 +0100" BODYSTRUCTURE (...)
+ BODY[HEADER.FIELDS ...
*/
-
- if (preg_match('/^\* [0-9]+ FETCH \((.*) BODY\[HEADER/', $line, $matches)) {
+
+ if (preg_match('/^\* [0-9]+ FETCH \((.*) BODY/s', $line, $matches)) {
$str = $matches[1];
- //swap parents with quotes, then explode
+ // swap parents with quotes, then explode
$str = eregi_replace("[()]", "\"", $str);
$a = iil_ExplodeQuotedString(' ', $str);
- //did we get the right number of replies?
+ // did we get the right number of replies?
$parts_count = count($a);
- if ($parts_count>=8) {
+ if ($parts_count>=6) {
for ($i=0; $i<$parts_count; $i=$i+2) {
if (strcasecmp($a[$i],'UID') == 0)
$result[$id]->uid = $a[$i+1];
@@ -1707,34 +1730,6 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
$flags_str = $a[$i+1];
}
- // process flags
- $flags_str = eregi_replace('[\\\"]', '', $flags_str);
- $flags_a = explode(' ', $flags_str);
-
- if (is_array($flags_a)) {
- reset($flags_a);
- while (list(,$val)=each($flags_a)) {
- if (strcasecmp($val,'Seen') == 0) {
- $result[$id]->seen = true;
- } else if (strcasecmp($val, 'Deleted') == 0) {
- $result[$id]->deleted=true;
- } else if (strcasecmp($val, 'Recent') == 0) {
- $result[$id]->recent = true;
- } else if (strcasecmp($val, 'Answered') == 0) {
- $result[$id]->answered = true;
- } else if (strcasecmp($val, '$Forwarded') == 0) {
- $result[$id]->forwarded = true;
- } else if (strcasecmp($val, 'Draft') == 0) {
- $result[$id]->is_draft = true;
- } else if (strcasecmp($val, '$MDNSent') == 0) {
- $result[$id]->mdn_sent = true;
- } else if (strcasecmp($val, 'Flagged') == 0) {
- $result[$id]->flagged = true;
- }
- }
- $result[$id]->flags = $flags_a;
- }
-
$time_str = str_replace('"', '', $time_str);
// if time is gmt...
@@ -1761,6 +1756,27 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
$result[$id]->timestamp = $timestamp;
$result[$id]->date = $time_str;
}
+
+ // BODYSTRUCTURE
+ if($bodystr) {
+ while (!preg_match('/ BODYSTRUCTURE (.*) BODY\[HEADER.FIELDS/s', $line, $m)) {
+ $line2 = iil_ReadLine($fp, 1024);
+ $line .= iil_MultLine($fp, $line2);
+ }
+ $result[$id]->body_structure = $m[1];
+ }
+
+ // the rest of the result
+ preg_match('/ BODY\[HEADER.FIELDS \(.*\)\]\s*(.*)/s', $line, $m);
+ $reslines = explode("\n", trim($m[1], '"'));
+ // re-parse (see below)
+ foreach ($reslines as $line) {
+ if (ord($line[0])<=32) {
+ $lines[$ln] .= (empty($lines[$ln])?'':"\n").trim($line);
+ } else {
+ $lines[++$ln] = trim($line);
+ }
+ }
}
/*
@@ -1770,36 +1786,38 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
to the next valid header line.
*/
- $i = 0;
- $lines = array();
do {
$line = chop(iil_ReadLine($fp, 300), "\r\n");
- if (ord($line[0])<=32) {
- $lines[$i] .= (empty($lines[$i])?'':"\n").trim($line);
- } else {
- $i++;
- $lines[$i] = trim($line);
- }
- /*
- The preg_match below works around communigate imap, which outputs " UID )".
- Without this, the while statement continues on and gets the "FH0 OK completed" message.
- If this loop gets the ending message, then the outer loop does not receive it from radline on line 1249.
- This in causes the if statement on line 1278 to never be true, which causes the headers to end up missing
- If the if statement was changed to pick up the fh0 from this loop, then it causes the outer loop to spin
- An alternative might be:
- if (!preg_match("/:/",$line) && preg_match("/\)$/",$line)) break;
- however, unsure how well this would work with all imap clients.
- */
+ // The preg_match below works around communigate imap, which outputs " UID )".
+ // Without this, the while statement continues on and gets the "FH0 OK completed" message.
+ // If this loop gets the ending message, then the outer loop does not receive it from radline on line 1249.
+ // This in causes the if statement on line 1278 to never be true, which causes the headers to end up missing
+ // If the if statement was changed to pick up the fh0 from this loop, then it causes the outer loop to spin
+ // An alternative might be:
+ // if (!preg_match("/:/",$line) && preg_match("/\)$/",$line)) break;
+ // however, unsure how well this would work with all imap clients.
if (preg_match("/^\s*UID [0-9]+\)$/", $line)) {
break;
}
+
+ // handle FLAGS reply after headers (AOL, Zimbra?)
+ if (preg_match('/\s+FLAGS \((.*)\)\)$/', $line, $matches)) {
+ $flags_str = $matches[1];
+ break;
+ }
+
+ if (ord($line[0])<=32) {
+ $lines[$ln] .= (empty($lines[$ln])?'':"\n").trim($line);
+ } else {
+ $lines[++$ln] = trim($line);
+ }
// patch from "Maksim Rubis"
} while (trim($line[0]) != ')' && strncmp($line, $key, strlen($key)));
if (strncmp($line, $key, strlen($key))) {
- //process header, fill iilBasicHeader obj.
- // initialize
+ // process header, fill iilBasicHeader obj.
+ // initialize
if (is_array($headers)) {
reset($headers);
while (list($k, $bar) = each($headers)) {
@@ -1807,7 +1825,7 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
}
}
- // create array with header field:data
+ // create array with header field:data
while ( list($lines_key, $str) = each($lines) ) {
list($field, $string) = iil_SplitHeaderLine($str);
@@ -1881,15 +1899,45 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
} else {
$a = explode(' ', $line);
}
+
+ // process flags
+ if (!empty($flags_str)) {
+ $flags_str = eregi_replace('[\\\"]', '', $flags_str);
+ $flags_a = explode(' ', $flags_str);
+
+ if (is_array($flags_a)) {
+ reset($flags_a);
+ while (list(,$val)=each($flags_a)) {
+ if (strcasecmp($val,'Seen') == 0) {
+ $result[$id]->seen = true;
+ } else if (strcasecmp($val, 'Deleted') == 0) {
+ $result[$id]->deleted=true;
+ } else if (strcasecmp($val, 'Recent') == 0) {
+ $result[$id]->recent = true;
+ } else if (strcasecmp($val, 'Answered') == 0) {
+ $result[$id]->answered = true;
+ } else if (strcasecmp($val, '$Forwarded') == 0) {
+ $result[$id]->forwarded = true;
+ } else if (strcasecmp($val, 'Draft') == 0) {
+ $result[$id]->is_draft = true;
+ } else if (strcasecmp($val, '$MDNSent') == 0) {
+ $result[$id]->mdn_sent = true;
+ } else if (strcasecmp($val, 'Flagged') == 0) {
+ $result[$id]->flagged = true;
+ }
+ }
+ $result[$id]->flags = $flags_a;
+ }
+ }
}
} while (strcmp($a[0], $key) != 0);
return $result;
}
-function iil_C_FetchHeader(&$conn, $mailbox, $id, $uidfetch=false) {
+function iil_C_FetchHeader(&$conn, $mailbox, $id, $uidfetch=false, $bodystr=false) {
- $a = iil_C_FetchHeaders($conn, $mailbox, $id, $uidfetch);
+ $a = iil_C_FetchHeaders($conn, $mailbox, $id, $uidfetch, $bodystr);
if (is_array($a)) {
return array_shift($a);
}
@@ -2104,7 +2152,9 @@ function iil_C_Search(&$conn, $folder, $criteria) {
$c = 0;
$query = 'srch1 SEARCH ' . chop($criteria);
- iil_PutLineC($fp, $query);
+ if (!iil_PutLineC($fp, $query)) {
+ return false;
+ }
do {
$line=trim(iil_ReadLine($fp, 10000));
if (eregi("^\* SEARCH", $line)) {
@@ -2170,7 +2220,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
$line=iil_ReadLine($fp, 500);
if ($line[0] == '*') {
$line = rtrim($line);
- $a=iil_ExplodeQuotedString(' ', $line);
+ $a=iil_ExplodeQuotedString(' ', iil_UnEscape($line));
if ($a[0] == '*') {
$delimiter = str_replace('"', '', $a[count($a)-2]);
}
@@ -2180,7 +2230,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
if (strlen($delimiter)>0) {
return $delimiter;
}
-
+
//if that fails, try namespace extension
//try to fetch namespace data
iil_PutLine($conn->fp, "ns1 NAMESPACE");
@@ -2188,6 +2238,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
$line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) {
$i = 0;
+ $line = iil_UnEscape($line);
$data = iil_ParseNamespace2(substr($line,11), $i, 0, 0);
}
} while (!iil_StartsWith($line, 'ns1', true));
@@ -2366,11 +2417,51 @@ function iil_C_UnSubscribe(&$conn, $folder) {
return iil_ParseResult($line);
}
+function iil_C_FetchMIMEHeaders(&$conn, $mailbox, $id, $parts) {
+
+ $fp = $conn->fp;
+
+ if (!iil_C_Select($conn, $mailbox)) {
+ return false;
+ }
+
+ $result = false;
+ $parts = (array) $parts;
+ $key = 'fmh0';
+ $peeks = '';
+ $idx = 0;
+
+ // format request
+ foreach($parts as $part)
+ $peeks[] = "BODY[$part.MIME]";
+
+ $request = "$key FETCH $id (" . implode(' ', $peeks) . ')';
+
+ // send request
+ if (!iil_PutLine($fp, $request)) {
+ return false;
+ }
+
+ do {
+ $line = iil_ReadLine($fp, 1000);
+ $line = iil_MultLine($fp, $line);
+
+ if (preg_match('/BODY\[([0-9\.]+)\.MIME\]/', $line, $matches)) {
+ $idx = $matches[1];
+ $result[$idx] = preg_replace('/^(\* '.$id.' FETCH \()?\s*BODY\['.$idx.'\.MIME\]\s+/', '', $line);
+ $result[$idx] = trim($result[$idx], '"');
+ $result[$idx] = rtrim($result[$idx], "\t\r\n\0\x0B");
+ }
+ } while (!iil_StartsWith($line, $key, true));
+
+ return $result;
+}
+
function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
$part = empty($part) ? 'HEADER' : $part.'.MIME';
- return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1);
+ return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1);
}
function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part='', $mode=1, $file=NULL) {
@@ -2429,7 +2520,8 @@ function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part='', $mode=1, $file=NU
$len = $to - $from;
$sizeStr = substr($line, $from, $len);
$bytes = (int)$sizeStr;
-
+ $prev = '';
+
while ($bytes > 0) {
$line = iil_ReadLine($fp, 1024);
$len = strlen($line);
@@ -2439,14 +2531,27 @@ function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part='', $mode=1, $file=NU
}
$bytes -= strlen($line);
+ $line = rtrim($line, "\t\r\n\0\x0B");
+
if ($mode == 1) {
if ($file)
- fwrite($file, rtrim($line, "\t\r\n\0\x0B") . "\n");
+ fwrite($file, $line . "\n");
else
- $result .= rtrim($line, "\t\r\n\0\x0B") . "\n";
+ $result .= $line . "\n";
} else if ($mode == 2) {
- echo rtrim($line, "\t\r\n\0\x0B") . "\n";
+ echo $line . "\n";
} else if ($mode == 3) {
+ // create chunks with proper length for base64 decoding
+ $line = $prev.$line;
+ $length = strlen($line);
+ if ($length % 4) {
+ $length = floor($length / 4) * 4;
+ $prev = substr($line, $length);
+ $line = substr($line, 0, $length);
+ }
+ else
+ $prev = '';
+
if ($file)
fwrite($file, base64_decode($line));
else
diff --git a/program/lib/tnef_decoder.inc b/program/lib/tnef_decoder.inc
new file mode 100644
index 0000000..f9b7c36
--- /dev/null
+++ b/program/lib/tnef_decoder.inc
@@ -0,0 +1,352 @@
+
+ * (c) 2002 (GNU GPL - see ../../COPYING)
+ *
+ * Functions for decoding TNEF attachments in native PHP
+ *
+ * Adapted from original designs by:
+ * Thomas Boll [tnef.c]
+ * Mark Simpson [tnef-1.1.1]
+ *
+ */
+
+define("TNEF_SIGNATURE", 0x223e9f78);
+define("TNEF_LVL_MESSAGE", 0x01);
+define("TNEF_LVL_ATTACHMENT", 0x02);
+
+define("TNEF_STRING", 0x00010000);
+define("TNEF_TEXT", 0x00020000);
+define("TNEF_BYTE", 0x00060000);
+define("TNEF_WORD", 0x00070000);
+define("TNEF_DWORD", 0x00080000);
+
+define("TNEF_ASUBJECT", TNEF_DWORD | 0x8004);
+define("TNEF_AMCLASS", TNEF_WORD | 0x8008);
+define("TNEF_BODYTEXT", TNEF_TEXT | 0x800c);
+define("TNEF_ATTACHDATA", TNEF_BYTE | 0x800f);
+define("TNEF_AFILENAME", TNEF_STRING | 0x8010);
+define("TNEF_ARENDDATA", TNEF_BYTE | 0x9002);
+define("TNEF_AMAPIATTRS", TNEF_BYTE | 0x9005);
+define("TNEF_AVERSION", TNEF_DWORD | 0x9006);
+
+define("TNEF_MAPI_NULL", 0x0001);
+define("TNEF_MAPI_SHORT", 0x0002);
+define("TNEF_MAPI_INT", 0x0003);
+define("TNEF_MAPI_FLOAT", 0x0004);
+define("TNEF_MAPI_DOUBLE", 0x0005);
+define("TNEF_MAPI_CURRENCY", 0x0006);
+define("TNEF_MAPI_APPTIME", 0x0007);
+define("TNEF_MAPI_ERROR", 0x000a);
+define("TNEF_MAPI_BOOLEAN", 0x000b);
+define("TNEF_MAPI_OBJECT", 0x000d);
+define("TNEF_MAPI_INT8BYTE", 0x0014);
+define("TNEF_MAPI_STRING", 0x001e);
+define("TNEF_MAPI_UNICODE_STRING", 0x001f);
+define("TNEF_MAPI_SYSTIME", 0x0040);
+define("TNEF_MAPI_CLSID", 0x0048);
+define("TNEF_MAPI_BINARY", 0x0102);
+
+define("TNEF_MAPI_ATTACH_MIME_TAG", 0x370E);
+define("TNEF_MAPI_ATTACH_LONG_FILENAME", 0x3707);
+define("TNEF_MAPI_ATTACH_DATA", 0x3701);
+
+function tnef_getx($size, &$buf)
+{
+ $value = null;
+ if (strlen($buf) >= $size)
+ {
+ $value = substr($buf, 0, $size);
+ $buf = substr_replace($buf, '', 0, $size);
+ }
+ return $value;
+}
+
+function tnef_geti8(&$buf)
+{
+ $value = null;
+ if (strlen($buf) >= 1)
+ {
+ $value = ord($buf{0});
+ $buf = substr_replace($buf, '', 0, 1);
+ }
+ return $value;
+}
+
+function tnef_geti16(&$buf)
+{
+ $value = null;
+ if (strlen($buf) >= 2)
+ {
+ $value = ord($buf{0}) +
+ (ord($buf{1}) << 8);
+ $buf = substr_replace($buf, '', 0, 2);
+ }
+ return $value;
+}
+
+function tnef_geti32(&$buf)
+{
+ $value = null;
+ if (strlen($buf) >= 4)
+ {
+ $value = ord($buf{0}) +
+ (ord($buf{1}) << 8) +
+ (ord($buf{2}) << 16) +
+ (ord($buf{3}) << 24);
+ $buf = substr_replace($buf, '', 0, 4);
+ }
+ return $value;
+}
+
+function tnef_decode_attribute($attribute, &$buf)
+{
+ global $debug, $download;
+
+ $length = tnef_geti32($buf);
+ $value = tnef_getx($length, $buf); //data
+ tnef_geti16($buf); //checksum
+
+ if ($debug)
+ {
+ printf("ATTRIBUTE[%08x] %d bytes\n", $attribute, $length);
+ }
+
+ switch($attribute)
+ {
+ case TNEF_BODYTEXT:
+ if (!$download)
+ {
+ printf("Embedded message:%s
",$value);
+ }
+ break;
+
+ default:
+ }
+}
+
+function extract_mapi_attrs($buf, &$attachment_data)
+{
+ global $debug;
+
+ tnef_geti32($buf); // number of attributes
+ while(strlen($buf) > 0)
+ {
+ $value = null;
+ $length = 0;
+ $attr_type = tnef_geti16($buf);
+ $attr_name = tnef_geti16($buf);
+ if ($debug)
+ {
+ printf("mapi attribute: %04x:%04x\n", $attr_type, $attr_name);
+ }
+ switch($attr_type)
+ {
+ case TNEF_MAPI_SHORT:
+ $value = tnef_geti16($buf);
+ break;
+
+ case TNEF_MAPI_INT:
+ case TNEF_MAPI_BOOLEAN:
+ $value = tnef_geti32($buf);
+ break;
+
+ case TNEF_MAPI_FLOAT:
+ $value = tnef_getx(4, $buf);
+ break;
+
+ case TNEF_MAPI_DOUBLE:
+ case TNEF_MAPI_SYSTIME:
+ $value = tnef_getx(8, $buf);
+ break;
+
+ case TNEF_MAPI_STRING:
+ case TNEF_MAPI_UNICODE_STRING:
+ case TNEF_MAPI_BINARY:
+ case TNEF_MAPI_OBJECT:
+ $num_vals = tnef_geti32($buf);
+ for ($i = 0; $i < $num_vals; $i++) // usually just 1
+ {
+ $length = tnef_geti32($buf);
+ $buflen = $length + ((4 - ($length % 4)) % 4); // pad to next 4 byte boundary
+ $value = substr(tnef_getx($buflen, $buf), 0, $length); // read and truncate to length
+ }
+ break;
+
+ default:
+ if ($debug)
+ {
+ echo("Unknown mapi attribute!\n");
+ }
+ }
+
+ // store any interesting attributes
+ switch($attr_name)
+ {
+ case TNEF_MAPI_ATTACH_LONG_FILENAME: // used in preference to AFILENAME value
+ $attachment_data[0]['name'] = ereg_replace('.*[\/](.*)$', '\1', $value); // strip path
+ break;
+
+ case TNEF_MAPI_ATTACH_MIME_TAG: // Is this ever set, and what is format?
+ $attachment_data[0]['type0'] = ereg_replace('^(.*)/.*', '\1', $value);
+ $attachment_data[0]['type1'] = ereg_replace('.*/(.*)$', '\1', $value);
+ break;
+
+ case TNEF_MAPI_ATTACH_DATA:
+ tnef_getx(16, $value); // skip the next 16 bytes (unknown data)
+ array_shift($attachment_data); // eliminate the current (bogus) attachment
+ do_tnef_decode($value, $attachment_data); // recursively process the attached message
+ break;
+
+ default:
+ }
+ }
+}
+
+function tnef_decode_message(&$buf)
+{
+ global $debug;
+
+ if ($debug)
+ {
+ echo("MESSAGE ");
+ }
+
+ $attribute = tnef_geti32($buf);
+ tnef_decode_attribute($attribute, $buf);
+}
+
+function tnef_decode_attachment(&$buf, &$attachment_data)
+{
+ global $debug;
+
+ if ($debug)
+ {
+ echo("ATTACHMENT ");
+ }
+
+ $attribute = tnef_geti32($buf);
+ switch($attribute)
+ {
+ case TNEF_ARENDDATA: // marks start of new attachment
+ $length = tnef_geti32($buf);
+ tnef_getx($length, $buf);
+ tnef_geti16($buf); //checksum
+ if ($debug)
+ {
+ printf("ARENDDATA[%08x]: %d bytes\n", $attribute, $length);
+ }
+ // add a new default data block to hold details of this attachment
+ // reverse order is easier to handle later!
+ array_unshift($attachment_data, array('type0' => 'application',
+ 'type1' => 'octet-stream',
+ 'name' => 'unknown',
+ 'stream' => ''));
+ break;
+
+ case TNEF_AFILENAME: // filename
+ $length = tnef_geti32($buf);
+ $attachment_data[0]['name'] = ereg_replace('.*[\/](.*)$',
+ '\1',
+ tnef_getx($length, $buf)); // strip path
+ tnef_geti16($buf); //checksum
+ if ($debug)
+ {
+ printf("AFILENAME[%08x]: %s\n", $attribute, $attachment_data[0]['name']);
+ }
+ break;
+
+ case TNEF_ATTACHDATA: // the attachment itself
+ $length = tnef_geti32($buf);
+ $attachment_data[0]['size'] = $length;
+ $attachment_data[0]['stream'] = tnef_getx($length, $buf);
+ tnef_geti16($buf); //checksum
+ if ($debug)
+ {
+ printf("ATTACHDATA[%08x]: %d bytes\n", $attribute, $length);
+ }
+ break;
+
+ case TNEF_AMAPIATTRS:
+ $length = tnef_geti32($buf);
+ $value = tnef_getx($length, $buf);
+ tnef_geti16($buf); //checksum
+ if ($debug)
+ {
+ printf("AMAPIATTRS[%08x]: %d bytes\n", $attribute, $length);
+ }
+ extract_mapi_attrs($value, $attachment_data);
+ break;
+
+ default:
+ tnef_decode_attribute($attribute, $buf);
+ }
+}
+
+function do_tnef_decode(&$buf, &$attachment_data)
+{
+ global $debug;
+
+ $tnef_signature = tnef_geti32($buf);
+ if ($tnef_signature == TNEF_SIGNATURE)
+ {
+ $tnef_key = tnef_geti16($buf);
+ if ($debug)
+ {
+ printf("Signature: 0x%08x\nKey: 0x%04x\n", $tnef_signature, $tnef_key);
+ }
+
+ while (strlen($buf) > 0)
+ {
+ $lvl_type = tnef_geti8($buf);
+ switch($lvl_type)
+ {
+ case TNEF_LVL_MESSAGE:
+ tnef_decode_message($buf);
+ break;
+
+ case TNEF_LVL_ATTACHMENT:
+ tnef_decode_attachment($buf, $attachment_data);
+ break;
+
+ default:
+ if ($debug)
+ {
+ echo("Invalid file format!");
+ }
+ break 2;
+ }
+ }
+ }
+ else
+ {
+ if ($debug)
+ {
+ echo("Invalid file format!");
+ }
+ }
+}
+
+function tnef_decode($buf)
+{
+ global $debug;
+
+ $attachment_data = array();
+
+ if ($debug)
+ {
+ echo("");
+ }
+
+ do_tnef_decode($buf, $attachment_data);
+
+ if ($debug)
+ {
+ echo("
");
+ }
+ return array_reverse($attachment_data);
+
+}
+
+?>
\ No newline at end of file
diff --git a/program/lib/washtml.php b/program/lib/washtml.php
index de3b55e..338baec 100644
--- a/program/lib/washtml.php
+++ b/program/lib/washtml.php
@@ -80,7 +80,7 @@ class washtml
static $ignore_elements = array('html', 'head', 'body');
/* Allowed HTML attributes */
- static $html_attribs = array('name', 'class', 'title', 'alt', 'width', 'height', 'align', 'nowrap', 'col', 'row', 'id', 'rowspan', 'colspan', 'cellspacing', 'cellpadding', 'valign', 'bgcolor', 'color', 'border', 'bordercolorlight', 'bordercolordark', 'face', 'marginwidth', 'marginheight', 'axis', 'border', 'abbr', 'char', 'charoff', 'clear', 'compact', 'coords', 'vspace', 'hspace', 'cellborder', 'size', 'lang', 'dir', 'background');
+ static $html_attribs = array('name', 'class', 'title', 'alt', 'width', 'height', 'align', 'nowrap', 'col', 'row', 'id', 'rowspan', 'colspan', 'cellspacing', 'cellpadding', 'valign', 'bgcolor', 'color', 'border', 'bordercolorlight', 'bordercolordark', 'face', 'marginwidth', 'marginheight', 'axis', 'border', 'abbr', 'char', 'charoff', 'clear', 'compact', 'coords', 'vspace', 'hspace', 'cellborder', 'size', 'lang', 'dir');
/* State for linked objects in HTML */
public $extlinks = false;
@@ -160,21 +160,21 @@ class washtml
$key = strtolower($key);
$value = $node->getAttribute($key);
if(isset($this->_html_attribs[$key]) ||
- ($key == 'href' && preg_match('/^(http|https|ftp|mailto):.*/i', $value)))
+ ($key == 'href' && preg_match('/^(http|https|ftp|mailto):.+/i', $value)))
$t .= ' ' . $key . '="' . htmlspecialchars($value, ENT_QUOTES) . '"';
else if($key == 'style' && ($style = $this->wash_style($value)))
$t .= ' style="' . $style . '"';
- else if($key == 'src' && strtolower($node->tagName) == 'img') { //check tagName anyway
+ else if($key == 'background' || ($key == 'src' && strtolower($node->tagName) == 'img')) { //check tagName anyway
if($src = $this->config['cid_map'][$value]) {
$t .= ' ' . $key . '="' . htmlspecialchars($src, ENT_QUOTES) . '"';
}
- else if(preg_match('/^(http|https|ftp):.*/i', $value)) {
+ else if(preg_match('/^(http|https|ftp):.+/i', $value)) {
if($this->config['allow_remote'])
$t .= ' ' . $key . '="' . htmlspecialchars($value, ENT_QUOTES) . '"';
else {
$this->extlinks = true;
if ($this->config['blocked_src'])
- $t .= ' src="' . htmlspecialchars($this->config['blocked_src'], ENT_QUOTES) . '"';
+ $t .= ' ' . $key . '="' . htmlspecialchars($this->config['blocked_src'], ENT_QUOTES) . '"';
}
}
} else
diff --git a/program/localization/ar_SA/labels.inc b/program/localization/ar_SA/labels.inc
index e3ec37f..3e1cf09 100644
--- a/program/localization/ar_SA/labels.inc
+++ b/program/localization/ar_SA/labels.inc
@@ -6,14 +6,14 @@
| language/ar_SA/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Ossama Khayat |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ar_SA/messages.inc b/program/localization/ar_SA/messages.inc
index 696c400..03730d3 100644
--- a/program/localization/ar_SA/messages.inc
+++ b/program/localization/ar_SA/messages.inc
@@ -6,14 +6,14 @@
| language/ar_SA/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Ossama Khayat |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2102 2008-12-01 10:46:11Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ast/labels.inc b/program/localization/ast/labels.inc
new file mode 100644
index 0000000..01afbd9
--- /dev/null
+++ b/program/localization/ast/labels.inc
@@ -0,0 +1,330 @@
+ |
+| http://blogs.altuxa.com/gyg |
+| http://softastur.org |
++-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 2124 2009-02-02 03:55:53Z mikelg $
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = 'Bienllegáu a $product';
+$labels['username'] = 'Usuariu';
+$labels['password'] = 'Clave';
+$labels['server'] = 'Sirvidor';
+$labels['login'] = 'Entrar';
+
+// taskbar
+$labels['logout'] = 'Zarrar';
+$labels['mail'] = 'Corréu';
+$labels['settings'] = 'Preferencies personales';
+$labels['addressbook'] = 'Llibru de direiciones';
+
+// mailbox names
+$labels['inbox'] = 'Entrantes';
+$labels['drafts'] = 'Borradores';
+$labels['sent'] = 'Unviaos';
+$labels['trash'] = 'Papelera';
+$labels['junk'] = 'Puxarra';
+
+// message listing
+$labels['subject'] = 'Asuntu';
+$labels['from'] = 'De';
+$labels['to'] = 'Pa';
+$labels['cc'] = 'Copia';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Contestar a';
+$labels['date'] = 'Fecha';
+$labels['size'] = 'Tamañu';
+$labels['priority'] = 'Prioridá';
+$labels['organization'] = 'Organización';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'Carpetes';
+$labels['messagesfromto'] = 'Mensaxes del $from a $to de $count';
+$labels['messagenrof'] = 'Mensaxe $nr de $count';
+
+$labels['moveto'] = 'mover pa...';
+$labels['download'] = 'baxar';
+
+$labels['filename'] = 'Nome del Ficheru';
+$labels['filesize'] = 'Tamañu del ficheru';
+
+$labels['preferhtml'] = 'Amosar HTML';
+$labels['htmlmessage'] = 'Mensaxe HTML';
+$labels['prettydate'] = 'Fecha prestosa';
+
+$labels['addtoaddressbook'] = 'Amestar al llibru de direiciones';
+
+// weekdays short
+$labels['sun'] = 'Dom';
+$labels['mon'] = 'Llu';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mie';
+$labels['thu'] = 'Xue';
+$labels['fri'] = 'Vie';
+$labels['sat'] = 'Sab';
+
+// weekdays long
+$labels['sunday'] = 'Domingu';
+$labels['monday'] = 'Llunes';
+$labels['tuesday'] = 'Martes';
+$labels['wednesday'] = 'Miércoles';
+$labels['thursday'] = 'Xueves';
+$labels['friday'] = 'Vienres';
+$labels['saturday'] = 'Sábadu';
+
+// months short
+$labels['jan'] = 'Xin';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Abr';
+$labels['may'] = 'May';
+$labels['jun'] = 'Xun';
+$labels['jul'] = 'Xnt';
+$labels['aug'] = 'Ago';
+$labels['sep'] = 'Set';
+$labels['oct'] = 'Och';
+$labels['nov'] = 'Pay';
+$labels['dec'] = 'Avi';
+
+// months long
+$labels['longjan'] = 'Xineru';
+$labels['longfeb'] = 'Febreru';
+$labels['longmar'] = 'Marzu';
+$labels['longapr'] = 'Abril';
+$labels['longmay'] = 'Mayu';
+$labels['longjun'] = 'Xunu';
+$labels['longjul'] = 'Xunetu';
+$labels['longaug'] = 'Agostu';
+$labels['longsep'] = 'Setiembre';
+$labels['longoct'] = 'Ochobre';
+$labels['longnov'] = 'Payares';
+$labels['longdec'] = 'Avientu';
+
+$labels['today'] = 'Güei';
+
+// toolbar buttons
+$labels['checkmail'] = 'Buscar mensaxes nuevos';
+$labels['writenewmessage'] = 'Facer un mensaxe nuevu';
+$labels['replytomessage'] = 'Contestar al mensaxe';
+$labels['replytoallmessage'] = 'Contestar a toos';
+$labels['forwardmessage'] = 'Reunviar mensaxe';
+$labels['deletemessage'] = 'Desaniciar mensaxe';
+$labels['movemessagetotrash'] = 'Mover mensaxe a la papelera';
+$labels['printmessage'] = 'Imprentar esti mensaxe';
+$labels['previousmessage'] = 'Amosar el mensaxe anterior';
+$labels['previousmessages'] = 'Amosar grupu de mensaxes anterior';
+$labels['firstmessage'] = 'Amosar primer mensaxe';
+$labels['firstmessages'] = 'Amosar primer grupu de mensaxes';
+$labels['nextmessage'] = 'Amosar el mensaxe siguiente';
+$labels['nextmessages'] = 'Amosar grupu de mensaxes que siguientes';
+$labels['lastmessage'] = 'Amosar l\'últimu mensaxe';
+$labels['lastmessages'] = 'Amosar l\'últimu grupu de mensaxes';
+$labels['backtolist'] = 'Tornar a la llista de mensaxes';
+$labels['viewsource'] = 'Amosar el códigu';
+$labels['markmessages'] = 'Marcar mensaxes';
+$labels['markread'] = 'Como lleÃu';
+$labels['markunread'] = 'Como non lleÃu';
+$labels['markflagged'] = 'Como marcáu';
+$labels['markunflagged'] = 'Como non marcáu';
+
+$labels['select'] = 'Escueye';
+$labels['all'] = 'Toos';
+$labels['none'] = 'Nengún';
+$labels['unread'] = 'Ensin lleer';
+$labels['flagged'] = 'Marcáu';
+$labels['unanswered'] = 'Ensin contestar';
+$labels['filter'] = 'Filtru';
+
+$labels['compact'] = 'Compautar';
+$labels['empty'] = 'Vaciar';
+$labels['purge'] = 'Desaniciar';
+
+$labels['quota'] = 'Espaciu en discu';
+$labels['unknown'] = 'desconocÃu';
+$labels['unlimited'] = 'ensin llÃmite';
+
+$labels['quicksearch'] = 'Búsqueda rápida';
+$labels['resetsearch'] = 'Anovar la búsqueda';
+
+$labels['openinextwin'] = 'Abrir en una ventana nueva';
+
+// message compose
+$labels['compose'] = 'Escribir un mensaxe';
+$labels['savemessage'] = 'Guardar como borrador';
+$labels['sendmessage'] = 'Unviar el mensaxe yá';
+$labels['addattachment'] = 'Amestar un archivu';
+$labels['charset'] = 'Codificación';
+$labels['editortype'] = 'Tipo d\'editor';
+$labels['returnreceipt'] = 'Avisu de recibu';
+
+$labels['checkspelling'] = 'Revisar ortografÃa';
+$labels['resumeediting'] = 'Siguir cola edición';
+$labels['revertto'] = 'Desfacer a';
+
+$labels['attachments'] = 'Axuntos';
+$labels['upload'] = 'Xubir';
+$labels['close'] = 'Zarrar';
+
+$labels['low'] = 'Baxu';
+$labels['lowest'] = 'Mui baxu';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Altu';
+$labels['highest'] = 'Mui altu';
+
+$labels['nosubject'] = '(ensin asuntu)';
+$labels['showimages'] = 'Amosar imáxenes';
+$labels['alwaysshow'] = 'Amosar siempre les imáxenes de $sender';
+
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Testu';
+$labels['savesentmessagein'] = 'Guardar mensaxe unviau en';
+$labels['dontsave'] = 'Desanicialu';
+$labels['maxuploadsize'] = 'El tamañu másimu pa un ficheru ye $size';
+
+$labels['addcc'] = 'Amestar Cc';
+$labels['addbcc'] = 'Amestar Bcc';
+$labels['addreplyto'] = 'Amestar Rempuesta pa';
+
+// mdn
+$labels['mdnrequest'] = 'El qu\'unvia esti mensaxe quier que lo avises cuando lleas el corréu. ¿Quies avisalo?';
+$labels['receiptread'] = 'Avisu de llectura';
+$labels['yourmessage'] = 'Esto ye un avisu de llectura del to mensaxe';
+$labels['receiptnote'] = 'Nota: Esti avisu namás quier dicir que\'l to mensaxe amosoÅe nel equipu del receptor. Nun hai forma de garantizate que lo lleera o que pescanciara\'l to mensaxe.';
+
+// address boook
+$labels['name'] = 'Nome completu';
+$labels['firstname'] = 'Nome';
+$labels['surname'] = 'ApellÃu';
+$labels['email'] = 'Corréu';
+
+$labels['addcontact'] = 'Amestar contautu nuevu';
+$labels['editcontact'] = 'Editar contautu';
+
+$labels['edit'] = 'Editar';
+$labels['cancel'] = 'Encaboxar';
+$labels['save'] = 'Guardar';
+$labels['delete'] = 'Desaniciar';
+
+$labels['newcontact'] = 'Facer un contautu nuevu';
+$labels['deletecontact'] = 'Desaniciar los contautos marcaos';
+$labels['composeto'] = 'Unviar mensaxe a';
+$labels['contactsfromto'] = 'Contautos $from a $to de $count';
+$labels['print'] = 'Imprentar';
+$labels['export'] = 'Esportar';
+$labels['exportvcards'] = 'Esportar contautos en formatu vCard';
+
+$labels['previouspage'] = 'Amosar grupu anterior';
+$labels['firstpage'] = 'Amosar primer grupu';
+$labels['nextpage'] = 'Amosar siguiente grupu';
+$labels['lastpage'] = 'Amosar l\'últimu grupu';
+
+$labels['groups'] = 'Grupos';
+$labels['personaladrbook'] = 'Direiciones personales';
+
+$labels['import'] = 'Importar';
+$labels['importcontacts'] = 'Importar contautos';
+$labels['importfromfile'] = 'Importar dende un ficheru:';
+$labels['importreplace'] = 'Trocar el llibru de direiciones enteru';
+$labels['importtext'] = 'Puedes xubir direcione d\'un llibr que yá tengas.
Anguaño puedes importar direiciones en formatu vCard.';
+$labels['done'] = 'Fecho';
+
+// settings
+$labels['settingsfor'] = 'Configuración pa';
+
+$labels['preferences'] = 'Preferencies';
+$labels['userpreferences'] = 'Preferencies d\'usuariu';
+$labels['editpreferences'] = 'Editar preferencies d\'usuariu';
+
+$labels['identities'] = 'Identidaes';
+$labels['manageidentities'] = 'Remanar identidaes pa esta cuenta';
+$labels['newidentity'] = 'Identidad nueva';
+
+$labels['newitem'] = 'Nuevu';
+$labels['edititem'] = 'Editar';
+
+$labels['setdefault'] = 'Escoyer opción preferÃda';
+$labels['autodetect'] = 'Escoyer automáticamente';
+$labels['language'] = 'Idioma';
+$labels['timezone'] = 'Franxa horaria';
+$labels['pagesize'] = 'Fileres per páxina';
+$labels['signature'] = 'Firma';
+$labels['dstactive'] = 'Cambéu horariu';
+$labels['htmleditor'] = 'Facer el mensaxe n\'HTML';
+$labels['htmlsignature'] = 'Firma HTML';
+$labels['previewpane'] = 'Entever';
+$labels['skin'] = 'Estilu';
+$labels['logoutclear'] = 'Vaciar la papelera al zarrar la sesión';
+$labels['logoutcompact'] = 'Compautar la bandexa d\'entrada al zarrar la sesión';
+$labels['uisettings'] = 'Interfaz d\'usuariu';
+$labels['serversettings'] = 'Configuración del sirvidor';
+$labels['mailboxview'] = 'Vista del buzón';
+$labels['mdnrequests'] = 'Avisos d\'unvios';
+$labels['askuser'] = 'preguntar al usuariu';
+$labels['autosend'] = 'unviar de secute';
+$labels['ignore'] = 'ignoralos';
+$labels['readwhendeleted'] = 'Marcar el mensaxe como lleÃu al desanicialu';
+$labels['flagfordeletion'] = 'Marcar el mensaxe pa desaniciase en cuenta de desanicialu dafechu';
+$labels['skipdeleted'] = 'Nun amosar los mensaxes desaniciaos';
+$labels['showremoteimages'] = 'Amosar imáxenes remotes';
+$labels['fromknownsenders'] = 'de contautos conocÃos';
+$labels['always'] = 'siempre';
+$labels['showinlineimages'] = 'Amosar imáxenes axuntes embaxu\'l mensaxe';
+$labels['autosavedraft'] = 'Guardar borrador de secute';
+$labels['everynminutes'] = 'cada $n minutos';
+$labels['keepaliveevery'] = 'cada $n minutu/os';
+$labels['keepalive'] = 'Guetar mensaxes nuevos cada';
+$labels['never'] = 'nunca';
+$labels['messagesdisplaying'] = 'Vista de mensaxes';
+$labels['messagescomposition'] = 'Edición de mensaxes';
+$labels['mimeparamfolding'] = 'Nomes d\'axuntos';
+$labels['2231folding'] = 'Too RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Too RFC 2047 (otros)';
+$labels['advancedoptions'] = 'Opciones avanzaes';
+$labels['focusonnewmessage'] = 'Poner el focu nos mensaxes nuevos';
+$labels['checkallfolders'] = 'Guetar mensaxes nuevos en toles bandexes';
+
+$labels['folder'] = 'Bandexa';
+$labels['folders'] = 'Bandexes';
+$labels['foldername'] = 'Nome de bandexa';
+$labels['subscribed'] = 'Soscrita';
+$labels['messagecount'] = 'Mensaxes';
+$labels['create'] = 'Facer';
+$labels['createfolder'] = 'Facer una bandexa nueva';
+$labels['rename'] = 'Renomar';
+$labels['renamefolder'] = 'Renomar bandexa';
+$labels['deletefolder'] = 'Desaniciar bandexa';
+$labels['managefolders'] = 'Alministrar bandexes';
+$labels['specialfolders'] = 'Bandexes especiales';
+
+$labels['sortby'] = 'Ordenar por';
+$labels['sortasc'] = 'Orden ascendente';
+$labels['sortdesc'] = 'Orden descendente';
+
+// units
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
+
+//personalizau
+$labels['anu'] = date(Y);
+?>
diff --git a/program/localization/ast/messages.inc b/program/localization/ast/messages.inc
new file mode 100644
index 0000000..63f5057
--- /dev/null
+++ b/program/localization/ast/messages.inc
@@ -0,0 +1,100 @@
+ |
+| http://blogs.altuxa.com/gyg |
+| http://softastur.org |
++-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 2036 2009-02-02 04:37:58Z mikelg $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'La clave nun val';
+$messages['cookiesdisabled'] = 'El to navegador nun acepta "cookies"';
+$messages['sessionerror'] = 'La to sesión nun val';
+$messages['imaperror'] = 'Fallu de conexón col sirvidor IMAP';
+$messages['nomessagesfound'] = 'Nun doi con mensaxes';
+$messages['loggedout'] = 'Zarraste la sesión.';
+$messages['mailboxempty'] = 'La to cuenta nun tien mensaxes';
+$messages['loading'] = 'Cargando...';
+$messages['loadingdata'] = 'Cargando datos...';
+$messages['checkingmail'] = 'A la gueta de mensaxes nuevos...';
+$messages['sendingmessage'] = 'Unviando mensaxe...';
+$messages['messagesent'] = 'Unviose\'l mensaxe';
+$messages['savingmessage'] = 'Guardar mensaxe...';
+$messages['messagesaved'] = 'El mensaxe guardóse en borradores';
+$messages['successfullysaved'] = 'Guardose correchamente';
+$messages['addedsuccessfully'] = 'El contautu amestose correchamente a la llibreta de direiciones';
+$messages['contactexists'] = 'Yá hai un contuaut con es direición de corréu';
+$messages['blockedimages'] = 'Pa protexer la to privacidá, torgáronse les imáxenes esternes n\'esti mensaxe';
+$messages['encryptedmessage'] = 'Esti ye un mensaxe cifráu y nun soi a amosalu.';
+$messages['nocontactsfound'] = 'Nun doi con nengún contautu';
+$messages['contactnotfound'] = 'Nun doi col contautu que pides';
+$messages['sendingfailed'] = 'Falló l\'unvio del mensaxe';
+$messages['senttooquickly'] = 'Por favor espera $sec segundu/os enantes d\'unviar esti mensaxe.';
+$messages['errorsavingsent'] = 'Di con un fallu al guardar el mensaxe';
+$messages['errorsaving'] = 'Falló al guardase';
+$messages['errormoving'] = 'Nun fui a mover el mensaxe';
+$messages['errordeleting'] = 'Nun fui a desaniciar el mensaxe';
+$messages['deletecontactconfirm'] = '¿Tas seguru de desaniciar los contautos que marcaste?';
+$messages['deletemessagesconfirm'] = '¿Tas seguru de desaniciar los mensaxes que marcaste?';
+$messages['deletefolderconfirm'] = '¿Tas seguru de desaniciar esta bandexa?';
+$messages['purgefolderconfirm'] = '¿Tas seguru de desaniciar tolos mensaxes d\'esta bandexa?';
+$messages['foldercreating'] = 'Faciendo la bandexa...';
+$messages['folderdeleting'] = 'Desaniciando la bandexa...';
+$messages['folderrenaming'] = 'Renomando la bandexa...';
+$messages['foldermoving'] = 'Moviendo la bandexa...';
+$messages['formincomplete'] = 'Tienes de rellenar tolos campos del formulariu';
+$messages['noemailwarning'] = 'Por favor, dame un corréu válidu';
+$messages['nonamewarning'] = 'Por favor, dame\'l to nome';
+$messages['nopagesizewarning'] = 'Por favor, dame un tamañu de páxina';
+$messages['nosenderwarning'] = 'Por favor dame un corréu dende donde unviar mesaxes';
+$messages['norecipientwarning'] = 'Por favor, dame polo menos un destinatariu';
+$messages['nosubjectwarning'] = 'El campo "Asuntu" ta vacÃu. ¿Quiés rellenalu anguaño?';
+$messages['nobodywarning'] = '¿Quies unviar esti mensaxe ensin testu?';
+$messages['notsentwarning'] = 'Nun unvie\'l mensaxe. ¿Quies desanicialu?';
+$messages['noldapserver'] = 'Por favor, escueye un sirvidor LDAP pa buscar';
+$messages['nocontactsreturned'] = 'Nun di con nengún contautu';
+$messages['nosearchname'] = 'Por favor, dame un nome o una direición de corréu';
+$messages['searchsuccessful'] = 'Di con $nr mensaxes';
+$messages['searchnomatch'] = 'Nun di con nengún resultáu';
+$messages['searching'] = 'A la gueta...';
+$messages['checking'] = 'Comprobando...';
+$messages['nospellerrors'] = 'Nun di con errores ortográficos';
+$messages['folderdeleted'] = 'Desaniciose la bandexa correchamente';
+$messages['deletedsuccessfully'] = 'Desaniciose correchamente';
+$messages['converting'] = 'Desaniciando\'l formatu del mensaxe...';
+$messages['messageopenerror'] = 'Nun soi a baxer el mensaxe del sirvidor';
+$messages['fileuploaderror'] = 'Fallu al xubir ficheros';
+$messages['filesizeerror'] = 'El ficheru ye más grande de lo permitÃo ($size)';
+$messages['copysuccess'] = 'Copiaronse $nr direiciones correchamente';
+$messages['copyerror'] = 'Nun fui a copiar nenguna direición';
+$messages['sourceisreadonly'] = 'Esta direición ye de namái-llectura';
+$messages['errorsavingcontact'] = 'Nun fui a guardar la direición del contautu';
+$messages['movingmessage'] = 'Moviendo\'l mensaxe...';
+$messages['receiptsent'] = 'Unviose correchamente l\'avisu de llectura.';
+$messages['errorsendingreceipt'] = 'Nun fui a unviar l\'avisu de llectura.';
+$messages['nodeletelastidentity'] = 'Nun puedo desaniciar esa identidá porque ye la última.';
+$messages['addsubfolderhint'] = 'Esta bandexa va ser subandexa de la que ta marcada';
+$messages['forbiddencharacter'] = 'El nome de la bandexa tien un caráuter que nun val';
+$messages['selectimportfile'] = 'Por favor escueye el ficheru que quies xubir';
+$messages['addresswriterror'] = 'Nun puedo escribir nel llibru de direiciones qu\'escoyisti';
+$messages['importwait'] = 'Importando, dame un minutÃn...';
+$messages['importerror'] = 'Nun fui a importar. El ficheru qu\'escoyiste nun ye un ficheru vCard válidu.';
+$messages['importconfirm'] = 'Importaronse correchamente $inserted contautos, saltáronse $skipped entrase que yá esistÃen:$names
';
+$messages['opnotpermitted'] = 'Nun tienes permisu pa facelo.';
+$messages['nofromaddress'] = 'Perdiose la direición de corréu de la identidá qu\'escoyisti';
+$messages['editorwarning'] = 'Si pases a editor en modu testu vas perder tol estilu aplicáu al mensaxe. ¿Tas seguru de que quies facelo?';
+
+?>
diff --git a/program/localization/az_AZ/labels.inc b/program/localization/az_AZ/labels.inc
index a5b0187..8efabf6 100644
--- a/program/localization/az_AZ/labels.inc
+++ b/program/localization/az_AZ/labels.inc
@@ -6,7 +6,7 @@
| language/az_AZ/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/az_AZ/messages.inc b/program/localization/az_AZ/messages.inc
index 5ae89a3..543a316 100644
--- a/program/localization/az_AZ/messages.inc
+++ b/program/localization/az_AZ/messages.inc
@@ -6,7 +6,7 @@
| language/az_AZ/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/bg_BG/labels.inc b/program/localization/bg_BG/labels.inc
index d05be74..71e3a60 100644
--- a/program/localization/bg_BG/labels.inc
+++ b/program/localization/bg_BG/labels.inc
@@ -6,7 +6,7 @@
| language/bg/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/bg_BG/messages.inc b/program/localization/bg_BG/messages.inc
index 8244f13..6badf08 100644
--- a/program/localization/bg_BG/messages.inc
+++ b/program/localization/bg_BG/messages.inc
@@ -6,7 +6,7 @@
| language/bg/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/bn_BD/labels.inc b/program/localization/bn_BD/labels.inc
new file mode 100644
index 0000000..4c647fc
--- /dev/null
+++ b/program/localization/bn_BD/labels.inc
@@ -0,0 +1,264 @@
+>';
+$labels['dontsave'] = 'à¦à¦®à¦¿à§à§ রাà¦à¦¾ লাà¦à¦¬à§ না';
+$labels['maxuploadsize'] = 'ফাà¦à¦² à¦à¦ ানà§à¦° সরà§à¦¬à§à¦à§à¦ সাà¦à¦ $size';
+$labels['addcc'] = 'à¦
নà§à¦²à¦¿à¦ªà¦¿à¦° ঠিà¦à¦¾à¦¨à¦¾ ঢà§à¦à¦¾à¦¨';
+$labels['addbcc'] = 'নাà¦à¦¾à¦¨à¦¿à§à§ à¦
নà§à¦²à¦¿à¦ªà¦¿à¦° ঠিà¦à¦¾à¦¨à¦¾ ঢà§à¦à¦¾à¦¨';
+$labels['addreplyto'] = 'à¦à¦¤à§à¦¤à¦° পাঠানà§à¦° ঠিà¦à¦¾à¦¨à¦¾ ঢà§à¦à¦¾à¦¨';
+$labels['mdnrequest'] = 'পà§à¦°à¦¾à¦ªà¦ à¦à¦ªà¦¨à¦¾à¦° à¦à¦¾à¦à§ মà§à¦à¦²/à¦à¦¿à¦ িà¦à¦¾ যৠপà§à§à§à¦à§à¦¨ তার ফিরতি রসিদ à¦à§à§à§à¦à§à¦¨à¥¤ à¦à¦ªà¦¨à¦¿ à¦à¦¿ ফিরতি রসিদ à¦à¦¾ পাঠাবà§à¦¨?';
+$labels['receiptread'] = 'মà§à¦à¦²/à¦à¦¿à¦ ি যৠপà§à§à§à¦à§à¦¨ তার ফিরতি রসিদ';
+$labels['yourmessage'] = 'নিà¦à§ রà§à§à¦à§ à¦à¦ªà¦¨à¦¾à¦° à¦à¦¿à¦ িà¦à¦¾ যৠপà§à¦°à¦¾à¦ªà¦ পà§à§à§à¦à§à¦¨ তার রসিদ';
+$labels['receiptnote'] = 'à¦à¦ রসিদ à¦à¦¾à¦²à¦¿ à¦à¦¤à¦à§à¦à§ পà§à¦°à¦®à¦¾à¦¨ à¦à¦°à§ যৠপà§à¦°à¦¾à¦ªà¦ à¦à¦¿à¦ িà¦à¦¿ পà§à§à§à¦à§à¦¨à¥¤ à¦à¦¿à¦¨à§à¦¤à§ তিনি ঠিà¦à¦®à¦¤à§ পà§à¦¤à§ পà§à¦°à§à¦à§à¦¨ à¦à¦¿à¦¨à¦¾ à¦
থবা তিনি পà§à§ বà§à¦à¦¤à§ পà§à¦°à§à¦à§à¦¨ à¦à¦¿à¦¨à¦¾ তার à¦à§à¦¨à§ পà§à¦°à¦®à¦¾à¦¨ নà§à¦à¥¤';
+$labels['name'] = 'নাম';
+$labels['firstname'] = 'নামà§à¦° পà§à¦°à¦¥à¦®à¦¾à¦à¦¶';
+$labels['surname'] = 'নামà§à¦° শà§à¦·à¦¾à¦à¦¶';
+$labels['email'] = 'à¦-মà§à¦à¦²/à¦à¦¿à¦ ি';
+$labels['addcontact'] = 'নতà§à¦¨ ঠিà¦à¦¾à¦¨à¦¾ ঢà§à¦à¦¾à¦¨';
+$labels['editcontact'] = 'à¦à¦à¦à¦¾ ঠিà¦à¦¾à¦¨à¦¾ বদলান';
+$labels['edit'] = 'বদলান';
+$labels['cancel'] = 'বাতিল';
+$labels['save'] = 'à¦à¦®à¦¾ দিন';
+$labels['delete'] = 'ফà§à¦²à§ দিন';
+$labels['newcontact'] = 'à¦à¦à¦à¦¾ নতà§à¦¨ ঠিà¦à¦¾à¦¨à¦¾à¦° à¦à¦¾à¦°à§à¦¡ বানান';
+$labels['deletecontact'] = 'বà§à¦à§ নà§à¦à§à¦¾ ঠিà¦à¦¾à¦¨à¦¾ à¦à§à¦²à§ ফà§à¦²à§ দিন';
+$labels['composeto'] = 'à¦à¦¿à¦ ি পাঠাবà§à¦¨ à¦à¦¾à¦° à¦à¦¾à¦à§?';
+$labels['contactsfromto'] = '$count ঠিà¦à¦¾à¦¨à¦¾à¦° মধà§à¦¯à§ $from থà§à¦à§ $to à¦à¦¾';
+$labels['print'] = 'পà§à¦°à¦¿à¦¨à§à¦ à¦à¦°à§à¦¨';
+$labels['export'] = 'রপà§à¦¤à¦¾à¦¨à¦¿ à¦à¦°à§à¦¨';
+$labels['exportvcards'] = 'রপà§à¦¤à¦¾à¦¨à¦¿ à¦à¦°à§à¦¨ vCard à¦à¦à¦¾à¦°à§';
+$labels['previouspage'] = 'à¦à¦à§à¦° à¦à§à¦²à§ দà§à¦à¦¾à¦¨';
+$labels['firstpage'] = 'পà§à¦°à¦¥à¦® à¦à§à¦²à§ দà§à¦à¦¾à¦¨';
+$labels['nextpage'] = 'পরà§à¦° à¦à§à¦²à§ দà§à¦à¦¾à¦¨';
+$labels['lastpage'] = 'শà§à¦·à§à¦° à¦à§à¦²à§ দà§à¦à¦¾à¦¨';
+$labels['groups'] = 'à¦à§à¦°à§à¦ª';
+$labels['personaladrbook'] = 'নিà¦à§à¦° ঠিà¦à¦¾à¦¨à¦¾';
+$labels['import'] = 'à¦à¦®à¦¦à¦¾à¦¨à¦¿ à¦à¦°à§à¦¨';
+$labels['importcontacts'] = 'ঠিà¦à¦¾à¦¨à¦¾ à¦à¦®à¦¦à¦¾à¦¨à¦¿ à¦à¦°à§à¦¨';
+$labels['importfromfile'] = 'ফাà¦à¦²à§à¦° থà§à¦à§ ঠিà¦à¦¾à¦¨à¦¾ à¦à¦®à¦¦à¦¾à¦¨à¦¿ à¦à¦°à§à¦¨';
+$labels['importreplace'] = 'পà§à¦°à§ ঠিà¦à¦¾à¦¨à¦¾à¦° বà¦à¦à¦¿ à¦à¦¾à¦²à¦¿ à¦à¦°à§ নতà§à¦¨ ঠিà¦à¦¾à¦¨à¦¾ à¦à§à¦²à§ à¦à¦°à§à¦¨';
+$labels['importtext'] = 'à¦à¦ªà¦¨à¦¿ à¦
নà§à¦¯ à¦à§à¦¨à§ ঠিà¦à¦¾à¦¨à¦¾à¦° বঠ(address book) à¦à¦®à¦¾à¦¦à§à¦° à¦à¦à¦¾à¦¨à§ তà§à¦²à¦¤à§ পারà§à¦¨à¥¤
à¦à¦®à¦°à¦¾ বরà§à¦¤à¦®à¦¾à¦¨à§ vCard à¦à¦à¦¾à¦°à§ à¦à¦¾à¦²à¦¿ ঠিà¦à¦¾à¦¨à¦¾ তà§à¦²à¦¤à§ পারি।';
+$labels['done'] = 'শà§à¦·';
+$labels['settingsfor'] = 'à¦à§à¦à¦¿à¦¨à¦¾à¦à¦¿';
+$labels['preferences'] = 'পà¦à¦¨à§à¦¦';
+$labels['userpreferences'] = 'à¦à§à¦°à¦¾à¦¹à¦ পà¦à¦¨à§à¦¦';
+$labels['editpreferences'] = 'à¦à§à¦°à¦¾à¦¹à¦ পà¦à¦¨à§à¦¦ বদলান';
+$labels['identities'] = 'পরিà¦à¦¿à¦¤à¦¿';
+$labels['manageidentities'] = 'à¦à¦ à¦
à§à¦¯à¦¾à¦à¦à¦¨à§à¦à§à¦° "পরà¦à¦¿à¦¤à¦¿" বদলান';
+$labels['newidentity'] = 'নতà§à¦¨ পরিà¦à¦¿à¦¤à¦¿';
+$labels['newitem'] = 'নতà§à¦¨ à¦à¦¿à¦¨à¦¿à¦·';
+$labels['edititem'] = 'à¦à¦¿à¦¨à¦¿à¦· বদলান';
+$labels['setdefault'] = 'à¦à¦à¦à¦¾à¦ à¦à¦¸à¦²';
+$labels['autodetect'] = 'à¦à¦®à§à¦ªà§à¦à¦¾à¦° নিà¦à§à¦¨à¦¿à¦à¦¿ বà§à¦à§ নà§à¦¬à§';
+$labels['language'] = 'à¦à¦¾à¦·à¦¾';
+$labels['timezone'] = 'সমà§à¦à¦¿à¦¤à§à¦¤à¦¿à¦ à¦à¦²à¦¾à¦à¦¾';
+$labels['pagesize'] = 'পà§à¦°à¦¤à¦¿ পà§à¦·à§à¦ াৠলাà¦à¦¨ সà¦à¦à§à¦¯à¦¾';
+$labels['signature'] = 'সà§à¦¬à¦¾à¦à§à¦·à¦°';
+$labels['dstactive'] = 'Daylight saving time';
+$labels['htmleditor'] = 'HTML ঠমà§à¦à¦²/à¦à¦¿à¦ ি লিà¦à§à¦¨';
+$labels['htmlsignature'] = 'HTML ঠসà§à¦¬à¦¾à¦à§à¦·à¦°';
+$labels['previewpane'] = 'à¦à§à¦à§à¦à¦°à§ দà§à¦à¦¾à¦° à¦à¦¾à§à¦à¦¾';
+$labels['skin'] = 'মà§à¦à¦²à¦¬à¦à§à¦¸ à¦à¦° পà§à¦°à§à¦à¦¾à¦° à¦à§à¦¹à¦¾à¦°à¦¾';
+$labels['logoutclear'] = 'বà§à¦°à¦¹à¦¬à¦¾à¦° সমৠডাসà§à¦à¦¬à¦¿à¦¨ à¦
à¦à§à¦®à§à¦à¦¿à¦ à¦à¦¾à¦²à¦¿ হবà§';
+$labels['logoutcompact'] = 'বà§à¦°à¦¹à¦¬à¦¾à¦° সমৠপà§à¦°à¦§à¦¾à¦¨ বাà¦à§à¦¸ à¦
à¦à§à¦®à§à¦à¦¿à¦ à¦à¦¾à¦à¦ হবà§';
+$labels['uisettings'] = 'à¦à¦®à§à¦ªà§à¦à¦¾à¦°à§à¦° à¦à§à¦¹à¦¾à¦°à¦¾';
+$labels['serversettings'] = 'সারà¦à¦¾à¦° à¦à¦° à¦à§à¦à¦¿à¦¨à¦¾à¦à¦¿';
+$labels['mailboxview'] = 'মà§à¦à¦²à¦¬à¦à§à¦¸ দà§à¦à¦¾à¦° à¦à¦¾à§à¦¦à¦¾';
+$labels['mdnrequests'] = 'পà§à¦°à§à¦°à¦ নà§à¦à¦¿à¦¶ পাঠালৠà¦à¦¿ à¦à¦°à¦¾ হবà§?';
+$labels['askuser'] = 'à¦à¦®à¦¿ à¦à§à¦°à¦¾à¦¹à¦, à¦à¦®à¦¾à¦à§ à¦à¦¿à¦à§à¦à¦¾à¦¸à¦¾ à¦à¦°à§à¦¨';
+$labels['autosend'] = 'à¦à¦®à§à¦ªà§à¦à¦¾à¦° নিà¦à§à¦¨à¦¿à¦à¦¿ ফিরতি নà§à¦à¦¿à¦¶ পাঠাৠদà§à¦¬à§';
+$labels['ignore'] = 'পাতà§à¦¤à¦¾ দà§à¦à§à¦¾ হবà§à¦¨à¦¾';
+$labels['readwhendeleted'] = 'ফà§à¦²à§ দà§à¦¬à¦¾à¦° সমৠমà§à¦à¦²/à¦à¦¿à¦ ি পà§à¦¾ হà§à§ à¦à§à¦à§ হিসাবৠধরৠনà§à¦à§à¦¾ হবà§';
+$labels['flagfordeletion'] = 'à¦à¦à§à¦¬à¦¾à¦°à§à¦ ফà§à¦²à§ না দিà§à§ মà§à¦à¦²/à¦à¦¿à¦ ি à¦à§à¦²à§à¦à§ দাà¦à¦¿à§à§ রাà¦à§à¦¨ ফà§à¦²à§ দà§à¦¬à¦¾à¦° à¦à¦¨à§à¦¯à§';
+$labels['skipdeleted'] = 'ফà§à¦²à§ দà§à¦à§à¦¾ মà§à¦à¦²/à¦à¦¿à¦ ি দà§à¦à¦¾à¦¨à§à¦° দরà¦à¦¾à¦° নà§à¦';
+$labels['showremoteimages'] = 'মà§à¦à¦²à§ à¦
নà§à¦¯ à¦à§à§à¦¬à¦¸à¦¾à¦à¦ থà§à¦à§ à¦à¦¸à¦¾ à¦à¦¬à¦¿ থাà¦à¦²à§ তা দà§à¦à¦¾ যাবà§';
+$labels['fromknownsenders'] = 'পরিà¦à¦¿à¦¤ পà§à¦°à§à¦°à¦ à¦à¦° à¦à§à¦·à§à¦¤à§à¦°à§';
+$labels['always'] = 'সবসমà§';
+$labels['showinlineimages'] = 'মà§à¦à¦²à§à¦° সাথৠà¦à§à§à¦¾ লাà¦à¦¾à¦¨à§ à¦à¦¬à¦¿, মà§à¦à¦²à§à¦° নিà¦à§ দà§à¦à¦¾ যাবà§';
+$labels['autosavedraft'] = 'নিà¦à§à¦¨à¦¿à¦à¦¿ à¦à¦¸à§à¦¾ à¦à¦®à¦¾ হà§à§ যাবà§';
+$labels['everynminutes'] = 'পà§à¦°à¦¤à¦¿ $n মিনিà¦à§';
+$labels['keepaliveevery'] = 'পà§à¦°à¦¤à¦¿ $n মিনিà¦à§';
+$labels['keepalive'] = 'নতà§à¦¨ মà§à¦à¦²/à¦à¦¿à¦ ি à¦à¦¸à§à¦à§ à¦à¦¿à¦¨à¦¾ তা দà§à¦à¦¾ হবà§,';
+$labels['never'] = 'à¦à¦à§à¦¨à§à¦ না';
+$labels['messagesdisplaying'] = 'মà§à¦à¦²/à¦à¦¿à¦ ি দà§à¦à¦¾ যাà¦à§à¦à§';
+$labels['messagescomposition'] = 'মà§à¦à¦²/à¦à¦¿à¦ ি লà§à¦à¦¾ হà¦à§à¦à§';
+$labels['mimeparamfolding'] = 'à¦à§à§à§ দà§à¦à§à¦¾ à¦à¦¿à¦¨à¦¿à¦·à§à¦° নাম';
+$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (other)';
+$labels['advancedoptions'] = 'à¦à¦à¦¿à¦² বিষà§';
+$labels['focusonnewmessage'] = 'নতà§à¦¨ মà§à¦à¦² à¦à¦²à§à¦ তা হাà¦à¦²à¦¾à¦à¦ হà§à§ যাবà§';
+$labels['checkallfolders'] = 'সবà¦à§à¦²à§ মà§à¦à¦²à¦¬à¦à§à¦¸à§ নতà§à¦¨ à¦à¦¿à¦ ি à¦à§à¦à¦¾ হবà§';
+$labels['folder'] = 'ফà§à¦²à§à¦¡à¦¾à¦°/মà§à¦à¦²à¦¬à¦à§à¦¸';
+$labels['folders'] = 'ফà§à¦²à§à¦¡à¦¾à¦°/মà§à¦à¦²à¦¬à¦à§à¦¸';
+$labels['foldername'] = 'ফà§à¦²à§à¦¡à¦¾à¦°/মà§à¦à¦²à¦¬à¦à§à¦¸ à¦à¦° নাম';
+$labels['subscribed'] = 'à¦à§à¦°à¦¹à¦¨à¦à¦¾à¦°à¦¿(Subscribed) ';
+$labels['messagecount'] = 'মà§à¦à¦²/à¦à¦¿à¦ ি';
+$labels['create'] = 'পà§à¦°à¦¸à§à¦¤à§à¦¤ à¦à¦°à§à¦¨';
+$labels['createfolder'] = 'নতà§à¦¨ ফà§à¦²à§à¦¡à¦¾à¦° / মà§à¦à¦²à¦¬à¦à§à¦¸ পà§à¦°à¦¸à§à¦¤à§à¦¤ à¦à¦°à§à¦¨';
+$labels['rename'] = 'নাম বদলান';
+$labels['renamefolder'] = 'ফà§à¦²à§à¦¡à¦¾à¦°/মà§à¦à¦²à¦¬à¦à§à¦¸ à¦à¦° নাম বদলান';
+$labels['deletefolder'] = 'ফà§à¦²à§à¦¡à¦¾à¦°/মà§à¦à¦²à¦¬à¦à§à¦¸ ফà§à¦²à§ দিন';
+$labels['managefolders'] = 'ফà§à¦²à§à¦¡à¦¾à¦°/মà§à¦à¦²à¦¬à¦à§à¦¸ à¦à§à¦²à§ à¦à§ à¦à§à¦à¦¾à¦¨';
+$labels['specialfolders'] = 'বিশà§à¦· ফà§à¦²à§à¦¡à¦¾à¦°/মà§à¦à¦²à¦¬à¦à§à¦¸';
+$labels['sortby'] = 'সাà¦à¦¾à¦¨';
+$labels['sortasc'] = 'à¦à¦® থà§à¦à§ বà§à¦¶à¦¿ হিসাবৠসাà¦à¦¾à¦¨';
+$labels['sortdesc'] = 'বà§à¦¶à¦¿ থà§à¦à§ à¦à¦® হিসাবৠসাà¦à¦¾à¦¨';
+$labels['B'] = 'বাà¦à¦';
+$labels['KB'] = 'à¦à¦¿à¦²à§à¦¬à¦¾à¦à¦';
+$labels['MB'] = 'মà§à¦à¦¾à¦¬à¦¾à¦à¦';
+$labels['GB'] = 'à¦à¦¿à¦à¦¾à¦¬à¦¾à¦à¦';
+
+?>
diff --git a/program/localization/bn_BD/messages.inc b/program/localization/bn_BD/messages.inc
new file mode 100644
index 0000000..a55c847
--- /dev/null
+++ b/program/localization/bn_BD/messages.inc
@@ -0,0 +1,95 @@
+ঠিà¦à¦®à¦¤à§ $inserted ঠিà¦à¦¾à¦¨à¦¾ à¦à¦®à¦¦à¦¾à¦¨à¦¿ à¦à¦°à¦¾ à¦à§à¦à§, $skipped ঠিà¦à¦¾à¦¨à¦¾ à¦à¦à§à¦° থà§à¦à§à¦ à¦à¦¿à¦²à§ বলৠতাদà§à¦° à¦à¦¾ যা à¦à¦¿à¦²à§ তাঠরাà¦à¦¾ হà§à§à¦à§:$names
';
+$messages['opnotpermitted'] = 'à¦à¦ à¦à¦¾à¦à¦à¦¾ à¦à¦°à¦¾à¦° à¦
নà§à¦®à¦¤à¦¿ নাঠà¦à¦ªà¦¨à¦¾à¦°';
+$messages['nofromaddress'] = 'বà§à¦à§ নà§à¦à§à¦¾ যৠপরিà¦à¦¿à¦¤à¦¿à¦à¦¾, তাতৠà¦-মà§à¦à¦² নà§à¦';
+$messages['editorwarning'] = 'যদি à¦à¦ªà¦¨à¦¿ শà§à¦§à§ লà§à¦à¦¾à¦° সà§à¦à¦¾à¦à¦²à§ যান তাহলৠবরà§à¦¤à¦®à¦¾à¦¨à§à¦° à¦à§à¦¨à§ বিনà§à¦¯à¦¾à¦¸ হারিà§à§ যাবà§';
+
+?>
diff --git a/program/localization/bs_BA/labels.inc b/program/localization/bs_BA/labels.inc
index 24249de..1fe14af 100644
--- a/program/localization/bs_BA/labels.inc
+++ b/program/localization/bs_BA/labels.inc
@@ -6,14 +6,14 @@
| language/bs_BA/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Begzudin Omerovic |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
+ @version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/bs_BA/messages.inc b/program/localization/bs_BA/messages.inc
index 197ae06..84e683f 100644
--- a/program/localization/bs_BA/messages.inc
+++ b/program/localization/bs_BA/messages.inc
@@ -6,14 +6,14 @@
| language/bs_BA/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Begzudin Omerovic |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ca_ES/labels.inc b/program/localization/ca_ES/labels.inc
index f22577a..ae42f20 100644
--- a/program/localization/ca_ES/labels.inc
+++ b/program/localization/ca_ES/labels.inc
@@ -6,7 +6,7 @@
| language/ca_ES/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Simo |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2142 2008-12-10 19:22:22Z yllar $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ca_ES/messages.inc b/program/localization/ca_ES/messages.inc
index fd591f6..45f68ac 100644
--- a/program/localization/ca_ES/messages.inc
+++ b/program/localization/ca_ES/messages.inc
@@ -6,7 +6,7 @@
| language/ca_ES/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Simo |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2142 2008-12-10 19:22:22Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/cs_CZ/labels.inc b/program/localization/cs_CZ/labels.inc
index 7c946e5..c51c72c 100644
--- a/program/localization/cs_CZ/labels.inc
+++ b/program/localization/cs_CZ/labels.inc
@@ -6,7 +6,7 @@
| language/cs_CZ/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Jiri Kaderavek |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
@@ -122,6 +122,9 @@ $labels['select'] = 'Vybrat';
$labels['all'] = 'Vše';
$labels['none'] = 'Nic';
$labels['unread'] = 'NepÅeÄtené';
+$labels['flagged'] = 'OznaÄené';
+$labels['unanswered'] = 'NeoznaÄené';
+$labels['filter'] = 'Filtr';
$labels['compact'] = 'Zmenšit';
$labels['empty'] = 'Vymazat';
$labels['purge'] = 'Vyprázdnit';
@@ -157,9 +160,9 @@ $labels['plaintoggle'] = 'Prostý text';
$labels['savesentmessagein'] = 'Ukládat odeslané zprávy v';
$labels['dontsave'] = 'neukládat';
$labels['maxuploadsize'] = 'Maximálnà povolená velikost souboru je $size';
-$labels['addcc'] = 'PÅidat pole \"Kopie\"';
-$labels['addbcc'] = 'PÅidat pole \"Skrytá Kopie\"';
-$labels['addreplyto'] = 'PÅidat pole \"OdpovÄÄ\"';
+$labels['addcc'] = 'PÅidat pole "Kopie"';
+$labels['addbcc'] = 'PÅidat pole "Skrytá Kopie"';
+$labels['addreplyto'] = 'PÅidat pole "OdpovÄÄ"';
$labels['mdnrequest'] = 'OdesÃlatel této zprávy si pÅeje být upozornÄn na to, že jste zprávu obdrželi. Chcete pÅijetà zprávy potvrdit?';
$labels['receiptread'] = 'Potvrzenà o pÅijetà zprávy';
$labels['yourmessage'] = 'Toto je potvrzenà o pÅijetà Vašà zprávy';
@@ -224,12 +227,25 @@ $labels['autosend'] = 'poslat automaticky';
$labels['ignore'] = 'ignorovat';
$labels['readwhendeleted'] = 'PÅi odstranÄnà oznaÄit zprávu jako pÅeÄtenou';
$labels['flagfordeletion'] = 'Zprávu nemazat, pouze oznaÄit pro odstranÄnÃ';
+$labels['skipdeleted'] = 'Nezobrazovat smazané zprávy';
+$labels['showremoteimages'] = 'Zobrazovat obrázky uložené mimo mail';
+$labels['fromknownsenders'] = 'od známých uživatelů';
+$labels['always'] = 'vždy';
$labels['showinlineimages'] = 'Zobrazovat pÅipojené obrázky pod textem';
$labels['autosavedraft'] = 'Automaticky uložit rozepsané zprávy';
$labels['everynminutes'] = 'každých $n minut';
+$labels['keepaliveevery'] = 'každých $n minut';
+$labels['keepalive'] = 'Zkontrolovat nové zprávy';
$labels['never'] = 'nikdy';
$labels['messagesdisplaying'] = 'Zobrazovánà zpráv';
$labels['messagescomposition'] = 'Psanà zpráv';
+$labels['mimeparamfolding'] = 'Jména pÅÃloh';
+$labels['2231folding'] = 'Podle RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Podle RFC 2047 (ostatnÃ)';
+$labels['advancedoptions'] = 'PokroÄilá nastavenÃ';
+$labels['focusonnewmessage'] = 'Aktivovat okno prohlÞeÄe pÅi prÃchozà zprávÄ';
+$labels['checkallfolders'] = 'Kontrolovat nové zprávy ve všech složkách';
$labels['folder'] = 'Složka';
$labels['folders'] = 'Složky';
$labels['foldername'] = 'Jméno složky';
@@ -245,5 +261,9 @@ $labels['specialfolders'] = 'Speciálnà složky';
$labels['sortby'] = 'SeÅadit podle';
$labels['sortasc'] = 'SeÅadit vzestupnÄ';
$labels['sortdesc'] = 'SeÅadit sestupnÄ';
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/cs_CZ/messages.inc b/program/localization/cs_CZ/messages.inc
index a0b1637..49ad44e 100644
--- a/program/localization/cs_CZ/messages.inc
+++ b/program/localization/cs_CZ/messages.inc
@@ -6,7 +6,7 @@
| language/cs_CZ/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Jiri Kaderavek |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2045 2008-11-11 15:09:24Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
@@ -54,10 +54,12 @@ $messages['purgefolderconfirm'] = 'Opravdu chcete smazat všechny zprávy v tét
$messages['foldercreating'] = 'VytváÅÃm složku...';
$messages['folderdeleting'] = 'Mažu složku...';
$messages['folderrenaming'] = 'PÅejmenovávám složku...';
+$messages['foldermoving'] = 'PÅesouvám složku...';
$messages['formincomplete'] = 'FormuláŠnebyl korektnÄ vyplnÄn';
$messages['noemailwarning'] = 'Zadejte, prosÃm, platnou adresu';
$messages['nonamewarning'] = 'Zadejte, prosÃm, jméno';
$messages['nopagesizewarning'] = 'Zadejte, prosÃm, velikost stránky';
+$messages['nosenderwarning'] = 'Zadejte e-mailovou adresu odesÃlatele';
$messages['norecipientwarning'] = 'Zadejte, prosÃm, alespoÅ jednoho pÅÃjemce';
$messages['nosubjectwarning'] = 'PÅedmÄt nebyl vyplÅen. PÅejete si jej zadat nynÃ?';
$messages['nobodywarning'] = 'Opravdu chtete odeslat prázdnou zprávu?';
@@ -92,5 +94,7 @@ $messages['importwait'] = 'Importuji, prosÃm Äekejte...';
$messages['importerror'] = 'BÄhem importu nastala chyba! Nahraný soubor nenà ve formátu vCard.';
$messages['importconfirm'] = 'ÃspÄÅ¡nÄ naimportováno $inserted kontaktů, $skipped existujÃcÃch záznamů pÅeskoÄeno:$names
';
$messages['opnotpermitted'] = 'Operace nenà povolena!';
+$messages['nofromaddress'] = 'ChybÄjÃcà e-mailová adresa v oznaÄeném profilu';
+$messages['editorwarning'] = 'PÅepnutÃm do režimu prostého textu ztratÃte veÅ¡keré formátovánÃ. Chcete pokraÄovat?';
?>
diff --git a/program/localization/cy_GB/labels.inc b/program/localization/cy_GB/labels.inc
index ada843e..332d2f9 100644
--- a/program/localization/cy_GB/labels.inc
+++ b/program/localization/cy_GB/labels.inc
@@ -5,7 +5,7 @@
| language/cy_GB/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2008, RoundQube Dev. - Switzerland |
+| Copyright (C) 2008-2009, RoundQube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/cy_GB/messages.inc b/program/localization/cy_GB/messages.inc
index 675e0de..5c92f94 100644
--- a/program/localization/cy_GB/messages.inc
+++ b/program/localization/cy_GB/messages.inc
@@ -5,7 +5,7 @@
| language/cy_GB/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2008, RoundQube Dev. - Switzerland |
+| Copyright (C) 2008-2009, RoundQube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/da_DK/labels.inc b/program/localization/da_DK/labels.inc
index a0617ec..3a9a162 100644
--- a/program/localization/da_DK/labels.inc
+++ b/program/localization/da_DK/labels.inc
@@ -6,7 +6,7 @@
| language/da/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Søren Aggeboe |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/da_DK/messages.inc b/program/localization/da_DK/messages.inc
index d960380..910c204 100644
--- a/program/localization/da_DK/messages.inc
+++ b/program/localization/da_DK/messages.inc
@@ -6,7 +6,7 @@
| language/da/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Søren Aggeboe |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/de_CH/labels.inc b/program/localization/de_CH/labels.inc
index f9be7d6..f69b031 100644
--- a/program/localization/de_CH/labels.inc
+++ b/program/localization/de_CH/labels.inc
@@ -6,7 +6,7 @@
| language/de_CH/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Corrections: Alexander Stiebing |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2124 2008-12-06 17:59:26Z thomasb $
+@version $Id: labels.inc 2316 2009-02-27 10:54:17Z thomasb $
*/
@@ -94,7 +94,7 @@ $labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Dezember';
$labels['today'] = 'Heute';
-$labels['checkmail'] = 'Ãberprüfung auf neue Anzeigen';
+$labels['checkmail'] = 'Auf neue Nachrichten prüfen';
$labels['writenewmessage'] = 'Neue Nachricht schreiben';
$labels['replytomessage'] = 'Antwort verfassen';
$labels['replytoallmessage'] = 'Antwort an Absender und alle Empfänger verfassen';
@@ -216,7 +216,7 @@ $labels['htmlsignature'] = 'HTML-Signatur';
$labels['previewpane'] = 'Nachrichtenvorschau anzeigen';
$labels['skin'] = 'Oberflächendesign';
$labels['logoutclear'] = 'Papierkorb beim Abmelden leeren';
-$labels['logoutcompact'] = 'Posteingang beim Abmleden packen';
+$labels['logoutcompact'] = 'Posteingang beim Abmelden packen';
$labels['uisettings'] = 'Benutzeroberfläche';
$labels['serversettings'] = 'Server-Einstellungen';
$labels['mailboxview'] = 'Mailbox-Ansicht';
@@ -227,10 +227,10 @@ $labels['ignore'] = 'ignorieren';
$labels['readwhendeleted'] = 'Beim Löschen als gelesen markieren';
$labels['flagfordeletion'] = 'Als gelöscht markieren anstatt in den Papierkorb verschieben';
$labels['skipdeleted'] = 'Zeige keine gelöschten Nachrichten an';
-$labels['showremoteimages'] = 'Zeige entfernte eingebettete Bilder an';
+$labels['showremoteimages'] = 'Eingebettete Bilder vom Internet laden';
$labels['fromknownsenders'] = 'bei bekannten Absendern';
$labels['always'] = 'immer';
-$labels['showinlineimages'] = 'Stelle angehängte Bilder unter der Nachricht dar';
+$labels['showinlineimages'] = 'Angehängte Bilder unter der Nachricht anzeigen';
$labels['autosavedraft'] = 'Entwurf autom. speichern';
$labels['everynminutes'] = 'alle $n Minuten';
$labels['keepaliveevery'] = '$n Minute(n)';
diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc
index 0465249..16ea884 100644
--- a/program/localization/de_CH/messages.inc
+++ b/program/localization/de_CH/messages.inc
@@ -6,14 +6,14 @@
| language/de_CH/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2063 2008-11-17 18:52:43Z alec $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/de_DE/labels.inc b/program/localization/de_DE/labels.inc
index bf36ac5..ffeee62 100644
--- a/program/localization/de_DE/labels.inc
+++ b/program/localization/de_DE/labels.inc
@@ -6,14 +6,14 @@
| language/de_DE/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Marcel Schlesinger |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2124 2008-12-06 17:59:26Z thomasb $
+@version $Id: labels.inc 2316 2009-02-27 10:54:17Z thomasb $
*/
@@ -157,7 +157,7 @@ $labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Nur-Text';
$labels['savesentmessagein'] = 'Nachricht speichern in';
$labels['dontsave'] = 'nicht speichern';
-$labels['maxuploadsize'] = 'Maximal erlaubte Dateigrösse ist $size';
+$labels['maxuploadsize'] = 'Maximal erlaubte DateigröÃe ist $size';
$labels['addcc'] = 'Cc hinzufügen';
$labels['addbcc'] = 'Bcc hinzufügen';
$labels['addreplyto'] = 'Antwortadresse hinzufügen';
@@ -210,9 +210,9 @@ $labels['timezone'] = 'Zeitzone';
$labels['pagesize'] = 'Einträge pro Seite';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommerzeit';
-$labels['htmleditor'] = 'HTML-Nachrichten erstellen';
+$labels['htmleditor'] = 'HTML-Nachrichten verfassen';
$labels['htmlsignature'] = 'HTML-Signatur';
-$labels['previewpane'] = 'Vorschaufenster anzeigen';
+$labels['previewpane'] = 'Nachrichtenvorschau anzeigen';
$labels['skin'] = 'Oberflächendesign';
$labels['logoutclear'] = 'Papierkorb beim Abmelden leeren';
$labels['logoutcompact'] = 'Posteingang beim Abmelden packen';
@@ -226,10 +226,10 @@ $labels['ignore'] = 'ignorieren';
$labels['readwhendeleted'] = 'Beim Löschen als gelesen markieren';
$labels['flagfordeletion'] = 'Als gelöscht markieren anstatt in den Papierkorb verschieben';
$labels['skipdeleted'] = 'Zeige keine gelöschten Nachrichten an';
-$labels['showremoteimages'] = 'Zeige entfernte eingebettete Bilder an';
+$labels['showremoteimages'] = 'Eingebettete Bilder vom Internet laden';
$labels['fromknownsenders'] = 'bei bekannten Absendern';
$labels['always'] = 'immer';
-$labels['showinlineimages'] = 'Stelle angehängte Bilder unter der Nachricht dar';
+$labels['showinlineimages'] = 'Angehängte Bilder unter der Nachricht anzeigen';
$labels['autosavedraft'] = 'Entwurf automatisch speichern';
$labels['everynminutes'] = 'alle $n Minuten';
$labels['keepaliveevery'] = '$n Minute(n)';
diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc
index 8cce6f9..23c7738 100644
--- a/program/localization/de_DE/messages.inc
+++ b/program/localization/de_DE/messages.inc
@@ -6,14 +6,14 @@
| language/de_DE/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Marcel Schlesinger |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2063 2008-11-17 18:52:43Z alec $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/el_GR/labels.inc b/program/localization/el_GR/labels.inc
index e3a25ad..bffaa90 100644
--- a/program/localization/el_GR/labels.inc
+++ b/program/localization/el_GR/labels.inc
@@ -6,7 +6,7 @@
| language/el/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| John Economou |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
+ @version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/el_GR/messages.inc b/program/localization/el_GR/messages.inc
index 84890e8..ac01d1c 100644
--- a/program/localization/el_GR/messages.inc
+++ b/program/localization/el_GR/messages.inc
@@ -6,7 +6,7 @@
| language/el/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| John Economou |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc
index 6731597..029454a 100644
--- a/program/localization/en_GB/labels.inc
+++ b/program/localization/en_GB/labels.inc
@@ -6,14 +6,14 @@
| language/en_GB/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Weiran Zhang (weiran@weiran.co.uk) |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2136 2008-12-08 20:44:46Z yllar $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/en_GB/messages.inc b/program/localization/en_GB/messages.inc
index fe45f6e..62b87c7 100644
--- a/program/localization/en_GB/messages.inc
+++ b/program/localization/en_GB/messages.inc
@@ -6,14 +6,14 @@
| language/en_GB/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Weiran Zhang (weiran@weiran.co.uk) |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 2045 2008-11-11 15:09:24Z yllar $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index d664f1c..2558e01 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -6,14 +6,14 @@
| language/en_US/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 2124 2008-12-06 17:59:26Z thomasb $
+ @version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index f667ae3..75473cd 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -6,14 +6,14 @@
| language/en_US/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 2036 2008-11-03 18:09:35Z alec $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/eo/labels.inc b/program/localization/eo/labels.inc
index 52327f7..77a6fbb 100644
--- a/program/localization/eo/labels.inc
+++ b/program/localization/eo/labels.inc
@@ -6,7 +6,7 @@
| language/eo/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/eo/messages.inc b/program/localization/eo/messages.inc
index 40c2247..ae8bca4 100644
--- a/program/localization/eo/messages.inc
+++ b/program/localization/eo/messages.inc
@@ -6,7 +6,7 @@
| language/eo/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/es_AR/labels.inc b/program/localization/es_AR/labels.inc
new file mode 100644
index 0000000..916acff
--- /dev/null
+++ b/program/localization/es_AR/labels.inc
@@ -0,0 +1,271 @@
+ |
+| http://www.smaldone.com.ar |
+| David Grajal Blanco |
+| http://david.grajal.net |
+| Pablo Rosciani |
+| http://www.netsud.com |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 2115 2009-01-13 11:40:34Z alec $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Bienvenido a $product';
+$labels['username'] = 'Email';
+$labels['password'] = 'Contraseña';
+$labels['server'] = 'Servidor';
+$labels['login'] = 'Entrar';
+$labels['logout'] = 'Cerrar sesión';
+$labels['mail'] = 'Correo';
+$labels['settings'] = 'Configuración';
+$labels['addressbook'] = 'Contactos';
+$labels['inbox'] = 'Entrada';
+$labels['drafts'] = 'Borradores';
+$labels['sent'] = 'Enviados';
+$labels['trash'] = 'Papelera';
+$labels['junk'] = 'Basura';
+$labels['subject'] = 'Asunto';
+$labels['from'] = 'Remitente';
+$labels['to'] = 'Destinatario';
+$labels['cc'] = 'Copia';
+$labels['bcc'] = 'Cco';
+$labels['replyto'] = 'Responder a';
+$labels['date'] = 'Fecha';
+$labels['size'] = 'Tamaño';
+$labels['priority'] = 'Prioridad';
+$labels['organization'] = 'Organización';
+$labels['reply-to'] = 'Responder a';
+$labels['mailboxlist'] = 'Carpetas';
+$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
+$labels['messagenrof'] = 'Mensaje $nr de $count';
+$labels['moveto'] = 'mover a...';
+$labels['download'] = 'descargar';
+$labels['filename'] = 'Nombre del archivo';
+$labels['filesize'] = 'Tamaño del archivo';
+$labels['preferhtml'] = 'Prefiero HTML';
+$labels['htmlmessage'] = 'Mensaje HTML';
+$labels['prettydate'] = 'Fecha detallada';
+$labels['addtoaddressbook'] = 'Añadir a contactos';
+$labels['sun'] = 'Dom';
+$labels['mon'] = 'Lun';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mié';
+$labels['thu'] = 'Jue';
+$labels['fri'] = 'Vie';
+$labels['sat'] = 'Sáb';
+$labels['sunday'] = 'Domingo';
+$labels['monday'] = 'Lunes';
+$labels['tuesday'] = 'Martes';
+$labels['wednesday'] = 'Miércoles';
+$labels['thursday'] = 'Jueves';
+$labels['friday'] = 'Viernes';
+$labels['saturday'] = 'Sábado';
+$labels['jan'] = 'Ene';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Abr';
+$labels['may'] = 'May';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Ago';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Oct';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dic';
+$labels['longjan'] = 'Enero';
+$labels['longfeb'] = 'Febrero';
+$labels['longmar'] = 'Marzo';
+$labels['longapr'] = 'Abril';
+$labels['longmay'] = 'Mayo';
+$labels['longjun'] = 'Junio';
+$labels['longjul'] = 'Julio';
+$labels['longaug'] = 'Agosto';
+$labels['longsep'] = 'Septiembre';
+$labels['longoct'] = 'Octubre';
+$labels['longnov'] = 'Noviembre';
+$labels['longdec'] = 'Diciembre';
+$labels['today'] = 'Hoy';
+$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
+$labels['writenewmessage'] = 'Crear nuevo mensaje';
+$labels['replytomessage'] = 'Responder mensaje';
+$labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
+$labels['forwardmessage'] = 'Reenviar mensaje';
+$labels['deletemessage'] = 'Eliminar mensaje';
+$labels['movemessagetotrash'] = 'Mover mensaje a la papelera';
+$labels['printmessage'] = 'Imprimir este mensaje';
+$labels['previousmessage'] = 'Mostrar mensaje anterior';
+$labels['previousmessages'] = 'Mostrar grupo anterior de mensajes';
+$labels['firstmessage'] = 'Mostrar primer mensaje';
+$labels['firstmessages'] = 'Mostrar primer grupo de mensajes';
+$labels['nextmessage'] = 'Mostrar siguente mensaje';
+$labels['nextmessages'] = 'Mostrar siguente grupo de mensajes';
+$labels['lastmessage'] = 'Mostrar último mensaje';
+$labels['lastmessages'] = 'Mostrar último grupo de mensajes';
+$labels['backtolist'] = 'Volver a la lista de mensajes';
+$labels['viewsource'] = 'Mostrar código';
+$labels['markmessages'] = 'Marcar mensajes';
+$labels['markread'] = 'Como leÃdo';
+$labels['markunread'] = 'Como no leÃdo';
+$labels['markflagged'] = 'Como marcado';
+$labels['markunflagged'] = 'Como no marcado';
+$labels['select'] = 'Elija';
+$labels['all'] = 'Todos';
+$labels['none'] = 'Ninguno';
+$labels['unread'] = 'Sin leer';
+$labels['flagged'] = 'Marcado';
+$labels['unanswered'] = 'Sin respuesta';
+$labels['filter'] = 'Filtrar';
+$labels['compact'] = 'Compactar';
+$labels['empty'] = 'Vaciar';
+$labels['purge'] = 'Eliminar';
+$labels['quota'] = 'Uso de disco';
+$labels['unknown'] = 'desconocido';
+$labels['unlimited'] = 'sin lÃmite';
+$labels['quicksearch'] = 'Búsqueda rápida';
+$labels['resetsearch'] = 'Reajustar la búsqueda';
+$labels['openinextwin'] = 'Abrir en ventana nueva';
+$labels['compose'] = 'Escribir un mensaje';
+$labels['savemessage'] = 'Guardar como borrador';
+$labels['sendmessage'] = 'Enviar ahora el mensaje';
+$labels['addattachment'] = 'Añadir un archivo';
+$labels['charset'] = 'Codificación';
+$labels['editortype'] = 'Tipo de editor';
+$labels['returnreceipt'] = 'Acuse de recibo';
+$labels['checkspelling'] = 'Revisar ortografÃa';
+$labels['resumeediting'] = 'Continuar edición';
+$labels['revertto'] = 'Revertir a';
+$labels['attachments'] = 'Adjuntos';
+$labels['upload'] = 'Agregar';
+$labels['close'] = 'Cerrar';
+$labels['low'] = 'Bajo';
+$labels['lowest'] = 'BajÃsimo';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Alto';
+$labels['highest'] = 'AltÃsimo';
+$labels['nosubject'] = '(sin asunto)';
+$labels['showimages'] = 'Mostrar imágenes';
+$labels['alwaysshow'] = 'Siempre mostratr imágenes de $sender';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Texto';
+$labels['savesentmessagein'] = 'Guardar mensaje enviado en';
+$labels['dontsave'] = 'no guardar';
+$labels['maxuploadsize'] = 'El tamaño maximo permitido por archivo es $size';
+$labels['addcc'] = 'Añadir Cc';
+$labels['addbcc'] = 'Añadir Cco';
+$labels['addreplyto'] = 'Añadir Respuesta a';
+$labels['mdnrequest'] = 'El emisor de este mensaje desea ser notificado cuando usted lo lea. ¿Quiere enviar esta notificación?';
+$labels['receiptread'] = 'Notificación de lectura';
+$labels['yourmessage'] = 'Esta es una notificación de lectura de su mensaje';
+$labels['receiptnote'] = 'Nota: Esta notificación sólo significa que su mensaje fue mostrado en la computadora del receptor. No hay garantÃa de que el receptor haya leÃdo o entendido el contenido del mensaje.';
+$labels['name'] = 'Nombre completo';
+$labels['firstname'] = 'Nombre';
+$labels['surname'] = 'Apellido';
+$labels['email'] = 'Correo';
+$labels['addcontact'] = 'Añadir nuevo contacto';
+$labels['editcontact'] = 'Editar contacto';
+$labels['edit'] = 'Editar';
+$labels['cancel'] = 'Cancelar';
+$labels['save'] = 'Guardar';
+$labels['delete'] = 'Eliminar';
+$labels['newcontact'] = 'Añador nuevo contacto';
+$labels['deletecontact'] = 'Eliminar contactos seleccionados';
+$labels['composeto'] = 'Enviar mensaje a';
+$labels['contactsfromto'] = 'Contactos $from a $to de $count';
+$labels['print'] = 'Imprimir';
+$labels['export'] = 'Exportar';
+$labels['exportvcards'] = 'Exportar contactos en format vCard';
+$labels['previouspage'] = 'Mostrar grupo anterior';
+$labels['firstpage'] = 'Mostrar primer grupo';
+$labels['nextpage'] = 'Mostrar siguiente grupo';
+$labels['lastpage'] = 'Mostrar último grupo';
+$labels['groups'] = 'Grupos';
+$labels['personaladrbook'] = 'Direcciones personales';
+$labels['import'] = 'Importar';
+$labels['importcontacts'] = 'Importar contactos';
+$labels['importfromfile'] = 'Importar desde el archivo:';
+$labels['importreplace'] = 'Reemplazar completamente la lista de contactos';
+$labels['importtext'] = 'Puede importar contactos desde una lista existente.
Actualmente soportamos la importación de contactos en formato vCard.';
+$labels['done'] = 'Hecho';
+$labels['settingsfor'] = 'Configuración para';
+$labels['preferences'] = 'Preferencias';
+$labels['userpreferences'] = 'Preferencias de usuario';
+$labels['editpreferences'] = 'Editar preferencias de usuario';
+$labels['identities'] = 'Identidades';
+$labels['manageidentities'] = 'Gestionar identidades para esta cuenta';
+$labels['newidentity'] = 'Nueva identidad';
+$labels['newitem'] = 'Nuevo';
+$labels['edititem'] = 'Editar';
+$labels['setdefault'] = 'Seleccionar opción por defecto';
+$labels['autodetect'] = 'Automático';
+$labels['language'] = 'Idioma';
+$labels['timezone'] = 'Zona horaria';
+$labels['pagesize'] = 'Filas por página';
+$labels['signature'] = 'Firma';
+$labels['dstactive'] = 'Cambio de horario';
+$labels['htmleditor'] = 'Componer mensaje en HTML';
+$labels['htmlsignature'] = 'Firma HTML';
+$labels['previewpane'] = 'Mostrar vista preliminar';
+$labels['skin'] = 'Apariencia de la interfaz';
+$labels['logoutclear'] = 'Vaciar papelera al cerrar sesión';
+$labels['logoutcompact'] = 'Compactar la bandeja de entrada al cerrar sesión';
+$labels['uisettings'] = 'Interfaz de usuario';
+$labels['serversettings'] = 'Configuración del servidor';
+$labels['mailboxview'] = 'Vista de buzón';
+$labels['mdnrequests'] = 'Notificaciones de envÃo';
+$labels['askuser'] = 'preguntar al usuario';
+$labels['autosend'] = 'enviar automáticamente';
+$labels['ignore'] = 'ignorar';
+$labels['readwhendeleted'] = 'Marcar el mensage como leido al borrarlo';
+$labels['flagfordeletion'] = 'Marcar el mensage para borrarse en vez de borrarlo';
+$labels['skipdeleted'] = 'No mostrar mensajes eliminados';
+$labels['showremoteimages'] = 'Mostrar imágenes remotas';
+$labels['fromknownsenders'] = 'de remitentes conocidos';
+$labels['always'] = 'siempre';
+$labels['showinlineimages'] = 'Mostrar imágenes adjuntas debajo del mensaje';
+$labels['autosavedraft'] = 'Guardar borrador automáticamente';
+$labels['everynminutes'] = 'cada $n minutos';
+$labels['keepaliveevery'] = 'cada $n minutos(s)';
+$labels['keepalive'] = 'Verificar si hay nuevos mensajes en';
+$labels['never'] = 'nunca';
+$labels['messagesdisplaying'] = 'Vista de mensajes';
+$labels['messagescomposition'] = 'Composición de mensajes';
+$labels['mimeparamfolding'] = 'Nombre de adjuntos';
+$labels['2231folding'] = 'RFC 2231 Completo (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'RFC 2047 Completo (Otro)';
+$labels['advancedoptions'] = 'Opciones Avanzadas';
+$labels['focusonnewmessage'] = 'Traer al frente la ventana del navegador cuando haya nuevos mensajes';
+$labels['checkallfolders'] = 'Verificar todas las carpetas por nuevos mensajes';
+$labels['folder'] = 'Carpeta';
+$labels['folders'] = 'Carpetas';
+$labels['foldername'] = 'Nombre de carpeta';
+$labels['subscribed'] = 'Suscripta';
+$labels['messagecount'] = 'Mensajes';
+$labels['create'] = 'Crear';
+$labels['createfolder'] = 'Crear nueva carpeta';
+$labels['rename'] = 'Renombrar';
+$labels['renamefolder'] = 'Renombrar carpeta';
+$labels['deletefolder'] = 'Eliminar carpeta';
+$labels['managefolders'] = 'Administrar carpetas';
+$labels['specialfolders'] = 'Carpetas Especiales';
+$labels['sortby'] = 'Ordenar por';
+$labels['sortasc'] = 'Orden ascendente';
+$labels['sortdesc'] = 'Orden descendente';
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
+
+?>
diff --git a/program/localization/es_AR/messages.inc b/program/localization/es_AR/messages.inc
new file mode 100644
index 0000000..206c9a0
--- /dev/null
+++ b/program/localization/es_AR/messages.inc
@@ -0,0 +1,102 @@
+ |
+| David Grajal Blanco |
+| Lito Jornero |
+| Pablo Rosciani |
+| http://www.netsud.com |
++-----------------------------------------------------------------------+
+
+@version $Id: messages.inc 1600 2009-01-13 11:40:30Z yllar $
+
+*/
+
+$messages = array();
+
+$messages['loginfailed'] = 'Contraseña incorrecta';
+$messages['cookiesdisabled'] = 'Su navegador no acepta cookies';
+$messages['sessionerror'] = 'Su sesión no existe o ha expirado';
+$messages['imaperror'] = 'Error de conexión con el servidor IMAP';
+$messages['nomessagesfound'] = 'No se han encontrado mensajes en esta casilla';
+$messages['loggedout'] = 'Ha cerrado la sesión. ¡Hasta pronto!';
+$messages['mailboxempty'] = 'La casilla está vacÃa';
+$messages['loading'] = 'Cargando...';
+$messages['loadingdata'] = 'Cargando datos...';
+$messages['checkingmail'] = 'Verificando si hay nuevos mensajes...';
+$messages['sendingmessage'] = 'Enviando mensaje...';
+$messages['messagesent'] = 'Mensaje enviado correctamente';
+$messages['savingmessage'] = 'Guardar mensaje...';
+$messages['messagesaved'] = 'Mensaje guardado en borradores';
+$messages['successfullysaved'] = 'Guardado correctamente';
+$messages['addedsuccessfully'] = 'Contacto añadido correctamente a la libreta de direcciones';
+$messages['contactexists'] = 'Ya existe un contacto con esta dirección de correo';
+$messages['blockedimages'] = 'Para proteger su privacidad, las imágenes externas han sido bloqueadas en este mensaje';
+$messages['encryptedmessage'] = 'Este es un mensaje cifrado y no puede ser mostrado. ¡Lo siento!';
+$messages['nocontactsfound'] = 'No hay contactos';
+$messages['contactnotfound'] = 'El contacto solicitado no existe';
+$messages['sendingfailed'] = 'Error al enviar mensaje';
+$messages['senttooquickly'] = 'Por favor, aguarde $sec segundo(s) antes de enviar este mensaje';
+$messages['errorsavingsent'] = 'Ocurrió un error al guardar el mensaje enviado';
+$messages['errorsaving'] = 'Ocurrió un error al guardar';
+$messages['errormoving'] = 'No se ha podido mover el mensaje';
+$messages['errordeleting'] = 'No se ha podido eliminar el mensaje';
+$messages['deletecontactconfirm'] = '¿Realmente quiere eliminar los contactos seleccionados?';
+$messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
+$messages['deletefolderconfirm'] = '¿Está seguro de que quiere eliminar esta carpeta?';
+$messages['purgefolderconfirm'] = '¿Está seguro de que quiere eliminar todos los mensajes de esta carpeta?';
+$messages['foldercreating'] = 'Creando carpeta...';
+$messages['folderdeleting'] = 'Eliminando carpeta...';
+$messages['folderrenaming'] = 'Renombrando carpeta...';
+$messages['foldermoving'] = 'Moviendo carpeta...';
+$messages['formincomplete'] = 'No se han llenado todos los campos del formulario';
+$messages['noemailwarning'] = 'Por favor, introduzca un e-mail válido';
+$messages['nonamewarning'] = 'Por favor, introduzca su nombre';
+$messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página';
+$messages['nosenderwarning'] = 'Please enter sender e-mail address'; //TODO
+$messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario';
+$messages['nosubjectwarning'] = 'El campo "Asunto" esta vacÃo. ¿Desea completarlo en este momento?';
+$messages['nobodywarning'] = '¿Quiere enviar este mensaje sin texto?';
+$messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Desea descartar su mensaje?';
+$messages['noldapserver'] = 'Por favor, seleccione un servidor LDAP para buscar';
+$messages['nocontactsreturned'] = 'No se han encontrado contactos';
+$messages['nosearchname'] = 'Por favor, introduzca un nombre o la dirección de e-mail';
+$messages['searchsuccessful'] = 'Se encontraron $nr mensajes';
+$messages['searchnomatch'] = 'La búsqueda no obtuvo resultados';
+$messages['searching'] = 'Buscando...';
+$messages['checking'] = 'Revisando...';
+$messages['nospellerrors'] = 'No se encontraron errores ortográficos';
+$messages['folderdeleted'] = 'Carpeta eliminada exitosamente';
+$messages['deletedsuccessfully'] = 'Eliminado exitosamente';
+$messages['converting'] = 'Removiendo el formato del mensaje...';
+$messages['messageopenerror'] = 'No puedo descargar el mensaje del servidor';
+$messages['fileuploaderror'] = 'Fallo en la subida de archivos';
+$messages['filesizeerror'] = 'El archivo excede el tamaño maximo ($size)';
+$messages['copysuccess'] = '$nr direcciones copiadas con éxito';
+$messages['copyerror'] = 'No se pudo copiar ninguna dirección';
+$messages['sourceisreadonly'] = 'Esta dirección es de sólo-lectura';
+$messages['errorsavingcontact'] = 'No se pudo guardar la dirección de contacto';
+$messages['movingmessage'] = 'Moviendo mensaje...';
+$messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito.';
+$messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.';
+$messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.';
+$messages['addsubfolderhint'] = 'Esta carpeta se creará como una subcarpeta dentro de la carpeta seleccionada';
+$messages['forbiddencharacter'] = 'El nombre de la carpeta contiene un caracter prohibido';
+$messages['selectimportfile'] = 'Por favor, seleccione el archivo a subir';
+$messages['addresswriterror'] = 'La libreta de direcciones seleccionada es de solo lectura';
+$messages['importwait'] = 'Importando, aguarde por favor...';
+$messages['importerror'] = 'Falló la importación! El archivo seleccionado parece no ser un archivo del tipo vCard válido.';
+$messages['importconfirm'] = 'Se importaron $inserted contactos correctamente. $skipped ya existentes fueron ignorados:$names
'; //TODO: ¿names?
+$messages['opnotpermitted'] = 'Operación no permitida!';
+$messages['nofromaddress'] = 'Missing e-mail address in selected identity'; //TODO
+$messages['editorwarning'] = 'Si cambia a texto plano se perderán todas las opciones de formato. ¿Desea continuar?';
+
+?>
\ No newline at end of file
diff --git a/program/localization/es_ES/labels.inc b/program/localization/es_ES/labels.inc
index 4012049..3eab5b2 100644
--- a/program/localization/es_ES/labels.inc
+++ b/program/localization/es_ES/labels.inc
@@ -14,27 +14,36 @@
| http://www.smaldone.com.ar |
| David Grajal Blanco |
| http://david.grajal.net |
+| Angel Bueno Prieto |
+| http://www.mediaiberia.com |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2319 2009-03-01 06:43:24Z alec $
*/
$labels = array();
+// login page
$labels['welcome'] = 'Bienvenido a $product';
$labels['username'] = 'Nombre de usuario';
$labels['password'] = 'Contraseña';
$labels['server'] = 'Servidor';
$labels['login'] = 'Entrar';
+
+// taskbar
$labels['logout'] = 'Cerrar sesión';
$labels['mail'] = 'Correo';
$labels['settings'] = 'Configuración';
$labels['addressbook'] = 'Contactos';
+
+// mailbox names
$labels['inbox'] = 'Entrada';
$labels['drafts'] = 'Borradores';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Papelera';
$labels['junk'] = 'Basura';
+
+// message listing
$labels['subject'] = 'Asunto';
$labels['from'] = 'Remitente';
$labels['to'] = 'Destinatario';
@@ -45,18 +54,27 @@ $labels['date'] = 'Fecha';
$labels['size'] = 'Tamaño';
$labels['priority'] = 'Prioridad';
$labels['organization'] = 'Organización';
-$labels['reply-to'] = 'Respuesta a';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
$labels['mailboxlist'] = 'Bandejas';
$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
$labels['messagenrof'] = 'Mensaje $nr de $count';
-$labels['moveto'] = 'mover a...';
-$labels['download'] = 'descargar';
+
+$labels['moveto'] = 'Mover a...';
+$labels['download'] = 'Descargar';
+
$labels['filename'] = 'Nombre del archivo';
$labels['filesize'] = 'Tamaño del archivo';
+
$labels['preferhtml'] = 'Prefiero HTML';
$labels['htmlmessage'] = 'Mensaje HTML';
$labels['prettydate'] = 'Fecha detallada';
+
$labels['addtoaddressbook'] = 'Añadir a contactos';
+
+// weekdays short
$labels['sun'] = 'Dom';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
@@ -64,6 +82,8 @@ $labels['wed'] = 'Mié';
$labels['thu'] = 'Jue';
$labels['fri'] = 'Vie';
$labels['sat'] = 'Sáb';
+
+// weekdays long
$labels['sunday'] = 'Domingo';
$labels['monday'] = 'Lunes';
$labels['tuesday'] = 'Martes';
@@ -71,6 +91,8 @@ $labels['wednesday'] = 'Miércoles';
$labels['thursday'] = 'Jueves';
$labels['friday'] = 'Viernes';
$labels['saturday'] = 'Sábado';
+
+// months short
$labels['jan'] = 'Ene';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
@@ -82,7 +104,9 @@ $labels['aug'] = 'Ago';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Nov';
-$labels['dec'] = 'Duc';
+$labels['dec'] = 'Dic';
+
+// months long
$labels['longjan'] = 'Enero';
$labels['longfeb'] = 'Febrero';
$labels['longmar'] = 'Marzo';
@@ -95,42 +119,56 @@ $labels['longsep'] = 'Septiembre';
$labels['longoct'] = 'Octubre';
$labels['longnov'] = 'Noviembre';
$labels['longdec'] = 'Diciembre';
+
$labels['today'] = 'Hoy';
-$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
-$labels['writenewmessage'] = 'Crear nuevo mensaje';
-$labels['replytomessage'] = 'Responder mensaje';
+
+// toolbar buttons
+$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
+$labels['writenewmessage'] = 'Crear nuevo mensaje';
+$labels['replytomessage'] = 'Responder mensaje';
$labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
-$labels['forwardmessage'] = 'Reenviar mensaje';
-$labels['deletemessage'] = 'Eliminar mensaje';
+$labels['forwardmessage'] = 'Reenviar mensaje';
+$labels['deletemessage'] = 'Eliminar mensaje';
$labels['movemessagetotrash'] = 'Mover mensaje a la papelera';
-$labels['printmessage'] = 'Imprimir este mensaje';
-$labels['previousmessage'] = 'Mostrar mensaje anterior';
-$labels['previousmessages'] = 'Mostrar grupo anterior de mensajes';
-$labels['firstmessage'] = 'Mostrar primer mensaje';
-$labels['firstmessages'] = 'Mostrar primer grupo de mensajes';
-$labels['nextmessage'] = 'Mostrar siguente mensaje';
-$labels['nextmessages'] = 'Mostrar siguente grupo de mensajes';
-$labels['lastmessage'] = 'Mostrar último mensaje';
-$labels['lastmessages'] = 'Mostrar último grupo de mensajes';
-$labels['backtolist'] = 'Volver a la lista de mensajes';
-$labels['viewsource'] = 'Mostrar código';
-$labels['markmessages'] = 'Marcar mensajes';
-$labels['markread'] = 'Como leÃdo';
-$labels['markunread'] = 'Como no leÃdo';
-$labels['markflagged'] = 'Como marcado';
-$labels['markunflagged'] = 'Como no marcado';
+$labels['printmessage'] = 'Imprimir este mensaje';
+$labels['previousmessage'] = 'Mostrar mensaje anterior';
+$labels['previousmessages'] = 'Mostrar grupo anterior de mensajes';
+$labels['firstmessage'] = 'Mostrar primer mensaje';
+$labels['firstmessages'] = 'Mostrar primer grupo de mensajes';
+$labels['nextmessage'] = 'Mostrar siguente mensaje';
+$labels['nextmessages'] = 'Mostrar siguente grupo de mensajes';
+$labels['lastmessage'] = 'Mostrar último mensaje';
+$labels['lastmessages'] = 'Mostrar último grupo de mensajes';
+$labels['backtolist'] = 'Volver a la lista de mensajes';
+$labels['viewsource'] = 'Mostrar código';
+$labels['markmessages'] = 'Marcar mensajes';
+$labels['markread'] = 'Como leÃdo';
+$labels['markunread'] = 'Como no leÃdo';
+$labels['markflagged'] = 'Como marcado';
+$labels['markunflagged'] = 'Como no marcado';
+
$labels['select'] = 'Elija';
$labels['all'] = 'Todos';
$labels['none'] = 'Ninguno';
$labels['unread'] = 'Sin leer';
+$labels['flagged'] = 'Señalado';
+$labels['unanswered'] = 'Sin respuesta';
+$labels['filter'] = 'Filtrar';
+
$labels['compact'] = 'Compacta';
-$labels['empty'] = 'Vacia';
+$labels['empty'] = 'VacÃa';
$labels['purge'] = 'Eliminar';
-$labels['quota'] = 'Uso de disco';
+
+$labels['quota'] = 'Uso de cuenta';
$labels['unknown'] = 'desconocido';
$labels['unlimited'] = 'sin lÃmite';
+
$labels['quicksearch'] = 'Búsqueda rápida';
-$labels['resetsearch'] = 'Reajustar la búsqueda';
+$labels['resetsearch'] = 'Afinar la búsqueda';
+
+$labels['openinextwin'] = 'Abrir en nueva ventana';
+
+// message compose
$labels['compose'] = 'Escribir un mensaje';
$labels['savemessage'] = 'Guardar como borrador';
$labels['sendmessage'] = 'Enviar ahora el mensaje';
@@ -138,61 +176,94 @@ $labels['addattachment'] = 'Añadir un archivo';
$labels['charset'] = 'Codificación';
$labels['editortype'] = 'Tipo de editor';
$labels['returnreceipt'] = 'Acuse de recibo';
+
$labels['checkspelling'] = 'Revisar ortografÃa';
$labels['resumeediting'] = 'Continuar edición';
$labels['revertto'] = 'Revertir a';
+
$labels['attachments'] = 'Adjuntos';
$labels['upload'] = 'Subir';
$labels['close'] = 'Cerrar';
+
$labels['low'] = 'Bajo';
$labels['lowest'] = 'BajÃsimo';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alto';
$labels['highest'] = 'AltÃsimo';
+
$labels['nosubject'] = '(sin asunto)';
$labels['showimages'] = 'Mostrar imágenes';
$labels['alwaysshow'] = 'Muestra siempre imágenes de $sender';
+
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto';
+$labels['savesentmessagein'] = 'Guardar mensaje enviado en';
+$labels['dontsave'] = 'No guardar';
+$labels['maxuploadsize'] = 'Tamaño máximo permitido: $size';
+
$labels['addcc'] = 'Añadir Cc';
$labels['addbcc'] = 'Añadir Bcc';
$labels['addreplyto'] = 'Añadir Respuesta a';
+
+// mdn
$labels['mdnrequest'] = 'El emisor de este mensaje desea ser notificado cuando usted lo lea. ¿Quiere enviar esta notificación?';
$labels['receiptread'] = 'Notificación de lectura';
$labels['yourmessage'] = 'Esta es una notificación de lectura de su mensaje';
$labels['receiptnote'] = 'Nota: Esta notificación sólo significa que su mensaje fue mostrado en la computadora del receptor. No hay garantÃa de que el receptor haya leÃdo o entendido el contenido del mensaje.';
+
+// address boook
$labels['name'] = 'Nombre completo';
$labels['firstname'] = 'Nombre';
$labels['surname'] = 'Apellido';
$labels['email'] = 'Correo';
+
$labels['addcontact'] = 'Añadir nuevo contacto';
$labels['editcontact'] = 'Editar contacto';
+
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
$labels['save'] = 'Guardar';
$labels['delete'] = 'Eliminar';
+
$labels['newcontact'] = 'Crear nuevo contacto';
$labels['deletecontact'] = 'Eliminar contactos seleccionados';
$labels['composeto'] = 'Enviar mensaje a';
$labels['contactsfromto'] = 'Contactos $from a $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
+$labels['exportvcards'] = 'Exportar contactos en formato vCard';
+
$labels['previouspage'] = 'Mostrar grupo anterior';
$labels['firstpage'] = 'Mostrar primer grupo';
$labels['nextpage'] = 'Mostrar grupo siguiente';
$labels['lastpage'] = 'Mostrar último grupo';
+
$labels['groups'] = 'Grupos';
$labels['personaladrbook'] = 'Direcciones personales';
+
+$labels['import'] = 'Importar';
+$labels['importcontacts'] = 'Importar contactos';
+$labels['importfromfile'] = 'Importar desde archivo:';
+$labels['importreplace'] = 'Reemplazar toda la lista de contactos';
+$labels['importtext'] = 'Puedes importar contactos de una lista existente.
Puedes ver el formato soportado de datos en: vCard.';
+$labels['done'] = 'Realizado';
+
+// settings
$labels['settingsfor'] = 'Configuración para';
+
$labels['preferences'] = 'Preferencias';
$labels['userpreferences'] = 'Preferencias de usuario';
$labels['editpreferences'] = 'Editar preferencias de usuario';
+
$labels['identities'] = 'Identidades';
$labels['manageidentities'] = 'Gestionar identidades para esta cuenta';
$labels['newidentity'] = 'Nueva identidad';
+
$labels['newitem'] = 'Nuevo';
$labels['edititem'] = 'Editar';
+
$labels['setdefault'] = 'Seleccionar opción por defecto';
+$labels['autodetect'] = 'Auto';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Zona horaria';
$labels['pagesize'] = 'Filas por página';
@@ -205,20 +276,34 @@ $labels['skin'] = 'Apariencia de la interfaz';
$labels['logoutclear'] = 'Vaciar papelera al cerrar sesión';
$labels['logoutcompact'] = 'Compactar la bandeja de entrada al cerrar sesión';
$labels['uisettings'] = 'Interfaz de usuario';
-$labels['serversettings'] = 'Configuracion del servidor';
+$labels['serversettings'] = 'Configuración del servidor';
$labels['mailboxview'] = 'Vista de buzón';
-$labels['mdnrequests'] = 'Notificaciones de envio';
+$labels['mdnrequests'] = 'Notificaciones de envÃo';
$labels['askuser'] = 'preguntar al usuario';
$labels['autosend'] = 'enviar automáticamente';
$labels['ignore'] = 'ignorar';
-$labels['readwhendeleted'] = 'Marcar el mensage como leido al borrarlo';
-$labels['flagfordeletion'] = 'Marcar el mensage para borrarse en vez de borrarlo';
+$labels['readwhendeleted'] = 'Marcar el mensaje como leÃdo al borrarlo';
+$labels['flagfordeletion'] = 'Marcar el mensaje para borrarse en vez de borrarlo';
+$labels['skipdeleted'] = 'No mostrar mensajes borrados';
+$labels['showremoteimages'] = 'Mostrar las imágenes externas';
+$labels['fromknownsenders'] = 'de remitentes conocidos';
+$labels['always'] = 'siempre';
$labels['showinlineimages'] = 'Mostrar imágenes adjuntas debajo del mensaje';
$labels['autosavedraft'] = 'Guardar borrador automáticamente';
$labels['everynminutes'] = 'cada $n minutos';
+$labels['keepaliveevery'] = 'cada $n minuto(s)';
+$labels['keepalive'] = 'Comprobar mensajes en lÃnea';
$labels['never'] = 'nunca';
$labels['messagesdisplaying'] = 'Vista de mensajes';
$labels['messagescomposition'] = 'Composición de mensajes';
+$labels['mimeparamfolding'] = 'Nombres de archivos adjuntos';
+$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (otro)';
+$labels['advancedoptions'] = 'Opciones Avanzadas';
+$labels['focusonnewmessage'] = 'Activar la ventana del navegador en un mensaje nuevo';
+$labels['checkallfolders'] = 'Comprobar todas las carpetas para mensajes nuevos';
+
$labels['folder'] = 'Bandeja';
$labels['folders'] = 'Bandejas';
$labels['foldername'] = 'Nombre de bandeja';
@@ -230,8 +315,16 @@ $labels['rename'] = 'Renombrar';
$labels['renamefolder'] = 'Renombrar bandeja';
$labels['deletefolder'] = 'Eliminar bandeja';
$labels['managefolders'] = 'Administrar bandejas';
+$labels['specialfolders'] = 'Bandejas Especiales';
+
$labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Orden ascendente';
$labels['sortdesc'] = 'Orden descendente';
+// units
+$labels['B'] = 'B';
+$labels['KB'] = 'Kb';
+$labels['MB'] = 'Mb';
+$labels['GB'] = 'Gb';
+
?>
diff --git a/program/localization/es_ES/messages.inc b/program/localization/es_ES/messages.inc
index e9b7fed..280e337 100644
--- a/program/localization/es_ES/messages.inc
+++ b/program/localization/es_ES/messages.inc
@@ -13,14 +13,15 @@
| Author: Javier Smaldone |
| David Grajal Blanco |
| Lito Jornero |
+| Angel Bueno |
+| htt://www.mediaiberia.com |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 1600 2008-07-21 08:52:30Z yllar $
-
+@version $Id: messages.inc 2319 2009-03-01 06:43:24Z alec $
*/
$messages = array();
-$messages['loginfailed'] = 'Contraseña incorrecta';
+$messages['loginfailed'] = 'Contraseña o nombre de usuario incorrecto';
$messages['cookiesdisabled'] = 'Su navegador no acepta cookies';
$messages['sessionerror'] = 'Su sesión no existe o ha expirado';
$messages['imaperror'] = 'Error de conexión con el servidor IMAP';
@@ -42,6 +43,8 @@ $messages['encryptedmessage'] = 'Este es un mensaje cifrado y no puede ser mostr
$messages['nocontactsfound'] = 'No hay contactos';
$messages['contactnotfound'] = 'El contacto solicitado no existe';
$messages['sendingfailed'] = 'Error al enviar mensaje';
+$messages['senttooquickly'] = 'Por favor espere $sec seg(s). antes de mandar este mensaje';
+$messages['errorsavingsent'] = 'Un error ha ocurrido al guardar el mensaje enviado';
$messages['errorsaving'] = 'Ocurrió un error mientras se guardaba';
$messages['errormoving'] = 'No se ha podido mover el mensaje';
$messages['errordeleting'] = 'No se ha podido eliminar el mensaje';
@@ -49,19 +52,24 @@ $messages['deletecontactconfirm'] = '¿Realmente quiere eliminar los contactos s
$messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
$messages['deletefolderconfirm'] = '¿Está seguro de que quiere eliminar esta carpeta?';
$messages['purgefolderconfirm'] = '¿Está seguro de que quiere eliminar todos los mensajes de esta carpeta?';
-$messages['formincomplete'] = 'No se han llenado todos los campos del formulario';
+$messages['foldercreating'] = 'Creando carpeta...';
+$messages['folderdeleting'] = 'Borrando carpeta...';
+$messages['folderrenaming'] = 'Renombrando carpeta...';
+$messages['foldermoving'] = 'Moviendo carpeta...';
+$messages['formincomplete'] = 'No ha rellenado todos los campos del formulario';
$messages['noemailwarning'] = 'Por favor, introduzca un e-mail válido';
$messages['nonamewarning'] = 'Por favor, introduzca su nombre';
$messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página';
+$messages['nosenderwarning'] = 'Por favor, introduzca el e-mail de quien envÃa';
$messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario';
-$messages['nosubjectwarning'] = 'El campo "Asunto" esta vacÃo. ¿Desea completarlo en este momento?';
+$messages['nosubjectwarning'] = 'El campo "Asunto" está vacÃo. ¿Desea completarlo en este momento?';
$messages['nobodywarning'] = '¿Quiere enviar este mensaje sin texto?';
$messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Desea descartar su mensaje?';
$messages['noldapserver'] = 'Por favor, seleccione un servidor LDAP para buscar';
$messages['nocontactsreturned'] = 'No se han encontrado contactos';
$messages['nosearchname'] = 'Por favor, introduzca un nombre o la dirección de e-mail';
$messages['searchsuccessful'] = 'Se encontraron $nr mensajes';
-$messages['searchnomatch'] = 'La búsqueda no obtuvo resultados';
+$messages['searchnomatch'] = 'No se obtuvieron resultados';
$messages['searching'] = 'Buscando...';
$messages['checking'] = 'Revisando...';
$messages['nospellerrors'] = 'No se encontraron errores ortográficos';
@@ -70,7 +78,7 @@ $messages['deletedsuccessfully'] = 'Eliminado exitosamente';
$messages['converting'] = 'Removiendo el formato del mensaje...';
$messages['messageopenerror'] = 'No puedo descargar el mensaje del servidor';
$messages['fileuploaderror'] = 'Fallo en la subida de archivos';
-$messages['filesizeerror'] = 'El archivo excede el tamaño maximo ($size)';
+$messages['filesizeerror'] = 'El archivo excede el tamaño máximo ($size)';
$messages['copysuccess'] = '$nr direcciones copiadas con éxito';
$messages['copyerror'] = 'No se pudo copiar ninguna dirección';
$messages['sourceisreadonly'] = 'Esta dirección es de sólo-lectura';
@@ -80,6 +88,14 @@ $messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito
$messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.';
$messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.';
$messages['addsubfolderhint'] = 'Esta carpeta se creará como una subcarpeta dentro de la carpeta seleccionada';
-$messages['forbiddencharacter'] = 'El nombre de la carpeta contiene un caracter prohibido';
+$messages['forbiddencharacter'] = 'El nombre de la carpeta contiene un carácter prohibido';
+$messages['selectimportfile'] = 'Por favor, seleccione un archivo para subir';
+$messages['addresswriterror'] = 'No se puede escribir la dirección de contacto seleccionada';
+$messages['importwait'] = 'Importando, espere...';
+$messages['importerror'] = '¡Fallo al Importar! Este archivo no es un formato válido vCard.';
+$messages['importconfirm'] = 'Se han insertado: $inserted contactos, y se han omitido: $skipped porque ya existÃan:$names
';
+$messages['opnotpermitted'] = '¡Operación no permitida!';
+$messages['nofromaddress'] = 'No se encuentra la dirección e-mail en el contacto seleccionado';
+$messages['editorwarning'] = 'Cambiando a texto plano perderá el formato del mensaje. ¿Desea continuar?';
?>
diff --git a/program/localization/et_EE/labels.inc b/program/localization/et_EE/labels.inc
index 809911f..a029447 100644
--- a/program/localization/et_EE/labels.inc
+++ b/program/localization/et_EE/labels.inc
@@ -6,7 +6,7 @@
| language/et_EE/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/et_EE/messages.inc b/program/localization/et_EE/messages.inc
index 676e745..12f4d2c 100644
--- a/program/localization/et_EE/messages.inc
+++ b/program/localization/et_EE/messages.inc
@@ -6,7 +6,7 @@
| language/et_EE/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/eu_ES/labels.inc b/program/localization/eu_ES/labels.inc
index dce8d3d..886cd64 100644
--- a/program/localization/eu_ES/labels.inc
+++ b/program/localization/eu_ES/labels.inc
@@ -5,7 +5,7 @@
| language/eu_ES/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -13,7 +13,7 @@
| Bihar |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/eu_ES/messages.inc b/program/localization/eu_ES/messages.inc
index b44ac7d..55a82ee 100644
--- a/program/localization/eu_ES/messages.inc
+++ b/program/localization/eu_ES/messages.inc
@@ -5,7 +5,7 @@
| language/eu_ES/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -13,7 +13,7 @@
| Bihar |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 1663 2008-08-21 06:19:10Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/fa/labels.inc b/program/localization/fa/labels.inc
index 83b36dc..485e220 100644
--- a/program/localization/fa/labels.inc
+++ b/program/localization/fa/labels.inc
@@ -5,12 +5,13 @@
| language/fa/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
-| Author: Mohammad Ebrahim Mohammadi Panah |
-| Anoosh |
+| Author: Mohammad Ebrahim Mohammadi Panah |
+| Anoosh |
+| Nader Aghazadeh |
+-----------------------------------------------------------------------+
@version $Id$
@@ -114,10 +115,15 @@ $labels['viewsource'] = 'ÙÙ
Ø§ÛØ´ Ù
ÙØ¨Ø¹';
$labels['markmessages'] = 'Ø¹ÙØ§Ù
تâÚ¯Ø°Ø§Ø±Û Ù¾ÛØºØ§Ù
âÙØ§';
$labels['markread'] = 'ب٠عÙÙØ§Ù Ø®ÙØ§ÙدÙâØ´Ø¯Ù';
$labels['markunread'] = 'ب٠عÙÙØ§Ù Ø®ÙØ§ÙدÙâÙØ´Ø¯Ù';
+$labels['markflagged'] = 'ب٠عÙÙØ§Ù Ø¹ÙØ§Ù
ت Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ù';
+$labels['markunflagged'] = 'ب٠عÙÙØ§Ù Ø¹ÙØ§Ù
ت Ú¯Ø°Ø§Ø±Û ÙØ´Ø¯Ù';
$labels['select'] = 'Ø§ÙØªØ®Ø§Ø¨';
$labels['all'] = 'ÙÙ
Ù';
$labels['none'] = 'ÙÛÚ';
$labels['unread'] = 'ÙØ§Ø®ÙØ§ÙØ¯Ù';
+$labels['flagged'] = 'Ø¹ÙØ§Ù
ت Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ù';
+$labels['unanswered'] = 'پاسخ Ø¯Ø§Ø¯Ù ÙØ´Ø¯Ù';
+$labels['filter'] = 'ÙÛÙØªØ±';
$labels['compact'] = 'ÙØ´Ø±Ø¯Ù';
$labels['empty'] = 'خاÙÛ';
$labels['purge'] = 'خرد کردÙ';
@@ -126,6 +132,7 @@ $labels['unknown'] = 'ÙØ§Ø´ÙاختÙ';
$labels['unlimited'] = 'ÙØ§Ù
ØØ¯Ùد';
$labels['quicksearch'] = 'جستجÙÛ Ø³Ø±ÛØ¹';
$labels['resetsearch'] = 'Ø´Ø±ÙØ¹ Ù
جدد جستجÙ';
+$labels['openinextwin'] = 'ÙÙ
Ø§ÛØ´ در ØµÙØÙ Ø¬Ø¯ÛØ¯';
$labels['compose'] = 'ÙÙØ´ØªÙ Ù¾ÛØºØ§Ù
';
$labels['savemessage'] = 'Ø°Ø®ÛØ±ÙâÛ Ø§ÛÙ Ù¾ÛØ´âÙÙÛØ³';
$labels['sendmessage'] = 'Ø§Ø±Ø³Ø§Ù Ù¾ÛØºØ§Ù
';
@@ -149,6 +156,9 @@ $labels['showimages'] = 'ÙÙ
Ø§ÛØ´ عکسâÙØ§';
$labels['alwaysshow'] = 'را ÙÙ
Ø§ÛØ´ بد٠$sender ÙÙ
ÛØ´Ù Ø¹Ú©Ø³ÙØ§Û Ø¯Ø±ÛØ§ÙØªÛ Ø§Ø² ';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Ù
ت٠سادÙ';
+$labels['savesentmessagein'] = 'Ø°Ø®ÛØ±Ù Ù¾ÛØºØ§Ù
ارساÙÛ Ø¯Ø±';
+$labels['dontsave'] = 'Ø°Ø®ÛØ±Ù ÙÚ©Ù';
+$labels['maxuploadsize'] = 'Ù
جاز Ù
Û Ø¨Ø§Ø´Ø¯ $size ØØ¬Ù
ÙØ§ÛÙ ØØ¯Ø§Ú©Ø«Ø± تا Ù
ÛØ²Ø§Ù ';
$labels['addcc'] = 'Ø§ÙØ²Ùد٠رÙÙÙØ´Øª';
$labels['addbcc'] = 'Ø§ÙØ²Ùد٠رÙÙÙØ´Øª Ù
Ø®ÙÛ';
$labels['addreplyto'] = 'Ø§ÙØ²Ùد٠پاسخ-بÙ';
@@ -172,12 +182,19 @@ $labels['composeto'] = 'ÙÙØ´ØªÙ ÙØ§Ù
٠بÙ';
$labels['contactsfromto'] = ' تا $count از $to تا $from تÙ
اسâÙØ§Û';
$labels['print'] = 'ÚØ§Ù¾';
$labels['export'] = 'ØµØ¯ÙØ±';
+$labels['exportvcards'] = 'ØµØ¯ÙØ± Ø§Ø·ÙØ§Ø¹Ø§Øª تÙ
اس ÙØ§ با ÙØ±Ù
ت Vcard';
$labels['previouspage'] = 'ÙÙ
Ø§ÛØ´ دستÙâÛ ÙØ¨ÙÛ';
$labels['firstpage'] = 'ÙÙ
Ø§ÛØ´ دستÙâÛ Ø§ÙÙ';
$labels['nextpage'] = 'ÙÙ
Ø§ÛØ´ دستÙâÛ Ø¨Ø¹Ø¯Û';
$labels['lastpage'] = 'ÙÙ
Ø§ÛØ´ دستÙâÛ Ø¢Ø®Ø±';
$labels['groups'] = 'گرÙÙâÙØ§';
$labels['personaladrbook'] = 'ÙØ´Ø§ÙÛâÙØ§Û شخصÛ';
+$labels['import'] = 'ÙØ§Ø±Ø¯ کرد٠';
+$labels['importcontacts'] = 'ÙØ§Ø±Ø¯ کرد٠تÙ
Ø§Ø³ÙØ§';
+$labels['importfromfile'] = ':ÙØ±Ùد Ø§Ø·ÙØ§Ø¹Ø§Øª از ÙØ§ÛÙ ';
+$labels['importreplace'] = 'جاÛگزÛÙÛ Ø¯ÙØªØ±Ú٠آدرس کاÙ
Ù';
+$labels['importtext'] = 'Ø´Ù
ا Ù
ÛØªÙاÙÛØ¯ Ø§Ø·ÙØ§Ø¹Ø§Øª تÙ
اس ÙØ§ را Ø¨Ù Ø¯ÙØªØ±Ú٠تÙÙÙ Ù
ÙØ¬Ùد Ù
ÙØªÙÙ Ú©ÙÛØ¯.
Ù
ا در ØØ§Ù ØØ§Ø¶Ø± اÙ
Ú©Ø§Ù Ø§ÙØªÙØ§Ù Ø¢Ø¯Ø±Ø³ÙØ§ را با ÙØ±Ù
ت vCard Ø¨Ø±Ø§Û Ø´Ù
ا ÙØ±Ø§ÙÙ
ÙÙ
ÙØ¯Ù اÛÙ
.';
+$labels['done'] = 'Ø§ÙØ¬Ø§Ù
شد';
$labels['settingsfor'] = 'ØªÙØ¸ÛÙ
ات';
$labels['preferences'] = 'ØªØ±Ø¬ÛØØ§Øª';
$labels['userpreferences'] = 'ØªØ±Ø¬ÛØØ§Øª کاربر';
@@ -188,6 +205,7 @@ $labels['newidentity'] = 'Ø´ÙØ§Ø³Ù Ø¬Ø¯ÛØ¯';
$labels['newitem'] = 'Ù
ÙØ±Ø¯ Ø¬Ø¯ÛØ¯';
$labels['edititem'] = 'ÙÛØ±Ø§ÛØ´ Ù
ÙØ±Ø¯';
$labels['setdefault'] = 'Ù¾ÛØ´âÙØ±Ø¶ Ú©Ù';
+$labels['autodetect'] = 'Ø®ÙØ¯Ú©Ø§Ø±';
$labels['language'] = 'زباÙ';
$labels['timezone'] = 'Ù
ØØ¯ÙدÙâÛ Ø²Ù
اÙÛ';
$labels['pagesize'] = 'سطر در ØµÙØÙ';
@@ -196,6 +214,7 @@ $labels['dstactive'] = 'ساعت تابستاÙÛ';
$labels['htmleditor'] = 'HTML âÙÙØ´ØªÙ Ù¾ÛØºØ§Ù
âÙØ§Û';
$labels['htmlsignature'] = 'HTML اÙ
ضاÛ';
$labels['previewpane'] = 'ÙÙ
Ø§ÛØ´ ÙØ§Ø¨ Ù¾ÛØ´âÙÙ
Ø§ÛØ´';
+$labels['skin'] = 'Ù¾ÙØ³ØªÙ Ø¸Ø§ÙØ±Û';
$labels['logoutclear'] = 'تÙ
ÛØ² کرد٠زباÙ٠دا٠در ÙÙگاÙ
خرÙÚ';
$labels['logoutcompact'] = 'ÙØ´Ø±Ø¯Ù Ø³Ø§Ø²Û ØµÙØ¯Ù٠در ÙÙگاÙ
خرÙÚ';
$labels['uisettings'] = 'Ù
ØÛØ· کاربرÛ';
@@ -207,12 +226,25 @@ $labels['autosend'] = 'Ø§Ø±Ø³Ø§Ù Ø®ÙØ¯ Ø¨Ù Ø®ÙØ¯';
$labels['ignore'] = 'ÙØ§Ø¯ÛØ¯Ù Ú¯ÛØ±Û';
$labels['readwhendeleted'] = 'در ÙÙگاÙ
پاک Ú©Ø±Ø¯ÙØ Ù¾ÛØºØ§Ù
را ب٠عÙÙØ§Ù Ø®ÙØ§ÙØ¯Ù Ø´Ø¯Ù Ø¹ÙØ§Ù
ت بزÙ';
$labels['flagfordeletion'] = 'Ù¾ÛØºØ§Ù
را Ø¨Ø¬Ø§Û Ù¾Ø§Ú© Ú©Ø±Ø¯ÙØ Ø¨Ø±Ø§Û Ù¾Ø§Ú© شد٠آÙ
اد٠ک٠';
+$labels['skipdeleted'] = 'Ù¾ÛØºØ§Ù
ÙØ§Û ØØ°Ù شد٠را ÙÙ
Ø§ÛØ´ ÙØ¯Ù';
+$labels['showremoteimages'] = 'تصاÙÛØ± ÙÛÙÚ© شد٠را ÙÙ
Ø§ÛØ´ بدÙ';
+$labels['fromknownsenders'] = 'از سÙÛ ÙØ±Ø³ØªÙØ¯Ù Ø´ÙØ§Ø³';
+$labels['always'] = 'ÙÙ
ÙØ§Ø±Ù';
$labels['showinlineimages'] = 'ÙÙ
Ø§ÛØ´ عکس ÙØ§Û Ø§ÙØµØ§Ù شد٠در پاÛÛÙ Ù¾ÛØºØ§Ù
';
$labels['autosavedraft'] = 'Ø°Ø®ÛØ±ÙâÛ Ø®ÙØ¯Ú©Ø§Ø± Ù¾ÛØ´âÙÙÛØ³';
$labels['everynminutes'] = 'دÙÛÙÙ $n ÙØ±';
+$labels['keepaliveevery'] = 'دÙÛÙÙ/ÙØ§ $n ÙØ±';
+$labels['keepalive'] = 'Ø¨Ø±Ø±Ø³Û Ù¾ÛØºØ§Ù
Ø¬Ø¯ÛØ¯ رÙÛ';
$labels['never'] = 'ÙØ±Ú¯Ø²';
$labels['messagesdisplaying'] = 'ÙÙ
Ø§ÛØ´ Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ù¾ÛØºØ§Ù
ÙØ§';
$labels['messagescomposition'] = 'ÙÙØ´ØªÙ Ø´Ø¯Ù Ù¾ÛØºØ§Ù
ÙØ§';
+$labels['mimeparamfolding'] = 'Ø¹ÙØ§ÙÛÙ Ù¾ÛÙØ³ØªÛ';
+$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (Ø³Ø§ÛØ±)';
+$labels['advancedoptions'] = 'گزÛÙÙ ÙØ§Û Ù¾ÛØ´Ø±ÙتÙ';
+$labels['focusonnewmessage'] = 'Ù
شخص ÙÙ
ÙØ¯Ù Ù¾ÛØºØ§Ù
Ø¬Ø¯ÛØ¯';
+$labels['checkallfolders'] = 'ÙÙ
Ù Ù¾ÙØ´Ù ÙØ§ Ø±Ù Ø¨Ø±Ø§Û Ù
Ø´Ø§ÙØ¯Ù Ù¾ÛØºØ§Ù
ÙØ§Û Ø¬Ø¯ÛØ¯ Ø¨Ú¯Ø±Ø¯ÛØ¯';
$labels['folder'] = 'Ù¾ÙØ´Ù';
$labels['folders'] = 'Ù¾ÙØ´ÙâÙØ§';
$labels['foldername'] = 'ÙØ§Ù
Ù¾ÙØ´Ù';
@@ -224,8 +256,13 @@ $labels['rename'] = 'تغÛÛØ± ÙØ§Ù
';
$labels['renamefolder'] = 'تغÛÛØ± ÙØ§Ù
Ù¾ÙØ´Ù';
$labels['deletefolder'] = 'ØØ°Ù Ù¾ÙØ´Ù';
$labels['managefolders'] = 'Ù
Ø¯ÛØ±Ûت Ù¾ÙØ´ÙâÙØ§';
+$labels['specialfolders'] = 'Ù¾ÙØ´Ù ÙØ§Û ÙÛÚÙ';
$labels['sortby'] = 'Ù
Ø±ØªØ¨âØ³Ø§Ø²Û Ø¨Ø± اساس';
$labels['sortasc'] = 'Ù
Ø±ØªØ¨âØ³Ø§Ø²Û ØµØ¹ÙØ¯Û';
$labels['sortdesc'] = 'Ù
Ø±ØªØ¨âØ³Ø§Ø²Û ÙØ²ÙÙÛ';
+$labels['B'] = 'Ø¨Ø§ÛØª';
+$labels['KB'] = 'Ú©ÛÙÙ Ø¨Ø§ÛØª';
+$labels['MB'] = 'Ù
Ú¯Ø§Ø¨Ø§ÛØª';
+$labels['GB'] = 'Ú¯Ûگا Ø¨Ø§ÛØª';
?>
diff --git a/program/localization/fa/messages.inc b/program/localization/fa/messages.inc
index 0bf56d4..9fa8373 100644
--- a/program/localization/fa/messages.inc
+++ b/program/localization/fa/messages.inc
@@ -5,12 +5,13 @@
| language/fa/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
-| Author: Mohammad Ebrahim Mohammadi Panah |
-| Anoosh |
+| Author: Mohammad Ebrahim Mohammadi Panah |
+| Anoosh |
+| Nader Aghazadeh |
+-----------------------------------------------------------------------+
@version $Id$
@@ -40,6 +41,8 @@ $messages['encryptedmessage'] = '!اÛÙ ÛÚ© Ù¾ÛØºØ§Ù
رÙ
زÙÚ¯Ø§Ø±Û Ø´Ø¯Ù
$messages['nocontactsfound'] = 'ÙÛØ¬ تÙ
Ø§Ø³Û Ù¾ÛØ¯Ø§ ÙØ´Ø¯';
$messages['contactnotfound'] = 'تÙ
اس Ø¯Ø±Ø®ÙØ§Ø³Øª Ø´Ø¯Ù Ù¾ÛØ¯Ø§ ÙØ´Ø¯';
$messages['sendingfailed'] = 'ÙØ§Ù
ÙÙ٠در ÙØ±Ø³ØªØ§Ø¯Ù Ù¾ÛØºØ§Ù
';
+$messages['senttooquickly'] = 'دÙÛÙ٠صبر Ú©ÙÛØ¯ $sec ÙØ·Ùا ÙØ¨Ù از ارسا٠اÛÙ Ù¾ÛØºØ§Ù
';
+$messages['errorsavingsent'] = 'در ÙØØ¸Ù Ø°Ø®ÛØ±Ù Ù¾ÛØºØ§Ù
Ø§Ø±Ø³Ø§Ù Ø´Ø¯Ù Ø Ù
Ø´Ú©Ù Ø¨Ù ÙØ¬Ùد Ø¢Ù
د';
$messages['errorsaving'] = 'ÙÙگاÙ
Ø°Ø®ÛØ±ÙâØ³Ø§Ø²ÛØ اشکاÙÛ Ù¾ÛØ´ Ø¢Ù
د';
$messages['errormoving'] = 'ÙØ§ØªÙا٠در Ø§ÙØªÙØ§Ù Ù¾ÛØºØ§Ù
';
$messages['errordeleting'] = 'ÙØ§ØªÙا٠در ØØ°Ù Ù¾ÛØºØ§Ù
';
@@ -47,10 +50,15 @@ $messages['deletecontactconfirm'] = 'Ø¢ÛØ§ ÙØ§Ùعا٠Ù
ÛâØ®ÙØ§ÙÛØ¯ ت
$messages['deletemessagesconfirm'] = 'Ø¢ÛØ§ ÙØ§Ùعا٠Ù
ÛâØ®ÙØ§ÙÛØ¯ Ù¾ÛØºØ§Ù
(ÙØ§Û) Ø§ÙØªØ®Ø§Ø¨ شد٠را ØØ°Ù Ú©ÙÛØ¯Ø';
$messages['deletefolderconfirm'] = 'Ø¢ÛØ§ ÙØ§Ùعا٠Ù
ÛâØ®ÙØ§ÙÛØ¯ اÛÙ Ù¾ÙØ´Ù را ØØ°Ù Ú©ÙÛØ¯Ø';
$messages['purgefolderconfirm'] = 'Ø¢ÛØ§ ÙØ§Ùعا٠Ù
ÛâØ®ÙØ§ÙÛØ¯ ÙÙ
ÙâÛ Ù¾ÛØºØ§Ù
âÙØ§Û داخ٠اÛÙ Ù¾ÙØ´Ù را ØØ°Ù Ú©ÙÛØ¯Ø';
+$messages['foldercreating'] = '...در ØØ§Ù Ø§ÛØ¬Ø§Ø¯ Ù¾ÙØ´Ù ';
+$messages['folderdeleting'] = '...در ØØ§Ù ØØ°Ù Ù¾ÙØ´Ù ';
+$messages['folderrenaming'] = '...در ØØ§Ù تغÛÛØ± ÙØ§Ù
Ù¾ÙØ´Ù ';
+$messages['foldermoving'] = '...در ØØ§Ù Ø§ÙØªÙØ§Ù Ù¾ÙØ´Ù ';
$messages['formincomplete'] = 'ÙØ±Ù
کاÙ
ÙØ§Ù پر ÙØ´Ø¯Ù Ø¨ÙØ¯';
$messages['noemailwarning'] = 'ÙØ·Ùا٠ÛÚ© ÙØ´Ø§ÙÛ Ø§ÛÙ
ÛÙ Ù
عتبر ÙØ§Ø±Ø¯ Ú©ÙÛØ¯';
$messages['nonamewarning'] = 'ÙØ·Ùا٠ÛÚ© ÙØ§Ù
ÙØ§Ø±Ø¯ Ú©ÙÛØ¯';
$messages['nopagesizewarning'] = 'ÙØ·Ùا٠ÛÚ© Ø§ÙØ¯Ø§Ø²Ù Ø¨Ø±Ø§Û ØµÙØÙ ÙØ§Ø±Ø¯ Ú©ÙÛØ¯';
+$messages['nosenderwarning'] = 'ÙØ·Ùا٠آدرس ÙØ±Ø³ØªÙد٠اÛÙ
Û٠را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯';
$messages['norecipientwarning'] = 'ÙØ·ÙØ§Ù ØØ¯Ø§ÙÙ ÛÚ© Ú¯ÛØ±ÙØ¯Ù ÙØ§Ø±Ø¯ Ú©ÙÛØ¯';
$messages['nosubjectwarning'] = 'ÙØ³Ù
ت \"Ù
ÙØ¶Ùع\" خاÙÛ Ø§Ø³Øª. Ø¢ÛØ§ Ù
ÛâØ®ÙØ§ÙÛØ¯ اکÙÙÙ ÙØ§Ø±Ø¯ Ú©ÙÛØ¯Ø';
$messages['nobodywarning'] = 'اÛÙ Ù¾ÛØºØ§Ù
بدÙÙ Ù
ØªÙ Ø§Ø±Ø³Ø§Ù Ø´ÙØ¯Ø';
@@ -79,5 +87,13 @@ $messages['errorsendingreceipt'] = 'ÙØ§ØªÙا٠در Ø§Ø±Ø³Ø§Ù Ø±Ø³ÛØ¯';
$messages['nodeletelastidentity'] = '.ÙÙ
ÛâØªÙØ§ÙÛØ¯ اÛÙ ÙÙÛØª را ØØ°Ù Ú©ÙÛØ¯Ø Ø²ÛØ±Ø§ آخرÛÙ ÙÙÛØª Ø´Ù
است';
$messages['addsubfolderhint'] = 'Ù¾ÙØ´Ù ب٠عÙÙØ§Ù Ø²ÛØ±Ù¾ÙØ´Ù Ø§Û Ø³Ø§Ø®ØªÙ Ø®ÙØ§Ùد شد Ú©Ù ÙÙ
اکÙÙÙ Ø§ÙØªØ®Ø§Ø¨ شد٠است';
$messages['forbiddencharacter'] = 'ÙØ§Ù
Ù¾ÙØ´Ù شاÙ
Ù ÛÚ© ØØ±Ù ØºÛØ± Ù
جاز است';
+$messages['selectimportfile'] = 'ÙØ·ÙØ§Ù ÙØ§Û٠را Ø¬ÙØª Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø§ÙØªØ®Ø§Ø¨ Ú©ÙÛØ¯';
+$messages['addresswriterror'] = 'در Ø¯ÙØªØ±Ú٠تÙÙÙ Ø§ÙØªØ®Ø§Ø¨Û Ø Ø§Ø¬Ø§Ø²Ù ÙÙØ´ØªÙ ÙØ¯Ø§Ø±Ûد';
+$messages['importwait'] = '...در ØØ§Ù Ø§ÙØªÙØ§Ù Ø§Ø·ÙØ§Ø¹Ø§Øª Ø ÙØ·Ùا صبر Ú©ÙÛØ¯';
+$messages['importerror'] = 'سازگار ÙÛØ³Øª vcard Ø§ÙØªÙØ§Ù Ø§Ø·ÙØ§Ø¹Ø§Øª Ù
تÙÙÙ Ø´Ø¯Ù Ø ÙØ±Ù
ت ÙØ§ÛÙ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ù Ø¨Ø§ ÙØ±Ù
ت';
+$messages['importconfirm'] = 'p>$names
: Ù
تÙÙ٠شد$skipped تÙ
اس با Ù
ÙÙÙØ¨Øª Ø§ÙØªÙØ§Ù ÛØ§Ùت Ù $inserted ';
+$messages['opnotpermitted'] = '!عÙ
ÙÛØ§Øª Ù
جاز ÙÛØ³Øª';
+$messages['nofromaddress'] = 'اÛÙ
ÛÙ ÙØ§Û Ú¯Ù
شد٠در گزÛÙÙ Ø§ÙØªØ®Ø§Ø¨ شدÙ';
+$messages['editorwarning'] = 'تغÛÛØ± ÙÛØ±Ø§Ûشگر Ù
ت٠باعث Ø§Ø¨Ø·Ø§Ù ÙØ±Ù
ت ÙÙ
Ù Ù
ØªÙ ÙØ§ Ù
Û Ø´ÙØ¯ Ø Ø¢ÛØ§ Ù
Û Ø®ÙØ§ÙÛØ¯ با اÛÙ ÙØ¬Ùد عÙ
ÙÛØ§Øª را اداÙ
٠بدÙÛØ¯ Ø';
?>
diff --git a/program/localization/fi_FI/labels.inc b/program/localization/fi_FI/labels.inc
index 4a0722a..56758fb 100644
--- a/program/localization/fi_FI/labels.inc
+++ b/program/localization/fi_FI/labels.inc
@@ -6,7 +6,7 @@
| language/fi/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Veljo Velling |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/fi_FI/messages.inc b/program/localization/fi_FI/messages.inc
index cece609..4aa8024 100644
--- a/program/localization/fi_FI/messages.inc
+++ b/program/localization/fi_FI/messages.inc
@@ -6,7 +6,7 @@
| language/fi/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Veljo Velling |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2045 2008-11-11 15:09:24Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/fr_FR/labels.inc b/program/localization/fr_FR/labels.inc
index 4c2de2d..4081dc2 100644
--- a/program/localization/fr_FR/labels.inc
+++ b/program/localization/fr_FR/labels.inc
@@ -6,7 +6,7 @@
| language/fr_FR/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/fr_FR/messages.inc b/program/localization/fr_FR/messages.inc
index 73655fd..9d9306f 100644
--- a/program/localization/fr_FR/messages.inc
+++ b/program/localization/fr_FR/messages.inc
@@ -6,7 +6,7 @@
| language/fr_FR/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/ga_IE/labels.inc b/program/localization/ga_IE/labels.inc
index 557912e..e09a004 100755
--- a/program/localization/ga_IE/labels.inc
+++ b/program/localization/ga_IE/labels.inc
@@ -5,7 +5,7 @@
| language/ga/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/ga_IE/messages.inc b/program/localization/ga_IE/messages.inc
index cca590c..536751d 100755
--- a/program/localization/ga_IE/messages.inc
+++ b/program/localization/ga_IE/messages.inc
@@ -5,7 +5,7 @@
| language/ga/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/gl_ES/labels.inc b/program/localization/gl_ES/labels.inc
index 7db8e2c..1057468 100644
--- a/program/localization/gl_ES/labels.inc
+++ b/program/localization/gl_ES/labels.inc
@@ -5,7 +5,7 @@
| language/gl_ES/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -92,7 +92,7 @@ $labels['longdec'] = 'Decembro';
$labels['today'] = 'Hoxe';
$labels['checkmail'] = 'Procurar novas mensaxes';
$labels['writenewmessage'] = 'Crear unha nova mensaxe';
-$labels['replytomessage'] = 'Respostar á mensaxe';
+$labels['replytomessage'] = 'Respostar a mensaxe';
$labels['replytoallmessage'] = 'Respostar a todos';
$labels['forwardmessage'] = 'Reenviar a mensaxe';
$labels['deletemessage'] = 'Eliminar a mensaxe';
@@ -109,21 +109,24 @@ $labels['lastmessages'] = 'Amosar o último grupo de mensaxes';
$labels['backtolist'] = 'Voltar á lista de mensaxes';
$labels['viewsource'] = 'Ver fonte';
$labels['markmessages'] = 'Marcar mensaxes';
-$labels['markread'] = 'Coma lidos';
-$labels['markunread'] = 'Coma non lidos';
-$labels['markflagged'] = 'Coma marcados';
-$labels['markunflagged'] = 'Coma non marcados';
+$labels['markread'] = 'Coma lidas';
+$labels['markunread'] = 'Coma non lidas';
+$labels['markflagged'] = 'Coma marcadas';
+$labels['markunflagged'] = 'Coma non marcadas';
$labels['select'] = 'Seleccionar';
$labels['all'] = 'Todas';
$labels['none'] = 'Ningunha';
$labels['unread'] = 'Non lidas';
+$labels['flagged'] = 'Marcadas';
+$labels['unanswered'] = 'Non respostadas';
+$labels['filter'] = 'Filtro';
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Baleiro';
$labels['purge'] = 'Baleirar';
$labels['quota'] = 'Uso de disco';
$labels['unknown'] = 'desconocido';
$labels['unlimited'] = 'ilimitado';
-$labels['quick'] = 'Busca rápida';
+$labels['quicksearch'] = 'Busca rápida';
$labels['resetsearch'] = 'Restablecer a busca';
$labels['openinextwin'] = 'Abrir nunha nova fiestra';
$labels['compose'] = 'Redactar unha mensaxe';
@@ -145,8 +148,8 @@ $labels['normal'] = 'Normal';
$labels['high'] = 'Alta';
$labels['highest'] = 'A máis alta';
$labels['nosubject'] = '(Sen asunto)';
-$labels['showimages'] = 'Mostrar imaxes';
-$labels['alwaysshow'] = 'Mostrar sempre as imaxes nas mensaxes remitidas por $sender';
+$labels['showimages'] = 'Amosar imaxes';
+$labels['alwaysshow'] = 'Amosar sempre as imaxes nas mensaxes remitidas por $sender';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto claro';
$labels['savesentmessagein'] = 'Gardar a mensaxe enviada en';
@@ -219,10 +222,15 @@ $labels['autosend'] = 'enviar automáticamente';
$labels['ignore'] = 'ignorar';
$labels['readwhendeleted'] = 'Marcar a mensaxe coma lida ao eliminar';
$labels['flagfordeletion'] = 'Marcar a mensaxe para eliminar no canto de eliminar';
-$labels['skipdeleted'] = 'Non mostrar as mensaxes eliminadas';
-$labels['showinlineimages'] = 'Mostrar as imaxes anexas baixo a mensaxe';
+$labels['skipdeleted'] = 'Non amosar as mensaxes eliminadas';
+$labels['showremoteimages'] = 'Amosar imaxes anexas remotas';
+$labels['fromknownsenders'] = 'de remitentes coñecidos';
+$labels['always'] = 'sempre';
+$labels['showinlineimages'] = 'Amosar as imaxes anexas baixo a mensaxe';
$labels['autosavedraft'] = 'Gardar borrador automáticamente';
$labels['everynminutes'] = 'cada $n minutos';
+$labels['keepaliveevery'] = 'cada $n minuto(s)';
+$labels['keepalive'] = 'Procurar novas mensaxes en';
$labels['never'] = 'nunca';
$labels['messagesdisplaying'] = 'Visualización das mensaxes';
$labels['messagescomposition'] = 'Composición das mensaxes';
@@ -231,6 +239,8 @@ $labels['2231folding'] = 'Conforme ao RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Conforme ao RFC 2047 (other)';
$labels['advancedoptions'] = 'Opcións avanzadas';
+$labels['focusonnewmessage'] = 'Enfocar o navegador se hai mensaxes novas';
+$labels['checkallfolders'] = 'Procurar novas mensaxes en tódolos cartafoles';
$labels['folder'] = 'Cartafol';
$labels['folders'] = 'Cartafoles';
$labels['foldername'] = 'Nome do cartafol';
diff --git a/program/localization/gl_ES/messages.inc b/program/localization/gl_ES/messages.inc
index 3717551..9c9aad8 100644
--- a/program/localization/gl_ES/messages.inc
+++ b/program/localization/gl_ES/messages.inc
@@ -5,7 +5,7 @@
| language/gl_ES/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -42,7 +42,7 @@ $messages['errorsavingsent'] = 'Ocurriu un erro mentres se gardaba a mensaxe env
$messages['errorsaving'] = 'Ocurriu un erro mentres se gardaba';
$messages['errormoving'] = 'Non puiden mover a mensaxe';
$messages['errordeleting'] = 'Non puiden eliminar a mensaxe';
-$messages['deletecontactconfirm'] = 'Quere eliminar o(s) contacto(s) seleccionados?';
+$messages['deletecontactconfirm'] = 'Quere eliminar o(s) contacto(s) seleccionado(s)?';
$messages['deletemessagesconfirm'] = 'Quere eliminar a(s) mensaxe(s) seleccionadas?';
$messages['deletefolderconfirm'] = 'Quere eliminar este cartafol?';
$messages['purgefolderconfirm'] = 'Quere eliminar tódalas mensaxes neste cartafol?';
@@ -90,5 +90,6 @@ $messages['importerror'] = 'Fallou a importación! O ficheiro que cargou non é
$messages['importconfirm'] = 'Importáronse correctamente $inserted contactos. Ignoráronse $skipped contactos que xa existÃan:$names
';
$messages['opnotpermitted'] = 'Operación non permitida';
$messages['nofromaddress'] = 'Falta o enderezo de correo electrónico na identidade que escolleu';
+$messages['editorwarning'] = 'Se troca neste intre ao editor de texto plano, vai perder todo o formato do texto. Quere continuar?';
?>
diff --git a/program/localization/he_IL/labels.inc b/program/localization/he_IL/labels.inc
index 186fde2..93f033d 100644
--- a/program/localization/he_IL/labels.inc
+++ b/program/localization/he_IL/labels.inc
@@ -5,7 +5,7 @@
| language/he_IL/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/he_IL/messages.inc b/program/localization/he_IL/messages.inc
index 4d9349b..977af63 100644
--- a/program/localization/he_IL/messages.inc
+++ b/program/localization/he_IL/messages.inc
@@ -5,7 +5,7 @@
| language/he_IL/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/hi_IN/labels.inc b/program/localization/hi_IN/labels.inc
index d286659..987e39f 100644
--- a/program/localization/hi_IN/labels.inc
+++ b/program/localization/hi_IN/labels.inc
@@ -5,7 +5,7 @@
| localization/hi/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/hi_IN/messages.inc b/program/localization/hi_IN/messages.inc
index a32a524..a6d83b2 100644
--- a/program/localization/hi_IN/messages.inc
+++ b/program/localization/hi_IN/messages.inc
@@ -5,7 +5,7 @@
| localization/hi/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/hr_HR/labels.inc b/program/localization/hr_HR/labels.inc
index 976e822..0d8c7ba 100644
--- a/program/localization/hr_HR/labels.inc
+++ b/program/localization/hr_HR/labels.inc
@@ -6,14 +6,14 @@
| language/hr/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Edi Budimilic |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/hr_HR/messages.inc b/program/localization/hr_HR/messages.inc
index 3732147..003a5bc 100644
--- a/program/localization/hr_HR/messages.inc
+++ b/program/localization/hr_HR/messages.inc
@@ -6,14 +6,14 @@
| language/hr/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Edi Budimilic |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2102 2008-12-01 10:46:11Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/hu_HU/labels.inc b/program/localization/hu_HU/labels.inc
index dac6a2f..2874e15 100644
--- a/program/localization/hu_HU/labels.inc
+++ b/program/localization/hu_HU/labels.inc
@@ -6,7 +6,7 @@
| language/hu_HU/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Ervin Hegedüs |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2254 2009-01-22 19:52:46Z yllar $
*/
@@ -121,6 +121,9 @@ $labels['select'] = 'Kijelölés';
$labels['all'] = 'Ãsszes';
$labels['none'] = 'Nincs';
$labels['unread'] = 'Olvasatlan';
+$labels['flagged'] = 'Megjelölt';
+$labels['unanswered'] = 'Megválaszolatlan';
+$labels['filter'] = 'Szűrés';
$labels['compact'] = 'TömörÃtés';
$labels['empty'] = 'ÃrÃtés';
$labels['purge'] = 'TisztÃtás';
@@ -129,6 +132,7 @@ $labels['unknown'] = 'ismeretlen';
$labels['unlimited'] = 'korlátlan';
$labels['quicksearch'] = 'Gyorskeresés';
$labels['resetsearch'] = 'Alapállapot';
+$labels['openinextwin'] = 'Megnyitás új ablakban';
$labels['compose'] = 'Ãzenet létrehozása';
$labels['savemessage'] = 'Vázlat mentése';
$labels['sendmessage'] = 'Ãzenet azonnali küldése';
@@ -152,6 +156,9 @@ $labels['showimages'] = 'Képek megjelenÃtése';
$labels['alwaysshow'] = 'Képek megjelenÃtése mindÃg ha a feladó $sender';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Egyszerű szöveg';
+$labels['savesentmessagein'] = 'Elküldött üzenet mentése ide:';
+$labels['dontsave'] = 'ne mentsük';
+$labels['maxuploadsize'] = 'A maximális feltölthetŠfájl mérete $size';
$labels['addcc'] = 'Cc (Másolati cÃm) hozzáadása';
$labels['addbcc'] = 'Bcc (Titkos másolati cÃm) hozzáadása';
$labels['addreplyto'] = 'VálaszcÃm hozzáadása';
@@ -175,12 +182,19 @@ $labels['composeto'] = 'E-mail küldése erre a cÃmre';
$labels['contactsfromto'] = 'Kapcsolatok: $from - $to / $count';
$labels['print'] = 'Nyomtatás';
$labels['export'] = 'Exportálás';
+$labels['exportvcards'] = 'Kapcsolatok exportálása vCard formátumban';
$labels['previouspage'] = 'ElÅzÅ lap';
$labels['firstpage'] = 'ElsÅ lap';
$labels['nextpage'] = 'KövetkezŠlap';
$labels['lastpage'] = 'Utolsó lap';
$labels['groups'] = 'Csoportok';
$labels['personaladrbook'] = 'Személyes cÃmjegyzék';
+$labels['import'] = 'Importálás';
+$labels['importcontacts'] = 'Kapcsolatok importálása';
+$labels['importfromfile'] = 'Importálás fájlból:';
+$labels['importreplace'] = 'A teljes cÃmjegyzék cseréje';
+$labels['importtext'] = 'Feltölthet kapcsolatokat egy már létezÅ cÃmjegyzékbÅl.
Jelenleg a vCard formátumú adatok importálása támogatott.';
+$labels['done'] = 'Kész';
$labels['settingsfor'] = 'BeállÃtás';
$labels['preferences'] = 'BeállÃtások';
$labels['userpreferences'] = 'Felhasználói beállÃtások';
@@ -191,6 +205,7 @@ $labels['newidentity'] = 'Ãj azonosÃtó';
$labels['newitem'] = 'Ãj elem';
$labels['edititem'] = 'Elem szerkesztése';
$labels['setdefault'] = 'BeállÃtás alapértelmezettnek';
+$labels['autodetect'] = 'Automatikus';
$labels['language'] = 'Nyelv';
$labels['timezone'] = 'IdÅzóna';
$labels['pagesize'] = 'Sorok száma egy oldalon';
@@ -211,12 +226,25 @@ $labels['autosend'] = 'automatikus küldés';
$labels['ignore'] = 'hagyja figyelmen kÃvül';
$labels['readwhendeleted'] = 'Ãzenet olvasottként jelölése törléskor';
$labels['flagfordeletion'] = 'Ãzenet törlendÅnek jelölése törlés helyett ';
+$labels['skipdeleted'] = 'Ne mutassuk a törölt üzeneteket';
+$labels['showremoteimages'] = 'Távoli beágyazott képek mutatása';
+$labels['fromknownsenders'] = 'csak ismert feladóktól';
+$labels['always'] = 'mindig';
$labels['showinlineimages'] = 'Csatolt képek megjelenÃtése az üzenet alatt';
$labels['autosavedraft'] = 'Automatikus piszkozat mentés';
$labels['everynminutes'] = 'minden $n percben';
+$labels['keepaliveevery'] = 'minden $n percben';
+$labels['keepalive'] = 'Ãj üzenetek keresése itt: ';
$labels['never'] = 'soha';
$labels['messagesdisplaying'] = 'Ãzenetek megjelenÃtése';
$labels['messagescomposition'] = 'Ãzenetek Ãrása';
+$labels['mimeparamfolding'] = 'Csatolt állományok nevei';
+$labels['2231folding'] = 'Teljes RFC 2231 ( pl. Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (egyéb)';
+$labels['advancedoptions'] = 'Haladó beállÃtások';
+$labels['focusonnewmessage'] = 'BeérkezŠúj üzenet ablakának fókuszba hozása';
+$labels['checkallfolders'] = 'Ãj üzenetek ellenÅrzése minden (al)mappában';
$labels['folder'] = 'Mappa';
$labels['folders'] = 'Mappák';
$labels['foldername'] = 'Mappa neve';
@@ -228,8 +256,13 @@ $labels['rename'] = 'Ãtnevezés';
$labels['renamefolder'] = 'Mappa átnevezése';
$labels['deletefolder'] = 'Mappa törlése';
$labels['managefolders'] = 'Mappák kezelése';
+$labels['specialfolders'] = 'Különleges mappák';
$labels['sortby'] = 'Rendezés';
$labels['sortasc'] = 'növekvÅ';
$labels['sortdesc'] = 'csökkenÅ';
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
?>
diff --git a/program/localization/hu_HU/messages.inc b/program/localization/hu_HU/messages.inc
index 604a378..a67acdf 100644
--- a/program/localization/hu_HU/messages.inc
+++ b/program/localization/hu_HU/messages.inc
@@ -6,7 +6,7 @@
| language/hu_HU/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Ervin Hegedüs |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 1600 2008-07-21 08:52:30Z yllar $
+@version $Id: messages.inc 2254 2009-01-22 19:52:46Z yllar $
*/
@@ -41,6 +41,8 @@ $messages['encryptedmessage'] = 'Az üzenet titkosÃtott, emiatt nem tudom megje
$messages['nocontactsfound'] = 'Nincs kapcsolat';
$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található';
$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült';
+$messages['senttooquickly'] = 'Kérem várjon még $sec másodpercet az üzenet elküldése elÅtt';
+$messages['errorsavingsent'] = 'Hiba történt az elküldött üzenet mentése közben';
$messages['errorsaving'] = 'A mentés során hiba lépett fel';
$messages['errormoving'] = 'Az üzenetet nem sikerült áthelyezni';
$messages['errordeleting'] = 'Az üzenetet nem sikerült törölni';
@@ -48,10 +50,15 @@ $messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelö
$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt üzenete(ke)t?';
$messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretnéd ezt a mappát?';
$messages['purgefolderconfirm'] = 'Biztos vagy benne, hogy az összes üzenet törölhetÅ?';
+$messages['foldercreating'] = 'Mappa létrehozása...';
+$messages['folderdeleting'] = 'Mappa törlése...';
+$messages['folderrenaming'] = 'Mappa átnevezése...';
+$messages['foldermoving'] = 'Mappa mozgatása...';
$messages['formincomplete'] = 'Az űrlap hiányosan lett kitöltve';
$messages['noemailwarning'] = 'Adj meg egy valós e-mail cÃmet';
$messages['nonamewarning'] = 'Adj meg egy nevet';
$messages['nopagesizewarning'] = 'Add meg a papÃr méretét';
+$messages['nosenderwarning'] = 'Kérem adja meg a feladó email cÃmét';
$messages['norecipientwarning'] = 'Legalább egy cÃmzettet adj meg';
$messages['nosubjectwarning'] = 'A \"Tárgy\" mezŠüres. Szeretnéd most kitölteni?';
$messages['nobodywarning'] = 'Elküldöd az üzenetet tárgy nélkül?';
@@ -80,5 +87,13 @@ $messages['errorsendingreceipt'] = 'Az Olvasási ÃrtesÃtést nem sikerült elk
$messages['nodeletelastidentity'] = 'Nem törölheti ezt a profilt, ez az egyetlen';
$messages['addsubfolderhint'] = 'Az új könyvtárat az aktuálisan kiválasztott alkönyvtáraként fogjuk létrehozni';
$messages['forbiddencharacter'] = 'A mappa neve tiltott karaktert tartalmaz';
+$messages['selectimportfile'] = 'Kérjük válassza ki a feltölteni kÃvánt fájlt';
+$messages['addresswriterror'] = 'A kiválasztott cÃmjegyzék nem Ãrható';
+$messages['importwait'] = 'Importálás folyamatban, kérem várjon...';
+$messages['importerror'] = 'Az importálás sikertelen! A feltöltött állomány nem egy érvényes vCard fájl.';
+$messages['importconfirm'] = 'Sikeresen importálásra került $inserted kapcsolat, kihagyva $skipped már létezŠbejegyzés:$names
';
+$messages['opnotpermitted'] = 'A művelet nem megengedett!';
+$messages['nofromaddress'] = 'Hiányzó email cÃm a kiválasztott feladónál';
+$messages['editorwarning'] = 'Az egyszerű szöveges formátumra való váltás az összes formázás elvesztésével jár. Biztosan folytatja?';
?>
diff --git a/program/localization/hy_AM/labels.inc b/program/localization/hy_AM/labels.inc
index 04d4987..cdae9e8 100644
--- a/program/localization/hy_AM/labels.inc
+++ b/program/localization/hy_AM/labels.inc
@@ -6,14 +6,14 @@
| language/am/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Vahan Yerkanian |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
+ @version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/hy_AM/messages.inc b/program/localization/hy_AM/messages.inc
index af16e8f..860c8cd 100644
--- a/program/localization/hy_AM/messages.inc
+++ b/program/localization/hy_AM/messages.inc
@@ -6,14 +6,14 @@
| language/am/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Vahan Yerkanian |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/id_ID/labels.inc b/program/localization/id_ID/labels.inc
index de2f0e3..7f52479 100644
--- a/program/localization/id_ID/labels.inc
+++ b/program/localization/id_ID/labels.inc
@@ -6,7 +6,7 @@
| language/id_ID/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -30,7 +30,7 @@ $labels['addressbook'] = 'Buku Alamat';
$labels['inbox'] = 'Kotak Masuk';
$labels['drafts'] = 'Daftar tunggu';
$labels['sent'] = 'Terkirim';
-$labels['trash'] = 'Item-itenm tergapus';
+$labels['trash'] = 'Surat Terhapus';
$labels['junk'] = 'Sampah';
$labels['subject'] = 'Judul';
$labels['from'] = 'Pengirim';
@@ -38,22 +38,22 @@ $labels['to'] = 'Penerima';
$labels['cc'] = 'Lampiran';
$labels['bcc'] = 'Lampiran tersembunyi';
$labels['replyto'] = 'Balas kepada';
-$labels['date'] = 'Tangal';
+$labels['date'] = 'Tanggal';
$labels['size'] = 'Ukuran';
$labels['priority'] = 'Prioritas';
$labels['organization'] = 'Organisasi';
$labels['reply-to'] = 'Balas kepada';
-$labels['mailboxlist'] = 'Map-map';
+$labels['mailboxlist'] = 'Daftar Kotak Surat';
$labels['messagesfromto'] = 'Pesan $from kepada $to sebanyak $count';
$labels['messagenrof'] = 'Pesan $nr sebanyak $count';
-$labels['moveto'] = 'dipindahkan...';
-$labels['download'] = 'unduh';
+$labels['moveto'] = 'Pindahkan ke...';
+$labels['download'] = 'Dnduh';
$labels['filename'] = 'Nama berkas';
$labels['filesize'] = 'Ukuran berkas';
$labels['preferhtml'] = 'Lebih suka HTML';
$labels['htmlmessage'] = 'Pesan HTML';
-$labels['prettydate'] = 'Tanggal cantik';
-$labels['addtoaddressbook'] = 'Tambahkan ke buku tamu';
+$labels['prettydate'] = 'Tanggal Cantik';
+$labels['addtoaddressbook'] = 'Tambahkan Pada Buku Tamu';
$labels['sun'] = 'Min';
$labels['mon'] = 'Sen';
$labels['tue'] = 'Sel';
@@ -96,11 +96,11 @@ $labels['today'] = 'Hari ini';
$labels['checkmail'] = 'Periksa pesan baru';
$labels['writenewmessage'] = 'Buat pesan baru';
$labels['replytomessage'] = 'Balas pesan';
-$labels['replytoallmessage'] = 'balas ke pengirim dan semua penerima';
+$labels['replytoallmessage'] = 'Balas kepada pengirim dan semua penerima';
$labels['forwardmessage'] = 'Teruskan pesan';
$labels['deletemessage'] = 'Pindahkan pesan ke tong sampah';
$labels['movemessagetotrash'] = 'Pindahkan pesan ke tong sampah';
-$labels['printmessage'] = 'cetak pesan ini';
+$labels['printmessage'] = 'Cetak pesan ini';
$labels['previousmessage'] = 'Perlihatkan pesan sebelumnya';
$labels['previousmessages'] = 'Perlihatkan kumpulan pesan-pesan sebelumnya';
$labels['firstmessage'] = 'Perlihatkan pesan pertama';
@@ -120,6 +120,9 @@ $labels['select'] = 'Pilih';
$labels['all'] = 'Semua';
$labels['none'] = 'Tidak satupun';
$labels['unread'] = 'Belum terbaca';
+$labels['flagged'] = 'Ditandai';
+$labels['unanswered'] = 'Belum terjawab';
+$labels['filter'] = 'Penyaringan';
$labels['compact'] = 'Ramping';
$labels['empty'] = 'Kosong';
$labels['purge'] = 'Kosongkan';
@@ -128,31 +131,33 @@ $labels['unknown'] = 'Tidak dikenal';
$labels['unlimited'] = 'Tidak terbatas';
$labels['quicksearch'] = 'Pencarian cepat';
$labels['resetsearch'] = 'Atur ulang pencarian';
+$labels['openinextwin'] = 'Buka dalam jendela baru';
$labels['compose'] = 'Tulis sebuah pesan';
-$labels['savemessage'] = 'Simpan daftar tunggu ini';
+$labels['savemessage'] = 'Simpan konsep surat ini';
$labels['sendmessage'] = 'Kirim pesan sekarang';
$labels['addattachment'] = 'Sisipkan sebuah berkas';
-$labels['charset'] = 'set karakter';
+$labels['charset'] = 'Set karakter';
$labels['editortype'] = 'Tipe editor';
$labels['returnreceipt'] = 'Kembalikan penerima';
$labels['checkspelling'] = 'Pemeriksaan ejaan';
$labels['resumeediting'] = 'Lanjutkan mengedit';
$labels['revertto'] = 'Balik ke';
$labels['attachments'] = 'Sisispan';
-$labels['upload'] = 'unggah';
+$labels['upload'] = 'Unggah';
$labels['close'] = 'Tutup';
$labels['low'] = 'Rendah';
-$labels['lowest'] = 'Terrendah';
+$labels['lowest'] = 'Paling Rendah';
$labels['normal'] = 'Normal';
$labels['high'] = 'Tinggi';
-$labels['highest'] = 'tertinggi';
+$labels['highest'] = 'Paling tinggi';
$labels['nosubject'] = '(tanpa judul)';
$labels['showimages'] = 'Tampilkan gambar';
$labels['alwaysshow'] = 'Selalu tampilkan gambar dari $sender';
$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Text murni';
+$labels['plaintoggle'] = 'Teks murni';
$labels['savesentmessagein'] = 'Simpan pesan terkirim di';
$labels['dontsave'] = 'Jangan disimpan';
+$labels['maxuploadsize'] = 'Ukuran file maksimal adalah $size';
$labels['addcc'] = 'Tambah Cc';
$labels['addbcc'] = 'Tambah Bcc';
$labels['addreplyto'] = 'Tambah Balas Ke';
@@ -176,12 +181,18 @@ $labels['composeto'] = 'Tulis surat kepada';
$labels['contactsfromto'] = 'Kontak $from kepada $to sebanyak $count';
$labels['print'] = 'Cetak';
$labels['export'] = 'Ekspor';
+$labels['exportvcards'] = 'Ekspor kontak dalam format vCard';
$labels['previouspage'] = 'Perlihatkan kumpulan sebelumnya';
$labels['firstpage'] = 'Perlihatkan kumpulan pertama';
$labels['nextpage'] = 'Perlihatkan kumpulan selanjutnya';
$labels['lastpage'] = 'Perlihatkan kumpulan terakhir';
$labels['groups'] = 'Kelompok';
$labels['personaladrbook'] = 'Alamat personal';
+$labels['import'] = 'Import';
+$labels['importcontacts'] = 'Import kontak';
+$labels['importfromfile'] = 'Import dari berkas:';
+$labels['importreplace'] = 'Ganti seluruh buku alamat';
+$labels['importtext'] = 'Anda bisa mengunggah kontak dari buku alamat yang sudah ada.
Kami kebetulan mendukung pengimportan alamat dari format data vCard.';
$labels['settingsfor'] = 'Pengaturan untuk';
$labels['preferences'] = 'Pilihan';
$labels['userpreferences'] = 'Pilihan pengguna';
@@ -192,6 +203,7 @@ $labels['newidentity'] = 'Identitas baru';
$labels['newitem'] = 'Item baru';
$labels['edititem'] = 'Ubah item';
$labels['setdefault'] = 'Pengaturan Awal';
+$labels['autodetect'] = 'Otomatis';
$labels['language'] = 'Bahasa';
$labels['timezone'] = 'Daerah Waktu';
$labels['pagesize'] = 'Baris per halaman';
@@ -212,12 +224,25 @@ $labels['autosend'] = 'kirim otomatis';
$labels['ignore'] = 'acuhkan';
$labels['readwhendeleted'] = 'Tandai pesan sebagai terbaca saat dihapus';
$labels['flagfordeletion'] = 'Tandai pesan untuk penghapusan daripada dihapus';
+$labels['skipdeleted'] = 'Jangan tampilkan pesan terhapus';
+$labels['showremoteimages'] = 'Tampilkan remote inline images';
+$labels['fromknownsenders'] = 'dari pengirim yang dikenal';
+$labels['always'] = 'selalu';
$labels['showinlineimages'] = 'Tampilkan gambar terlampir dibawah pesan';
$labels['autosavedraft'] = 'Otomatis menyimpan pesan tertunda';
$labels['everynminutes'] = 'setiap $n menit';
+$labels['keepaliveevery'] = 'setiap $n menit';
+$labels['keepalive'] = 'Periksa pesan baru saat';
$labels['never'] = 'tidak pernah';
$labels['messagesdisplaying'] = 'Penampilan Pesan';
$labels['messagescomposition'] = 'Pengaturan Pesan';
+$labels['mimeparamfolding'] = 'Nama lampiran';
+$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (other)';
+$labels['advancedoptions'] = 'Pilihan canggih';
+$labels['focusonnewmessage'] = 'Pusatkan jendela broswer saat ada pesan baru';
+$labels['checkallfolders'] = 'Periksa semua map untuk pesan baru';
$labels['folder'] = 'Map';
$labels['folders'] = 'Map-map';
$labels['foldername'] = 'Nama map';
@@ -233,5 +258,9 @@ $labels['specialfolders'] = 'Map Khusus';
$labels['sortby'] = 'Urut berdasarkan';
$labels['sortasc'] = 'Urut menaik';
$labels['sortdesc'] = 'Urut menurun';
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
?>
diff --git a/program/localization/id_ID/messages.inc b/program/localization/id_ID/messages.inc
index 8483689..fad4e28 100644
--- a/program/localization/id_ID/messages.inc
+++ b/program/localization/id_ID/messages.inc
@@ -6,7 +6,7 @@
| language/id_ID/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -40,6 +40,7 @@ $messages['encryptedmessage'] = 'Pesan ini terenkripsi dan tidak bisa ditampilka
$messages['nocontactsfound'] = 'Kontak tidak ditemukan';
$messages['contactnotfound'] = 'Kontak yang diminta tidak ditemukan';
$messages['sendingfailed'] = 'Pengiriman pesan gagal';
+$messages['senttooquickly'] = 'Mohon tunggu $sec detik. sebelum mengirim pesan ini';
$messages['errorsavingsent'] = 'Error ketika menyimpan pesan terkirim';
$messages['errorsaving'] = 'Error ketika menyimpan';
$messages['errormoving'] = 'Pesan tidak bisa dipindahkan';
@@ -48,10 +49,15 @@ $messages['deletecontactconfirm'] = 'Apakah anda yakin untuk menghapus kontak te
$messages['deletemessagesconfirm'] = 'Yakin menghapus pesan terpilih?';
$messages['deletefolderconfirm'] = 'Apakah anda benar-benar ingin menghapus map ini?';
$messages['purgefolderconfirm'] = 'Yakin menghapus semua pesan pada map ini?';
+$messages['foldercreating'] = 'Membuat map...';
+$messages['folderdeleting'] = 'Menghapus map...';
+$messages['folderrenaming'] = 'EMngubah nama map...';
+$messages['foldermoving'] = 'Memindahkan map...';
$messages['formincomplete'] = 'Blangko tidak terisi semua';
$messages['noemailwarning'] = 'Tolong masukkan alamat email yang valid';
$messages['nonamewarning'] = 'Tolong masukkan nama';
$messages['nopagesizewarning'] = 'Tolong masukkan ukuran halaman';
+$messages['nosenderwarning'] = 'Mohon memasukkan alamat e-mail pengirim';
$messages['norecipientwarning'] = 'Tolong masukkan sedikitnya satu penerima';
$messages['nosubjectwarning'] = '"Judul" kosong. Isi judul sekarang?';
$messages['nobodywarning'] = 'Kirim pesan ini tanpa teks?';
@@ -80,5 +86,13 @@ $messages['errorsendingreceipt'] = 'Tidak dapat mengirim tanda terima';
$messages['nodeletelastidentity'] = 'Anda tidak bida mengapus identitas ini, ini identitas yang terakhir';
$messages['addsubfolderhint'] = 'Folder ini akan dibuat sebagai subfolder pada folder yang terpilih';
$messages['forbiddencharacter'] = 'Nama folder mengandung karakter terlarang';
+$messages['selectimportfile'] = 'Mohon pilih sebuah berkas untuk diunggah';
+$messages['addresswriterror'] = 'Buku alamat terpilih tidak dapat ditulisi';
+$messages['importwait'] = 'Sedang mengimpor, harap menunggu...';
+$messages['importerror'] = 'Gagal mengimpor! Berkas terunggah bukan berkas vCard yang valid';
+$messages['importconfirm'] = 'Berhasil mengimpor $inserted kontak, $skipped entri dilewati:$names
';
+$messages['opnotpermitted'] = 'Operasi tidak diperbolehkan!';
+$messages['nofromaddress'] = 'kekurangan alamat e-mail pada identitas terpilih';
+$messages['editorwarning'] = 'Beralih pada editor teks murni akan mengakibatkan semua pemformatan teks hilang. Lanjutkan?';
?>
diff --git a/program/localization/index.inc b/program/localization/index.inc
index 1d3c459..edc7ef4 100644
--- a/program/localization/index.inc
+++ b/program/localization/index.inc
@@ -5,7 +5,7 @@
| program/localization/index.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -16,7 +16,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: index.inc 2039 2008-11-04 20:10:28Z alec $
+ $Id: index.inc 2284 2009-02-09 12:47:50Z yllar $
*/
@@ -27,9 +27,11 @@ $rcube_languages = array(
'sq_AL' => 'Albanian',
'ar_SA' => 'Arabic',
'hy_AM' => 'Armenian',
+ 'ast' => 'Asturianu',
'az_AZ' => 'Azerbaijani',
'bs_BA' => 'Bosnian (Serbian Latin)',
'bg_BG' => 'Bulgarian',
+ 'bn_BD' => 'Bengali',
'ca_ES' => 'Català ',
'cy_GB' => 'Cymraeg',
'zh_CN' => 'Chinese (Simplified)',
@@ -41,6 +43,7 @@ $rcube_languages = array(
'de_CH' => 'Deutsch (Schweiz)',
'en_GB' => 'English (GB)',
'en_US' => 'English (US)',
+ 'es_AR' => 'Spanish (Argentina)',
'es_ES' => 'Español',
'eo' => 'Esperanto',
'et_EE' => 'Estonian',
diff --git a/program/localization/is_IS/labels.inc b/program/localization/is_IS/labels.inc
index c6b8b0a..52fe799 100644
--- a/program/localization/is_IS/labels.inc
+++ b/program/localization/is_IS/labels.inc
@@ -2,75 +2,58 @@
/*
- +-----------------------------------------------------------------------+
- | language/en_GB/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Weiran Zhang (weiran@weiran.co.uk) |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 543 2007-04-28 18:07:12Z thomasb $
++-----------------------------------------------------------------------+
+| language/is_IS/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2009, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Hakon Orri Asgeirsson |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 543 2007-04-28 18:07:12Z thomasb $
*/
$labels = array();
-
-// login page
-$labels['welcome'] = 'Vefpóstur Vodafone';
-$labels['username'] = 'Netfang';
-$labels['password'] = 'Lykilorð';
-$labels['server'] = 'Server';
-$labels['login'] = 'Innskrá';
-
-// taskbar
-$labels['logout'] = 'Ãtskrá';
-$labels['mail'] = 'Tölvupóstur';
+$labels['welcome'] = 'Vefpóstur';
+$labels['username'] = 'Netfang';
+$labels['password'] = 'Lykilorð';
+$labels['server'] = 'Server';
+$labels['login'] = 'Innskrá';
+$labels['logout'] = 'Ãtskrá';
+$labels['mail'] = 'Tölvupóstur';
$labels['settings'] = 'Stillingar';
$labels['addressbook'] = 'Netfangaskrá';
-
-// mailbox names
-$labels['inbox'] = 'Innhólf';
+$labels['inbox'] = 'Innhólf';
$labels['drafts'] = 'Drög';
-$labels['sent'] = 'Sent';
-$labels['trash'] = 'Eyddir hlutir';
-$labels['junk'] = 'Ruslpóstur';
-
-// message listing
+$labels['sent'] = 'Sent';
+$labels['trash'] = 'Eyddir hlutir';
+$labels['junk'] = 'Ruslpóstur';
$labels['subject'] = 'Efni';
-$labels['from'] = 'Sendandi';
-$labels['to'] = 'Viðtakandi';
-$labels['cc'] = 'Afrit';
-$labels['bcc'] = 'Blint afrit';
+$labels['from'] = 'Sendandi';
+$labels['to'] = 'Viðtakandi';
+$labels['cc'] = 'Afrit';
+$labels['bcc'] = 'Blint afrit';
$labels['replyto'] = 'Reply-To';
-$labels['date'] = 'Dags';
-$labels['size'] = 'Stærð';
+$labels['date'] = 'Dags';
+$labels['size'] = 'Stærð';
$labels['priority'] = 'Forgangur';
$labels['organization'] = 'Stofnun';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
+$labels['reply-to'] = 'Reply-To';
$labels['mailboxlist'] = 'Möppur';
$labels['messagesfromto'] = 'Skeyti $from til $to af $count';
$labels['messagenrof'] = 'Skeyti $nr af $count';
-
-$labels['moveto'] = 'færa Ã...';
+$labels['moveto'] = 'færa Ã...';
$labels['download'] = 'sækja';
-
$labels['filename'] = 'Skrárnafn';
$labels['filesize'] = 'Skrárstærð';
-
$labels['preferhtml'] = 'Vil HTML';
$labels['htmlmessage'] = 'HTML skeyti';
$labels['prettydate'] = 'Fallegar dagsetningar';
-
$labels['addtoaddressbook'] = 'Bæta à netfangaskrá';
-
-// weekdays short
$labels['sun'] = 'sun';
$labels['mon'] = 'mán';
$labels['tue'] = 'þri';
@@ -78,143 +61,207 @@ $labels['wed'] = 'mið';
$labels['thu'] = 'fim';
$labels['fri'] = 'fös';
$labels['sat'] = 'lau';
-
-// weekdays long
-$labels['sunday'] = 'sunnudagur';
-$labels['monday'] = 'mánudagur';
-$labels['tuesday'] = 'þriðjudagur';
+$labels['sunday'] = 'sunnudagur';
+$labels['monday'] = 'mánudagur';
+$labels['tuesday'] = 'þriðjudagur';
$labels['wednesday'] = 'miðvikudagur';
-$labels['thursday'] = 'fimmtudagur';
-$labels['friday'] = 'föstudagur';
-$labels['saturday'] = 'laugardagur';
-
+$labels['thursday'] = 'fimmtudagur';
+$labels['friday'] = 'föstudagur';
+$labels['saturday'] = 'laugardagur';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'MaÃ';
+$labels['jun'] = 'Jún';
+$labels['jul'] = 'Júl';
+$labels['aug'] = 'Ãgú';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nóv';
+$labels['dec'] = 'Des';
+$labels['longjan'] = 'Janúar';
+$labels['longfeb'] = 'Febrúar';
+$labels['longmar'] = 'Mars';
+$labels['longapr'] = 'AprÃl';
+$labels['longmay'] = 'MaÃ';
+$labels['longjun'] = 'JúnÃ';
+$labels['longjul'] = 'JúlÃ';
+$labels['longaug'] = 'Ãgúst';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Október';
+$labels['longnov'] = 'Nóvember';
+$labels['longdec'] = 'Desember';
$labels['today'] = 'Ã dag';
-
-// toolbar buttons
-$labels['checkmail'] = 'Gá að nýjum skeytum';
-$labels['writenewmessage'] = 'Búa til nýtt skeyti';
-$labels['replytomessage'] = 'Svara skeyti';
+$labels['checkmail'] = 'Gá að nýjum skeytum';
+$labels['writenewmessage'] = 'Búa til nýtt skeyti';
+$labels['replytomessage'] = 'Svara skeyti';
$labels['replytoallmessage'] = 'Svara sendanda og öllum viðtakendum';
-$labels['forwardmessage'] = 'Framsenda skeyti';
-$labels['deletemessage'] = 'Færa skeyti à rusl';
-$labels['printmessage'] = 'Prenta skeyti';
+$labels['forwardmessage'] = 'Framsenda skeyti';
+$labels['deletemessage'] = 'Eyða skeyti';
+$labels['movemessagetotrash'] = 'Færa skeyti à rusl';
+$labels['printmessage'] = 'Prenta skeyti';
+$labels['previousmessage'] = 'Sýna fyrra skeyti';
$labels['previousmessages'] = 'Sýna fyrri skammt af skeytum';
-$labels['nextmessages'] = 'Sýna næsta skammt af skeytum';
-$labels['backtolist'] = 'Til baka à skeytalista';
-$labels['viewsource'] = 'Skoða kóða';
-
+$labels['firstmessage'] = 'Sýna fyrsta skeyti';
+$labels['firstmessages'] = 'Sýna fyrsta skammtinn af skeytum';
+$labels['nextmessage'] = 'Sýna næsta skeyti';
+$labels['nextmessages'] = 'Sýna næsta skammt af skeytum';
+$labels['lastmessage'] = 'Sýna sÃðasta skeytið';
+$labels['lastmessages'] = 'Sýna sÃðasta skammtinn af skeytum';
+$labels['backtolist'] = 'Til baka à skeytalista';
+$labels['viewsource'] = 'Skoða kóða';
+$labels['markmessages'] = 'Merkja skeyti';
+$labels['markread'] = 'Sem lesin';
+$labels['markunread'] = 'Sem ólesin';
+$labels['markflagged'] = 'Sem flögguð';
+$labels['markunflagged'] = 'Sem óflögguð';
$labels['select'] = 'Velja';
$labels['all'] = 'Allt';
$labels['none'] = 'Ekkert';
$labels['unread'] = 'Ãlesið';
-
+$labels['flagged'] = 'Flaggað';
+$labels['unanswered'] = 'Ãsvarað';
+$labels['filter'] = 'SÃa';
$labels['compact'] = 'Pakka';
$labels['empty'] = 'Tæma';
$labels['purge'] = 'Hreinsa';
-
$labels['quota'] = 'Gagnamagn';
-
-
-// message compose
-$labels['compose'] = 'Semja skeyti';
-$labels['savemessage'] = 'Vista drög';
-$labels['sendmessage'] = 'Senda skeytið núna';
-$labels['addattachment'] = 'Hengja við';
-$labels['charset'] = 'Stafasett';
-
-$labels['returnreceipt'] = 'Kvittun við lestur';
-
+$labels['unknown'] = 'óþekkt';
+$labels['unlimited'] = 'ótakmarkað';
+$labels['quicksearch'] = 'Flýtileit';
+$labels['resetsearch'] = 'Tæma leit';
+$labels['openinextwin'] = 'Opna à nýjum glugga';
+$labels['compose'] = 'Semja skeyti';
+$labels['savemessage'] = 'Vista drög';
+$labels['sendmessage'] = 'Senda skeytið núna';
+$labels['addattachment'] = 'Hengja við';
+$labels['charset'] = 'Stafasett';
+$labels['editortype'] = 'Gerð ritils';
+$labels['returnreceipt'] = 'Kvittun við lestur';
+$labels['checkspelling'] = 'Villuleita';
+$labels['resumeediting'] = 'Aftur à ritham';
+$labels['revertto'] = 'Hverfa til';
$labels['attachments'] = 'Viðhengi';
$labels['upload'] = 'Senda';
-$labels['close'] = 'Loka';
-
-$labels['low'] = 'Lágt';
-$labels['lowest'] = 'Lægst';
-$labels['normal'] = 'Venjulegt';
-$labels['high'] = 'Hátt';
+$labels['close'] = 'Loka';
+$labels['low'] = 'Lágt';
+$labels['lowest'] = 'Lægst';
+$labels['normal'] = 'Venjulegt';
+$labels['high'] = 'Hátt';
$labels['highest'] = 'Hæst';
-
-$labels['nosubject'] = '(ekkert efni)';
+$labels['nosubject'] = '(ekkert efni)';
$labels['showimages'] = 'Birta myndir';
-
-$labels['editortype'] = 'Gerð ritils';
+$labels['alwaysshow'] = 'Sýna alltaf myndir frá $sender';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Einfaldur';
-
-$labels['checkspelling'] = 'Villuleita';
-$labels['resumeediting'] = 'Aftur à ritham';
-$labels['revertto'] = 'Hverfa til';
-
+$labels['savesentmessagein'] = 'Vista send skeyti à ';
+$labels['dontsave'] = 'ekki vista';
+$labels['maxuploadsize'] = 'Leyfileg hámarksstærð skjals er $size';
$labels['addcc'] = 'Bæta við Cc';
$labels['addbcc'] = 'Bæta við Bcc';
$labels['addreplyto'] = 'Bæta við Reply-To';
-
-
-// address boook
-$labels['name'] = 'Nafn til birtingar';
+$labels['mdnrequest'] = 'Sendandi þessa skeytið hefur óskað þess að þú látir vita að þú hafir lesið þetta skeyti. Viltu láta hann vita?';
+$labels['receiptread'] = 'Kvittun (lesa)';
+$labels['yourmessage'] = 'Ãetta er kvittun fyrir skeytið';
+$labels['receiptnote'] = 'ATH: Ãessi kvittun segir aðeins til um að skeytið kom upp á skjánum á viðtakanda. Ãað er engin sönnun um að hann hafi lesið eða skilið innihaldið.';
+$labels['name'] = 'Nafn til birtingar';
$labels['firstname'] = 'Fornafn';
-$labels['surname'] = 'Eftirnafn';
-$labels['email'] = 'Netfang';
-$labels['mobile'] = 'FarsÃmi';
-
+$labels['surname'] = 'Eftirnafn';
+$labels['email'] = 'Netfang';
$labels['addcontact'] = 'Bæta við nýju';
$labels['editcontact'] = 'Lagfæra';
-
-$labels['edit'] = 'Laga';
+$labels['edit'] = 'Laga';
$labels['cancel'] = 'Hætta við';
-$labels['save'] = 'Vista';
+$labels['save'] = 'Vista';
$labels['delete'] = 'Eyða';
-
-$labels['newcontact'] = 'Búa til nýtt nafnspjald';
-$labels['deletecontact'] = 'Eyða völdum netföngum';
-$labels['composeto'] = 'Skrifa skeyti til';
+$labels['newcontact'] = 'Búa til nýtt nafnspjald';
+$labels['deletecontact'] = 'Eyða völdum netföngum';
+$labels['composeto'] = 'Skrifa skeyti til';
$labels['contactsfromto'] = 'Netföng $from til $to af $count';
-$labels['print'] = 'Prenta';
-$labels['export'] = 'Flytja út';
-
-
-// settings
-$labels['settingsfor'] = 'Stillingar fyrir';
-
-$labels['preferences'] = 'Stillingar';
-$labels['userpreferences'] = 'Notendastillingar';
-$labels['editpreferences'] = 'Breyta notendastillingum';
-
-$labels['identities'] = 'Identities';
-$labels['manageidentities'] = 'Manage identities for this account';
-$labels['newidentity'] = 'New identity';
-
-$labels['newitem'] = 'Nýtt';
-$labels['edititem'] = 'Laga';
-
-$labels['setdefault'] = 'Gera sjálfgilt';
-$labels['language'] = 'Tungumál';
-$labels['timezone'] = 'TÃmabelti';
-$labels['pagesize'] = 'LÃnur á sÃðu';
+$labels['print'] = 'Prenta';
+$labels['export'] = 'Flytja út';
+$labels['exportvcards'] = 'Flytja út nafnspjöld á vCard formi';
+$labels['previouspage'] = 'Sýni fyrri skammt';
+$labels['firstpage'] = 'Sýna fyrsta skammt';
+$labels['nextpage'] = 'Sýna næsta skammt';
+$labels['lastpage'] = 'Sýna sÃðasta skammt';
+$labels['groups'] = 'Hópar';
+$labels['personaladrbook'] = 'Persónuleg heimilisföng';
+$labels['import'] = 'Flytja inn';
+$labels['importcontacts'] = 'Flytja inn nafnspjöld';
+$labels['importfromfile'] = 'Flytja inn af skrá';
+$labels['importreplace'] = 'Skipta út allri netfangaskránni';
+$labels['importtext'] = 'Ãú getur flutt inn nafnspjöld frá núverandi netfangaskrá.
Nú styðjum við innflutning á netföngum á vCard formi.';
+$labels['done'] = 'Afgreitt';
+$labels['settingsfor'] = 'Stillingar fyrir';
+$labels['preferences'] = 'Stillingar';
+$labels['userpreferences'] = 'Notendastillingar';
+$labels['editpreferences'] = 'Breyta notendastillingum';
+$labels['identities'] = 'Identities';
+$labels['manageidentities'] = 'Manage identities for this account';
+$labels['newidentity'] = 'New identity';
+$labels['newitem'] = 'Nýtt';
+$labels['edititem'] = 'Laga';
+$labels['setdefault'] = 'Gera sjálfgilt';
+$labels['autodetect'] = 'Sjálfvirkt';
+$labels['language'] = 'Tungumál';
+$labels['timezone'] = 'TÃmabelti';
+$labels['pagesize'] = 'LÃnur á sÃðu';
$labels['signature'] = 'Undirskrift';
-$labels['dstactive'] = 'Sumar-/vetratÃmi';
+$labels['dstactive'] = 'Sumar-/vetratÃmi';
$labels['htmleditor'] = 'Skrifa HTML-skeyti';
$labels['htmlsignature'] = 'HTML-undirskrift';
$labels['previewpane'] = 'Sýna forskoðunarglugga';
-
-$labels['autosavedraft'] = 'Vista sjálfkrafa sem drög';
-$labels['everynminutes'] = 'á $n mÃnútna fresti';
-$labels['never'] = 'aldrei';
-
-$labels['folder'] = 'Mappa';
-$labels['folders'] = 'Möppur';
-$labels['foldername'] = 'Nafn möppu';
-$labels['subscribed'] = 'Valin';
-$labels['create'] = 'Búa til';
-$labels['createfolder'] = 'Búa til nýja möppu';
-$labels['deletefolder'] = 'Eyða möppu';
-$labels['managefolders'] = 'Sýsla með möppum';
+$labels['skin'] = 'Sniðmát á viðmóti';
+$labels['logoutclear'] = 'Tæma rusl við útskráningu';
+$labels['logoutcompact'] = 'Ãjappa Innhólfi við útskráningu';
+$labels['uisettings'] = 'Notendasniðmát';
+$labels['serversettings'] = 'Stillingar þjóns';
+$labels['mailboxview'] = 'Pósthólfs útlit';
+$labels['mdnrequests'] = 'Viðvaranir sendanda';
+$labels['askuser'] = 'spyrja notanda';
+$labels['autosend'] = 'senda sjálfkrafa';
+$labels['ignore'] = 'hunsa';
+$labels['readwhendeleted'] = 'Merkja skeyti sem lesið þegar þvà er hent';
+$labels['flagfordeletion'] = 'Merkja skeyti til eyðingar à stað þess að eyða';
+$labels['skipdeleted'] = 'Ekki sýna eydd skeyti';
+$labels['showremoteimages'] = 'Sýna myndir annarsstaðar frá';
+$labels['fromknownsenders'] = 'frá þekktum sendendum';
+$labels['always'] = 'alltaf';
+$labels['showinlineimages'] = 'Sýna viðhangandi myndir fyrir neðan skeytið';
+$labels['autosavedraft'] = 'Vista sjálfkrafa sem drög';
+$labels['everynminutes'] = 'á $n mÃnútna fresti';
+$labels['keepaliveevery'] = '$n mÃnútu fresti';
+$labels['keepalive'] = 'Athuga ný skeyti á';
+$labels['never'] = 'aldrei';
+$labels['messagesdisplaying'] = 'Sýni skeyti';
+$labels['messagescomposition'] = 'Semja skeyti';
+$labels['mimeparamfolding'] = 'Nafn á viðhengjum';
+$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (other)';
+$labels['advancedoptions'] = 'Frekari möguleikar';
+$labels['focusonnewmessage'] = 'Láta glugga beinast að nýju skeyti';
+$labels['checkallfolders'] = 'Athuga ný skeyti à öllum möppum';
+$labels['folder'] = 'Mappa';
+$labels['folders'] = 'Möppur';
+$labels['foldername'] = 'Nafn möppu';
+$labels['subscribed'] = 'Valin';
+$labels['messagecount'] = 'Skeyti';
+$labels['create'] = 'Búa til';
+$labels['createfolder'] = 'Búa til nýja möppu';
+$labels['rename'] = 'Endurnefna';
$labels['renamefolder'] = 'Breyta nafni möppu';
-
-
-
+$labels['deletefolder'] = 'Eyða möppu';
+$labels['managefolders'] = 'Sýsla með möppum';
+$labels['specialfolders'] = 'Sérstakar möppur';
$labels['sortby'] = 'Raða eftir';
-$labels['sortasc'] = 'Raða vaxandi';
+$labels['sortasc'] = 'Raða vaxandi';
$labels['sortdesc'] = 'Raða minnkandi';
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
?>
diff --git a/program/localization/it_IT/labels.inc b/program/localization/it_IT/labels.inc
index 9e927fc..38d0330 100644
--- a/program/localization/it_IT/labels.inc
+++ b/program/localization/it_IT/labels.inc
@@ -6,7 +6,7 @@
| language/it/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Yusef Maali |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/it_IT/messages.inc b/program/localization/it_IT/messages.inc
index 95865c3..fe2d988 100644
--- a/program/localization/it_IT/messages.inc
+++ b/program/localization/it_IT/messages.inc
@@ -6,7 +6,7 @@
| language/it/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Yusef Maali |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2045 2008-11-11 15:09:24Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ja_JP/labels.inc b/program/localization/ja_JP/labels.inc
index 126aae1..4e0dbf7 100644
--- a/program/localization/ja_JP/labels.inc
+++ b/program/localization/ja_JP/labels.inc
@@ -6,7 +6,7 @@
| language/ja_JP/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Takashi Takamatsu |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
@@ -123,12 +123,13 @@ $labels['none'] = 'ãªã';
$labels['unread'] = 'æªèª';
$labels['flagged'] = 'ãã©ã°ãã';
$labels['unanswered'] = 'æªè¿ä¿¡';
+$labels['filter'] = 'ãã£ã«ã¿';
$labels['compact'] = 'ã³ã³ãã¯ã';
$labels['empty'] = '空';
$labels['purge'] = 'ç ´æ£';
$labels['quota'] = 'ãã£ã¹ã¯ä½¿ç¨é';
$labels['unknown'] = '䏿';
-$labels['unlimited'] = 'ç¡å¶é';
+$labels['unlimited'] = 'å¶éãªã';
$labels['quicksearch'] = 'æ¤ç´¢';
$labels['resetsearch'] = 'æ¤ç´¢ã®è§£é¤';
$labels['openinextwin'] = 'æ°ããã¦ã£ã³ãã¦ã§éã';
@@ -225,9 +226,12 @@ $labels['ignore'] = 'ç¡è¦ãã';
$labels['readwhendeleted'] = 'åé¤ããã¡ã¼ã«ãæ¢èªã«ãã';
$labels['flagfordeletion'] = 'å®éã«åé¤ããã«å餿¸ã¿ãã©ã°ãä»ãã';
$labels['skipdeleted'] = 'å餿¸ã¿ã¡ã¼ã«ã表示ããªã';
+$labels['showremoteimages'] = 'ãªã¢ã¼ãç»åã®è¡¨ç¤º';
+$labels['fromknownsenders'] = 'æ¢ç¥ã®éä¿¡è
';
+$labels['always'] = '常ã«';
$labels['showinlineimages'] = 'ã¡ã¼ã«ã«æ·»ä»ãããç»åã表示ãã';
$labels['autosavedraft'] = 'èªåçã«ä¸æ¸ããä¿å';
-$labels['everynminutes'] = ' $n 忝';
+$labels['everynminutes'] = '$n 忝';
$labels['keepaliveevery'] = '$n 忝';
$labels['keepalive'] = 'æ°çã¡ã¼ã«ã®ç¢ºèªéé';
$labels['never'] = 'ããªã';
@@ -239,6 +243,7 @@ $labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 æºæ (other)';
$labels['advancedoptions'] = 'é«åº¦ãªè¨å®';
$labels['focusonnewmessage'] = 'æ°ããã¡ã¼ã«ãå±ããããã©ã¦ã¶ã«ãã©ã¼ã«ã¹ãç§»ã';
+$labels['checkallfolders'] = 'ãã¹ã¦ã®ãã©ã«ãã®æ°çã¡ã¼ã«ã確èªãã';
$labels['folder'] = 'ãã©ã«ã';
$labels['folders'] = 'ãã©ã«ãä¸è¦§';
$labels['foldername'] = 'ãã©ã«ãå';
@@ -254,5 +259,9 @@ $labels['specialfolders'] = 'ç¹æ®ãªãã©ã«ã';
$labels['sortby'] = 'æ´åã®åºæºã«ãã';
$labels['sortasc'] = 'æé ã§æ´å';
$labels['sortdesc'] = 'éé ã§æ´å';
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
?>
diff --git a/program/localization/ja_JP/messages.inc b/program/localization/ja_JP/messages.inc
index c26a991..d953b76 100644
--- a/program/localization/ja_JP/messages.inc
+++ b/program/localization/ja_JP/messages.inc
@@ -6,7 +6,7 @@
| language/ja_JP/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Takashi Takamatsu |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2093 2008-11-27 11:12:38Z alec $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
@@ -36,7 +36,7 @@ $messages['messagesaved'] = 'ã¡ã¼ã«ã䏿¸ãã«ä¿åãã¾ããã';
$messages['successfullysaved'] = 'ä¿åãã¾ããã';
$messages['addedsuccessfully'] = 'ã¢ãã¬ã¹å¸³ã¸ã®é£çµ¡å
ã®è¿½å ãã¾ããã';
$messages['contactexists'] = 'ãã®ã¡ã¼ã«ã¢ãã¬ã¹ã¯æ¢ã«ã¢ãã¬ã¹å¸³ã«åå¨ãã¾ãã';
-$messages['blockedimages'] = 'ãã©ã¤ãã·ã¼ãä¿è·ããããããã®ã¡ã¼ã«ã«å«ã¾ãããªã¢ã¼ãç»åã¯ãããã¯ããã¾ããã';
+$messages['blockedimages'] = 'ãã©ã¤ãã·ã¼ä¿è·ã®ããããã®ã¡ã¼ã«ã«å«ã¾ãããªã¢ã¼ãç»åããããã¯ãã¾ããã';
$messages['encryptedmessage'] = 'ãã®ã¡ã¼ã«ã¯æå·åããã¦ãããã表示ã§ãã¾ããã';
$messages['nocontactsfound'] = 'é£çµ¡å
ãããã¾ããã';
$messages['contactnotfound'] = 'è¦æ±ãããé£çµ¡å
ãè¦ã¤ããã¾ããã';
diff --git a/program/localization/ka_GE/labels.inc b/program/localization/ka_GE/labels.inc
index 6d37223..49b415a 100755
--- a/program/localization/ka_GE/labels.inc
+++ b/program/localization/ka_GE/labels.inc
@@ -6,7 +6,7 @@
| language/ge/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/ka_GE/messages.inc b/program/localization/ka_GE/messages.inc
index d2c29ca..43456d6 100755
--- a/program/localization/ka_GE/messages.inc
+++ b/program/localization/ka_GE/messages.inc
@@ -6,7 +6,7 @@
| language/ge/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/ko_KR/labels.inc b/program/localization/ko_KR/labels.inc
index 4df78c6..0e108f1 100644
--- a/program/localization/ko_KR/labels.inc
+++ b/program/localization/ko_KR/labels.inc
@@ -2,18 +2,18 @@
/*
- +-----------------------------------------------------------------------+
- | localization/kr/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: lordmiss |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| localization/kr/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: lordmiss |
++-----------------------------------------------------------------------+
- @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
+@version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
*/
@@ -44,8 +44,8 @@ $labels['priority'] = 'ì°ì ìì';
$labels['organization'] = '기ê´';
$labels['reply-to'] = 'íì 주ì';
$labels['mailboxlist'] = 'í´ë';
-$labels['messagesfromto'] = '$from ì´ $toìê² ë³´ë¸ ë©ìì§ $count ê°';
-$labels['messagenrof'] = 'ë©ìì§ $count ê° ì¤ $nr ê°';
+$labels['messagesfromto'] = '$count ê° ì¤ $from ìì $to ë² ë©ìì§';
+$labels['messagenrof'] = '$count ê° ì¤ $nr ë² ë©ìì§';
$labels['moveto'] = 'ì´ë...';
$labels['download'] = 'ë¤ì´ë¡ë';
$labels['filename'] = 'íì¼ ì´ë¦';
@@ -68,6 +68,30 @@ $labels['wednesday'] = 'ììì¼';
$labels['thursday'] = '목ìì¼';
$labels['friday'] = 'ê¸ìì¼';
$labels['saturday'] = 'í ìì¼';
+$labels['jan'] = '1ì';
+$labels['feb'] = '2ì';
+$labels['mar'] = '3ì';
+$labels['apr'] = '4ì';
+$labels['may'] = '5ì';
+$labels['jun'] = '6ì';
+$labels['jul'] = '7ì';
+$labels['aug'] = '8ì';
+$labels['sep'] = '9ì';
+$labels['oct'] = '10ì';
+$labels['nov'] = '11ì';
+$labels['dec'] = '12ì';
+$labels['longjan'] = '1ì';
+$labels['longfeb'] = '2ì';
+$labels['longmar'] = '3ì';
+$labels['longapr'] = '4ì';
+$labels['longmay'] = '5ì';
+$labels['longjun'] = '6ì';
+$labels['longjul'] = '7ì';
+$labels['longaug'] = '8ì';
+$labels['longsep'] = '9ì';
+$labels['longoct'] = '10ì';
+$labels['longnov'] = '11ì';
+$labels['longdec'] = '12ì';
$labels['today'] = 'ì¤ë';
$labels['checkmail'] = 'ì ë©ì¼ íì¸';
$labels['writenewmessage'] = 'ì ë©ì¼ ìì±';
@@ -88,12 +112,17 @@ $labels['lastmessages'] = 'ë§ì§ë§ ë©ì¼ ì¸í¸ 보기';
$labels['backtolist'] = 'ë©ì¼ 목ë¡ì¼ë¡';
$labels['viewsource'] = 'ìì¤ ë³´ê¸°';
$labels['markmessages'] = 'ë©ìì§ íì';
-$labels['markread'] = 'ì½ì ê²ì¼ë¡';
-$labels['markunread'] = 'ì½ì§ ìì ê²ì¼ë¡';
+$labels['markread'] = 'ì½ì ê²ì¼ë¡ íì';
+$labels['markunread'] = 'ì½ì§ ìì ê²ì¼ë¡ íì';
+$labels['markflagged'] = 'ê¹ë° ë¬ê¸°';
+$labels['markunflagged'] = 'ê¹ë° ë´ë¦¬ê¸°';
$labels['select'] = 'ì í';
$labels['all'] = '모ë';
$labels['none'] = 'ìì';
$labels['unread'] = 'ì½ì§ ìì';
+$labels['flagged'] = 'ê¹ë°';
+$labels['unanswered'] = 'ëµì¥íì§ ìì';
+$labels['filter'] = 'íí°';
$labels['compact'] = 'ê°ë¨íê²';
$labels['empty'] = 'ë¹ì°ê¸°';
$labels['purge'] = 'ìì ';
@@ -102,6 +131,7 @@ $labels['unknown'] = 'ìì ìì';
$labels['unlimited'] = 'ì í ìì';
$labels['quicksearch'] = '빨리 찾기';
$labels['resetsearch'] = '찾기 리ì
';
+$labels['openinextwin'] = 'ì ì°½ìì ì´ê¸°';
$labels['compose'] = 'ë©ì¼ ì°ê¸°';
$labels['savemessage'] = 'ëëíí¸ ì ì¥';
$labels['sendmessage'] = 'ë©ì¼ ì§ê¸ ë³´ë';
@@ -122,8 +152,12 @@ $labels['high'] = 'ëì';
$labels['highest'] = 'ê°ì¥ ëì';
$labels['nosubject'] = '(ì 목 ìì)';
$labels['showimages'] = 'ì´ë¯¸ì§ íì';
+$labels['alwaysshow'] = '$sender ìì ì¨ ì´ë¯¸ì§ íì 보기';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'ì¼ë° í
ì¤í¸';
+$labels['savesentmessagein'] = 'ë³´ë¸ ë©ìì§ë¥¼ ë¤ìì ì ì¥';
+$labels['dontsave'] = 'ì ì¥íì§ ìì';
+$labels['maxuploadsize'] = 'ìµë íì¼ í¬ê¸°ë $size ì
ëë¤';
$labels['addcc'] = '참조 ë£ê¸°';
$labels['addbcc'] = 'ì¨ì참조 ë£ê¸°';
$labels['addreplyto'] = 'íì 주ì ë£ê¸°';
@@ -147,12 +181,19 @@ $labels['composeto'] = 'ì ë©ì¼ ìì±';
$labels['contactsfromto'] = '$from ìì $to ë¡ì ì°ë½ì² $count ê°';
$labels['print'] = 'ì¸ì';
$labels['export'] = 'ë´ë³´ë´ê¸°';
+$labels['exportvcards'] = 'ì°ë½ì²ë¥¼ vCard í¬ë§·ì¼ë¡ ë´ë³´ë´ê¸°';
$labels['previouspage'] = 'ì´ì ì¸í¸ 보기';
$labels['firstpage'] = 'ì²ì ì¸í¸ 보기';
$labels['nextpage'] = 'ë¤ì ì¸í¸ 보기';
$labels['lastpage'] = 'ë§ì§ë§ ì¸í¸ 보기';
$labels['groups'] = '그룹';
$labels['personaladrbook'] = 'ê°ì¸ 주ì';
+$labels['import'] = 'ê°ì ¸ì¤ê¸°';
+$labels['importcontacts'] = 'ì°ë½ì² ê°ì ¸ì¤ê¸°';
+$labels['importfromfile'] = 'íì¼ìì ê°ì ¸ì¤ê¸°';
+$labels['importreplace'] = 'ì ì²´ 주ìë¡ì ë°ê¿';
+$labels['importtext'] = 'ì°ë½ì²ë¤ì ê°ì§ê³ ìë 주ìë¡ìì ê°ì ¸ì¬ ì ììµëë¤.
íì¬ë vCard í¬ë§·ìì ê°ì ¸ì¤ê¸°ë¥¼ ì§ìí©ëë¤.';
+$labels['done'] = 'ìë£';
$labels['settingsfor'] = 'ì¤ì ';
$labels['preferences'] = 'íê²½ ì¤ì ';
$labels['userpreferences'] = 'ì¬ì©ì íê²½';
@@ -163,6 +204,7 @@ $labels['newidentity'] = 'ì ì ì';
$labels['newitem'] = 'ì ìì´í
';
$labels['edititem'] = 'ìì´í
í¸ì§';
$labels['setdefault'] = '기본ì¼ë¡ ì¤ì ';
+$labels['autodetect'] = 'ìë';
$labels['language'] = 'ì¸ì´';
$labels['timezone'] = 'ìê°ë';
$labels['pagesize'] = 'íì´ì§ë¹ ì¤ ì';
@@ -171,9 +213,37 @@ $labels['dstactive'] = 'ì머íì';
$labels['htmleditor'] = 'HTML ë©ì¼ ì°ê¸°';
$labels['htmlsignature'] = 'HTML ìëª
';
$labels['previewpane'] = 'ì´ì 구ì 보기';
+$labels['skin'] = 'ì¸í°íì´ì¤ ì¤í¨';
+$labels['logoutclear'] = 'ë¡ê·¸ììí ë í´ì§íµ ë¹ì°ê¸°';
+$labels['logoutcompact'] = 'ë¡ê·¸ììí ë ë°ìí¸ì§í¨ ìì¶í기';
+$labels['uisettings'] = 'ì¬ì©ì ì¸í°íì´ì¤';
+$labels['serversettings'] = 'ìë² ì¤ì ';
+$labels['mailboxview'] = 'ë©ì¼ ìì 보기';
+$labels['mdnrequests'] = 'ìì íì¸';
+$labels['askuser'] = 'ì¬ì©ììê² ë¬»ê¸°';
+$labels['autosend'] = 'ìëì¼ë¡ ë³´ë´ê¸°';
+$labels['ignore'] = '무ì';
+$labels['readwhendeleted'] = 'ìì í ë ë©ìì§ë¥¼ ì½ì ê²ì¼ë¡ íì';
+$labels['flagfordeletion'] = 'ì§ì°ë ëì ì§ì¸ ë©ìì§ì ê¹ë° ë¬ê¸°';
+$labels['skipdeleted'] = 'ì§ì´ ë©ìì§ ë³´ì´ì§ ì기';
+$labels['showremoteimages'] = 'ì격 ì´ë¯¸ì§ ë³´ì´ê¸°';
+$labels['fromknownsenders'] = 'ìë ë°ì ì¸ìê²ìë§';
+$labels['always'] = 'íì';
+$labels['showinlineimages'] = 'ë©ìì§ ìëì ì²¨ë¶ ì´ë¯¸ì§ ë³´ì´ê¸°';
$labels['autosavedraft'] = 'ëëíí¸ ìë ì ì¥';
$labels['everynminutes'] = '$n ë¶ë§ë¤';
+$labels['keepaliveevery'] = '$n ë¶ë§ë¤';
+$labels['keepalive'] = 'ë¤ì ê°ê²©ë§ë¤ ì ë©ìì§ ìë ì²´í¬';
$labels['never'] = 'íì§ ìì';
+$labels['messagesdisplaying'] = 'ë©ìì§ íì ì¤';
+$labels['messagescomposition'] = 'ë©ìì§ ìì± ì¤';
+$labels['mimeparamfolding'] = 'ì²¨ë¶ íì¼ ì´ë¦';
+$labels['2231folding'] = 'Full RFC 2231 (ì ëë²ë)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS ìì룻)';
+$labels['2047folding'] = 'Full RFC 2047 (ë¤ë¥¸ íë¡ê·¸ë¨ë¤)';
+$labels['advancedoptions'] = 'ìì¸ ì¤ì ';
+$labels['focusonnewmessage'] = 'ì ë©ìì§ê° ìì¼ë©´ ë¸ë¼ì°ì ìëì°ë¡ í¬ì»¤ì¤ ì´ë';
+$labels['checkallfolders'] = 'ì ë©ìì§ë¥¼ ìí´ ëª¨ë í´ë ì²´í¬';
$labels['folder'] = 'í´ë';
$labels['folders'] = 'í´ë';
$labels['foldername'] = 'í´ë ì´ë¦';
@@ -185,8 +255,13 @@ $labels['rename'] = 'ì´ë¦ ë°ê¾¸ê¸°';
$labels['renamefolder'] = 'í´ë ì´ë¦ ë°ê¾¸ê¸°';
$labels['deletefolder'] = 'í´ë ì§ì°ê¸°';
$labels['managefolders'] = 'í´ë ê´ë¦¬';
+$labels['specialfolders'] = 'í¹ì í´ë';
$labels['sortby'] = 'ì ë ¬';
$labels['sortasc'] = 'ì¤ë¦ì°¨ìì¼ë¡ ì ë ¬';
$labels['sortdesc'] = 'ë´ë¦¼ì°¨ìì¼ë¡ ì ë ¬';
+$labels['B'] = 'ë°ì´í¸';
+$labels['KB'] = 'í¬ë¡ë°ì´í¸';
+$labels['MB'] = 'ë©ê°ë°ì´í¸';
+$labels['GB'] = '기ê°ë°ì´í¸';
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/ko_KR/messages.inc b/program/localization/ko_KR/messages.inc
index 95d591e..957eadf 100644
--- a/program/localization/ko_KR/messages.inc
+++ b/program/localization/ko_KR/messages.inc
@@ -2,18 +2,18 @@
/*
- +-----------------------------------------------------------------------+
- | localization/kr/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: lordmiss |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| localization/kr/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: lordmiss |
++-----------------------------------------------------------------------+
- @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
+@version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
*/
@@ -40,6 +40,8 @@ $messages['encryptedmessage'] = 'ì´ ë©ì¼ì ìí¸íëì´ ë³¼ ì ììµë
$messages['nocontactsfound'] = 'ì°ë½ì² ìì';
$messages['contactnotfound'] = 'ìì²í ì°ë½ì²ê° ììµëë¤';
$messages['sendingfailed'] = 'ë©ì¼ì ë³´ë´ì§ 못íìµëë¤';
+$messages['senttooquickly'] = 'ì´ ë©ìì§ë¥¼ ë³´ë´ê¸° ì ì $sec ì´ ëì 기ë¤ë¦¬ììì¤.';
+$messages['errorsavingsent'] = 'ë³´ë¸ ë©ìì§ë¥¼ ì ì¥í ë ìë¬ê° ë°ìíìµëë¤.';
$messages['errorsaving'] = 'ì ì¥ ì¤ ìë¬ê° ë°ìíìµëë¤';
$messages['errormoving'] = 'ë©ì¼ì ì®ê¸¸ ì ììµëë¤';
$messages['errordeleting'] = 'ë©ì¼ì ì§ì¸ ì ììµëë¤';
@@ -47,10 +49,15 @@ $messages['deletecontactconfirm'] = 'ì ë§ ì íí ì°ë½ì²ë¤ì ìì í
$messages['deletemessagesconfirm'] = 'ì ë§ ì íí ë©ì¼ë¤ì ìì íìê² ìµëê¹?';
$messages['deletefolderconfirm'] = 'ì ë§ ì´ í´ë를 ìì íìê² ìµëê¹?';
$messages['purgefolderconfirm'] = 'ì ë§ ì´ í´ëì 모ë ë©ì¼ì ìì íìê² ìµëê¹?';
+$messages['foldercreating'] = 'í´ë ë§ëë ì¤...';
+$messages['folderdeleting'] = 'í´ë ì§ì°ë ì¤...';
+$messages['folderrenaming'] = 'í´ë ì´ë¦ ë°ê¾¸ë ì¤...';
+$messages['foldermoving'] = 'í´ë ì®ê¸°ë ì¤...';
$messages['formincomplete'] = 'ììì ìì í ì±ì°ì§ ìììµëë¤';
$messages['noemailwarning'] = 'ì í¨í ì´ë©ì¼ 주ì를 ë£ì´ì£¼ììì¤';
$messages['nonamewarning'] = 'ì´ë¦ì ë£ì´ì£¼ììì¤';
$messages['nopagesizewarning'] = 'íì´ì§ í¬ê¸°ë¥¼ ë£ì´ì£¼ììì¤';
+$messages['nosenderwarning'] = 'ë°ì ì ì´ë©ì¼ 주ì를 ë£ì´ì£¼ììì¤';
$messages['norecipientwarning'] = 'ì ì´ë í ê° ì´ìì ìì 주ì를 ë£ì´ì£¼ììì¤';
$messages['nosubjectwarning'] = '"ì 목"ì´ ììµëë¤. ì 목ì ë£ì¼ìê² ìµëê¹?';
$messages['nobodywarning'] = 'í
ì¤í¸ ìì´ ë©ì¼ì ë³´ë¼ê¹ì?';
@@ -78,5 +85,14 @@ $messages['receiptsent'] = 'ë©ì¼ ì½ì íì¸ì ë³´ëìµëë¤';
$messages['errorsendingreceipt'] = 'ì½ì íì¸ì ë³´ë¼ ì ììµëë¤';
$messages['nodeletelastidentity'] = 'ì´ ì ë³´ë ë§ì§ë§ ë¨ì ê²ì´ë¯ë¡ ì§ì¸ ì ììµëë¤';
$messages['addsubfolderhint'] = 'ì´ í´ëë íì¬ ì íë í´ëì ìë¸ í´ëë¡ ë§ë¤ì´ì§ ê²ì
ëë¤';
+$messages['forbiddencharacter'] = 'í´ë ì´ë¦ì ì¸ ì ìë 문ìê° í¬í¨ëì´ ììµëë¤';
+$messages['selectimportfile'] = 'ì
ë¡ëí íì¼ì ì ííì¸ì';
+$messages['addresswriterror'] = 'ì íí 주ìë¡ì ì¸ ì ììµëë¤';
+$messages['importwait'] = 'ê°ì ¸ì¤ë ì¤, 기ë¤ë¦¬ì¸ì...';
+$messages['importerror'] = 'ê°ì ¸ì¤ê¸° ì¤í¨! ì
ë¡ëí íì¼ì´ ì í¨í vCard íì¼ì´ ìëëë¤.';
+$messages['importconfirm'] = '$inserted ì°ë½ì²ë¥¼ ì±ê³µì ì¼ë¡ ê°ì ¸ìê³ , $skipped ì¡´ì¬íë í목ì ê±´ëë°ììµëë¤.:$names
';
+$messages['opnotpermitted'] = 'ìì
ì´ íê°ëì§ ìììµëë¤!';
+$messages['nofromaddress'] = 'ì íí ì ìì ì´ë©ì¼ 주ìê° ìì';
+$messages['editorwarning'] = 'ì¼ë° í
ì¤í¸ í¸ì§ê¸°ë¡ ë°ê¾¸ë©´ 모ë ììì´ ì¬ë¼ì§ëë¤. ê³ìí ê¹ì?';
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/lt_LT/labels.inc b/program/localization/lt_LT/labels.inc
index 0c8b5b1..b3e0440 100644
--- a/program/localization/lt_LT/labels.inc
+++ b/program/localization/lt_LT/labels.inc
@@ -6,14 +6,14 @@
| language/lt_LT/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Martynas Bendorius |
+-----------------------------------------------------------------------+'
-@version $Id: labels.inc 2184 2008-12-21 09:30:25Z yllar $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/lt_LT/messages.inc b/program/localization/lt_LT/messages.inc
index c1fceb3..dd1d309 100644
--- a/program/localization/lt_LT/messages.inc
+++ b/program/localization/lt_LT/messages.inc
@@ -6,14 +6,14 @@
| language/lt_LT/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Martynas Bendorius |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2184 2008-12-21 09:30:25Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/lv_LV/labels.inc b/program/localization/lv_LV/labels.inc
index 0d2f591..5f8c19e 100644
--- a/program/localization/lv_LV/labels.inc
+++ b/program/localization/lv_LV/labels.inc
@@ -6,7 +6,7 @@
| language/lv/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Mikelis Zalais |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $
+ @version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/lv_LV/messages.inc b/program/localization/lv_LV/messages.inc
index 7ba47ed..549f905 100644
--- a/program/localization/lv_LV/messages.inc
+++ b/program/localization/lv_LV/messages.inc
@@ -6,7 +6,7 @@
| language/lv/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Mikelis Zalais |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/mk_MK/labels.inc b/program/localization/mk_MK/labels.inc
index c796e57..0e8f497 100755
--- a/program/localization/mk_MK/labels.inc
+++ b/program/localization/mk_MK/labels.inc
@@ -5,7 +5,7 @@
| language/mk_MK/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -119,6 +119,9 @@ $labels['select'] = 'Ðдбележи';
$labels['all'] = 'СиÑе';
$labels['none'] = 'ÐикоÑа';
$labels['unread'] = 'ÐепÑоÑиÑани';
+$labels['flagged'] = 'Ðбележано';
+$labels['unanswered'] = 'ÐеодговоÑено';
+$labels['filter'] = 'ФилÑеÑ';
$labels['compact'] = 'УÑедно';
$labels['empty'] = 'ÐÑпÑазни';
$labels['purge'] = 'ЧиÑÑеÑе';
@@ -127,6 +130,7 @@ $labels['unknown'] = 'непознаÑо';
$labels['unlimited'] = 'неогÑаниÑено';
$labels['quicksearch'] = 'ÐÑзо пÑеÑÑажÑваÑе';
$labels['resetsearch'] = 'Ðово пÑеÑÑажÑваÑе';
+$labels['openinextwin'] = 'ÐÑвоÑи во нов пÑозоÑеÑ';
$labels['compose'] = 'Ðова поÑака';
$labels['savemessage'] = 'Ð¡Ð½Ð¸Ð¼Ð°Ñ Ñа поÑакаÑа во ÐепÑаÑени';
$labels['sendmessage'] = 'ÐÑаÑи Ñа поÑакаÑа';
@@ -150,6 +154,9 @@ $labels['showimages'] = 'ÐÑикажи ги ÑликиÑе';
$labels['alwaysshow'] = 'Ð¡ÐµÐºÐ¾Ð³Ð°Ñ Ð¿ÑикажÑÐ²Ð°Ñ Ð³Ð¸ ÑликиÑе од $sender';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'ÐбиÑен ÑекÑÑ';
+$labels['savesentmessagein'] = 'Сними Ñа пÑаÑенаÑа поÑака во';
+$labels['dontsave'] = 'не Ñа ÑнимаÑ';
+$labels['maxuploadsize'] = 'ÐакÑималнаÑа дозволена големина на даÑоÑекаÑа е $size';
$labels['addcc'] = 'ÐÐ¾Ð´Ð°Ñ Cc';
$labels['addbcc'] = 'ÐÐ¾Ð´Ð°Ñ Bcc';
$labels['addreplyto'] = 'ÐÐ¾Ð´Ð°Ñ ÐдговоÑи-Ðа';
@@ -173,12 +180,19 @@ $labels['composeto'] = 'ÐапиÑи поÑака';
$labels['contactsfromto'] = '$count имиÑа $from до $to';
$labels['print'] = 'ÐÑпеÑаÑи';
$labels['export'] = 'Ðзвади како';
+$labels['exportvcards'] = 'ÐкÑпоÑÑиÑÐ°Ñ Ð³Ð¸ конÑакÑиÑе во vCard ÑоÑмаÑ';
$labels['previouspage'] = 'ÐÑикажи пÑеÑÑ
одна ÑÑÑана';
$labels['firstpage'] = 'ÐÑикажи Ñа пÑваÑа ÑÑÑана';
$labels['nextpage'] = 'ÐÑикажи Ñа ÑледнаÑа ÑÑÑана';
$labels['lastpage'] = 'ÐÑикажи Ñа поÑледнаÑа ÑÑÑана';
$labels['groups'] = 'ÐÑÑпи';
$labels['personaladrbook'] = 'ÐдÑеÑи';
+$labels['import'] = 'ÐмпоÑÑиÑаÑ';
+$labels['importcontacts'] = 'ÐмпоÑÑиÑÐ°Ñ ÐºÐ¾Ð½ÑакÑи';
+$labels['importfromfile'] = 'ÐмпоÑÑиÑÐ°Ñ Ð¾Ð´ даÑоÑека:';
+$labels['importreplace'] = 'Ðамени го ÑÐµÐ»Ð¸Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸Ðº';
+$labels['importtext'] = 'ÐÐ¾Ð¶ÐµÑ Ð´Ð° пÑикаÑÐµÑ ÐºÐ¾Ð½ÑакÑи од веÑе поÑÑоеÑки именик.
Ðо моменÑÐ¾Ñ Ð¿Ð¾Ð´Ð´ÑжÑваме импоÑÑиÑаÑе на адÑеÑи од vCard ÑоÑмаÑоÑ.';
+$labels['done'] = 'ÐавÑÑено';
$labels['settingsfor'] = 'ÐодеÑÑваÑа за';
$labels['preferences'] = 'ÐодеÑÑваÑа';
$labels['userpreferences'] = 'ÐоÑиÑниÑки подеÑÑваÑа';
@@ -189,6 +203,7 @@ $labels['newidentity'] = 'Ðов иденÑиÑеÑ';
$labels['newitem'] = 'Ðов обÑекÑ';
$labels['edititem'] = 'ÐÑомени обÑекÑ';
$labels['setdefault'] = 'ÐдбеÑи за оÑновно';
+$labels['autodetect'] = 'ÐвÑомаÑÑко';
$labels['language'] = 'Ðазик';
$labels['timezone'] = 'ÐÑеменÑка зона';
$labels['pagesize'] = 'Редови пÑикажани на ÑÑÑана';
@@ -209,12 +224,25 @@ $labels['autosend'] = 'авÑомаÑÑки иÑпÑаÑи';
$labels['ignore'] = 'игноÑиÑаÑе';
$labels['readwhendeleted'] = 'Ðбележи Ñа поÑакаÑа како пÑоÑиÑана пÑи бÑиÑеÑе';
$labels['flagfordeletion'] = 'Ðбележи Ñа поÑакаÑа за бÑиÑеÑе намеÑÑо да Ñа избÑиÑеÑ';
+$labels['skipdeleted'] = 'Ðе ги пÑикажÑÐ²Ð°Ñ Ð¸Ð·Ð±ÑиÑаниÑе поÑаки';
+$labels['showremoteimages'] = 'ÐÑикажи ги ÑликиÑе';
+$labels['fromknownsenders'] = 'од познаÑи пÑаÑаÑи';
+$labels['always'] = 'ÑекогаÑ';
$labels['showinlineimages'] = 'ÐÑикажи ги пÑикаÑениÑе Ñлики под поÑакаÑа';
$labels['autosavedraft'] = 'ÐвомаÑÑки ÑÐ½Ð¸Ð¼Ð°Ñ Ð²Ð¾ ÐепÑаÑени';
$labels['everynminutes'] = 'Ñекои $n минÑÑи';
+$labels['keepaliveevery'] = 'Ñекои $n минÑÑи';
+$labels['keepalive'] = 'ÐÑовеÑи за нови поÑаки на';
$labels['never'] = 'никогаÑ';
$labels['messagesdisplaying'] = 'ÐÑикажÑваÑе на поÑака';
$labels['messagescomposition'] = 'ÐиÑÑваÑе на поÑака';
+$labels['mimeparamfolding'] = 'Ðме на пÑикаÑениÑе даÑоÑеки';
+$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (дÑÑго)';
+$labels['advancedoptions'] = 'ÐапÑедни опÑии';
+$labels['focusonnewmessage'] = 'ФокÑÑиÑÐ°Ñ Ð³Ð¾ пÑозоÑеÑÐ¾Ñ Ð½Ð° пÑелиÑÑÑваÑÐ¾Ñ Ð½Ð° новаÑа поÑака';
+$labels['checkallfolders'] = 'ÐÑовеÑи ги ÑиÑе папки за нови поÑаки';
$labels['folder'] = 'Ðапка';
$labels['folders'] = 'Ðапки';
$labels['foldername'] = 'Ðме на папкаÑа';
@@ -226,8 +254,13 @@ $labels['rename'] = 'ÐÑеименÑваÑ';
$labels['renamefolder'] = 'ÐÑеименÑÐ²Ð°Ñ Ñа папкаÑа';
$labels['deletefolder'] = 'ÐзбÑиÑи Ñа папкаÑа';
$labels['managefolders'] = 'ÐÑганизиÑаÑе на папки';
+$labels['specialfolders'] = 'СпеÑиÑални папки';
$labels['sortby'] = 'УÑеди по';
$labels['sortasc'] = 'УÑеди по азбÑÑен Ñед';
$labels['sortdesc'] = 'УÑеди опаÑаÑки';
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
?>
diff --git a/program/localization/mk_MK/messages.inc b/program/localization/mk_MK/messages.inc
index f85f498..bd56962 100755
--- a/program/localization/mk_MK/messages.inc
+++ b/program/localization/mk_MK/messages.inc
@@ -5,7 +5,7 @@
| language/mk_MK/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -39,6 +39,8 @@ $messages['encryptedmessage'] = 'Ðваа поÑака е кодиÑана и н
$messages['nocontactsfound'] = 'Ðема ÐмиÑа во ÐменикоÑ.';
$messages['contactnotfound'] = 'ÐаÑаноÑо име не поÑÑои';
$messages['sendingfailed'] = 'ÐоÑакаÑа не е пÑаÑена';
+$messages['senttooquickly'] = 'Ðе молиме поÑекаÑÑе $sec ÑекÑнда/и пÑед да Ñа иÑпÑаÑиÑе поÑакаÑа';
+$messages['errorsavingsent'] = 'ÐÑеÑка пÑи ÑнимаÑеÑо на пÑаÑенаÑа поÑака';
$messages['errorsaving'] = 'ÐÑеÑка пÑи ÑнимаÑеÑо';
$messages['errormoving'] = 'ÐоÑакаÑа неможе да Ñе пÑемеÑÑи';
$messages['errordeleting'] = 'ÐоÑакаÑа неможе да Ñе избÑиÑе';
@@ -46,10 +48,15 @@ $messages['deletecontactconfirm'] = 'Ðали ÑÑе ÑигÑÑни дека Ñ
$messages['deletemessagesconfirm'] = 'Ðали ÑÑе ÑигÑÑни дека ÑакаÑе да го избÑиÑеÑе обележаниоÑ(Ñе) поÑака(и)?';
$messages['deletefolderconfirm'] = 'Ðали ÑÑе ÑигÑÑни дека ÑакаÑе да Ñа избÑиÑеÑе оваа папка?';
$messages['purgefolderconfirm'] = 'Ðали ÑÑе ÑигÑÑни дека ÑакаÑе да ги избÑÑеÑе ÑиÑе поÑаки во оваа папка?';
+$messages['foldercreating'] = 'ÐапкаÑа Ñе кÑеиÑа...';
+$messages['folderdeleting'] = 'ÐапкаÑа Ñе бÑиÑе...';
+$messages['folderrenaming'] = 'ÐапкаÑа Ñе пÑеименÑва...';
+$messages['foldermoving'] = 'ÐапкаÑа Ñе пÑемеÑÑÑва...';
$messages['formincomplete'] = 'ÐмаÑе изоÑÑавено непополнеÑи инÑоÑмаÑии';
$messages['noemailwarning'] = 'ÐнеÑеÑе валидна емаил адÑеÑа';
$messages['nonamewarning'] = 'ÐнеÑеÑе име';
$messages['nopagesizewarning'] = 'ÐнеÑеÑе Ñа големинаÑа на ÑÑÑанаÑа';
+$messages['nosenderwarning'] = 'ÐнеÑеÑе Ñа адÑеÑаÑа на пÑаÑаÑоÑ';
$messages['norecipientwarning'] = 'ÐнеÑеÑе баÑем еден пÑимаÑ';
$messages['nosubjectwarning'] = 'ÐемаÑе внеÑено âÐаÑловâ. Ðали ÑакаÑе да внеÑеÑе?';
$messages['nobodywarning'] = 'ÐоÑакаÑа нема ÑекÑÑ Ð²Ð¾ неа. Ðали ÑакаÑе да Ñа пÑаÑиÑе?';
@@ -78,5 +85,13 @@ $messages['errorsendingreceipt'] = 'ÐзвеÑÑÑваÑеÑо не е пÑаÑ
$messages['nodeletelastidentity'] = 'ÐÐ²Ð¾Ñ Ð¸Ð´ÐµÐ½ÑиÑÐµÑ Ð½ÐµÐ¼Ð¾Ð¶Ðµ да Ñе избÑиÑе, ÑÐ¾Ñ Ðµ поÑледниоÑ.';
$messages['addsubfolderhint'] = 'Ðваа папка Ñе биде кÑеиÑана како под-папка на ÑелекÑиÑанаÑа.';
$messages['forbiddencharacter'] = 'ÐмеÑо на папкаÑа ÑодÑжи неÑоодвеÑен ÑоÑмаÑ';
+$messages['selectimportfile'] = 'ÐзбеÑеÑе Ñа даÑоÑекаÑа коÑа ÑакаÑе да Ñа пÑикаÑиÑе';
+$messages['addresswriterror'] = 'ÐдбеÑÐµÐ½Ð¸Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸Ðº не може да Ñе пÑоменÑва';
+$messages['importwait'] = 'ÐмпоÑÑиÑам, ве молиме поÑекаÑÑе...';
+$messages['importerror'] = 'ÐмпоÑÑиÑаÑеÑо е неÑÑпеÑно! ÐÑикаÑенаÑа даÑоÑека не е валиден vCard докÑменÑ.';
+$messages['importconfirm'] = 'УÑпеÑно Ñе импоÑÑиÑани $inserted конÑакÑи, $skipped веÑе поÑÑоÑÐ°Ñ Ð¸ Ñе пÑеÑкокнаÑи:$names
';
+$messages['opnotpermitted'] = 'ÐпеÑаÑиÑаÑа не е дозволена';
+$messages['nofromaddress'] = 'Ðе е внеÑена е-поÑÑа во одбеÑÐµÐ½Ð¸Ð¾Ñ Ð¸Ð´ÐµÐ½ÑиÑеÑ';
+$messages['editorwarning'] = 'ÐÑоменÑваÑе во обиÑен ÑекÑÑ Ð¿ÑоменÑÐ²Ð°Ñ Ñе ÑезÑлÑиÑа Ñо гÑбеÑе на ÑелоÑо ÑоÑмаÑиÑаÑе на ÑекÑÑоÑ. СакаÑе да пÑодолжиÑе?';
?>
diff --git a/program/localization/ms_MY/labels.inc b/program/localization/ms_MY/labels.inc
index 2515fff..b27c457 100644
--- a/program/localization/ms_MY/labels.inc
+++ b/program/localization/ms_MY/labels.inc
@@ -6,7 +6,7 @@
| language/ms_MY/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/ms_MY/messages.inc b/program/localization/ms_MY/messages.inc
index dfb9e18..91bbf33 100644
--- a/program/localization/ms_MY/messages.inc
+++ b/program/localization/ms_MY/messages.inc
@@ -6,7 +6,7 @@
| language/ms_MY/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/nb_NO/labels.inc b/program/localization/nb_NO/labels.inc
index 8449f39..218c909 100644
--- a/program/localization/nb_NO/labels.inc
+++ b/program/localization/nb_NO/labels.inc
@@ -6,7 +6,7 @@
| language/nb_NO/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Author: Tor Erik Linnerud - JKLM |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1335 2008-04-27 15:18:13Z alec $
+ @version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/nb_NO/messages.inc b/program/localization/nb_NO/messages.inc
index 2ea63a7..61e49bd 100644
--- a/program/localization/nb_NO/messages.inc
+++ b/program/localization/nb_NO/messages.inc
@@ -6,7 +6,7 @@
| language/nb_NO/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Author: Tor Erik Linnerud - JKLM |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/nl_BE/labels.inc b/program/localization/nl_BE/labels.inc
index bba510e..c7d3912 100644
--- a/program/localization/nl_BE/labels.inc
+++ b/program/localization/nl_BE/labels.inc
@@ -6,7 +6,7 @@
| language/nl_BE/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Laurens Vets |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2136 2008-12-08 20:44:46Z yllar $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/nl_BE/messages.inc b/program/localization/nl_BE/messages.inc
index aba3010..1976b95 100644
--- a/program/localization/nl_BE/messages.inc
+++ b/program/localization/nl_BE/messages.inc
@@ -6,21 +6,21 @@
| language/nl_BE/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Dennis Heeren |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1108 2008-02-17 20:08:44Z thomasb $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
$messages = array();
$messages['loginfailed'] = 'Aanmelden mislukt...';
$messages['cookiesdisabled'] = 'Uw browser accepteert geen cookies...';
-$messages['sessionerror'] = 'Sessie is reeds beëindigd of is ongeldig...';
+$messages['sessionerror'] = 'Sessie is reeds be�indigd of is ongeldig...';
$messages['imaperror'] = 'Kon geen verbinding maken met de IMAP server...';
$messages['nomessagesfound'] = 'Er zijn geen berichten in deze map...';
$messages['loggedout'] = 'U bent nu afgemeld. Tot ziens!';
@@ -36,7 +36,7 @@ $messages['successfullysaved'] = 'Succesvol opgeslagen...';
$messages['addedsuccessfully'] = 'Contactpersoon is toegevoegd...';
$messages['contactexists'] = 'Er bestaat reeds een contactpersoon met dit e-mailadres...';
$messages['blockedimages'] = 'Om uw privacy te beschermen worden de afbeeldingen in dit bericht niet getoond...';
-$messages['encryptedmessage'] = 'Dit bericht is geëncrypteerd en kan niet worden weergegeven, sorry...';
+$messages['encryptedmessage'] = 'Dit bericht is ge�ncrypteerd en kan niet worden weergegeven, sorry...';
$messages['nocontactsfound'] = 'Geen contactpersonen gevonden...';
$messages['contactnotfound'] = 'De gevraagde contactpersoon was niet gevonden';
$messages['sendingfailed'] = 'Kon het bericht niet versturen...';
@@ -51,7 +51,7 @@ $messages['formincomplete'] = 'Het formulier is niet volledig ingevuld...';
$messages['noemailwarning'] = 'Geef een geldig e-mailadres op...';
$messages['nonamewarning'] = 'Geef een naam op...';
$messages['nopagesizewarning'] = 'Geef een geldig aantal berichten per pagina op...';
-$messages['norecipientwarning'] = 'Geef minstens één bestemmeling op...';
+$messages['norecipientwarning'] = 'Geef minstens ��n bestemmeling op...';
$messages['nosubjectwarning'] = 'Geen onderwerp opgegeven. Wenst u alsnog een onderwerp te geven?';
$messages['nobodywarning'] = 'Wilt u dit lege bericht versturen?';
$messages['notsentwarning'] = 'Het bericht is niet verzonden. Wilt u het bericht verwijderen?';
@@ -69,8 +69,8 @@ $messages['converting'] = 'Opmaak van het bericht wordt gewist...';
$messages['messageopenerror'] = 'Kon het bericht niet ophalen van de server';
$messages['fileuploaderror'] = 'Bestandupload mislukt';
$messages['filesizeerror'] = 'Het bestand overschrijdt de maximum grootte van $size';
-$messages['copysuccess'] = '$nr adressen met succes gekopiëerd';
-$messages['copyerror'] = 'Kon de adressen niet kopiëren';
+$messages['copysuccess'] = '$nr adressen met succes gekopi�erd';
+$messages['copyerror'] = 'Kon de adressen niet kopi�ren';
$messages['sourceisreadonly'] = 'Het adres kan niet worden opgeslagen';
$messages['errorsavingcontact'] = 'Kon de contactpersoon niet bewaren';
$messages['movingmessage'] = 'Bericht wordt verplaatst...';
diff --git a/program/localization/nl_NL/labels.inc b/program/localization/nl_NL/labels.inc
index 0662504..2fcd4a2 100644
--- a/program/localization/nl_NL/labels.inc
+++ b/program/localization/nl_NL/labels.inc
@@ -6,7 +6,7 @@
| language/nl_NL/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Laurens Vets |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2136 2008-12-08 20:44:46Z yllar $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/nl_NL/messages.inc b/program/localization/nl_NL/messages.inc
index 8793025..4df22d3 100644
--- a/program/localization/nl_NL/messages.inc
+++ b/program/localization/nl_NL/messages.inc
@@ -6,7 +6,7 @@
| language/nl_NL/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Lazlo Westerhof |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2037 2008-11-04 07:46:29Z robin $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/nn_NO/labels.inc b/program/localization/nn_NO/labels.inc
index aa9ac47..4e434b4 100644
--- a/program/localization/nn_NO/labels.inc
+++ b/program/localization/nn_NO/labels.inc
@@ -6,7 +6,7 @@
| language/nn_NO/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Update: Odin Omdal Hørthe |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/nn_NO/messages.inc b/program/localization/nn_NO/messages.inc
index c6eb48d..e50844c 100644
--- a/program/localization/nn_NO/messages.inc
+++ b/program/localization/nn_NO/messages.inc
@@ -6,7 +6,7 @@
| language/nn_NO/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Update: Odin Omdal Hørthe |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2045 2008-11-11 15:09:24Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc
index 742546c..dba23a8 100644
--- a/program/localization/pl_PL/labels.inc
+++ b/program/localization/pl_PL/labels.inc
@@ -6,7 +6,7 @@
| language/pl_PL/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/pl_PL/messages.inc b/program/localization/pl_PL/messages.inc
index 74127e2..897c16b 100644
--- a/program/localization/pl_PL/messages.inc
+++ b/program/localization/pl_PL/messages.inc
@@ -6,7 +6,7 @@
| language/pl_PL/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/pt_BR/labels.inc b/program/localization/pt_BR/labels.inc
index edc8e19..9b36396 100644
--- a/program/localization/pt_BR/labels.inc
+++ b/program/localization/pt_BR/labels.inc
@@ -6,7 +6,7 @@
| language/pt_BR/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -17,7 +17,7 @@
| Victor Benincasa |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2184 2008-12-21 09:30:25Z yllar $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/pt_BR/messages.inc b/program/localization/pt_BR/messages.inc
index 1fb5a96..a1c98ce 100644
--- a/program/localization/pt_BR/messages.inc
+++ b/program/localization/pt_BR/messages.inc
@@ -6,7 +6,7 @@
| language/pt_BR/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -17,7 +17,7 @@
| Victor Benincasa |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2184 2008-12-21 09:30:25Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/pt_PT/labels.inc b/program/localization/pt_PT/labels.inc
index a699bf1..14073ac 100644
--- a/program/localization/pt_PT/labels.inc
+++ b/program/localization/pt_PT/labels.inc
@@ -6,7 +6,7 @@
| language/pt_PT/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -16,7 +16,7 @@
| Nuno Costa |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2254 2009-01-22 19:52:46Z yllar $
*/
@@ -123,6 +123,9 @@ $labels['select'] = 'Seleccionar';
$labels['all'] = 'Todas';
$labels['none'] = 'Nenhuma';
$labels['unread'] = 'Não lidas';
+$labels['flagged'] = 'Sinalizadas';
+$labels['unanswered'] = 'Não respondidas';
+$labels['filter'] = 'Filtro';
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Vazio';
$labels['purge'] = 'Apagar';
@@ -226,6 +229,9 @@ $labels['ignore'] = 'ignorar';
$labels['readwhendeleted'] = 'Marcar a mensagem como lida ao excluir';
$labels['flagfordeletion'] = 'Marcar a mensagem de eliminação, em vez de a excluir';
$labels['skipdeleted'] = 'Não mostrar mensagens apagadas';
+$labels['showremoteimages'] = 'Mostrar imagens externas';
+$labels['fromknownsenders'] = 'de remetentes conhecidos';
+$labels['always'] = 'sempre';
$labels['showinlineimages'] = 'Mostrar imagens anexadas abaixo da mensagem';
$labels['autosavedraft'] = 'Salvar rascunho automaticamente';
$labels['everynminutes'] = 'a cada $n minutos';
@@ -240,6 +246,7 @@ $labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Total RFC 2047 (outro)';
$labels['advancedoptions'] = 'Opções avançadas';
$labels['focusonnewmessage'] = 'Focar janela de navegador na nova mensagem';
+$labels['checkallfolders'] = 'Verificar todas as pastas para novas mensagens';
$labels['folder'] = 'Pasta';
$labels['folders'] = 'Pastas';
$labels['foldername'] = 'Nome da pasta';
diff --git a/program/localization/pt_PT/messages.inc b/program/localization/pt_PT/messages.inc
index c40991d..5faacc8 100644
--- a/program/localization/pt_PT/messages.inc
+++ b/program/localization/pt_PT/messages.inc
@@ -6,7 +6,7 @@
| language/pt_PT/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Nuno Costa |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2045 2008-11-11 15:09:24Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ro_RO/labels.inc b/program/localization/ro_RO/labels.inc
index 2ca0e5d..33d0c34 100644
--- a/program/localization/ro_RO/labels.inc
+++ b/program/localization/ro_RO/labels.inc
@@ -6,7 +6,7 @@
| language/ro/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Ispas Dorin |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1149 2008-02-28 19:52:09Z thomasb $
+ @version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ro_RO/messages.inc b/program/localization/ro_RO/messages.inc
index 562bab7..f20f38a 100644
--- a/program/localization/ro_RO/messages.inc
+++ b/program/localization/ro_RO/messages.inc
@@ -6,7 +6,7 @@
| language/ro/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Ispas Dorin |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1149 2008-02-28 19:52:09Z thomasb $
+ @version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/ru_RU/labels.inc b/program/localization/ru_RU/labels.inc
index c5002e4..b8c5a44 100644
--- a/program/localization/ru_RU/labels.inc
+++ b/program/localization/ru_RU/labels.inc
@@ -6,7 +6,7 @@
| language/ru_RU/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Artur Smolkin |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
@@ -124,6 +124,7 @@ $labels['none'] = 'ÐиÑего';
$labels['unread'] = 'ÐепÑоÑиÑаннÑе';
$labels['flagged'] = 'ÐомеÑеннÑе';
$labels['unanswered'] = 'ÐеоÑвеÑеннÑе';
+$labels['filter'] = 'ФилÑÑÑ';
$labels['compact'] = 'СжаÑÑ';
$labels['empty'] = 'ÐпÑÑÑоÑиÑÑ';
$labels['purge'] = 'ÐÑиÑÑиÑÑ';
@@ -227,6 +228,9 @@ $labels['ignore'] = 'игноÑиÑоваÑÑ';
$labels['readwhendeleted'] = 'ÐомеÑаÑÑ ÐºÐ°Ðº пÑоÑиÑанное пÑи Ñдалении';
$labels['flagfordeletion'] = 'ÐомеÑаÑÑ Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²Ð¼ÐµÑÑо ÑдалениÑ';
$labels['skipdeleted'] = 'Ðе показÑваÑÑ ÑдаленнÑе ÑообÑениÑ';
+$labels['showremoteimages'] = 'ÐоказÑваÑÑ ÑдаленнÑе изобÑажениÑ';
+$labels['fromknownsenders'] = 'Ð¾Ñ Ð¸Ð·Ð²ÐµÑÑнÑÑ
оÑпÑавиÑелей';
+$labels['always'] = 'вÑегда';
$labels['showinlineimages'] = 'ÐоказÑваÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð½Ð¸Ð·Ñ ÑообÑениÑ';
$labels['autosavedraft'] = 'ÐвÑоÑоÑ
Ñанение ÑеÑновика';
$labels['everynminutes'] = 'каждÑе $n минÑÑ';
diff --git a/program/localization/ru_RU/messages.inc b/program/localization/ru_RU/messages.inc
index 5a39aca..5001e36 100644
--- a/program/localization/ru_RU/messages.inc
+++ b/program/localization/ru_RU/messages.inc
@@ -6,7 +6,7 @@
| language/ru_RU/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Artur Smolkin |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2105 2008-12-01 17:50:13Z alec $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/si_LK/labels.inc b/program/localization/si_LK/labels.inc
index 4bd6306..6dec90c 100644
--- a/program/localization/si_LK/labels.inc
+++ b/program/localization/si_LK/labels.inc
@@ -5,7 +5,7 @@
| language/si/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/si_LK/messages.inc b/program/localization/si_LK/messages.inc
index 3729cba..a489bcd 100644
--- a/program/localization/si_LK/messages.inc
+++ b/program/localization/si_LK/messages.inc
@@ -5,7 +5,7 @@
| language/si/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/sk_SK/labels.inc b/program/localization/sk_SK/labels.inc
index 2d64dcf..34bcbaa 100644
--- a/program/localization/sk_SK/labels.inc
+++ b/program/localization/sk_SK/labels.inc
@@ -6,7 +6,7 @@
| language/sk/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Peter Mann |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/sk_SK/messages.inc b/program/localization/sk_SK/messages.inc
index 9c43f0b..63a6ab3 100644
--- a/program/localization/sk_SK/messages.inc
+++ b/program/localization/sk_SK/messages.inc
@@ -6,7 +6,7 @@
| language/sk/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Peter Mann |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2045 2008-11-11 15:09:24Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/sl_SI/labels.inc b/program/localization/sl_SI/labels.inc
index 98e7fa9..9ec706e 100644
--- a/program/localization/sl_SI/labels.inc
+++ b/program/localization/sl_SI/labels.inc
@@ -6,7 +6,7 @@
| language/sl/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Andrej Mocilnik |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 1109 2008-02-17 20:22:05Z thomasb $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/sl_SI/messages.inc b/program/localization/sl_SI/messages.inc
index fab3c20..448a510 100644
--- a/program/localization/sl_SI/messages.inc
+++ b/program/localization/sl_SI/messages.inc
@@ -6,7 +6,7 @@
| language/sl/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Andrej Mocilnik |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 1109 2008-02-17 20:22:05Z thomasb $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/sq_AL/labels.inc b/program/localization/sq_AL/labels.inc
index 127bb88..2b710b1 100644
--- a/program/localization/sq_AL/labels.inc
+++ b/program/localization/sq_AL/labels.inc
@@ -6,7 +6,7 @@
| language/sq_AL/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/sq_AL/messages.inc b/program/localization/sq_AL/messages.inc
index f00e205..34ce7b5 100644
--- a/program/localization/sq_AL/messages.inc
+++ b/program/localization/sq_AL/messages.inc
@@ -6,7 +6,7 @@
| language/sq_AL/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/sr_CS/labels.inc b/program/localization/sr_CS/labels.inc
index 37ae6ec..dba0ba6 100644
--- a/program/localization/sr_CS/labels.inc
+++ b/program/localization/sr_CS/labels.inc
@@ -6,7 +6,7 @@
| language/sr_cyrillic/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/sr_CS/messages.inc b/program/localization/sr_CS/messages.inc
index 1e51f81..43f3fcf 100644
--- a/program/localization/sr_CS/messages.inc
+++ b/program/localization/sr_CS/messages.inc
@@ -6,7 +6,7 @@
| language/sr_cyrillic/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/sv_SE/labels.inc b/program/localization/sv_SE/labels.inc
index 2759359..371f2e2 100644
--- a/program/localization/sv_SE/labels.inc
+++ b/program/localization/sv_SE/labels.inc
@@ -3,37 +3,45 @@
/*
+-----------------------------------------------------------------------+
- | language/se/labels.inc |
+ | language/sv_SE/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Fredrik Nygren |
- | Andreas Henriksson |
- | Jonas Näsholm |
+ | Andreas Henriksson |
+ | Jonas Nasholm |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1191 2008-03-13 08:10:49Z yllar $
+ @version $Id: labels.inc 2215 2009-01-05 11:23:03Z alec $
*/
$labels = array();
+
+// login page
$labels['welcome'] = 'Välkommen till $product';
$labels['username'] = 'Användarnamn';
$labels['password'] = 'Lösenord';
$labels['server'] = 'Server';
$labels['login'] = 'Logga in';
+
+// taskbar
$labels['logout'] = 'Logga ut';
$labels['mail'] = 'Meddelanden';
$labels['settings'] = 'Personliga inställningar';
$labels['addressbook'] = 'Adressbok';
+
+// mailbox names
$labels['inbox'] = 'Inkorg';
$labels['drafts'] = 'Utkast';
$labels['sent'] = 'Skickat';
$labels['trash'] = 'Papperskorg';
$labels['junk'] = 'Skräp';
+
+// message listing
$labels['subject'] = 'Ãmne';
$labels['from'] = 'Avsändare';
$labels['to'] = 'Mottagare';
@@ -44,18 +52,27 @@ $labels['date'] = 'Datum';
$labels['size'] = 'Storlek';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organisation';
+
+// aliases
$labels['reply-to'] = 'Svara till';
-$labels['mailboxlist'] = 'Mappar';
+
+$labels['mailboxlist'] = 'Kataloger';
$labels['messagesfromto'] = 'Meddelande $from till $to av $count';
$labels['messagenrof'] = 'Meddelande $nr av $count';
-$labels['moveto'] = 'flytta till...';
-$labels['download'] = 'ladda ner';
+
+$labels['moveto'] = 'Flytta till:';
+$labels['download'] = 'Ladda ner';
+
$labels['filename'] = 'Filnamn';
$labels['filesize'] = 'Filstorlek';
-$labels['preferhtml'] = 'Visa HTML';
+
+$labels['preferhtml'] = 'Visa meddelanden i HTML-format';
$labels['htmlmessage'] = 'HTML-meddelande';
$labels['prettydate'] = 'Fina datum';
+
$labels['addtoaddressbook'] = 'Lägg till i adressbok';
+
+// weekdays short
$labels['sun'] = 'Sön';
$labels['mon'] = 'MÃ¥n';
$labels['tue'] = 'Tis';
@@ -63,6 +80,8 @@ $labels['wed'] = 'Ons';
$labels['thu'] = 'Tor';
$labels['fri'] = 'Fre';
$labels['sat'] = 'Lör';
+
+// weekdays long
$labels['sunday'] = 'Söndag';
$labels['monday'] = 'MÃ¥ndag';
$labels['tuesday'] = 'Tisdag';
@@ -70,7 +89,37 @@ $labels['wednesday'] = 'Onsdag';
$labels['thursday'] = 'Torsdag';
$labels['friday'] = 'Fredag';
$labels['saturday'] = 'Lördag';
+
+// months short
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'Maj';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dec';
+
+// months long
+$labels['longjan'] = 'Januari';
+$labels['longfeb'] = 'Februari';
+$labels['longmar'] = 'Mars';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'Maj';
+$labels['longjun'] = 'Juni';
+$labels['longjul'] = 'Juli';
+$labels['longaug'] = 'Augusti';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Oktober';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'December';
$labels['today'] = 'Idag';
+
+// toolbar buttons
$labels['checkmail'] = 'Hämta nya meddelanden';
$labels['writenewmessage'] = 'Skapa nytt meddelande';
$labels['replytomessage'] = 'Svara avsändaren';
@@ -90,20 +139,33 @@ $labels['lastmessages'] = 'Visa sista gruppen av meddelanden';
$labels['backtolist'] = 'Tillbaka till meddelandelistan';
$labels['viewsource'] = 'Visa källa';
$labels['markmessages'] = 'Markera meddelande';
-$labels['markread'] = 'Som läst';
-$labels['markunread'] = 'Som oläst';
+$labels['markread'] = 'Läst';
+$labels['markunread'] = 'Oläst';
+$labels['markflagged'] = 'Flaggat';
+$labels['markunflagged'] = 'Oflaggat';
+
$labels['select'] = 'Välj';
$labels['all'] = 'Alla';
$labels['none'] = 'Ingen';
$labels['unread'] = 'Olästa';
+$labels['flagged'] = 'Flaggade';
+$labels['unanswered'] = 'Obesvarade';
+$labels['filter'] = 'Filter';
+
$labels['compact'] = 'Packa';
$labels['empty'] = 'Töm';
$labels['purge'] = 'Rensa';
+
$labels['quota'] = 'Diskutrymme';
-$labels['unknown'] = 'okänd';
-$labels['unlimited'] = 'obegränsad';
+$labels['unknown'] = 'okänt';
+$labels['unlimited'] = 'obegränsat';
+
$labels['quicksearch'] = 'Snabbsök';
$labels['resetsearch'] = 'Ã
terställ sökning';
+
+$labels['openinextwin'] = 'Ãppna i nytt fönster';
+
+// message compose
$labels['compose'] = 'Skapa nytt meddelande';
$labels['savemessage'] = 'Spara utkast';
$labels['sendmessage'] = 'Skicka meddelande';
@@ -111,84 +173,155 @@ $labels['addattachment'] = 'Bifoga fil';
$labels['charset'] = 'Teckenkodning';
$labels['editortype'] = 'Typ av redigerare';
$labels['returnreceipt'] = 'Mottagarkvitto';
+
$labels['checkspelling'] = 'Kontrollera stavning';
$labels['resumeediting'] = 'Ã
teruppta redigering';
$labels['revertto'] = 'Ã
tergå till';
+
$labels['attachments'] = 'Bilagor';
$labels['upload'] = 'Bifoga';
$labels['close'] = 'Stäng';
+
$labels['low'] = 'LÃ¥g';
$labels['lowest'] = 'Lägst';
$labels['normal'] = 'Normal';
$labels['high'] = 'Hög';
$labels['highest'] = 'Högst';
+
$labels['nosubject'] = '(inget ämne)';
$labels['showimages'] = 'Visa bilder';
+$labels['alwaysshow'] = 'Visa alltid bilder från $sender';
+
$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Oformaterad text';
+$labels['plaintoggle'] = 'Text';
+$labels['savesentmessagein'] = 'Spara kopia i';
+$labels['dontsave'] = 'Spara inte';
+$labels['maxuploadsize'] = 'Tillåten filstorlek är $size';
+
$labels['addcc'] = 'Kopia';
$labels['addbcc'] = 'Hemlig kopia';
$labels['addreplyto'] = 'Svara till';
-$labels['mdnrequest'] = 'Avsändaren har bett om att bli uppmärksammad när du läst det här meddelandet. Vill du skicka uppmärksamma avsändaren?';
-$labels['receiptread'] = 'Svarskvitto (läst)';
-$labels['yourmessage'] = 'Det här är ett svarskvitto för ditt meddelande';
-$labels['receiptnote'] = 'Notera: Det här kvittot berättar bara att meddelandet visats på mottagarens dator. Det finns ingen garanti att mottagaren har läst och förstått innehållet i meddelandet';
-$labels['name'] = 'Visa namn';
+
+// mdn
+$labels['mdnrequest'] = 'Avsändaren har begärt mottagarkvitto för det här meddelandet. Vill du skicka ett mottagarkvitto?';
+$labels['receiptread'] = 'Mottagarkvitto (läst)';
+$labels['yourmessage'] = 'Det här är ett mottagarkvitto för ditt meddelande';
+$labels['receiptnote'] = 'Notera: Mottagarkvittot innebär bara att meddelandet visats på mottagarens dator. Därmed finns ingen garanti att mottagaren har läst och förstått meddelandet.';
+
+// address boook
+$labels['name'] = 'Namn';
$labels['firstname'] = 'Förnamn';
$labels['surname'] = 'Efternamn';
$labels['email'] = 'E-post';
+
$labels['addcontact'] = 'Lägg till ny kontakt';
$labels['editcontact'] = 'Redigera kontakt';
+
$labels['edit'] = 'Redigera';
$labels['cancel'] = 'Avbryt';
$labels['save'] = 'Spara';
$labels['delete'] = 'Radera';
-$labels['newcontact'] = 'Skapa nytt kontaktkort';
-$labels['deletecontact'] = 'Radera valda kontakter';
-$labels['composeto'] = 'Skriv meddelande till';
-$labels['contactsfromto'] = 'Kontakter $from till $to av $count';
+
+$labels['newcontact'] = 'Ny kontakt';
+$labels['deletecontact'] = 'Radera vald kontakt';
+$labels['composeto'] = 'Skriv meddelande till vald kontakt';
+$labels['contactsfromto'] = 'Kontakt $from till $to av $count';
$labels['print'] = 'Skriv ut';
$labels['export'] = 'Exportera';
+$labels['exportvcards'] = 'Exportera kontakter';
+
$labels['previouspage'] = 'Visa föregående grupp';
$labels['firstpage'] = 'Visa första gruppen';
$labels['nextpage'] = 'Visa nästa grupp';
$labels['lastpage'] = 'Visa sista gruppen';
+
$labels['groups'] = 'Grupper';
$labels['personaladrbook'] = 'Personliga adresser';
+
+$labels['import'] = 'Importera';
+$labels['importcontacts'] = 'Importera kontakter';
+$labels['importfromfile'] = 'Importera från fil:';
+$labels['importreplace'] = 'Ersätt samtliga kontakter i adressboken';
+$labels['importtext'] = 'Kontakter kan importeras från en befintlig adressbok.
För närvarande stöds import av adresser i vCard-format.';
+$labels['done'] = 'Klart';
+
+// settings
$labels['settingsfor'] = 'Inställningar för';
+
$labels['preferences'] = 'Inställningar';
$labels['userpreferences'] = 'Användarinställningar';
$labels['editpreferences'] = 'Ãndra användarinställningar';
+
$labels['identities'] = 'Profiler';
$labels['manageidentities'] = 'Hantera profiler för detta konto';
$labels['newidentity'] = 'Ny profil';
+
$labels['newitem'] = 'Ny post';
$labels['edititem'] = 'Ãndra post';
+
$labels['setdefault'] = 'Sätt som standard';
+$labels['autodetect'] = 'Automatiskt';
$labels['language'] = 'Språk';
$labels['timezone'] = 'Tidszon';
$labels['pagesize'] = 'Rader per sida';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommartid';
-$labels['htmleditor'] = 'Skriv HTML-meddelanden';
+$labels['htmleditor'] = 'Skriv meddelanden i HTML-format';
$labels['htmlsignature'] = 'HTML-signatur';
-$labels['previewpane'] = 'Visa delad vy i inbox';
-$labels['autosavedraft'] = 'Spara utkast automatiskt';
-$labels['everynminutes'] = 'var $n minut';
-$labels['never'] = 'aldrig';
-$labels['folder'] = 'Mapp';
-$labels['folders'] = 'Mappar';
-$labels['foldername'] = 'Mappnamn';
+$labels['previewpane'] = 'Visa meddelandefältet';
+$labels['skin'] = 'Stilmall för användargränssnitt';
+$labels['logoutclear'] = 'Töm papperskorgen vid utloggning';
+$labels['logoutcompact'] = 'Packa inkorgen vid utloggning';
+$labels['uisettings'] = 'Användargränssnitt';
+$labels['serversettings'] = 'Serverinställningar';
+$labels['mailboxview'] = 'Hantering av meddelanden';
+$labels['mdnrequests'] = 'Skicka mottagarkvitton';
+$labels['askuser'] = 'Fråga';
+$labels['autosend'] = 'Automatiskt';
+$labels['ignore'] = 'Ignorera';
+$labels['readwhendeleted'] = 'Märk meddelande som läst vid borttagning';
+$labels['flagfordeletion'] = 'Flagga meddelande för borttagning istället för att radera direkt';
+$labels['skipdeleted'] = 'Visa inte raderade meddelanden';
+$labels['showremoteimages'] = 'Visa externt länkade bilder i meddelande';
+$labels['fromknownsenders'] = 'Från kända avsändare';
+$labels['always'] = 'Alltid';
+$labels['showinlineimages'] = 'Visa bifogade bilder efter meddelande';
+$labels['autosavedraft'] = 'Spara utkast med automatiskt intervall';
+$labels['everynminutes'] = '$n min';
+$labels['keepaliveevery'] = '$n min';
+$labels['keepalive'] = 'Hämta nya meddelanden med automatiskt intervall';
+$labels['never'] = 'Aldrig';
+$labels['messagesdisplaying'] = 'Visning av meddelanden';
+$labels['messagescomposition'] = 'Redigering av meddelanden';
+$labels['mimeparamfolding'] = 'Kodning av namn på bifogade filer';
+$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
+$labels['miscfolding'] = 'RFC 2047/2231 (Outlook)';
+$labels['2047folding'] = 'Full RFC 2047 (övriga)';
+$labels['advancedoptions'] = 'Avancerade inställningar';
+$labels['focusonnewmessage'] = 'Fokusera webbläsarens fönster vid nytt meddelande';
+$labels['checkallfolders'] = 'Genomsök samtliga kataloger efter nya meddelanden';
+
+$labels['folder'] = 'Katalog';
+$labels['folders'] = 'Kataloger';
+$labels['foldername'] = 'Katalognamn';
$labels['subscribed'] = 'Ansluten';
$labels['messagecount'] = 'Meddelanden';
$labels['create'] = 'Skapa';
-$labels['createfolder'] = 'Skapa ny mapp';
+$labels['createfolder'] = 'Skapa ny katalog';
$labels['rename'] = 'Byt namn';
-$labels['renamefolder'] = 'Byt mappnamn';
-$labels['deletefolder'] = 'Radera mapp';
-$labels['managefolders'] = 'Hantera mappar';
+$labels['renamefolder'] = 'Byt katalognamn';
+$labels['deletefolder'] = 'Radera katalog';
+$labels['managefolders'] = 'Hantera kataloger';
+$labels['specialfolders'] = 'Speciella kataloger';
+
$labels['sortby'] = 'Sortera på';
$labels['sortasc'] = 'Sortera stigande';
$labels['sortdesc'] = 'Sortera fallande';
+// units
+$labels['B'] = 'B';
+$labels['KB'] = 'KB';
+$labels['MB'] = 'MB';
+$labels['GB'] = 'GB';
+
?>
diff --git a/program/localization/sv_SE/messages.inc b/program/localization/sv_SE/messages.inc
index fa8a153..4b13de3 100644
--- a/program/localization/sv_SE/messages.inc
+++ b/program/localization/sv_SE/messages.inc
@@ -3,19 +3,19 @@
/*
+-----------------------------------------------------------------------+
- | language/se/messages.inc |
+ | language/sv_SE/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Fredrik Nygren |
- | Andreas Henriksson |
- | Jonas Näsholm |
+ | Andreas Henriksson |
+ | Jonas Nasholm |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
+ @version $Id: messages.inc 2215 2009-01-05 11:23:03Z alec $
*/
@@ -26,7 +26,7 @@ $messages['sessionerror'] = 'Din inloggning är felaktig eller har gått ut';
$messages['imaperror'] = 'Kontakt med IMAP-servern misslyckades';
$messages['nomessagesfound'] = 'Inga meddelanden';
$messages['loggedout'] = 'Du är utloggad. Välkommen åter!';
-$messages['mailboxempty'] = 'Mappen är tom';
+$messages['mailboxempty'] = 'Katalogen är tom';
$messages['loading'] = 'Laddar...';
$messages['loadingdata'] = 'Laddar data...';
$messages['checkingmail'] = 'Letar efter nya meddelanden...';
@@ -34,25 +34,32 @@ $messages['sendingmessage'] = 'Skickar meddelande...';
$messages['messagesent'] = 'Meddelandet har skickats';
$messages['savingmessage'] = 'Sparar meddelande...';
$messages['messagesaved'] = 'Meddelande sparades till utkast';
-$messages['successfullysaved'] = 'Sparat';
+$messages['successfullysaved'] = 'Informationen har sparats';
$messages['addedsuccessfully'] = 'Kontakten har lagts till i adressboken';
$messages['contactexists'] = 'En kontakt med den här adressen finns redan';
-$messages['blockedimages'] = 'För att skydda dig är bilder blockerade.';
+$messages['blockedimages'] = 'Externt länkade bilder i meddelandet har blockerats.';
$messages['encryptedmessage'] = 'Meddelandet är krypterat och kan tyvärr inte visas.';
$messages['nocontactsfound'] = 'Inga kontakter hittades';
$messages['contactnotfound'] = 'Den efterfrågade kontanten hittades inte';
$messages['sendingfailed'] = 'Meddelandet kunde inte skickas';
-$messages['errorsaving'] = 'Ett fel uppstod när meddelandet sparades';
+$messages['senttooquickly'] = 'Vänta ytterligare $sec sekunder med att skicka meddelandet';
+$messages['errorsavingsent'] = 'Ett fel inträffade när det skickade meddelandet sparades';
+$messages['errorsaving'] = 'Meddelandet kunde inte sparads';
$messages['errormoving'] = 'Meddelandet kunde inte flyttas';
$messages['errordeleting'] = 'Meddelandet kunde inte raderas';
$messages['deletecontactconfirm'] = 'Vill du verkligen radera valda kontakter?';
$messages['deletemessagesconfirm'] = 'Vill du verkligen ta bort valda meddelanden?';
-$messages['deletefolderconfirm'] = 'Vill du verkligen radera den här mappen?';
-$messages['purgefolderconfirm'] = 'Vill du verkligen radera alla meddelanden i den här mappen?';
+$messages['deletefolderconfirm'] = 'Vill du verkligen radera den här katalogen?';
+$messages['purgefolderconfirm'] = 'Vill du verkligen radera alla meddelanden i den här katalogen?';
+$messages['foldercreating'] = 'Skapar katalog...';
+$messages['folderdeleting'] = 'Raderar katalog...';
+$messages['folderrenaming'] = 'Namnändrar katalog...';
+$messages['foldermoving'] = 'Flyttar katalog...';
$messages['formincomplete'] = 'Formuläret var inte ifyllt i sin helhet';
$messages['noemailwarning'] = 'Vänligen ange en giltig adress';
$messages['nonamewarning'] = 'Vänligen ange ett namn';
$messages['nopagesizewarning'] = 'Vänligen ange en sidstorlek';
+$messages['nosenderwarning'] = 'Vänligen ange en avsändaradress';
$messages['norecipientwarning'] = 'Vänligen ange minst en mottagare';
$messages['nosubjectwarning'] = 'Ãmnesfältet är tomt. Vill du lägga till nÃ¥got nu?';
$messages['nobodywarning'] = 'Skicka det här meddelandet utan text?';
@@ -65,7 +72,7 @@ $messages['searchnomatch'] = 'Sökningen returnerade inga träffar';
$messages['searching'] = 'Söker...';
$messages['checking'] = 'Kontrollerar...';
$messages['nospellerrors'] = 'Inget stavfel hittades';
-$messages['folderdeleted'] = 'Mappen raderades';
+$messages['folderdeleted'] = 'Katalogen raderades';
$messages['deletedsuccessfully'] = 'Lyckad borttagning';
$messages['converting'] = 'Tar bort formatering från meddelande...';
$messages['messageopenerror'] = 'Kunde inte ladda meddelande från servern';
@@ -74,11 +81,20 @@ $messages['filesizeerror'] = 'Den uppladdade filen överstiger maxstorleken $siz
$messages['copysuccess'] = 'Lyckad kopiering av $nr adresser';
$messages['copyerror'] = 'Kunde inte kopiera några adresser';
$messages['sourceisreadonly'] = 'Denna adresskälla är skrivskyddad';
-$messages['errorsavingcontact'] = 'Kunde inte spara kontakt-adressen';
+$messages['errorsavingcontact'] = 'Kunde inte spara kontaktadressen';
$messages['movingmessage'] = 'Flyttar meddelande...';
-$messages['receiptsent'] = 'Ett läskvitto har skickats';
-$messages['errorsendingreceipt'] = 'Kunde inte skicka läskvittot';
+$messages['receiptsent'] = 'Mottagarkvitto har skickats';
+$messages['errorsendingreceipt'] = 'Kunde inte skicka mottagarkvitto';
$messages['nodeletelastidentity'] = 'Du kan inte radera den här identiteten, det är din sista.';
-$messages['addsubfolderhint'] = 'Den här mappen kommer att skapas som en underkatalog till den valda';
+$messages['addsubfolderhint'] = 'Den här katalogen kommer att skapas som en underkatalog till den valda';
+$messages['forbiddencharacter'] = 'Katalognamnet innehåller otillåtna tecken';
+$messages['selectimportfile'] = 'Välj en fil att ladda upp';
+$messages['addresswriterror'] = 'Angiven adressbok är skrivskyddad';
+$messages['importwait'] = 'Importerar, var god vänta...';
+$messages['importerror'] = 'Importen misslyckades! Filen är inte i vCard-format.';
+$messages['importconfirm'] = 'Lyckad import av $inserted kontakter, $skipped dubbletter har ignorerats:$names
';
+$messages['opnotpermitted'] = 'Otillåten operation!';
+$messages['nofromaddress'] = 'Adressen saknas i den valda identiteten';
+$messages['editorwarning'] = 'Genom att växla till text-läge går formateringen förlorad. Vill du fortsätta?';
?>
\ No newline at end of file
diff --git a/program/localization/th_TH/labels.inc b/program/localization/th_TH/labels.inc
index 56e30b4..0d1a73f 100644
--- a/program/localization/th_TH/labels.inc
+++ b/program/localization/th_TH/labels.inc
@@ -6,7 +6,7 @@
| language/th_TH/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/th_TH/messages.inc b/program/localization/th_TH/messages.inc
index 07886ce..ceecc67 100644
--- a/program/localization/th_TH/messages.inc
+++ b/program/localization/th_TH/messages.inc
@@ -6,7 +6,7 @@
| language/th_TH/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/tr_TR/labels.inc b/program/localization/tr_TR/labels.inc
index 2abdf75..6212d4b 100644
--- a/program/localization/tr_TR/labels.inc
+++ b/program/localization/tr_TR/labels.inc
@@ -6,7 +6,7 @@
| language/tr/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Author: Gökdeniz KaradaÄ |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2194 2008-12-29 18:26:51Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/tr_TR/messages.inc b/program/localization/tr_TR/messages.inc
index f09cc42..bed3351 100644
--- a/program/localization/tr_TR/messages.inc
+++ b/program/localization/tr_TR/messages.inc
@@ -6,7 +6,7 @@
| language/tr/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Author: Gökdeniz KaradaÄ |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2184 2008-12-21 09:30:25Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/uk_UA/labels.inc b/program/localization/uk_UA/labels.inc
index 8269934..3484dcc 100644
--- a/program/localization/uk_UA/labels.inc
+++ b/program/localization/uk_UA/labels.inc
@@ -2,18 +2,18 @@
/*
- +-----------------------------------------------------------------------+
- | language/uk/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Natali Stasyuk |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| language/uk/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Natali Stasyuk |
++-----------------------------------------------------------------------+
- @version $Id$
+@version $Id$
*/
@@ -68,6 +68,30 @@ $labels['wednesday'] = 'СеÑеда';
$labels['thursday'] = 'ЧеÑвеÑ';
$labels['friday'] = 'Ð`ÑÑниÑÑ';
$labels['saturday'] = 'СÑбоÑа';
+$labels['jan'] = 'ÑÑÑ';
+$labels['feb'] = 'лÑÑ';
+$labels['mar'] = 'беÑ';
+$labels['apr'] = 'квÑÑ';
+$labels['may'] = 'ÑÑ';
+$labels['jun'] = 'ÑеÑ';
+$labels['jul'] = 'лип';
+$labels['aug'] = 'ÑеÑ';
+$labels['sep'] = 'веÑ';
+$labels['oct'] = 'жов';
+$labels['nov'] = 'лиÑ';
+$labels['dec'] = 'гÑ';
+$labels['longjan'] = 'ÑÑÑенÑ';
+$labels['longfeb'] = 'лÑÑий';
+$labels['longmar'] = 'беÑезенÑ';
+$labels['longapr'] = 'квÑÑенÑ';
+$labels['longmay'] = 'ÑÑавенÑ';
+$labels['longjun'] = 'ÑеÑвенÑ';
+$labels['longjul'] = 'липенÑ';
+$labels['longaug'] = 'ÑеÑпенÑ';
+$labels['longsep'] = 'веÑеÑенÑ';
+$labels['longoct'] = 'жовÑенÑ';
+$labels['longnov'] = 'лиÑÑопад';
+$labels['longdec'] = 'гÑÑденÑ';
$labels['today'] = 'СÑогоднÑ';
$labels['checkmail'] = 'ÐеÑевÑÑиÑи поÑÑÑ';
$labels['writenewmessage'] = 'Ðове повÑдомленнÑ';
@@ -87,10 +111,18 @@ $labels['lastmessage'] = 'ÐоказаÑи оÑÑÐ°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñдомленн
$labels['lastmessages'] = 'ÐÑÑÐ°Ð½Ð½Ñ ÑÑоÑÑнка повÑдомленÑ';
$labels['backtolist'] = 'Ðо пеÑелÑÐºÑ Ð¿Ð¾Ð²ÑдомленÑ';
$labels['viewsource'] = 'ÐиÑ
Ñдний ÑекÑÑ';
+$labels['markmessages'] = 'ÑкаÑÑваÑи повÑдомленнÑ';
+$labels['markread'] = 'Ñк пÑоÑиÑанÑ';
+$labels['markunread'] = 'Ñк непÑоÑиÑане';
+$labels['markflagged'] = 'Ñк познаÑенÑ';
+$labels['markunflagged'] = 'Ñк не познаÑенÑ';
$labels['select'] = 'ÐибÑаÑи';
$labels['all'] = 'ÐÑе';
$labels['none'] = 'ÐÑÑого';
$labels['unread'] = 'ÐепÑоÑиÑанÑ';
+$labels['flagged'] = 'пÑапоÑеÑÑ';
+$labels['unanswered'] = 'Ðез вÑдповÑдÑ';
+$labels['filter'] = 'ÑилÑÑеÑ';
$labels['compact'] = 'СÑиÑнÑÑи';
$labels['empty'] = 'СпÑÑÑоÑиÑи';
$labels['purge'] = 'ÐÑиÑÑиÑи';
@@ -99,6 +131,7 @@ $labels['unknown'] = 'невÑдомо';
$labels['unlimited'] = 'без обмеженнÑ';
$labels['quicksearch'] = 'Швидкий поÑÑк';
$labels['resetsearch'] = 'ÐÑиÑÑиÑи поÑÑк';
+$labels['openinextwin'] = 'ÐÑдкÑиÑи в Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑкнÑ';
$labels['compose'] = 'ÐапиÑаÑи повÑдомленнÑ';
$labels['savemessage'] = 'ÐбеÑегÑи ÑеÑнеÑкÑ';
$labels['sendmessage'] = 'ÐÑдÑÑлаÑи заÑаз';
@@ -119,11 +152,19 @@ $labels['high'] = 'ÐиÑокий';
$labels['highest'] = 'ÐайвиÑий';
$labels['nosubject'] = '(без Ñеми)';
$labels['showimages'] = 'ÐоказаÑи зобÑаженнÑ';
+$labels['alwaysshow'] = 'Ðавжди показÑваÑи зобÑÐ°Ð¶ÐµÐ½Ð½Ñ ';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'ÐвиÑайний ÑекÑÑ';
+$labels['savesentmessagein'] = 'збеÑегÑи в';
+$labels['dontsave'] = 'не збеÑÑгаÑи';
+$labels['maxuploadsize'] = 'макÑималÑний ÑозмÑÑ Ñайла';
$labels['addcc'] = 'ÐодаÑи Cc';
$labels['addbcc'] = 'ÐодаÑи Bcc';
$labels['addreplyto'] = 'ÐодаÑи Reply-To';
+$labels['mdnrequest'] = 'ÐÑдпÑавник ÑÑого повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿ÑоÑив повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñо пÑоÑиÑаннÑ. ÐÑдпÑавиÑи повÑдомленнÑ?';
+$labels['receiptread'] = 'ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñо пÑоÑиÑаннÑ';
+$labels['yourmessage'] = 'повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñо пÑоÑиÑÐ°Ð½Ð½Ñ Ð²Ð°Ñого повÑдомленнÑ';
+$labels['receiptnote'] = 'Це повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð·Ð½Ð°ÑÐ°Ñ ÑÑлÑки, Ñо повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±Ñло вÑдкÑиÑо одеÑжÑваÑем, Ñ Ð½Ðµ гаÑанÑÑÑ Ñого, Ñо воно бÑло пÑоÑиÑано';
$labels['name'] = 'ÐÑдобÑажÑване Ñм`Ñ';
$labels['firstname'] = 'Ðм`Ñ';
$labels['surname'] = 'ÐÑÑзвиÑе';
@@ -140,22 +181,30 @@ $labels['composeto'] = 'СÑвоÑиÑи повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸Ð±
$labels['contactsfromto'] = 'ÐонÑакÑи з $from по $to з $count';
$labels['print'] = 'ÐÑÑкÑваÑи';
$labels['export'] = 'ÐкÑпоÑÑÑваÑи';
+$labels['exportvcards'] = 'ÐкÑпоÑÑÑваÑи конÑакÑи Ñ ÑоÑÐ¼Ð°Ñ vcard';
$labels['previouspage'] = 'ÐоказаÑи попеÑеднÑй';
$labels['firstpage'] = 'ÐоказаÑи пеÑÑий';
$labels['nextpage'] = 'ÐоказаÑи наÑÑÑпний';
$labels['lastpage'] = 'ÐоказаÑи оÑÑаннÑй';
$labels['groups'] = 'ÐÑÑпи';
$labels['personaladrbook'] = 'ÐеÑÑоналÑÐ½Ñ Ð°Ð´ÑеÑи';
+$labels['import'] = 'ÑмпоÑÑ';
+$labels['importcontacts'] = 'ÐмпоÑÑÑваÑи конÑакÑи';
+$labels['importfromfile'] = 'ÐмпоÑÑÑваÑи з ÑайлÑ';
+$labels['importreplace'] = 'ÐамÑниÑи вÑÑ Ð·Ð°Ð¿Ð¸ÑÐ½Ñ ÐºÐ½Ð¸Ð¶ÐºÑ';
+$labels['importtext'] = 'Ðи можеÑе заванÑажиÑи конÑакÑи з ÑÑнÑÑÑÐ¾Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸. Ðа даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿ÑдÑÑимÑÑÑÑÑÑ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñ ÑоÑмаÑÑ vcard';
+$labels['done'] = 'ÐавеÑÑене';
$labels['settingsfor'] = 'ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ';
-$labels['preferences'] = 'УподобаннÑ';
-$labels['userpreferences'] = 'Ð£Ð¿Ð¾Ð´Ð¾Ð±Ð°Ð½Ð½Ñ ÐºÐ¾ÑиÑÑÑваÑа';
-$labels['editpreferences'] = 'РедагÑваÑи ÑÐ¿Ð¾Ð´Ð¾Ð±Ð°Ð½Ð½Ñ ÐºÐ¾ÑиÑÑÑваÑа';
+$labels['preferences'] = 'влаÑÑивоÑÑÑ';
+$labels['userpreferences'] = 'влаÑÑивоÑÑÑ ÐºÐ¾ÑиÑÑÑваÑа';
+$labels['editpreferences'] = 'РедагÑваÑи влаÑÑивоÑÑÑкоÑиÑÑÑваÑа';
$labels['identities'] = 'ÐÑоÑÑлÑ';
$labels['manageidentities'] = 'ÐеÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑоÑÑлÑми';
$labels['newidentity'] = 'Ðовий пÑоÑÑлÑ';
$labels['newitem'] = 'Ðовий';
$labels['edititem'] = 'ÐÑавка';
$labels['setdefault'] = 'ÐикоÑиÑÑовÑваÑи Ñипово';
+$labels['autodetect'] = 'ÐизнаÑаÑи авÑомаÑиÑно';
$labels['language'] = 'Ðова';
$labels['timezone'] = 'ЧаÑовий поÑÑ';
$labels['pagesize'] = 'Ð ÑдкÑв на ÑÑоÑÑнÑÑ';
@@ -164,21 +213,55 @@ $labels['dstactive'] = 'ÐÑÑнÑй/зимовий ÑаÑ';
$labels['htmleditor'] = 'СÑвоÑÑваÑи повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð² HTML';
$labels['htmlsignature'] = 'ÐÑÐ´Ð¿Ð¸Ñ Ð² HTML';
$labels['previewpane'] = 'ÐоказаÑи Ð¿Ð°Ð½ÐµÐ»Ñ Ð¿ÐµÑеглÑдÑ';
+$labels['skin'] = 'ÑÑÐ¸Ð»Ñ ÑнÑеÑÑейÑÑ';
+$labels['logoutclear'] = 'видалиÑи каÑÐ·Ð¸Ð½Ñ ';
+$labels['logoutcompact'] = 'ÑÑиÑнÑÑи вÑ
ÑÐ´Ð½Ñ Ð´Ð°Ð½Ñ';
+$labels['uisettings'] = 'ÑнÑеÑÑÐµÐ¹Ñ ÐºÐ¾ÑиÑÑÑваÑа';
+$labels['serversettings'] = 'наÑÑÑоÑÐ²Ð°Ð½Ð½Ñ ÑеÑвеÑа';
+$labels['mailboxview'] = 'Ðид ÑнÑеÑÑейÑÑ';
+$labels['mdnrequests'] = 'ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñо пÑоÑиÑаннÑ';
+$labels['askuser'] = 'запиÑаÑи пеÑед вÑдпÑавленнÑм';
+$labels['autosend'] = 'авÑомаÑиÑно вÑдпÑавлÑÑи';
+$labels['ignore'] = 'ÑгноÑÑваÑи';
+$labels['readwhendeleted'] = 'ÐознаÑаÑи Ñк пÑоÑиÑане пÑи видаленнÑ';
+$labels['flagfordeletion'] = 'ÐознаÑаÑи Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¼ÑÑÑÑ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ';
+$labels['skipdeleted'] = 'Ðе показÑваÑи Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²ÑдомленнÑ';
+$labels['showremoteimages'] = 'ÐоказÑваÑи Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð¾Ð±ÑаженнÑ';
+$labels['fromknownsenders'] = 'вÑд вÑдомиÑ
вÑдпÑавникÑв';
+$labels['always'] = 'завжди';
+$labels['showinlineimages'] = 'ÐоказÑваÑи Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ñ Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð²Ð½Ð¸Ð·Ñ Ð¿Ð¾Ð²ÑдомленнÑ';
$labels['autosavedraft'] = 'ÐвÑозбеÑÐµÐ¶ÐµÐ½Ð½Ñ ÑеÑнеÑки';
$labels['everynminutes'] = 'ÐºÐ¾Ð¶Ð½Ñ $n Ñ
вилин';
+$labels['keepaliveevery'] = 'ÐºÐ¾Ð¶Ð½Ñ $n Ñ
вилин';
+$labels['keepalive'] = 'ÐеÑевÑÑка новиÑ
повÑдомленÑ';
$labels['never'] = 'нÑколи';
-$labels['folder'] = 'Тека';
-$labels['folders'] = 'Теки';
-$labels['foldername'] = 'Ðазва Ñеки';
+$labels['messagesdisplaying'] = 'ÐÑдобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²ÑдомленÑ';
+$labels['messagescomposition'] = 'СÑвоÑÐµÐ½Ð½Ñ Ð¿Ð¾Ð²ÑдомленÑ';
+$labels['mimeparamfolding'] = 'Ðмена вкладенÑ';
+$labels['2231folding'] = 'Ðовний RFC 2231 (ÑÑлÑки Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑнÑÑ
пÑогÑам)';
+$labels['miscfolding'] = 'RFC 2047/2231 (найбÑлÑÑа ÑÑмÑÑнÑÑÑÑ)';
+$labels['2047folding'] = 'RFC 2047 (Ð´Ð»Ñ ÑÑаÑиÑ
пÑогÑам)';
+$labels['advancedoptions'] = 'ÐодаÑÐºÐ¾Ð²Ñ Ð½Ð°ÑÑÑоÑваннÑ';
+$labels['focusonnewmessage'] = 'ФокÑÑÑваÑи вÑкно бÑаÑзеÑа пÑи Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð¿Ð¾Ð²ÑдомленнÑ';
+$labels['checkallfolders'] = 'ÐеÑевÑÑÑÑи Ð½Ð¾Ð²Ñ Ð¿Ð¾Ð²ÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ Ð²ÑÑÑ
папкаÑ
';
+$labels['folder'] = 'папка';
+$labels['folders'] = 'папки';
+$labels['foldername'] = 'назва папки';
$labels['subscribed'] = 'ÐÑдпиÑанÑ';
+$labels['messagecount'] = 'повÑдомленнÑ';
$labels['create'] = 'СÑвоÑиÑи';
$labels['createfolder'] = 'СÑвоÑиÑи Ð½Ð¾Ð²Ñ ÑекÑ';
$labels['rename'] = 'ÐеÑейменÑваÑи';
$labels['renamefolder'] = 'ÐеÑейменÑваÑи ÑекÑ';
$labels['deletefolder'] = 'ÐидалиÑи ÑекÑ';
$labels['managefolders'] = 'ÐеÑÑÐ²Ð°Ð½Ð½Ñ Ñеками';
+$labels['specialfolders'] = 'ÐÑÐ¾Ð±Ð»Ð¸Ð²Ñ Ð¿Ð°Ð¿ÐºÐ¸';
$labels['sortby'] = 'ÐÑдÑоÑÑÑваÑи за';
$labels['sortasc'] = 'СоÑÑÑваÑи за зÑоÑÑаннÑм';
$labels['sortdesc'] = 'СоÑÑÑваÑи за ÑпаданнÑм';
+$labels['B'] = 'Ð';
+$labels['KB'] = 'ÐÐ';
+$labels['MB'] = 'ÐÐ';
+$labels['GB'] = 'ÐÐ';
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/uk_UA/messages.inc b/program/localization/uk_UA/messages.inc
index 6abef04..fa39a3d 100644
--- a/program/localization/uk_UA/messages.inc
+++ b/program/localization/uk_UA/messages.inc
@@ -2,18 +2,18 @@
/*
- +-----------------------------------------------------------------------+
- | language/uk/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Natali Stasyuk |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| language/uk/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Natali Stasyuk |
++-----------------------------------------------------------------------+
- @version $Id$
+@version $Id$
*/
@@ -40,6 +40,8 @@ $messages['encryptedmessage'] = 'ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑиÑÑовано
$messages['nocontactsfound'] = 'ÐонÑакÑи не знайденÑ';
$messages['contactnotfound'] = 'ÐапиÑаний конÑÐ°ÐºÑ Ð½Ðµ знайдений';
$messages['sendingfailed'] = 'Ðе вдалоÑÑ Ð²ÑдпÑавиÑи повÑдомленнÑ';
+$messages['senttooquickly'] = 'Ðи Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð¿Ð¾ÑекаÑи $sec Ñек. Ð´Ð»Ñ Ð²ÑдпÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²ÑдомленнÑ';
+$messages['errorsavingsent'] = 'ÐÑдбÑлаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° пÑи збеÑÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÑдпÑавленого повÑдомленнÑ';
$messages['errorsaving'] = 'У пÑоÑеÑÑ Ð·Ð±ÐµÑÐµÐ¶ÐµÐ½Ð½Ñ ÑÑапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°';
$messages['errormoving'] = 'Ðе вдалоÑÑ Ð¿ÐµÑемÑÑÑиÑи повÑдомленнÑ';
$messages['errordeleting'] = 'Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñи повÑдомленнÑ';
@@ -47,10 +49,15 @@ $messages['deletecontactconfirm'] = 'Ðи дÑйÑÑно бажаÑÑе вида
$messages['deletemessagesconfirm'] = 'Ðи дÑйÑÑно бажаÑÑе видалиÑи вибÑÐ°Ð½Ñ Ð¿Ð¾Ð²ÑдомленнÑ?';
$messages['deletefolderconfirm'] = 'Ðи дÑйÑÑно бажаÑÑе видалиÑи ÑÑ ÑекÑ?';
$messages['purgefolderconfirm'] = 'Ðи дÑйÑÑно бажаÑÑе видалиÑи вÑÑ Ð¿Ð¾Ð²ÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ ÑÑй ÑеÑÑ?';
+$messages['foldercreating'] = 'СÑвоÑÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸';
+$messages['folderdeleting'] = 'ÐидалиÑи папкÑ';
+$messages['folderrenaming'] = 'ÐеÑейменÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸';
+$messages['foldermoving'] = 'ÐеÑемÑÑÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸';
$messages['formincomplete'] = 'ÐÐ°Ð¿Ð¾Ð²Ð½ÐµÐ½Ñ Ð½Ðµ ÑÑÑ Ð¿Ð¾Ð»Ñ';
$messages['noemailwarning'] = 'ÐÑÐ´Ñ Ð»Ð°Ñка, введÑÑÑ ÐºÐ¾ÑекÑÐ½Ñ Ð°Ð´ÑеÑÑ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð¿Ð¾ÑÑи';
$messages['nonamewarning'] = 'ÐÑÐ´Ñ Ð»Ð°Ñка, введÑÑÑ Ñм`Ñ';
$messages['nopagesizewarning'] = 'ÐÑÐ´Ñ Ð»Ð°Ñка, введÑÑÑ ÑозмÑÑ ÑÑоÑÑнки';
+$messages['nosenderwarning'] = 'ÐÑÐ´Ñ Ð»Ð°Ñка, ÑведÑÑÑ Ð°Ð´ÑеÑÑ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð¿Ð¾ÑÑи вÑдпÑавника';
$messages['norecipientwarning'] = 'ÐÑÐ´Ñ Ð»Ð°Ñка, введÑÑÑ Ñм`Ñ Ð¾ÑÑимÑваÑа';
$messages['nosubjectwarning'] = 'Ðоле "Тема" не заповнено. ÐажаÑÑе заповниÑи його заÑаз?';
$messages['nobodywarning'] = 'ÐÑдпÑавиÑи повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÐµÐ· ÑекÑÑÑ?';
@@ -74,5 +81,18 @@ $messages['copyerror'] = 'Ðеможливо ÑкопÑÑваÑи адÑеÑÑ';
$messages['sourceisreadonly'] = 'Ðане джеÑело адÑÐµÑ Ð»Ð¸Ñе Ð´Ð»Ñ ÑиÑаннÑ';
$messages['errorsavingcontact'] = 'Ðеможливо збеÑегÑи адÑеÑÑ ÐºÐ¾Ð½ÑакÑа';
$messages['movingmessage'] = 'ÐеÑемÑÑÑÑ Ð¿Ð¾Ð²ÑдомленнÑ...';
+$messages['receiptsent'] = 'ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñо пÑоÑиÑÐ°Ð½Ð½Ñ Ð²ÑдпÑавлене';
+$messages['errorsendingreceipt'] = 'ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñо пÑоÑиÑÐ°Ð½Ð½Ñ Ð½Ðµ вÑдпÑавлене';
+$messages['nodeletelastidentity'] = 'ви не можеÑе вилÑÑиÑи Ñей пÑоÑÑлÑ, вÑн Ñ Ð²Ð°Ñ Ð¾ÑÑаннÑй';
+$messages['addsubfolderhint'] = 'Ð¦Ñ Ð¿Ð°Ð¿ÐºÐ° бÑде ÑÑвоÑена Ñк пÑдпапка в поÑоÑнÑй папÑÑ';
+$messages['forbiddencharacter'] = 'Ðм\'Ñ Ð¿Ð°Ð¿ÐºÐ¸ мÑÑÑиÑÑ Ð½ÐµÐ¿ÑипÑÑÑÐ¸Ð¼Ñ Ñимволи';
+$messages['selectimportfile'] = 'ÐибеÑÑÑÑ Ñайл Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½ÑаженнÑ';
+$messages['addresswriterror'] = 'ÐбÑана адÑеÑна книга недоÑÑÑпна Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑ';
+$messages['importwait'] = 'ÐмпоÑÑÑваннÑ, бÑÐ´Ñ Ð»Ð°Ñка, поÑекайÑе';
+$messages['importerror'] = 'ÐмпоÑÑ Ð·Ð°Ð²ÐµÑÑивÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾! ÐаванÑажений Ñайл не Ñ Ð¿ÑавилÑним Ñайлом vcard';
+$messages['importconfirm'] = 'УÑпÑÑно ÑмпоÑÑованиÑ
$inserted конÑакÑÑв, пÑопÑÑене $skipped ÑÑнÑÑÑиÑ
';
+$messages['opnotpermitted'] = 'ÐÑÑ Ð·Ð°Ð±Ð¾Ñонена!';
+$messages['nofromaddress'] = 'РобÑÐ°Ð½Ð¾Ð¼Ñ Ð¿ÑоÑÑÐ»Ñ Ð½Ðµ виÑÑаÑÐ°Ñ Ð°Ð´ÑеÑи елекÑÑÐ¾Ð½Ð½Ð¾Ñ Ð¿Ð¾ÑÑи';
+$messages['editorwarning'] = 'ÐÑи пеÑÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð² ÑедакÑÐ¾Ñ Ð¿ÑоÑÑого ÑекÑÑÑ Ð²Ñе ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ Ð±Ñде загÑблено. ÐÑодовжиÑи?';
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/vi_VN/labels.inc b/program/localization/vi_VN/labels.inc
index e4335ec..ca4b573 100644
--- a/program/localization/vi_VN/labels.inc
+++ b/program/localization/vi_VN/labels.inc
@@ -6,7 +6,7 @@
| language/vn/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/vi_VN/messages.inc b/program/localization/vi_VN/messages.inc
index 9cf2fdb..69b4dfd 100644
--- a/program/localization/vi_VN/messages.inc
+++ b/program/localization/vi_VN/messages.inc
@@ -6,7 +6,7 @@
| language/vn/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
diff --git a/program/localization/zh_CN/labels.inc b/program/localization/zh_CN/labels.inc
index 623e8b7..630b25c 100644
--- a/program/localization/zh_CN/labels.inc
+++ b/program/localization/zh_CN/labels.inc
@@ -6,7 +6,7 @@
| localization/zh_CN/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Zhang Huang bin |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2151 2008-12-14 21:37:19Z yllar $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/zh_CN/messages.inc b/program/localization/zh_CN/messages.inc
index b7b1718..c3c65c0 100644
--- a/program/localization/zh_CN/messages.inc
+++ b/program/localization/zh_CN/messages.inc
@@ -6,7 +6,7 @@
| localization/zh_CN/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -14,7 +14,7 @@
| Zhang Huang bin |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 2136 2008-12-08 20:44:46Z yllar $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/zh_TW/labels.inc b/program/localization/zh_TW/labels.inc
index b89cf7b..bbfcd9d 100644
--- a/program/localization/zh_TW/labels.inc
+++ b/program/localization/zh_TW/labels.inc
@@ -6,7 +6,7 @@
| localization/zh_TW/labels.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Ting-Hung Chiu |
+-----------------------------------------------------------------------+
-@version $Id: labels.inc 2115 2008-12-04 10:21:34Z alec $
+@version $Id: labels.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/localization/zh_TW/messages.inc b/program/localization/zh_TW/messages.inc
index 5e71947..6238e74 100644
--- a/program/localization/zh_TW/messages.inc
+++ b/program/localization/zh_TW/messages.inc
@@ -6,7 +6,7 @@
| localization/zh_TW/messages.inc |
| |
| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Ting-Hung Chiu |
+-----------------------------------------------------------------------+
-@version $Id: messages.inc 1886 2008-09-24 08:41:27Z tomekp $
+@version $Id: messages.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/steps/addressbook/export.inc b/program/steps/addressbook/export.inc
index 494fc23..d49fbe9 100644
--- a/program/steps/addressbook/export.inc
+++ b/program/steps/addressbook/export.inc
@@ -5,7 +5,7 @@
| program/steps/addressbook/export.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/steps/addressbook/import.inc b/program/steps/addressbook/import.inc
index 5949097..8140a85 100644
--- a/program/steps/addressbook/import.inc
+++ b/program/steps/addressbook/import.inc
@@ -5,7 +5,7 @@
| program/steps/addressbook/import.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
diff --git a/program/steps/addressbook/show.inc b/program/steps/addressbook/show.inc
index fd0c1eb..2f968fe 100644
--- a/program/steps/addressbook/show.inc
+++ b/program/steps/addressbook/show.inc
@@ -5,7 +5,7 @@
| program/steps/addressbook/show.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: show.inc 1615 2008-07-29 12:32:19Z thomasb $
+ $Id: show.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/steps/error.inc b/program/steps/error.inc
index 0200d2a..401e1d2 100644
--- a/program/steps/error.inc
+++ b/program/steps/error.inc
@@ -5,7 +5,7 @@
| program/steps/error.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: error.inc 1946 2008-10-06 18:59:22Z alec $
+ $Id: error.inc 2237 2009-01-17 01:55:39Z till $
*/
diff --git a/program/steps/mail/attachments.inc b/program/steps/mail/attachments.inc
index a43b22e..b0a2a7e 100644
--- a/program/steps/mail/attachments.inc
+++ b/program/steps/mail/attachments.inc
@@ -5,7 +5,7 @@
| program/steps/mail/attachments.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -77,7 +77,7 @@ if (is_array($_FILES['_attachments']['tmp_name'])) {
$id = count($_SESSION['compose']['attachments']);
$_SESSION['compose']['attachments'][] = array(
'name' => $_FILES['_attachments']['name'][$i],
- 'mimetype' => rc_mime_content_type($tmpfname, $_FILES['_attachments']['type'][$i]),
+ 'mimetype' => rc_mime_content_type($tmpfname, $_FILES['_attachments']['name'][$i], $_FILES['_attachments']['type'][$i]),
'path' => $tmpfname,
);
diff --git a/program/steps/mail/autocomplete.inc b/program/steps/mail/autocomplete.inc
index fe011de..26acc88 100644
--- a/program/steps/mail/autocomplete.inc
+++ b/program/steps/mail/autocomplete.inc
@@ -5,7 +5,7 @@
| program/steps/mail/autocomplete.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2008, RoundCube Dev Team |
+ | Copyright (C) 2008-2009, RoundCube Dev Team |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -21,10 +21,11 @@
$MAXNUM = 15; // same limit as in app.js
$contacts = array();
+$book_types = (array) $RCMAIL->config->get('autocomplete_addressbooks', 'sql');
-if ($search = get_input_value('_search', RCUBE_INPUT_POST)) {
+if ($book_types && $search = get_input_value('_search', RCUBE_INPUT_POST)) {
- foreach ($RCMAIL->config->get('autocomplete_addressbooks', array('sql')) as $id) {
+ foreach ($book_types as $id) {
$abook = $RCMAIL->get_address_book($id);
$abook->set_pagesize($MAXNUM);
@@ -43,7 +44,7 @@ if ($search = get_input_value('_search', RCUBE_INPUT_POST)) {
sort($contacts);
}
-$OUTPUT->command('ksearch_query_results', $contacts);
+$OUTPUT->command('ksearch_query_results', $contacts, $search);
$OUTPUT->send();
?>
\ No newline at end of file
diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc
index 35c15a2..54e1702 100644
--- a/program/steps/mail/check_recent.inc
+++ b/program/steps/mail/check_recent.inc
@@ -5,7 +5,7 @@
| program/steps/mail/check_recent.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -26,40 +26,48 @@ foreach ($a_mailboxes as $mbox_name) {
if ($mbox_name == $IMAP->get_mailbox_name()) {
if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE)) {
// refresh saved search set
- if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set)
+ if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && isset($_SESSION['search'][$search_request])) {
$_SESSION['search'][$search_request] = $IMAP->refresh_search();
-
- $count_all = $IMAP->messagecount(NULL, 'ALL', TRUE);
+ $all_count = $IMAP->messagecount();
+ } else {
+ $all_count = $IMAP->messagecount(NULL, 'ALL', TRUE);
+ }
+
$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
- $OUTPUT->set_env('messagecount', $IMAP->messagecount());
+ $OUTPUT->set_env('messagecount', $all_count);
$OUTPUT->set_env('pagesize', $IMAP->page_size);
- $OUTPUT->set_env('pagecount', ceil($IMAP->messagecount()/$IMAP->page_size));
+ $OUTPUT->set_env('pagecount', ceil($all_count/$IMAP->page_size));
$OUTPUT->command('set_unread_count', $mbox_name, $unread_count, ($mbox_name == 'INBOX'));
- $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
- $OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));
+ $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($all_count));
if (rcmail::get_instance()->config->get('focus_on_new_message',true))
$OUTPUT->command('new_message_focus');
- // add new message headers to list
- $a_headers = array();
- for ($i=$recent_count, $id=$count_all-$recent_count+1; $i>0; $i--, $id++)
- {
- // skip message if it does not match the current search
- if (!$IMAP->in_searchset($id))
- continue;
-
- $header = $IMAP->get_headers($id, NULL, FALSE);
- if ($header->recent)
- $a_headers[] = $header;
- }
+ if (!empty($_GET['_quota']))
+ $OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));
+
+ // "No-list" mode, don't get messages
+ if (empty($_GET['_list']))
+ continue;
- rcmail_js_message_list($a_headers, TRUE);
+ // use SEARCH/SORT to find recent messages
+ $search_str = 'RECENT';
+ if ($search_request)
+ $search_str .= ' '.$IMAP->search_string;
+
+ $result = $IMAP->search($mbox_name, $search_str, NULL, 'date');
+
+ if ($result) {
+ // get the headers
+ $result_h = $IMAP->list_headers($mbox_name, 1, 'date', 'DESC');
+ // add to the list
+ rcmail_js_message_list($result_h, TRUE);
+ }
}
}
- else if ($IMAP->messagecount($mbox_name, 'RECENT', $check_all)) {
- $OUTPUT->command('set_unread_count', $mbox_name, $IMAP->messagecount($mbox_name, 'UNSEEN', $check_all));
+ else if ($unseen = $IMAP->messagecount($mbox_name, 'UNSEEN', $check_all)) {
+ $OUTPUT->command('set_unread_count', $mbox_name, $unseen);
}
}
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 03202d7..97ba5d4 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -5,7 +5,7 @@
| program/steps/mail/compose.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,7 +15,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: compose.inc 2161 2008-12-16 17:01:50Z thomasb $
+ $Id: compose.inc 2301 2009-02-18 19:15:36Z alec $
*/
@@ -381,16 +381,6 @@ function rcmail_compose_body($attrib)
// load draft message body
else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
$body = rcmail_create_draft_body($body, $isHtml);
-
- if ($isHtml) {
- // replace cid with href in inline images links
- foreach ((array)$_SESSION['compose']['attachments'] as $pid => $attachment) {
- if ($attachment['content_id']) {
- $body = str_replace('cid:'. $attachment['content_id'],
- $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$pid, $body);
- }
- }
- }
}
else if (!empty($_SESSION['compose']['param']['_body']))
{
@@ -506,13 +496,19 @@ function rcmail_create_reply_body($body, $bodyIsHtml)
}
else
{
+ // save inline images to files
+ $cid_map = rcmail_write_inline_attachments($MESSAGE);
+ // set is_safe flag (we need this for html body washing)
+ rcmail_check_safe($MESSAGE);
+ // clean up html tags
+ $body = rcmail_wash_html($body, array('safe' => $MESSAGE->is_safe), $cid_map);
+
+ // build reply (quote content)
$prefix = sprintf("On %s, %s wrote:
\n",
$MESSAGE->headers->date,
htmlspecialchars(Q($MESSAGE->get_header('from'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset()));
$prefix .= '';
$suffix = "
";
-
- rcmail_write_inline_attachments($MESSAGE);
}
return $prefix.$body.$suffix;
@@ -523,6 +519,10 @@ function rcmail_create_forward_body($body, $bodyIsHtml)
{
global $IMAP, $MESSAGE, $OUTPUT;
+ // add attachments
+ if (!isset($_SESSION['compose']['forward_attachments']) && is_array($MESSAGE->mime_parts))
+ $cid_map = rcmail_write_compose_attachments($MESSAGE, $bodyIsHtml);
+
if (!$bodyIsHtml)
{
$prefix = "\n\n\n-------- Original Message --------\n";
@@ -536,6 +536,11 @@ function rcmail_create_forward_body($body, $bodyIsHtml)
}
else
{
+ // set is_safe flag (we need this for html body washing)
+ rcmail_check_safe($MESSAGE);
+ // clean up html tags
+ $body = rcmail_wash_html($body, array('safe' => $MESSAGE->is_safe), $cid_map);
+
$prefix = sprintf(
"
-------- Original Message --------" .
"" .
@@ -554,10 +559,6 @@ function rcmail_create_forward_body($body, $bodyIsHtml)
$prefix .= "
";
}
-
- // add attachments
- if (!isset($_SESSION['compose']['forward_attachments']) && is_array($MESSAGE->mime_parts))
- rcmail_write_compose_attachments($MESSAGE, $bodyIsHtml);
return $prefix.$body;
}
@@ -565,7 +566,7 @@ function rcmail_create_forward_body($body, $bodyIsHtml)
function rcmail_create_draft_body($body, $bodyIsHtml)
{
- global $MESSAGE;
+ global $MESSAGE, $OUTPUT;
/**
* add attachments
@@ -574,39 +575,67 @@ function rcmail_create_draft_body($body, $bodyIsHtml)
if (!isset($_SESSION['compose']['forward_attachments'])
&& is_array($MESSAGE->mime_parts)
&& count($MESSAGE->mime_parts) > 0)
- rcmail_write_compose_attachments($MESSAGE, $bodyIsHtml);
+ {
+ $cid_map = rcmail_write_compose_attachments($MESSAGE, $bodyIsHtml);
+ // replace cid with href in inline images links
+ if ($cid_map)
+ $body = str_replace(array_keys($cid_map), array_values($cid_map), $body);
+ }
+
return $body;
}
function rcmail_write_compose_attachments(&$message, $bodyIsHtml)
{
+ global $OUTPUT;
+
+ $cid_map = array();
+ $id = 0;
+
foreach ((array)$message->mime_parts as $pid => $part)
{
if (($part->ctype_primary != 'message' || !$bodyIsHtml) &&
($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id']
|| (empty($part->disposition) && $part->filename)))
{
- if ($attachment = rcmail_save_attachment($message, $pid))
- $_SESSION['compose']['attachments'][] = $attachment;
+ if ($attachment = rcmail_save_attachment($message, $pid)) {
+ $_SESSION['compose']['attachments'][$id] = $attachment;
+ if ($bodyIsHtml && $part->filename && $part->content_id) {
+ $cid_map['cid:'.$part->content_id] =
+ $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$id;
+ }
+ $id++;
+ }
}
}
$_SESSION['compose']['forward_attachments'] = true;
+
+ return $cid_map;
}
function rcmail_write_inline_attachments(&$message)
{
- foreach ((array)$message->mime_parts as $pid => $part)
- {
- if ($part->content_id && $part->filename)
- {
- if ($attachment = rcmail_save_attachment($message, $pid))
- $_SESSION['compose']['attachments'][] = $attachment;
+ global $OUTPUT;
+
+ $cid_map = array();
+ $id = 0;
+
+ foreach ((array)$message->mime_parts as $pid => $part) {
+ if ($part->content_id && $part->filename) {
+ if ($attachment = rcmail_save_attachment($message, $pid)) {
+ $_SESSION['compose']['attachments'][$id] = $attachment;
+ $cid_map['cid:'.$part->content_id] =
+ $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$id;
+ $id++;
+ }
}
}
+
+ return $cid_map;
}
function rcmail_save_attachment(&$message, $pid)
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index fdcd470..d38306e 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -5,7 +5,7 @@
| program/steps/mail/func.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -15,14 +15,13 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: func.inc 2197 2008-12-30 13:30:20Z thomasb $
+ $Id: func.inc 2324 2009-03-02 17:34:18Z thomasb $
*/
-require_once('lib/enriched.inc');
require_once('include/rcube_smtp.inc');
-$EMAIL_ADDRESS_PATTERN = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/i';
+$EMAIL_ADDRESS_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})';
// actions that do not require imap connection
$NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment');
@@ -295,8 +294,7 @@ function rcmail_message_list($attrib)
$out .= sprintf("%s | \n", $message_icon ? sprintf($image_tag, $skin_path, $message_icon, '') : '');
- if (!empty($header->charset))
- $IMAP->set_charset($header->charset);
+ $IMAP->set_charset(!empty($header->charset) ? $header->charset : $CONFIG['default_charset']);
// format each col
foreach ($a_show_cols as $col)
@@ -404,8 +402,7 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE)
if (empty($header))
continue;
- if (!empty($header->charset))
- $IMAP->set_charset($header->charset);
+ $IMAP->set_charset(!empty($header->charset) ? $header->charset : $CONFIG['default_charset']);
// remove 'attachment' and 'flag' columns, we don't need them here
if(($key = array_search('attachment', $a_show_cols)) !== FALSE)
@@ -613,22 +610,128 @@ function rcmail_get_mailbox_name_text()
return rcmail_localize_foldername($RCMAIL->imap->get_mailbox_name());
}
+/**
+ * Sets message is_safe flag according to 'show_images' option value
+ *
+ * @param object rcube_message Message
+ */
+function rcmail_check_safe(&$message)
+{
+ global $RCMAIL;
+
+ $show_images = $RCMAIL->config->get('show_images');
+ if (!$message->is_safe
+ && !empty($show_images)
+ && $message->has_html_part())
+ {
+ switch($show_images) {
+ case '1': // known senders only
+ $CONTACTS = new rcube_contacts($RCMAIL->db, $_SESSION['user_id']);
+ if ($CONTACTS->search('email', $message->sender['mailto'], true, false)->count) {
+ $message->set_safe(true);
+ }
+ break;
+ case '2': // always
+ $message->set_safe(true);
+ break;
+ }
+ }
+}
+
+/**
+ * Cleans up the given message HTML Body (for displaying)
+ *
+ * @param string HTML
+ * @param array Display parameters
+ * @param array CID map replaces (inline images)
+ * @return string Clean HTML
+ */
+function rcmail_wash_html($html, $p = array(), $cid_replaces)
+{
+ global $REMOTE_OBJECTS;
+
+ $p += array('safe' => false, 'inline_html' => true);
+
+ // special replacements (not properly handled by washtml class)
+ $html_search = array(
+ '/(<\/nobr>)(\s+)()/i', // space(s) between
+ '/(<[\/]*st1:[^>]+>)/i', // Microsoft's Smart Tags
+ '/<\/?rte_text>/i', // Rich Text Editor tags (#1485647)
+ '/.*<\/title>/i', // PHP bug #32547 workaround: remove title tag
+ '/]*>/im', // malformed html: remove html tags (#1485139)
+ '/<\/html>/i', // malformed html: remove html tags (#1485139)
+ '/^[\xFE\xFF\xBB\xBF\x00]+((?:<\!doctype|\ change charset specification in HTML accordingly
+ $charset_pattern = '/(\s+content=[\'"]?\w+\/\w+;\s*charset)=([a-z0-9-_]+)/i';
+ if (preg_match($charset_pattern, $html)) {
+ $html = preg_replace($charset_pattern, '\\1='.RCMAIL_CHARSET, $html);
+ }
+ else {
+ // add head for malformed messages, washtml cannot work without that
+ if (!preg_match('/]*>(.*)<\/head>/Uims', $html))
+ $html = ''. $html;
+ $html = substr_replace($html, '', intval(stripos($html, '')+6), 0);
+ }
+
+ // turn relative into absolute urls
+ $html = rcmail_resolve_base($html);
+
+ // clean HTML with washhtml by Frederic Motte
+ $wash_opts = array(
+ 'show_washed' => false,
+ 'allow_remote' => $p['safe'],
+ 'blocked_src' => "./program/blocked.gif",
+ 'charset' => RCMAIL_CHARSET,
+ 'cid_map' => $cid_replaces,
+ 'html_elements' => array('body'),
+ );
+
+ if (!$p['inline_html']) {
+ $wash_opts['html_elements'] = array('html','head','title','body');
+ }
+ if ($p['safe']) {
+ $wash_opts['html_elements'][] = 'link';
+ $wash_opts['html_attribs'] = array('rel','type');
+ }
+
+ $washer = new washtml($wash_opts);
+ $washer->add_callback('form', 'rcmail_washtml_callback');
+
+ if ($p['safe']) { // allow CSS styles, will be sanitized by rcmail_washtml_callback()
+ $washer->add_callback('style', 'rcmail_washtml_callback');
+ }
+
+ $html = $washer->wash($html);
+ $REMOTE_OBJECTS = $washer->extlinks;
+
+ return $html;
+}
+
/**
* Convert the given message part to proper HTML
* which can be displayed the message view
*
* @param object rcube_message_part Message part
- * @param bool True if external objects (ie. images ) are allowed
- * @param bool True if part should be converted to plaintext
+ * @param array Display parameters array
* @return string Formatted HTML string
*/
function rcmail_print_body($part, $p = array())
{
- global $REMOTE_OBJECTS;
-
$p += array('safe' => false, 'plain' => false, 'inline_html' => true);
-
+
// convert html to text/plain
if ($part->ctype_secondary == 'html' && $p['plain']) {
$txt = new html2text($part->body, false, true);
@@ -637,70 +740,12 @@ function rcmail_print_body($part, $p = array())
}
// text/html
else if ($part->ctype_secondary == 'html') {
- $html = $part->body;
-
- // special replacements (not properly handled by washtml class)
- $html_search = array(
- '/(<\/nobr>)(\s+)()/i', // space(s) between
- '/(<[\/]*st1:[^>]+>)/i', // Microsoft's Smart Tags
- '/<\/?rte_text>/i', // Rich Text Editor tags (#1485647)
- '/.*<\/title>/i', // PHP bug #32547 workaround: remove title tag
- '/]*>/im', // malformed html: remove html tags (#1485139)
- '/<\/html>/i', // malformed html: remove html tags (#1485139)
- '/^[\xFE\xFF\xBB\xBF\x00]+((?:<\!doctype|\ change charset specification in HTML accordingly
- $charset_pattern = '/(\s+content=[\'"]?\w+\/\w+;\s*charset)=([a-z0-9-_]+)/i';
- if (preg_match($charset_pattern, $html)) {
- $html = preg_replace($charset_pattern, '\\1='.RCMAIL_CHARSET, $html);
- }
- else {
- // add head for malformed messages, washtml cannot work without that
- if (!preg_match('/]*>(.*)<\/head>/Uims', $html))
- $html = ''. $html;
- $html = substr_replace($html, '', intval(stripos($html, '')+6), 0);
- }
-
- // clean HTML with washhtml by Frederic Motte
- $wash_opts = array(
- 'show_washed' => false,
- 'allow_remote' => $p['safe'],
- 'blocked_src' => "./program/blocked.gif",
- 'charset' => RCMAIL_CHARSET,
- 'cid_map' => $part->replaces,
- 'html_elements' => array('body'),
- );
-
- if (!$p['inline_html']) {
- $wash_opts['html_elements'] = array('html','head','title','body');
- }
-
- $washer = new washtml($wash_opts);
- $washer->add_callback('form', 'rcmail_washtml_callback');
-
- if ($p['safe']) { // allow CSS styles, will be sanitized by rcmail_washtml_callback()
- $washer->add_callback('style', 'rcmail_washtml_callback');
- }
-
- $body = $washer->wash($html);
- $REMOTE_OBJECTS = $washer->extlinks;
-
- return $body;
+ return rcmail_wash_html($part->body, $p, $part->replaces);
}
// text/enriched
else if ($part->ctype_secondary=='enriched') {
$part->ctype_secondary = 'html';
+ require_once('lib/enriched.inc');
return Q(enriched_to_html($part->body), 'show');
}
else
@@ -710,22 +755,15 @@ function rcmail_print_body($part, $p = array())
/**** assert plaintext ****/
// make links and email-addresses clickable
- $convert_patterns = $convert_replaces = $replace_strings = array();
+ $replacements = new rcube_string_replacer;
$url_chars = 'a-z0-9_\-\+\*\$\/&%=@#:;';
$url_chars_within = '\?\.~,!';
-
- $convert_patterns[] = "/([\w]+):\/\/([a-z0-9\-\.]+[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/ie";
- $convert_replaces[] = "rcmail_str_replacement('\\1://\\2', \$replace_strings)";
-
- $convert_patterns[] = "/([^\/:]|\s)(www\.)([a-z0-9\-]{2,}[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/ie";
- $convert_replaces[] = "rcmail_str_replacement('\\1\\2\\3', \$replace_strings)";
-
- $convert_patterns[] = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/ie';
- $convert_replaces[] = "rcmail_str_replacement('\\1', \$replace_strings)";
// search for patterns like links and e-mail addresses
- $body = preg_replace($convert_patterns, $convert_replaces, $body);
+ $body = preg_replace_callback("/([\w]+):\/\/([a-z0-9\-\.]+[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/i", array($replacements, 'link_callback'), $body);
+ $body = preg_replace_callback("/([^\/:]|\s)(www\.)([a-z0-9\-]{2,}[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/i", array($replacements, 'link_callback'), $body);
+ $body = preg_replace_callback('/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/i', array($replacements, 'mailto_callback'), $body);
// split body into single lines
$a_lines = preg_split('/\r?\n/', $body);
@@ -754,11 +792,12 @@ function rcmail_print_body($part, $p = array())
}
// insert the links for urls and mailtos
- $body = preg_replace("/##string_replacement\{([0-9]+)\}##/e", "\$replace_strings[\\1]", join("\n", $a_lines));
+ $body = $replacements->resolve(join("\n", $a_lines));
return html::tag('pre', array(), $body);
}
+
/**
* add a string to the replacement array and return a replacement string
*/
@@ -956,43 +995,48 @@ function rcmail_message_body($attrib)
}
+/**
+ * Convert all relative URLs according to a in HTML
+ */
+function rcmail_resolve_base($body)
+{
+ // check for
+ if (preg_match('!()/Ui', array($replacer, 'callback'), $body);
+ $body = preg_replace_callback('/(url\s*\()(["\']?)([\.\/]+[^"\'\)\s]+)(\2)\)/Ui', array($replacer, 'callback'), $body);
+ }
+
+ return $body;
+}
/**
* modify a HTML message that it can be displayed inside a HTML page
*/
function rcmail_html4inline($body, $container_id)
{
- $base_url = "";
$last_style_pos = 0;
$body_lc = strtolower($body);
- // check for
- if (preg_match(($base_reg = '/()/i'), $body, $base_regs))
- $base_url = $base_regs[2];
-
// find STYLE tags
while (($pos = strpos($body_lc, '