php_value error_log logs/errors
php_value upload_max_filesize 5M
php_value post_max_size 6M
+ php_value memory_limit 64M
+ php_value session.auto_start 0
+ php_value zlib.output_compression 0
+ php_value magic_quotes_gpc 0
</IfModule>
<IfModule mod_php5.c>
php_value error_log logs/errors
php_value upload_max_filesize 5M
php_value post_max_size 6M
+ php_value memory_limit 64M
+ php_value session.auto_start 0
+ php_value zlib.output_compression 0
+ php_value magic_quotes_gpc 0
</IfModule>
<FilesMatch "(\.inc|\~)$">
CHANGELOG RoundCube Webmail
---------------------------
+- Added interactive installer script
+- Fix folder adding/renaming inspired by #1484800
+- Localize folder name in page title (#1484785)
+- Fix code using wrong variable name (#1484018)
+- Allow to send mail with BCC recipients only
+- condense TinyMCE toolbar down to one line, removing table buttons (#1484747)
+- Add function to mark the selected messages as read/unread (#1457360)
+- Also do charset decoding as suggested in RFC 2231 (fix #1484321)
+- Show message count in folder list and hint when creating a subfolder
+- Distinguish ssl and tls for imap connections (#1484667)
+- Added some charset aliases to fix typical mis-labelling (#1484565)
+- Remember decision to display images for a certain message during session (#1484754)
+- Truncate attachment filenames to 55 characters due to an IE bug (#1484757)
+- Make sending of read receipts configurable
+- Respect config when localize folder names (#1484707)
+- Also respect receipt and priority settings when re-opening a draft message
+- Remember search results (closes #1483883), patch by the_glu
+- Add Received header on outgoing mail
+- Upgrade to TinyMCE 2.1.3
+- Allow inserting image attachments into HTML messages while composing (#1484557)
+- Implement Message-Disposition-Notification (Receipts)
+- Fix overriding of session vars when register_globals is on (#1484670)
+- Fix bug with case-sensitive folder names (#1484245)
+- Don't create default folders by default
+- Fixed some potential security risks (audited by Andris)
+- Only show new messages if they match the current search (#1484176)
+- Switch to/from when searcing in Sent folder (#1484555)
+- Correctly read the References header (#1484646)
+- Unset old cookie before sending a new value (#1484639)
+- Correctly decode attachments when downloading them (#1484645 and #1484642)
+- Suppress IE errors when clearing attachments form (#1484356)
+- Log error when login fails due to auto_create_user turned off
+- Filter linked/imported CSS files (closes #1484056)
+- Improve message compose screen (closes #1484383)
+- Select next row after removing one from list (#1484387)
+
+RELEASE 0.1-RC2
+
- Enable drag-&-dropping of folders to a new parent and allow to create subfolders (#1457344)
- Suppress IE errors when clearing attachments form (#1484356)
- Set preferences field in user table to NULL (#1484386)
- Prevent default events on subject links (#1484399)
- Use HTTP-POST requests for actions that change state
-RELEASE 0.1.-RC1
+RELEASE 0.1-RC1
- Use global filters and bind username/ for Ldap searches (#1484159)
- Hide quota display if imap server does not support it
- Fixed some XSS and SQL injection issues
- Fixed charset problems with folder renaming
-
+INTRODUCTION
+============
+
+This file describes the basic steps to install RoundCube Webmail on your
+web server. For additional information, please also consult the project's
+wiki page at http://trac.roundcube.net/wiki
+
REQUIREMENTS
============
-* The Apache Webserver
+* The Apache or Lighttpd Webserver
* .htaccess support allowing overrides for DirectoryIndex
* PHP Version 4.3.1 or greater including
- PCRE (perl compatible regular expression)
- - Mcrypt (supporting Triple DES)
- - libiconv
+ - Libiconv
- Multibyte String (mbstring)
- - Database driver for either MySQL, Postgres or SQLite
+ - Mcrypt (supporting Triple DES)
+ - Database driver for either MySQL, Postgres or SQLite
* php.ini options:
- error_reporting E_ALL & ~E_NOTICE (or lower)
- file_uploads on (for attachment upload features)
- memory_limit (increase as suitable to support large attachments)
+ - session.auto_start needs to be off/0
* The PEAR framework with the following packages installed
- - DB (1.7.11)
+ - MDB2
- Mail_Mime (1.3.1)
- Net_SMTP (1.2.10)
* PHP compiled with Open SSL to connect to IMAPS and to use the spell checker
* A MySQL or PostgreSQL database engine or the SQLite extension for PHP
-* A database with permission to create tables
+* One of the above databases with permission to create tables
+* An SMTP server or PHP configured for mail delivery
INSTALLATION
- /temp
- /logs
3. Create a new database and a database user for RoundCube (see DATABASE SETUP)
-4. Create database tables using the queries in file 'SQL/*.initial.sql'
- (* stands for your database type)
-5. Rename the files config/*.inc.php.dist to config/*.inc.php
-6. Modify the files in config/* to suit your local environment
+4. Point your browser to http:///url-to-roundcube/installer/
+5. Follow the instructions of the install script (or see MANUAL CONFINGURATION)
+6. After creating and testing the configuration, remove the installer directory
7. Done!
# sqlite -init SQL/sqlite.initial.sql sqlite.db
Make sure your configuration points to the sqlite.db file and that the
-webserver can write to the file.
+webserver can write to the file and the directory containing the file.
* PostgreSQL
------------
-To use RoundCube with PostgreSQL support you have to follow the next
-simple steps, which have to be done with the postgres system user (or
+To use RoundCube with PostgreSQL support you have to follow these
+simple steps, which have to be done as the postgres system user (or
which ever is the database superuser):
-$ createuser roundcubemail
-$ createdb -O roundcubemail roundcubemail
+$ createuser roundcube
+$ createdb -O roundcube roundcubemail
$ psql roundcubemail
roundcubemail =# ALTER USER roundcube WITH PASSWORD 'the_new_password';
-roundcubemail =# \c - roundcubemail
+roundcubemail =# \c - roundcube
roundcubemail => \i SQL/postgres.initial.sql
-All this has been tested with PostgreSQL 8.0.x and 7.4.x. Older
+All this has been tested with PostgreSQL 8.x and 7.4.x. Older
versions don't have a -O option for the createdb, so if you are
using that version you'll have to change ownership of the DB later.
-CONFIGURATION
-=============
+MANUAL CONFIGURATION
+====================
-Change the files in config/* according your to environment and your needs.
-Details about the config paramaters can be found in the config files.
+First of all, rename the files config/*.inc.php.dist to config/*.inc.php.
+You can then change these files according to your environment and your needs.
+Details about the config parameters can be found in the config files.
+See http://trac.roundcube.net/wiki/Howto_Install for even more guidance.
You can also modify the default .htaccess file. This is necessary to
increase the allowed size of file attachments, for example:
- php_value upload_max_filesize 2M
-
-To enable the experimental HTML editor you need to set the config
-parameter 'enable_htmleditor' to true.
+ php_value upload_max_filesize 2M
UPGRADING
RoundCube Webmail (http://roundcube.net)
+
Introduction:
-------------
RoundCube Webmail is a browser-based multilingual IMAP client with an
-------------
For detailed instructions on how to install RoundCube webmail on your server,
please refer to the INSTALL document in the same directory as this document.
-Please carefully read the REQUIREMENTS section of the INSTALL instructions.
+Please carefully read the REQUIREMENTS section of the INSTALL instructions.
-Licensing:
+Licensing:
----------
This product is distributed under the GPL. Please read through the file
LICENSE for more information about our license.
Contact:
--------
For any bug reports or feature requests please refer to the tracking system
-at trac.roundcube.net (http://trac.roundcube.net/trac.cgi/report) or
-subscribe to our mailing list. See http://www.roundcube.net/?p=mailinglists
+at trac.roundcube.net (http://trac.roundcube.net/wiki/Howto_ReportIssues) or
+subscribe to our mailing list. See http://roundcube.net/support
for details.
You're always welcome to send a message to the project admin:
--- /dev/null
+-- RoundCube Webmail update script for MySQL databases
+-- Updates from version 0.1-20051007
+
+
+ALTER TABLE `session` ADD `ip` VARCHAR(40) NOT NULL AFTER changed;
+ALTER TABLE `users` ADD `alias` VARCHAR(128) NOT NULL AFTER mail_host;
+
+
+
+-- RoundCube Webmail update script for MySQL databases
+-- Updates from version 0.1-20051021
+
+ALTER TABLE `session` CHANGE `sess_id` `sess_id` VARCHAR(40) NOT NULL;
+
+ALTER TABLE `contacts` CHANGE `del` `del` TINYINT(1) NOT NULL;
+ALTER TABLE `contacts` ADD `changed` DATETIME NOT NULL AFTER `user_id`;
+
+UPDATE `contacts` SET `del`=0 WHERE `del`=1;
+UPDATE `contacts` SET `del`=1 WHERE `del`=2;
+
+ALTER TABLE `identities` CHANGE `default` `standard` TINYINT(1) NOT NULL;
+ALTER TABLE `identities` CHANGE `del` `del` TINYINT(1) NOT NULL;
+
+UPDATE `identities` SET `del`=0 WHERE `del`=1;
+UPDATE `identities` SET `del`=1 WHERE `del`=2;
+UPDATE `identities` SET `standard`=0 WHERE `standard`=1;
+UPDATE `identities` SET `standard`=1 WHERE `standard`=2;
+
+CREATE TABLE `messages` (
+ `message_id` int(11) unsigned NOT NULL auto_increment,
+ `user_id` int(11) unsigned NOT NULL default '0',
+ `del` tinyint(1) NOT NULL default '0',
+ `cache_key` varchar(128) NOT NULL default '',
+ `created` datetime NOT NULL default '0000-00-00 00:00:00',
+ `idx` int(11) unsigned NOT NULL default '0',
+ `uid` int(11) unsigned NOT NULL default '0',
+ `subject` varchar(255) NOT NULL default '',
+ `from` varchar(255) NOT NULL default '',
+ `to` varchar(255) NOT NULL default '',
+ `cc` varchar(255) NOT NULL default '',
+ `date` datetime NOT NULL default '0000-00-00 00:00:00',
+ `size` int(11) unsigned NOT NULL default '0',
+ `headers` text NOT NULL,
+ `structure` text,
+ PRIMARY KEY (`message_id`),
+ KEY `user_id` (`user_id`),
+ KEY `idx` (`idx`),
+ KEY `uid` (`uid`),
+ UNIQUE `uniqueness` (`cache_key`, `uid`)
+) TYPE=MyISAM;
+
ALTER TABLE "messages" ADD structure TEXT;
ALTER TABLE "messages" ADD UNIQUE (user_id, cache_key, uid);
-ALTER TABLE "identities" ADD html_signature integer DEFAULT 0 NOT NULL;
+ALTER TABLE "identities" ADD html_signature INTEGER;
+ALTER TABLE "identities" ALTER html_signature SET DEFAULT 0;
+UPDATE identities SET html_signature = 0;
+ALTER TABLE "identities" ALTER html_signature SET NOT NULL;
Follow these instructions if upgrading from a previous version
of RoundCube Webmail.
+from version 0.1-rc2
+----------------------------------------
+* replace index.php
+* replace all files in folder /bin/
+* replace all files in folder /program/
+* replace all files in folder /skins/default/
+
+
from version 0.1-rc1
----------------------------------------
* replace index.php
+* replace all files in folder /bin/
* replace all files in folder /program/
* replace all files in folder /skins/default/
* If you have LDAP servers configured you should re-configure
from version 0.1-beta2
----------------------------------------
* replace index.php
+* replace all files in folder /bin/
* replace all files in folder /program/
* replace all files in folder /skins/default/
* run all commands in SQL/[yourdbtype].update.sql or
form version 0.1-beta
----------------------------------------
* replace index.php
+* replace all files in folder /bin/
* replace all files in folder /program/
* replace all files in folder /skins/default/
* run all commands in SQL/[yourdbtype].update.sql or
--- /dev/null
+#!/usr/bin/php -qC
+<?php
+
+$CWD = $INSTALL_PATH = preg_replace('/bin\/$/', '', getcwd() . '/');
+ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . $CWD.'program/');
+
+require_once('include/rcube_shared.inc');
+require_once('include/rcube_imap.inc');
+require_once('include/main.inc');
+require_once('include/bugs.inc');
+
+/**
+ * Parse commandline arguments into a hash array
+ */
+function get_args($aliases=array())
+{
+ $args = array();
+ for ($i=1; $i<count($_SERVER['argv']); $i++)
+ {
+ $arg = $_SERVER['argv'][$i];
+ if (substr($arg, 0, 2) == '--')
+ {
+ $sp = strpos($arg, '=');
+ $key = substr($arg, 2, $sp - 2);
+ $value = substr($arg, $sp+1);
+ }
+ else if ($arg{0} == '-')
+ {
+ $key = substr($arg, 1);
+ $value = $_SERVER['argv'][++$i];
+ }
+ else
+ continue;
+
+ $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value);
+
+ if ($alias = $aliases[$key])
+ $args[$alias] = $args[$key];
+ }
+
+ return $args;
+}
+
+
+function print_usage()
+{
+ print "Usage: msgimport -h imap-host -u user-name -f message-file\n";
+ print "--host IMAP host\n";
+ print "--user IMAP user name\n";
+ print "--file Message file to upload\n";
+}
+
+
+// get arguments
+$args = get_args(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'f' => 'file')) + array('host' => 'localhost');
+
+if ($_SERVER['argv'][1] == 'help')
+{
+ print_usage();
+ exit;
+}
+else if (!($args['host'] && $args['file']))
+{
+ print "Missing required parameters.\n";
+ print_usage();
+ exit;
+}
+else if (!is_file($args['file']))
+{
+ print "Cannot read message file\n";
+ exit;
+}
+
+// prompt for username if not set
+if (empty($args['user']))
+{
+ //fwrite(STDOUT, "Please enter your name\n");
+ echo "IMAP user: ";
+ $args['user'] = trim(fgets(STDIN));
+}
+
+// prompt for password
+echo "Password: ";
+$args['pass'] = trim(fgets(STDIN));
+
+// clear password input
+echo chr(8)."\rPassword: ".str_repeat("*", strlen($args['pass']))."\n";
+
+// parse $host URL
+$a_host = parse_url($args['host']);
+if ($a_host['host'])
+{
+ $host = $a_host['host'];
+ $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
+ $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
+}
+else
+{
+ $host = $args['host'];
+ $imap_port = 143;
+}
+
+// instantiate IMAP class
+$IMAP = new rcube_imap(null);
+
+// try to connect to IMAP server
+if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
+{
+ print "IMAP login successful.\n";
+ print "Uploading message...\n";
+
+ // upload message from file
+ if ($IMAP->save_message('INBOX', file_get_contents($args['file'])))
+ print "Message successfully added to INBOX.\n";
+ else
+ print "Adding message failed!\n";
+}
+else
+{
+ print "IMAP login failed.\n";
+}
+
+?>
\ No newline at end of file
<?php
-
/*
+-----------------------------------------------------------------------+
| program/bin/quotaimg.php |
| Author: Brett Patterson <brett2@umbc.edu> |
+-----------------------------------------------------------------------+
- $Id: $
+ $Id: $
*/
-$used = ((isset($_GET['u']) && !empty($_GET['u'])) || $_GET['u']=='0')?(int)$_GET['u']:'??';
-$quota = ((isset($_GET['q']) && !empty($_GET['q'])) || $_GET['q']=='0')?(int)$_GET['q']:'??';
-$width = empty($_GET['w']) ? 100 : (int)$_GET['w'];
+$used = ((isset($_GET['u']) && !empty($_GET['u'])) || $_GET['u']=='0')?(int)$_GET['u']:'??';
+$quota = ((isset($_GET['q']) && !empty($_GET['q'])) || $_GET['q']=='0')?(int)$_GET['q']:'??';
+$width = empty($_GET['w']) ? 100 : (int)$_GET['w'];
$height = empty($_GET['h']) ? 14 : (int)$_GET['h'];
+/**
+ * Quota display
+ *
+ * Modify the following few elements to change the display of the image.
+ * Modifiable attributes are:
+ * bool border :: Defines whether you want to show a border around it?
+ * bool unknown :: Leave default; Defines whether quota is "unknown"
+ *
+ * int height :: Defines height of the image
+ * int width :: Defines width of the image
+ * int font :: Changes the font size & font used in the GD library.
+ * Available values are from 1 to 5.
+ * int padding :: Changes the offset (in pixels) from the top of the image
+ * to where the top of the text will be aligned. User
+ * greater than 0 to ensure text is off the border.
+ * array limit :: Holds the integer values of in an associative array as
+ * to what defines the upper and lower levels for quota
+ * display.
+ * High - Quota is nearing capacity.
+ * Mid - Quota is around the middle
+ * Low - Currently not used.
+ * array color :: An associative array of strings of comma separated
+ * values (R,G,B) for use in color creation. Define the
+ * RGB values you'd like to use. A list of colors (and
+ * their RGB values) can be found here:
+ * http://www.december.com/html/spec/colorcodes.html
+ *
+ * @return void
+ *
+ * @param mixed $used The amount used, or ?? if unknown.
+ * @param mixed $total The total available, or ?? if unknown.
+ * @param int $width Width of the image.
+ * @param int $height Height of the image.
+ *
+ * @see rcube_imap::get_quota()
+ * @see iil_C_GetQuota()
+ *
+ * @todo Make colors a config option.
+ */
function genQuota($used, $total, $width, $height)
{
- /**
- * Quota Display
- *
- * Modify the following few elements to change the display of the image.
- * Modifiable attributes are:
- * bool border :: Defines whether you want to show a border around it or not.
- * bool unknown :: Leave default; Defines whether quota is "unknown"
- *
- * int height :: Defines height of the image
- * int width :: Defines width of the image
- * int font :: Changes the font size & font used in the GD library.
- * Available values are from 1 to 5.
- * int padding :: Changes the offset (in pixels) from the top of the image to
- * where the top of the text will be aligned. User greater than
- * 0 to ensure text is off the border.
- * array limit :: Holds the integer values of in an associative array as to what
- * defines the upper and lower levels for quota display.
- * High - Quota is nearing capacity.
- * Mid - Quota is around the middle
- * Low - Currently not used.
- * array color :: An associative array of strings of comma separated values (R,G,B)
- * for use in color creation. Define the RGB values you'd like to
- * use. A list of colors (and their RGB values) can be found here:
- * http://www.december.com/html/spec/colorcodes.html
- **/
-
$unknown = false;
- $border = 0;
+ $border = 0;
- $font = 2;
+ $font = 2;
$padding = 0;
$limit['high'] = 70;
- $limit['mid'] = 45;
- $limit['low'] = 0;
+ $limit['mid'] = 45;
+ $limit['low'] = 0;
// Fill Colors
- $color['fill']['high'] = '215, 13, 13'; // Near quota fill color
- $color['fill']['mid'] = '126, 192, 238';// Mid-area of quota fill color
- $color['fill']['low'] = '147, 225, 100'; // Far from quota fill color
+ $color['fill']['high'] = '215, 13, 13'; // Near quota fill color
+ $color['fill']['mid'] = '126, 192, 238'; // Mid-area of quota fill color
+ $color['fill']['low'] = '147, 225, 100'; // Far from quota fill color
// Background colors
- $color['bg']['OL'] = '215, 13, 13'; // Over limit bbackground
- $color['bg']['Unknown'] = '238, 99, 99';// Unknown background
- $color['bg']['quota'] = '255, 255, 255';// Normal quota background
+ $color['bg']['OL'] = '215, 13, 13'; // Over limit bbackground
+ $color['bg']['Unknown'] = '238, 99, 99'; // Unknown background
+ $color['bg']['quota'] = '255, 255, 255'; // Normal quota background
// Misc. Colors
$color['border'] = '0, 0, 0';
- $color['text'] = '102, 102, 102';
+ $color['text'] = '102, 102, 102';
- /****************************
+ /************************************
***** DO NOT EDIT BELOW HERE *****
- ****************************/
+ ***********************************/
- if (ereg("^[^0-9?]*$", $used) || ereg("^[^0-9?]*$", $total))
+ // @todo: Set to "??" instead?
+ if (ereg("^[^0-9?]*$", $used) || ereg("^[^0-9?]*$", $total)) {
return false;
+ }
- if (strpos($used, '?')!==false || strpos($total, '?')!==false && $used != 0)
+ if (strpos($used, '?') !== false || strpos($total, '?') !== false
+ && $used != 0) {
$unknown = true;
+ }
$im = imagecreate($width, $height);
- if ($border)
- {
+ if ($border) {
list($r, $g, $b) = explode(',', $color['border']);
+
$borderc = imagecolorallocate($im, $r, $g, $b);
+
imageline($im, 0, 0, $width, 0, $borderc);
imageline($im, 0, $height-$border, 0, 0, $borderc);
imageline($im, $width-1, 0, $width-$border, $height, $borderc);
list($r, $g, $b) = explode(',', $color['text']);
$text = imagecolorallocate($im, $r, $g, $b);
- if ($unknown)
- {
+ if ($unknown) {
list($r, $g, $b) = explode(',', $color['bg']['Unknown']);
$background = imagecolorallocate($im, $r, $g, $b);
imagefilledrectangle($im, 0, 0, $width, $height, $background);
$string = 'Unknown';
- $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
+ $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
imagestring($im, $font, $mid, $padding, $string, $text);
- }
- else if ($used > $total)
- {
+ } else if ($used > $total) {
list($r, $g, $b) = explode(',', $color['bg']['OL']);
+
$background = imagecolorallocate($im, $r, $g, $b);
+
imagefilledrectangle($im, 0, 0, $width, $height, $background);
$string = 'Over Limit';
- $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
+ $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
imagestring($im, $font, $mid, $padding, $string, $text);
- }
- else
- {
+ } else {
list($r, $g, $b) = explode(',', $color['bg']['quota']);
+
$background = imagecolorallocate($im, $r, $b, $g);
+
imagefilledrectangle($im, 0, 0, $width, $height, $background);
$quota = ($used==0)?0:(round($used/$total, 2)*100);
- if ($quota >= $limit['high'])
- {
+ if ($quota >= $limit['high']) {
list($r, $g, $b) = explode(',', $color['fill']['high']);
$fill = imagecolorallocate($im, $r, $g, $b);
- }
- elseif($quota >= $limit['mid'])
- {
+ } elseif($quota >= $limit['mid']) {
list($r, $g, $b) = explode(',', $color['fill']['mid']);
$fill = imagecolorallocate($im, $r, $g, $b);
- }
- else // if($quota >= $limit['low'])
- {
+ } else {
+ // if($quota >= $limit['low'])
list($r, $g, $b) = explode(',', $color['fill']['low']);
$fill = imagecolorallocate($im, $r, $g, $b);
}
$quota_width = $quota / 100 * $width;
imagefilledrectangle($im, $border, 0, $quota, $height-2*$border, $fill);
- $string = $quota.'%';
- $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
- imagestring($im, $font, $mid, $padding, $string, $text); // Print percent in black
+ $string = $quota . '%';
+ $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
+ // Print percent in black
+ imagestring($im, $font, $mid, $padding, $string, $text);
}
header('Content-Type: image/gif');
- header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+86400)." GMT");
- header("Cache-Control: ");
- header("Pragma: ");
+
+ // @todo is harcoding GMT necessary?
+ header('Expires: ' . gmdate('D, d M Y H:i:s', mktime()+86400) . ' GMT');
+ header('Cache-Control: ');
+ header('Pragma: ');
imagegif($im);
imagedestroy($im);
}
-
genQuota($used, $quota, $width, $height);
exit;
-?>
+?>
\ No newline at end of file
| Configuration file for database access |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
// PEAR database DSN for read/write operations
// format is db_provider://user:password@host/databse
-// currently supported db_providers: mysql, sqlite
+// currently supported db_providers: mysql, mysqli, pgsql, sqlite, mssql
$rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';
// postgres example: 'pgsql://roundcube:pass@localhost/roundcubemail';
$rcmail_config['db_dsnr'] = '';
// database backend to use (only db or mdb2 are supported)
-$rcmail_config['db_backend'] = 'db';
+$rcmail_config['db_backend'] = 'mdb2';
// maximum length of a query in bytes
$rcmail_config['db_max_length'] = 512000; // 500K
| Main configuration file |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
$rcmail_config['date_today'] = 'H:i';
// add this user-agent to message headers when sending
-$rcmail_config['useragent'] = 'RoundCube Webmail/0.1-rc2';
+$rcmail_config['useragent'] = 'RoundCube Webmail/0.1';
// use this name to compose page titles
$rcmail_config['product_name'] = 'RoundCube Webmail';
$rcmail_config['trash_mbox'] = 'Trash';
// display these folders separately in the mailbox list.
-// these folders will automatically be created if they do not exist
+// these folders will also be displayed with localized names
$rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
+// automatically create the above listed default folders on login
+$rcmail_config['create_default_folders'] = FALSE;
+
// protect the default folders from renames, deletes, and subscription changes
$rcmail_config['protect_default_folders'] = TRUE;
// false causes deleted messages to be permanantly removed if there is no Trash folder
$rcmail_config['flag_for_deletion'] = TRUE;
+// Behavior if a received message requests a message delivery notification (read receipt)
+// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask)
+$rcmail_config['mdn_requests'] = 0;
+
// Make use of the built-in spell checker. It is based on GoogieSpell.
// Since Google only accepts connections over https your PHP installatation
// requires to be compiled with Open SSL support
// leave empty for auto-detection
$rcmail_config['mail_header_delimiter'] = NULL;
+// session domain: .example.org
+$rcmail_config['session_domain'] = '';
+
// in order to enable public ldap search, create a config array
// like the Verisign example below. if you would like to test,
// simply uncomment the Verisign example.
* 'surname_field' => 'sn', // this field represents the contact's last name
* 'firstname_field' => 'gn', // this field represents the contact's first name
* 'scope' => 'sub', // search mode: sub|base|list
- * 'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. ex: (status=act)
+ * '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
*/
-// enable composing html formatted messages (experimental)
-$rcmail_config['enable_htmleditor'] = FALSE;
-
// don't allow these settings to be overriden by the user
$rcmail_config['dont_override'] = array();
// prefer displaying HTML messages
$rcmail_config['prefer_html'] = TRUE;
+// compose html formatted messages by default
+$rcmail_config['htmleditor'] = FALSE;
+
// show pretty dates as standard
$rcmail_config['prettydate'] = TRUE;
// save compose message every 300 seconds (5min)
$rcmail_config['draft_autosave'] = 300;
+// default setting if preview pane is enabled
+$rcmail_config['preview_pane'] = FALSE;
+
// don't let users set pagesize to more than this value if set
$rcmail_config['max_pagesize'] = 200;
+// mime magic database
+$rcmail_config['mime_magic'] = '/usr/share/misc/magic';
+
// end of config file
?>
/*
+-----------------------------------------------------------------------+
| RoundCube Webmail IMAP Client |
- | Version 0.1-rc2-dependent |
+ | Version 0.1-20080302 |
| |
| Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: index.php 903 2007-10-22 06:52:13Z thomasb $
+ $Id: index.php 1162 2008-03-02 13:20:21Z thomasb $
*/
// application constants
-define('RCMAIL_VERSION', '0.1-rc2');
+define('RCMAIL_VERSION', '0.1-trunk');
define('RCMAIL_CHARSET', 'UTF-8');
define('JS_OBJECT_NAME', 'rcmail');
if ($_action != 'get' && $_action != 'viewsource')
{
// use gzip compression if supported
- if (function_exists('ob_gzhandler') && ini_get('zlib.output_compression'))
+ if (function_exists('ob_gzhandler') && !ini_get('zlib.output_compression'))
ob_start('ob_gzhandler');
else
ob_start();
// log in to imap server
-if (!empty($_SESSION['user_id']) && $_task=='mail')
+if (!empty($USER->ID) && $_task=='mail')
{
$conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']);
if (!$conn)
// not logged in -> set task to 'login
-if (empty($_SESSION['user_id']))
+if (empty($USER->ID))
{
if ($OUTPUT->ajax_call)
$OUTPUT->remote_response("setTimeout(\"location.href='\"+this.env.comm_path+\"'\", 2000);");
// not logged in -> show login page
-if (!$_SESSION['user_id'])
+if (empty($USER->ID))
{
+ // check if installer is still active
+ if (is_file('./installer/index.php'))
+ $OUTPUT->add_footer('
+ <div style="background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em">
+ <h2 style="margin-top:0.2em">Installer script is still accessible</h2>
+ <p>The install script of your RoundCube installation is still stored in its default location!</p>
+ <p>Please <b>remove</b> the whole <tt>installer</tt> folder from the RoundCube directory because
+ these files may expose sensitive configuration data like server passwords and encryption keys
+ to the public. Make sure you cannot access the <a href="./installer/">installer script</a> from your browser.</p>
+ </div>');
+
$OUTPUT->task = 'login';
$OUTPUT->send('login');
exit;
if ($_action=='viewsource')
include('program/steps/mail/viewsource.inc');
+ if ($_action=='sendmdn')
+ include('program/steps/mail/sendmdn.inc');
+
if ($_action=='send')
include('program/steps/mail/sendmail.inc');
if ($_action=='upload')
include('program/steps/mail/upload.inc');
- if ($_action=='compose' || $_action=='remove-attachment')
+ if ($_action=='compose' || $_action=='remove-attachment' || $_action=='display-attachment')
include('program/steps/mail/compose.inc');
if ($_action=='addcontact')
--- /dev/null
+<form action="index.php" method="get">
+<?php
+
+$required_php_exts = array('PCRE' => 'pcre', 'Session' => 'session', 'Sockets' => 'sockets');
+
+$optional_php_exts = array('FileInfo' => 'fileinfo', 'Libiconv' => 'iconv',
+ 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl', 'Mcrypt' => 'mcrypt', 'GD' => 'gd');
+
+$required_libs = array('PEAR' => 'PEAR.php', 'DB' => 'DB.php', 'MDB2' => 'MDB2.php',
+ 'Net_SMTP' => 'Net/SMTP.php', 'Mail_mime' => 'Mail/mime.php', 'iilConnection' => 'lib/imap.inc');
+
+$supported_dbs = array('MySQL' => 'mysql', 'MySQLi' => 'mysqli',
+ 'PostgreSQL' => 'pgsql', 'SQLite (v2)' => 'sqlite');
+
+$ini_checks = array('file_uploads' => 1, 'session.auto_start' => 0,
+ 'magic_quotes_gpc' => 0, 'magic_quotes_sybase' => 0);
+
+$source_urls = array(
+ 'Sockets' => 'http://www.php.net/manual/en/ref.sockets.php',
+ 'Session' => 'http://www.php.net/manual/en/ref.session.php',
+ 'PCRE' => 'http://www.php.net/manual/en/ref.pcre.php',
+ 'FileInfo' => 'http://www.php.net/manual/en/ref.fileinfo.php',
+ 'Libiconv' => 'http://www.php.net/manual/en/ref.iconv.php',
+ 'Multibyte' => 'http://www.php.net/manual/en/ref.mbstring.php',
+ 'Mcrypt' => 'http://www.php.net/manual/en/ref.mcrypt.php',
+ 'OpenSSL' => 'http://www.php.net/manual/en/ref.openssl.php',
+ 'GD' => 'http://www.php.net/manual/en/ref.image.php',
+ 'PEAR' => 'http://pear.php.net',
+ 'MDB2' => 'http://pear.php.net/package/MDB2',
+ 'Net_SMTP' => 'http://pear.php.net/package/Net_SMTP',
+ 'Mail_mime' => 'http://pear.php.net/package/Mail_mime'
+);
+
+echo '<input type="hidden" name="_step" value="' . ($RCI->configured ? 3 : 2) . '" />';
+?>
+
+<h3>Checking PHP version</h3>
+<?php
+
+if (phpversion() > 4.3) {
+ $RCI->pass('Version', 'PHP ' . phpversion() . ' detected');
+}
+else {
+ $RCI->fail('Version', 'PHP Version 4.3.1 or greater is required');
+}
+
+?>
+
+<h3>Checking PHP extensions</h3>
+<p class="hint">The following modules/extensions are <em>required</em> to run RoundCube:</p>
+<?php
+
+$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
+foreach ($required_php_exts AS $name => $ext) {
+ if (extension_loaded($ext)) {
+ $RCI->pass($name);
+ }
+ else {
+ $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
+ $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : '';
+ $RCI->fail($name, $msg, $source_urls[$name]);
+ }
+ echo '<br />';
+}
+
+?>
+
+<p class="hint">These extensions are <em>optional</em> but recommended to get the best performance:</p>
+<?php
+
+foreach ($optional_php_exts AS $name => $ext) {
+ if (extension_loaded($ext)) {
+ $RCI->pass($name);
+ }
+ else {
+ $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
+ $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : '';
+ $RCI->na($name, $msg, $source_urls[$name]);
+ }
+ echo '<br />';
+}
+
+?>
+
+
+<h3>Checking available databases</h3>
+<p class="hint">Check which of the supported extensions are installed. At least one of them is required.</p>
+
+<?php
+
+$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
+foreach ($supported_dbs AS $database => $ext) {
+ if (extension_loaded($ext)) {
+ $RCI->pass($database);
+ }
+ else {
+ $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
+ $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : 'Not installed';
+ $RCI->na($database, $msg, $source_urls[$database]);
+ }
+ echo '<br />';
+}
+
+?>
+
+
+<h3>Check for required 3rd party libs</h3>
+<p class="hint">This also checks if the include path is set correctly.</p>
+
+<?php
+
+foreach ($required_libs as $classname => $file) {
+ @include_once $file;
+ if (class_exists($classname)) {
+ $RCI->pass($classname);
+ }
+ else if ($classname == 'DB' || ($classname == 'MDB2' && class_exists('DB'))) {
+ $RCI->na($classname, 'Use ' . ($classname == 'DB' ? 'MDB2' : 'DB') . ' instead');
+ }
+ else {
+ $RCI->fail($classname, "Failed to load $file", $source_urls[$classname]);
+ }
+ echo "<br />";
+}
+
+
+?>
+
+<h3>Checking php.ini/.htaccess settings</h3>
+
+<?php
+
+foreach ($ini_checks as $var => $val) {
+ $status = ini_get($var);
+ if ($status == $val) {
+ $RCI->pass($var);
+ }
+ else {
+ $RCI->fail($var, "is '$status', should be '$val'");
+ }
+ echo '<br />';
+}
+?>
+
+<?php
+
+if ($RCI->failures) {
+ echo '<p class="warning">Sorry but your webserver does not meet the requirements for RoundCube!<br />
+ Please install the missing modules or fix the php.ini settings according to the above check results.<br />
+ Hint: only checks showing <span class="fail">NOT OK</span> need to be fixed.</p>';
+}
+echo '<p><br /><input type="submit" value="NEXT" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';
+
+?>
+
+</form>
--- /dev/null
+
+function toggleblock(id, link)
+{
+ var block = document.getElementById(id);
+
+ return false;
+}
+
+
+function addhostfield()
+{
+ var container = document.getElementById('defaulthostlist');
+ var row = document.createElement('div');
+ var input = document.createElement('input');
+ var link = document.createElement('a');
+
+ input.name = '_default_host[]';
+ input.size = '30';
+ link.href = '#';
+ link.onclick = function() { removehostfield(this.parentNode); return false };
+ link.className = 'removelink';
+ link.innerHTML = 'remove';
+
+ row.appendChild(input);
+ row.appendChild(link);
+ container.appendChild(row);
+}
+
+
+function removehostfield(row)
+{
+ var container = document.getElementById('defaulthostlist');
+ container.removeChild(row);
+}
+
+
--- /dev/null
+<form action="index.php" method="post">
+<input type="hidden" name="_step" value="2" />
+<?php
+
+ini_set('display_errors', 1);
+require_once 'include/rcube_html.inc';
+
+// also load the default config to fill in the fields
+$RCI->load_defaults();
+
+// register these boolean fields
+$RCI->config_props = array(
+ 'ip_check' => 1,
+ 'enable_caching' => 1,
+ 'enable_spellcheck' => 1,
+ 'auto_create_user' => 1,
+ 'smtp_log' => 1,
+ 'prefer_html' => 1,
+ 'preview_pane' => 1,
+ 'htmleditor' => 1,
+);
+
+if (!empty($_POST['submit'])) {
+
+ echo '<p class="notice">Copy the following configurations and save them in two files (names above the text box)';
+ echo ' within the <tt>config/</tt> directory of your RoundCube installation.</p>';
+
+ $textbox = new textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile"));
+
+ echo '<div><em>main.inc.php</em></div>';
+ echo $textbox->show($RCI->create_config('main'));
+
+ echo '<div style="margin-top:1em"><em>db.inc.php</em></div>';
+ echo $textbox->show($RCI->create_config('db'));
+
+ echo '<p class="hint">Of course there are more options to configure.
+ Have a look at the config files or visit <a href="http://trac.roundcube.net/wiki/Howto_Config">Howto_Config</a> to find out.</p>';
+
+ echo '<p><input type="button" onclick="location.href=\'./index.php?_step=3\'" value="CONTINUE" /></p>';
+
+ // echo '<style type="text/css"> .configblock { display:none } </style>';
+ echo "\n<hr style='margin-bottom:1.6em' />\n";
+}
+
+?>
+<fieldset>
+<legend>General configuration</legend>
+<dl class="configblock">
+<!--
+<dt id="cgfblockgeneral" class="propname">debug_level</dt>
+<dd>
+<?php
+/*
+$value = $RCI->getprop('debug_level');
+$check_debug = new checkbox(array('name' => '_debug_level[]'));
+echo $check_debug->show(($value & 1) ? 1 : 0 , array('value' => 1, 'id' => 'cfgdebug1'));
+echo '<label for="cfgdebug1">Log errors</label><br />';
+
+echo $check_debug->show(($value & 4) ? 4 : 0, array('value' => 4, 'id' => 'cfgdebug4'));
+echo '<label for="cfgdebug4">Display errors</label><br />';
+
+echo $check_debug->show(($value & 8) ? 8 : 0, array('value' => 8, 'id' => 'cfgdebug8'));
+echo '<label for="cfgdebug8">Verbose display</label><br />';
+*/
+?>
+</dd>
+-->
+
+<dt class="propname">product_name</dt>
+<dd>
+<?php
+
+$input_prodname = new textfield(array('name' => '_product_name', 'size' => 30, 'id' => "cfgprodname"));
+echo $input_prodname->show($RCI->getprop('product_name'));
+
+?>
+<div>The name of your service (used to compose page titles)</div>
+</dd>
+
+<dt class="propname">skin_path</dt>
+<dd>
+<?php
+
+$input_skinpath = new textfield(array('name' => '_skin_path', 'size' => 30, 'id' => "cfgskinpath"));
+echo $input_skinpath->show($RCI->getprop('skin_path'));
+
+?>
+<div>Relative path to the skin folder</div>
+</dd>
+
+<dt class="propname">temp_dir</dt>
+<dd>
+<?php
+
+$input_tempdir = new textfield(array('name' => '_temp_dir', 'size' => 30, 'id' => "cfgtempdir"));
+echo $input_tempdir->show($RCI->getprop('temp_dir'));
+
+?>
+<div>Use this folder to store temp files (must be writebale for webserver)</div>
+</dd>
+
+<dt class="propname">log_dir</dt>
+<dd>
+<?php
+
+$input_logdir = new textfield(array('name' => '_log_dir', 'size' => 30, 'id' => "cfglogdir"));
+echo $input_logdir->show($RCI->getprop('log_dir'));
+
+?>
+<div>Use this folder to store log files (must be writebale for webserver)</div>
+</dd>
+
+<dt class="propname">ip_check</dt>
+<dd>
+<?php
+
+$check_ipcheck = new checkbox(array('name' => '_ip_check', 'id' => "cfgipcheck"));
+echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1));
+
+?>
+<label for="cfgipcheck">Check client IP in session authorization</label><br />
+
+<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changeing IPs.</p>
+</dd>
+
+<dt class="propname">des_key</dt>
+<dd>
+<?php
+
+$input_deskey = new textfield(array('name' => '_des_key', 'size' => 30, 'id' => "cfgdeskey"));
+echo $input_deskey->show($RCI->getprop('des_key'));
+
+?>
+<div>This key is used to encrypt the users imap password before storing in the session record</div>
+<p class="hint">It's a random generated string to ensure that every installation has it's own key.
+If you enter it manually please provide a string of exactly 24 chars.</p>
+</dd>
+
+<dt class="propname">enable_caching</dt>
+<dd>
+<?php
+
+$check_caching = new checkbox(array('name' => '_enable_caching', 'id' => "cfgcache"));
+echo $check_caching->show(intval($RCI->getprop('enable_caching')), array('value' => 1));
+
+?>
+<label for="cfgcache">Cache messages in local database</label><br />
+</dd>
+
+<dt class="propname">enable_spellcheck</dt>
+<dd>
+<?php
+
+$check_caching = new checkbox(array('name' => '_enable_spellcheck', 'id' => "cfgspellcheck"));
+echo $check_caching->show(intval($RCI->getprop('enable_spellcheck')), array('value' => 1));
+
+?>
+<label for="cfgspellcheck">Make use of the built-in spell checker</label><br />
+
+<p class="hint">It is based on GoogieSpell what implies that the message content will be sent to Google in order to check the spelling.</p>
+</dd>
+
+<dt class="propname">mdn_requests</dt>
+<dd>
+<?php
+
+$select_mdnreq = new select(array('name' => '_mdn_requests', 'id' => "cfgmdnreq"));
+$select_mdnreq->add(array('ask the user', 'send automatically', 'ignore'), array(0, 1, 2));
+echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests')));
+
+?>
+<div>Behavior if a received message requests a message delivery notification (read receipt)</div>
+</dd>
+
+</dl>
+</fieldset>
+
+<fieldset>
+<legend>Database setup</legend>
+<dl class="configblock" id="cgfblockdb">
+<dt class="propname">db_dsnw</dt>
+<dd>
+<p>Database settings for read/write operations:</p>
+<?php
+
+require_once 'DB.php';
+
+$supported_dbs = array('MySQL' => 'mysql', 'MySQLi' => 'mysqli',
+ 'PgSQL' => 'pgsql', 'SQLite' => 'sqlite');
+
+$select_dbtype = new select(array('name' => '_dbtype', 'id' => "cfgdbtype"));
+foreach ($supported_dbs AS $database => $ext) {
+ if (extension_loaded($ext)) {
+ $select_dbtype->add($database, $ext);
+ }
+}
+
+$input_dbhost = new textfield(array('name' => '_dbhost', 'size' => 20, 'id' => "cfgdbhost"));
+$input_dbname = new textfield(array('name' => '_dbname', 'size' => 20, 'id' => "cfgdbname"));
+$input_dbuser = new textfield(array('name' => '_dbuser', 'size' => 20, 'id' => "cfgdbuser"));
+$input_dbpass = new textfield(array('name' => '_dbpass', 'size' => 20, 'id' => "cfgdbpass"));
+
+$dsnw = DB::parseDSN($RCI->getprop('db_dsnw'));
+
+echo $select_dbtype->show($RCI->is_post ? $_POST['_dbtype'] : $dsnw['phptype']);
+echo '<label for="cfgdbtype">Database type</label><br />';
+echo $input_dbhost->show($RCI->is_post ? $_POST['_dbhost'] : $dsnw['hostspec']);
+echo '<label for="cfgdbhost">Database server</label><br />';
+echo $input_dbname->show($RCI->is_post ? $_POST['_dbname'] : $dsnw['database']);
+echo '<label for="cfgdbname">Database name</label><br />';
+echo $input_dbuser->show($RCI->is_post ? $_POST['_dbuser'] : $dsnw['username']);
+echo '<label for="cfgdbuser">Database user name (needs write permissions)</label><br />';
+echo $input_dbpass->show($RCI->is_post ? $_POST['_dbpass'] : $dsnw['password']);
+echo '<label for="cfgdbpass">Database password</label><br />';
+
+?>
+</dd>
+
+<dt class="propname">db_backend</dt>
+<dd>
+<?php
+
+// check for existing PEAR classes
+@include_once 'DB.php';
+@include_once 'MDB2.php';
+
+$select_dbba = new select(array('name' => '_db_backend', 'id' => "cfgdbba"));
+
+if (class_exists('DB'))
+ $select_dbba->add('DB', 'db');
+if (class_exists('MDB2'))
+ $select_dbba->add('MDB2', 'mdb2');
+
+echo $select_dbba->show($RCI->getprop('db_backend'));
+
+?>
+<div>PEAR Database backend to use</div>
+</dd>
+
+</dl>
+</fieldset>
+
+
+<fieldset>
+<legend>IMAP Settings</legend>
+<dl class="configblock" id="cgfblockimap">
+<dt class="propname">default_host</dt>
+<dd>
+<div>The IMAP host(s) chosen to perform the log-in</div>
+<div id="defaulthostlist">
+<?php
+
+$text_imaphost = new textfield(array('name' => '_default_host[]', 'size' => 30));
+$default_hosts = $RCI->get_hostlist();
+
+if (empty($default_hosts))
+ $default_hosts = array('');
+
+$i = 0;
+foreach ($default_hosts as $host) {
+ echo '<div id="defaulthostentry'.$i.'">' . $text_imaphost->show($host);
+ if ($i++ > 0)
+ echo '<a href="#" onclick="removehostfield(this.parentNode);return false" class="removelink" title="Remove this entry">remove</a>';
+ echo '</div>';
+}
+
+?>
+</div>
+<div><a href="javascript:addhostfield()" class="addlink" title="Add another field">add</a></div>
+
+<p class="hint">Leave blank to show a textbox at login. To use SSL/IMAPS connection, type ssl://hostname</p>
+</dd>
+
+<dt class="propname">default_port</dt>
+<dd>
+<?php
+
+$text_imapport = new textfield(array('name' => '_default_port', 'size' => 6, 'id' => "cfgimapport"));
+echo $text_imapport->show($RCI->getprop('default_port'));
+
+?>
+<div>TCP port used for IMAP connections</div>
+</dd>
+
+<dt class="propname">username_domain</dt>
+<dd>
+<?php
+
+$text_userdomain = new textfield(array('name' => '_username_domain', 'size' => 30, 'id' => "cfguserdomain"));
+echo $text_userdomain->show($RCI->getprop('username_domain'));
+
+?>
+<div>Automatically add this domain to user names for login</div>
+
+<p class="hint">Only for IMAP servers that require full e-mail addresses for login</p>
+</dd>
+
+<dt class="propname">auto_create_user</dt>
+<dd>
+<?php
+
+$check_autocreate = new checkbox(array('name' => '_auto_create_user', 'id' => "cfgautocreate"));
+echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), array('value' => 1));
+
+?>
+<label for="cfgautocreate">Automatically create a new RoundCube user when log-in the first time</label><br />
+
+<p class="hint">A user is authenticated by the IMAP server but it requires a local record to store settings
+and contacts. With this option enabled a new user record will automatically be created once the IMAP login succeeds.</p>
+
+<p class="hint">If this option is disabled, the login only succeeds if there's a matching user-record in the local RoundCube database
+what means that you have to create those records manually or disable this option after the first login.</p>
+</dd>
+
+<dt class="propname">sent_mbox</dt>
+<dd>
+<?php
+
+$text_sentmbox = new textfield(array('name' => '_sent_mbox', 'size' => 20, 'id' => "cfgsentmbox"));
+echo $text_sentmbox->show($RCI->getprop('sent_mbox'));
+
+?>
+<div>Store sent messages is this folder</div>
+
+<p class="hint">Leave blank if sent messages should not be stored</p>
+</dd>
+
+<dt class="propname">trash_mbox</dt>
+<dd>
+<?php
+
+$text_trashmbox = new textfield(array('name' => '_trash_mbox', 'size' => 20, 'id' => "cfgtrashmbox"));
+echo $text_trashmbox->show($RCI->getprop('trash_mbox'));
+
+?>
+<div>Move messages to this folder when deleting them</div>
+
+<p class="hint">Leave blank if they should be deleted directly</p>
+</dd>
+
+<dt class="propname">drafts_mbox</dt>
+<dd>
+<?php
+
+$text_draftsmbox = new textfield(array('name' => '_drafts_mbox', 'size' => 20, 'id' => "cfgdraftsmbox"));
+echo $text_draftsmbox->show($RCI->getprop('drafts_mbox'));
+
+?>
+<div>Store draft messages is this folder</div>
+</dd>
+
+</dl>
+</fieldset>
+
+
+<fieldset>
+<legend>SMTP Settings</legend>
+<dl class="configblock" id="cgfblocksmtp">
+<dt class="propname">smtp_server</dt>
+<dd>
+<?php
+
+$text_smtphost = new textfield(array('name' => '_smtp_server', 'size' => 30, 'id' => "cfgsmtphost"));
+echo $text_smtphost->show($RCI->getprop('smtp_server'));
+
+?>
+<div>Use this host for sending mails</div>
+
+<p class="hint">To use SSL connection, set ssl://smtp.host.com. If left blank, the PHP mail() function is used</p>
+</dd>
+
+<dt class="propname">smtp_port</dt>
+<dd>
+<?php
+
+$text_smtpport = new textfield(array('name' => '_smtp_port', 'size' => 6, 'id' => "cfgsmtpport"));
+echo $text_smtpport->show($RCI->getprop('smtp_port'));
+
+?>
+<div>SMTP port (default is 25; 465 for SSL)</div>
+</dd>
+
+<dt class="propname">smtp_user/smtp_pass</dt>
+<dd>
+<?php
+
+$text_smtpuser = new textfield(array('name' => '_smtp_user', 'size' => 20, 'id' => "cfgsmtpuser"));
+$text_smtppass = new textfield(array('name' => '_smtp_pass', 'size' => 20, 'id' => "cfgsmtppass"));
+echo $text_smtpuser->show($RCI->getprop('smtp_user'));
+echo $text_smtppass->show($RCI->getprop('smtp_pass'));
+
+?>
+<div>SMTP username and password (if required)</div>
+<p>
+<?php
+
+$check_smtpuser = new checkbox(array('name' => '_smtp_user_u', 'id' => "cfgsmtpuseru"));
+echo $check_smtpuser->show($RCI->getprop('smtp_user') == '%u' || $_POST['_smtp_user_u'] ? 1 : 0, array('value' => 1));
+
+?>
+<label for="cfgsmtpuseru">Use the current IMAP username and password for SMTP authentication</label>
+</p>
+</dd>
+<!--
+<dt class="propname">smtp_auth_type</dt>
+<dd>
+<?php
+/*
+$select_smtpauth = new select(array('name' => '_smtp_auth_type', 'id' => "cfgsmtpauth"));
+$select_smtpauth->add(array('(auto)', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN'), array('0', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN'));
+echo $select_smtpauth->show(intval($RCI->getprop('smtp_auth_type')));
+*/
+?>
+<div>Method to authenticate at the SMTP server. Choose (auto) if you don't know what this is</div>
+</dd>
+-->
+<dt class="propname">smtp_log</dt>
+<dd>
+<?php
+
+$check_smtplog = new checkbox(array('name' => '_smtp_log', 'id' => "cfgsmtplog"));
+echo $check_smtplog->show(intval($RCI->getprop('smtp_log')), array('value' => 1));
+
+?>
+<label for="cfgsmtplog">Log sent messages in <tt>logs/sendmail</tt></label><br />
+</dd>
+
+</dl>
+</fieldset>
+
+
+<fieldset>
+<legend>Display settings & user prefs</legend>
+<dl class="configblock" id="cgfblockdisplay">
+
+<dt class="propname">locale_string</dt>
+<dd>
+<?php
+
+$input_locale = new textfield(array('name' => '_locale_string', 'size' => 6, 'id' => "cfglocale"));
+echo $input_locale->show($RCI->getprop('locale_string'));
+
+?>
+<div>The default locale setting. This also defines the language of the login screen.</div>
+<p class="hint">Enter a <a href="http://www.faqs.org/rfcs/rfc1766">RFC1766</a> formatted locale name. Examples: en_US, de, de_CH, fr, pt_BR</p>
+</dd>
+
+<dt class="propname">pagesize <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$input_pagesize = new textfield(array('name' => '_pagesize', 'size' => 6, 'id' => "cfgpagesize"));
+echo $input_pagesize->show($RCI->getprop('pagesize'));
+
+?>
+<div>Show up to X items in list view.</div>
+</dd>
+
+<dt class="propname">prefer_html <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$check_htmlview = new checkbox(array('name' => '_prefer_html', 'id' => "cfghtmlview", 'value' => 1));
+echo $check_htmlview->show(intval($RCI->getprop('prefer_html')));
+
+?>
+<label for="cfghtmlview">Prefer displaying HTML messages</label><br />
+</dd>
+
+<dt class="propname">preview_pane <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$check_prevpane = new checkbox(array('name' => '_preview_pane', 'id' => "cfgprevpane", 'value' => 1));
+echo $check_prevpane->show(intval($RCI->getprop('preview_pane')));
+
+?>
+<label for="cfgprevpane">If preview pane is enabled</label><br />
+</dd>
+
+<dt class="propname">htmleditor <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$check_htmlcomp = new checkbox(array('name' => '_htmleditor', 'id' => "cfghtmlcompose", 'value' => 1));
+echo $check_htmlcomp->show(intval($RCI->getprop('htmleditor')));
+
+?>
+<label for="cfghtmlcompose">Compose HTML formatted messages</label><br />
+</dd>
+
+<dt class="propname">draft_autosave <span class="userconf">*</span></dt>
+<dd>
+<label for="cfgautosave">Save compose message every</label>
+<?php
+
+$select_autosave = new select(array('name' => '_draft_autosave', 'id' => 'cfgautosave'));
+$select_autosave->add('never', 0);
+foreach (array(3, 5, 10) as $i => $min)
+ $select_autosave->add("$min min", $min*60);
+
+echo $select_autosave->show(intval($RCI->getprop('draft_autosave')));
+
+?>
+</dd>
+
+</dl>
+
+<p class="hint"><span class="userconf">*</span> These settings are defaults for the user preferences</p>
+</fieldset>
+
+<?php
+
+echo '<p><input type="submit" name="submit" value="' . ($RCI->configured ? 'UPDATE' : 'CREATE') . ' CONFIG" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';
+
+?>
+</form>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>RoundCube Webmail Installer</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" type="text/css" href="styles.css" />
+<script type="text/javascript" src="client.js"></script>
+</head>
+
+<body>
+
+<div id="banner">
+ <div id="header">
+ <div class="banner-logo"><a href="http://www.roundcube.net"><img src="images/banner_logo.gif" width="200" height="56" border="0" alt="RoundCube Webmal Project" /></a></div>
+ <div class="banner-right"><img src="images/banner_right.gif" width="10" height="56" alt="" /></div>
+ </div>
+ <div id="topnav">
+ <a href="http://trac.roundcube.net/wiki/Howto_Install">How-to Wiki</a>
+ </div>
+ </div>
+
+<div id="content">
+
+<h1>RoundCube Webmail Installer</h1>
+
+<?php
+
+ ini_set('error_reporting', E_ALL&~E_NOTICE);
+ ini_set('display_errors', 1);
+
+ $docroot = realpath(dirname(__FILE__) . '/../');
+ $include_path = $docroot . '/program/lib' . PATH_SEPARATOR . $docroot . '/program' . PATH_SEPARATOR . ini_get('include_path');
+ set_include_path($include_path);
+
+ require_once 'rcube_install.php';
+ $RCI = rcube_install::get_instance();
+ $RCI->load_config();
+
+?>
+
+<ol id="progress">
+<?php
+
+ foreach (array('Check environment', 'Create config', 'Test config') as $i => $item) {
+ $j = $i + 1;
+ $link = ($RCI->step >= $j || $RCI->configured) ? '<a href="./index.php?_step='.$j.'">' . Q($item) . '</a>' : Q($item);
+ printf('<li class="step%d%s">%s</li>', $j+1, $RCI->step > $j ? ' passed' : ($RCI->step == $j ? ' current' : ''), $link);
+ }
+?>
+</ol>
+
+<?php
+
+$include_steps = array('welcome.html', 'check.php', 'config.php', 'test.php');
+
+if ($include_steps[$RCI->step]) {
+ include $include_steps[$RCI->step];
+}
+else {
+ header("HTTP/1.0 404 Not Found");
+ echo '<h2 class="error">Invalid step</h2>';
+}
+
+?>
+</div>
+
+<div id="footer">
+ Installer by the RoundCube Dev Team. Copyright © 2008 - Published under the GNU Public License;
+ Icons by <a href="http://famfamfam.com">famfamfam</a>
+</div>
+</body>
+</html>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | rcube_install.php |
+ | |
+ | This file is part of the RoundCube Webmail package |
+ | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU Public License |
+ +-----------------------------------------------------------------------+
+
+ $Id: $
+
+*/
+
+
+/**
+ * Class to control the installation process of the RoundCube Webmail package
+ *
+ * @category Install
+ * @package RoundCube
+ * @author Thomas Bruederli
+ */
+class rcube_install
+{
+ var $step;
+ var $is_post = false;
+ var $failures = 0;
+ var $config = array();
+ var $configured = false;
+ var $last_error = null;
+ var $email_pattern = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9])';
+ var $config_props = array();
+
+ /**
+ * Constructor
+ */
+ function rcube_install()
+ {
+ $this->step = intval($_REQUEST['_step']);
+ $this->is_post = $_SERVER['REQUEST_METHOD'] == 'POST';
+ }
+
+ /**
+ * Singleton getter
+ */
+ function get_instance()
+ {
+ static $inst;
+
+ if (!$inst)
+ $inst = new rcube_install();
+
+ return $inst;
+ }
+
+ /**
+ * Read the default config files and store properties
+ */
+ function load_defaults()
+ {
+ $this->_load_config('.php.dist');
+ }
+
+
+ /**
+ * Read the local config files and store properties
+ */
+ function load_config()
+ {
+ $this->config = array();
+ $this->_load_config('.php');
+ $this->configured = !empty($this->config);
+ }
+
+ /**
+ * Read the default config file and store properties
+ * @access private
+ */
+ function _load_config($suffix)
+ {
+ @include '../config/main.inc' . $suffix;
+ if (is_array($rcmail_config)) {
+ $this->config += $rcmail_config;
+ }
+
+ @include '../config/db.inc'. $suffix;
+ if (is_array($rcmail_config)) {
+ $this->config += $rcmail_config;
+ }
+ }
+
+
+ /**
+ * Getter for a certain config property
+ *
+ * @param string Property name
+ * @param string Default value
+ * @return string The property value
+ */
+ function getprop($name, $default = '')
+ {
+ $value = $this->is_post && (isset($_POST["_$name"]) || $this->config_props[$name]) ? $_POST["_$name"] : $this->config[$name];
+
+ if ($name == 'des_key' && !isset($_REQUEST["_$name"]))
+ $value = rcube_install::random_key(24);
+
+ return $value !== null && $value !== '' ? $value : $default;
+ }
+
+
+ /**
+ * Take the default config file and replace the parameters
+ * with the submitted form data
+ *
+ * @param string Which config file (either 'main' or 'db')
+ * @return string The complete config file content
+ */
+ function create_config($which)
+ {
+ $out = file_get_contents("../config/{$which}.inc.php.dist");
+
+ if (!$out)
+ return '[Warning: could not read the template file]';
+
+ foreach ($this->config as $prop => $default) {
+ $value = (isset($_POST["_$prop"]) || $this->config_props[$prop]) ? $_POST["_$prop"] : $default;
+
+ // convert some form data
+ if ($prop == 'debug_level' && is_array($value)) {
+ $val = 0;
+ foreach ($value as $i => $dbgval)
+ $val += intval($dbgval);
+ $value = $val;
+ }
+ else if ($prop == 'db_dsnw' && !empty($_POST['_dbtype'])) {
+ if ($_POST['_dbtype'] == 'sqlite')
+ $value = sprintf('%s://%s?mode=0646', $_POST['_dbtype'], $_POST['_dbname']{0} == '/' ? '/' . $_POST['_dbname'] : $_POST['_dbname']);
+ else
+ $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'], $_POST['_dbuser'], $_POST['_dbpass'], $_POST['_dbhost'], $_POST['_dbname']);
+ }
+ else if ($prop == 'smtp_auth_type' && $value == '0') {
+ $value = '';
+ }
+ else if ($prop == 'default_host' && is_array($value)) {
+ $value = rcube_install::_clean_array($value);
+ if (count($value) <= 1)
+ $value = $value[0];
+ }
+ else if ($prop == 'smtp_user' && !empty($_POST['_smtp_user_u'])) {
+ $value = '%u';
+ }
+ else if ($prop == 'smtp_pass' && !empty($_POST['_smtp_user_u'])) {
+ $value = '%p';
+ }
+ else if (is_bool($default)) {
+ $value = (bool)$value;
+ }
+ else if (is_numeric($value)) {
+ $value = intval($value);
+ }
+
+ // skip this property
+ if ($value == $default)
+ continue;
+
+ // replace the matching line in config file
+ $out = preg_replace(
+ '/(\$rcmail_config\[\''.preg_quote($prop).'\'\])\s+=\s+(.+);/Uie',
+ "'\\1 = ' . var_export(\$value, true) . ';'",
+ $out);
+ }
+
+ return $out;
+ }
+
+
+ /**
+ * Getter for the last error message
+ *
+ * @return string Error message or null if none exists
+ */
+ function get_error()
+ {
+ return $this->last_error['message'];
+ }
+
+
+ /**
+ * Return a list with all imap hosts configured
+ *
+ * @return array Clean list with imap hosts
+ */
+ function get_hostlist()
+ {
+ $default_hosts = (array)$this->getprop('default_host');
+ $out = array();
+
+ foreach ($default_hosts as $key => $name) {
+ if (!empty($name))
+ $out[] = is_numeric($key) ? $name : $key;
+ }
+
+ return $out;
+ }
+
+
+ /**
+ * Display OK status
+ *
+ * @param string Test name
+ * @param string Confirm message
+ */
+ function pass($name, $message = '')
+ {
+ echo Q($name) . ': <span class="success">OK</span>';
+ $this->_showhint($message);
+ }
+
+
+ /**
+ * Display an error status and increase failure count
+ *
+ * @param string Test name
+ * @param string Error message
+ * @param string URL for details
+ */
+ function fail($name, $message = '', $url = '')
+ {
+ $this->failures++;
+
+ echo Q($name) . ': <span class="fail">NOT OK</span>';
+ $this->_showhint($message, $url);
+ }
+
+
+ /**
+ * Display warning status
+ *
+ * @param string Test name
+ * @param string Warning message
+ * @param string URL for details
+ */
+ function na($name, $message = '', $url = '')
+ {
+ echo Q($name) . ': <span class="na">NOT AVAILABLE</span>';
+ $this->_showhint($message, $url);
+ }
+
+
+ function _showhint($message, $url = '')
+ {
+ $hint = Q($message);
+
+ if ($url)
+ $hint .= ($hint ? '; ' : '') . 'See <a href="' . Q($url) . '" target="_blank">' . Q($url) . '</a>';
+
+ if ($hint)
+ echo '<span class="indent">(' . $hint . ')</span>';
+ }
+
+
+ function _clean_array($arr)
+ {
+ $out = array();
+
+ foreach (array_unique($arr) as $i => $val)
+ if (!empty($val))
+ $out[] = $val;
+
+ return $out;
+ }
+
+
+ /**
+ * Initialize the database with the according schema
+ *
+ * @param object rcube_db Database connection
+ * @return boolen True on success, False on error
+ */
+ function init_db($DB)
+ {
+ $db_map = array('pgsql' => 'postgres', 'mysqli' => 'mysql');
+ $engine = isset($db_map[$DB->db_provider]) ? $db_map[$DB->db_provider] : $DB->db_provider;
+
+ // find out db version
+ if ($engine == 'mysql') {
+ $DB->query('SELECT VERSION() AS version');
+ $sql_arr = $DB->fetch_assoc();
+ $version = floatval($sql_arr['version']);
+
+ if ($version >= 4.1)
+ $engine = 'mysql5';
+ }
+
+ // read schema file from /SQL/*
+ $fname = "../SQL/$engine.initial.sql";
+ if ($lines = @file($fname, FILE_SKIP_EMPTY_LINES)) {
+ $buff = '';
+ foreach ($lines as $i => $line) {
+ if (eregi('^--', $line))
+ continue;
+
+ $buff .= $line . "\n";
+ if (eregi(';$', trim($line))) {
+ $DB->query($buff);
+ $buff = '';
+ }
+ }
+ }
+ else {
+ $this->fail('DB Schema', "Cannot read the schema file: $fname");
+ return false;
+ }
+
+ if ($err = $this->get_error()) {
+ $this->fail('DB Schema', "Error creating database schema: $err");
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Handler for RoundCube errors
+ */
+ function raise_error($p)
+ {
+ $this->last_error = $p;
+ }
+
+
+ /**
+ * Generarte a ramdom string to be used as encryption key
+ *
+ * @param int Key length
+ * @return string The generated random string
+ * @static
+ */
+ function random_key($length)
+ {
+ $alpha = 'ABCDEFGHIJKLMNOPQERSTUVXYZabcdefghijklmnopqrtsuvwxyz0123456789+*%&?!$-_=';
+ $out = '';
+
+ for ($i=0; $i < $length; $i++)
+ $out .= $alpha{rand(0, strlen($alpha)-1)};
+
+ return $out;
+ }
+
+}
+
+
+/**
+ * Shortcut function for htmlentities()
+ *
+ * @param string String to quote
+ * @return string The html-encoded string
+ */
+function Q($string)
+{
+ return htmlentities($string);
+}
+
+
+/**
+ * Fake rinternal error handler to catch errors
+ */
+function raise_error($p)
+{
+ $rci = rcube_install::get_instance();
+ $rci->raise_error($p);
+}
+
--- /dev/null
+
+body {
+ margin: 1em 2em 2em 2em;
+ background-color: #fff;
+}
+
+body, td, th, div, p {
+ font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+ font-size: small;
+ color: #000;
+}
+
+#banner {
+ position: relative;
+}
+
+#header {
+ position: relative;
+ height: 56px;
+ background: url('images/banner_bg.gif') top left repeat-x #fff;
+}
+
+#header div.banner-logo {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ width: 200px;
+ height: 56px;
+}
+
+#header div.banner-right {
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ width: 10px;
+ height: 56px;
+}
+
+#topnav {
+ position: absolute;
+ right: 20px;
+ bottom: 8px;
+ text-align: right;
+ color: #ebebeb;
+ font-size: smaller;
+}
+
+#topnav a {
+ color: #ebebeb;
+ font-size: 11px;
+ text-decoration: none;
+}
+
+#topnav a:hover {
+ text-decoration: underline;
+}
+
+#content {
+ margin: 8px 20px;
+}
+
+#footer {
+ margin: 2em 20px 1em 20px;
+ padding-top: 0.6em;
+ font-size: smaller;
+ text-align: center;
+ border-top: 1px dotted #999;
+}
+
+#progress {
+ margin-bottom: 2em;
+ border: 1px solid #aaa;
+ background-color: #f9f9f9;
+}
+
+#progress:after {
+ content: ".";
+ display: block;
+ height: 0;
+ font-size: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+#progress li {
+ float: left;
+ color: #999;
+ padding: 1em 5em 1em 0.2em;
+}
+
+#progress li a {
+ color: #999;
+ text-decoration: none;
+}
+
+#progress li a:hover {
+ text-decoration: underline;
+}
+
+#progress li.current {
+ color: #000;
+ font-weight: bold;
+}
+
+#progress li.passed,
+#progress li.passed a,
+#progress li.current a {
+ color: #333;
+}
+
+fieldset {
+ margin-bottom: 1.5em;
+ border: 1px solid #aaa;
+ background-color: #f9f9f9;
+}
+
+fieldset p.hint {
+ margin-top: 0.5em;
+}
+
+legend {
+ font-size: 1.1em;
+ font-weight: bold;
+}
+
+textarea.configfile {
+ background-color: #f9f9f9;
+ font-family: monospace;
+ font-size: 9pt;
+ width: 100%;
+ height: 30em;
+}
+
+dt.propname {
+ font-family: monospace;
+ font-size: 9pt;
+ margin-top: 1em;
+ margin-bottom: 0.6em;
+}
+
+dd div {
+ margin-top: 0.3em;
+}
+
+dd label {
+ padding-left: 0.5em;
+}
+
+th {
+ text-align: left;
+}
+
+ul li {
+ margin: 0.3em 0 0.4em -1em;
+}
+
+ul li ul li {
+ margin-bottom: 0.2em;
+}
+
+h3 {
+ font-size: 1.1em;
+ margin-top: 1.5em;
+ margin-bottom: 0.6em;
+}
+
+h4 {
+ margin-bottom: 0.2em;
+}
+
+a.blocktoggle {
+ color: #666;
+ text-decoration: none;
+}
+
+a.addlink {
+ color: #999;
+ font-size: 0.9em;
+ padding: 1px 0 1px 20px;
+ background: url('images/add.png') top left no-repeat;
+ text-decoration: none;
+}
+
+a.removelink {
+ color: #999;
+ font-size: 0.9em;
+ padding: 1px 0 1px 24px;
+ background: url('images/delete.png') 4px 0 no-repeat;
+ text-decoration: none;
+}
+
+.hint {
+ color: #666;
+ font-size: 0.95em;
+}
+
+.success {
+ color: #006400;
+ font-weight: bold !important;
+}
+
+.fail {
+ color: #ff0000 !important;
+ font-weight: bold !important;
+}
+
+.na {
+ color: #f60;
+ font-weight: bold;
+}
+
+.indent {
+ padding-left: 0.8em;
+}
+
+.notice {
+ padding: 1em;
+ background-color: #f7fdcb;
+ border: 2px solid #c2d071;
+}
+
+.warning {
+ padding: 1em;
+ background-color: #ef9398;
+ border: 2px solid #dc5757;
+}
+
+.userconf {
+ color: #00c;
+ font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+}
--- /dev/null
+<form action="index.php?_step=3" method="post">
+
+<h3>Check config files</h3>
+<?php
+
+require_once 'include/rcube_html.inc';
+
+$read_main = is_readable('../config/main.inc.php');
+$read_db = is_readable('../config/db.inc.php');
+
+if ($read_main && !empty($RCI->config)) {
+ $RCI->pass('main.inc.php');
+}
+else if ($read_main) {
+ $RCI->fail('main.inc.php', 'Syntax error');
+}
+else if (!$read_main) {
+ $RCI->fail('main.inc.php', 'Unable to read file. Did you create the config files?');
+}
+echo '<br />';
+
+if ($read_db && !empty($RCI->config['db_table_users'])) {
+ $RCI->pass('db.inc.php');
+}
+else if ($read_db) {
+ $RCI->fail('db.inc.php', 'Syntax error');
+}
+else if (!$read_db) {
+ $RCI->fail('db.inc.php', 'Unable to read file. Did you create the config files?');
+}
+
+?>
+
+<h3>Check configured database settings</h3>
+<?php
+
+$db_working = false;
+if (!empty($RCI->config)) {
+ if (!empty($RCI->config['db_backend']) && !empty($RCI->config['db_dsnw'])) {
+
+ echo 'Backend: ';
+ echo 'PEAR::' . strtoupper($RCI->config['db_backend']) . '<br />';
+
+ $_class = 'rcube_' . strtolower($RCI->config['db_backend']);
+ require_once 'include/' . $_class . '.inc';
+
+ $DB = new $_class($RCI->config['db_dsnw'], '', false);
+ $DB->db_connect('w');
+ if (!($db_error_msg = $DB->is_error())) {
+ $RCI->pass('DSN (write)');
+ echo '<br />';
+ $db_working = true;
+ }
+ else {
+ $RCI->fail('DSN (write)', $db_error_msg);
+ echo '<p class="hint">Make sure that the configured database extists and that the user as write privileges<br />';
+ echo 'DSN: ' . $RCI->config['db_dsnw'] . '</p>';
+ if ($RCI->config['db_backend'] == 'mdb2')
+ echo '<p class="hint">There are known problems with MDB2 running on PHP 4. Try setting <tt>db_backend</tt> to \'db\' instead</p>';
+ }
+ }
+ else {
+ $RCI->fail('DSN (write)', 'not set');
+ }
+}
+else {
+ $RCI->fail('Config', 'Could not read config files');
+}
+
+// initialize db with schema found in /SQL/*
+if ($db_working && $_POST['initdb']) {
+ if (!($success = $RCI->init_db($DB))) {
+ $db_working = false;
+ echo '<p class="warning">Please try to inizialize the database manually as described in the INSTALL guide.
+ Make sure that the configured database extists and that the user as write privileges</p>';
+ }
+}
+
+// test database
+if ($db_working) {
+ $db_read = $DB->query("SELECT count(*) FROM {$RCI->config['db_table_users']}");
+ if (!$db_read) {
+ $RCI->fail('DB Schema', "Database not initialized");
+ $db_working = false;
+ echo '<p><input type="submit" name="initdb" value="Initialize database" /></p>';
+ }
+ else {
+ $RCI->pass('DB Schema');
+ }
+ echo '<br />';
+}
+
+// more database tests
+if ($db_working) {
+ // write test
+ $db_write = $DB->query("INSERT INTO {$RCI->config['db_table_cache']} (session_id, cache_key, data, user_id) VALUES (?, ?, ?, 0)", '1234567890abcdef', 'test', 'test');
+ $insert_id = $DB->insert_id($RCI->config['db_sequence_cache']);
+
+ if ($db_write && $insert_id) {
+ $RCI->pass('DB Write');
+ $DB->query("DELETE FROM {$RCI->config['db_table_cache']} WHERE cache_id=?", $insert_id);
+ }
+ else {
+ $RCI->fail('DB Write', $RCI->get_error());
+ }
+ echo '<br />';
+
+ // check timezone settings
+ $tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db';
+ $tz_db = $DB->query($tz_db);
+ $tz_db = $DB->fetch_assoc($tz_db);
+ $tz_db = (int) $tz_db['tz_db'];
+ $tz_local = (int) time();
+ $tz_diff = $tz_local - $tz_db;
+
+ // sometimes db and web servers are on separate hosts, so allow a 30 minutes delta
+ if (abs($tz_diff) > 1800) {
+ $RCI->fail('DB Time', "Database time differs {$td_ziff}s from PHP time");
+ }
+ else {
+ $RCI->pass('DB Time');
+ }
+}
+
+?>
+
+<h3>Test SMTP settings</h3>
+
+<p>
+Server: <?php echo $RCI->getprop('smtp_server', 'PHP mail()'); ?><br />
+Port: <?php echo $RCI->getprop('smtp_port'); ?><br />
+
+<?php
+
+if ($RCI->getprop('smtp_server')) {
+ $user = $RCI->getprop('smtp_user', '(none)');
+ $pass = $RCI->getprop('smtp_pass', '(none)');
+
+ if ($user == '%u') {
+ $user_field = new textfield(array('name' => '_user'));
+ $user = $user_field->show($_POST['_user']);
+ }
+ if ($pass == '%p') {
+ $pass_field = new passwordfield(array('name' => '_pass'));
+ $pass = $pass_field->show();
+ }
+
+ echo "User: $user<br />";
+ echo "Password: $pass<br />";
+}
+
+$from_field = new textfield(array('name' => '_from', 'id' => 'sendmailfrom'));
+$to_field = new textfield(array('name' => '_to', 'id' => 'sendmailto'));
+
+?>
+</p>
+
+<?php
+
+if (isset($_POST['sendmail']) && !empty($_POST['_from']) && !empty($_POST['_to'])) {
+
+ require_once 'lib/rc_mail_mime.inc';
+ require_once 'include/rcube_smtp.inc';
+
+ echo '<p>Trying to send email...<br />';
+
+ if (preg_match('/^' . $RCI->email_pattern . '$/i', trim($_POST['_from'])) &&
+ preg_match('/^' . $RCI->email_pattern . '$/i', trim($_POST['_to']))) {
+
+ $headers = array(
+ 'From' => trim($_POST['_from']),
+ 'To' => trim($_POST['_to']),
+ 'Subject' => 'Test message from RoundCube',
+ );
+
+ $body = 'This is a test to confirm that RoundCube can send email.';
+ $smtp_response = array();
+
+ // send mail using configured SMTP server
+ if ($RCI->getprop('smtp_server')) {
+ $CONFIG = $RCI->config;
+
+ if (!empty($_POST['_user']))
+ $CONFIG['smtp_user'] = $_POST['_user'];
+ if (!empty($_POST['_pass']))
+ $CONFIG['smtp_pass'] = $_POST['_pass'];
+
+ $mail_object = new rc_mail_mime();
+ $send_headers = $mail_object->headers($headers);
+
+ $status = smtp_mail($headers['From'], $headers['To'],
+ ($foo = $mail_object->txtHeaders($send_headers)),
+ $body, $smtp_response);
+ }
+ else { // use mail()
+ $header_str = 'From: ' . $headers['From'];
+
+ if (ini_get('safe_mode'))
+ $status = mail($headers['To'], $headers['Subject'], $body, $header_str);
+ else
+ $status = mail($headers['To'], $headers['Subject'], $body, $header_str, '-f'.$headers['From']);
+
+ if (!$status)
+ $smtp_response[] = 'Mail delivery with mail() failed. Check your error logs for details';
+ }
+
+ if ($status) {
+ $RCI->pass('SMTP send');
+ }
+ else {
+ $RCI->fail('SMTP send', join('; ', $smtp_response));
+ }
+ }
+ else {
+ $RCI->fail('SMTP send', 'Invalid sender or recipient');
+ }
+}
+
+echo '</p>';
+
+?>
+
+<table>
+<tbody>
+ <tr>
+ <td><label for="sendmailfrom">Sender</label></td>
+ <td><?php echo $from_field->show($_POST['_from']); ?></td>
+ </tr>
+ <tr>
+ <td><label for="sendmailto">Recipient</label></td>
+ <td><?php echo $to_field->show($_POST['_to']); ?></td>
+ </tr>
+</tbody>
+</table>
+
+<p><input type="submit" name="sendmail" value="Send test mail" /></p>
+
+
+<h3>Test IMAP configuration</h3>
+
+<?php
+
+$default_hosts = $RCI->get_hostlist();
+if (!empty($default_hosts)) {
+ $host_field = new select(array('name' => '_host', 'id' => 'imaphost'));
+ $host_field->add($default_hosts);
+}
+else {
+ $host_field = new textfield(array('name' => '_host', 'id' => 'imaphost'));
+}
+
+$user_field = new textfield(array('name' => '_user', 'id' => 'imapuser'));
+$pass_field = new passwordfield(array('name' => '_pass', 'id' => 'imappass'));
+
+?>
+
+<table>
+<tbody>
+ <tr>
+ <td><label for="imaphost">Server</label></td>
+ <td><?php echo $host_field->show($_POST['_host']); ?></td>
+ </tr>
+ <tr>
+ <td>Port</td>
+ <td><?php echo $RCI->getprop('default_port'); ?></td>
+ </tr>
+ <tr>
+ <td><label for="imapuser">Username</label></td>
+ <td><?php echo $user_field->show($_POST['_user']); ?></td>
+ </tr>
+ <tr>
+ <td><label for="imappass">Password</label></td>
+ <td><?php echo $pass_field->show(); ?></td>
+ </tr>
+</tbody>
+</table>
+
+<?php
+
+if (isset($_POST['imaptest']) && !empty($_POST['_host']) && !empty($_POST['_user'])) {
+
+ require_once 'include/rcube_imap.inc';
+
+ echo '<p>Connecting to ' . Q($_POST['_host']) . '...<br />';
+
+ $a_host = parse_url($_POST['_host']);
+ if ($a_host['host']) {
+ $imap_host = $a_host['host'];
+ $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null;
+ $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']);
+ }
+ else {
+ $imap_host = trim($_POST['_host']);
+ $imap_port = $RCI->getprop('default_port');
+ }
+
+ $imap = new rcube_imap(null);
+ if ($imap->connect($imap_host, $_POST['_user'], $_POST['_pass'], $imap_port, $imap_ssl)) {
+ $RCI->pass('IMAP connect', 'SORT capability: ' . ($imap->get_capability('SORT') ? 'yes' : 'no'));
+ $imap->close();
+ }
+ else {
+ $RCI->fail('IMAP connect', $RCI->get_error());
+ }
+}
+
+?>
+
+<p><input type="submit" name="imaptest" value="Check login" /></p>
+
+</form>
+
+<hr />
+
+<p class="warning">
+
+After completing the installation and the final tests please <b>remove</b> the whole
+installer folder from the document root of the webserver.<br />
+<br />
+
+These files may expose sensitive configuration data like server passwords and encryption keys
+to the public. Make sure you cannot access this installer from your browser.
+
+</p>
--- /dev/null
+<form action="index.php" methond="get">
+<input type="hidden" name="_step" value="1" />
+
+<p>Welcome to the interactive install script for the RoundCube Webmail package</p>
+<p>First let's check your local environment and find out if everything RoundCube needs is available.</p>
+
+<p>The basic requirements are:</p>
+<ul>
+ <li>PHP Version 4.3.1 or greater including
+ <ul>
+ <li>PCRE (perl compatible regular expression)</li>
+ <li>Session support</li>
+ <li>Sockets enabled</li>
+ <li>Libiconv (recommended)</li>
+ <li>OpenSSL (recommended)</li>
+ <li>FileInfo (optional)</li>
+ <li>Multibyte/mbstring (optional)</li>
+ <li>Mcrypt (optional)</li>
+ </ul>
+ </li>
+ <li>php.ini options:
+ <ul>
+ <li>error_reporting E_ALL & ~E_NOTICE (or lower)</li>
+ <li>file_uploads on (for attachment upload features)</li>
+ <li>session.auto_start needs to be off</li>
+ <li>magic_quotes_gpc off</li>
+ </ul>
+ </li>
+ <li>A MySQL or PostgreSQL database engine or the SQLite extension for PHP</li>
+ <li>An SMTP server (recommended) or PHP configured for mail delivery</li>
+</ul>
+
+<input type="submit" value="START INSTALLATION" />
+
+</form>
| program/include/main.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev, - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: main.inc 903 2007-10-22 06:52:13Z thomasb $
+ $Id: main.inc 1145 2008-02-27 13:39:22Z thomasb $
*/
*/
require_once('lib/utf7.inc');
+require_once('include/rcube_user.inc');
require_once('include/rcube_shared.inc');
require_once('include/rcmail_template.inc');
-
// define constannts for input reading
define('RCUBE_INPUT_GET', 0x0101);
define('RCUBE_INPUT_POST', 0x0102);
function rcmail_startup($task='mail')
{
global $sess_id, $sess_user_lang;
- global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB;
+ global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB, $USER;
// check client
$BROWSER = rcube_browser();
// load configuration
$CONFIG = rcmail_load_config();
+ // set session domain
+ if (isset($CONFIG['session_domain']) && !empty($CONFIG['session_domain'])) {
+ ini_set('session.cookie_domain', $CONFIG['session_domain']);
+ }
+
// set session garbage collecting time according to session_lifetime
if (!empty($CONFIG['session_lifetime']))
ini_set('session.gc_maxlifetime', ($CONFIG['session_lifetime']) * 120);
// set session vars global
$sess_user_lang = rcube_language_prop($_SESSION['user_lang']);
+ // create user object
+ $USER = new rcube_user($_SESSION['user_id']);
// overwrite config with user preferences
- if (is_array($_SESSION['user_prefs']))
- $CONFIG = array_merge($CONFIG, $_SESSION['user_prefs']);
+ $CONFIG = array_merge($CONFIG, (array)$USER->get_prefs());
// reset some session parameters when changing task
$valid = $CONFIG['ip_check'] ? $_SERVER['REMOTE_ADDR'] == $SESS_CLIENT_IP : true;
// check session filetime
- if (!empty($CONFIG['session_lifetime']) && isset($SESS_CHANGED) && $SESS_CHANGED + $CONFIG['session_lifetime']*60 < time())
+ if (!empty($CONFIG['session_lifetime']) && isset($SESS_CHANGED)
+ && $SESS_CHANGED + $CONFIG['session_lifetime']*60 < time())
$valid = false;
return $valid;
*/
function rcmail_kill_session()
{
- // save user preferences
- $a_user_prefs = $_SESSION['user_prefs'];
- if (!is_array($a_user_prefs))
- $a_user_prefs = array();
-
+ global $USER;
+
if ((isset($_SESSION['sort_col']) && $_SESSION['sort_col']!=$a_user_prefs['message_sort_col']) ||
(isset($_SESSION['sort_order']) && $_SESSION['sort_order']!=$a_user_prefs['message_sort_order']))
{
- $a_user_prefs['message_sort_col'] = $_SESSION['sort_col'];
- $a_user_prefs['message_sort_order'] = $_SESSION['sort_order'];
- rcmail_save_user_prefs($a_user_prefs);
+ $a_user_prefs = array('message_sort_col' => $_SESSION['sort_col'], 'message_sort_order' => $_SESSION['sort_order']);
+ $USER->save_prefs($a_user_prefs);
}
$_SESSION = array('user_lang' => $GLOBALS['sess_user_lang'], 'auth_time' => time(), 'temp' => true);
setcookie('sessauth', '-del-', time()-60);
+ $USER->reset();
}
if (strlen($CONFIG[$config_key]))
return $CONFIG[$config_key];
- return $table;
+ return $sequence;
}
*/
function rcmail_login($user, $pass, $host=NULL)
{
- global $CONFIG, $IMAP, $DB, $sess_user_lang;
+ global $CONFIG, $IMAP, $DB, $USER, $sess_user_lang;
$user_id = NULL;
if (!$host)
if ($a_host['host'])
{
$host = $a_host['host'];
- $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
+ $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null;
$imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']);
}
else
// try to resolve email address from virtuser table
if (!empty($CONFIG['virtuser_file']) && strpos($user, '@'))
- $user = rcmail_email2user($user);
+ $user = rcube_user::email2user($user);
// lowercase username if it's an e-mail address (#1484473)
if (strpos($user, '@'))
$user = strtolower($user);
// query if user already registered
- $sql_result = $DB->query(
- "SELECT user_id, username, language, preferences
- FROM ".get_table_name('users')."
- WHERE mail_host=? AND (username=? OR alias=?)",
- $host,
- $user,
- $user);
+ if ($existing = rcube_user::query($user, $host))
+ $USER = $existing;
// user already registered -> overwrite username
- if ($sql_arr = $DB->fetch_assoc($sql_result))
+ if ($USER->ID)
{
- $user_id = $sql_arr['user_id'];
- $user = $sql_arr['username'];
+ $user_id = $USER->ID;
+ $user = $USER->data['username'];
}
// exit if IMAP login failed
if (!($imap_login = $IMAP->connect($host, $user, $pass, $imap_port, $imap_ssl)))
- return FALSE;
+ return false;
// user already registered
- if ($user_id && !empty($sql_arr))
+ if ($USER->ID)
{
// get user prefs
- if (strlen($sql_arr['preferences']))
- {
- $user_prefs = unserialize($sql_arr['preferences']);
- $_SESSION['user_prefs'] = $user_prefs;
- array_merge($CONFIG, $user_prefs);
- }
-
+ $CONFIG = array_merge($CONFIG, (array)$USER->get_prefs());
// set user specific language
- if (strlen($sql_arr['language']))
- $sess_user_lang = $_SESSION['user_lang'] = $sql_arr['language'];
+ if (!empty($USER->data['language']))
+ $sess_user_lang = $_SESSION['user_lang'] = $USER->data['language'];
// update user's record
- $DB->query("UPDATE ".get_table_name('users')."
- SET last_login=".$DB->now()."
- WHERE user_id=?",
- $user_id);
+ $USER->touch();
}
// create new system user
else if ($CONFIG['auto_create_user'])
{
- $user_id = rcmail_create_user($user, $host);
+ if ($created = rcube_user::create($user, $host))
+ {
+ $USER = $created;
+
+ // get existing mailboxes
+ $a_mailboxes = $IMAP->list_mailboxes();
+ }
}
else
{
), true, false);
}
- if ($user_id)
+ if ($USER->ID)
{
- $_SESSION['user_id'] = $user_id;
+ $_SESSION['user_id'] = $USER->ID;
+ $_SESSION['username'] = $USER->data['username'];
$_SESSION['imap_host'] = $host;
$_SESSION['imap_port'] = $imap_port;
$_SESSION['imap_ssl'] = $imap_ssl;
- $_SESSION['username'] = $user;
$_SESSION['user_lang'] = $sess_user_lang;
$_SESSION['password'] = encrypt_passwd($pass);
$_SESSION['login_time'] = mktime();
// force reloading complete list of subscribed mailboxes
rcmail_set_imap_prop();
$IMAP->clear_cache('mailboxes');
- $IMAP->create_default_folders();
+
+ if ($CONFIG['create_default_folders'])
+ $IMAP->create_default_folders();
return TRUE;
}
}
-/**
- * Create new entry in users and identities table
- *
- * @param string User name
- * @param string IMAP host
- * @return mixed New user ID or False on failure
- */
-function rcmail_create_user($user, $host)
-{
- global $DB, $CONFIG, $IMAP;
-
- $user_email = '';
-
- // try to resolve user in virtusertable
- if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@'))
- $user_email = rcmail_user2email($user);
-
- $DB->query("INSERT INTO ".get_table_name('users')."
- (created, last_login, username, mail_host, alias, language)
- VALUES (".$DB->now().", ".$DB->now().", ?, ?, ?, ?)",
- strip_newlines($user),
- strip_newlines($host),
- strip_newlines($user_email),
- $_SESSION['user_lang']);
-
- if ($user_id = $DB->insert_id(get_sequence_name('users')))
- {
- $mail_domain = rcmail_mail_domain($host);
-
- if ($user_email=='')
- $user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
-
- $user_name = $user!=$user_email ? $user : '';
-
- // try to resolve the e-mail address from the virtuser table
- if (!empty($CONFIG['virtuser_query']) &&
- ($sql_result = $DB->query(preg_replace('/%u/', $DB->quote($user), $CONFIG['virtuser_query']))) &&
- ($DB->num_rows()>0))
- {
- while ($sql_arr = $DB->fetch_array($sql_result))
- {
- $DB->query("INSERT INTO ".get_table_name('identities')."
- (user_id, del, standard, name, email)
- VALUES (?, 0, 1, ?, ?)",
- $user_id,
- strip_newlines($user_name),
- preg_replace('/^@/', $user . '@', $sql_arr[0]));
- }
- }
- else
- {
- // also create new identity records
- $DB->query("INSERT INTO ".get_table_name('identities')."
- (user_id, del, standard, name, email)
- VALUES (?, 0, 1, ?, ?)",
- $user_id,
- strip_newlines($user_name),
- strip_newlines($user_email));
- }
-
- // get existing mailboxes
- $a_mailboxes = $IMAP->list_mailboxes();
- }
- else
- {
- raise_error(array(
- 'code' => 500,
- 'type' => 'php',
- 'line' => __LINE__,
- 'file' => __FILE__,
- 'message' => "Failed to create new user"), TRUE, FALSE);
- }
-
- return $user_id;
-}
-
-
/**
* Load virtuser table in array
*
}
-/**
- * Resolve username using a virtuser table
- *
- * @param string E-mail address to resolve
- * @return string Resolved IMAP username
- */
-function rcmail_email2user($email)
- {
- $user = $email;
- $r = rcmail_findinvirtual("^$email");
-
- for ($i=0; $i<count($r); $i++)
- {
- $data = $r[$i];
- $arr = preg_split('/\s+/', $data);
- if(count($arr)>0)
- {
- $user = trim($arr[count($arr)-1]);
- break;
- }
- }
-
- return $user;
- }
-
-
-/**
- * Resolve e-mail address from virtuser table
- *
- * @param string User name
- * @return string Resolved e-mail address
- */
-function rcmail_user2email($user)
- {
- $email = "";
- $r = rcmail_findinvirtual("$user$");
-
- for ($i=0; $i<count($r); $i++)
- {
- $data=$r[$i];
- $arr = preg_split('/\s+/', $data);
- if (count($arr)>0)
- {
- $email = trim($arr[0]);
- break;
- }
- }
-
- return $email;
- }
-
-
-/**
- * Write the given user prefs to the user's record
- *
- * @param mixed User prefs to save
- * @return boolean True on success, False on failure
- */
-function rcmail_save_user_prefs($a_user_prefs)
- {
- global $DB, $CONFIG, $sess_user_lang;
-
- // merge (partial) prefs array with existing settings
- $a_user_prefs += (array)$_SESSION['user_prefs'];
-
- $DB->query("UPDATE ".get_table_name('users')."
- SET preferences=?,
- language=?
- WHERE user_id=?",
- serialize($a_user_prefs),
- $sess_user_lang,
- $_SESSION['user_id']);
-
- if ($DB->affected_rows())
- {
- $_SESSION['user_prefs'] = $a_user_prefs;
- $CONFIG = array_merge($CONFIG, $a_user_prefs);
- return TRUE;
- }
-
- return FALSE;
- }
-
-
/**
* Overwrite action variable
*
* @return string Encryprted string
*/
function encrypt_passwd($pass)
- {
- $td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, "");
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
- mcrypt_generic_init($td, get_des_key(), $iv);
- $cypher = mcrypt_generic($td, $pass);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return base64_encode($cypher);
+{
+ if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) {
+ $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
+ mcrypt_generic_init($td, get_des_key(), $iv);
+ $cypher = mcrypt_generic($td, $pass);
+ mcrypt_generic_deinit($td);
+ mcrypt_module_close($td);
+ }
+ else if (function_exists('des')) {
+ $cypher = des(get_des_key(), $pass, 1, 0, NULL);
}
+ else {
+ $cypher = $pass;
+
+ raise_error(array(
+ 'code' => 500,
+ 'type' => 'php',
+ 'file' => __FILE__,
+ 'message' => "Could not convert encrypt password. Make sure Mcrypt is installed or lib/des.inc is available"
+ ), true, false);
+ }
+
+ return base64_encode($cypher);
+}
/**
* @return string Plain password
*/
function decrypt_passwd($cypher)
- {
- $td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, "");
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
- mcrypt_generic_init($td, get_des_key(), $iv);
- $pass = mdecrypt_generic($td, base64_decode($cypher));
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
+{
+ if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) {
+ $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
+ mcrypt_generic_init($td, get_des_key(), $iv);
+ $pass = mdecrypt_generic($td, base64_decode($cypher));
+ mcrypt_generic_deinit($td);
+ mcrypt_module_close($td);
+ }
+ else if (function_exists('des')) {
+ $pass = des(get_des_key(), base64_decode($cypher), 0, 0, NULL);
+ }
+ else {
+ $pass = base64_decode($cypher);
+ }
+
return preg_replace('/\x00/', '', $pass);
}
function rcube_charset_convert($str, $from, $to=NULL)
{
global $MBSTRING;
+ static $convert_warning = false;
$from = strtoupper($from);
$to = $to==NULL ? strtoupper(RCMAIL_CHARSET) : strtoupper($to);
+ $error = false; $conv = null;
if ($from==$to || $str=='' || empty($from))
return $str;
+
+ $aliases = array(
+ 'UNKNOWN-8BIT' => 'ISO-8859-15',
+ 'X-UNKNOWN' => 'ISO-8859-15',
+ 'X-USER-DEFINED' => 'ISO-8859-15',
+ 'ISO-8859-8-I' => 'ISO-8859-8',
+ 'KS_C_5601-1987' => 'EUC-KR',
+ 'GB2312' => 'GB18030'
+ );
// convert charset using iconv module
if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7')
{
- $iconv_map = array('KS_C_5601-1987' => 'EUC-KR');
- return iconv(($iconv_map[$from] ? $iconv_map[$from] : $from), ($iconv_map[$to] ? $iconv_map[$to] : $to) . "//IGNORE", $str);
+ return iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
}
// convert charset using mbstring module
if ($MBSTRING)
{
- $mb_map = array('UTF-7' => 'UTF7-IMAP', 'KS_C_5601-1987' => 'EUC-KR');
+ $mb_map = $aliases + array('UTF-7' => 'UTF7-IMAP');
// return if convert succeeded
if (($out = mb_convert_encoding($str, ($mb_map[$to] ? $mb_map[$to] : $to), ($mb_map[$from] ? $mb_map[$from] : $from))) != '')
return $out;
}
+
+
+ if (class_exists('utf8'))
+ $conv = new utf8();
// convert string to UTF-8
- if ($from=='UTF-7')
+ if ($from == 'UTF-7')
$str = utf7_to_utf8($str);
- else if (($from=='ISO-8859-1') && function_exists('utf8_encode'))
+ else if (($from == 'ISO-8859-1') && function_exists('utf8_encode'))
$str = utf8_encode($str);
+ else if ($from != 'UTF-8' && $conv)
+ {
+ $conv->loadCharset($from);
+ $str = $conv->strToUtf8($str);
+ }
+ 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)
+ {
+ $conv->loadCharset($to);
+ return $conv->utf8ToStr($str);
+ }
+ else if ($to != 'UTF-8')
+ $error = true;
+ // report error
+ if ($error && !$convert_warning)
+ {
+ raise_error(array(
+ 'code' => 500,
+ 'type' => 'php',
+ 'file' => __FILE__,
+ 'message' => "Could not convert string charset. Make sure iconv is installed or lib/utf8.class is available"
+ ), true, false);
+
+ $convert_warning = true;
+ }
+
// return UTF-8 string
return $str;
}
return $value;
}
+/**
+ * Remove all non-ascii and non-word chars
+ * except . and -
+ */
+function asciiwords($str)
+{
+ return preg_replace('/[^a-z0-9.-_]/i', '', $str);
+}
/**
* Remove single and double quotes from given string
// use value from post
if (!empty($_POST[$fname]))
- $value = $_POST[$fname];
+ $value = get_input_value($fname, RCUBE_INPUT_POST);
$out = $input->show($value);
return $styles;
}
+/**
+ * Try to autodetect operating system and find the correct line endings
+ *
+ * @return string The appropriate mail header delimiter
+ */
+function rcmail_header_delm()
+{
+ global $CONFIG;
+
+ // use the configured delimiter for headers
+ if (!empty($CONFIG['mail_header_delimiter']))
+ return $CONFIG['mail_header_delimiter'];
+ else if (strtolower(substr(PHP_OS, 0, 3)=='win'))
+ return "\r\n";
+ else if (strtolower(substr(PHP_OS, 0, 3)=='mac'))
+ return "\r\n";
+ else
+ return "\n";
+}
+
/**
* Compose a valid attribute string for HTML tags
// get mailbox list
$mbox_name = $IMAP->get_mailbox_name();
- // for these mailboxes we have localized labels
- $special_mailboxes = array('inbox', 'sent', 'drafts', 'trash', 'junk');
-
-
// build the folders tree
if (empty($a_mailboxes))
{
// var_dump($a_mailboxes);
if ($type=='select')
- $out .= rcmail_render_folder_tree_select($a_mailboxes, $special_mailboxes, $mbox_name, $attrib['maxlength']);
+ $out .= rcmail_render_folder_tree_select($a_mailboxes, $mbox_name, $attrib['maxlength']);
else
- $out .= rcmail_render_folder_tree_html($a_mailboxes, $special_mailboxes, $mbox_name, $attrib['maxlength']);
+ $out .= rcmail_render_folder_tree_html($a_mailboxes, $mbox_name, $attrib['maxlength']);
// rcube_print_time($mboxlist_start, 'render_folder_tree()');
* Return html for a structured list <ul> for the mailbox tree
* @access private
*/
-function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox_name, $maxlength, $nestLevel=0)
+function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $nestLevel=0)
{
global $COMM_PATH, $IMAP, $CONFIG, $OUTPUT;
$zebra_class = ($nestLevel*$idx)%2 ? 'even' : 'odd';
$title = '';
- $folder_lc = strtolower($folder['id']);
- if (in_array($folder_lc, $special))
- $foldername = rcube_label($folder_lc);
+ if ($folder_class = rcmail_folder_classname($folder['id']))
+ $foldername = rcube_label($folder_class);
else
{
$foldername = $folder['name'];
// shorten the folder name to a given length
if ($maxlength && $maxlength>1)
{
- $fname = abbrevate_string($foldername, $maxlength);
+ $fname = abbreviate_string($foldername, $maxlength);
if ($fname != $foldername)
$title = ' title="'.Q($foldername).'"';
$foldername = $fname;
// make folder name safe for ids and class names
$folder_id = preg_replace('/[^A-Za-z0-9\-_]/', '', $folder['id']);
- $class_name = preg_replace('/[^a-z0-9\-_]/', '', $folder_lc);
+ $class_name = preg_replace('/[^a-z0-9\-_]/', '', $folder_class ? $folder_class : strtolower($folder['id']));
// set special class for Sent, Drafts, Trash and Junk
if ($folder['id']==$CONFIG['sent_mbox'])
Q($foldername));
if (!empty($folder['folders']))
- $out .= "\n<ul>\n" . rcmail_render_folder_tree_html($folder['folders'], $special, $mbox_name, $maxlength, $nestLevel+1) . "</ul>\n";
+ $out .= "\n<ul>\n" . rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $maxlength, $nestLevel+1) . "</ul>\n";
$out .= "</li>\n";
$idx++;
* Return html for a flat list <select> for the mailbox tree
* @access private
*/
-function rcmail_render_folder_tree_select(&$arrFolders, &$special, &$mbox_name, $maxlength, $nestLevel=0)
+function rcmail_render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, $nestLevel=0)
{
global $IMAP, $OUTPUT;
$out = '';
foreach ($arrFolders as $key=>$folder)
{
- $folder_lc = strtolower($folder['id']);
- if (in_array($folder_lc, $special))
- $foldername = rcube_label($folder_lc);
+ if ($folder_class = rcmail_folder_classname($folder['id']))
+ $foldername = rcube_label($folder_class);
else
{
$foldername = $folder['name'];
// shorten the folder name to a given length
if ($maxlength && $maxlength>1)
- $foldername = abbrevate_string($foldername, $maxlength);
+ $foldername = abbreviate_string($foldername, $maxlength);
}
$out .= sprintf('<option value="%s">%s%s</option>'."\n",
Q($foldername));
if (!empty($folder['folders']))
- $out .= rcmail_render_folder_tree_select($folder['folders'], $special, $mbox_name, $maxlength, $nestLevel+1);
+ $out .= rcmail_render_folder_tree_select($folder['folders'], $mbox_name, $maxlength, $nestLevel+1);
$idx++;
}
return $out;
}
+
+/**
+ * Return internal name for the given folder if it matches the configured special folders
+ * @access private
+ */
+function rcmail_folder_classname($folder_id)
+{
+ global $CONFIG;
+
+ $cname = null;
+ $folder_lc = strtolower($folder_id);
+
+ // for these mailboxes we have localized labels and css classes
+ foreach (array('inbox', 'sent', 'drafts', 'trash', 'junk') as $smbx)
+ {
+ if ($folder_lc == $smbx || $folder_id == $CONFIG[$smbx.'_mbox'])
+ $cname = $smbx;
+ }
+
+ return $cname;
+}
+
+
+/**
+ * Try to localize the given IMAP folder name.
+ * UTF-7 decode it in case no localized text was found
+ *
+ * @param string Folder name
+ * @return string Localized folder name in UTF-8 encoding
+ */
+function rcmail_localize_foldername($name)
+{
+ if ($folder_class = rcmail_folder_classname($name))
+ return rcube_label($folder_class);
+ else
+ return rcube_charset_convert($name, 'UTF-7');
+}
+
+
?>
if (!$this->framed && !empty($this->js_env))
$out .= ($this->ajax_call ? 'this' : JS_OBJECT_NAME) . '.set_env('.json_serialize($this->js_env).");\n";
+ // add command to set page title
+ if ($this->ajax_call && !empty($this->pagetitle))
+ $out .= sprintf(
+ "this.set_pagetitle('%s');\n",
+ JQ((!empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '') . $this->pagetitle)
+ );
+
foreach ($this->js_commands as $i => $args)
{
$method = array_shift($args);
join(',', $args));
}
- // add command to set page title
- if ($this->ajax_call && !empty($this->pagetitle))
- $out .= sprintf(
- "this.set_pagetitle('%s');\n",
- JQ((!empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '') . $this->pagetitle)
- );
+
return $out;
}
*/
function parse_with_globals($input)
{
- $GLOBALS['__comm_path'] = urlencode($GLOBALS['COMM_PATH']);
+ $GLOBALS['__comm_path'] = Q($GLOBALS['COMM_PATH']);
return preg_replace('/\$(__[a-z0-9_\-]+)/e', '$GLOBALS["\\1"]', $input);
}
{
// return a button
case 'button':
- if ($attrib['command'])
- return $this->button($attrib);
+ return $this->button($attrib);
break;
// show a label
$skin_path = $this->config['skin_path'];
- if (!($attrib['command'] || $attrib['name']))
+ if (!($attrib['command'] || $attrib['name'] || $attrib['onclick']))
return '';
// try to find out the button type
*/
function rcmail_current_username($attrib)
{
- global $DB;
+ global $USER;
static $s_username;
// alread fetched
if (!empty($s_username))
return $s_username;
- // get e-mail address form default identity
- $sql_result = $DB->query(
- "SELECT email AS mailto
- FROM ".get_table_name('identities')."
- WHERE user_id=?
- AND standard=1
- AND del<>1",
- $_SESSION['user_id']);
-
- if ($DB->num_rows($sql_result))
- {
- $sql_arr = $DB->fetch_assoc($sql_result);
- $s_username = $sql_arr['mailto'];
- }
+ if ($sql_arr = $USER->get_identity())
+ $s_username = $sql_arr['email'];
else if (strstr($_SESSION['username'], '@'))
$s_username = $_SESSION['username'];
else
}
}
- $fields['host'] = isset($select_host) ? $select_host->show($_POST['_host']) : null;
+ $fields['host'] = isset($select_host) ? $select_host->show(get_input_value('_host', RCUBE_INPUT_POST)) : null;
}
else if (!strlen($CONFIG['default_host']))
{
$input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30));
- $fields['host'] = $input_host->show($_POST['_host']);
+ $fields['host'] = $input_host->show(get_input_value('_host', RCUBE_INPUT_POST));
}
$form_name = strlen($attrib['form']) ? $attrib['form'] : 'form';
return $this->db->affected_rows();
}
+
+
+ /**
+ * Remove all records from the database
+ */
+ function delete_all()
+ {
+ if (is_array($ids))
+ $ids = join(',', $ids);
+
+ $this->db->query("DELETE FROM {$this->db_name} WHERE user_id=?", $this->user_id);
+ return $this->db->affected_rows();
+ }
}
| Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: rcube_db.inc 666 2007-08-07 21:02:12Z thomasb $
+ $Id: rcube_db.inc 1089 2008-02-15 13:20:07Z till $
*/
/**
* Obtain the PEAR::DB class that is used for abstraction
*/
-require_once('DB.php');
-
+require_once 'DB.php';
/**
* Database independent query interface
}
+ /**
+ * Escapes a string
+ *
+ * @param string The string to be escaped
+ * @return string The escaped string
+ * @access public
+ */
+ function escapeSimple($str)
+ {
+ if (!$this->db_handle)
+ $this->db_connect('r');
+
+ return $this->db_handle->escapeSimple($str);
+ }
+
+
/*
* Return SQL function for current time and date
*
} // end class rcube_db
-?>
\ No newline at end of file
+?>
if ((strpos($key,'on')===0 && $value==''))
continue;
- // encode textarea content
- if ($key=='value')
- $value = Q($value, 'strict', FALSE);
-
// attributes with no value
if (in_array($key, array('checked', 'multiple', 'disabled', 'selected', 'nowrap')))
{
}
// don't convert size of value attribute
else if ($key=='value')
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), $value);
+ $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), Q($value, 'strict', false));
// regular tag attributes
else
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), $this->_conv_case($value, 'value'));
+ $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), $this->_conv_case(Q($value), 'value'));
}
return sizeof($attrib_arr) ? ' '.implode(' ', $attrib_arr) : '';
if (is_array($names))
{
foreach ($names as $i => $text)
- $this->options[] = array('text' => $text, 'value' => (string)$values[$i]);
+ $this->options[] = array('text' => $text, 'value' => $values[$i]);
}
else
- $this->options[] = array('text' => $names, 'value' => (string)$values);
+ $this->options[] = array('text' => $names, 'value' => $values);
}
$value_str = $this->_conv_case(' value="%s"', 'attrib');
if (!is_array($select))
- $select = array((string)$select);
+ $select = array($select);
foreach ($this->options as $option)
{
$options_str .= sprintf("<%s%s%s>%s</%s>\n",
$this->_conv_case('option', 'tag'),
- !empty($option['value']) ? sprintf($value_str, Q($option['value'])) : '',
+ isset($option['value']) ? sprintf($value_str, Q($option['value'])) : '',
$selected,
Q($option['text'], 'strict', FALSE),
$this->_conv_case('option', 'tag'));
| program/include/rcube_imap.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2006, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: rcube_imap.inc 883 2007-10-17 21:27:20Z thomasb $
+ $Id: rcube_imap.inc 1050 2008-02-12 14:06:26Z thomasb $
*/
*
* @package Mail
* @author Thomas Bruederli <roundcube@gmail.com>
- * @version 1.39
+ * @version 1.40
* @link http://ilohamail.org
*/
class rcube_imap
* @param string Username for IMAP account
* @param string Password for IMAP account
* @param number Port to connect to
- * @param boolean Use SSL connection
+ * @param string SSL schema (either ssl or tls) or null if plain connection
* @return boolean TRUE on success, FALSE on failure
* @access public
*/
- function connect($host, $user, $pass, $port=143, $use_ssl=FALSE)
+ function connect($host, $user, $pass, $port=143, $use_ssl=null)
{
global $ICL_SSL, $ICL_PORT, $IMAP_USE_INTERNAL_DATE;
// check for Open-SSL support in PHP build
if ($use_ssl && in_array('openssl', get_loaded_extensions()))
- $ICL_SSL = TRUE;
+ $ICL_SSL = $use_ssl == 'imaps' ? 'ssl' : $use_ssl;
else if ($use_ssl)
{
raise_error(array('code' => 403, 'type' => 'imap', 'file' => __FILE__,
$mailbox = $this->mailbox;
// count search set
- if ($this->search_string && $mailbox == $this->mailbox && $mode == 'ALL')
+ if ($this->search_string && $mailbox == $this->mailbox && $mode == 'ALL' && !$force)
return count((array)$this->search_set);
$a_mailbox_cache = $this->get_cache('messagecount');
if ($this->search_string && $mailbox == $this->mailbox)
return $this->_list_header_set($mailbox, $this->search_set, $page, $sort_field, $sort_order);
- if ($sort_field!=NULL)
- $this->sort_field = $sort_field;
- if ($sort_order!=NULL)
- $this->sort_order = strtoupper($sort_order);
+ $this->_set_sort_order($sort_field, $sort_order);
$max = $this->_messagecount($mailbox);
$start_msg = ($this->list_page-1) * $this->page_size;
if (!strlen($mailbox) || empty($msgs))
return array();
- if ($sort_field!=NULL)
- $this->sort_field = $sort_field;
- if ($sort_order!=NULL)
- $this->sort_order = strtoupper($sort_order);
+ $this->_set_sort_order($sort_field, $sort_order);
$max = count($msgs);
$start_msg = ($this->list_page-1) * $this->page_size;
*/
function message_index($mbox_name='', $sort_field=NULL, $sort_order=NULL)
{
- if ($sort_field!=NULL)
- $this->sort_field = $sort_field;
- if ($sort_order!=NULL)
- $this->sort_order = strtoupper($sort_order);
+ $this->_set_sort_order($sort_field, $sort_order);
$mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- $key = "$mbox:".$this->sort_field.":".$this->sort_order.".msgi";
+ $key = "{$mailbox}:{$this->sort_field}:{$this->sort_order}:{$this->search_string}.msgi";
+
+ // we have a saved search result. get index from there
+ if (!isset($this->cache[$key]) && $this->search_string && $mailbox == $this->mailbox)
+ {
+ $this->cache[$key] = $a_msg_headers = array();
+ $this->_fetch_headers($mailbox, join(',', $this->search_set), $a_msg_headers, NULL);
+
+ foreach (iil_SortHeaders($a_msg_headers, $this->sort_field, $this->sort_order) as $i => $msg)
+ $this->cache[$key][] = $msg->uid;
+ }
// have stored it in RAM
if (isset($this->cache[$key]))
return $this->get_search_set();
}
+
+
+ /**
+ * Check if the given message ID is part of the current search set
+ *
+ * @return boolean True on match or if no search request is stored
+ */
+ function in_searchset($msgid)
+ {
+ if (!empty($this->search_string))
+ return in_array("$msgid", (array)$this->search_set, true);
+ else
+ return true;
+ }
/**
// write headers cache
if ($headers)
{
- if ($is_uid)
- $this->uid_id_map[$mbox_name][$uid] = $headers->id;
+ if ($headers->uid && $headers->id)
+ $this->uid_id_map[$mailbox][$headers->uid] = $headers->id;
$this->add_message_cache($mailbox.'.msg', $headers->id, $headers);
}
if (!empty($structure))
{
$this->_msg_id = $msg_id;
- $headers = $this->get_headers($msg_id, NULL, FALSE);
+ $headers = $this->get_headers($uid);
$struct = &$this->_structure_part($structure);
$struct->headers = get_object_vars($headers);
}
// normalize filename property
- if (!empty($struct->d_parameters['filename']))
- $struct->filename = $this->decode_mime_string($struct->d_parameters['filename']);
- else if (!empty($struct->ctype_parameters['name']))
- $struct->filename = $this->decode_mime_string($struct->ctype_parameters['name']);
+ if ($filename_mime = $struct->d_parameters['filename'] ? $struct->d_parameters['filename'] : $struct->ctype_parameters['name'])
+ $struct->filename = $this->decode_mime_string($filename_mime);
+ else if ($filename_encoded = $struct->d_parameters['filename*'] ? $struct->d_parameters['filename*'] : $struct->ctype_parameters['name*'])
+ {
+ // decode filename according to RFC 2231, Section 4
+ list($filename_charset,, $filename_urlencoded) = split('\'', $filename_encoded);
+ $struct->filename = rcube_charset_convert(urldecode($filename_urlencoded), $filename_charset);
+ }
else if (!empty($struct->headers['content-description']))
$struct->filename = $this->decode_mime_string($struct->headers['content-description']);
if ($print)
{
- iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, ($o_part->encoding=='base64'?3:2));
- $body = TRUE;
+ $mode = $o_part->encoding == 'base64' ? 3 : ($o_part->encoding == 'quoted-printable' ? 1 : 2);
+ $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, $mode);
+
+ // we have to decode the part manually before printing
+ if ($mode == 1)
+ {
+ echo $this->mime_decode($body, $o_part->encoding);
+ $body = true;
+ }
}
else
{
$body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
// decode part body
- if ($o_part->encoding=='base64' || $o_part->encoding=='quoted-printable')
+ if ($o_part->encoding)
$body = $this->mime_decode($body, $o_part->encoding);
// convert charset (if text or message part)
* Set message flag to one or several messages
*
* @param mixed Message UIDs as array or as comma-separated string
- * @param string Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT
+ * @param string Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
* @return boolean True on success, False on failure
*/
function set_flag($uids, $flag)
$deleted = TRUE;
foreach ($all_mboxes as $c_mbox)
- if (preg_match('/^'.preg_quote($mailbox.$this->delimiter).'/', $c_mbox))
+ {
+ $regex = preg_quote($mailbox . $this->delimiter, '/');
+ $regex = '/^' . $regex . '/';
+ if (preg_match($regex, $c_mbox))
{
iil_C_UnSubscribe($this->conn, $c_mbox);
$result = iil_C_DeleteFolder($this->conn, $c_mbox);
if ($result>=0)
$deleted = TRUE;
}
+ }
}
// clear mailboxlist cache
*/
function &get_cached_message($key, $uid, $struct=false)
{
- if (!$this->caching_enabled)
- return FALSE;
-
$internal_key = '__single_msg';
+
if ($this->caching_enabled && (!isset($this->cache[$internal_key][$uid]) ||
($struct && empty($this->cache[$internal_key][$uid]->structure))))
{
*/
function add_message_cache($key, $index, $headers, $struct=null)
{
- if (!$this->caching_enabled || empty($key) || !is_object($headers) || empty($headers->uid))
+ 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;
+
+ // no further caching
+ if (!$this->caching_enabled)
return;
-
+
// check for an existing record (probly headers are cached but structure not)
$sql_result = $this->db->query(
"SELECT message_id
return $mbox_name;
}
+ /**
+ * Validate the given input and save to local properties
+ * @access private
+ */
+ function _set_sort_order($sort_field, $sort_order)
+ {
+ if ($sort_field != null)
+ $this->sort_field = asciiwords($sort_field);
+ if ($sort_order != null)
+ $this->sort_order = strtoupper($sort_order) == 'DESC' ? 'DESC' : 'ASC';
+ }
/**
* Sort mailboxes first by default folders and then in alphabethical order
if ($folder{0}=='.')
continue;
- if (($p = array_search(strtolower($folder), $this->default_folders_lc))!==FALSE)
+ if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p])
$a_defaults[$p] = $folder;
else
$a_out[] = $folder;
if (!$mbox_name)
$mbox_name = $this->mailbox;
- return iil_C_ID2UID($this->conn, $mbox_name, $id);
+ $index = array_flip((array)$this->uid_id_map[$mbox_name]);
+ if (isset($index[$id]))
+ $uid = $index[$id];
+ else
+ {
+ $uid = iil_C_ID2UID($this->conn, $mbox_name, $id);
+ $this->uid_id_map[$mbox_name][$uid] = $id;
+ }
+
+ return $uid;
}
<?php
-
/*
+-----------------------------------------------------------------------+
| program/include/rcube_ldap.inc |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: rcube_ldap.inc 787 2007-09-09 17:58:13Z thomasb $
+ $Id: rcube_ldap.inc 1152 2008-02-28 20:01:57Z thomasb $
*/
}
$filter .= ')';
+ // avoid double-wildcard if $value is empty
+ $filter = preg_replace('/\*+/', '*', $filter);
+
// add general filter to query
if (!empty($this->prop['filter']))
- $filter = '(&'.$this->prop['filter'] . $filter . ')';
+ $filter = '(&(' . preg_replace('/^\(|\)$/', '', $this->prop['filter']) . ')' . $filter . ')';
// set filter string and execute search
$this->set_search_set($filter);
| Author: Lukas Kahwe Smith <smith@pooteeweet.org> |
+-----------------------------------------------------------------------+
- $Id: rcube_mdb2.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: rcube_mdb2.inc 1084 2008-02-14 23:12:23Z till $
*/
function dsn_connect($dsn)
{
// Use persistent connections if available
- $dbh = MDB2::connect($dsn, array('persistent' => $this->db_pconn, 'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL));
+ $dbh = MDB2::connect($dsn,
+ array('persistent' => $this->db_pconn,
+ 'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL));
- if (PEAR::isError($dbh))
+ if (MDB2::isError($dbh))
{
$this->db_error = TRUE;
$this->db_error_msg = $dbh->getMessage();
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $dbh->getMessage()), TRUE, FALSE);
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__,
+ 'file' => __FILE__, 'message' => $dbh->getUserInfo()), TRUE, FALSE);
}
else if ($this->db_provider=='sqlite')
{
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: rcube_shared.inc 839 2007-09-29 18:15:05Z thomasb $
+ $Id: rcube_shared.inc 1078 2008-02-14 01:33:02Z till $
*/
$iscached = true;
$etag = $etag ? "\"$etag\"" : null;
- if ($etag && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
- $iscached = true;
+ if ($etag)
+ $iscached = ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag);
if ($iscached)
header("HTTP/1.x 304 Not Modified");
* @param string Input string
* @param int Max. length
* @param string Replace removed chars with this
- * @return string Abbrevated string
+ * @return string Abbreviated string
*/
-function abbrevate_string($str, $maxlength, $place_holder='...')
+function abbreviate_string($str, $maxlength, $place_holder='...')
{
$length = rc_strlen($str);
$first_part_length = floor($maxlength/2) - rc_strlen($place_holder);
}
}
+/**
+ * A method to guess the mime_type of an attachment.
+ *
+ * @param string $path Path to the file.
+ * @param string $failover Mime type supplied for failover.
+ *
+ * @return string
+ * @author Till Klampaeckel <till@php.net>
+ * @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 = 'unknown/unknown')
+{
+ global $CONFIG;
+
+ $mime_magic = $CONFIG['mime_magic'];
+
+ if (function_exists('mime_content_type')) {
+ return mime_content_type($path);
+ }
+ if (!extension_loaded('fileinfo')) {
+ if (!dl('fileinfo.' . PHP_SHLIB_SUFFIX)) {
+ return $failover;
+ }
+ }
+ $finfo = finfo_open(FILEINFO_MIME, $mime_magic);
+ if (!$finfo) {
+ return $failover;
+ }
+ $mime_type = finfo_file($finfo,$path);
+ if (!$mime_type) {
+ return $failover;
+ }
+ finfo_close($finfo);
+
+ return $mime_type;
+}
-?>
+?>
\ No newline at end of file
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: rcube_smtp.inc 805 2007-09-20 13:36:57Z robin $
+ $Id: rcube_smtp.inc 1136 2008-02-25 10:17:35Z till $
*/
$smtp_host_url = parse_url($CONFIG['smtp_server']);
// overwrite port
- if ($smtp_host_url['host'] && $smtp_host_url['port'])
+ if (isset($smtp_host_url['host']) && isset($smtp_host_url['port']))
{
$smtp_host = $smtp_host_url['host'];
$smtp_port = $smtp_host_url['port'];
}
// re-write smtp host
- if ($smtp_host_url['host'] && $smtp_host_url['scheme'])
+ if (isset($smtp_host_url['host']) && isset($smtp_host_url['scheme']))
$smtp_host = sprintf('%s://%s', $smtp_host_url['scheme'], $smtp_host_url['host']);
// create Net_SMTP object and connect to server
- if (!is_object($smtp_conn))
+ if (!is_object($SMTP_CONN))
{
$helo_host = empty($CONFIG['smtp_helo_host']) ? (empty($_SERVER['SERVER_NAME']) ? 'localhost' : $_SERVER['SERVER_NAME']) : $CONFIG['smtp_helo_host'];
$SMTP_CONN = new Net_SMTP($smtp_host, $smtp_port, $helo_host);
if (PEAR::isError($result))
{
smtp_reset();
- $response[] .= "Authentication failure: ".$result->getMessage();
+ $response[] .= 'Authentication failure: ' . $result->getMessage() . ' (Code: ' . $result->getCode() . ')';
return FALSE;
}
}
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_user.inc |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | This class represents a system user linked and provides access |
+ | to the related database records. |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_user.inc 933 2007-11-29 14:17:32Z thomasb $
+
+*/
+
+
+/**
+ * Class representing a system user
+ *
+ * @package core
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ */
+class rcube_user
+{
+ var $ID = null;
+ var $data = null;
+
+
+ /**
+ * Object constructor
+ *
+ * @param object DB Database connection
+ */
+ function __construct($id = null, $sql_arr = null)
+ {
+ global $DB;
+
+ if ($id && !$sql_arr)
+ {
+ $sql_result = $DB->query("SELECT * FROM ".get_table_name('users')." WHERE user_id=?", $id);
+ $sql_arr = $DB->fetch_assoc($sql_result);
+ }
+
+ if (!empty($sql_arr))
+ {
+ $this->ID = $sql_arr['user_id'];
+ $this->data = $sql_arr;
+ }
+ }
+
+ /**
+ * PHP 4 object constructor
+ *
+ * @see rcube_user::__construct
+ */
+ function rcube_user($id = null, $sql_arr = null)
+ {
+ $this->__construct($id, $sql_arr);
+ }
+
+
+ /**
+ * Build a user name string (as e-mail address)
+ *
+ * @return string Full user name
+ */
+ function get_username()
+ {
+ return $this->data['username'] ? $this->data['username'] . (!strpos($this->data['username'], '@') ? '@'.$this->data['mail_host'] : '') : false;
+ }
+
+
+ /**
+ * Get the preferences saved for this user
+ *
+ * @return array Hash array with prefs
+ */
+ function get_prefs()
+ {
+ if ($this->ID && $this->data['preferences'])
+ return unserialize($this->data['preferences']);
+ else
+ return array();
+ }
+
+
+ /**
+ * Write the given user prefs to the user's record
+ *
+ * @param mixed User prefs to save
+ * @return boolean True on success, False on failure
+ */
+ function save_prefs($a_user_prefs)
+ {
+ global $DB, $CONFIG, $sess_user_lang;
+
+ if (!$this->ID)
+ return false;
+
+ // merge (partial) prefs array with existing settings
+ $a_user_prefs += (array)$this->get_prefs();
+
+ $DB->query(
+ "UPDATE ".get_table_name('users')."
+ SET preferences=?,
+ language=?
+ WHERE user_id=?",
+ serialize($a_user_prefs),
+ $sess_user_lang,
+ $this->ID);
+
+ if ($DB->affected_rows())
+ {
+ $CONFIG = array_merge($CONFIG, $a_user_prefs);
+ return true;
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Get default identity of this user
+ *
+ * @param int Identity ID. If empty, the default identity is returned
+ * @return array Hash array with all cols of the
+ */
+ function get_identity($id = null)
+ {
+ global $DB;
+
+ $sql_result = $this->list_identities($id ? sprintf('AND identity_id=%d', $id) : '');
+ return $DB->fetch_assoc($sql_result);
+ }
+
+
+ /**
+ * Return a list of all identities linked with this user
+ *
+ * @return array List of identities
+ */
+ function list_identities($sql_add = '')
+ {
+ global $DB;
+
+ // get contacts from DB
+ $sql_result = $DB->query(
+ "SELECT * FROM ".get_table_name('identities')."
+ WHERE del<>1
+ AND user_id=?
+ $sql_add
+ ORDER BY ".$DB->quoteIdentifier('standard')." DESC, name ASC",
+ $this->ID);
+
+ return $sql_result;
+ }
+
+
+ /**
+ * Update a specific identity record
+ *
+ * @param int Identity ID
+ * @param array Hash array with col->value pairs to save
+ * @return boolean True if saved successfully, false if nothing changed
+ */
+ function update_identity($iid, $data)
+ {
+ global $DB;
+
+ if (!$this->ID)
+ return false;
+
+ $write_sql = array();
+
+ foreach ((array)$data as $col => $value)
+ {
+ $write_sql[] = sprintf("%s=%s",
+ $DB->quoteIdentifier($col),
+ $DB->quote($value));
+ }
+
+ $DB->query(
+ "UPDATE ".get_table_name('identities')."
+ SET ".join(', ', $write_sql)."
+ WHERE identity_id=?
+ AND user_id=?
+ AND del<>1",
+ $iid,
+ $this->ID);
+
+ return $DB->affected_rows();
+ }
+
+
+ /**
+ * Create a new identity record linked with this user
+ *
+ * @param array Hash array with col->value pairs to save
+ * @return int The inserted identity ID or false on error
+ */
+ function insert_identity($data)
+ {
+ global $DB;
+
+ if (!$this->ID)
+ return false;
+
+ $insert_cols = $insert_values = array();
+ foreach ((array)$data as $col => $value)
+ {
+ $insert_cols[] = $DB->quoteIdentifier($col);
+ $insert_values[] = $DB->quote($value);
+ }
+
+ $DB->query(
+ "INSERT INTO ".get_table_name('identities')."
+ (user_id, ".join(', ', $insert_cols).")
+ VALUES (?, ".join(', ', $insert_values).")",
+ $this->ID);
+
+ return $DB->insert_id(get_sequence_name('identities'));
+ }
+
+
+ /**
+ * Mark the given identity as deleted
+ *
+ * @param int Identity ID
+ * @return boolean True if deleted successfully, false if nothing changed
+ */
+ function delete_identity($iid)
+ {
+ global $DB;
+
+ if (!$this->ID)
+ return false;
+
+ if (!$this->ID || $this->ID == '')
+ return false;
+
+ $sql_result = $DB->query("SELECT count(*) AS ident_count FROM " .
+ get_table_name('identities') .
+ " WHERE user_id = ? AND del <> 1",
+ $this->ID);
+
+ $sql_arr = $DB->fetch_assoc($sql_result);
+ if ($sql_arr['ident_count'] <= 1)
+ return false;
+
+ $DB->query(
+ "UPDATE ".get_table_name('identities')."
+ SET del=1
+ WHERE user_id=?
+ AND identity_id=?",
+ $this->ID,
+ $iid);
+
+ return $DB->affected_rows();
+ }
+
+
+ /**
+ * Make this identity the default one for this user
+ *
+ * @param int The identity ID
+ */
+ function set_default($iid)
+ {
+ global $DB;
+
+ if ($this->ID && $iid)
+ {
+ $DB->query(
+ "UPDATE ".get_table_name('identities')."
+ SET ".$DB->quoteIdentifier('standard')."='0'
+ WHERE user_id=?
+ AND identity_id<>?
+ AND del<>1",
+ $this->ID,
+ $iid);
+ }
+ }
+
+
+ /**
+ * Update user's last_login timestamp
+ */
+ function touch()
+ {
+ global $DB;
+
+ if ($this->ID)
+ {
+ $DB->query(
+ "UPDATE ".get_table_name('users')."
+ SET last_login=".$DB->now()."
+ WHERE user_id=?",
+ $this->ID);
+ }
+ }
+
+
+ /**
+ * Clear the saved object state
+ */
+ function reset()
+ {
+ $this->ID = null;
+ $this->data = null;
+ }
+
+
+ /**
+ * Find a user record matching the given name and host
+ *
+ * @param string IMAP user name
+ * @param string IMAP host name
+ * @return object rcube_user New user instance
+ * @static
+ */
+ function query($user, $host)
+ {
+ global $DB;
+
+ // query if user already registered
+ $sql_result = $DB->query(
+ "SELECT * FROM ".get_table_name('users')."
+ WHERE mail_host=? AND (username=? OR alias=?)",
+ $host,
+ $user,
+ $user);
+
+ // user already registered -> overwrite username
+ if ($sql_arr = $DB->fetch_assoc($sql_result))
+ return new rcube_user($sql_arr['user_id'], $sql_arr);
+ else
+ return false;
+ }
+
+
+ /**
+ * Create a new user record and return a rcube_user instance
+ *
+ * @param string IMAP user name
+ * @param string IMAP host
+ * @return object rcube_user New user instance
+ * @static
+ */
+ function create($user, $host)
+ {
+ global $DB, $CONFIG;
+
+ $user_email = '';
+
+ // try to resolve user in virtusertable
+ if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@'))
+ $user_email = self::user2email($user);
+
+ $DB->query(
+ "INSERT INTO ".get_table_name('users')."
+ (created, last_login, username, mail_host, alias, language)
+ VALUES (".$DB->now().", ".$DB->now().", ?, ?, ?, ?)",
+ strip_newlines($user),
+ strip_newlines($host),
+ strip_newlines($user_email),
+ $_SESSION['user_lang']);
+
+ if ($user_id = $DB->insert_id(get_sequence_name('users')))
+ {
+ $mail_domain = rcmail_mail_domain($host);
+
+ if ($user_email=='')
+ $user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
+
+ $user_name = $user != $user_email ? $user : '';
+
+ // try to resolve the e-mail address from the virtuser table
+ if (!empty($CONFIG['virtuser_query']) &&
+ ($sql_result = $DB->query(preg_replace('/%u/', $DB->escapeSimple($user), $CONFIG['virtuser_query']))) &&
+ ($DB->num_rows()>0))
+ {
+ while ($sql_arr = $DB->fetch_array($sql_result))
+ {
+ $DB->query(
+ "INSERT INTO ".get_table_name('identities')."
+ (user_id, del, standard, name, email)
+ VALUES (?, 0, 1, ?, ?)",
+ $user_id,
+ strip_newlines($user_name),
+ preg_replace('/^@/', $user . '@', $sql_arr[0]));
+ }
+ }
+ else
+ {
+ // also create new identity records
+ $DB->query(
+ "INSERT INTO ".get_table_name('identities')."
+ (user_id, del, standard, name, email)
+ VALUES (?, 0, 1, ?, ?)",
+ $user_id,
+ strip_newlines($user_name),
+ strip_newlines($user_email));
+ }
+ }
+ else
+ {
+ raise_error(array(
+ 'code' => 500,
+ 'type' => 'php',
+ 'line' => __LINE__,
+ 'file' => __FILE__,
+ 'message' => "Failed to create new user"), true, false);
+ }
+
+ return $user_id ? new rcube_user($user_id) : false;
+ }
+
+
+ /**
+ * Resolve username using a virtuser table
+ *
+ * @param string E-mail address to resolve
+ * @return string Resolved IMAP username
+ * @static
+ */
+ function email2user($email)
+ {
+ $user = $email;
+ $r = rcmail_findinvirtual("^$email");
+
+ for ($i=0; $i<count($r); $i++)
+ {
+ $data = $r[$i];
+ $arr = preg_split('/\s+/', $data);
+ if (count($arr) > 0)
+ {
+ $user = trim($arr[count($arr)-1]);
+ break;
+ }
+ }
+
+ return $user;
+ }
+
+
+ /**
+ * Resolve e-mail address from virtuser table
+ *
+ * @param string User name
+ * @return string Resolved e-mail address
+ * @static
+ */
+ function user2email($user)
+ {
+ $email = "";
+ $r = rcmail_findinvirtual("$user$");
+
+ for ($i=0; $i<count($r); $i++)
+ {
+ $data = $r[$i];
+ $arr = preg_split('/\s+/', $data);
+ if (count($arr) > 0)
+ {
+ $email = trim($arr[0]);
+ break;
+ }
+ }
+
+ return $email;
+ }
+
+}
+
+
+?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: session.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: session.inc 1063 2008-02-13 05:26:47Z till $
*/
sess_destroy(session_id());
session_id($random);
- $cookie = session_get_cookie_params();
- setcookie(session_name(), $random, $cookie['lifetime'], $cookie['path']);
+
+ $cookie = session_get_cookie_params();
+ $_lifetime = $cookie['lifetime'] ? time() + $cookie['lifetime'] : 0;
+
+ setcookie(session_name(), '', time() - 3600);
+ setcookie(session_name(), $random, $_lifetime, $cookie['path'],
+ $cookie['domain']);
return true;
}
| RoundCube Webmail Client Script |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev, - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Requires: common.js, list.js |
+-----------------------------------------------------------------------+
- $Id: app.js 888 2007-10-19 14:04:43Z robin $
+ $Id: app.js 1170 2008-03-03 09:06:53Z thomasb $
*/
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', 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', 'viewsource', 'print', 'load-attachment', true);
+ this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource', 'print', 'load-attachment', true);
if (this.env.next_uid)
{
this.enable_command('nextmessage', true);
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;
break;
case 'login':
- var input_user = rcube_find_object('_user');
- var input_pass = rcube_find_object('_pass');
+ var input_user = rcube_find_object('rcmloginuser');
+ var input_pass = rcube_find_object('rcmloginpwd');
if (input_user)
input_user.onkeypress = function(e){ return rcmail.login_user_keypress(e); };
if (input_user && input_user.value=='')
case 'list':
if (this.task=='mail')
{
- if (this.env.search_request<0 || (this.env.search_request && props != this.env.mailbox))
+ if (this.env.search_request<0 || (props != '' && (this.env.search_request && props != this.env.mailbox)))
this.reset_qsearch();
this.list_mailbox(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;
if (props._row.uid)
{
uid = props._row.uid;
- this.message_list.dont_select = true;
+
// toggle read/unread
if (this.message_list.rows[uid].deleted) {
flag = 'undelete';
if (!this.check_compose_input())
break;
-
+
// Reset the auto-save timer
self.clearTimeout(this.save_timer);
case 'print':
var uid;
if (uid = this.get_single_uid())
- {
+ {
ref.printwin = window.open(this.env.comm_path+'&_action=print&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(this.env.safemode ? '&_safe=1' : ''));
if (this.printwin)
+ {
setTimeout(function(){ ref.printwin.focus(); }, 20);
+ if (this.env.action != 'show')
+ this.toggle_read_status('read', [uid]);
}
+ }
break;
case 'viewsource':
this.unfocus_folder(id);
this.command('moveto', id);
}
-
- // Hide message command buttons until a message is selected
- this.enable_command('reply', 'reply-all', 'forward', 'delete', 'print', false);
- return false;
};
this.click_on_list = function(e)
{
this.enable_command('reply', 'reply-all', 'forward', false);
this.enable_command('show', selected);
- this.enable_command('delete', 'moveto', (list.selection.length > 0 ? true : false));
+ 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', (list.selection.length > 0 ? true : false));
+ this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));
}
// start timer for message preview (wait for double click)
this.command('show');
else if (list.key_pressed == list.DELETE_KEY)
this.command('delete');
+ else
+ list.shiftkey = false;
};
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;
+
if (id)
{
var url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox)+add_url;
this.move_messages = function(mbox)
{
// exit if current or no mailbox specified or if selection is empty
- if (!mbox || !this.env.uid || mbox==this.env.mailbox)
- {
- if (!this.message_list || !this.message_list.get_selection().length)
- return;
- }
+ 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 : '');
else
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);
};
{
// check input fields
var input_to = rcube_find_object('_to');
+ var input_cc = rcube_find_object('_cc');
+ var input_bcc = rcube_find_object('_bcc');
var input_subject = rcube_find_object('_subject');
var input_message = rcube_find_object('_message');
// check for empty recipient
- if (input_to && !rcube_check_email(input_to.value, true))
+ var recipients = input_to.value ? input_to.value : (input_cc.value ? input_cc.value : input_bcc.value);
+ if (!rcube_check_email(recipients.replace(/^\s+/, '').replace(/[\s,;]+$/, ''), true))
{
alert(this.get_label('norecipientwarning'));
input_to.focus();
var eid = tinyMCE.getEditorId('_message');
// editor is a TinyMCE_Control object
var editor = tinyMCE.getInstanceById(eid);
+ // if this is null, we should exit
+ if (editor == null) {
+ return false;
+ }
var msgDoc = editor.getDoc();
var msgBody = msgDoc.body;
// upload attachment file
this.upload_file = function(form)
{
-
if (!form)
return false;
return;
var a_cids = new Array();
+ var qs = '';
if (this.env.cid)
a_cids[a_cids.length] = this.env.cid;
this.show_contentframe(false);
}
+ // also send search request to get the right records from the next page
+ if (this.env.search_request)
+ qs += '&_search='+this.env.search_request;
+
// send request to server
- this.http_post('delete', '_cid='+urlencode(a_cids.join(','))+'&_from='+(this.env.action ? this.env.action : ''));
+ this.http_post('delete', '_cid='+urlencode(a_cids.join(','))+'&_from='+(this.env.action ? this.env.action : '')+qs);
return true;
};
{
var anchors = row.obj.getElementsByTagName('A');
if (anchors[0])
- anchors[0].onclick = function() { p.rename_folder(row.id); };
+ anchors[0].onclick = function() { p.rename_folder(row.id); return false; };
if (anchors[1])
- anchors[1].onclick = function() { p.delete_folder(row.id); };
+ anchors[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.set_env('folder', folder);
else
this.set_env('folder', null);
+
+ if (this.gui_objects.createfolderhint)
+ this.gui_objects.createfolderhint.innerHTML = this.env.folder ? this.get_label('addsubfolderhint') : '';
};
// tell server to create and subscribe a new mailbox
this.create_folder = function(name)
{
- if (this.edit_folder)
- this.reset_folder_rename();
+ 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 (this.env.folder)
+ if (this.env.folder && name != '')
name = this.env.folder+this.env.delimiter+name;
if (name)
this.rename_folder = function(id)
{
var temp, row, form;
- var folder = this.env.subscriptionrows[id][0];
// reset current renaming
if (temp = this.edit_folder)
return;
}
- if (id && (row = document.getElementById(id)))
+ 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 = folder.replace(reg, '');
+ this.name_input.value = this.env.subscriptionrows[id][1].replace(reg, '');
this.name_input.style.width = '100%';
+
reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
- this.name_input.setAttribute('parent', folder.replace(reg, ''));
+ 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);
var newname = this.name_input ? this.name_input.value : null;
if (this.edit_folder && newname)
{
- if (this.name_input.getAttribute('parent') && this.name_input.getAttribute('parent')!='')
- newname = this.name_input.getAttribute('parent')+this.env.delimiter+newname;
- this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname));
+ if (this.name_input.__parent)
+ newname = this.name_input.__parent + this.env.delimiter + newname;
+ this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname));
}
}
// escape
var refrow, form;
var tbody = this.gui_objects.subscriptionlist.tBodies[0];
- var id = replace && replace.id ? replace.id : 'rcmrow'+(tbody.childNodes.length+1);
+ 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)))
{
else
tbody.appendChild(row);
}
-
+
// add to folder/row-ID map
this.env.subscriptionrows[row.id] = [name, display_name];
// set folder name
row.cells[0].innerHTML = display_name;
- if (row.cells[1] && row.cells[1].firstChild.tagName=='INPUT')
+
+ // set messages count to zero
+ if (!replace)
+ row.cells[1].innerHTML = '*';
+
+ if (!replace && row.cells[2] && row.cells[2].firstChild.tagName=='INPUT')
{
- row.cells[1].firstChild.value = name;
- row.cells[1].firstChild.checked = true;
+ 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))
{
cell.id = 'rcmHead'+col;
}
+
+ if (col == 'subject' && this.message_list)
+ this.message_list.subject_col = n+1;
}
-
};
// create a table row in the message list
if (!this.gui_objects.mailboxlist)
return false;
- var reg, text_obj;
- var item = this.get_folder_li(mbox);
- mbox = String(mbox).toLowerCase().replace(this.identifier_expr, '');
-
- if (item && item.className && item.className.indexOf('mailbox '+mbox)>=0)
+ var reg, text_obj, item;
+ if (item = this.get_folder_li(mbox))
{
// set new text
text_obj = item.firstChild;
this.check_for_recent = function()
{
if (this.busy)
- {
- this.send_keep_alive();
return;
- }
this.set_busy(true, 'checkingmail');
- this.http_request('check-recent', '_t='+(new Date().getTime()), true);
+ this.http_request('check-recent', (this.env.search_request ? '_search='+this.env.search_request+'&' : '') + '_t='+(new Date().getTime()), true);
};
| RoundCube common js library |
| |
| This file is part of the RoundCube web development suite |
- | Copyright (C) 2005-2006, RoundCube Dev, - Switzerland |
+ | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: common.js 811 2007-09-25 07:33:37Z robin $
+ $Id: common.js 1064 2008-02-13 05:33:41Z till $
*/
// Constants
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.ns4 = (this.ns && parseInt(this.ver)==4);
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;
- this.opera5 = (this.opera5 && this.agent.indexOf('Opera 5')>0) ? true : false;
- this.opera6 = (this.opera && this.agent.indexOf('Opera 6')>0) ? true : false;
- this.opera7 = (this.opera && this.agent.indexOf('Opera 7')>0) ? true : false;
if(this.opera && window.RegExp)
this.vendver = (/opera(\s|\/)([0-9\.]+)/i.test(navigator.userAgent)) ? parseFloat(RegExp.$2) : -1;
this.lang = RegExp.$1;
this.dhtml = ((this.ie4 && this.win) || this.ie5 || this.ie6 || this.ns4 || this.mz);
- this.layers = this.ns4; // (document.layers);
- this.div = (this.ie4 || this.dom);
this.vml = (this.win && this.ie && this.dom && !this.opera);
- this.linkborder = (this.ie || this.mz);
- this.rollover = (this.ver>=4 || (this.ns && this.ver>=3)); // (document.images) ? true : false;
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));
// static functions for event handling
var rcube_event = {
- /**
- * 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 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 modifier key (constants defined at top of file)
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];
},
{
if (input && window.RegExp)
{
- var no_ws_ctl = "[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]";
- var alpha = "[\\x41-\\x5a\\x61-\\x7a]";
- var digit = "[\\x30-\\x39]";
- var cr = "\\x0d";
- var lf = "\\x0a";
- var crlf = "(" + cr + lf + ")";
-
- var obs_char = "[\\x00-\\x09\\x0b\\x0c\\x0e-\\x7f]";
- var obs_text = "("+lf+"*"+cr+"*("+obs_char+lf+"*"+cr+"*)*)";
- var text = "([\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f]|"+obs_text+")";
- var obs_qp = "(\\x5c[\\x00-\\x7f])";
- var quoted_pair = "(\\x5c"+text+"|"+obs_qp+")";
-
- var wsp = "[\\x20\\x09]";
- var obs_fws = "("+wsp+"+("+crlf+wsp+"+)*)";
- var fws = "((("+wsp+"*"+crlf+")?"+wsp+"+)|"+obs_fws+")";
- var ctext = "("+no_ws_ctl+"|[\\x21-\\x27\\x2A-\\x5b\\x5d-\\x7e])";
- var ccontent = "("+ctext+"|"+quoted_pair+")";
- var comment = "(\\x28("+fws+"?"+ccontent+")*"+fws+"?\\x29)";
- var cfws = "(("+fws+"?"+comment+")*("+fws+"?"+comment+"|"+fws+"))";
- var cfws = fws+"*";
-
- var atext = "("+alpha+"|"+digit+"|[\\x21\\x23-\\x27\\x2a\\x2b\\x2d\\x2e\\x3d\\x3f\\x5e\\x5f\\x60\\x7b-\\x7e])";
- var atom = "("+cfws+"?"+atext+"+"+cfws+"?)";
-
- var qtext = "("+no_ws_ctl+"|[\\x21\\x23-\\x5b\\x5d-\\x7e])";
- var qcontent = "("+qtext+"|"+quoted_pair+")";
- var quoted_string = "("+cfws+"?\\x22("+fws+"?"+qcontent+")*"+fws+"?\\x22"+cfws+"?)";
- var word = "("+atom+"|"+quoted_string+")";
-
- var obs_local_part = "("+word+"(\\x2e"+word+")*)";
- var obs_domain = "("+atom+"(\\x2e"+atom+")*)";
-
- var dot_atom_text = "("+atext+"+(\\x2e"+atext+"+)*)";
- var dot_atom = "("+cfws+"?"+dot_atom_text+cfws+"?)";
-
- var dtext = "("+no_ws_ctl+"|[\\x21-\\x5a\\x5e-\\x7e])";
- var dcontent = "("+dtext+"|"+quoted_pair+")";
- var domain_literal = "("+cfws+"?\\x5b("+fws+"?"+dcontent+")*"+fws+"?\\x5d"+cfws+"?)";
-
- var local_part = "("+dot_atom+"|"+quoted_string+"|"+obs_local_part+")";
- var domain = "("+dot_atom+"|"+domain_literal+"|"+obs_domain+")";
- var addr_spec = "("+local_part+"\\x40"+domain+")";
-
- var reg1 = inline ? new RegExp(addr_spec, 'i') : new RegExp('^'+addr_spec+'$', 'i');
+ 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;
apply_source_formatting : true,
theme : 'advanced',
plugins : 'emotions,media,nonbreaking,table,searchreplace,spellchecker,visualchars',
- theme_advanced_buttons1 : 'bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,link,unlink,emotions,forecolor,backcolor,formatselect,fontselect,fontsizeselect',
- theme_advanced_buttons2 : 'undo,redo,image,media,hr,charmap,code,nonbreaking,visualchars,separator,search,replace,spellchecker,separator,tablecontrols',
+ theme_advanced_buttons1 : 'bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,emotions,charmap,code,forecolor,backcolor,fontselect,fontsizeselect, separator,undo,redo,image,media',
+ theme_advanced_buttons2 : '',
theme_advanced_buttons3 : '',
theme_advanced_toolbar_location : 'top',
theme_advanced_toolbar_align : 'left',
extended_valid_elements : 'font[face|size|color|style],span[id|class|align|style]',
content_css : skin_path + '/editor_content.css',
- popups_css : skin_path + '/editor_popup.css',
- editor_css : skin_path + '/editor_ui.css'
+ editor_css : skin_path + '/editor_ui.css',
+ external_image_list_url : 'program/js/editor_images.js'
});
}
// determine the currently displayed editor
var htmlFlag = document.getElementsByName('_is_html')[0];
- var currentEditor = htmlFlag.value;
+ var isHtml = htmlFlag.value;
- if (selectedEditor == currentEditor)
+ if (((selectedEditor == 'plain') && (isHtml == "0")) ||
+ ((selectedEditor == 'html') && (isHtml == "1")))
{
return;
}
--- /dev/null
+
+var rc_client = tinyMCEPopup.windowOpener.rcube_webmail_client;
+if (rc_client.gui_objects.attachmentlist)
+{
+ var tinyMCEImageList = new Array();
+ var attachElems = rc_client.gui_objects.attachmentlist.getElementsByTagName("li");
+ for (i = 0; i < attachElems.length; i++)
+ {
+ var liElem = attachElems[i];
+ var fname = attachElems[i].id;
+ for (j = 0; j < liElem.childNodes.length; j++)
+ {
+ if (liElem.childNodes[j].nodeName == "#text")
+ {
+ fname = liElem.childNodes[j].nodeValue;
+ }
+ }
+ tinyMCEImageList.push([fname, rc_client.env.comm_path+'&_action=display-attachment&_file='+attachElems[i].id]);
+ }
+};
| RoundCube List Widget |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2006, RoundCube Dev, - Switzerland |
+ | Copyright (C) 2006-2008, RoundCube Dev, - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
this.rows = [];
this.selection = [];
+ this.subject_col = -1;
this.shiftkey = false;
-
this.multiselect = false;
this.draggable = false;
this.keyboard = false;
*/
drag_row: function(e, id)
{
- this.in_selection_before = this.in_selection(id) ? id : false;
-
// don't do anything (another action processed before)
- if (this.dont_select)
+ var evtarget = rcube_event.get_target(e);
+ if (this.dont_select || (evtarget && (evtarget.tagName == 'INPUT' || evtarget.tagName == 'IMG')))
return false;
+ this.in_selection_before = this.in_selection(id) ? id : false;
+
// selects currently unselected row
if (!this.in_selection_before)
{
{
var now = new Date().getTime();
var mod_key = rcube_event.get_modifier(e);
-
+ var evtarget = rcube_event.get_target(e);
+
+ if ((evtarget && (evtarget.tagName == 'INPUT' || evtarget.tagName == 'IMG')))
+ return false;
+
// don't do anything (another action processed before)
if (this.dont_select)
{
{
if (this.rows[id] && !multiple)
{
- this.clear_selection();
- this.selection[0] = id;
- this.set_classname(this.rows[id].obj, 'selected', true)
+ if (!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.focused != true)
return true;
- this.shiftkey = e.shiftKey;
-
var keyCode = document.layers ? e.which : document.all ? event.keyCode : document.getElementById ? e.keyCode : 0;
var mod_key = rcube_event.get_modifier(e);
switch (keyCode)
break;
default:
+ this.shiftkey = e.shiftKey;
this.key_pressed = keyCode;
this.trigger_event('keypress');
}
// get subjects of selectedd messages
var names = '';
- var c, node, subject, obj;
+ var c, i, node, subject, obj;
for(var n=0; n<this.selection.length; n++)
{
if (n>12) // only show 12 lines
obj = this.rows[this.selection[n]].obj;
subject = '';
- for(c=0; c<obj.childNodes.length; c++)
- if (obj.childNodes[c].nodeName=='TD' && (node = obj.childNodes[c].firstChild) && (node.nodeType==3 || node.nodeName=='A'))
+ for(c=0, i=0; i<obj.childNodes.length; i++)
+ {
+ if (obj.childNodes[i].nodeName == 'TD')
{
- subject = node.nodeType==3 ? node.data : node.innerHTML;
- names += (subject.length > 50 ? subject.substring(0, 50)+'...' : subject) + '<br />';
- break;
+ if (((node = obj.childNodes[i].firstChild) && (node.nodeType==3 || node.nodeName=='A')) &&
+ (this.subject_col < 0 || (this.subject_col >= 0 && this.subject_col == c)))
+ {
+ subject = node.nodeType==3 ? node.data : node.innerHTML;
+ names += (subject.length > 50 ? subject.substring(0, 50)+'...' : subject) + '<br />';
+ break;
+ }
+ c++;
}
+ }
}
}
- GNU LESSER GENERAL PUBLIC LICENSE\r
- Version 2.1, February 1999\r
-\r
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\r
- Everyone is permitted to copy and distribute verbatim copies\r
- of this license document, but changing it is not allowed.\r
-\r
-[This is the first released version of the Lesser GPL. It also counts\r
- as the successor of the GNU Library Public License, version 2, hence\r
- the version number 2.1.]\r
-\r
- Preamble\r
-\r
- The licenses for most software are designed to take away your\r
-freedom to share and change it. By contrast, the GNU General Public\r
-Licenses are intended to guarantee your freedom to share and change\r
-free software--to make sure the software is free for all its users.\r
-\r
- This license, the Lesser General Public License, applies to some\r
-specially designated software packages--typically libraries--of the\r
-Free Software Foundation and other authors who decide to use it. You\r
-can use it too, but we suggest you first think carefully about whether\r
-this license or the ordinary General Public License is the better\r
-strategy to use in any particular case, based on the explanations below.\r
-\r
- When we speak of free software, we are referring to freedom of use,\r
-not price. Our General Public Licenses are designed to make sure that\r
-you have the freedom to distribute copies of free software (and charge\r
-for this service if you wish); that you receive source code or can get\r
-it if you want it; that you can change the software and use pieces of\r
-it in new free programs; and that you are informed that you can do\r
-these things.\r
-\r
- To protect your rights, we need to make restrictions that forbid\r
-distributors to deny you these rights or to ask you to surrender these\r
-rights. These restrictions translate to certain responsibilities for\r
-you if you distribute copies of the library or if you modify it.\r
-\r
- For example, if you distribute copies of the library, whether gratis\r
-or for a fee, you must give the recipients all the rights that we gave\r
-you. You must make sure that they, too, receive or can get the source\r
-code. If you link other code with the library, you must provide\r
-complete object files to the recipients, so that they can relink them\r
-with the library after making changes to the library and recompiling\r
-it. And you must show them these terms so they know their rights.\r
-\r
- We protect your rights with a two-step method: (1) we copyright the\r
-library, and (2) we offer you this license, which gives you legal\r
-permission to copy, distribute and/or modify the library.\r
-\r
- To protect each distributor, we want to make it very clear that\r
-there is no warranty for the free library. Also, if the library is\r
-modified by someone else and passed on, the recipients should know\r
-that what they have is not the original version, so that the original\r
-author's reputation will not be affected by problems that might be\r
-introduced by others.\r
-\r
- Finally, software patents pose a constant threat to the existence of\r
-any free program. We wish to make sure that a company cannot\r
-effectively restrict the users of a free program by obtaining a\r
-restrictive license from a patent holder. Therefore, we insist that\r
-any patent license obtained for a version of the library must be\r
-consistent with the full freedom of use specified in this license.\r
-\r
- Most GNU software, including some libraries, is covered by the\r
-ordinary GNU General Public License. This license, the GNU Lesser\r
-General Public License, applies to certain designated libraries, and\r
-is quite different from the ordinary General Public License. We use\r
-this license for certain libraries in order to permit linking those\r
-libraries into non-free programs.\r
-\r
- When a program is linked with a library, whether statically or using\r
-a shared library, the combination of the two is legally speaking a\r
-combined work, a derivative of the original library. The ordinary\r
-General Public License therefore permits such linking only if the\r
-entire combination fits its criteria of freedom. The Lesser General\r
-Public License permits more lax criteria for linking other code with\r
-the library.\r
-\r
- We call this license the "Lesser" General Public License because it\r
-does Less to protect the user's freedom than the ordinary General\r
-Public License. It also provides other free software developers Less\r
-of an advantage over competing non-free programs. These disadvantages\r
-are the reason we use the ordinary General Public License for many\r
-libraries. However, the Lesser license provides advantages in certain\r
-special circumstances.\r
-\r
- For example, on rare occasions, there may be a special need to\r
-encourage the widest possible use of a certain library, so that it becomes\r
-a de-facto standard. To achieve this, non-free programs must be\r
-allowed to use the library. A more frequent case is that a free\r
-library does the same job as widely used non-free libraries. In this\r
-case, there is little to gain by limiting the free library to free\r
-software only, so we use the Lesser General Public License.\r
-\r
- In other cases, permission to use a particular library in non-free\r
-programs enables a greater number of people to use a large body of\r
-free software. For example, permission to use the GNU C Library in\r
-non-free programs enables many more people to use the whole GNU\r
-operating system, as well as its variant, the GNU/Linux operating\r
-system.\r
-\r
- Although the Lesser General Public License is Less protective of the\r
-users' freedom, it does ensure that the user of a program that is\r
-linked with the Library has the freedom and the wherewithal to run\r
-that program using a modified version of the Library.\r
-\r
- The precise terms and conditions for copying, distribution and\r
-modification follow. Pay close attention to the difference between a\r
-"work based on the library" and a "work that uses the library". The\r
-former contains code derived from the library, whereas the latter must\r
-be combined with the library in order to run.\r
-\r
- GNU LESSER GENERAL PUBLIC LICENSE\r
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
-\r
- 0. This License Agreement applies to any software library or other\r
-program which contains a notice placed by the copyright holder or\r
-other authorized party saying it may be distributed under the terms of\r
-this Lesser General Public License (also called "this License").\r
-Each licensee is addressed as "you".\r
-\r
- A "library" means a collection of software functions and/or data\r
-prepared so as to be conveniently linked with application programs\r
-(which use some of those functions and data) to form executables.\r
-\r
- The "Library", below, refers to any such software library or work\r
-which has been distributed under these terms. A "work based on the\r
-Library" means either the Library or any derivative work under\r
-copyright law: that is to say, a work containing the Library or a\r
-portion of it, either verbatim or with modifications and/or translated\r
-straightforwardly into another language. (Hereinafter, translation is\r
-included without limitation in the term "modification".)\r
-\r
- "Source code" for a work means the preferred form of the work for\r
-making modifications to it. For a library, complete source code means\r
-all the source code for all modules it contains, plus any associated\r
-interface definition files, plus the scripts used to control compilation\r
-and installation of the library.\r
-\r
- Activities other than copying, distribution and modification are not\r
-covered by this License; they are outside its scope. The act of\r
-running a program using the Library is not restricted, and output from\r
-such a program is covered only if its contents constitute a work based\r
-on the Library (independent of the use of the Library in a tool for\r
-writing it). Whether that is true depends on what the Library does\r
-and what the program that uses the Library does.\r
- \r
- 1. You may copy and distribute verbatim copies of the Library's\r
-complete source code as you receive it, in any medium, provided that\r
-you conspicuously and appropriately publish on each copy an\r
-appropriate copyright notice and disclaimer of warranty; keep intact\r
-all the notices that refer to this License and to the absence of any\r
-warranty; and distribute a copy of this License along with the\r
-Library.\r
-\r
- You may charge a fee for the physical act of transferring a copy,\r
-and you may at your option offer warranty protection in exchange for a\r
-fee.\r
-\r
- 2. You may modify your copy or copies of the Library or any portion\r
-of it, thus forming a work based on the Library, and copy and\r
-distribute such modifications or work under the terms of Section 1\r
-above, provided that you also meet all of these conditions:\r
-\r
- a) The modified work must itself be a software library.\r
-\r
- b) You must cause the files modified to carry prominent notices\r
- stating that you changed the files and the date of any change.\r
-\r
- c) You must cause the whole of the work to be licensed at no\r
- charge to all third parties under the terms of this License.\r
-\r
- d) If a facility in the modified Library refers to a function or a\r
- table of data to be supplied by an application program that uses\r
- the facility, other than as an argument passed when the facility\r
- is invoked, then you must make a good faith effort to ensure that,\r
- in the event an application does not supply such function or\r
- table, the facility still operates, and performs whatever part of\r
- its purpose remains meaningful.\r
-\r
- (For example, a function in a library to compute square roots has\r
- a purpose that is entirely well-defined independent of the\r
- application. Therefore, Subsection 2d requires that any\r
- application-supplied function or table used by this function must\r
- be optional: if the application does not supply it, the square\r
- root function must still compute square roots.)\r
-\r
-These requirements apply to the modified work as a whole. If\r
-identifiable sections of that work are not derived from the Library,\r
-and can be reasonably considered independent and separate works in\r
-themselves, then this License, and its terms, do not apply to those\r
-sections when you distribute them as separate works. But when you\r
-distribute the same sections as part of a whole which is a work based\r
-on the Library, the distribution of the whole must be on the terms of\r
-this License, whose permissions for other licensees extend to the\r
-entire whole, and thus to each and every part regardless of who wrote\r
-it.\r
-\r
-Thus, it is not the intent of this section to claim rights or contest\r
-your rights to work written entirely by you; rather, the intent is to\r
-exercise the right to control the distribution of derivative or\r
-collective works based on the Library.\r
-\r
-In addition, mere aggregation of another work not based on the Library\r
-with the Library (or with a work based on the Library) on a volume of\r
-a storage or distribution medium does not bring the other work under\r
-the scope of this License.\r
-\r
- 3. You may opt to apply the terms of the ordinary GNU General Public\r
-License instead of this License to a given copy of the Library. To do\r
-this, you must alter all the notices that refer to this License, so\r
-that they refer to the ordinary GNU General Public License, version 2,\r
-instead of to this License. (If a newer version than version 2 of the\r
-ordinary GNU General Public License has appeared, then you can specify\r
-that version instead if you wish.) Do not make any other change in\r
-these notices.\r
-\r
- Once this change is made in a given copy, it is irreversible for\r
-that copy, so the ordinary GNU General Public License applies to all\r
-subsequent copies and derivative works made from that copy.\r
-\r
- This option is useful when you wish to copy part of the code of\r
-the Library into a program that is not a library.\r
-\r
- 4. You may copy and distribute the Library (or a portion or\r
-derivative of it, under Section 2) in object code or executable form\r
-under the terms of Sections 1 and 2 above provided that you accompany\r
-it with the complete corresponding machine-readable source code, which\r
-must be distributed under the terms of Sections 1 and 2 above on a\r
-medium customarily used for software interchange.\r
-\r
- If distribution of object code is made by offering access to copy\r
-from a designated place, then offering equivalent access to copy the\r
-source code from the same place satisfies the requirement to\r
-distribute the source code, even though third parties are not\r
-compelled to copy the source along with the object code.\r
-\r
- 5. A program that contains no derivative of any portion of the\r
-Library, but is designed to work with the Library by being compiled or\r
-linked with it, is called a "work that uses the Library". Such a\r
-work, in isolation, is not a derivative work of the Library, and\r
-therefore falls outside the scope of this License.\r
-\r
- However, linking a "work that uses the Library" with the Library\r
-creates an executable that is a derivative of the Library (because it\r
-contains portions of the Library), rather than a "work that uses the\r
-library". The executable is therefore covered by this License.\r
-Section 6 states terms for distribution of such executables.\r
-\r
- When a "work that uses the Library" uses material from a header file\r
-that is part of the Library, the object code for the work may be a\r
-derivative work of the Library even though the source code is not.\r
-Whether this is true is especially significant if the work can be\r
-linked without the Library, or if the work is itself a library. The\r
-threshold for this to be true is not precisely defined by law.\r
-\r
- If such an object file uses only numerical parameters, data\r
-structure layouts and accessors, and small macros and small inline\r
-functions (ten lines or less in length), then the use of the object\r
-file is unrestricted, regardless of whether it is legally a derivative\r
-work. (Executables containing this object code plus portions of the\r
-Library will still fall under Section 6.)\r
-\r
- Otherwise, if the work is a derivative of the Library, you may\r
-distribute the object code for the work under the terms of Section 6.\r
-Any executables containing that work also fall under Section 6,\r
-whether or not they are linked directly with the Library itself.\r
-\r
- 6. As an exception to the Sections above, you may also combine or\r
-link a "work that uses the Library" with the Library to produce a\r
-work containing portions of the Library, and distribute that work\r
-under terms of your choice, provided that the terms permit\r
-modification of the work for the customer's own use and reverse\r
-engineering for debugging such modifications.\r
-\r
- You must give prominent notice with each copy of the work that the\r
-Library is used in it and that the Library and its use are covered by\r
-this License. You must supply a copy of this License. If the work\r
-during execution displays copyright notices, you must include the\r
-copyright notice for the Library among them, as well as a reference\r
-directing the user to the copy of this License. Also, you must do one\r
-of these things:\r
-\r
- a) Accompany the work with the complete corresponding\r
- machine-readable source code for the Library including whatever\r
- changes were used in the work (which must be distributed under\r
- Sections 1 and 2 above); and, if the work is an executable linked\r
- with the Library, with the complete machine-readable "work that\r
- uses the Library", as object code and/or source code, so that the\r
- user can modify the Library and then relink to produce a modified\r
- executable containing the modified Library. (It is understood\r
- that the user who changes the contents of definitions files in the\r
- Library will not necessarily be able to recompile the application\r
- to use the modified definitions.)\r
-\r
- b) Use a suitable shared library mechanism for linking with the\r
- Library. A suitable mechanism is one that (1) uses at run time a\r
- copy of the library already present on the user's computer system,\r
- rather than copying library functions into the executable, and (2)\r
- will operate properly with a modified version of the library, if\r
- the user installs one, as long as the modified version is\r
- interface-compatible with the version that the work was made with.\r
-\r
- c) Accompany the work with a written offer, valid for at\r
- least three years, to give the same user the materials\r
- specified in Subsection 6a, above, for a charge no more\r
- than the cost of performing this distribution.\r
-\r
- d) If distribution of the work is made by offering access to copy\r
- from a designated place, offer equivalent access to copy the above\r
- specified materials from the same place.\r
-\r
- e) Verify that the user has already received a copy of these\r
- materials or that you have already sent this user a copy.\r
-\r
- For an executable, the required form of the "work that uses the\r
-Library" must include any data and utility programs needed for\r
-reproducing the executable from it. However, as a special exception,\r
-the materials to be distributed need not include anything that is\r
-normally distributed (in either source or binary form) with the major\r
-components (compiler, kernel, and so on) of the operating system on\r
-which the executable runs, unless that component itself accompanies\r
-the executable.\r
-\r
- It may happen that this requirement contradicts the license\r
-restrictions of other proprietary libraries that do not normally\r
-accompany the operating system. Such a contradiction means you cannot\r
-use both them and the Library together in an executable that you\r
-distribute.\r
-\r
- 7. You may place library facilities that are a work based on the\r
-Library side-by-side in a single library together with other library\r
-facilities not covered by this License, and distribute such a combined\r
-library, provided that the separate distribution of the work based on\r
-the Library and of the other library facilities is otherwise\r
-permitted, and provided that you do these two things:\r
-\r
- a) Accompany the combined library with a copy of the same work\r
- based on the Library, uncombined with any other library\r
- facilities. This must be distributed under the terms of the\r
- Sections above.\r
-\r
- b) Give prominent notice with the combined library of the fact\r
- that part of it is a work based on the Library, and explaining\r
- where to find the accompanying uncombined form of the same work.\r
-\r
- 8. You may not copy, modify, sublicense, link with, or distribute\r
-the Library except as expressly provided under this License. Any\r
-attempt otherwise to copy, modify, sublicense, link with, or\r
-distribute the Library is void, and will automatically terminate your\r
-rights under this License. However, parties who have received copies,\r
-or rights, from you under this License will not have their licenses\r
-terminated so long as such parties remain in full compliance.\r
-\r
- 9. You are not required to accept this License, since you have not\r
-signed it. However, nothing else grants you permission to modify or\r
-distribute the Library or its derivative works. These actions are\r
-prohibited by law if you do not accept this License. Therefore, by\r
-modifying or distributing the Library (or any work based on the\r
-Library), you indicate your acceptance of this License to do so, and\r
-all its terms and conditions for copying, distributing or modifying\r
-the Library or works based on it.\r
-\r
- 10. Each time you redistribute the Library (or any work based on the\r
-Library), the recipient automatically receives a license from the\r
-original licensor to copy, distribute, link with or modify the Library\r
-subject to these terms and conditions. You may not impose any further\r
-restrictions on the recipients' exercise of the rights granted herein.\r
-You are not responsible for enforcing compliance by third parties with\r
-this License.\r
-\r
- 11. If, as a consequence of a court judgment or allegation of patent\r
-infringement or for any other reason (not limited to patent issues),\r
-conditions are imposed on you (whether by court order, agreement or\r
-otherwise) that contradict the conditions of this License, they do not\r
-excuse you from the conditions of this License. If you cannot\r
-distribute so as to satisfy simultaneously your obligations under this\r
-License and any other pertinent obligations, then as a consequence you\r
-may not distribute the Library at all. For example, if a patent\r
-license would not permit royalty-free redistribution of the Library by\r
-all those who receive copies directly or indirectly through you, then\r
-the only way you could satisfy both it and this License would be to\r
-refrain entirely from distribution of the Library.\r
-\r
-If any portion of this section is held invalid or unenforceable under any\r
-particular circumstance, the balance of the section is intended to apply,\r
-and the section as a whole is intended to apply in other circumstances.\r
-\r
-It is not the purpose of this section to induce you to infringe any\r
-patents or other property right claims or to contest validity of any\r
-such claims; this section has the sole purpose of protecting the\r
-integrity of the free software distribution system which is\r
-implemented by public license practices. Many people have made\r
-generous contributions to the wide range of software distributed\r
-through that system in reliance on consistent application of that\r
-system; it is up to the author/donor to decide if he or she is willing\r
-to distribute software through any other system and a licensee cannot\r
-impose that choice.\r
-\r
-This section is intended to make thoroughly clear what is believed to\r
-be a consequence of the rest of this License.\r
-\r
- 12. If the distribution and/or use of the Library is restricted in\r
-certain countries either by patents or by copyrighted interfaces, the\r
-original copyright holder who places the Library under this License may add\r
-an explicit geographical distribution limitation excluding those countries,\r
-so that distribution is permitted only in or among countries not thus\r
-excluded. In such case, this License incorporates the limitation as if\r
-written in the body of this License.\r
-\r
- 13. The Free Software Foundation may publish revised and/or new\r
-versions of the Lesser General Public License from time to time.\r
-Such new versions will be similar in spirit to the present version,\r
-but may differ in detail to address new problems or concerns.\r
-\r
-Each version is given a distinguishing version number. If the Library\r
-specifies a version number of this License which applies to it and\r
-"any later version", you have the option of following the terms and\r
-conditions either of that version or of any later version published by\r
-the Free Software Foundation. If the Library does not specify a\r
-license version number, you may choose any version ever published by\r
-the Free Software Foundation.\r
-\r
- 14. If you wish to incorporate parts of the Library into other free\r
-programs whose distribution conditions are incompatible with these,\r
-write to the author to ask for permission. For software which is\r
-copyrighted by the Free Software Foundation, write to the Free\r
-Software Foundation; we sometimes make exceptions for this. Our\r
-decision will be guided by the two goals of preserving the free status\r
-of all derivatives of our free software and of promoting the sharing\r
-and reuse of software generally.\r
-\r
- NO WARRANTY\r
-\r
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
-\r
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
-DAMAGES.\r
-\r
- END OF TERMS AND CONDITIONS\r
-\r
- How to Apply These Terms to Your New Libraries\r
-\r
- If you develop a new library, and you want it to be of the greatest\r
-possible use to the public, we recommend making it free software that\r
-everyone can redistribute and change. You can do so by permitting\r
-redistribution under these terms (or, alternatively, under the terms of the\r
-ordinary General Public License).\r
-\r
- To apply these terms, attach the following notices to the library. It is\r
-safest to attach them to the start of each source file to most effectively\r
-convey the exclusion of warranty; and each file should have at least the\r
-"copyright" line and a pointer to where the full notice is found.\r
-\r
- <one line to give the library's name and a brief idea of what it does.>\r
- Copyright (C) <year> <name of author>\r
-\r
- This library is free software; you can redistribute it and/or\r
- modify it under the terms of the GNU Lesser General Public\r
- License as published by the Free Software Foundation; either\r
- version 2.1 of the License, or (at your option) any later version.\r
-\r
- This library is distributed in the hope that it will be useful,\r
- but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
- Lesser General Public License for more details.\r
-\r
- You should have received a copy of the GNU Lesser General Public\r
- License along with this library; if not, write to the Free Software\r
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\r
-\r
-Also add information on how to contact you by electronic and paper mail.\r
-\r
-You should also get your employer (if you work as a programmer) or your\r
-school, if any, to sign a "copyright disclaimer" for the library, if\r
-necessary. Here is a sample; alter the names:\r
-\r
- Yoyodyne, Inc., hereby disclaims all copyright interest in the\r
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.\r
-\r
- <signature of Ty Coon>, 1 April 1990\r
- Ty Coon, President of Vice\r
-\r
-That's all there is to it!\r
-\r
-\r
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
-.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {\r
- border: 1px dotted #cc0000;\r
- background-position: center;\r
- background-repeat: no-repeat;\r
- background-color: #ffffcc;\r
-}\r
-\r
-.mceItemShockWave {\r
- background-image: url('../images/shockwave.gif');\r
-}\r
-\r
-.mceItemFlash {\r
- background-image: url('../images/flash.gif');\r
-}\r
-\r
-.mceItemQuickTime {\r
- background-image: url('../images/quicktime.gif');\r
-}\r
-\r
-.mceItemWindowsMedia {\r
- background-image: url('../images/windowsmedia.gif');\r
-}\r
-\r
-.mceItemRealMedia {\r
- background-image: url('../images/realmedia.gif');\r
-}\r
+.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {
+ border: 1px dotted #cc0000;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-color: #ffffcc;
+}
+
+.mceItemShockWave {
+ background-image: url('../images/shockwave.gif');
+}
+
+.mceItemFlash {
+ background-image: url('../images/flash.gif');
+}
+
+.mceItemQuickTime {
+ background-image: url('../images/quicktime.gif');
+}
+
+.mceItemWindowsMedia {
+ background-image: url('../images/windowsmedia.gif');
+}
+
+.mceItemRealMedia {
+ background-image: url('../images/realmedia.gif');
+}
-#id, #name, #hspace, #vspace, #class_name, #align {\r
- width: 100px;\r
-}\r
-\r
-#hspace, #vspace {\r
- width: 50px;\r
-}\r
-\r
-#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode {\r
- width: 100px;\r
-}\r
-\r
-#flash_base, #flash_flashvars {\r
- width: 240px;\r
-}\r
-\r
-#width, #height {\r
- width: 40px;\r
-}\r
-\r
-#src, #media_type {\r
- width: 250px;\r
-}\r
-\r
-#class {\r
- width: 120px;\r
-}\r
-\r
-#prev {\r
- margin: 0;\r
- border: 1px solid black;\r
- width: 99%;\r
- height: 230px;\r
- overflow: auto;\r
-}\r
-\r
-.panel_wrapper div.current {\r
- height: 390px;\r
- overflow: auto;\r
-}\r
-\r
-#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options {\r
- display: none;\r
-}\r
-\r
-.mceAddSelectValue {\r
- background-color: #DDDDDD;\r
-}\r
-\r
-#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume {\r
- width: 70px;\r
-}\r
-\r
-#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume {\r
- width: 70px;\r
-}\r
-\r
-#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks {\r
- width: 70px;\r
-}\r
-\r
-#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle {\r
- width: 90px;\r
-}\r
-\r
-#qt_qtsrc {\r
- width: 200px;\r
-}\r
+#id, #name, #hspace, #vspace, #class_name, #align {
+ width: 100px;
+}
+
+#hspace, #vspace {
+ width: 50px;
+}
+
+#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode {
+ width: 100px;
+}
+
+#flash_base, #flash_flashvars {
+ width: 240px;
+}
+
+#width, #height {
+ width: 40px;
+}
+
+#src, #media_type {
+ width: 250px;
+}
+
+#class {
+ width: 120px;
+}
+
+#prev {
+ margin: 0;
+ border: 1px solid black;
+ width: 99%;
+ height: 230px;
+ overflow: auto;
+}
+
+.panel_wrapper div.current {
+ height: 390px;
+ overflow: auto;
+}
+
+#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options {
+ display: none;
+}
+
+.mceAddSelectValue {
+ background-color: #DDDDDD;
+}
+
+#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume {
+ width: 70px;
+}
+
+#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume {
+ width: 70px;
+}
+
+#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks {
+ width: 70px;
+}
+
+#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle {
+ width: 90px;
+}
+
+#qt_qtsrc {
+ width: 200px;
+}
-tinyMCE.importPluginLanguagePack('media');var TinyMCE_MediaPlugin={getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(inst.hasPlugin('flash')&&!tinyMCE.flashWarn){alert('Flash plugin is deprecated and should not be used together with the media plugin.');tinyMCE.flashWarn=true}if(!tinyMCE.settings['media_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/media/css/content.css")},getControlHTML:function(cn){switch(cn){case"media":return tinyMCE.getButtonHTML(cn,'lang_media_desc','{$pluginurl}/images/media.gif','mceMedia')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceMedia":tinyMCE.openWindow({file:'../../plugins/media/media.htm',width:430+tinyMCE.getLang('lang_media_delta_width',0),height:470+tinyMCE.getLang('lang_media_delta_height',0)},{editor_id:editor_id,inline:"yes"});return true}return false},cleanup:function(type,content,inst){var nl,img,i,ne,d,s,ci;switch(type){case"insert_to_editor":img=tinyMCE.getParam("theme_href")+'/images/spacer.gif';content=content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,'<img class="mceItem$1" title="$2" src="'+img+'" />');content=content.replace(/<object([^>]*)>/gi,'<div class="mceItemObject" $1>');content=content.replace(/<embed([^>]*)>/gi,'<div class="mceItemObjectEmbed" $1>');content=content.replace(/<\/(object|embed)([^>]*)>/gi,'</div>');content=content.replace(/<param([^>]*)>/gi,'<div $1 class="mceItemParam"></div>');content=content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>','gi'),'class="mceItemParam"></div>');break;case"insert_to_editor_dom":d=inst.getDoc();nl=content.getElementsByTagName("img");for(i=0;i<nl.length;i++){if(/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)){nl[i].width=nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g,'$1');nl[i].height=nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g,'$1');}}nl=tinyMCE.selectElements(content,'DIV',function(n){return tinyMCE.hasCSSClass(n,'mceItemObject')});for(i=0;i<nl.length;i++){ci=tinyMCE.getAttrib(nl[i],"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash',d,nl[i]),nl[i]);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave',d,nl[i]),nl[i]);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia',d,nl[i]),nl[i]);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime',d,nl[i]),nl[i]);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia',d,nl[i]),nl[i]);break}}nl=tinyMCE.selectNodes(content,function(n){return n.className=='mceItemObjectEmbed'});for(i=0;i<nl.length;i++){switch(tinyMCE.getAttrib(nl[i],'type')){case'application/x-shockwave-flash':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemFlash');break;case'application/x-director':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemShockWave');break;case'application/x-mplayer2':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemWindowsMedia');break;case'video/quicktime':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemQuickTime');break;case'audio/x-pn-realaudio-plugin':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemRealMedia');break}}break;case"get_from_editor":var startPos=-1,endPos,attribs,chunkBefore,chunkAfter,embedHTML,at,pl,cb,mt,ex;while((startPos=content.indexOf('<img',startPos+1))!=-1){endPos=content.indexOf('/>',startPos);attribs=TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos+4,endPos));if(!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))continue;endPos+=2;at=attribs['title'];if(at){at=at.replace(/&(#39|apos);/g,"'");at=at.replace(/&#quot;/g,'"');try{pl=eval('x={'+at+'};')}catch(ex){pl={}}}if(!tinyMCE.getParam('media_use_script',false)){switch(attribs['class']){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166B1BCA-3F9C-11CF-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=tinyMCE.getParam('media_wmp6_compatible')?'05589FA1-C356-11CE-BF01-00AA0055595A':'6BF52A52-394A-11D3-B153-00C04F79FAA6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break}if(!tinyMCE.getParam("relative_urls"))pl.src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],pl.src);embedHTML=TinyMCE_MediaPlugin._getEmbed(ci,cb,mt,pl,attribs)}else{switch(attribs['class']){case'mceItemFlash':s='writeFlash';break;case'mceItemShockWave':s='writeShockWave';break;case'mceItemWindowsMedia':s='writeWindowsMedia';break;case'mceItemQuickTime':s='writeQuickTime';break;case'mceItemRealMedia':s='writeRealMedia';break}if(attribs.width)at=at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g,"width:'"+attribs.width+"'");if(attribs.height)at=at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g,"height:'"+attribs.height+"'");if(!tinyMCE.getParam("relative_urls")){pl.src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],pl.src);at=at.replace(new RegExp("src:'[^']*'","g"),"src:'"+pl.src+"'")}embedHTML='<script type="text/javascript">'+s+'({'+at+'});</script>'}chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter}break}return content},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){if(node==null)return;do{if(node.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node,'class'))){tinyMCE.switchClass(editor_id+'_media','mceButtonSelected');return true}}while((node=node.parentNode));tinyMCE.switchClass(editor_id+'_media','mceButtonNormal');return true},_createImgFromEmbed:function(n,d,cl){var ne,at,i,ti='',an;ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;at=n.attributes;for(i=0;i<at.length;i++){if(at[i].specified&&at[i].nodeValue){an=at[i].nodeName.toLowerCase();if(an=='src')continue;if(an=='mce_src')an='src';if(an.indexOf('mce_')==-1&&!new RegExp('^(class|type)$').test(an))ti+=an.toLowerCase()+':\''+at[i].nodeValue+"',"}}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;n.parentNode.replaceChild(ne,n)},_createImg:function(cl,d,n){var i,nl,ti="",an,av,al=new Array();ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;al.id=tinyMCE.getAttrib(n,'id');al.name=tinyMCE.getAttrib(n,'name');al.width=tinyMCE.getAttrib(n,'width');al.height=tinyMCE.getAttrib(n,'height');al.bgcolor=tinyMCE.getAttrib(n,'bgcolor');al.align=tinyMCE.getAttrib(n,'align');al.class_name=tinyMCE.getAttrib(n,'mce_class');nl=n.getElementsByTagName('div');for(i=0;i<nl.length;i++){av=tinyMCE.getAttrib(nl[i],'value');av=av.replace(new RegExp('\\\\','g'),'\\\\');av=av.replace(new RegExp('"','g'),'\\"');av=av.replace(new RegExp("'",'g'),"\\'");an=tinyMCE.getAttrib(nl[i],'name');al[an]=av}if(al.movie){al.src=al.movie;al.movie=null}for(an in al){if(al[an]!=null&&typeof(al[an])!="function"&&al[an]!='')ti+=an.toLowerCase()+':\''+al[an]+"',"}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;return ne},_getEmbed:function(cls,cb,mt,p,at){var h='',n;p.width=at.width?at.width:p.width;p.height=at.height?at.height:p.height;h+='<object classid="clsid:'+cls+'" codebase="'+cb+'"';h+=typeof(p.id)!="undefined"?' id="'+p.id+'"':'';h+=typeof(p.name)!="undefined"?' name="'+p.name+'"':'';h+=typeof(p.width)!="undefined"?' width="'+p.width+'"':'';h+=typeof(p.height)!="undefined"?' height="'+p.height+'"':'';h+=typeof(p.align)!="undefined"?' align="'+p.align+'"':'';h+='>';for(n in p){if(typeof(p[n])!="undefined"&&typeof(p[n])!="function"){h+='<param name="'+n+'" value="'+p[n]+'" />';if(n=='src'&&p[n].indexOf('://')!=-1&&mt=='application/x-mplayer2')h+='<param name="url" value="'+p[n]+'" />'}}h+='<embed type="'+mt+'"';for(n in p){if(typeof(p[n])=="function")continue;if(!(n=='url'&&mt=='application/x-mplayer2'))h+=' '+n+'="'+p[n]+'"'}h+='></embed></object>';return h},_parseAttributes:function(attribute_string){var attributeName="",endChr='"';var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i<attribute_string.length;i++){var chr=attribute_string.charAt(i);if((chr=='"'||chr=="'")&&!withInValue){withInValue=true;endChr=chr}else if(chr==endChr&&withInValue){withInValue=false;var pos=attributeName.lastIndexOf(' ');if(pos!=-1)attributeName=attributeName.substring(pos+1);attributes[attributeName.toLowerCase()]=attributeValue.substring(1);attributeName="";attributeValue=""}else if(!whiteSpaceRegExp.test(chr)&&!withInName&&!withInValue)withInName=true;if(chr=='='&&withInName)withInName=false;if(withInName)attributeName+=chr;if(withInValue)attributeValue+=chr}return attributes}};tinyMCE.addPlugin("media",TinyMCE_MediaPlugin);
\ No newline at end of file
+tinyMCE.importPluginLanguagePack('media');var TinyMCE_MediaPlugin={getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(inst.hasPlugin('flash')&&!tinyMCE.flashWarn){alert('Flash plugin is deprecated and should not be used together with the media plugin.');tinyMCE.flashWarn=true}if(!tinyMCE.settings['media_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/media/css/content.css")},getControlHTML:function(cn){switch(cn){case"media":return tinyMCE.getButtonHTML(cn,'lang_media_desc','{$pluginurl}/images/media.gif','mceMedia')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceMedia":tinyMCE.openWindow({file:'../../plugins/media/media.htm',width:430+tinyMCE.getLang('lang_media_delta_width',0),height:470+tinyMCE.getLang('lang_media_delta_height',0)},{editor_id:editor_id,inline:"yes"});return true}return false},cleanup:function(type,content,inst){var nl,img,i,ne,d,s,ci;switch(type){case"insert_to_editor":img=tinyMCE.getParam("theme_href")+'/images/spacer.gif';content=content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,'<img class="mceItem$1" title="$2" src="'+img+'" />');content=content.replace(/<object([^>]*)>/gi,'<div class="mceItemObject" $1>');content=content.replace(/<embed([^>]*)>/gi,'<div class="mceItemObjectEmbed" $1>');content=content.replace(/<\/(object|embed)([^>]*)>/gi,'</div>');content=content.replace(/<param([^>]*)>/gi,'<div $1 class="mceItemParam"></div>');content=content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>','gi'),'class="mceItemParam"></div>');break;case"insert_to_editor_dom":d=inst.getDoc();nl=content.getElementsByTagName("img");for(i=0;i<nl.length;i++){if(/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)){nl[i].width=nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g,'$1');nl[i].height=nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g,'$1');}}nl=tinyMCE.selectElements(content,'DIV',function(n){return tinyMCE.hasCSSClass(n,'mceItemObject')});for(i=0;i<nl.length;i++){ci=tinyMCE.getAttrib(nl[i],"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash',d,nl[i]),nl[i]);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave',d,nl[i]),nl[i]);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia',d,nl[i]),nl[i]);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime',d,nl[i]),nl[i]);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia',d,nl[i]),nl[i]);break}}nl=tinyMCE.selectNodes(content,function(n){return n.className=='mceItemObjectEmbed'});for(i=0;i<nl.length;i++){switch(tinyMCE.getAttrib(nl[i],'type')){case'application/x-shockwave-flash':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemFlash');break;case'application/x-director':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemShockWave');break;case'application/x-mplayer2':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemWindowsMedia');break;case'video/quicktime':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemQuickTime');break;case'audio/x-pn-realaudio-plugin':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemRealMedia');break}}break;case"get_from_editor":var startPos=-1,endPos,attribs,chunkBefore,chunkAfter,embedHTML,at,pl,cb,mt,ex;while((startPos=content.indexOf('<img',startPos+1))!=-1){endPos=content.indexOf('/>',startPos);attribs=TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos+4,endPos));if(!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))continue;endPos+=2;at=attribs['title'];if(at){at=at.replace(/&(#39|apos);/g,"'");at=at.replace(/&#quot;/g,'"');try{pl=eval('x={'+at+'};')}catch(ex){pl={}}}if(!tinyMCE.getParam('media_use_script',false)){switch(attribs['class']){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166B1BCA-3F9C-11CF-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=tinyMCE.getParam('media_wmp6_compatible')?'05589FA1-C356-11CE-BF01-00AA0055595A':'6BF52A52-394A-11D3-B153-00C04F79FAA6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break}pl.src=tinyMCE.convertURL(pl.src,null,true);embedHTML=TinyMCE_MediaPlugin._getEmbed(ci,cb,mt,pl,attribs)}else{switch(attribs['class']){case'mceItemFlash':s='writeFlash';break;case'mceItemShockWave':s='writeShockWave';break;case'mceItemWindowsMedia':s='writeWindowsMedia';break;case'mceItemQuickTime':s='writeQuickTime';break;case'mceItemRealMedia':s='writeRealMedia';break}if(attribs.width)at=at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g,"width:'"+attribs.width+"'");if(attribs.height)at=at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g,"height:'"+attribs.height+"'");pl.src=tinyMCE.convertURL(pl.src,null,true);at=at.replace(new RegExp("src:'[^']*'","g"),"src:'"+pl.src+"'");embedHTML='<script type="text/javascript">'+s+'({'+at+'});</script>'}chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter}break}return content},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){if(node==null)return;do{if(node.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node,'class'))){tinyMCE.switchClass(editor_id+'_media','mceButtonSelected');return true}}while((node=node.parentNode));tinyMCE.switchClass(editor_id+'_media','mceButtonNormal');return true},_createImgFromEmbed:function(n,d,cl){var ne,at,i,ti='',an;ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;at=n.attributes;for(i=0;i<at.length;i++){if(at[i].specified&&at[i].nodeValue){an=at[i].nodeName.toLowerCase();if(an=='src')continue;if(an=='mce_src')an='src';if(an.indexOf('mce_')==-1&&!new RegExp('^(class|type)$').test(an))ti+=an.toLowerCase()+':\''+at[i].nodeValue+"',"}}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;n.parentNode.replaceChild(ne,n)},_createImg:function(cl,d,n){var i,nl,ti="",an,av,al=new Array();ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;al.id=tinyMCE.getAttrib(n,'id');al.name=tinyMCE.getAttrib(n,'name');al.width=tinyMCE.getAttrib(n,'width');al.height=tinyMCE.getAttrib(n,'height');al.bgcolor=tinyMCE.getAttrib(n,'bgcolor');al.align=tinyMCE.getAttrib(n,'align');al.class_name=tinyMCE.getAttrib(n,'mce_class');nl=n.getElementsByTagName('div');for(i=0;i<nl.length;i++){av=tinyMCE.getAttrib(nl[i],'value');av=av.replace(new RegExp('\\\\','g'),'\\\\');av=av.replace(new RegExp('"','g'),'\\"');av=av.replace(new RegExp("'",'g'),"\\'");an=tinyMCE.getAttrib(nl[i],'name');al[an]=av}if(al.movie){al.src=al.movie;al.movie=null}for(an in al){if(al[an]!=null&&typeof(al[an])!="function"&&al[an]!='')ti+=an.toLowerCase()+':\''+al[an]+"',"}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;return ne},_getEmbed:function(cls,cb,mt,p,at){var h='',n;p.width=at.width?at.width:p.width;p.height=at.height?at.height:p.height;h+='<object classid="clsid:'+cls+'" codebase="'+cb+'"';h+=typeof(p.id)!="undefined"?' id="'+p.id+'"':'';h+=typeof(p.name)!="undefined"?' name="'+p.name+'"':'';h+=typeof(p.width)!="undefined"?' width="'+p.width+'"':'';h+=typeof(p.height)!="undefined"?' height="'+p.height+'"':'';h+=typeof(p.align)!="undefined"?' align="'+p.align+'"':'';h+='>';for(n in p){if(typeof(p[n])!="undefined"&&typeof(p[n])!="function"){h+='<param name="'+n+'" value="'+p[n]+'" />';if(n=='src'&&p[n].indexOf('://')!=-1&&mt=='application/x-mplayer2')h+='<param name="url" value="'+p[n]+'" />'}}h+='<embed type="'+mt+'"';for(n in p){if(typeof(p[n])=="function")continue;if(!(n=='url'&&mt=='application/x-mplayer2'))h+=' '+n+'="'+p[n]+'"'}h+='></embed></object>';return h},_parseAttributes:function(attribute_string){var attributeName="",endChr='"';var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i<attribute_string.length;i++){var chr=attribute_string.charAt(i);if((chr=='"'||chr=="'")&&!withInValue){withInValue=true;endChr=chr}else if(chr==endChr&&withInValue){withInValue=false;var pos=attributeName.lastIndexOf(' ');if(pos!=-1)attributeName=attributeName.substring(pos+1);attributes[attributeName.toLowerCase()]=attributeValue.substring(1);attributeName="";attributeValue=""}else if(!whiteSpaceRegExp.test(chr)&&!withInName&&!withInValue)withInName=true;if(chr=='='&&withInName)withInName=false;if(withInName)attributeName+=chr;if(withInValue)attributeValue+=chr}return attributes}};tinyMCE.addPlugin("media",TinyMCE_MediaPlugin);
\ No newline at end of file
-/**\r
- * $Id: editor_plugin_src.js 275 2007-05-01 15:35:08Z spocke $\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-/* Import plugin specific language pack */\r
-tinyMCE.importPluginLanguagePack('media');\r
-\r
-var TinyMCE_MediaPlugin = {\r
- getInfo : function() {\r
- return {\r
- longname : 'Media',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- },\r
-\r
- initInstance : function(inst) {\r
- // Warn if user has flash plugin and media plugin at the same time\r
- if (inst.hasPlugin('flash') && !tinyMCE.flashWarn) {\r
- alert('Flash plugin is deprecated and should not be used together with the media plugin.');\r
- tinyMCE.flashWarn = true;\r
- }\r
-\r
- if (!tinyMCE.settings['media_skip_plugin_css'])\r
- tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/media/css/content.css");\r
- },\r
-\r
- getControlHTML : function(cn) {\r
- switch (cn) {\r
- case "media":\r
- return tinyMCE.getButtonHTML(cn, 'lang_media_desc', '{$pluginurl}/images/media.gif', 'mceMedia');\r
- }\r
-\r
- return "";\r
- },\r
-\r
- execCommand : function(editor_id, element, command, user_interface, value) {\r
- // Handle commands\r
- switch (command) {\r
- case "mceMedia":\r
- tinyMCE.openWindow({\r
- file : '../../plugins/media/media.htm',\r
- width : 430 + tinyMCE.getLang('lang_media_delta_width', 0),\r
- height : 470 + tinyMCE.getLang('lang_media_delta_height', 0)\r
- }, {\r
- editor_id : editor_id,\r
- inline : "yes"\r
- });\r
-\r
- return true;\r
- }\r
-\r
- // Pass to next handler in chain\r
- return false;\r
- },\r
-\r
- cleanup : function(type, content, inst) {\r
- var nl, img, i, ne, d, s, ci;\r
-\r
- switch (type) {\r
- case "insert_to_editor":\r
- img = tinyMCE.getParam("theme_href") + '/images/spacer.gif';\r
- content = content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, '<img class="mceItem$1" title="$2" src="' + img + '" />');\r
- content = content.replace(/<object([^>]*)>/gi, '<div class="mceItemObject" $1>');\r
- content = content.replace(/<embed([^>]*)>/gi, '<div class="mceItemObjectEmbed" $1>');\r
- content = content.replace(/<\/(object|embed)([^>]*)>/gi, '</div>');\r
- content = content.replace(/<param([^>]*)>/gi, '<div $1 class="mceItemParam"></div>');\r
- content = content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>', 'gi'), 'class="mceItemParam"></div>');\r
- break;\r
-\r
- case "insert_to_editor_dom":\r
- d = inst.getDoc();\r
- nl = content.getElementsByTagName("img");\r
- for (i=0; i<nl.length; i++) {\r
- if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)) {\r
- nl[i].width = nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g, '$1');\r
- nl[i].height = nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g, '$1');\r
- //nl[i].align = nl[i].title.replace(/.*align:([a-z]+).*/gi, '$1');\r
- }\r
- }\r
-\r
- nl = tinyMCE.selectElements(content, 'DIV', function (n) {return tinyMCE.hasCSSClass(n, 'mceItemObject');});\r
- for (i=0; i<nl.length; i++) {\r
- ci = tinyMCE.getAttrib(nl[i], "classid").toLowerCase().replace(/\s+/g, '');\r
-\r
- switch (ci) {\r
- case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':\r
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash', d, nl[i]), nl[i]);\r
- break;\r
-\r
- case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':\r
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave', d, nl[i]), nl[i]);\r
- break;\r
-\r
- case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':\r
- case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':\r
- case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':\r
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia', d, nl[i]), nl[i]);\r
- break;\r
-\r
- case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':\r
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime', d, nl[i]), nl[i]);\r
- break;\r
-\r
- case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':\r
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia', d, nl[i]), nl[i]);\r
- break;\r
- }\r
- }\r
-\r
- // Handle embed (if any)\r
- nl = tinyMCE.selectNodes(content, function (n) {return n.className == 'mceItemObjectEmbed';});\r
- for (i=0; i<nl.length; i++) {\r
- switch (tinyMCE.getAttrib(nl[i], 'type')) {\r
- case 'application/x-shockwave-flash':\r
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemFlash');\r
- break;\r
-\r
- case 'application/x-director':\r
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemShockWave');\r
- break;\r
-\r
- case 'application/x-mplayer2':\r
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemWindowsMedia');\r
- break;\r
-\r
- case 'video/quicktime':\r
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemQuickTime');\r
- break;\r
-\r
- case 'audio/x-pn-realaudio-plugin':\r
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemRealMedia');\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case "get_from_editor":\r
- var startPos = -1, endPos, attribs, chunkBefore, chunkAfter, embedHTML, at, pl, cb, mt, ex;\r
-\r
- while ((startPos = content.indexOf('<img', startPos+1)) != -1) {\r
- endPos = content.indexOf('/>', startPos);\r
- attribs = TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos + 4, endPos));\r
-\r
- // Is not flash, skip it\r
- if (!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))\r
- continue;\r
-\r
- endPos += 2;\r
-\r
- // Parse attributes\r
- at = attribs['title'];\r
- if (at) {\r
- at = at.replace(/&(#39|apos);/g, "'");\r
- at = at.replace(/&#quot;/g, '"');\r
-\r
- try {\r
- pl = eval('x={' + at + '};');\r
- } catch (ex) {\r
- pl = {};\r
- }\r
- }\r
-\r
- // Use object/embed\r
- if (!tinyMCE.getParam('media_use_script', false)) {\r
- switch (attribs['class']) {\r
- case 'mceItemFlash':\r
- ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';\r
- cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
- mt = 'application/x-shockwave-flash';\r
- break;\r
-\r
- case 'mceItemShockWave':\r
- ci = '166B1BCA-3F9C-11CF-8075-444553540000';\r
- cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';\r
- mt = 'application/x-director';\r
- break;\r
-\r
- case 'mceItemWindowsMedia':\r
- ci = tinyMCE.getParam('media_wmp6_compatible') ? '05589FA1-C356-11CE-BF01-00AA0055595A' : '6BF52A52-394A-11D3-B153-00C04F79FAA6';\r
- cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
- mt = 'application/x-mplayer2';\r
- break;\r
-\r
- case 'mceItemQuickTime':\r
- ci = '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';\r
- cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';\r
- mt = 'video/quicktime';\r
- break;\r
-\r
- case 'mceItemRealMedia':\r
- ci = 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';\r
- cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
- mt = 'audio/x-pn-realaudio-plugin';\r
- break;\r
- }\r
-\r
- // Force absolute URL\r
- if (!tinyMCE.getParam("relative_urls"))\r
- pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);\r
-\r
- embedHTML = TinyMCE_MediaPlugin._getEmbed(ci, cb, mt, pl, attribs);\r
- } else {\r
- // Use script version\r
- switch (attribs['class']) {\r
- case 'mceItemFlash':\r
- s = 'writeFlash';\r
- break;\r
-\r
- case 'mceItemShockWave':\r
- s = 'writeShockWave';\r
- break;\r
-\r
- case 'mceItemWindowsMedia':\r
- s = 'writeWindowsMedia';\r
- break;\r
-\r
- case 'mceItemQuickTime':\r
- s = 'writeQuickTime';\r
- break;\r
-\r
- case 'mceItemRealMedia':\r
- s = 'writeRealMedia';\r
- break;\r
- }\r
-\r
- if (attribs.width)\r
- at = at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g, "width:'" + attribs.width + "'");\r
-\r
- if (attribs.height)\r
- at = at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g, "height:'" + attribs.height + "'");\r
-\r
- // Force absolute URL\r
- if (!tinyMCE.getParam("relative_urls")) {\r
- pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);\r
- at = at.replace(new RegExp("src:'[^']*'", "g"), "src:'" + pl.src + "'");\r
- }\r
-\r
- embedHTML = '<script type="text/javascript">' + s + '({' + at + '});</script>';\r
- }\r
-\r
- // Insert embed/object chunk\r
- chunkBefore = content.substring(0, startPos);\r
- chunkAfter = content.substring(endPos);\r
- content = chunkBefore + embedHTML + chunkAfter;\r
- }\r
- break;\r
- }\r
-\r
- return content;\r
- },\r
-\r
- handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {\r
- if (node == null)\r
- return;\r
-\r
- do {\r
- if (node.nodeName == "IMG" && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node, 'class'))) {\r
- tinyMCE.switchClass(editor_id + '_media', 'mceButtonSelected');\r
- return true;\r
- }\r
- } while ((node = node.parentNode));\r
-\r
- tinyMCE.switchClass(editor_id + '_media', 'mceButtonNormal');\r
-\r
- return true;\r
- },\r
-\r
- _createImgFromEmbed : function(n, d, cl) {\r
- var ne, at, i, ti = '', an;\r
-\r
- ne = d.createElement('img');\r
- ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';\r
- ne.width = tinyMCE.getAttrib(n, 'width');\r
- ne.height = tinyMCE.getAttrib(n, 'height');\r
- ne.className = cl;\r
-\r
- at = n.attributes;\r
- for (i=0; i<at.length; i++) {\r
- if (at[i].specified && at[i].nodeValue) {\r
- an = at[i].nodeName.toLowerCase();\r
-\r
- if (an == 'src')\r
- continue;\r
-\r
- if (an == 'mce_src')\r
- an = 'src';\r
-\r
- if (an.indexOf('mce_') == -1 && !new RegExp('^(class|type)$').test(an))\r
- ti += an.toLowerCase() + ':\'' + at[i].nodeValue + "',";\r
- }\r
- }\r
-\r
- ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;\r
- ne.title = ti;\r
-\r
- n.parentNode.replaceChild(ne, n);\r
- },\r
-\r
- _createImg : function(cl, d, n) {\r
- var i, nl, ti = "", an, av, al = new Array();\r
-\r
- ne = d.createElement('img');\r
- ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';\r
- ne.width = tinyMCE.getAttrib(n, 'width');\r
- ne.height = tinyMCE.getAttrib(n, 'height');\r
- ne.className = cl;\r
-\r
- al.id = tinyMCE.getAttrib(n, 'id');\r
- al.name = tinyMCE.getAttrib(n, 'name');\r
- al.width = tinyMCE.getAttrib(n, 'width');\r
- al.height = tinyMCE.getAttrib(n, 'height');\r
- al.bgcolor = tinyMCE.getAttrib(n, 'bgcolor');\r
- al.align = tinyMCE.getAttrib(n, 'align');\r
- al.class_name = tinyMCE.getAttrib(n, 'mce_class');\r
-\r
- nl = n.getElementsByTagName('div');\r
- for (i=0; i<nl.length; i++) {\r
- av = tinyMCE.getAttrib(nl[i], 'value');\r
- av = av.replace(new RegExp('\\\\', 'g'), '\\\\');\r
- av = av.replace(new RegExp('"', 'g'), '\\"');\r
- av = av.replace(new RegExp("'", 'g'), "\\'");\r
- an = tinyMCE.getAttrib(nl[i], 'name');\r
- al[an] = av;\r
- }\r
-\r
- if (al.movie) {\r
- al.src = al.movie;\r
- al.movie = null;\r
- }\r
-\r
- for (an in al) {\r
- if (al[an] != null && typeof(al[an]) != "function" && al[an] != '')\r
- ti += an.toLowerCase() + ':\'' + al[an] + "',";\r
- }\r
-\r
- ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;\r
- ne.title = ti;\r
-\r
- return ne;\r
- },\r
-\r
- _getEmbed : function(cls, cb, mt, p, at) {\r
- var h = '', n;\r
-\r
- p.width = at.width ? at.width : p.width;\r
- p.height = at.height ? at.height : p.height;\r
-\r
- h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';\r
- h += typeof(p.id) != "undefined" ? ' id="' + p.id + '"' : '';\r
- h += typeof(p.name) != "undefined" ? ' name="' + p.name + '"' : '';\r
- h += typeof(p.width) != "undefined" ? ' width="' + p.width + '"' : '';\r
- h += typeof(p.height) != "undefined" ? ' height="' + p.height + '"' : '';\r
- h += typeof(p.align) != "undefined" ? ' align="' + p.align + '"' : '';\r
- h += '>';\r
-\r
- for (n in p) {\r
- if (typeof(p[n]) != "undefined" && typeof(p[n]) != "function") {\r
- h += '<param name="' + n + '" value="' + p[n] + '" />';\r
-\r
- // Add extra url parameter if it's an absolute URL on WMP\r
- if (n == 'src' && p[n].indexOf('://') != -1 && mt == 'application/x-mplayer2')\r
- h += '<param name="url" value="' + p[n] + '" />';\r
- }\r
- }\r
-\r
- h += '<embed type="' + mt + '"';\r
-\r
- for (n in p) {\r
- if (typeof(p[n]) == "function")\r
- continue;\r
-\r
- // Skip url parameter for embed tag on WMP\r
- if (!(n == 'url' && mt == 'application/x-mplayer2'))\r
- h += ' ' + n + '="' + p[n] + '"';\r
- }\r
-\r
- h += '></embed></object>';\r
-\r
- return h;\r
- },\r
-\r
- _parseAttributes : function(attribute_string) {\r
- var attributeName = "", endChr = '"';\r
- var attributeValue = "";\r
- var withInName;\r
- var withInValue;\r
- var attributes = new Array();\r
- var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g');\r
-\r
- if (attribute_string == null || attribute_string.length < 2)\r
- return null;\r
-\r
- withInName = withInValue = false;\r
-\r
- for (var i=0; i<attribute_string.length; i++) {\r
- var chr = attribute_string.charAt(i);\r
-\r
- if ((chr == '"' || chr == "'") && !withInValue) {\r
- withInValue = true;\r
- endChr = chr;\r
- } else if (chr == endChr && withInValue) {\r
- withInValue = false;\r
-\r
- var pos = attributeName.lastIndexOf(' ');\r
- if (pos != -1)\r
- attributeName = attributeName.substring(pos+1);\r
-\r
- attributes[attributeName.toLowerCase()] = attributeValue.substring(1);\r
-\r
- attributeName = "";\r
- attributeValue = "";\r
- } else if (!whiteSpaceRegExp.test(chr) && !withInName && !withInValue)\r
- withInName = true;\r
-\r
- if (chr == '=' && withInName)\r
- withInName = false;\r
-\r
- if (withInName)\r
- attributeName += chr;\r
-\r
- if (withInValue)\r
- attributeValue += chr;\r
- }\r
-\r
- return attributes;\r
- }\r
-};\r
-\r
-tinyMCE.addPlugin("media", TinyMCE_MediaPlugin);\r
+/**
+ * $Id: editor_plugin_src.js 296 2007-08-21 10:36:35Z spocke $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+/* Import plugin specific language pack */
+tinyMCE.importPluginLanguagePack('media');
+
+var TinyMCE_MediaPlugin = {
+ getInfo : function() {
+ return {
+ longname : 'Media',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',
+ version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
+ };
+ },
+
+ initInstance : function(inst) {
+ // Warn if user has flash plugin and media plugin at the same time
+ if (inst.hasPlugin('flash') && !tinyMCE.flashWarn) {
+ alert('Flash plugin is deprecated and should not be used together with the media plugin.');
+ tinyMCE.flashWarn = true;
+ }
+
+ if (!tinyMCE.settings['media_skip_plugin_css'])
+ tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/media/css/content.css");
+ },
+
+ getControlHTML : function(cn) {
+ switch (cn) {
+ case "media":
+ return tinyMCE.getButtonHTML(cn, 'lang_media_desc', '{$pluginurl}/images/media.gif', 'mceMedia');
+ }
+
+ return "";
+ },
+
+ execCommand : function(editor_id, element, command, user_interface, value) {
+ // Handle commands
+ switch (command) {
+ case "mceMedia":
+ tinyMCE.openWindow({
+ file : '../../plugins/media/media.htm',
+ width : 430 + tinyMCE.getLang('lang_media_delta_width', 0),
+ height : 470 + tinyMCE.getLang('lang_media_delta_height', 0)
+ }, {
+ editor_id : editor_id,
+ inline : "yes"
+ });
+
+ return true;
+ }
+
+ // Pass to next handler in chain
+ return false;
+ },
+
+ cleanup : function(type, content, inst) {
+ var nl, img, i, ne, d, s, ci;
+
+ switch (type) {
+ case "insert_to_editor":
+ img = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
+ content = content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, '<img class="mceItem$1" title="$2" src="' + img + '" />');
+ content = content.replace(/<object([^>]*)>/gi, '<div class="mceItemObject" $1>');
+ content = content.replace(/<embed([^>]*)>/gi, '<div class="mceItemObjectEmbed" $1>');
+ content = content.replace(/<\/(object|embed)([^>]*)>/gi, '</div>');
+ content = content.replace(/<param([^>]*)>/gi, '<div $1 class="mceItemParam"></div>');
+ content = content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>', 'gi'), 'class="mceItemParam"></div>');
+ break;
+
+ case "insert_to_editor_dom":
+ d = inst.getDoc();
+ nl = content.getElementsByTagName("img");
+ for (i=0; i<nl.length; i++) {
+ if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)) {
+ nl[i].width = nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g, '$1');
+ nl[i].height = nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g, '$1');
+ //nl[i].align = nl[i].title.replace(/.*align:([a-z]+).*/gi, '$1');
+ }
+ }
+
+ nl = tinyMCE.selectElements(content, 'DIV', function (n) {return tinyMCE.hasCSSClass(n, 'mceItemObject');});
+ for (i=0; i<nl.length; i++) {
+ ci = tinyMCE.getAttrib(nl[i], "classid").toLowerCase().replace(/\s+/g, '');
+
+ switch (ci) {
+ case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':
+ nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash', d, nl[i]), nl[i]);
+ break;
+
+ case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':
+ nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave', d, nl[i]), nl[i]);
+ break;
+
+ case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':
+ case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':
+ case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':
+ nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia', d, nl[i]), nl[i]);
+ break;
+
+ case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':
+ nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime', d, nl[i]), nl[i]);
+ break;
+
+ case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':
+ nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia', d, nl[i]), nl[i]);
+ break;
+ }
+ }
+
+ // Handle embed (if any)
+ nl = tinyMCE.selectNodes(content, function (n) {return n.className == 'mceItemObjectEmbed';});
+ for (i=0; i<nl.length; i++) {
+ switch (tinyMCE.getAttrib(nl[i], 'type')) {
+ case 'application/x-shockwave-flash':
+ TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemFlash');
+ break;
+
+ case 'application/x-director':
+ TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemShockWave');
+ break;
+
+ case 'application/x-mplayer2':
+ TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemWindowsMedia');
+ break;
+
+ case 'video/quicktime':
+ TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemQuickTime');
+ break;
+
+ case 'audio/x-pn-realaudio-plugin':
+ TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemRealMedia');
+ break;
+ }
+ }
+ break;
+
+ case "get_from_editor":
+ var startPos = -1, endPos, attribs, chunkBefore, chunkAfter, embedHTML, at, pl, cb, mt, ex;
+
+ while ((startPos = content.indexOf('<img', startPos+1)) != -1) {
+ endPos = content.indexOf('/>', startPos);
+ attribs = TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos + 4, endPos));
+
+ // Is not flash, skip it
+ if (!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))
+ continue;
+
+ endPos += 2;
+
+ // Parse attributes
+ at = attribs['title'];
+ if (at) {
+ at = at.replace(/&(#39|apos);/g, "'");
+ at = at.replace(/&#quot;/g, '"');
+
+ try {
+ pl = eval('x={' + at + '};');
+ } catch (ex) {
+ pl = {};
+ }
+ }
+
+ // Use object/embed
+ if (!tinyMCE.getParam('media_use_script', false)) {
+ switch (attribs['class']) {
+ case 'mceItemFlash':
+ ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';
+ cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
+ mt = 'application/x-shockwave-flash';
+ break;
+
+ case 'mceItemShockWave':
+ ci = '166B1BCA-3F9C-11CF-8075-444553540000';
+ cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
+ mt = 'application/x-director';
+ break;
+
+ case 'mceItemWindowsMedia':
+ ci = tinyMCE.getParam('media_wmp6_compatible') ? '05589FA1-C356-11CE-BF01-00AA0055595A' : '6BF52A52-394A-11D3-B153-00C04F79FAA6';
+ cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
+ mt = 'application/x-mplayer2';
+ break;
+
+ case 'mceItemQuickTime':
+ ci = '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
+ cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
+ mt = 'video/quicktime';
+ break;
+
+ case 'mceItemRealMedia':
+ ci = 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
+ cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
+ mt = 'audio/x-pn-realaudio-plugin';
+ break;
+ }
+
+ // Convert the URL
+ pl.src = tinyMCE.convertURL(pl.src, null, true);
+
+ embedHTML = TinyMCE_MediaPlugin._getEmbed(ci, cb, mt, pl, attribs);
+ } else {
+ // Use script version
+ switch (attribs['class']) {
+ case 'mceItemFlash':
+ s = 'writeFlash';
+ break;
+
+ case 'mceItemShockWave':
+ s = 'writeShockWave';
+ break;
+
+ case 'mceItemWindowsMedia':
+ s = 'writeWindowsMedia';
+ break;
+
+ case 'mceItemQuickTime':
+ s = 'writeQuickTime';
+ break;
+
+ case 'mceItemRealMedia':
+ s = 'writeRealMedia';
+ break;
+ }
+
+ if (attribs.width)
+ at = at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g, "width:'" + attribs.width + "'");
+
+ if (attribs.height)
+ at = at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g, "height:'" + attribs.height + "'");
+
+ // Force absolute URL
+ pl.src = tinyMCE.convertURL(pl.src, null, true);
+ at = at.replace(new RegExp("src:'[^']*'", "g"), "src:'" + pl.src + "'");
+
+ embedHTML = '<script type="text/javascript">' + s + '({' + at + '});</script>';
+ }
+
+ // Insert embed/object chunk
+ chunkBefore = content.substring(0, startPos);
+ chunkAfter = content.substring(endPos);
+ content = chunkBefore + embedHTML + chunkAfter;
+ }
+ break;
+ }
+
+ return content;
+ },
+
+ handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
+ if (node == null)
+ return;
+
+ do {
+ if (node.nodeName == "IMG" && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node, 'class'))) {
+ tinyMCE.switchClass(editor_id + '_media', 'mceButtonSelected');
+ return true;
+ }
+ } while ((node = node.parentNode));
+
+ tinyMCE.switchClass(editor_id + '_media', 'mceButtonNormal');
+
+ return true;
+ },
+
+ _createImgFromEmbed : function(n, d, cl) {
+ var ne, at, i, ti = '', an;
+
+ ne = d.createElement('img');
+ ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
+ ne.width = tinyMCE.getAttrib(n, 'width');
+ ne.height = tinyMCE.getAttrib(n, 'height');
+ ne.className = cl;
+
+ at = n.attributes;
+ for (i=0; i<at.length; i++) {
+ if (at[i].specified && at[i].nodeValue) {
+ an = at[i].nodeName.toLowerCase();
+
+ if (an == 'src')
+ continue;
+
+ if (an == 'mce_src')
+ an = 'src';
+
+ if (an.indexOf('mce_') == -1 && !new RegExp('^(class|type)$').test(an))
+ ti += an.toLowerCase() + ':\'' + at[i].nodeValue + "',";
+ }
+ }
+
+ ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;
+ ne.title = ti;
+
+ n.parentNode.replaceChild(ne, n);
+ },
+
+ _createImg : function(cl, d, n) {
+ var i, nl, ti = "", an, av, al = new Array();
+
+ ne = d.createElement('img');
+ ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
+ ne.width = tinyMCE.getAttrib(n, 'width');
+ ne.height = tinyMCE.getAttrib(n, 'height');
+ ne.className = cl;
+
+ al.id = tinyMCE.getAttrib(n, 'id');
+ al.name = tinyMCE.getAttrib(n, 'name');
+ al.width = tinyMCE.getAttrib(n, 'width');
+ al.height = tinyMCE.getAttrib(n, 'height');
+ al.bgcolor = tinyMCE.getAttrib(n, 'bgcolor');
+ al.align = tinyMCE.getAttrib(n, 'align');
+ al.class_name = tinyMCE.getAttrib(n, 'mce_class');
+
+ nl = n.getElementsByTagName('div');
+ for (i=0; i<nl.length; i++) {
+ av = tinyMCE.getAttrib(nl[i], 'value');
+ av = av.replace(new RegExp('\\\\', 'g'), '\\\\');
+ av = av.replace(new RegExp('"', 'g'), '\\"');
+ av = av.replace(new RegExp("'", 'g'), "\\'");
+ an = tinyMCE.getAttrib(nl[i], 'name');
+ al[an] = av;
+ }
+
+ if (al.movie) {
+ al.src = al.movie;
+ al.movie = null;
+ }
+
+ for (an in al) {
+ if (al[an] != null && typeof(al[an]) != "function" && al[an] != '')
+ ti += an.toLowerCase() + ':\'' + al[an] + "',";
+ }
+
+ ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;
+ ne.title = ti;
+
+ return ne;
+ },
+
+ _getEmbed : function(cls, cb, mt, p, at) {
+ var h = '', n;
+
+ p.width = at.width ? at.width : p.width;
+ p.height = at.height ? at.height : p.height;
+
+ h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
+ h += typeof(p.id) != "undefined" ? ' id="' + p.id + '"' : '';
+ h += typeof(p.name) != "undefined" ? ' name="' + p.name + '"' : '';
+ h += typeof(p.width) != "undefined" ? ' width="' + p.width + '"' : '';
+ h += typeof(p.height) != "undefined" ? ' height="' + p.height + '"' : '';
+ h += typeof(p.align) != "undefined" ? ' align="' + p.align + '"' : '';
+ h += '>';
+
+ for (n in p) {
+ if (typeof(p[n]) != "undefined" && typeof(p[n]) != "function") {
+ h += '<param name="' + n + '" value="' + p[n] + '" />';
+
+ // Add extra url parameter if it's an absolute URL on WMP
+ if (n == 'src' && p[n].indexOf('://') != -1 && mt == 'application/x-mplayer2')
+ h += '<param name="url" value="' + p[n] + '" />';
+ }
+ }
+
+ h += '<embed type="' + mt + '"';
+
+ for (n in p) {
+ if (typeof(p[n]) == "function")
+ continue;
+
+ // Skip url parameter for embed tag on WMP
+ if (!(n == 'url' && mt == 'application/x-mplayer2'))
+ h += ' ' + n + '="' + p[n] + '"';
+ }
+
+ h += '></embed></object>';
+
+ return h;
+ },
+
+ _parseAttributes : function(attribute_string) {
+ var attributeName = "", endChr = '"';
+ var attributeValue = "";
+ var withInName;
+ var withInValue;
+ var attributes = new Array();
+ var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g');
+
+ if (attribute_string == null || attribute_string.length < 2)
+ return null;
+
+ withInName = withInValue = false;
+
+ for (var i=0; i<attribute_string.length; i++) {
+ var chr = attribute_string.charAt(i);
+
+ if ((chr == '"' || chr == "'") && !withInValue) {
+ withInValue = true;
+ endChr = chr;
+ } else if (chr == endChr && withInValue) {
+ withInValue = false;
+
+ var pos = attributeName.lastIndexOf(' ');
+ if (pos != -1)
+ attributeName = attributeName.substring(pos+1);
+
+ attributes[attributeName.toLowerCase()] = attributeValue.substring(1);
+
+ attributeName = "";
+ attributeValue = "";
+ } else if (!whiteSpaceRegExp.test(chr) && !withInName && !withInValue)
+ withInName = true;
+
+ if (chr == '=' && withInName)
+ withInName = false;
+
+ if (withInName)
+ attributeName += chr;
+
+ if (withInValue)
+ attributeValue += chr;
+ }
+
+ return attributes;
+ }
+};
+
+tinyMCE.addPlugin("media", TinyMCE_MediaPlugin);
-/**\r
- * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.\r
- */\r
-\r
-function writeFlash(p) {\r
- writeEmbed(\r
- 'D27CDB6E-AE6D-11cf-96B8-444553540000',\r
- 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
- 'application/x-shockwave-flash',\r
- p\r
- );\r
-}\r
-\r
-function writeShockWave(p) {\r
- writeEmbed(\r
- '166B1BCA-3F9C-11CF-8075-444553540000',\r
- 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',\r
- 'application/x-director',\r
- p\r
- );\r
-}\r
-\r
-function writeQuickTime(p) {\r
- writeEmbed(\r
- '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',\r
- 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',\r
- 'video/quicktime',\r
- p\r
- );\r
-}\r
-\r
-function writeRealMedia(p) {\r
- writeEmbed(\r
- 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',\r
- 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
- 'audio/x-pn-realaudio-plugin',\r
- p\r
- );\r
-}\r
-\r
-function writeWindowsMedia(p) {\r
- p.url = p.src;\r
- writeEmbed(\r
- '6BF52A52-394A-11D3-B153-00C04F79FAA6',\r
- 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',\r
- 'application/x-mplayer2',\r
- p\r
- );\r
-}\r
-\r
-function writeEmbed(cls, cb, mt, p) {\r
- var h = '', n;\r
-\r
- h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';\r
- h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';\r
- h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';\r
- h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';\r
- h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';\r
- h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';\r
- h += '>';\r
-\r
- for (n in p)\r
- h += '<param name="' + n + '" value="' + p[n] + '">';\r
-\r
- h += '<embed type="' + mt + '"';\r
-\r
- for (n in p)\r
- h += n + '="' + p[n] + '" ';\r
-\r
- h += '></embed></object>';\r
-\r
- document.write(h);\r
-}\r
+/**
+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
+ */
+
+function writeFlash(p) {
+ writeEmbed(
+ 'D27CDB6E-AE6D-11cf-96B8-444553540000',
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
+ 'application/x-shockwave-flash',
+ p
+ );
+}
+
+function writeShockWave(p) {
+ writeEmbed(
+ '166B1BCA-3F9C-11CF-8075-444553540000',
+ 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
+ 'application/x-director',
+ p
+ );
+}
+
+function writeQuickTime(p) {
+ writeEmbed(
+ '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
+ 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
+ 'video/quicktime',
+ p
+ );
+}
+
+function writeRealMedia(p) {
+ writeEmbed(
+ 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
+ 'audio/x-pn-realaudio-plugin',
+ p
+ );
+}
+
+function writeWindowsMedia(p) {
+ p.url = p.src;
+ writeEmbed(
+ '6BF52A52-394A-11D3-B153-00C04F79FAA6',
+ 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
+ 'application/x-mplayer2',
+ p
+ );
+}
+
+function writeEmbed(cls, cb, mt, p) {
+ var h = '', n;
+
+ h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
+ h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
+ h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
+ h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
+ h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
+ h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
+ h += '>';
+
+ for (n in p)
+ h += '<param name="' + n + '" value="' + p[n] + '">';
+
+ h += '<embed type="' + mt + '"';
+
+ for (n in p)
+ h += n + '="' + p[n] + '" ';
+
+ h += '></embed></object>';
+
+ document.write(h);
+}
-var oldWidth, oldHeight;\r
-var url = tinyMCE.getParam("media_external_list_url");\r
-if (url != null) {\r
- // Fix relative\r
- if (url.charAt(0) != '/' && url.indexOf('://') == -1)\r
- url = tinyMCE.documentBasePath + "/" + url;\r
-\r
- document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');\r
-}\r
-\r
-function init() {\r
- var pl = "", f, val;\r
- var type = "flash", fe, i;\r
-\r
- tinyMCEPopup.resizeToInnerSize();\r
- f = document.forms[0]\r
-\r
- fe = tinyMCE.selectedInstance.getFocusElement();\r
- if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {\r
- pl = "x={" + fe.title + "};";\r
-\r
- switch (tinyMCE.getAttrib(fe, 'class')) {\r
- case 'mceItemFlash':\r
- type = 'flash';\r
- break;\r
-\r
- case 'mceItemShockWave':\r
- type = 'shockwave';\r
- break;\r
-\r
- case 'mceItemWindowsMedia':\r
- type = 'wmp';\r
- break;\r
-\r
- case 'mceItemQuickTime':\r
- type = 'qt';\r
- break;\r
-\r
- case 'mceItemRealMedia':\r
- type = 'rmp';\r
- break;\r
- }\r
-\r
- document.forms[0].insert.value = tinyMCE.getLang('lang_update', 'Insert', true); \r
- }\r
-\r
- document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');\r
- document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');\r
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
-\r
- var html = getMediaListHTML('filebrowser','src','media','media');\r
- if (html == "")\r
- document.getElementById("linklistrow").style.display = 'none';\r
- else\r
- document.getElementById("linklistcontainer").innerHTML = html;\r
-\r
- // Resize some elements\r
- if (isVisible('filebrowsercontainer'))\r
- document.getElementById('src').style.width = '230px';\r
-\r
- // Setup form\r
- if (pl != "") {\r
- pl = eval(pl);\r
-\r
- switch (type) {\r
- case "flash":\r
- setBool(pl, 'flash', 'play');\r
- setBool(pl, 'flash', 'loop');\r
- setBool(pl, 'flash', 'menu');\r
- setBool(pl, 'flash', 'swliveconnect');\r
- setStr(pl, 'flash', 'quality');\r
- setStr(pl, 'flash', 'scale');\r
- setStr(pl, 'flash', 'salign');\r
- setStr(pl, 'flash', 'wmode');\r
- setStr(pl, 'flash', 'base');\r
- setStr(pl, 'flash', 'flashvars');\r
- break;\r
-\r
- case "qt":\r
- setBool(pl, 'qt', 'loop');\r
- setBool(pl, 'qt', 'autoplay');\r
- setBool(pl, 'qt', 'cache');\r
- setBool(pl, 'qt', 'controller');\r
- setBool(pl, 'qt', 'correction');\r
- setBool(pl, 'qt', 'enablejavascript');\r
- setBool(pl, 'qt', 'kioskmode');\r
- setBool(pl, 'qt', 'autohref');\r
- setBool(pl, 'qt', 'playeveryframe');\r
- setBool(pl, 'qt', 'tarsetcache');\r
- setStr(pl, 'qt', 'scale');\r
- setStr(pl, 'qt', 'starttime');\r
- setStr(pl, 'qt', 'endtime');\r
- setStr(pl, 'qt', 'tarset');\r
- setStr(pl, 'qt', 'qtsrcchokespeed');\r
- setStr(pl, 'qt', 'volume');\r
- setStr(pl, 'qt', 'qtsrc');\r
- break;\r
-\r
- case "shockwave":\r
- setBool(pl, 'shockwave', 'sound');\r
- setBool(pl, 'shockwave', 'progress');\r
- setBool(pl, 'shockwave', 'autostart');\r
- setBool(pl, 'shockwave', 'swliveconnect');\r
- setStr(pl, 'shockwave', 'swvolume');\r
- setStr(pl, 'shockwave', 'swstretchstyle');\r
- setStr(pl, 'shockwave', 'swstretchhalign');\r
- setStr(pl, 'shockwave', 'swstretchvalign');\r
- break;\r
-\r
- case "wmp":\r
- setBool(pl, 'wmp', 'autostart');\r
- setBool(pl, 'wmp', 'enabled');\r
- setBool(pl, 'wmp', 'enablecontextmenu');\r
- setBool(pl, 'wmp', 'fullscreen');\r
- setBool(pl, 'wmp', 'invokeurls');\r
- setBool(pl, 'wmp', 'mute');\r
- setBool(pl, 'wmp', 'stretchtofit');\r
- setBool(pl, 'wmp', 'windowlessvideo');\r
- setStr(pl, 'wmp', 'balance');\r
- setStr(pl, 'wmp', 'baseurl');\r
- setStr(pl, 'wmp', 'captioningid');\r
- setStr(pl, 'wmp', 'currentmarker');\r
- setStr(pl, 'wmp', 'currentposition');\r
- setStr(pl, 'wmp', 'defaultframe');\r
- setStr(pl, 'wmp', 'playcount');\r
- setStr(pl, 'wmp', 'rate');\r
- setStr(pl, 'wmp', 'uimode');\r
- setStr(pl, 'wmp', 'volume');\r
- break;\r
-\r
- case "rmp":\r
- setBool(pl, 'rmp', 'autostart');\r
- setBool(pl, 'rmp', 'loop');\r
- setBool(pl, 'rmp', 'autogotourl');\r
- setBool(pl, 'rmp', 'center');\r
- setBool(pl, 'rmp', 'imagestatus');\r
- setBool(pl, 'rmp', 'maintainaspect');\r
- setBool(pl, 'rmp', 'nojava');\r
- setBool(pl, 'rmp', 'prefetch');\r
- setBool(pl, 'rmp', 'shuffle');\r
- setStr(pl, 'rmp', 'console');\r
- setStr(pl, 'rmp', 'controls');\r
- setStr(pl, 'rmp', 'numloop');\r
- setStr(pl, 'rmp', 'scriptcallbacks');\r
- break;\r
- }\r
-\r
- setStr(pl, null, 'src');\r
- setStr(pl, null, 'id');\r
- setStr(pl, null, 'name');\r
- setStr(pl, null, 'vspace');\r
- setStr(pl, null, 'hspace');\r
- setStr(pl, null, 'bgcolor');\r
- setStr(pl, null, 'align');\r
- setStr(pl, null, 'width');\r
- setStr(pl, null, 'height');\r
-\r
- if ((val = tinyMCE.getAttrib(fe, "width")) != "")\r
- pl.width = f.width.value = val;\r
-\r
- if ((val = tinyMCE.getAttrib(fe, "height")) != "")\r
- pl.height = f.height.value = val;\r
-\r
- oldWidth = pl.width ? parseInt(pl.width) : 0;\r
- oldHeight = pl.height ? parseInt(pl.height) : 0;\r
- } else\r
- oldWidth = oldHeight = 0;\r
-\r
- selectByValue(f, 'media_type', type);\r
- changedType(type);\r
- updateColor('bgcolor_pick', 'bgcolor');\r
-\r
- TinyMCE_EditableSelects.init();\r
- generatePreview();\r
-}\r
-\r
-function insertMedia() {\r
- var fe, f = document.forms[0], h;\r
-\r
- if (!AutoValidator.validate(f)) {\r
- alert(tinyMCE.getLang('lang_invalid_data'));\r
- return false;\r
- }\r
-\r
- f.width.value = f.width.value == "" ? 100 : f.width.value;\r
- f.height.value = f.height.value == "" ? 100 : f.height.value;\r
-\r
- fe = tinyMCE.selectedInstance.getFocusElement();\r
- if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {\r
- switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
- case "flash":\r
- fe.className = "mceItemFlash";\r
- break;\r
-\r
- case "shockwave":\r
- fe.className = "mceItemShockWave";\r
- break;\r
-\r
- case "qt":\r
- fe.className = "mceItemQuickTime";\r
- break;\r
-\r
- case "wmp":\r
- fe.className = "mceItemWindowsMedia";\r
- break;\r
-\r
- case "rmp":\r
- fe.className = "mceItemRealMedia";\r
- break;\r
- }\r
-\r
- if (fe.width != f.width.value || fe.height != f.height.height)\r
- tinyMCE.selectedInstance.repaint();\r
-\r
- fe.title = serializeParameters();\r
- fe.width = f.width.value;\r
- fe.height = f.height.value;\r
- fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');\r
- fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');\r
- fe.align = f.align.options[f.align.selectedIndex].value;\r
- } else {\r
- h = '<img src="' + tinyMCE.getParam("theme_href") + '/images/spacer.gif"' ;\r
-\r
- switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
- case "flash":\r
- h += ' class="mceItemFlash"';\r
- break;\r
-\r
- case "shockwave":\r
- h += ' class="mceItemShockWave"';\r
- break;\r
-\r
- case "qt":\r
- h += ' class="mceItemQuickTime"';\r
- break;\r
-\r
- case "wmp":\r
- h += ' class="mceItemWindowsMedia"';\r
- break;\r
-\r
- case "rmp":\r
- h += ' class="mceItemRealMedia"';\r
- break;\r
- }\r
-\r
- h += ' title="' + serializeParameters() + '"';\r
- h += ' width="' + f.width.value + '"';\r
- h += ' height="' + f.height.value + '"';\r
- h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';\r
-\r
- h += ' />';\r
-\r
- tinyMCE.selectedInstance.execCommand('mceInsertContent', false, h);\r
- }\r
-\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function getMediaListHTML() {\r
- if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {\r
- var html = "";\r
-\r
- html += '<select id="linklist" name="linklist" style="width: 250px" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.src.value=this.options[this.selectedIndex].value;">';\r
- html += '<option value="">---</option>';\r
-\r
- for (var i=0; i<tinyMCEMediaList.length; i++)\r
- html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';\r
-\r
- html += '</select>';\r
-\r
- return html;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-function getType(v) {\r
- var fo, i, c, el, x, f = document.forms[0];\r
-\r
- fo = tinyMCE.getParam("media_types", "flash=swf;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');\r
-\r
- // YouTube\r
- if (v.indexOf('http://www.youtube.com/watch?v=') == 0) {\r
- f.width.value = '425';\r
- f.height.value = '350';\r
- f.src.value = 'http://www.youtube.com/v/' + v.substring('http://www.youtube.com/watch?v='.length);\r
- return 'flash';\r
- }\r
-\r
- // Google video\r
- if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {\r
- f.width.value = '425';\r
- f.height.value = '326';\r
- f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';\r
- return 'flash';\r
- }\r
-\r
- for (i=0; i<fo.length; i++) {\r
- c = fo[i].split('=');\r
-\r
- el = c[1].split(',');\r
- for (x=0; x<el.length; x++)\r
- if (v.indexOf('.' + el[x]) != -1)\r
- return c[0];\r
- }\r
-\r
- return null;\r
-}\r
-\r
-function switchType(v) {\r
- var t = getType(v), d = document, f = d.forms[0];\r
-\r
- if (!t)\r
- return;\r
-\r
- selectByValue(d.forms[0], 'media_type', t);\r
- changedType(t);\r
-\r
- // Update qtsrc also\r
- if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {\r
- alert(tinyMCE.getLang("lang_media_qt_stream_warn"));\r
-\r
- if (f.qt_qtsrc.value == '')\r
- f.qt_qtsrc.value = f.src.value;\r
- }\r
-}\r
-\r
-function changedType(t) {\r
- var d = document;\r
-\r
- d.getElementById('flash_options').style.display = 'none';\r
- d.getElementById('qt_options').style.display = 'none';\r
- d.getElementById('shockwave_options').style.display = 'none';\r
- d.getElementById('wmp_options').style.display = 'none';\r
- d.getElementById('rmp_options').style.display = 'none';\r
- d.getElementById(t + '_options').style.display = 'block';\r
-}\r
-\r
-function serializeParameters() {\r
- var d = document, f = d.forms[0], s = '';\r
-\r
- switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
- case "flash":\r
- s += getBool('flash', 'play', true);\r
- s += getBool('flash', 'loop', true);\r
- s += getBool('flash', 'menu', true);\r
- s += getBool('flash', 'swliveconnect', false);\r
- s += getStr('flash', 'quality');\r
- s += getStr('flash', 'scale');\r
- s += getStr('flash', 'salign');\r
- s += getStr('flash', 'wmode');\r
- s += getStr('flash', 'base');\r
- s += getStr('flash', 'flashvars');\r
- break;\r
-\r
- case "qt":\r
- s += getBool('qt', 'loop', false);\r
- s += getBool('qt', 'autoplay', true);\r
- s += getBool('qt', 'cache', false);\r
- s += getBool('qt', 'controller', true);\r
- s += getBool('qt', 'correction', false, 'none', 'full');\r
- s += getBool('qt', 'enablejavascript', false);\r
- s += getBool('qt', 'kioskmode', false);\r
- s += getBool('qt', 'autohref', false);\r
- s += getBool('qt', 'playeveryframe', false);\r
- s += getBool('qt', 'targetcache', false);\r
- s += getStr('qt', 'scale');\r
- s += getStr('qt', 'starttime');\r
- s += getStr('qt', 'endtime');\r
- s += getStr('qt', 'target');\r
- s += getStr('qt', 'qtsrcchokespeed');\r
- s += getStr('qt', 'volume');\r
- s += getStr('qt', 'qtsrc');\r
- break;\r
-\r
- case "shockwave":\r
- s += getBool('shockwave', 'sound');\r
- s += getBool('shockwave', 'progress');\r
- s += getBool('shockwave', 'autostart');\r
- s += getBool('shockwave', 'swliveconnect');\r
- s += getStr('shockwave', 'swvolume');\r
- s += getStr('shockwave', 'swstretchstyle');\r
- s += getStr('shockwave', 'swstretchhalign');\r
- s += getStr('shockwave', 'swstretchvalign');\r
- break;\r
-\r
- case "wmp":\r
- s += getBool('wmp', 'autostart', true);\r
- s += getBool('wmp', 'enabled', false);\r
- s += getBool('wmp', 'enablecontextmenu', true);\r
- s += getBool('wmp', 'fullscreen', false);\r
- s += getBool('wmp', 'invokeurls', true);\r
- s += getBool('wmp', 'mute', false);\r
- s += getBool('wmp', 'stretchtofit', false);\r
- s += getBool('wmp', 'windowlessvideo', false);\r
- s += getStr('wmp', 'balance');\r
- s += getStr('wmp', 'baseurl');\r
- s += getStr('wmp', 'captioningid');\r
- s += getStr('wmp', 'currentmarker');\r
- s += getStr('wmp', 'currentposition');\r
- s += getStr('wmp', 'defaultframe');\r
- s += getStr('wmp', 'playcount');\r
- s += getStr('wmp', 'rate');\r
- s += getStr('wmp', 'uimode');\r
- s += getStr('wmp', 'volume');\r
- break;\r
-\r
- case "rmp":\r
- s += getBool('rmp', 'autostart', false);\r
- s += getBool('rmp', 'loop', false);\r
- s += getBool('rmp', 'autogotourl', true);\r
- s += getBool('rmp', 'center', false);\r
- s += getBool('rmp', 'imagestatus', true);\r
- s += getBool('rmp', 'maintainaspect', false);\r
- s += getBool('rmp', 'nojava', false);\r
- s += getBool('rmp', 'prefetch', false);\r
- s += getBool('rmp', 'shuffle', false);\r
- s += getStr('rmp', 'console');\r
- s += getStr('rmp', 'controls');\r
- s += getStr('rmp', 'numloop');\r
- s += getStr('rmp', 'scriptcallbacks');\r
- break;\r
- }\r
-\r
- s += getStr(null, 'id');\r
- s += getStr(null, 'name');\r
- s += getStr(null, 'src');\r
- s += getStr(null, 'align');\r
- s += getStr(null, 'bgcolor');\r
- s += getInt(null, 'vspace');\r
- s += getInt(null, 'hspace');\r
- s += getStr(null, 'width');\r
- s += getStr(null, 'height');\r
-\r
- s = s.length > 0 ? s.substring(0, s.length - 1) : s;\r
-\r
- return s;\r
-}\r
-\r
-function setBool(pl, p, n) {\r
- if (typeof(pl[n]) == "undefined")\r
- return;\r
-\r
- document.forms[0].elements[p + "_" + n].checked = pl[n];\r
-}\r
-\r
-function setStr(pl, p, n) {\r
- var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];\r
-\r
- if (typeof(pl[n]) == "undefined")\r
- return;\r
-\r
- if (e.type == "text")\r
- e.value = pl[n];\r
- else\r
- selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);\r
-}\r
-\r
-function getBool(p, n, d, tv, fv) {\r
- var v = document.forms[0].elements[p + "_" + n].checked;\r
-\r
- tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";\r
- fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";\r
-\r
- return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');\r
-}\r
-\r
-function getStr(p, n, d) {\r
- var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];\r
- var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;\r
-\r
- return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");\r
-}\r
-\r
-function getInt(p, n, d) {\r
- var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];\r
- var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;\r
-\r
- return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");\r
-}\r
-\r
-function jsEncode(s) {\r
- s = s.replace(new RegExp('\\\\', 'g'), '\\\\');\r
- s = s.replace(new RegExp('"', 'g'), '\\"');\r
- s = s.replace(new RegExp("'", 'g'), "\\'");\r
-\r
- return s;\r
-}\r
-\r
-function generatePreview(c) {\r
- var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;\r
-\r
- p.innerHTML = '<!-- x --->';\r
-\r
- nw = parseInt(f.width.value);\r
- nh = parseInt(f.height.value);\r
-\r
- if (f.width.value != "" && f.height.value != "") {\r
- if (f.constrain.checked) {\r
- if (c == 'width' && oldWidth != 0) {\r
- wp = nw / oldWidth;\r
- nh = Math.round(wp * nh);\r
- f.height.value = nh;\r
- } else if (c == 'height' && oldHeight != 0) {\r
- hp = nh / oldHeight;\r
- nw = Math.round(hp * nw);\r
- f.width.value = nw;\r
- }\r
- }\r
- }\r
-\r
- if (f.width.value != "")\r
- oldWidth = nw;\r
-\r
- if (f.height.value != "")\r
- oldHeight = nh;\r
-\r
- // After constrain\r
- pl = serializeParameters();\r
-\r
- switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
- case "flash":\r
- cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';\r
- codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
- type = 'application/x-shockwave-flash';\r
- break;\r
-\r
- case "shockwave":\r
- cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';\r
- codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';\r
- type = 'application/x-director';\r
- break;\r
-\r
- case "qt":\r
- cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';\r
- codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';\r
- type = 'video/quicktime';\r
- break;\r
-\r
- case "wmp":\r
- cls = tinyMCE.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';\r
- codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
- type = 'application/x-mplayer2';\r
- break;\r
-\r
- case "rmp":\r
- cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';\r
- codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
- type = 'audio/x-pn-realaudio-plugin';\r
- break;\r
- }\r
-\r
- if (pl == '') {\r
- p.innerHTML = '';\r
- return;\r
- }\r
-\r
- pl = eval('x={' + pl + '};');\r
-\r
- if (!pl.src) {\r
- p.innerHTML = '';\r
- return;\r
- }\r
-\r
- pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);\r
- pl.width = !pl.width ? 100 : pl.width;\r
- pl.height = !pl.height ? 100 : pl.height;\r
- pl.id = !pl.id ? 'obj' : pl.id;\r
- pl.name = !pl.name ? 'eobj' : pl.name;\r
- pl.align = !pl.align ? '' : pl.align;\r
-\r
- h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';\r
-\r
- for (n in pl) {\r
- h += '<param name="' + n + '" value="' + pl[n] + '">';\r
-\r
- // Add extra url parameter if it's an absolute URL\r
- if (n == 'src' && pl[n].indexOf('://') != -1)\r
- h += '<param name="url" value="' + pl[n] + '" />';\r
- }\r
-\r
- h += '<embed type="' + type + '" ';\r
-\r
- for (n in pl)\r
- h += n + '="' + pl[n] + '" ';\r
-\r
- h += '></embed></object>';\r
-\r
- p.innerHTML = "<!-- x --->" + h;\r
-}\r
+var oldWidth, oldHeight;
+var url = tinyMCE.getParam("media_external_list_url");
+if (url != null) {
+ // Fix relative
+ if (url.charAt(0) != '/' && url.indexOf('://') == -1)
+ url = tinyMCE.documentBasePath + "/" + url;
+
+ document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
+}
+
+function init() {
+ var pl = "", f, val;
+ var type = "flash", fe, i;
+
+ tinyMCEPopup.resizeToInnerSize();
+ f = document.forms[0]
+
+ fe = tinyMCE.selectedInstance.getFocusElement();
+ if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {
+ pl = "x={" + fe.title + "};";
+
+ switch (tinyMCE.getAttrib(fe, 'class')) {
+ case 'mceItemFlash':
+ type = 'flash';
+ break;
+
+ case 'mceItemShockWave':
+ type = 'shockwave';
+ break;
+
+ case 'mceItemWindowsMedia':
+ type = 'wmp';
+ break;
+
+ case 'mceItemQuickTime':
+ type = 'qt';
+ break;
+
+ case 'mceItemRealMedia':
+ type = 'rmp';
+ break;
+ }
+
+ document.forms[0].insert.value = tinyMCE.getLang('lang_update', 'Insert', true);
+ }
+
+ document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');
+ document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
+
+ var html = getMediaListHTML('filebrowser','src','media','media');
+ if (html == "")
+ document.getElementById("linklistrow").style.display = 'none';
+ else
+ document.getElementById("linklistcontainer").innerHTML = html;
+
+ // Resize some elements
+ if (isVisible('filebrowsercontainer'))
+ document.getElementById('src').style.width = '230px';
+
+ // Setup form
+ if (pl != "") {
+ pl = eval(pl);
+
+ switch (type) {
+ case "flash":
+ setBool(pl, 'flash', 'play');
+ setBool(pl, 'flash', 'loop');
+ setBool(pl, 'flash', 'menu');
+ setBool(pl, 'flash', 'swliveconnect');
+ setStr(pl, 'flash', 'quality');
+ setStr(pl, 'flash', 'scale');
+ setStr(pl, 'flash', 'salign');
+ setStr(pl, 'flash', 'wmode');
+ setStr(pl, 'flash', 'base');
+ setStr(pl, 'flash', 'flashvars');
+ break;
+
+ case "qt":
+ setBool(pl, 'qt', 'loop');
+ setBool(pl, 'qt', 'autoplay');
+ setBool(pl, 'qt', 'cache');
+ setBool(pl, 'qt', 'controller');
+ setBool(pl, 'qt', 'correction');
+ setBool(pl, 'qt', 'enablejavascript');
+ setBool(pl, 'qt', 'kioskmode');
+ setBool(pl, 'qt', 'autohref');
+ setBool(pl, 'qt', 'playeveryframe');
+ setBool(pl, 'qt', 'tarsetcache');
+ setStr(pl, 'qt', 'scale');
+ setStr(pl, 'qt', 'starttime');
+ setStr(pl, 'qt', 'endtime');
+ setStr(pl, 'qt', 'tarset');
+ setStr(pl, 'qt', 'qtsrcchokespeed');
+ setStr(pl, 'qt', 'volume');
+ setStr(pl, 'qt', 'qtsrc');
+ break;
+
+ case "shockwave":
+ setBool(pl, 'shockwave', 'sound');
+ setBool(pl, 'shockwave', 'progress');
+ setBool(pl, 'shockwave', 'autostart');
+ setBool(pl, 'shockwave', 'swliveconnect');
+ setStr(pl, 'shockwave', 'swvolume');
+ setStr(pl, 'shockwave', 'swstretchstyle');
+ setStr(pl, 'shockwave', 'swstretchhalign');
+ setStr(pl, 'shockwave', 'swstretchvalign');
+ break;
+
+ case "wmp":
+ setBool(pl, 'wmp', 'autostart');
+ setBool(pl, 'wmp', 'enabled');
+ setBool(pl, 'wmp', 'enablecontextmenu');
+ setBool(pl, 'wmp', 'fullscreen');
+ setBool(pl, 'wmp', 'invokeurls');
+ setBool(pl, 'wmp', 'mute');
+ setBool(pl, 'wmp', 'stretchtofit');
+ setBool(pl, 'wmp', 'windowlessvideo');
+ setStr(pl, 'wmp', 'balance');
+ setStr(pl, 'wmp', 'baseurl');
+ setStr(pl, 'wmp', 'captioningid');
+ setStr(pl, 'wmp', 'currentmarker');
+ setStr(pl, 'wmp', 'currentposition');
+ setStr(pl, 'wmp', 'defaultframe');
+ setStr(pl, 'wmp', 'playcount');
+ setStr(pl, 'wmp', 'rate');
+ setStr(pl, 'wmp', 'uimode');
+ setStr(pl, 'wmp', 'volume');
+ break;
+
+ case "rmp":
+ setBool(pl, 'rmp', 'autostart');
+ setBool(pl, 'rmp', 'loop');
+ setBool(pl, 'rmp', 'autogotourl');
+ setBool(pl, 'rmp', 'center');
+ setBool(pl, 'rmp', 'imagestatus');
+ setBool(pl, 'rmp', 'maintainaspect');
+ setBool(pl, 'rmp', 'nojava');
+ setBool(pl, 'rmp', 'prefetch');
+ setBool(pl, 'rmp', 'shuffle');
+ setStr(pl, 'rmp', 'console');
+ setStr(pl, 'rmp', 'controls');
+ setStr(pl, 'rmp', 'numloop');
+ setStr(pl, 'rmp', 'scriptcallbacks');
+ break;
+ }
+
+ setStr(pl, null, 'src');
+ setStr(pl, null, 'id');
+ setStr(pl, null, 'name');
+ setStr(pl, null, 'vspace');
+ setStr(pl, null, 'hspace');
+ setStr(pl, null, 'bgcolor');
+ setStr(pl, null, 'align');
+ setStr(pl, null, 'width');
+ setStr(pl, null, 'height');
+
+ if ((val = tinyMCE.getAttrib(fe, "width")) != "")
+ pl.width = f.width.value = val;
+
+ if ((val = tinyMCE.getAttrib(fe, "height")) != "")
+ pl.height = f.height.value = val;
+
+ oldWidth = pl.width ? parseInt(pl.width) : 0;
+ oldHeight = pl.height ? parseInt(pl.height) : 0;
+ } else
+ oldWidth = oldHeight = 0;
+
+ selectByValue(f, 'media_type', type);
+ changedType(type);
+ updateColor('bgcolor_pick', 'bgcolor');
+
+ TinyMCE_EditableSelects.init();
+ generatePreview();
+}
+
+function insertMedia() {
+ var fe, f = document.forms[0], h;
+
+ if (!AutoValidator.validate(f)) {
+ alert(tinyMCE.getLang('lang_invalid_data'));
+ return false;
+ }
+
+ f.width.value = f.width.value == "" ? 100 : f.width.value;
+ f.height.value = f.height.value == "" ? 100 : f.height.value;
+
+ fe = tinyMCE.selectedInstance.getFocusElement();
+ if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {
+ case "flash":
+ fe.className = "mceItemFlash";
+ break;
+
+ case "shockwave":
+ fe.className = "mceItemShockWave";
+ break;
+
+ case "qt":
+ fe.className = "mceItemQuickTime";
+ break;
+
+ case "wmp":
+ fe.className = "mceItemWindowsMedia";
+ break;
+
+ case "rmp":
+ fe.className = "mceItemRealMedia";
+ break;
+ }
+
+ if (fe.width != f.width.value || fe.height != f.height.height)
+ tinyMCE.selectedInstance.repaint();
+
+ fe.title = serializeParameters();
+ fe.width = f.width.value;
+ fe.height = f.height.value;
+ fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');
+ fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');
+ fe.align = f.align.options[f.align.selectedIndex].value;
+ } else {
+ h = '<img src="' + tinyMCE.getParam("theme_href") + '/images/spacer.gif"' ;
+
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {
+ case "flash":
+ h += ' class="mceItemFlash"';
+ break;
+
+ case "shockwave":
+ h += ' class="mceItemShockWave"';
+ break;
+
+ case "qt":
+ h += ' class="mceItemQuickTime"';
+ break;
+
+ case "wmp":
+ h += ' class="mceItemWindowsMedia"';
+ break;
+
+ case "rmp":
+ h += ' class="mceItemRealMedia"';
+ break;
+ }
+
+ h += ' title="' + serializeParameters() + '"';
+ h += ' width="' + f.width.value + '"';
+ h += ' height="' + f.height.value + '"';
+ h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';
+
+ h += ' />';
+
+ tinyMCE.selectedInstance.execCommand('mceInsertContent', false, h);
+ }
+
+ tinyMCEPopup.close();
+}
+
+function getMediaListHTML() {
+ if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {
+ var html = "";
+
+ html += '<select id="linklist" name="linklist" style="width: 250px" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.src.value=this.options[this.selectedIndex].value;">';
+ html += '<option value="">---</option>';
+
+ for (var i=0; i<tinyMCEMediaList.length; i++)
+ html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';
+
+ html += '</select>';
+
+ return html;
+ }
+
+ return "";
+}
+
+function getType(v) {
+ var fo, i, c, el, x, f = document.forms[0];
+
+ fo = tinyMCE.getParam("media_types", "flash=swf;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');
+
+ // YouTube
+ if (v.indexOf('http://www.youtube.com/watch?v=') == 0 || v.indexOf('http://youtube.com/watch?v=') == 0) {
+ f.width.value = '425';
+ f.height.value = '350';
+
+ v = v.replace('http://youtube.com/watch?v=', '');
+ v = v.replace('http://www.youtube.com/watch?v=', '');
+
+ f.src.value = 'http://www.youtube.com/v/' + v;
+ return 'flash';
+ }
+
+ // Google video
+ if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {
+ f.width.value = '425';
+ f.height.value = '326';
+ f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';
+ return 'flash';
+ }
+
+ for (i=0; i<fo.length; i++) {
+ c = fo[i].split('=');
+
+ el = c[1].split(',');
+ for (x=0; x<el.length; x++)
+ if (v.indexOf('.' + el[x]) != -1)
+ return c[0];
+ }
+
+ return null;
+}
+
+function switchType(v) {
+ var t = getType(v), d = document, f = d.forms[0];
+
+ if (!t)
+ return;
+
+ selectByValue(d.forms[0], 'media_type', t);
+ changedType(t);
+
+ // Update qtsrc also
+ if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {
+ alert(tinyMCE.getLang("lang_media_qt_stream_warn"));
+
+ if (f.qt_qtsrc.value == '')
+ f.qt_qtsrc.value = f.src.value;
+ }
+}
+
+function changedType(t) {
+ var d = document;
+
+ d.getElementById('flash_options').style.display = 'none';
+ d.getElementById('qt_options').style.display = 'none';
+ d.getElementById('shockwave_options').style.display = 'none';
+ d.getElementById('wmp_options').style.display = 'none';
+ d.getElementById('rmp_options').style.display = 'none';
+ d.getElementById(t + '_options').style.display = 'block';
+}
+
+function serializeParameters() {
+ var d = document, f = d.forms[0], s = '';
+
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {
+ case "flash":
+ s += getBool('flash', 'play', true);
+ s += getBool('flash', 'loop', true);
+ s += getBool('flash', 'menu', true);
+ s += getBool('flash', 'swliveconnect', false);
+ s += getStr('flash', 'quality');
+ s += getStr('flash', 'scale');
+ s += getStr('flash', 'salign');
+ s += getStr('flash', 'wmode');
+ s += getStr('flash', 'base');
+ s += getStr('flash', 'flashvars');
+ break;
+
+ case "qt":
+ s += getBool('qt', 'loop', false);
+ s += getBool('qt', 'autoplay', true);
+ s += getBool('qt', 'cache', false);
+ s += getBool('qt', 'controller', true);
+ s += getBool('qt', 'correction', false, 'none', 'full');
+ s += getBool('qt', 'enablejavascript', false);
+ s += getBool('qt', 'kioskmode', false);
+ s += getBool('qt', 'autohref', false);
+ s += getBool('qt', 'playeveryframe', false);
+ s += getBool('qt', 'targetcache', false);
+ s += getStr('qt', 'scale');
+ s += getStr('qt', 'starttime');
+ s += getStr('qt', 'endtime');
+ s += getStr('qt', 'target');
+ s += getStr('qt', 'qtsrcchokespeed');
+ s += getStr('qt', 'volume');
+ s += getStr('qt', 'qtsrc');
+ break;
+
+ case "shockwave":
+ s += getBool('shockwave', 'sound');
+ s += getBool('shockwave', 'progress');
+ s += getBool('shockwave', 'autostart');
+ s += getBool('shockwave', 'swliveconnect');
+ s += getStr('shockwave', 'swvolume');
+ s += getStr('shockwave', 'swstretchstyle');
+ s += getStr('shockwave', 'swstretchhalign');
+ s += getStr('shockwave', 'swstretchvalign');
+ break;
+
+ case "wmp":
+ s += getBool('wmp', 'autostart', true);
+ s += getBool('wmp', 'enabled', false);
+ s += getBool('wmp', 'enablecontextmenu', true);
+ s += getBool('wmp', 'fullscreen', false);
+ s += getBool('wmp', 'invokeurls', true);
+ s += getBool('wmp', 'mute', false);
+ s += getBool('wmp', 'stretchtofit', false);
+ s += getBool('wmp', 'windowlessvideo', false);
+ s += getStr('wmp', 'balance');
+ s += getStr('wmp', 'baseurl');
+ s += getStr('wmp', 'captioningid');
+ s += getStr('wmp', 'currentmarker');
+ s += getStr('wmp', 'currentposition');
+ s += getStr('wmp', 'defaultframe');
+ s += getStr('wmp', 'playcount');
+ s += getStr('wmp', 'rate');
+ s += getStr('wmp', 'uimode');
+ s += getStr('wmp', 'volume');
+ break;
+
+ case "rmp":
+ s += getBool('rmp', 'autostart', false);
+ s += getBool('rmp', 'loop', false);
+ s += getBool('rmp', 'autogotourl', true);
+ s += getBool('rmp', 'center', false);
+ s += getBool('rmp', 'imagestatus', true);
+ s += getBool('rmp', 'maintainaspect', false);
+ s += getBool('rmp', 'nojava', false);
+ s += getBool('rmp', 'prefetch', false);
+ s += getBool('rmp', 'shuffle', false);
+ s += getStr('rmp', 'console');
+ s += getStr('rmp', 'controls');
+ s += getStr('rmp', 'numloop');
+ s += getStr('rmp', 'scriptcallbacks');
+ break;
+ }
+
+ s += getStr(null, 'id');
+ s += getStr(null, 'name');
+ s += getStr(null, 'src');
+ s += getStr(null, 'align');
+ s += getStr(null, 'bgcolor');
+ s += getInt(null, 'vspace');
+ s += getInt(null, 'hspace');
+ s += getStr(null, 'width');
+ s += getStr(null, 'height');
+
+ s = s.length > 0 ? s.substring(0, s.length - 1) : s;
+
+ return s;
+}
+
+function setBool(pl, p, n) {
+ if (typeof(pl[n]) == "undefined")
+ return;
+
+ document.forms[0].elements[p + "_" + n].checked = pl[n];
+}
+
+function setStr(pl, p, n) {
+ var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];
+
+ if (typeof(pl[n]) == "undefined")
+ return;
+
+ if (e.type == "text")
+ e.value = pl[n];
+ else
+ selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);
+}
+
+function getBool(p, n, d, tv, fv) {
+ var v = document.forms[0].elements[p + "_" + n].checked;
+
+ tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";
+ fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";
+
+ return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');
+}
+
+function getStr(p, n, d) {
+ var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
+ var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
+
+ return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");
+}
+
+function getInt(p, n, d) {
+ var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
+ var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
+
+ return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");
+}
+
+function jsEncode(s) {
+ s = s.replace(new RegExp('\\\\', 'g'), '\\\\');
+ s = s.replace(new RegExp('"', 'g'), '\\"');
+ s = s.replace(new RegExp("'", 'g'), "\\'");
+
+ return s;
+}
+
+function generatePreview(c) {
+ var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;
+
+ p.innerHTML = '<!-- x --->';
+
+ nw = parseInt(f.width.value);
+ nh = parseInt(f.height.value);
+
+ if (f.width.value != "" && f.height.value != "") {
+ if (f.constrain.checked) {
+ if (c == 'width' && oldWidth != 0) {
+ wp = nw / oldWidth;
+ nh = Math.round(wp * nh);
+ f.height.value = nh;
+ } else if (c == 'height' && oldHeight != 0) {
+ hp = nh / oldHeight;
+ nw = Math.round(hp * nw);
+ f.width.value = nw;
+ }
+ }
+ }
+
+ if (f.width.value != "")
+ oldWidth = nw;
+
+ if (f.height.value != "")
+ oldHeight = nh;
+
+ // After constrain
+ pl = serializeParameters();
+
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {
+ case "flash":
+ cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
+ codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
+ type = 'application/x-shockwave-flash';
+ break;
+
+ case "shockwave":
+ cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';
+ codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
+ type = 'application/x-director';
+ break;
+
+ case "qt":
+ cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
+ codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
+ type = 'video/quicktime';
+ break;
+
+ case "wmp":
+ cls = tinyMCE.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';
+ codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
+ type = 'application/x-mplayer2';
+ break;
+
+ case "rmp":
+ cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
+ codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
+ type = 'audio/x-pn-realaudio-plugin';
+ break;
+ }
+
+ if (pl == '') {
+ p.innerHTML = '';
+ return;
+ }
+
+ pl = eval('x={' + pl + '};');
+
+ if (!pl.src) {
+ p.innerHTML = '';
+ return;
+ }
+
+ pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);
+ pl.width = !pl.width ? 100 : pl.width;
+ pl.height = !pl.height ? 100 : pl.height;
+ pl.id = !pl.id ? 'obj' : pl.id;
+ pl.name = !pl.name ? 'eobj' : pl.name;
+ pl.align = !pl.align ? '' : pl.align;
+
+ h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';
+
+ for (n in pl) {
+ h += '<param name="' + n + '" value="' + pl[n] + '">';
+
+ // Add extra url parameter if it's an absolute URL
+ if (n == 'src' && pl[n].indexOf('://') != -1)
+ h += '<param name="url" value="' + pl[n] + '" />';
+ }
+
+ h += '<embed type="' + type + '" ';
+
+ for (n in pl)
+ h += n + '="' + pl[n] + '" ';
+
+ h += '></embed></object>';
+
+ p.innerHTML = "<!-- x --->" + h;
+}
-// UK lang variables\r
-\r
-tinyMCE.addToLang('media',{\r
-title : 'Insert / edit embedded media',\r
-desc : 'Insert / edit embedded media',\r
-general : 'General',\r
-advanced : 'Advanced',\r
-file : 'File/URL',\r
-list : 'List',\r
-size : 'Dimensions',\r
-preview : 'Preview',\r
-constrain_proportions : 'Constrain proportions',\r
-type : 'Type',\r
-id : 'Id',\r
-name : 'Name',\r
-class_name : 'Class',\r
-vspace : 'V-Space',\r
-hspace : 'H-Space',\r
-play : 'Auto play',\r
-loop : 'Loop',\r
-menu : 'Show menu',\r
-quality : 'Quality',\r
-scale : 'Scale',\r
-align : 'Align',\r
-salign : 'SAlign',\r
-wmode : 'WMode',\r
-bgcolor : 'Background',\r
-base : 'Base',\r
-flashvars : 'Flashvars',\r
-liveconnect : 'SWLiveConnect',\r
-autohref : 'AutoHREF',\r
-cache : 'Cache',\r
-hidden : 'Hidden',\r
-controller : 'Controller',\r
-kioskmode : 'Kiosk mode',\r
-playeveryframe : 'Play every frame',\r
-targetcache : 'Target cache',\r
-correction : 'No correction',\r
-enablejavascript : 'Enable JavaScript',\r
-starttime : 'Start time',\r
-endtime : 'End time',\r
-href : 'Href',\r
-qtsrcchokespeed : 'Choke speed',\r
-target : 'Target',\r
-volume : 'Volume',\r
-autostart : 'Auto start',\r
-enabled : 'Enabled',\r
-fullscreen : 'Fullscreen',\r
-invokeurls : 'Invoke URLs',\r
-mute : 'Mute',\r
-stretchtofit : 'Stretch to fit',\r
-windowlessvideo : 'Windowless video',\r
-balance : 'Balance',\r
-baseurl : 'Base URL',\r
-captioningid : 'Captioning id',\r
-currentmarker : 'Current marker',\r
-currentposition : 'Current position',\r
-defaultframe : 'Default frame',\r
-playcount : 'Play count',\r
-rate : 'Rate',\r
-uimode : 'UI Mode',\r
-flash_options : 'Flash options',\r
-qt_options : 'Quicktime options',\r
-wmp_options : 'Windows media player options',\r
-rmp_options : 'Real media player options',\r
-shockwave_options : 'Shockwave options',\r
-autogotourl : 'Auto goto URL',\r
-center : 'Center',\r
-imagestatus : 'Image status',\r
-maintainaspect : 'Maintain aspect',\r
-nojava : 'No java',\r
-prefetch : 'Prefetch',\r
-shuffle : 'Shuffle',\r
-console : 'Console',\r
-numloop : 'Num loops',\r
-controls : 'Controls',\r
-scriptcallbacks : 'Script callbacks',\r
-swstretchstyle : 'Stretch style',\r
-swstretchhalign : 'Stretch H-Align',\r
-swstretchvalign : 'Stretch V-Align',\r
-sound : 'Sound',\r
-progress : 'Progress',\r
-qtsrc : 'QT Src',\r
-qt_stream_warn : 'Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..',\r
-align_top : 'Top',\r
-align_right : 'Right',\r
-align_bottom : 'Bottom',\r
-align_left : 'Left',\r
-align_center : 'Center',\r
-align_top_left : 'Top left',\r
-align_top_right : 'Top right',\r
-align_bottom_left : 'Bottom left',\r
-align_bottom_right : 'Bottom right'\r
+// UK lang variables
+
+tinyMCE.addToLang('media',{
+title : 'Insert / edit embedded media',
+desc : 'Insert / edit embedded media',
+general : 'General',
+advanced : 'Advanced',
+file : 'File/URL',
+list : 'List',
+size : 'Dimensions',
+preview : 'Preview',
+constrain_proportions : 'Constrain proportions',
+type : 'Type',
+id : 'Id',
+name : 'Name',
+class_name : 'Class',
+vspace : 'V-Space',
+hspace : 'H-Space',
+play : 'Auto play',
+loop : 'Loop',
+menu : 'Show menu',
+quality : 'Quality',
+scale : 'Scale',
+align : 'Align',
+salign : 'SAlign',
+wmode : 'WMode',
+bgcolor : 'Background',
+base : 'Base',
+flashvars : 'Flashvars',
+liveconnect : 'SWLiveConnect',
+autohref : 'AutoHREF',
+cache : 'Cache',
+hidden : 'Hidden',
+controller : 'Controller',
+kioskmode : 'Kiosk mode',
+playeveryframe : 'Play every frame',
+targetcache : 'Target cache',
+correction : 'No correction',
+enablejavascript : 'Enable JavaScript',
+starttime : 'Start time',
+endtime : 'End time',
+href : 'Href',
+qtsrcchokespeed : 'Choke speed',
+target : 'Target',
+volume : 'Volume',
+autostart : 'Auto start',
+enabled : 'Enabled',
+fullscreen : 'Fullscreen',
+invokeurls : 'Invoke URLs',
+mute : 'Mute',
+stretchtofit : 'Stretch to fit',
+windowlessvideo : 'Windowless video',
+balance : 'Balance',
+baseurl : 'Base URL',
+captioningid : 'Captioning id',
+currentmarker : 'Current marker',
+currentposition : 'Current position',
+defaultframe : 'Default frame',
+playcount : 'Play count',
+rate : 'Rate',
+uimode : 'UI Mode',
+flash_options : 'Flash options',
+qt_options : 'Quicktime options',
+wmp_options : 'Windows media player options',
+rmp_options : 'Real media player options',
+shockwave_options : 'Shockwave options',
+autogotourl : 'Auto goto URL',
+center : 'Center',
+imagestatus : 'Image status',
+maintainaspect : 'Maintain aspect',
+nojava : 'No java',
+prefetch : 'Prefetch',
+shuffle : 'Shuffle',
+console : 'Console',
+numloop : 'Num loops',
+controls : 'Controls',
+scriptcallbacks : 'Script callbacks',
+swstretchstyle : 'Stretch style',
+swstretchhalign : 'Stretch H-Align',
+swstretchvalign : 'Stretch V-Align',
+sound : 'Sound',
+progress : 'Progress',
+qtsrc : 'QT Src',
+qt_stream_warn : 'Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..',
+align_top : 'Top',
+align_right : 'Right',
+align_bottom : 'Bottom',
+align_left : 'Left',
+align_center : 'Center',
+align_top_left : 'Top left',
+align_top_right : 'Top right',
+align_bottom_left : 'Bottom left',
+align_bottom_right : 'Bottom right'
});
\ No newline at end of file
<select id="media_type" name="media_type" onchange="changedType(this.value);generatePreview();">\r
<option value="flash">Flash</option>\r
<option value="qt">Quicktime</option>\r
- <option value="shockwave">Shockware</option>\r
+ <option value="shockwave">Shockwave</option>\r
<option value="wmp">Windows Media</option>\r
<option value="rmp">Real Media</option>\r
</select>\r
-This is the location you place TinyMCE plugins.\r
+This is the location you place TinyMCE plugins.
-/* CSS file for cell dialog in the table plugin */\r
-\r
-.panel_wrapper div.current {\r
- height: 200px;\r
-}\r
-\r
-.advfield {\r
- width: 200px;\r
-}\r
-\r
-#action {\r
- margin-bottom: 3px;\r
-}\r
-\r
-#class {\r
- width: 150px;\r
+/* CSS file for cell dialog in the table plugin */
+
+.panel_wrapper div.current {
+ height: 200px;
+}
+
+.advfield {
+ width: 200px;
+}
+
+#action {
+ margin-bottom: 3px;
+}
+
+#class {
+ width: 150px;
}
\ No newline at end of file
-/* CSS file for row dialog in the table plugin */\r
-\r
-.panel_wrapper div.current {\r
- height: 200px;\r
-}\r
-\r
-.advfield {\r
- width: 200px;\r
-}\r
-\r
-#action {\r
- margin-bottom: 3px;\r
-}\r
-\r
-#rowtype,#align,#valign,#class,#height {\r
- width: 150px;\r
-}\r
-\r
-#height {\r
- width: 50px; \r
-}\r
-\r
-.col2 {\r
- padding-left: 20px;\r
-}\r
+/* CSS file for row dialog in the table plugin */
+
+.panel_wrapper div.current {
+ height: 200px;
+}
+
+.advfield {
+ width: 200px;
+}
+
+#action {
+ margin-bottom: 3px;
+}
+
+#rowtype,#align,#valign,#class,#height {
+ width: 150px;
+}
+
+#height {
+ width: 50px;
+}
+
+.col2 {
+ padding-left: 20px;
+}
-/* CSS file for table dialog in the table plugin */\r
-\r
-.panel_wrapper div.current {\r
- height: 220px;\r
-}\r
-\r
-.advfield {\r
- width: 200px;\r
-}\r
-\r
-#class {\r
- width: 150px;\r
-}\r
+/* CSS file for table dialog in the table plugin */
+
+.panel_wrapper div.current {
+ height: 220px;
+}
+
+.advfield {
+ width: 200px;
+}
+
+#class {
+ width: 150px;
+}
</tr>\r
<tr>\r
<td class="column1"><label for="caption">{$lang_table_caption}</label></td> \r
- <td><input id="caption" name="caption" type="checkbox" value="true" /></td> \r
+ <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td> \r
</tr>\r
</table>\r
</fieldset>\r
--- /dev/null
+/* This file contains the CSS data for all popups in TinyMCE */\r
+\r
+body {\r
+ background-color: #F0F0EE;\r
+ font-family: Verdana, Arial, Helvetica, sans-serif;\r
+ font-size: 11px;\r
+ scrollbar-3dlight-color: #F0F0EE;\r
+ scrollbar-arrow-color: #676662;\r
+ scrollbar-base-color: #F0F0EE;\r
+ scrollbar-darkshadow-color: #DDDDDD;\r
+ scrollbar-face-color: #E0E0DD;\r
+ scrollbar-highlight-color: #F0F0EE;\r
+ scrollbar-shadow-color: #F0F0EE;\r
+ scrollbar-track-color: #F5F5F5;\r
+ margin: 8px;\r
+}\r
+\r
+td {\r
+ font-family: Verdana, Arial, Helvetica, sans-serif;\r
+ font-size: 11px;\r
+}\r
+\r
+input {\r
+ background: #FFFFFF;\r
+ border: 1px solid #cccccc;\r
+}\r
+\r
+td, input, select, textarea {\r
+ font-family: Verdana, Arial, Helvetica, sans-serif;\r
+ font-size: 10px;\r
+}\r
+\r
+input, select, textarea {\r
+ border: 1px solid #808080;\r
+}\r
+\r
+.input_noborder {\r
+ border: 0;\r
+}\r
+\r
+#insert, .updateButton {\r
+ font-weight: bold;\r
+ width: 90px;\r
+ height: 21px;\r
+ border: 0;\r
+ background-image: url('../images/insert_button_bg.gif');\r
+ cursor: pointer;\r
+}\r
+\r
+#cancel {\r
+ font-weight: bold;\r
+ width: 90px;\r
+ height: 21px;\r
+ border: 0;\r
+ background-image: url('../images/cancel_button_bg.gif');\r
+ cursor: pointer;\r
+}\r
+\r
+/* Mozilla only style */\r
+html>body #insert, html>body #cancel {\r
+ padding-bottom: 2px;\r
+}\r
+\r
+.title {\r
+ font-size: 12px;\r
+ font-weight: bold;\r
+ color: #2B6FB6;\r
+}\r
+\r
+table.charmap {\r
+ border-style: solid;\r
+ border-width: 1px;\r
+ border-color: #AAAAAA;\r
+}\r
+\r
+td.charmap, td.charmapOver {\r
+ color: #000000;\r
+ border-color: #AAAAAA;\r
+ border-style: solid;\r
+ border-width: 1px;\r
+ text-align: center;\r
+ font-size: 12px;\r
+}\r
+\r
+td.charmapOver {\r
+ background-color: #CCCCCC;\r
+ cursor: default;\r
+}\r
+\r
+a.charmap {\r
+ color: #000000;\r
+ text-decoration: none\r
+}\r
+\r
+.wordWrapCode {\r
+ vertical-align: middle;\r
+ border: 1px none #000000;\r
+ background-color: transparent;\r
+}\r
+\r
+input.radio {\r
+ border: 1px none #000000;\r
+ background-color: transparent;\r
+ vertical-align: middle;\r
+}\r
+\r
+input.checkbox {\r
+ border: 1px none #000000;\r
+ background-color: transparent;\r
+ vertical-align: middle;\r
+}\r
+\r
+.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected {\r
+ margin-left: 1px;\r
+}\r
+\r
+.mceButtonNormal {\r
+ border-top: 1px solid;\r
+ border-left: 1px solid;\r
+ border-bottom: 1px solid;\r
+ border-right: 1px solid;\r
+ border-color: #F0F0EE;\r
+ cursor: default;\r
+}\r
+\r
+.mceButtonOver {\r
+ border: 1px solid #0A246A;\r
+ cursor: default;\r
+ background-color: #B6BDD2;\r
+}\r
+\r
+.mceButtonDown {\r
+ cursor: default;\r
+ border: 1px solid #0A246A;\r
+ background-color: #8592B5;\r
+}\r
+\r
+.mceButtonDisabled {\r
+ filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);\r
+ -moz-opacity:0.3;\r
+ opacity: 0.3;\r
+ border-top: 1px solid;\r
+ border-left: 1px solid;\r
+ border-bottom: 1px solid;\r
+ border-right: 1px solid;\r
+ border-color: #F0F0EE;\r
+ cursor: default;\r
+}\r
+\r
+.mceActionPanel {\r
+ margin-top: 5px;\r
+}\r
+\r
+/* Tabs classes */\r
+\r
+.tabs {\r
+ float: left;\r
+ width: 100%;\r
+ line-height: normal;\r
+ background-image: url("../images/xp/tabs_bg.gif");\r
+}\r
+\r
+.tabs ul {\r
+ margin: 0;\r
+ padding: 0 0 0;\r
+ list-style: none;\r
+}\r
+\r
+.tabs li {\r
+ float: left;\r
+ background: url("../images/xp/tab_bg.gif") no-repeat left top;\r
+ margin: 0;\r
+ margin-left: 0;\r
+ margin-right: 2px;\r
+ padding: 0 0 0 10px;\r
+ line-height: 18px;\r
+}\r
+\r
+.tabs li.current {\r
+ background: url("../images/xp/tab_sel_bg.gif") no-repeat left top;\r
+ margin-right: 2px;\r
+}\r
+\r
+.tabs span {\r
+ float: left;\r
+ display: block;\r
+ background: url("../images/xp/tab_end.gif") no-repeat right top;\r
+ padding: 0px 10px 0 0;\r
+}\r
+\r
+.tabs .current span {\r
+ background: url("../images/xp/tab_sel_end.gif") no-repeat right top;\r
+}\r
+\r
+.tabs a {\r
+ text-decoration: none;\r
+ font-family: Verdana, Arial;\r
+ font-size: 10px;\r
+}\r
+\r
+.tabs a:link, .tabs a:visited, .tabs a:hover {\r
+ color: black;\r
+}\r
+\r
+.tabs a:hover {\r
+}\r
+\r
+.tabs .current {\r
+}\r
+\r
+.tabs .current a, .tabs .current a:link, .tabs .current a:visited {\r
+}\r
+\r
+.panel_wrapper div.panel {\r
+ display: none;\r
+}\r
+\r
+.panel_wrapper div.current {\r
+ display: block;\r
+ width: 100%;\r
+ height: 300px;\r
+ overflow: visible; /* Should be auto but that breaks Safari */\r
+}\r
+\r
+.panel_wrapper {\r
+ border: 1px solid #919B9C;\r
+ border-top: 0px;\r
+ padding: 10px;\r
+ padding-top: 5px;\r
+ clear: both;\r
+ background-color: white;\r
+}\r
+\r
+fieldset {\r
+ border: 1px solid #919B9C;\r
+ font-family: Verdana, Arial;\r
+ font-size: 10px;\r
+ padding: 0;\r
+ margin: 0;\r
+ padding: 4px;\r
+}\r
+\r
+legend {\r
+ color: #2B6FB6;\r
+ font-weight: bold;\r
+}\r
+\r
+.properties {\r
+ width: 100%;\r
+}\r
+\r
+.properties .column1 {\r
+}\r
+\r
+.properties .column2 {\r
+ text-align: left;\r
+}\r
+\r
+a:link, a:visited {\r
+ color: black;\r
+}\r
+\r
+a:hover {\r
+ color: #2B6FB6;\r
+}\r
+\r
+#plugintable thead {\r
+ font-weight: bold;\r
+ background-color: #DDDDDD;\r
+}\r
+\r
+#plugintable, #about #plugintable td {\r
+ border: 1px solid #919B9C;\r
+}\r
+\r
+#plugintable {\r
+ width: 99%;\r
+ margin-top: 10px;\r
+}\r
+\r
+#pluginscontainer {\r
+ height: 290px;\r
+ overflow: auto;\r
+}\r
+\r
+/* MSIE Specific styles */\r
+\r
+* html .panel_wrapper {\r
+ width: 100%;\r
+}\r
+\r
+.column {\r
+ float: left;\r
+}\r
+\r
+h1, h2, h3, h4 {\r
+ color: #2B6FB6;\r
+ margin: 0;\r
+ padding: 0;\r
+ padding-top: 5px;\r
+}\r
+\r
+h3 {\r
+ font-size: 14px;\r
+}\r
+\r
+#link .panel_wrapper, #link div.current {\r
+ height: 125px;\r
+}\r
+\r
+#image .panel_wrapper, #image div.current {\r
+ height: 190px;\r
+}\r
+\r
+label.msg { display: none; }\r
+label.invalid { color: #EE0000; display: inline; }\r
+input.invalid { border: 1px solid #EE0000; }\r
+\r
+/* Disables the advanced tab in the table plugin. */\r
+/*\r
+#table #advanced_tab {\r
+ display: none;\r
+}\r
+*/\r
+\r
+/* Disables the border input field and label in the table plugin. */\r
+/*\r
+#table #border, #table #borderlabel {\r
+ display: none;\r
+}\r
+*/\r
-tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_AdvancedTheme={_defColors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",_autoImportCSSClasses:true,_resizer:{},_buttons:[['bold','{$lang_bold_img}','lang_bold_desc','Bold'],['italic','{$lang_italic_img}','lang_italic_desc','Italic'],['underline','{$lang_underline_img}','lang_underline_desc','Underline'],['strikethrough','strikethrough.gif','lang_striketrough_desc','Strikethrough'],['justifyleft','justifyleft.gif','lang_justifyleft_desc','JustifyLeft'],['justifycenter','justifycenter.gif','lang_justifycenter_desc','JustifyCenter'],['justifyright','justifyright.gif','lang_justifyright_desc','JustifyRight'],['justifyfull','justifyfull.gif','lang_justifyfull_desc','JustifyFull'],['bullist','bullist.gif','lang_bullist_desc','InsertUnorderedList'],['numlist','numlist.gif','lang_numlist_desc','InsertOrderedList'],['outdent','outdent.gif','lang_outdent_desc','Outdent'],['indent','indent.gif','lang_indent_desc','Indent'],['cut','cut.gif','lang_cut_desc','Cut'],['copy','copy.gif','lang_copy_desc','Copy'],['paste','paste.gif','lang_paste_desc','Paste'],['undo','undo.gif','lang_undo_desc','Undo'],['redo','redo.gif','lang_redo_desc','Redo'],['link','link.gif','lang_link_desc','mceLink',true],['unlink','unlink.gif','lang_unlink_desc','unlink'],['image','image.gif','lang_image_desc','mceImage',true],['cleanup','cleanup.gif','lang_cleanup_desc','mceCleanup'],['help','help.gif','lang_help_desc','mceHelp'],['code','code.gif','lang_theme_code_desc','mceCodeEditor'],['hr','hr.gif','lang_theme_hr_desc','inserthorizontalrule'],['removeformat','removeformat.gif','lang_theme_removeformat_desc','removeformat'],['sub','sub.gif','lang_theme_sub_desc','subscript'],['sup','sup.gif','lang_theme_sup_desc','superscript'],['forecolor','forecolor.gif','lang_theme_forecolor_desc','forecolor',true],['forecolorpicker','forecolor.gif','lang_theme_forecolor_desc','forecolorpicker',true],['backcolor','backcolor.gif','lang_theme_backcolor_desc','HiliteColor',true],['backcolorpicker','backcolor.gif','lang_theme_backcolor_desc','backcolorpicker',true],['charmap','charmap.gif','lang_theme_charmap_desc','mceCharMap'],['visualaid','visualaid.gif','lang_theme_visualaid_desc','mceToggleVisualAid'],['anchor','anchor.gif','lang_theme_anchor_desc','mceInsertAnchor'],['newdocument','newdocument.gif','lang_newdocument_desc','mceNewDocument']],_buttonMap:'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',getControlHTML:function(button_name){var i,x,but;for(i=0;i<TinyMCE_AdvancedTheme._buttons.length;i++){but=TinyMCE_AdvancedTheme._buttons[i];if(but[0]==button_name&&(button_name=="forecolor"||button_name=="backcolor"))return tinyMCE.getMenuButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3]+"Menu",but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null));if(but[0]==button_name)return tinyMCE.getButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null))}switch(button_name){case"formatselect":var html='<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';var formats=tinyMCE.getParam("theme_advanced_blockformats","p,address,pre,h1,h2,h3,h4,h5,h6",true).split(',');var lookup=[['p','{$lang_theme_paragraph}'],['address','{$lang_theme_address}'],['pre','{$lang_theme_pre}'],['h1','{$lang_theme_h1}'],['h2','{$lang_theme_h2}'],['h3','{$lang_theme_h3}'],['h4','{$lang_theme_h4}'],['h5','{$lang_theme_h5}'],['h6','{$lang_theme_h6}'],['div','{$lang_theme_div}'],['blockquote','{$lang_theme_blockquote}'],['code','{$lang_theme_code}'],['dt','{$lang_theme_dt}'],['dd','{$lang_theme_dd}'],['samp','{$lang_theme_samp}']];html+='<option value="">{$lang_theme_block}</option>';for(var i=0;i<formats.length;i++){for(var x=0;x<lookup.length;x++){if(formats[i]==lookup[x][0])html+='<option value="<'+lookup[x][0]+'>">'+lookup[x][1]+'</option>'}}html+='</select>';return html;case"styleselect":return'<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';case"fontselect":var fontHTML='<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';var iFonts='Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';var nFonts='Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sand;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';var fonts=tinyMCE.getParam("theme_advanced_fonts",nFonts).split(';');for(i=0;i<fonts.length;i++){if(fonts[i]!=''){var parts=fonts[i].split('=');fontHTML+='<option value="'+parts[1]+'">'+parts[0]+'</option>'}}fontHTML+='</select>';return fontHTML;case"fontsizeselect":return'<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+'<option value="0">{$lang_theme_font_size}</option>'+'<option value="1">1 (8 pt)</option>'+'<option value="2">2 (10 pt)</option>'+'<option value="3">3 (12 pt)</option>'+'<option value="4">4 (14 pt)</option>'+'<option value="5">5 (18 pt)</option>'+'<option value="6">6 (24 pt)</option>'+'<option value="7">7 (36 pt)</option>'+'</select>';case"|":case"separator":return'<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';case"spacer":return'<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';case"rowseparator":return'<br />'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case'mceHelp':tinyMCE.openWindow({file:'about.htm',width:480,height:380},{tinymce_version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion,tinymce_releasedate:tinyMCE.releaseDate,inline:"yes"});return true;case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);")}action="update"}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class'])}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"})}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h)}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:""}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);")}action="update"}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout'])}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"forecolor":var fcp=new TinyMCE_Layer(editor_id+'_fcPreview',false),p,img,elm;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!fcp.exists()){fcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=fcp.getElement();elm._editor_id=editor_id;elm._command="forecolor";elm._switchId=editor_id+"_forecolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_forecolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));fcp.moveTo(p.absLeft,p.absTop);fcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).foreColor;fcp.show();return false;case"forecolorpicker":this._pickColor(editor_id,'forecolor');return true;case"forecolorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_fcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_text_colors','forecolor'));tinyMCE.switchClass(editor_id+'_forecolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_forecolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"HiliteColor":var bcp=new TinyMCE_Layer(editor_id+'_bcPreview',false),p,img;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!bcp.exists()){bcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=bcp.getElement();elm._editor_id=editor_id;elm._command="HiliteColor";elm._switchId=editor_id+"_backcolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_backcolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));bcp.moveTo(p.absLeft,p.absTop);bcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).backColor;bcp.show();return false;case"HiliteColorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_bcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_background_colors','HiliteColor'));tinyMCE.switchClass(editor_id+'_backcolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_backcolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"backcolorpicker":this._pickColor(editor_id,'HiliteColor');return true;case"mceColorPicker":if(user_interface){var template=[];if(!value['callback']&&!value['color'])value['color']=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=380;template['height']=250;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:value['color']})}else{var savedVal=tinyMCE.lastColorPickerValue,elm;if(savedVal['callback']){savedVal['callback'](value);return true}elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();')}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.getLang('lang_newdocument')))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true}return false},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array(),skip;for(var i=0;i<in_array.length;i++){skip=false;for(var j=0;j<remove_array.length;j++){if(in_array[i]==remove_array[j]){skip=true}}if(!skip){outArray[outArray.length]=in_array[i]}}return outArray}function addToArray(in_array,add_array){for(var i=0;i<add_array.length;i++){in_array[in_array.length]=add_array[i]}return in_array}var template=new Array();var deltaHeight=0;var resizing=tinyMCE.getParam("theme_advanced_resizing",false);var path=tinyMCE.getParam("theme_advanced_path",true);var statusbarHTML='<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: '+(path?"block":"none")+'"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: '+(resizing?"block":"none")+'" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='<option value="">{$lang_theme_style_select}</option>';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i<stylesAr.length;i++){var key,value;key=stylesAr[i].split('=')[0];value=stylesAr[i].split('=')[1];styleSelectHTML+='<option value="'+value+'">'+key+'</option>'}TinyMCE_AdvancedTheme._autoImportCSSClasses=false}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='<a href="#" accesskey="q" title="'+tinyMCE.getLang("lang_toolbar_focus")+'"';if(!tinyMCE.getParam("accessibility_focus"))toolbarHTML+=' onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"';toolbarHTML+='></a>';for(var i=1;i<100;i++){var def=defVals["theme_advanced_buttons"+i];var buttons=tinyMCE.getParam("theme_advanced_buttons"+i,def==null?'':def,true,',');if(buttons.length==0)break;buttons=removeFromArray(buttons,tinyMCE.getParam("theme_advanced_disable","",true,','));buttons=addToArray(buttons,tinyMCE.getParam("theme_advanced_buttons"+i+"_add","",true,','));buttons=addToArray(tinyMCE.getParam("theme_advanced_buttons"+i+"_add_before","",true,','),buttons);for(var b=0;b<buttons.length;b++)toolbarHTML+=tinyMCE.getControlHTML(buttons[b]);if(buttons.length>0){toolbarHTML+="<br />";deltaHeight-=23}}toolbarHTML+='<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"></a>';template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';if(toolbarLocation=="top")template['html']+='<tr><td dir="ltr" class="mceToolbarTop" align="'+toolbarAlign+'" height="1" nowrap="nowrap"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(statusbarLocation=="top"){template['html']+='<tr><td class="mceStatusbarTop" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';if(toolbarLocation=="bottom")template['html']+='<tr><td dir="ltr" class="mceToolbarBottom" align="'+toolbarAlign+'" height="1"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null}if(statusbarLocation=="bottom"){template['html']+='<tr><td class="mceStatusbarBottom" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='</tbody></table>';break;case"RowLayout":template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i<containers.length;i++){if(containers[i]=="mceEditor")template['html']+='<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom"}else if(i==0){pathClass="mceStatusbar"}else{deltaHeight-=2}template['html']+='<tr><td class="'+pathClass+'" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=22}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);curContainer=removeFromArray(curContainer,tinyMCE.getParam("theme_advanced_disable","",true,','));for(var j=0;j<curContainer.length;j++)curContainerHTML+=tinyMCE.getControlHTML(curContainer[j]);if(curContainer.length>0){curContainerHTML+="<br />";deltaHeight-=23}template['html']+='<tr><td class="'+curCSS+'" align="'+curAlign+'" height="1">'+curContainerHTML+'</td></tr>'}}template['html']+='</tbody></table>';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);")}break}if(resizing)template['html']+='<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);if(!template['delta_width'])template['delta_width']=0;if(!template['delta_height'])template['delta_height']=deltaHeight;return template},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true))}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink')},removeInstance:function(inst){new TinyMCE_Layer(inst.editorId+'_fcMenu').remove();new TinyMCE_Layer(inst.editorId+'_bcMenu').remove()},hideInstance:function(inst){TinyMCE_AdvancedTheme._hideMenus(inst.editorId)},_handleMenuEvent:function(e){var te=tinyMCE.isMSIE?window.event.srcElement:e.target;tinyMCE._menuButtonEvent(e.type=="mouseover"?"over":"out",document.getElementById(te._switchId));if(e.type=="click")tinyMCE.execInstanceCommand(te._editor_id,te._command)},_hideMenus:function(id){var fcml=new TinyMCE_Layer(id+'_fcMenu'),bcml=new TinyMCE_Layer(id+'_bcMenu');if(fcml.exists()&&fcml.isVisible()){tinyMCE.switchClass(id+'_forecolor','mceMenuButton');fcml.hide()}if(bcml.exists()&&bcml.isVisible()){tinyMCE.switchClass(id+'_backcolor','mceMenuButton');bcml.hide()}},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){var alignNode,breakOut,classNode;function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i<select_elm.options.length;i++){var ov=""+select_elm.options[i].value;if(first_index&&ov.toLowerCase().indexOf(value.toLowerCase())==0){select_elm.selectedIndex=i;return true}if(ov==value){select_elm.selectedIndex=i;return true}}}return false};if(node==null)return;var pathElm=document.getElementById(editor_id+"_path");var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();TinyMCE_AdvancedTheme._hideMenus(editor_id);if(pathElm){var parentNode=node;var path=new Array();while(parentNode!=null){if(parentNode.nodeName.toUpperCase()=="BODY"){break}if(parentNode.nodeType==1&&tinyMCE.getAttrib(parentNode,"class").indexOf('mceItemHidden')==-1){path[path.length]=parentNode}parentNode=parentNode.parentNode}var html="";for(var i=path.length-1;i>=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName.indexOf("html:")==0)nodeName=nodeName.substring(5);if(nodeName=="b"){nodeName="strong"}if(nodeName=="i"){nodeName="em"}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+tinyMCE.xmlEncode(st)+" "}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+tinyMCE.xmlEncode(face)+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+tinyMCE.xmlEncode(size)+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+tinyMCE.xmlEncode(color)+" "}if(tinyMCE.getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" "}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(tinyMCE.getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+tinyMCE.xmlEncode(src)+" "}if(path[i].nodeName=='A'&&tinyMCE.getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+tinyMCE.xmlEncode(href)+" "}className=tinyMCE.getAttrib(path[i],"class");if((nodeName=="img"||nodeName=="span")&&className.indexOf('mceItem')!=-1){nodeName=className.replace(/mceItem([a-z]+)/gi,'$1').toLowerCase();nodeData=path[i].getAttribute('title')}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+tinyMCE.xmlEncode(anchor);nodeData=""}if(tinyMCE.getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+='<a title="'+nodeData+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" target="_self" class="mcePathItem">'+nodeName+'</a>';if(i>0){html+=" » "}}pathElm.innerHTML='<a href="#" accesskey="x"></a>'+tinyMCE.getLang('lang_theme_path')+": "+html+' '}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal')}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled')}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index<undo_levels-1&&undo_levels>0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i<selectElm.options.length;i++){if(selectElm.options[i].value==classNode.className){index=i;breakOut=true;break}}}}while(!breakOut&&classNode!=null&&(classNode=classNode.parentNode)!=null);selectElm.selectedIndex=index}var selectElm=document.getElementById(editor_id+"_formatSelect");if(selectElm){var elm=tinyMCE.getParentElement(node,"p,div,h1,h2,h3,h4,h5,h6,pre,address");if(elm)selectByValue(selectElm,"<"+elm.nodeName.toLowerCase()+">");else selectByValue(selectElm,"")}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="")}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"")}else selectByValue(selectElm,"")}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size)}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i<sizes.length;i++){if((''+sizes[i])==size){size=i;break}}}if(!selectByValue(selectElm,size))selectByValue(selectElm,"")}else selectByValue(selectElm,"0")}}alignNode=node;breakOut=false;do{if(!alignNode.getAttribute||!alignNode.getAttribute('align'))continue;switch(alignNode.getAttribute('align').toLowerCase()){case"left":tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonSelected');breakOut=true;break;case"right":tinyMCE.switchClass(editor_id+'_justifyright','mceButtonSelected');breakOut=true;break;case"middle":case"center":tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');breakOut=true;break;case"justify":tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonSelected');breakOut=true;break}}while(!breakOut&&(alignNode=alignNode.parentNode)!=null);var div=tinyMCE.getParentElement(node,"div");if(div&&div.style.textAlign=="center")tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');if(!setup_content){var ar=new Array("Bold","_bold","Italic","_italic","Strikethrough","_strikethrough","superscript","_sup","subscript","_sub");for(var i=0;i<ar.length;i+=2){if(inst.queryCommandState(ar[i]))tinyMCE.switchClass(editor_id+ar[i+1],'mceButtonSelected')}if(inst.queryCommandState("Underline")&&(node.parentNode==null||node.parentNode.nodeName!="A"))tinyMCE.switchClass(editor_id+'_underline','mceButtonSelected')}do{switch(node.nodeName){case"UL":tinyMCE.switchClass(editor_id+'_bullist','mceButtonSelected');break;case"OL":tinyMCE.switchClass(editor_id+'_numlist','mceButtonSelected');break;case"HR":tinyMCE.switchClass(editor_id+'_hr','mceButtonSelected');break;case"IMG":if(tinyMCE.getAttrib(node,'name').indexOf('mce_')!=0&&tinyMCE.getAttrib(node,'class').indexOf('mceItem')==-1){tinyMCE.switchClass(editor_id+'_image','mceButtonSelected')}break}}while((node=node.parentNode)!=null)},_setupCSSClasses:function(editor_id){var i,selectElm;if(!TinyMCE_AdvancedTheme._autoImportCSSClasses)return;selectElm=document.getElementById(editor_id+'_styleSelect');if(selectElm&&selectElm.getAttribute('cssImported')!='true'){var csses=tinyMCE.getCSSClasses(editor_id);if(csses&&selectElm){for(i=0;i<csses.length;i++)selectElm.options[selectElm.options.length]=new Option(csses[i],csses[i])}if(csses!=null&&csses.length>0)selectElm.setAttribute('cssImported','true')}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie},_getCookie:function(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))},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth<minIframeWidth){dx=minIframeWidth-inst.iframeElement.clientWidth;inst.iframeElement.style.width=(iw+dx)+"px"}}inst.useCSS=false},_resizeEventHandler:function(e){var resizer=TinyMCE_AdvancedTheme._resizer;if(!resizer.resizing)return;e=typeof(e)=="undefined"?window.event:e;var dx=e.screenX-resizer.downX;var dy=e.screenY-resizer.downY;var resizeBox=resizer.resizeBox;var editorId=resizer.editorId;switch(e.type){case"mousemove":var w,h;w=resizer.width+dx;h=resizer.height+dy;w=w<1?1:w;h=h<1?1:h;if(resizer.horizontal)resizeBox.style.width=w+"px";resizeBox.style.height=h+"px";break;case"mouseup":TinyMCE_AdvancedTheme._setResizing(e,editorId,false);TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId),resizer.width+dx,resizer.height+dy,resizer.horizontal);if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var expires=new Date();expires.setTime(expires.getTime()+3600000*24*30);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_width",""+(resizer.horizontal?resizer.width+dx:""),expires);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_height",""+(resizer.height+dy),expires)}break}},_setResizing:function(e,editor_id,state){e=typeof(e)=="undefined"?window.event:e;var resizer=TinyMCE_AdvancedTheme._resizer;var editorContainer=document.getElementById(editor_id+'_parent');var editorArea=document.getElementById(editor_id+'_parent').firstChild;var resizeBox=document.getElementById(editor_id+'_resize_box');var inst=tinyMCE.getInstanceById(editor_id);if(state){var width=editorArea.clientWidth;var height=editorArea.clientHeight;resizeBox.style.width=width+"px";resizeBox.style.height=height+"px";resizer.iframeWidth=inst.iframeElement.clientWidth;resizer.iframeHeight=inst.iframeElement.clientHeight;editorArea.style.display="none";resizeBox.style.display="block";if(!resizer.eventHandlers){if(tinyMCE.isMSIE)tinyMCE.addEvent(document,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);else tinyMCE.addEvent(window,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);tinyMCE.addEvent(document,"mouseup",TinyMCE_AdvancedTheme._resizeEventHandler);resizer.eventHandlers=true}resizer.resizing=true;resizer.downX=e.screenX;resizer.downY=e.screenY;resizer.width=parseInt(resizeBox.style.width);resizer.height=parseInt(resizeBox.style.height);resizer.editorId=editor_id;resizer.resizeBox=resizeBox;resizer.horizontal=tinyMCE.getParam("theme_advanced_resize_horizontal",true)}else{resizer.resizing=false;resizeBox.style.display="none";editorArea.style.display=tinyMCE.isMSIE&&!tinyMCE.isOpera?"block":"table";tinyMCE.execCommand('mceResetDesignMode')}},_getColorHTML:function(id,n,cm){var i,h,cl;h='<span class="mceMenuLine"></span>';cl=tinyMCE.getParam(n,TinyMCE_AdvancedTheme._defColors).split(',');h+='<table class="mceColors"><tr>';for(i=0;i<cl.length;i++){c='tinyMCE.execInstanceCommand(\''+id+'\', \''+cm+'\', false, \'#'+cl[i]+'\');';h+='<td><a href="javascript:'+c+'" style="background-color: #'+cl[i]+'" onclick="'+c+';return false;"></a></td>';if((i+1)%8==0)h+='</tr><tr>'}h+='</tr></table>';if(tinyMCE.getParam("theme_advanced_more_colors",true))h+='<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\''+id+'\',\''+cm+'\');" class="mceMoreColors">'+tinyMCE.getLang('lang_more_colors')+'</a>';return h},_pickColor:function(id,cm){var inputColor,inst=tinyMCE.selectedInstance;if(cm=='forecolor'&&inst)inputColor=inst.foreColor;if((cm=='backcolor'||cm=='HiliteColor')&&inst)inputColor=inst.backColor;tinyMCE.execCommand('mceColorPicker',true,{color:inputColor,callback:function(c){tinyMCE.execInstanceCommand(id,cm,false,c)}})},_insertImage:function(src,alt,border,hspace,vspace,width,height,align,title,onmouseover,onmouseout){tinyMCE.execCommand("mceInsertContent",false,tinyMCE.createTagHTML('img',{src:tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],src),mce_src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout}))},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement)}return}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,'<a href="'+tinyMCE.uniqueURL+'">'+tinyMCE.selectedInstance.selection.getSelectedHTML()+'</a>')}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i<elementArray.length;i++){var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, elementArray[i]);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(elementArray[i],'href',thref);tinyMCE.setAttrib(elementArray[i],'mce_href',mhref);tinyMCE.setAttrib(elementArray[i],'target',target);tinyMCE.setAttrib(elementArray[i],'title',title);tinyMCE.setAttrib(elementArray[i],'onclick',onclick);tinyMCE.setAttrib(elementArray[i],'class',style_class)}tinyMCE.linkElement=elementArray[0]}if(tinyMCE.linkElement){var mhref=href;href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(tinyMCE.linkElement,'href',href);tinyMCE.setAttrib(tinyMCE.linkElement,'mce_href',mhref);tinyMCE.setAttrib(tinyMCE.linkElement,'target',target);tinyMCE.setAttrib(tinyMCE.linkElement,'title',title);tinyMCE.setAttrib(tinyMCE.linkElement,'onclick',onclick);tinyMCE.setAttrib(tinyMCE.linkElement,'class',style_class)}tinyMCE.execCommand('mceEndUndoLevel')}};tinyMCE.addTheme("advanced",TinyMCE_AdvancedTheme);tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
\ No newline at end of file
+tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_AdvancedTheme={_defColors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",_autoImportCSSClasses:true,_resizer:{},_buttons:[['bold','{$lang_bold_img}','lang_bold_desc','Bold'],['italic','{$lang_italic_img}','lang_italic_desc','Italic'],['underline','{$lang_underline_img}','lang_underline_desc','Underline'],['strikethrough','strikethrough.gif','lang_striketrough_desc','Strikethrough'],['justifyleft','justifyleft.gif','lang_justifyleft_desc','JustifyLeft'],['justifycenter','justifycenter.gif','lang_justifycenter_desc','JustifyCenter'],['justifyright','justifyright.gif','lang_justifyright_desc','JustifyRight'],['justifyfull','justifyfull.gif','lang_justifyfull_desc','JustifyFull'],['bullist','bullist.gif','lang_bullist_desc','InsertUnorderedList'],['numlist','numlist.gif','lang_numlist_desc','InsertOrderedList'],['outdent','outdent.gif','lang_outdent_desc','Outdent'],['indent','indent.gif','lang_indent_desc','Indent'],['cut','cut.gif','lang_cut_desc','Cut'],['copy','copy.gif','lang_copy_desc','Copy'],['paste','paste.gif','lang_paste_desc','Paste'],['undo','undo.gif','lang_undo_desc','Undo'],['redo','redo.gif','lang_redo_desc','Redo'],['link','link.gif','lang_link_desc','mceLink',true],['unlink','unlink.gif','lang_unlink_desc','unlink'],['image','image.gif','lang_image_desc','mceImage',true],['cleanup','cleanup.gif','lang_cleanup_desc','mceCleanup'],['help','help.gif','lang_help_desc','mceHelp'],['code','code.gif','lang_theme_code_desc','mceCodeEditor'],['hr','hr.gif','lang_theme_hr_desc','inserthorizontalrule'],['removeformat','removeformat.gif','lang_theme_removeformat_desc','removeformat'],['sub','sub.gif','lang_theme_sub_desc','subscript'],['sup','sup.gif','lang_theme_sup_desc','superscript'],['forecolor','forecolor.gif','lang_theme_forecolor_desc','forecolor',true],['forecolorpicker','forecolor.gif','lang_theme_forecolor_desc','forecolorpicker',true],['backcolor','backcolor.gif','lang_theme_backcolor_desc','HiliteColor',true],['backcolorpicker','backcolor.gif','lang_theme_backcolor_desc','backcolorpicker',true],['charmap','charmap.gif','lang_theme_charmap_desc','mceCharMap'],['visualaid','visualaid.gif','lang_theme_visualaid_desc','mceToggleVisualAid'],['anchor','anchor.gif','lang_theme_anchor_desc','mceInsertAnchor'],['newdocument','newdocument.gif','lang_newdocument_desc','mceNewDocument']],_buttonMap:'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',getControlHTML:function(button_name){var i,x,but;for(i=0;i<TinyMCE_AdvancedTheme._buttons.length;i++){but=TinyMCE_AdvancedTheme._buttons[i];if(but[0]==button_name&&(button_name=="forecolor"||button_name=="backcolor"))return tinyMCE.getMenuButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3]+"Menu",but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null));if(but[0]==button_name)return tinyMCE.getButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null))}switch(button_name){case"formatselect":var html='<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';var formats=tinyMCE.getParam("theme_advanced_blockformats","p,address,pre,h1,h2,h3,h4,h5,h6",true).split(',');var lookup=[['p','{$lang_theme_paragraph}'],['address','{$lang_theme_address}'],['pre','{$lang_theme_pre}'],['h1','{$lang_theme_h1}'],['h2','{$lang_theme_h2}'],['h3','{$lang_theme_h3}'],['h4','{$lang_theme_h4}'],['h5','{$lang_theme_h5}'],['h6','{$lang_theme_h6}'],['div','{$lang_theme_div}'],['blockquote','{$lang_theme_blockquote}'],['code','{$lang_theme_code}'],['dt','{$lang_theme_dt}'],['dd','{$lang_theme_dd}'],['samp','{$lang_theme_samp}']];html+='<option value="">{$lang_theme_block}</option>';for(var i=0;i<formats.length;i++){for(var x=0;x<lookup.length;x++){if(formats[i]==lookup[x][0])html+='<option value="<'+lookup[x][0]+'>">'+lookup[x][1]+'</option>'}}html+='</select>';return html;case"styleselect":return'<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';case"fontselect":var fontHTML='<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';var iFonts='Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';var nFonts='Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';var fonts=tinyMCE.getParam("theme_advanced_fonts",nFonts).split(';');for(i=0;i<fonts.length;i++){if(fonts[i]!=''){var parts=fonts[i].split('=');fontHTML+='<option value="'+parts[1]+'">'+parts[0]+'</option>'}}fontHTML+='</select>';return fontHTML;case"fontsizeselect":return'<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+'<option value="0">{$lang_theme_font_size}</option>'+'<option value="1">1 (8 pt)</option>'+'<option value="2">2 (10 pt)</option>'+'<option value="3">3 (12 pt)</option>'+'<option value="4">4 (14 pt)</option>'+'<option value="5">5 (18 pt)</option>'+'<option value="6">6 (24 pt)</option>'+'<option value="7">7 (36 pt)</option>'+'</select>';case"|":case"separator":return'<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';case"spacer":return'<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';case"rowseparator":return'<br />'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case'mceHelp':tinyMCE.openWindow({file:'about.htm',width:480,height:380},{tinymce_version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion,tinymce_releasedate:tinyMCE.releaseDate,inline:"yes"});return true;case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);")}action="update"}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class'])}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"})}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h)}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:""}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);")}action="update"}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout'])}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"forecolor":var fcp=new TinyMCE_Layer(editor_id+'_fcPreview',false),p,img,elm;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!fcp.exists()){fcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=fcp.getElement();elm._editor_id=editor_id;elm._command="forecolor";elm._switchId=editor_id+"_forecolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_forecolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));fcp.moveTo(p.absLeft,p.absTop);fcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).foreColor;fcp.show();return false;case"forecolorpicker":this._pickColor(editor_id,'forecolor');return true;case"forecolorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_fcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_text_colors','forecolor'));tinyMCE.switchClass(editor_id+'_forecolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_forecolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"HiliteColor":var bcp=new TinyMCE_Layer(editor_id+'_bcPreview',false),p,img;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!bcp.exists()){bcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=bcp.getElement();elm._editor_id=editor_id;elm._command="HiliteColor";elm._switchId=editor_id+"_backcolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_backcolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));bcp.moveTo(p.absLeft,p.absTop);bcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).backColor;bcp.show();return false;case"HiliteColorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_bcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_background_colors','HiliteColor'));tinyMCE.switchClass(editor_id+'_backcolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_backcolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"backcolorpicker":this._pickColor(editor_id,'HiliteColor');return true;case"mceColorPicker":if(user_interface){var template=[];if(!value['callback']&&!value['color'])value['color']=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=380;template['height']=250;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:value['color']})}else{var savedVal=tinyMCE.lastColorPickerValue,elm;if(savedVal['callback']){savedVal['callback'](value);return true}elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();')}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true}return false},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array(),skip;for(var i=0;i<in_array.length;i++){skip=false;for(var j=0;j<remove_array.length;j++){if(in_array[i]==remove_array[j]){skip=true}}if(!skip){outArray[outArray.length]=in_array[i]}}return outArray}function addToArray(in_array,add_array){for(var i=0;i<add_array.length;i++){in_array[in_array.length]=add_array[i]}return in_array}var template=new Array();var deltaHeight=0;var resizing=tinyMCE.getParam("theme_advanced_resizing",false);var path=tinyMCE.getParam("theme_advanced_path",true);var statusbarHTML='<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: '+(path?"block":"none")+'"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: '+(resizing?"block":"none")+'" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='<option value="">{$lang_theme_style_select}</option>';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i<stylesAr.length;i++){var key,value;key=stylesAr[i].split('=')[0];value=stylesAr[i].split('=')[1];styleSelectHTML+='<option value="'+value+'">'+key+'</option>'}TinyMCE_AdvancedTheme._autoImportCSSClasses=false}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='<a href="#" accesskey="q" title="'+tinyMCE.getLang("lang_toolbar_focus")+'"';if(!tinyMCE.getParam("accessibility_focus"))toolbarHTML+=' onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"';toolbarHTML+='></a>';for(var i=1;i<100;i++){var def=defVals["theme_advanced_buttons"+i];var buttons=tinyMCE.getParam("theme_advanced_buttons"+i,def==null?'':def,true,',');if(buttons.length==0)break;buttons=removeFromArray(buttons,tinyMCE.getParam("theme_advanced_disable","",true,','));buttons=addToArray(buttons,tinyMCE.getParam("theme_advanced_buttons"+i+"_add","",true,','));buttons=addToArray(tinyMCE.getParam("theme_advanced_buttons"+i+"_add_before","",true,','),buttons);for(var b=0;b<buttons.length;b++)toolbarHTML+=tinyMCE.getControlHTML(buttons[b]);if(buttons.length>0){toolbarHTML+="<br />";deltaHeight-=23}}toolbarHTML+='<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"></a>';template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';if(toolbarLocation=="top")template['html']+='<tr><td dir="ltr" class="mceToolbarTop" align="'+toolbarAlign+'" height="1" nowrap="nowrap"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(statusbarLocation=="top"){template['html']+='<tr><td class="mceStatusbarTop" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';if(toolbarLocation=="bottom")template['html']+='<tr><td dir="ltr" class="mceToolbarBottom" align="'+toolbarAlign+'" height="1"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null}if(statusbarLocation=="bottom"){template['html']+='<tr><td class="mceStatusbarBottom" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='</tbody></table>';break;case"RowLayout":template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i<containers.length;i++){if(containers[i]=="mceEditor")template['html']+='<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom"}else if(i==0){pathClass="mceStatusbar"}else{deltaHeight-=2}template['html']+='<tr><td class="'+pathClass+'" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=22}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);curContainer=removeFromArray(curContainer,tinyMCE.getParam("theme_advanced_disable","",true,','));for(var j=0;j<curContainer.length;j++)curContainerHTML+=tinyMCE.getControlHTML(curContainer[j]);if(curContainer.length>0){curContainerHTML+="<br />";deltaHeight-=23}template['html']+='<tr><td class="'+curCSS+'" align="'+curAlign+'" height="1">'+curContainerHTML+'</td></tr>'}}template['html']+='</tbody></table>';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);")}break}if(resizing)template['html']+='<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);if(!template['delta_width'])template['delta_width']=0;if(!template['delta_height'])template['delta_height']=deltaHeight;return template},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true))}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink')},removeInstance:function(inst){new TinyMCE_Layer(inst.editorId+'_fcMenu').remove();new TinyMCE_Layer(inst.editorId+'_bcMenu').remove()},hideInstance:function(inst){TinyMCE_AdvancedTheme._hideMenus(inst.editorId)},_handleMenuEvent:function(e){var te=tinyMCE.isMSIE?window.event.srcElement:e.target;tinyMCE._menuButtonEvent(e.type=="mouseover"?"over":"out",document.getElementById(te._switchId));if(e.type=="click")tinyMCE.execInstanceCommand(te._editor_id,te._command)},_hideMenus:function(id){var fcml=new TinyMCE_Layer(id+'_fcMenu'),bcml=new TinyMCE_Layer(id+'_bcMenu');if(fcml.exists()&&fcml.isVisible()){tinyMCE.switchClass(id+'_forecolor','mceMenuButton');fcml.hide()}if(bcml.exists()&&bcml.isVisible()){tinyMCE.switchClass(id+'_backcolor','mceMenuButton');bcml.hide()}},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){var alignNode,breakOut,classNode;function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i<select_elm.options.length;i++){var ov=""+select_elm.options[i].value;if(first_index&&ov.toLowerCase().indexOf(value.toLowerCase())==0){select_elm.selectedIndex=i;return true}if(ov==value){select_elm.selectedIndex=i;return true}}}return false};if(node==null)return;var pathElm=document.getElementById(editor_id+"_path");var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();TinyMCE_AdvancedTheme._hideMenus(editor_id);if(pathElm){var parentNode=node;var path=new Array();while(parentNode!=null){if(parentNode.nodeName.toUpperCase()=="BODY"){break}if(parentNode.nodeType==1&&tinyMCE.getAttrib(parentNode,"class").indexOf('mceItemHidden')==-1){path[path.length]=parentNode}parentNode=parentNode.parentNode}var html="";for(var i=path.length-1;i>=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName.indexOf("html:")==0)nodeName=nodeName.substring(5);if(nodeName=="b"){nodeName="strong"}if(nodeName=="i"){nodeName="em"}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+tinyMCE.xmlEncode(st)+" "}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+tinyMCE.xmlEncode(face)+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+tinyMCE.xmlEncode(size)+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+tinyMCE.xmlEncode(color)+" "}if(tinyMCE.getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" "}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(tinyMCE.getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+tinyMCE.xmlEncode(src)+" "}if(path[i].nodeName=='A'&&tinyMCE.getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+tinyMCE.xmlEncode(href)+" "}className=tinyMCE.getAttrib(path[i],"class");if((nodeName=="img"||nodeName=="span")&&className.indexOf('mceItem')!=-1){nodeName=className.replace(/mceItem([a-z]+)/gi,'$1').toLowerCase();nodeData=path[i].getAttribute('title')}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+tinyMCE.xmlEncode(anchor);nodeData=""}if(tinyMCE.getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+='<a title="'+nodeData+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" target="_self" class="mcePathItem">'+nodeName+'</a>';if(i>0){html+=" » "}}pathElm.innerHTML='<a href="#" accesskey="x"></a>'+tinyMCE.getLang('lang_theme_path')+": "+html+' '}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal')}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled')}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index<undo_levels-1&&undo_levels>0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i<selectElm.options.length;i++){if(selectElm.options[i].value==classNode.className){index=i;breakOut=true;break}}}}while(!breakOut&&classNode!=null&&(classNode=classNode.parentNode)!=null);selectElm.selectedIndex=index}var selectElm=document.getElementById(editor_id+"_formatSelect");if(selectElm){var elm=tinyMCE.getParentElement(node,"p,div,h1,h2,h3,h4,h5,h6,pre,address");if(elm)selectByValue(selectElm,"<"+elm.nodeName.toLowerCase()+">");else selectByValue(selectElm,"")}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="")}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"")}else selectByValue(selectElm,"")}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size)}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i<sizes.length;i++){if((''+sizes[i])==size){size=i;break}}}if(!selectByValue(selectElm,size))selectByValue(selectElm,"")}else selectByValue(selectElm,"0")}}alignNode=node;breakOut=false;do{if(!alignNode.getAttribute||!alignNode.getAttribute('align'))continue;switch(alignNode.getAttribute('align').toLowerCase()){case"left":tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonSelected');breakOut=true;break;case"right":tinyMCE.switchClass(editor_id+'_justifyright','mceButtonSelected');breakOut=true;break;case"middle":case"center":tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');breakOut=true;break;case"justify":tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonSelected');breakOut=true;break}}while(!breakOut&&(alignNode=alignNode.parentNode)!=null);var div=tinyMCE.getParentElement(node,"div");if(div&&div.style.textAlign=="center")tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');if(!setup_content){var ar=new Array("Bold","_bold","Italic","_italic","Strikethrough","_strikethrough","superscript","_sup","subscript","_sub");for(var i=0;i<ar.length;i+=2){if(inst.queryCommandState(ar[i]))tinyMCE.switchClass(editor_id+ar[i+1],'mceButtonSelected')}if(inst.queryCommandState("Underline")&&(node.parentNode==null||node.parentNode.nodeName!="A"))tinyMCE.switchClass(editor_id+'_underline','mceButtonSelected')}do{switch(node.nodeName){case"UL":tinyMCE.switchClass(editor_id+'_bullist','mceButtonSelected');break;case"OL":tinyMCE.switchClass(editor_id+'_numlist','mceButtonSelected');break;case"HR":tinyMCE.switchClass(editor_id+'_hr','mceButtonSelected');break;case"IMG":if(tinyMCE.getAttrib(node,'name').indexOf('mce_')!=0&&tinyMCE.getAttrib(node,'class').indexOf('mceItem')==-1){tinyMCE.switchClass(editor_id+'_image','mceButtonSelected')}break}}while((node=node.parentNode)!=null)},_setupCSSClasses:function(editor_id){var i,selectElm;if(!TinyMCE_AdvancedTheme._autoImportCSSClasses)return;selectElm=document.getElementById(editor_id+'_styleSelect');if(selectElm&&selectElm.getAttribute('cssImported')!='true'){var csses=tinyMCE.getCSSClasses(editor_id);if(csses&&selectElm){for(i=0;i<csses.length;i++)selectElm.options[selectElm.options.length]=new Option(csses[i],csses[i])}if(csses!=null&&csses.length>0)selectElm.setAttribute('cssImported','true')}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie},_getCookie:function(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))},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth<minIframeWidth){dx=minIframeWidth-inst.iframeElement.clientWidth;inst.iframeElement.style.width=(iw+dx)+"px"}}inst.useCSS=false},_resizeEventHandler:function(e){var resizer=TinyMCE_AdvancedTheme._resizer;if(!resizer.resizing)return;e=typeof(e)=="undefined"?window.event:e;var dx=e.screenX-resizer.downX;var dy=e.screenY-resizer.downY;var resizeBox=resizer.resizeBox;var editorId=resizer.editorId;switch(e.type){case"mousemove":var w,h;w=resizer.width+dx;h=resizer.height+dy;w=w<1?1:w;h=h<1?1:h;if(resizer.horizontal)resizeBox.style.width=w+"px";resizeBox.style.height=h+"px";break;case"mouseup":TinyMCE_AdvancedTheme._setResizing(e,editorId,false);TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId),resizer.width+dx,resizer.height+dy,resizer.horizontal);if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var expires=new Date();expires.setTime(expires.getTime()+3600000*24*30);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_width",""+(resizer.horizontal?resizer.width+dx:""),expires);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_height",""+(resizer.height+dy),expires)}break}},_setResizing:function(e,editor_id,state){e=typeof(e)=="undefined"?window.event:e;var resizer=TinyMCE_AdvancedTheme._resizer;var editorContainer=document.getElementById(editor_id+'_parent');var editorArea=document.getElementById(editor_id+'_parent').firstChild;var resizeBox=document.getElementById(editor_id+'_resize_box');var inst=tinyMCE.getInstanceById(editor_id);if(state){var width=editorArea.clientWidth;var height=editorArea.clientHeight;resizeBox.style.width=width+"px";resizeBox.style.height=height+"px";resizer.iframeWidth=inst.iframeElement.clientWidth;resizer.iframeHeight=inst.iframeElement.clientHeight;editorArea.style.display="none";resizeBox.style.display="block";if(!resizer.eventHandlers){if(tinyMCE.isMSIE)tinyMCE.addEvent(document,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);else tinyMCE.addEvent(window,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);tinyMCE.addEvent(document,"mouseup",TinyMCE_AdvancedTheme._resizeEventHandler);resizer.eventHandlers=true}resizer.resizing=true;resizer.downX=e.screenX;resizer.downY=e.screenY;resizer.width=parseInt(resizeBox.style.width);resizer.height=parseInt(resizeBox.style.height);resizer.editorId=editor_id;resizer.resizeBox=resizeBox;resizer.horizontal=tinyMCE.getParam("theme_advanced_resize_horizontal",true)}else{resizer.resizing=false;resizeBox.style.display="none";editorArea.style.display=tinyMCE.isMSIE&&!tinyMCE.isOpera?"block":"table";tinyMCE.execCommand('mceResetDesignMode')}},_getColorHTML:function(id,n,cm){var i,h,cl;h='<span class="mceMenuLine"></span>';cl=tinyMCE.getParam(n,TinyMCE_AdvancedTheme._defColors).split(',');h+='<table class="mceColors"><tr>';for(i=0;i<cl.length;i++){c='tinyMCE.execInstanceCommand(\''+id+'\', \''+cm+'\', false, \'#'+cl[i]+'\');';h+='<td><a href="javascript:'+c+'" style="background-color: #'+cl[i]+'" onclick="'+c+';return false;"></a></td>';if((i+1)%8==0)h+='</tr><tr>'}h+='</tr></table>';if(tinyMCE.getParam("theme_advanced_more_colors",true))h+='<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\''+id+'\',\''+cm+'\');" class="mceMoreColors">'+tinyMCE.getLang('lang_more_colors')+'</a>';return h},_pickColor:function(id,cm){var inputColor,inst=tinyMCE.selectedInstance;if(cm=='forecolor'&&inst)inputColor=inst.foreColor;if((cm=='backcolor'||cm=='HiliteColor')&&inst)inputColor=inst.backColor;tinyMCE.execCommand('mceColorPicker',true,{color:inputColor,callback:function(c){tinyMCE.execInstanceCommand(id,cm,false,c)}})},_insertImage:function(src,alt,border,hspace,vspace,width,height,align,title,onmouseover,onmouseout){tinyMCE.execCommand("mceInsertContent",false,tinyMCE.createTagHTML('img',{src:tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],src),mce_src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout}))},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement)}return}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,'<a href="'+tinyMCE.uniqueURL+'">'+tinyMCE.selectedInstance.selection.getSelectedHTML()+'</a>')}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i<elementArray.length;i++){var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, elementArray[i]);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(elementArray[i],'href',thref);tinyMCE.setAttrib(elementArray[i],'mce_href',mhref);tinyMCE.setAttrib(elementArray[i],'target',target);tinyMCE.setAttrib(elementArray[i],'title',title);tinyMCE.setAttrib(elementArray[i],'onclick',onclick);tinyMCE.setAttrib(elementArray[i],'class',style_class)}tinyMCE.linkElement=elementArray[0]}if(tinyMCE.linkElement){var mhref=href;href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(tinyMCE.linkElement,'href',href);tinyMCE.setAttrib(tinyMCE.linkElement,'mce_href',mhref);tinyMCE.setAttrib(tinyMCE.linkElement,'target',target);tinyMCE.setAttrib(tinyMCE.linkElement,'title',title);tinyMCE.setAttrib(tinyMCE.linkElement,'onclick',onclick);tinyMCE.setAttrib(tinyMCE.linkElement,'class',style_class)}tinyMCE.execCommand('mceEndUndoLevel')}};tinyMCE.addTheme("advanced",TinyMCE_AdvancedTheme);tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
\ No newline at end of file
-/**\r
- * $Id: editor_template_src.js 256 2007-04-24 09:03:20Z spocke $\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-/* Import theme specific language pack */\r
-tinyMCE.importThemeLanguagePack('advanced');\r
-\r
-var TinyMCE_AdvancedTheme = {\r
- // Private theme fields\r
- _defColors : "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",\r
- _autoImportCSSClasses : true,\r
- _resizer : {},\r
- _buttons : [\r
- // Control id, button img, button title, command, user_interface, value\r
- ['bold', '{$lang_bold_img}', 'lang_bold_desc', 'Bold'],\r
- ['italic', '{$lang_italic_img}', 'lang_italic_desc', 'Italic'],\r
- ['underline', '{$lang_underline_img}', 'lang_underline_desc', 'Underline'],\r
- ['strikethrough', 'strikethrough.gif', 'lang_striketrough_desc', 'Strikethrough'],\r
- ['justifyleft', 'justifyleft.gif', 'lang_justifyleft_desc', 'JustifyLeft'],\r
- ['justifycenter', 'justifycenter.gif', 'lang_justifycenter_desc', 'JustifyCenter'],\r
- ['justifyright', 'justifyright.gif', 'lang_justifyright_desc', 'JustifyRight'],\r
- ['justifyfull', 'justifyfull.gif', 'lang_justifyfull_desc', 'JustifyFull'],\r
- ['bullist', 'bullist.gif', 'lang_bullist_desc', 'InsertUnorderedList'],\r
- ['numlist', 'numlist.gif', 'lang_numlist_desc', 'InsertOrderedList'],\r
- ['outdent', 'outdent.gif', 'lang_outdent_desc', 'Outdent'],\r
- ['indent', 'indent.gif', 'lang_indent_desc', 'Indent'],\r
- ['cut', 'cut.gif', 'lang_cut_desc', 'Cut'],\r
- ['copy', 'copy.gif', 'lang_copy_desc', 'Copy'],\r
- ['paste', 'paste.gif', 'lang_paste_desc', 'Paste'],\r
- ['undo', 'undo.gif', 'lang_undo_desc', 'Undo'],\r
- ['redo', 'redo.gif', 'lang_redo_desc', 'Redo'],\r
- ['link', 'link.gif', 'lang_link_desc', 'mceLink', true],\r
- ['unlink', 'unlink.gif', 'lang_unlink_desc', 'unlink'],\r
- ['image', 'image.gif', 'lang_image_desc', 'mceImage', true],\r
- ['cleanup', 'cleanup.gif', 'lang_cleanup_desc', 'mceCleanup'],\r
- ['help', 'help.gif', 'lang_help_desc', 'mceHelp'],\r
- ['code', 'code.gif', 'lang_theme_code_desc', 'mceCodeEditor'],\r
- ['hr', 'hr.gif', 'lang_theme_hr_desc', 'inserthorizontalrule'],\r
- ['removeformat', 'removeformat.gif', 'lang_theme_removeformat_desc', 'removeformat'],\r
- ['sub', 'sub.gif', 'lang_theme_sub_desc', 'subscript'],\r
- ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'],\r
- ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true],\r
- ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true],\r
- ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true],\r
- ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true],\r
- ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'],\r
- ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'],\r
- ['anchor', 'anchor.gif', 'lang_theme_anchor_desc', 'mceInsertAnchor'],\r
- ['newdocument', 'newdocument.gif', 'lang_newdocument_desc', 'mceNewDocument']\r
- ],\r
-\r
- _buttonMap : 'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',\r
-\r
- /**\r
- * Returns HTML code for the specificed control.\r
- */\r
- getControlHTML : function(button_name) {\r
- var i, x, but;\r
-\r
- // Lookup button in button list\r
- for (i=0; i<TinyMCE_AdvancedTheme._buttons.length; i++) {\r
- but = TinyMCE_AdvancedTheme._buttons[i];\r
-\r
- if (but[0] == button_name && (button_name == "forecolor" || button_name == "backcolor"))\r
- return tinyMCE.getMenuButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3] + "Menu", but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));\r
-\r
- if (but[0] == button_name)\r
- return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));\r
- }\r
-\r
- // Custom controlls other than buttons\r
- switch (button_name) {\r
- case "formatselect":\r
- var html = '<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';\r
- var formats = tinyMCE.getParam("theme_advanced_blockformats", "p,address,pre,h1,h2,h3,h4,h5,h6", true).split(',');\r
- var lookup = [\r
- ['p', '{$lang_theme_paragraph}'],\r
- ['address', '{$lang_theme_address}'],\r
- ['pre', '{$lang_theme_pre}'],\r
- ['h1', '{$lang_theme_h1}'],\r
- ['h2', '{$lang_theme_h2}'],\r
- ['h3', '{$lang_theme_h3}'],\r
- ['h4', '{$lang_theme_h4}'],\r
- ['h5', '{$lang_theme_h5}'],\r
- ['h6', '{$lang_theme_h6}'],\r
- ['div', '{$lang_theme_div}'],\r
- ['blockquote', '{$lang_theme_blockquote}'],\r
- ['code', '{$lang_theme_code}'],\r
- ['dt', '{$lang_theme_dt}'],\r
- ['dd', '{$lang_theme_dd}'],\r
- ['samp', '{$lang_theme_samp}']\r
- ];\r
-\r
- html += '<option value="">{$lang_theme_block}</option>';\r
-\r
- // Build format select\r
- for (var i=0; i<formats.length; i++) {\r
- for (var x=0; x<lookup.length; x++) {\r
- if (formats[i] == lookup[x][0])\r
- html += '<option value="<' + lookup[x][0] + '>">' + lookup[x][1] + '</option>';\r
- }\r
- }\r
-\r
- html += '</select>';\r
-\r
- return html;\r
-\r
- case "styleselect":\r
- return '<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';\r
-\r
- case "fontselect":\r
- var fontHTML = '<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';\r
- var iFonts = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';\r
- var nFonts = 'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sand;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';\r
- var fonts = tinyMCE.getParam("theme_advanced_fonts", nFonts).split(';');\r
- for (i=0; i<fonts.length; i++) {\r
- if (fonts[i] != '') {\r
- var parts = fonts[i].split('=');\r
- fontHTML += '<option value="' + parts[1] + '">' + parts[0] + '</option>';\r
- }\r
- }\r
-\r
- fontHTML += '</select>';\r
- return fontHTML;\r
-\r
- case "fontsizeselect":\r
- return '<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+\r
- '<option value="0">{$lang_theme_font_size}</option>'+\r
- '<option value="1">1 (8 pt)</option>'+\r
- '<option value="2">2 (10 pt)</option>'+\r
- '<option value="3">3 (12 pt)</option>'+\r
- '<option value="4">4 (14 pt)</option>'+\r
- '<option value="5">5 (18 pt)</option>'+\r
- '<option value="6">6 (24 pt)</option>'+\r
- '<option value="7">7 (36 pt)</option>'+\r
- '</select>';\r
-\r
- case "|":\r
- case "separator":\r
- return '<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';\r
-\r
- case "spacer":\r
- return '<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';\r
-\r
- case "rowseparator":\r
- return '<br />';\r
- }\r
-\r
- return "";\r
- },\r
-\r
- /**\r
- * Theme specific execcommand handling.\r
- */\r
- execCommand : function(editor_id, element, command, user_interface, value) {\r
- switch (command) {\r
- case 'mceHelp':\r
- tinyMCE.openWindow({\r
- file : 'about.htm',\r
- width : 480,\r
- height : 380\r
- }, {\r
- tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion,\r
- tinymce_releasedate : tinyMCE.releaseDate,\r
- inline : "yes"\r
- });\r
- return true;\r
-\r
- case "mceLink":\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
- var doc = inst.getDoc();\r
- var selectedText = "";\r
-\r
- if (tinyMCE.isMSIE) {\r
- var rng = doc.selection.createRange();\r
- selectedText = rng.text;\r
- } else\r
- selectedText = inst.getSel().toString();\r
-\r
- if (!tinyMCE.linkElement) {\r
- if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0))\r
- return true;\r
- }\r
-\r
- var href = "", target = "", title = "", onclick = "", action = "insert", style_class = "";\r
-\r
- if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a")\r
- tinyMCE.linkElement = tinyMCE.selectedElement;\r
-\r
- // Is anchor not a link\r
- if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "")\r
- tinyMCE.linkElement = null;\r
-\r
- if (tinyMCE.linkElement) {\r
- href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href');\r
- target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target');\r
- title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title');\r
- onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');\r
- style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class');\r
-\r
- // Try old onclick to if copy/pasted content\r
- if (onclick == "")\r
- onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');\r
-\r
- onclick = tinyMCE.cleanupEventStr(onclick);\r
-\r
- href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");\r
-\r
- // Use mce_href if defined\r
- mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href');\r
- if (mceRealHref != "") {\r
- href = mceRealHref;\r
-\r
- if (tinyMCE.getParam('convert_urls'))\r
- href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");\r
- }\r
-\r
- action = "update";\r
- }\r
-\r
- var template = new Array();\r
-\r
- template['file'] = 'link.htm';\r
- template['width'] = 310;\r
- template['height'] = 200;\r
-\r
- // Language specific width and height addons\r
- template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0);\r
-\r
- if (inst.settings['insertlink_callback']) {\r
- var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);");\r
- if (returnVal && returnVal['href'])\r
- TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']);\r
- } else {\r
- tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"});\r
- }\r
-\r
- return true;\r
-\r
- case "mceImage":\r
- var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = "";\r
- var title = "", onmouseover = "", onmouseout = "", action = "insert";\r
- var img = tinyMCE.imgElement;\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
-\r
- if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {\r
- img = tinyMCE.selectedElement;\r
- tinyMCE.imgElement = img;\r
- }\r
-\r
- if (img) {\r
- // Is it a internal MCE visual aid image, then skip this one.\r
- if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0)\r
- return true;\r
-\r
- src = tinyMCE.getAttrib(img, 'src');\r
- alt = tinyMCE.getAttrib(img, 'alt');\r
-\r
- // Try polling out the title\r
- if (alt == "")\r
- alt = tinyMCE.getAttrib(img, 'title');\r
-\r
- // Fix width/height attributes if the styles is specified\r
- if (tinyMCE.isGecko) {\r
- var w = img.style.width;\r
- if (w != null && w != "")\r
- img.setAttribute("width", w);\r
-\r
- var h = img.style.height;\r
- if (h != null && h != "")\r
- img.setAttribute("height", h);\r
- }\r
-\r
- border = tinyMCE.getAttrib(img, 'border');\r
- hspace = tinyMCE.getAttrib(img, 'hspace');\r
- vspace = tinyMCE.getAttrib(img, 'vspace');\r
- width = tinyMCE.getAttrib(img, 'width');\r
- height = tinyMCE.getAttrib(img, 'height');\r
- align = tinyMCE.getAttrib(img, 'align');\r
- onmouseover = tinyMCE.getAttrib(img, 'onmouseover');\r
- onmouseout = tinyMCE.getAttrib(img, 'onmouseout');\r
- title = tinyMCE.getAttrib(img, 'title');\r
-\r
- // Is realy specified?\r
- if (tinyMCE.isMSIE) {\r
- width = img.attributes['width'].specified ? width : "";\r
- height = img.attributes['height'].specified ? height : "";\r
- }\r
-\r
- //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover));\r
- //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout));\r
-\r
- src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");\r
-\r
- // Use mce_src if defined\r
- mceRealSrc = tinyMCE.getAttrib(img, 'mce_src');\r
- if (mceRealSrc != "") {\r
- src = mceRealSrc;\r
-\r
- if (tinyMCE.getParam('convert_urls'))\r
- src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");\r
- }\r
-\r
- //if (onmouseover != "")\r
- // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);");\r
-\r
- //if (onmouseout != "")\r
- // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);");\r
-\r
- action = "update";\r
- }\r
-\r
- var template = new Array();\r
-\r
- template['file'] = 'image.htm?src={$src}';\r
- template['width'] = 355;\r
- template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0);\r
-\r
- // Language specific width and height addons\r
- template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0);\r
-\r
- if (inst.settings['insertimage_callback']) {\r
- var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");\r
- if (returnVal && returnVal['src'])\r
- TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']);\r
- } else\r
- tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"});\r
-\r
- return true;\r
-\r
- case "forecolor":\r
- var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm;\r
-\r
- TinyMCE_AdvancedTheme._hideMenus(editor_id);\r
-\r
- if (!fcp.exists()) {\r
- fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));\r
- elm = fcp.getElement();\r
- elm._editor_id = editor_id;\r
- elm._command = "forecolor";\r
- elm._switchId = editor_id + "_forecolor";\r
- tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);\r
- tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);\r
- tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);\r
- }\r
-\r
- img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0];\r
- p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));\r
-\r
- fcp.moveTo(p.absLeft, p.absTop);\r
- fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor;\r
- fcp.show();\r
-\r
- return false;\r
-\r
- case "forecolorpicker":\r
- this._pickColor(editor_id, 'forecolor');\r
- return true;\r
-\r
- case "forecolorMenu":\r
- TinyMCE_AdvancedTheme._hideMenus(editor_id);\r
-\r
- // Create color layer\r
- var ml = new TinyMCE_Layer(editor_id + '_fcMenu');\r
-\r
- if (!ml.exists())\r
- ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor'));\r
-\r
- tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus');\r
- ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl');\r
-\r
- ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);\r
-\r
- if (tinyMCE.isOpera)\r
- ml.moveBy(0, -2);\r
-\r
- ml.show();\r
- return true;\r
-\r
- case "HiliteColor":\r
- var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img;\r
-\r
- TinyMCE_AdvancedTheme._hideMenus(editor_id);\r
-\r
- if (!bcp.exists()) {\r
- bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));\r
- elm = bcp.getElement();\r
- elm._editor_id = editor_id;\r
- elm._command = "HiliteColor";\r
- elm._switchId = editor_id + "_backcolor";\r
- tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);\r
- tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);\r
- tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);\r
- }\r
-\r
- img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0];\r
- p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));\r
-\r
- bcp.moveTo(p.absLeft, p.absTop);\r
- bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor;\r
- bcp.show();\r
-\r
- return false;\r
-\r
- case "HiliteColorMenu":\r
- TinyMCE_AdvancedTheme._hideMenus(editor_id);\r
-\r
- // Create color layer\r
- var ml = new TinyMCE_Layer(editor_id + '_bcMenu');\r
-\r
- if (!ml.exists())\r
- ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor'));\r
-\r
- tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus');\r
- ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl');\r
-\r
- ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);\r
-\r
- if (tinyMCE.isOpera)\r
- ml.moveBy(0, -2);\r
-\r
- ml.show();\r
- return true;\r
- \r
- case "backcolorpicker":\r
- this._pickColor(editor_id, 'HiliteColor');\r
- return true;\r
-\r
- case "mceColorPicker":\r
- if (user_interface) {\r
- var template = [];\r
- \r
- if (!value['callback'] && !value['color'])\r
- value['color'] = value['document'].getElementById(value['element_id']).value;\r
-\r
- template['file'] = 'color_picker.htm';\r
- template['width'] = 380;\r
- template['height'] = 250;\r
- template['close_previous'] = "no";\r
-\r
- template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0);\r
-\r
- if (typeof(value['store_selection']) == "undefined")\r
- value['store_selection'] = true;\r
-\r
- tinyMCE.lastColorPickerValue = value;\r
- tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']});\r
- } else {\r
- var savedVal = tinyMCE.lastColorPickerValue, elm;\r
-\r
- if (savedVal['callback']) {\r
- savedVal['callback'](value);\r
- return true;\r
- }\r
-\r
- elm = savedVal['document'].getElementById(savedVal['element_id']);\r
- elm.value = value;\r
-\r
- if (elm.onchange != null && elm.onchange != '')\r
- eval('elm.onchange();');\r
- }\r
- return true;\r
-\r
- case "mceCodeEditor":\r
- var template = new Array();\r
-\r
- template['file'] = 'source_editor.htm';\r
- template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720));\r
- template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580));\r
-\r
- tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"});\r
- return true;\r
-\r
- case "mceCharMap":\r
- var template = new Array();\r
-\r
- template['file'] = 'charmap.htm';\r
- template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0);\r
- template['height'] = 250;\r
-\r
- template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0);\r
-\r
- tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});\r
- return true;\r
-\r
- case "mceInsertAnchor":\r
- var template = new Array();\r
-\r
- template['file'] = 'anchor.htm';\r
- template['width'] = 320;\r
- template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0);\r
-\r
- template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0);\r
-\r
- tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});\r
- return true;\r
-\r
- case "mceNewDocument":\r
- if (confirm(tinyMCE.getLang('lang_newdocument')))\r
- tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' ');\r
-\r
- return true;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- /**\r
- * Editor instance template function.\r
- */\r
- getEditorTemplate : function(settings, editorId) {\r
- function removeFromArray(in_array, remove_array) {\r
- var outArray = new Array(), skip;\r
- \r
- for (var i=0; i<in_array.length; i++) {\r
- skip = false;\r
-\r
- for (var j=0; j<remove_array.length; j++) {\r
- if (in_array[i] == remove_array[j]) {\r
- skip = true;\r
- }\r
- }\r
-\r
- if (!skip) {\r
- outArray[outArray.length] = in_array[i];\r
- }\r
- }\r
-\r
- return outArray;\r
- }\r
-\r
- function addToArray(in_array, add_array) {\r
- for (var i=0; i<add_array.length; i++) {\r
- in_array[in_array.length] = add_array[i];\r
- }\r
-\r
- return in_array;\r
- }\r
-\r
- var template = new Array();\r
- var deltaHeight = 0;\r
- var resizing = tinyMCE.getParam("theme_advanced_resizing", false);\r
- var path = tinyMCE.getParam("theme_advanced_path", true);\r
- var statusbarHTML = '<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: ' + (path ? "block" : "none") + '"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: ' + (resizing ? "block" : "none") + '" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';\r
- var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout");\r
-\r
- // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY!\r
- var styleSelectHTML = '<option value="">{$lang_theme_style_select}</option>';\r
- if (settings['theme_advanced_styles']) {\r
- var stylesAr = settings['theme_advanced_styles'].split(';');\r
- \r
- for (var i=0; i<stylesAr.length; i++) {\r
- var key, value;\r
-\r
- key = stylesAr[i].split('=')[0];\r
- value = stylesAr[i].split('=')[1];\r
-\r
- styleSelectHTML += '<option value="' + value + '">' + key + '</option>';\r
- }\r
-\r
- TinyMCE_AdvancedTheme._autoImportCSSClasses = false;\r
- }\r
-\r
- switch(layoutManager) {\r
- case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)...\r
- var toolbarHTML = "";\r
- var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom");\r
- var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center");\r
- var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity\r
- var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation);\r
- var defVals = {\r
- theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",\r
- theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",\r
- theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap"\r
- };\r
-\r
- // Add accessibility control\r
- toolbarHTML += '<a href="#" accesskey="q" title="' + tinyMCE.getLang("lang_toolbar_focus") + '"';\r
-\r
- if (!tinyMCE.getParam("accessibility_focus"))\r
- toolbarHTML += ' onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"';\r
-\r
- toolbarHTML += '></a>';\r
-\r
- // Render rows\r
- for (var i=1; i<100; i++) {\r
- var def = defVals["theme_advanced_buttons" + i];\r
-\r
- var buttons = tinyMCE.getParam("theme_advanced_buttons" + i, def == null ? '' : def, true, ',');\r
- if (buttons.length == 0)\r
- break;\r
-\r
- buttons = removeFromArray(buttons, tinyMCE.getParam("theme_advanced_disable", "", true, ','));\r
- buttons = addToArray(buttons, tinyMCE.getParam("theme_advanced_buttons" + i + "_add", "", true, ','));\r
- buttons = addToArray(tinyMCE.getParam("theme_advanced_buttons" + i + "_add_before", "", true, ','), buttons);\r
-\r
- for (var b=0; b<buttons.length; b++)\r
- toolbarHTML += tinyMCE.getControlHTML(buttons[b]);\r
-\r
- if (buttons.length > 0) {\r
- toolbarHTML += "<br />";\r
- deltaHeight -= 23;\r
- }\r
- }\r
-\r
- // Add accessibility control\r
- toolbarHTML += '<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"></a>';\r
-\r
- // Setup template html\r
- template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';\r
-\r
- if (toolbarLocation == "top")\r
- template['html'] += '<tr><td dir="ltr" class="mceToolbarTop" align="' + toolbarAlign + '" height="1" nowrap="nowrap"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';\r
-\r
- if (statusbarLocation == "top") {\r
- template['html'] += '<tr><td class="mceStatusbarTop" height="1">' + statusbarHTML + '</td></tr>';\r
- deltaHeight -= 23;\r
- }\r
-\r
- template['html'] += '<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';\r
-\r
- if (toolbarLocation == "bottom")\r
- template['html'] += '<tr><td dir="ltr" class="mceToolbarBottom" align="' + toolbarAlign + '" height="1"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';\r
-\r
- // External toolbar changes\r
- if (toolbarLocation == "external") {\r
- var bod = document.body;\r
- var elm = document.createElement ("div");\r
-\r
- toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML);\r
- toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId});\r
-\r
- elm.className = "mceToolbarExternal";\r
- elm.id = editorId+"_toolbar";\r
- elm.innerHTML = '<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';\r
- bod.appendChild (elm);\r
- // bod.style.marginTop = elm.offsetHeight + "px";\r
-\r
- deltaHeight = 0;\r
- tinyMCE.getInstanceById(editorId).toolbarElement = elm;\r
-\r
- //template['html'] = '<div id="mceExternalToolbar" align="center" class="mceToolbarExternal"><table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table></div>' + template["html"];\r
- } else {\r
- tinyMCE.getInstanceById(editorId).toolbarElement = null;\r
- }\r
-\r
- if (statusbarLocation == "bottom") {\r
- template['html'] += '<tr><td class="mceStatusbarBottom" height="1">' + statusbarHTML + '</td></tr>';\r
- deltaHeight -= 23;\r
- }\r
-\r
- template['html'] += '</tbody></table>';\r
- //"SimpleLayout"\r
- break;\r
-\r
- case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom.\r
- template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';\r
-\r
- var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ",");\r
- var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container");\r
- var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center");\r
-\r
- //Render Containers:\r
- for (var i = 0; i < containers.length; i++)\r
- {\r
- if (containers[i] == "mceEditor") //Exceptions for mceEditor and ...\r
- template['html'] += '<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';\r
- else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath:\r
- {\r
- var pathClass = "mceStatusbar";\r
-\r
- if (i == containers.length-1)\r
- {\r
- pathClass = "mceStatusbarBottom";\r
- }\r
- else if (i == 0)\r
- {\r
- pathClass = "mceStatusbar";\r
- }\r
- else\r
- {\r
- deltaHeight-=2;\r
- }\r
-\r
- template['html'] += '<tr><td class="' + pathClass + '" height="1">' + statusbarHTML + '</td></tr>';\r
- deltaHeight -= 22;\r
- } else { // Render normal Container\r
- var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ',');\r
- var curContainerHTML = "";\r
- var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign);\r
- var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS);\r
-\r
- curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ','));\r
-\r
- for (var j=0; j<curContainer.length; j++)\r
- curContainerHTML += tinyMCE.getControlHTML(curContainer[j]);\r
-\r
- if (curContainer.length > 0) {\r
- curContainerHTML += "<br />";\r
- deltaHeight -= 23;\r
- }\r
-\r
- template['html'] += '<tr><td class="' + curCSS + '" align="' + curAlign + '" height="1">' + curContainerHTML + '</td></tr>';\r
- }\r
- }\r
-\r
- template['html'] += '</tbody></table>';\r
- //RowLayout\r
- break;\r
-\r
- case "CustomLayout" : //User defined layout callback...\r
- var customLayout = tinyMCE.getParam("theme_advanced_custom_layout","");\r
-\r
- if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") {\r
- template = eval(customLayout + "(template);");\r
- }\r
- break;\r
- }\r
-\r
- if (resizing)\r
- template['html'] += '<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';\r
-\r
- template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML);\r
-\r
- // Set to default values\r
- if (!template['delta_width'])\r
- template['delta_width'] = 0;\r
-\r
- if (!template['delta_height'])\r
- template['delta_height'] = deltaHeight;\r
-\r
- return template;\r
- },\r
-\r
- initInstance : function(inst) {\r
- if (tinyMCE.getParam("theme_advanced_resizing", false)) {\r
- if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {\r
- var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width");\r
- var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height");\r
-\r
- TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true));\r
- }\r
- }\r
-\r
- inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink');\r
- },\r
-\r
- removeInstance : function(inst) {\r
- new TinyMCE_Layer(inst.editorId + '_fcMenu').remove();\r
- new TinyMCE_Layer(inst.editorId + '_bcMenu').remove();\r
- },\r
-\r
- hideInstance : function(inst) {\r
- TinyMCE_AdvancedTheme._hideMenus(inst.editorId);\r
- },\r
-\r
- _handleMenuEvent : function(e) {\r
- var te = tinyMCE.isMSIE ? window.event.srcElement : e.target;\r
- tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId));\r
-\r
- if (e.type == "click")\r
- tinyMCE.execInstanceCommand(te._editor_id, te._command);\r
- },\r
-\r
- _hideMenus : function(id) {\r
- var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu');\r
-\r
- if (fcml.exists() && fcml.isVisible()) {\r
- tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton');\r
- fcml.hide();\r
- }\r
-\r
- if (bcml.exists() && bcml.isVisible()) {\r
- tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton');\r
- bcml.hide();\r
- }\r
- },\r
-\r
- /**\r
- * Node change handler.\r
- */\r
- handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) {\r
- var alignNode, breakOut, classNode;\r
-\r
- function selectByValue(select_elm, value, first_index) {\r
- first_index = typeof(first_index) == "undefined" ? false : true;\r
-\r
- if (select_elm) {\r
- for (var i=0; i<select_elm.options.length; i++) {\r
- var ov = "" + select_elm.options[i].value;\r
-\r
- if (first_index && ov.toLowerCase().indexOf(value.toLowerCase()) == 0) {\r
- select_elm.selectedIndex = i;\r
- return true;\r
- }\r
-\r
- if (ov == value) {\r
- select_elm.selectedIndex = i;\r
- return true;\r
- }\r
- }\r
- }\r
-\r
- return false;\r
- };\r
-\r
- // No node provided\r
- if (node == null)\r
- return;\r
-\r
- // Update path\r
- var pathElm = document.getElementById(editor_id + "_path");\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
- var doc = inst.getDoc();\r
- TinyMCE_AdvancedTheme._hideMenus(editor_id);\r
-\r
- if (pathElm) {\r
- // Get node path\r
- var parentNode = node;\r
- var path = new Array();\r
- \r
- while (parentNode != null) {\r
- if (parentNode.nodeName.toUpperCase() == "BODY") {\r
- break;\r
- }\r
-\r
- // Only append element nodes to path\r
- if (parentNode.nodeType == 1 && tinyMCE.getAttrib(parentNode, "class").indexOf('mceItemHidden') == -1) {\r
- path[path.length] = parentNode;\r
- }\r
-\r
- parentNode = parentNode.parentNode;\r
- }\r
-\r
- // Setup HTML\r
- var html = "";\r
- for (var i=path.length-1; i>=0; i--) {\r
- var nodeName = path[i].nodeName.toLowerCase();\r
- var nodeData = "";\r
-\r
- if (nodeName.indexOf("html:") == 0)\r
- nodeName = nodeName.substring(5);\r
-\r
- if (nodeName == "b") {\r
- nodeName = "strong";\r
- }\r
-\r
- if (nodeName == "i") {\r
- nodeName = "em";\r
- }\r
-\r
- if (nodeName == "span") {\r
- var cn = tinyMCE.getAttrib(path[i], "class");\r
- if (cn != "" && cn.indexOf('mceItem') == -1)\r
- nodeData += "class: " + cn + " ";\r
-\r
- var st = tinyMCE.getAttrib(path[i], "style");\r
- if (st != "") {\r
- st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st));\r
- nodeData += "style: " + tinyMCE.xmlEncode(st) + " ";\r
- }\r
- }\r
-\r
- if (nodeName == "font") {\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- nodeName = "span";\r
-\r
- var face = tinyMCE.getAttrib(path[i], "face");\r
- if (face != "")\r
- nodeData += "font: " + tinyMCE.xmlEncode(face) + " ";\r
-\r
- var size = tinyMCE.getAttrib(path[i], "size");\r
- if (size != "")\r
- nodeData += "size: " + tinyMCE.xmlEncode(size) + " ";\r
-\r
- var color = tinyMCE.getAttrib(path[i], "color");\r
- if (color != "")\r
- nodeData += "color: " + tinyMCE.xmlEncode(color) + " ";\r
- }\r
-\r
- if (tinyMCE.getAttrib(path[i], 'id') != "") {\r
- nodeData += "id: " + path[i].getAttribute('id') + " ";\r
- }\r
-\r
- var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);\r
- if (className != "" && className.indexOf('mceItem') == -1)\r
- nodeData += "class: " + className + " ";\r
-\r
- if (tinyMCE.getAttrib(path[i], 'src') != "") {\r
- var src = tinyMCE.getAttrib(path[i], "mce_src");\r
-\r
- if (src == "")\r
- src = tinyMCE.getAttrib(path[i], "src");\r
-\r
- nodeData += "src: " + tinyMCE.xmlEncode(src) + " ";\r
- }\r
-\r
- if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") {\r
- var href = tinyMCE.getAttrib(path[i], "mce_href");\r
-\r
- if (href == "")\r
- href = tinyMCE.getAttrib(path[i], "href");\r
-\r
- nodeData += "href: " + tinyMCE.xmlEncode(href) + " ";\r
- }\r
-\r
- className = tinyMCE.getAttrib(path[i], "class");\r
- if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) {\r
- nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase();\r
- nodeData = path[i].getAttribute('title');\r
- }\r
-\r
- if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") {\r
- nodeName = "a";\r
- nodeName += "#" + tinyMCE.xmlEncode(anchor);\r
- nodeData = "";\r
- }\r
-\r
- if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) {\r
- var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);\r
- if (className != "" && className.indexOf('mceItem') == -1) {\r
- nodeName += "." + className;\r
- }\r
- }\r
-\r
- var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');';\r
- html += '<a title="' + nodeData + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" target="_self" class="mcePathItem">' + nodeName + '</a>';\r
-\r
- if (i > 0) {\r
- html += " » ";\r
- }\r
- }\r
-\r
- pathElm.innerHTML = '<a href="#" accesskey="x"></a>' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' ';\r
- }\r
-\r
- // Reset old states\r
- tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal');\r
-\r
- if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1)\r
- tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected');\r
-\r
- // Get link\r
- var anchorLink = tinyMCE.getParentElement(node, "a", "href");\r
-\r
- if (anchorLink || any_selection) {\r
- tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');\r
- }\r
-\r
- // Handle visual aid\r
- tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal');\r
-\r
- if (undo_levels != -1) {\r
- tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled');\r
- }\r
-\r
- // Within li, blockquote\r
- if (tinyMCE.getParentElement(node, "li,blockquote"))\r
- tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal');\r
-\r
- // Has redo levels\r
- if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0))\r
- tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal');\r
-\r
- // Has undo levels\r
- if (undo_index != -1 && (undo_index > 0 && undo_levels > 0))\r
- tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal');\r
-\r
- // Select class in select box\r
- var selectElm = document.getElementById(editor_id + "_styleSelect");\r
- \r
- if (selectElm) {\r
- TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);\r
-\r
- classNode = node;\r
- breakOut = false;\r
- var index = 0;\r
-\r
- do {\r
- if (classNode && classNode.className) {\r
- for (var i=0; i<selectElm.options.length; i++) {\r
- if (selectElm.options[i].value == classNode.className) {\r
- index = i;\r
- breakOut = true;\r
- break;\r
- }\r
- }\r
- }\r
- } while (!breakOut && classNode != null && (classNode = classNode.parentNode) != null);\r
-\r
- selectElm.selectedIndex = index;\r
- }\r
-\r
- // Select formatblock\r
- var selectElm = document.getElementById(editor_id + "_formatSelect");\r
- if (selectElm) {\r
- var elm = tinyMCE.getParentElement(node, "p,div,h1,h2,h3,h4,h5,h6,pre,address");\r
-\r
- if (elm)\r
- selectByValue(selectElm, "<" + elm.nodeName.toLowerCase() + ">");\r
- else\r
- selectByValue(selectElm, "");\r
- }\r
-\r
- // Select fontselect\r
- var selectElm = document.getElementById(editor_id + "_fontNameSelect");\r
- if (selectElm) {\r
- if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) {\r
- var face = inst.queryCommandValue('FontName');\r
-\r
- face = face == null || face == "" ? "" : face;\r
-\r
- selectByValue(selectElm, face, face != "");\r
- } else {\r
- var elm = tinyMCE.getParentElement(node, "font", "face");\r
-\r
- if (elm) {\r
- var family = tinyMCE.getAttrib(elm, "face");\r
-\r
- if (family == '')\r
- family = '' + elm.style.fontFamily;\r
-\r
- if (!selectByValue(selectElm, family, family != ""))\r
- selectByValue(selectElm, "");\r
- } else\r
- selectByValue(selectElm, "");\r
- }\r
- }\r
-\r
- // Select fontsize\r
- var selectElm = document.getElementById(editor_id + "_fontSizeSelect");\r
- if (selectElm) {\r
- if (!tinyMCE.isSafari && !tinyMCE.isOpera) {\r
- var size = inst.queryCommandValue('FontSize');\r
- selectByValue(selectElm, size == null || size == "" ? "0" : size);\r
- } else {\r
- var elm = tinyMCE.getParentElement(node, "font", "size");\r
- if (elm) {\r
- var size = tinyMCE.getAttrib(elm, "size");\r
-\r
- if (size == '') {\r
- var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px');\r
-\r
- size = '' + elm.style.fontSize;\r
-\r
- for (var i=0; i<sizes.length; i++) {\r
- if (('' + sizes[i]) == size) {\r
- size = i;\r
- break;\r
- }\r
- }\r
- }\r
-\r
- if (!selectByValue(selectElm, size))\r
- selectByValue(selectElm, "");\r
- } else\r
- selectByValue(selectElm, "0");\r
- }\r
- }\r
-\r
- // Handle align attributes\r
- alignNode = node;\r
- breakOut = false;\r
- do {\r
- if (!alignNode.getAttribute || !alignNode.getAttribute('align'))\r
- continue;\r
-\r
- switch (alignNode.getAttribute('align').toLowerCase()) {\r
- case "left":\r
- tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonSelected');\r
- breakOut = true;\r
- break;\r
-\r
- case "right":\r
- tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonSelected');\r
- breakOut = true;\r
- break;\r
-\r
- case "middle":\r
- case "center":\r
- tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');\r
- breakOut = true;\r
- break;\r
-\r
- case "justify":\r
- tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonSelected');\r
- breakOut = true;\r
- break;\r
- }\r
- } while (!breakOut && (alignNode = alignNode.parentNode) != null);\r
-\r
- // Div justification\r
- var div = tinyMCE.getParentElement(node, "div");\r
- if (div && div.style.textAlign == "center")\r
- tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');\r
-\r
- // Do special text\r
- if (!setup_content) {\r
- // , "JustifyLeft", "_justifyleft", "JustifyCenter", "justifycenter", "JustifyRight", "justifyright", "JustifyFull", "justifyfull", "InsertUnorderedList", "bullist", "InsertOrderedList", "numlist", "InsertUnorderedList", "bullist", "Outdent", "outdent", "Indent", "indent", "subscript", "sub"\r
- var ar = new Array("Bold", "_bold", "Italic", "_italic", "Strikethrough", "_strikethrough", "superscript", "_sup", "subscript", "_sub");\r
- for (var i=0; i<ar.length; i+=2) {\r
- if (inst.queryCommandState(ar[i]))\r
- tinyMCE.switchClass(editor_id + ar[i+1], 'mceButtonSelected');\r
- }\r
-\r
- if (inst.queryCommandState("Underline") && (node.parentNode == null || node.parentNode.nodeName != "A"))\r
- tinyMCE.switchClass(editor_id + '_underline', 'mceButtonSelected');\r
- }\r
-\r
- // Handle elements\r
- do {\r
- switch (node.nodeName) {\r
- case "UL":\r
- tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonSelected');\r
- break;\r
-\r
- case "OL":\r
- tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonSelected');\r
- break;\r
-\r
- case "HR":\r
- tinyMCE.switchClass(editor_id + '_hr', 'mceButtonSelected');\r
- break;\r
-\r
- case "IMG":\r
- if (tinyMCE.getAttrib(node, 'name').indexOf('mce_') != 0 && tinyMCE.getAttrib(node, 'class').indexOf('mceItem') == -1) {\r
- tinyMCE.switchClass(editor_id + '_image', 'mceButtonSelected');\r
- }\r
- break;\r
- }\r
- } while ((node = node.parentNode) != null);\r
- },\r
-\r
- // Private theme internal functions\r
-\r
- // This function auto imports CSS classes into the class selection droplist\r
- _setupCSSClasses : function(editor_id) {\r
- var i, selectElm;\r
-\r
- if (!TinyMCE_AdvancedTheme._autoImportCSSClasses)\r
- return;\r
-\r
- selectElm = document.getElementById(editor_id + '_styleSelect');\r
-\r
- if (selectElm && selectElm.getAttribute('cssImported') != 'true') {\r
- var csses = tinyMCE.getCSSClasses(editor_id);\r
- if (csses && selectElm) {\r
- for (i=0; i<csses.length; i++)\r
- selectElm.options[selectElm.options.length] = new Option(csses[i], csses[i]);\r
- }\r
-\r
- // Only do this once\r
- if (csses != null && csses.length > 0)\r
- selectElm.setAttribute('cssImported', 'true');\r
- }\r
- },\r
-\r
- _setCookie : function(name, value, expires, path, domain, secure) {\r
- var curCookie = name + "=" + escape(value) +\r
- ((expires) ? "; expires=" + expires.toGMTString() : "") +\r
- ((path) ? "; path=" + escape(path) : "") +\r
- ((domain) ? "; domain=" + domain : "") +\r
- ((secure) ? "; secure" : "");\r
-\r
- document.cookie = curCookie;\r
- },\r
-\r
- _getCookie : function(name) {\r
- var dc = document.cookie;\r
- var prefix = name + "=";\r
- var begin = dc.indexOf("; " + prefix);\r
-\r
- if (begin == -1) {\r
- begin = dc.indexOf(prefix);\r
-\r
- if (begin != 0)\r
- return null;\r
- } else\r
- begin += 2;\r
-\r
- var end = document.cookie.indexOf(";", begin);\r
-\r
- if (end == -1)\r
- end = dc.length;\r
-\r
- return unescape(dc.substring(begin + prefix.length, end));\r
- },\r
-\r
- _resizeTo : function(inst, w, h, set_w) {\r
- var editorContainer = document.getElementById(inst.editorId + '_parent');\r
- var tableElm = editorContainer.firstChild;\r
- var iframe = inst.iframeElement;\r
-\r
- if (w == null || w == "null") {\r
- set_w = false;\r
- w = 0;\r
- }\r
-\r
- if (h == null || h == "null")\r
- return;\r
-\r
- w = parseInt(w);\r
- h = parseInt(h);\r
-\r
- if (tinyMCE.isGecko) {\r
- w += 2;\r
- h += 2;\r
- }\r
-\r
- var dx = w - tableElm.clientWidth;\r
- var dy = h - tableElm.clientHeight;\r
-\r
- w = w < 1 ? 30 : w;\r
- h = h < 1 ? 30 : h;\r
-\r
- if (set_w)\r
- tableElm.style.width = w + "px";\r
-\r
- tableElm.style.height = h + "px";\r
-\r
- iw = iframe.clientWidth + dx;\r
- ih = iframe.clientHeight + dy;\r
-\r
- iw = iw < 1 ? 30 : iw;\r
- ih = ih < 1 ? 30 : ih;\r
-\r
- if (tinyMCE.isGecko) {\r
- iw -= 2;\r
- ih -= 2;\r
- }\r
-\r
- if (set_w)\r
- iframe.style.width = iw + "px";\r
-\r
- iframe.style.height = ih + "px";\r
-\r
- // Is it to small, make it bigger again\r
- if (set_w) {\r
- var tableBodyElm = tableElm.firstChild;\r
- var minIframeWidth = tableBodyElm.scrollWidth;\r
- if (inst.iframeElement.clientWidth < minIframeWidth) {\r
- dx = minIframeWidth - inst.iframeElement.clientWidth;\r
-\r
- inst.iframeElement.style.width = (iw + dx) + "px";\r
- }\r
- }\r
-\r
- // Remove pesky table controls\r
- inst.useCSS = false;\r
- },\r
-\r
- /**\r
- * Handles resizing events.\r
- */\r
- _resizeEventHandler : function(e) {\r
- var resizer = TinyMCE_AdvancedTheme._resizer;\r
-\r
- // Do nothing\r
- if (!resizer.resizing)\r
- return;\r
-\r
- e = typeof(e) == "undefined" ? window.event : e;\r
-\r
- var dx = e.screenX - resizer.downX;\r
- var dy = e.screenY - resizer.downY;\r
- var resizeBox = resizer.resizeBox;\r
- var editorId = resizer.editorId;\r
-\r
- switch (e.type) {\r
- case "mousemove":\r
- var w, h;\r
-\r
- w = resizer.width + dx;\r
- h = resizer.height + dy;\r
-\r
- w = w < 1 ? 1 : w;\r
- h = h < 1 ? 1 : h;\r
-\r
- if (resizer.horizontal)\r
- resizeBox.style.width = w + "px";\r
-\r
- resizeBox.style.height = h + "px";\r
- break;\r
-\r
- case "mouseup":\r
- TinyMCE_AdvancedTheme._setResizing(e, editorId, false);\r
- TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal);\r
-\r
- // Expire in a month\r
- if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {\r
- var expires = new Date();\r
- expires.setTime(expires.getTime() + 3600000 * 24 * 30);\r
-\r
- // Set the cookies\r
- TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires);\r
- TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires);\r
- }\r
- break;\r
- }\r
- },\r
-\r
- /**\r
- * Starts/stops the editor resizing.\r
- */\r
- _setResizing : function(e, editor_id, state) {\r
- e = typeof(e) == "undefined" ? window.event : e;\r
-\r
- var resizer = TinyMCE_AdvancedTheme._resizer;\r
- var editorContainer = document.getElementById(editor_id + '_parent');\r
- var editorArea = document.getElementById(editor_id + '_parent').firstChild;\r
- var resizeBox = document.getElementById(editor_id + '_resize_box');\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
-\r
- if (state) {\r
- // Place box over editor area\r
- var width = editorArea.clientWidth;\r
- var height = editorArea.clientHeight;\r
-\r
- resizeBox.style.width = width + "px";\r
- resizeBox.style.height = height + "px";\r
-\r
- resizer.iframeWidth = inst.iframeElement.clientWidth;\r
- resizer.iframeHeight = inst.iframeElement.clientHeight;\r
-\r
- // Hide editor and show resize box\r
- editorArea.style.display = "none";\r
- resizeBox.style.display = "block";\r
-\r
- // Add event handlers, only once\r
- if (!resizer.eventHandlers) {\r
- if (tinyMCE.isMSIE)\r
- tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);\r
- else\r
- tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);\r
-\r
- tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler);\r
-\r
- resizer.eventHandlers = true;\r
- }\r
-\r
- resizer.resizing = true;\r
- resizer.downX = e.screenX;\r
- resizer.downY = e.screenY;\r
- resizer.width = parseInt(resizeBox.style.width);\r
- resizer.height = parseInt(resizeBox.style.height);\r
- resizer.editorId = editor_id;\r
- resizer.resizeBox = resizeBox;\r
- resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true);\r
- } else {\r
- resizer.resizing = false;\r
- resizeBox.style.display = "none";\r
- editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table";\r
- tinyMCE.execCommand('mceResetDesignMode');\r
- }\r
- },\r
-\r
- _getColorHTML : function(id, n, cm) {\r
- var i, h, cl;\r
-\r
- h = '<span class="mceMenuLine"></span>';\r
- cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(',');\r
-\r
- h += '<table class="mceColors"><tr>';\r
- for (i=0; i<cl.length; i++) {\r
- c = 'tinyMCE.execInstanceCommand(\'' + id + '\', \'' + cm + '\', false, \'#' + cl[i] + '\');';\r
- h += '<td><a href="javascript:' + c + '" style="background-color: #' + cl[i] + '" onclick="' + c + ';return false;"></a></td>';\r
-\r
- if ((i+1) % 8 == 0)\r
- h += '</tr><tr>';\r
- }\r
-\r
- h += '</tr></table>';\r
-\r
- if (tinyMCE.getParam("theme_advanced_more_colors", true))\r
- h += '<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\'' + id + '\',\'' + cm + '\');" class="mceMoreColors">' + tinyMCE.getLang('lang_more_colors') + '</a>';\r
-\r
- return h;\r
- },\r
-\r
- _pickColor : function(id, cm) {\r
- var inputColor, inst = tinyMCE.selectedInstance;\r
-\r
- if (cm == 'forecolor' && inst)\r
- inputColor = inst.foreColor;\r
-\r
- if ((cm == 'backcolor' || cm == 'HiliteColor') && inst)\r
- inputColor = inst.backColor;\r
-\r
- tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) {\r
- tinyMCE.execInstanceCommand(id, cm, false, c);\r
- }});\r
- },\r
-\r
- _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) {\r
- tinyMCE.execCommand("mceInsertContent", false, tinyMCE.createTagHTML('img', {\r
- src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src), // Force absolute\r
- mce_src : src,\r
- alt : alt,\r
- border : border,\r
- hspace : hspace,\r
- vspace : vspace,\r
- width : width,\r
- height : height,\r
- align : align,\r
- title : title,\r
- onmouseover : onmouseover,\r
- onmouseout : onmouseout\r
- }));\r
- },\r
-\r
- _insertLink : function(href, target, title, onclick, style_class) {\r
- tinyMCE.execCommand('mceBeginUndoLevel');\r
-\r
- if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {\r
- var doc = tinyMCE.selectedInstance.getDoc();\r
- var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");\r
- var newLink = false;\r
-\r
- if (!linkElement) {\r
- linkElement = doc.createElement("a");\r
- newLink = true;\r
- }\r
-\r
- var mhref = href;\r
- var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);");\r
- mhref = tinyMCE.getParam('convert_urls') ? href : mhref;\r
-\r
- tinyMCE.setAttrib(linkElement, 'href', thref);\r
- tinyMCE.setAttrib(linkElement, 'mce_href', mhref);\r
- tinyMCE.setAttrib(linkElement, 'target', target);\r
- tinyMCE.setAttrib(linkElement, 'title', title);\r
- tinyMCE.setAttrib(linkElement, 'onclick', onclick);\r
- tinyMCE.setAttrib(linkElement, 'class', style_class);\r
-\r
- if (newLink) {\r
- linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));\r
- tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement);\r
- }\r
-\r
- return;\r
- }\r
-\r
- if (!tinyMCE.linkElement && tinyMCE.selectedInstance) {\r
- if (tinyMCE.isSafari) {\r
- tinyMCE.execCommand("mceInsertContent", false, '<a href="' + tinyMCE.uniqueURL + '">' + tinyMCE.selectedInstance.selection.getSelectedHTML() + '</a>');\r
- } else\r
- tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL);\r
-\r
- tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);\r
-\r
- var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);\r
-\r
- for (var i=0; i<elementArray.length; i++) {\r
- var mhref = href;\r
- var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, elementArray[i]);");\r
- mhref = tinyMCE.getParam('convert_urls') ? href : mhref;\r
-\r
- tinyMCE.setAttrib(elementArray[i], 'href', thref);\r
- tinyMCE.setAttrib(elementArray[i], 'mce_href', mhref);\r
- tinyMCE.setAttrib(elementArray[i], 'target', target);\r
- tinyMCE.setAttrib(elementArray[i], 'title', title);\r
- tinyMCE.setAttrib(elementArray[i], 'onclick', onclick);\r
- tinyMCE.setAttrib(elementArray[i], 'class', style_class);\r
- }\r
-\r
- tinyMCE.linkElement = elementArray[0];\r
- }\r
-\r
- if (tinyMCE.linkElement) {\r
- var mhref = href;\r
- href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement);");\r
- mhref = tinyMCE.getParam('convert_urls') ? href : mhref;\r
-\r
- tinyMCE.setAttrib(tinyMCE.linkElement, 'href', href);\r
- tinyMCE.setAttrib(tinyMCE.linkElement, 'mce_href', mhref);\r
- tinyMCE.setAttrib(tinyMCE.linkElement, 'target', target);\r
- tinyMCE.setAttrib(tinyMCE.linkElement, 'title', title);\r
- tinyMCE.setAttrib(tinyMCE.linkElement, 'onclick', onclick);\r
- tinyMCE.setAttrib(tinyMCE.linkElement, 'class', style_class);\r
- }\r
-\r
- tinyMCE.execCommand('mceEndUndoLevel');\r
- }\r
-};\r
-\r
-tinyMCE.addTheme("advanced", TinyMCE_AdvancedTheme);\r
-\r
-// Add default buttons maps for advanced theme and all internal plugins\r
-tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);\r
+/**
+ * $Id: editor_template_src.js 296 2007-08-21 10:36:35Z spocke $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+/* Import theme specific language pack */
+tinyMCE.importThemeLanguagePack('advanced');
+
+var TinyMCE_AdvancedTheme = {
+ // Private theme fields
+ _defColors : "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",
+ _autoImportCSSClasses : true,
+ _resizer : {},
+ _buttons : [
+ // Control id, button img, button title, command, user_interface, value
+ ['bold', '{$lang_bold_img}', 'lang_bold_desc', 'Bold'],
+ ['italic', '{$lang_italic_img}', 'lang_italic_desc', 'Italic'],
+ ['underline', '{$lang_underline_img}', 'lang_underline_desc', 'Underline'],
+ ['strikethrough', 'strikethrough.gif', 'lang_striketrough_desc', 'Strikethrough'],
+ ['justifyleft', 'justifyleft.gif', 'lang_justifyleft_desc', 'JustifyLeft'],
+ ['justifycenter', 'justifycenter.gif', 'lang_justifycenter_desc', 'JustifyCenter'],
+ ['justifyright', 'justifyright.gif', 'lang_justifyright_desc', 'JustifyRight'],
+ ['justifyfull', 'justifyfull.gif', 'lang_justifyfull_desc', 'JustifyFull'],
+ ['bullist', 'bullist.gif', 'lang_bullist_desc', 'InsertUnorderedList'],
+ ['numlist', 'numlist.gif', 'lang_numlist_desc', 'InsertOrderedList'],
+ ['outdent', 'outdent.gif', 'lang_outdent_desc', 'Outdent'],
+ ['indent', 'indent.gif', 'lang_indent_desc', 'Indent'],
+ ['cut', 'cut.gif', 'lang_cut_desc', 'Cut'],
+ ['copy', 'copy.gif', 'lang_copy_desc', 'Copy'],
+ ['paste', 'paste.gif', 'lang_paste_desc', 'Paste'],
+ ['undo', 'undo.gif', 'lang_undo_desc', 'Undo'],
+ ['redo', 'redo.gif', 'lang_redo_desc', 'Redo'],
+ ['link', 'link.gif', 'lang_link_desc', 'mceLink', true],
+ ['unlink', 'unlink.gif', 'lang_unlink_desc', 'unlink'],
+ ['image', 'image.gif', 'lang_image_desc', 'mceImage', true],
+ ['cleanup', 'cleanup.gif', 'lang_cleanup_desc', 'mceCleanup'],
+ ['help', 'help.gif', 'lang_help_desc', 'mceHelp'],
+ ['code', 'code.gif', 'lang_theme_code_desc', 'mceCodeEditor'],
+ ['hr', 'hr.gif', 'lang_theme_hr_desc', 'inserthorizontalrule'],
+ ['removeformat', 'removeformat.gif', 'lang_theme_removeformat_desc', 'removeformat'],
+ ['sub', 'sub.gif', 'lang_theme_sub_desc', 'subscript'],
+ ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'],
+ ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true],
+ ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true],
+ ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true],
+ ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true],
+ ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'],
+ ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'],
+ ['anchor', 'anchor.gif', 'lang_theme_anchor_desc', 'mceInsertAnchor'],
+ ['newdocument', 'newdocument.gif', 'lang_newdocument_desc', 'mceNewDocument']
+ ],
+
+ _buttonMap : 'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',
+
+ /**
+ * Returns HTML code for the specificed control.
+ */
+ getControlHTML : function(button_name) {
+ var i, x, but;
+
+ // Lookup button in button list
+ for (i=0; i<TinyMCE_AdvancedTheme._buttons.length; i++) {
+ but = TinyMCE_AdvancedTheme._buttons[i];
+
+ if (but[0] == button_name && (button_name == "forecolor" || button_name == "backcolor"))
+ return tinyMCE.getMenuButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3] + "Menu", but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));
+
+ if (but[0] == button_name)
+ return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));
+ }
+
+ // Custom controlls other than buttons
+ switch (button_name) {
+ case "formatselect":
+ var html = '<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';
+ var formats = tinyMCE.getParam("theme_advanced_blockformats", "p,address,pre,h1,h2,h3,h4,h5,h6", true).split(',');
+ var lookup = [
+ ['p', '{$lang_theme_paragraph}'],
+ ['address', '{$lang_theme_address}'],
+ ['pre', '{$lang_theme_pre}'],
+ ['h1', '{$lang_theme_h1}'],
+ ['h2', '{$lang_theme_h2}'],
+ ['h3', '{$lang_theme_h3}'],
+ ['h4', '{$lang_theme_h4}'],
+ ['h5', '{$lang_theme_h5}'],
+ ['h6', '{$lang_theme_h6}'],
+ ['div', '{$lang_theme_div}'],
+ ['blockquote', '{$lang_theme_blockquote}'],
+ ['code', '{$lang_theme_code}'],
+ ['dt', '{$lang_theme_dt}'],
+ ['dd', '{$lang_theme_dd}'],
+ ['samp', '{$lang_theme_samp}']
+ ];
+
+ html += '<option value="">{$lang_theme_block}</option>';
+
+ // Build format select
+ for (var i=0; i<formats.length; i++) {
+ for (var x=0; x<lookup.length; x++) {
+ if (formats[i] == lookup[x][0])
+ html += '<option value="<' + lookup[x][0] + '>">' + lookup[x][1] + '</option>';
+ }
+ }
+
+ html += '</select>';
+
+ return html;
+
+ case "styleselect":
+ return '<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';
+
+ case "fontselect":
+ var fontHTML = '<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';
+ var iFonts = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';
+ var nFonts = 'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';
+ var fonts = tinyMCE.getParam("theme_advanced_fonts", nFonts).split(';');
+ for (i=0; i<fonts.length; i++) {
+ if (fonts[i] != '') {
+ var parts = fonts[i].split('=');
+ fontHTML += '<option value="' + parts[1] + '">' + parts[0] + '</option>';
+ }
+ }
+
+ fontHTML += '</select>';
+ return fontHTML;
+
+ case "fontsizeselect":
+ return '<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+
+ '<option value="0">{$lang_theme_font_size}</option>'+
+ '<option value="1">1 (8 pt)</option>'+
+ '<option value="2">2 (10 pt)</option>'+
+ '<option value="3">3 (12 pt)</option>'+
+ '<option value="4">4 (14 pt)</option>'+
+ '<option value="5">5 (18 pt)</option>'+
+ '<option value="6">6 (24 pt)</option>'+
+ '<option value="7">7 (36 pt)</option>'+
+ '</select>';
+
+ case "|":
+ case "separator":
+ return '<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';
+
+ case "spacer":
+ return '<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';
+
+ case "rowseparator":
+ return '<br />';
+ }
+
+ return "";
+ },
+
+ /**
+ * Theme specific execcommand handling.
+ */
+ execCommand : function(editor_id, element, command, user_interface, value) {
+ switch (command) {
+ case 'mceHelp':
+ tinyMCE.openWindow({
+ file : 'about.htm',
+ width : 480,
+ height : 380
+ }, {
+ tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion,
+ tinymce_releasedate : tinyMCE.releaseDate,
+ inline : "yes"
+ });
+ return true;
+
+ case "mceLink":
+ var inst = tinyMCE.getInstanceById(editor_id);
+ var doc = inst.getDoc();
+ var selectedText = "";
+
+ if (tinyMCE.isMSIE) {
+ var rng = doc.selection.createRange();
+ selectedText = rng.text;
+ } else
+ selectedText = inst.getSel().toString();
+
+ if (!tinyMCE.linkElement) {
+ if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0))
+ return true;
+ }
+
+ var href = "", target = "", title = "", onclick = "", action = "insert", style_class = "";
+
+ if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a")
+ tinyMCE.linkElement = tinyMCE.selectedElement;
+
+ // Is anchor not a link
+ if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "")
+ tinyMCE.linkElement = null;
+
+ if (tinyMCE.linkElement) {
+ href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href');
+ target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target');
+ title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title');
+ onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');
+ style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class');
+
+ // Try old onclick to if copy/pasted content
+ if (onclick == "")
+ onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');
+
+ onclick = tinyMCE.cleanupEventStr(onclick);
+
+ href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");
+
+ // Use mce_href if defined
+ mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href');
+ if (mceRealHref != "") {
+ href = mceRealHref;
+
+ if (tinyMCE.getParam('convert_urls'))
+ href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");
+ }
+
+ action = "update";
+ }
+
+ var template = new Array();
+
+ template['file'] = 'link.htm';
+ template['width'] = 310;
+ template['height'] = 200;
+
+ // Language specific width and height addons
+ template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0);
+ template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0);
+
+ if (inst.settings['insertlink_callback']) {
+ var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);");
+ if (returnVal && returnVal['href'])
+ TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']);
+ } else {
+ tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"});
+ }
+
+ return true;
+
+ case "mceImage":
+ var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = "";
+ var title = "", onmouseover = "", onmouseout = "", action = "insert";
+ var img = tinyMCE.imgElement;
+ var inst = tinyMCE.getInstanceById(editor_id);
+
+ if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {
+ img = tinyMCE.selectedElement;
+ tinyMCE.imgElement = img;
+ }
+
+ if (img) {
+ // Is it a internal MCE visual aid image, then skip this one.
+ if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0)
+ return true;
+
+ src = tinyMCE.getAttrib(img, 'src');
+ alt = tinyMCE.getAttrib(img, 'alt');
+
+ // Try polling out the title
+ if (alt == "")
+ alt = tinyMCE.getAttrib(img, 'title');
+
+ // Fix width/height attributes if the styles is specified
+ if (tinyMCE.isGecko) {
+ var w = img.style.width;
+ if (w != null && w != "")
+ img.setAttribute("width", w);
+
+ var h = img.style.height;
+ if (h != null && h != "")
+ img.setAttribute("height", h);
+ }
+
+ border = tinyMCE.getAttrib(img, 'border');
+ hspace = tinyMCE.getAttrib(img, 'hspace');
+ vspace = tinyMCE.getAttrib(img, 'vspace');
+ width = tinyMCE.getAttrib(img, 'width');
+ height = tinyMCE.getAttrib(img, 'height');
+ align = tinyMCE.getAttrib(img, 'align');
+ onmouseover = tinyMCE.getAttrib(img, 'onmouseover');
+ onmouseout = tinyMCE.getAttrib(img, 'onmouseout');
+ title = tinyMCE.getAttrib(img, 'title');
+
+ // Is realy specified?
+ if (tinyMCE.isMSIE) {
+ width = img.attributes['width'].specified ? width : "";
+ height = img.attributes['height'].specified ? height : "";
+ }
+
+ //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover));
+ //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout));
+
+ src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");
+
+ // Use mce_src if defined
+ mceRealSrc = tinyMCE.getAttrib(img, 'mce_src');
+ if (mceRealSrc != "") {
+ src = mceRealSrc;
+
+ if (tinyMCE.getParam('convert_urls'))
+ src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");
+ }
+
+ //if (onmouseover != "")
+ // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);");
+
+ //if (onmouseout != "")
+ // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);");
+
+ action = "update";
+ }
+
+ var template = new Array();
+
+ template['file'] = 'image.htm?src={$src}';
+ template['width'] = 355;
+ template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0);
+
+ // Language specific width and height addons
+ template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0);
+ template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0);
+
+ if (inst.settings['insertimage_callback']) {
+ var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");
+ if (returnVal && returnVal['src'])
+ TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']);
+ } else
+ tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"});
+
+ return true;
+
+ case "forecolor":
+ var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm;
+
+ TinyMCE_AdvancedTheme._hideMenus(editor_id);
+
+ if (!fcp.exists()) {
+ fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));
+ elm = fcp.getElement();
+ elm._editor_id = editor_id;
+ elm._command = "forecolor";
+ elm._switchId = editor_id + "_forecolor";
+ tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);
+ tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);
+ tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);
+ }
+
+ img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0];
+ p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));
+
+ fcp.moveTo(p.absLeft, p.absTop);
+ fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor;
+ fcp.show();
+
+ return false;
+
+ case "forecolorpicker":
+ this._pickColor(editor_id, 'forecolor');
+ return true;
+
+ case "forecolorMenu":
+ TinyMCE_AdvancedTheme._hideMenus(editor_id);
+
+ // Create color layer
+ var ml = new TinyMCE_Layer(editor_id + '_fcMenu');
+
+ if (!ml.exists())
+ ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor'));
+
+ tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus');
+ ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl');
+
+ ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);
+
+ if (tinyMCE.isOpera)
+ ml.moveBy(0, -2);
+
+ ml.show();
+ return true;
+
+ case "HiliteColor":
+ var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img;
+
+ TinyMCE_AdvancedTheme._hideMenus(editor_id);
+
+ if (!bcp.exists()) {
+ bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));
+ elm = bcp.getElement();
+ elm._editor_id = editor_id;
+ elm._command = "HiliteColor";
+ elm._switchId = editor_id + "_backcolor";
+ tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);
+ tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);
+ tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);
+ }
+
+ img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0];
+ p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));
+
+ bcp.moveTo(p.absLeft, p.absTop);
+ bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor;
+ bcp.show();
+
+ return false;
+
+ case "HiliteColorMenu":
+ TinyMCE_AdvancedTheme._hideMenus(editor_id);
+
+ // Create color layer
+ var ml = new TinyMCE_Layer(editor_id + '_bcMenu');
+
+ if (!ml.exists())
+ ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor'));
+
+ tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus');
+ ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl');
+
+ ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);
+
+ if (tinyMCE.isOpera)
+ ml.moveBy(0, -2);
+
+ ml.show();
+ return true;
+
+ case "backcolorpicker":
+ this._pickColor(editor_id, 'HiliteColor');
+ return true;
+
+ case "mceColorPicker":
+ if (user_interface) {
+ var template = [];
+
+ if (!value['callback'] && !value['color'])
+ value['color'] = value['document'].getElementById(value['element_id']).value;
+
+ template['file'] = 'color_picker.htm';
+ template['width'] = 380;
+ template['height'] = 250;
+ template['close_previous'] = "no";
+
+ template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0);
+ template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0);
+
+ if (typeof(value['store_selection']) == "undefined")
+ value['store_selection'] = true;
+
+ tinyMCE.lastColorPickerValue = value;
+ tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']});
+ } else {
+ var savedVal = tinyMCE.lastColorPickerValue, elm;
+
+ if (savedVal['callback']) {
+ savedVal['callback'](value);
+ return true;
+ }
+
+ elm = savedVal['document'].getElementById(savedVal['element_id']);
+ elm.value = value;
+
+ if (elm.onchange != null && elm.onchange != '')
+ eval('elm.onchange();');
+ }
+ return true;
+
+ case "mceCodeEditor":
+ var template = new Array();
+
+ template['file'] = 'source_editor.htm';
+ template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720));
+ template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580));
+
+ tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"});
+ return true;
+
+ case "mceCharMap":
+ var template = new Array();
+
+ template['file'] = 'charmap.htm';
+ template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0);
+ template['height'] = 250;
+
+ template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0);
+ template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0);
+
+ tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
+ return true;
+
+ case "mceInsertAnchor":
+ var template = new Array();
+
+ template['file'] = 'anchor.htm';
+ template['width'] = 320;
+ template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0);
+
+ template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0);
+ template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0);
+
+ tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
+ return true;
+
+ case "mceNewDocument":
+ if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))
+ tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' ');
+
+ return true;
+ }
+
+ return false;
+ },
+
+ /**
+ * Editor instance template function.
+ */
+ getEditorTemplate : function(settings, editorId) {
+ function removeFromArray(in_array, remove_array) {
+ var outArray = new Array(), skip;
+
+ for (var i=0; i<in_array.length; i++) {
+ skip = false;
+
+ for (var j=0; j<remove_array.length; j++) {
+ if (in_array[i] == remove_array[j]) {
+ skip = true;
+ }
+ }
+
+ if (!skip) {
+ outArray[outArray.length] = in_array[i];
+ }
+ }
+
+ return outArray;
+ }
+
+ function addToArray(in_array, add_array) {
+ for (var i=0; i<add_array.length; i++) {
+ in_array[in_array.length] = add_array[i];
+ }
+
+ return in_array;
+ }
+
+ var template = new Array();
+ var deltaHeight = 0;
+ var resizing = tinyMCE.getParam("theme_advanced_resizing", false);
+ var path = tinyMCE.getParam("theme_advanced_path", true);
+ var statusbarHTML = '<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: ' + (path ? "block" : "none") + '"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: ' + (resizing ? "block" : "none") + '" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';
+ var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout");
+
+ // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY!
+ var styleSelectHTML = '<option value="">{$lang_theme_style_select}</option>';
+ if (settings['theme_advanced_styles']) {
+ var stylesAr = settings['theme_advanced_styles'].split(';');
+
+ for (var i=0; i<stylesAr.length; i++) {
+ var key, value;
+
+ key = stylesAr[i].split('=')[0];
+ value = stylesAr[i].split('=')[1];
+
+ styleSelectHTML += '<option value="' + value + '">' + key + '</option>';
+ }
+
+ TinyMCE_AdvancedTheme._autoImportCSSClasses = false;
+ }
+
+ switch(layoutManager) {
+ case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)...
+ var toolbarHTML = "";
+ var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom");
+ var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center");
+ var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity
+ var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation);
+ var defVals = {
+ theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",
+ theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",
+ theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap"
+ };
+
+ // Add accessibility control
+ toolbarHTML += '<a href="#" accesskey="q" title="' + tinyMCE.getLang("lang_toolbar_focus") + '"';
+
+ if (!tinyMCE.getParam("accessibility_focus"))
+ toolbarHTML += ' onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"';
+
+ toolbarHTML += '></a>';
+
+ // Render rows
+ for (var i=1; i<100; i++) {
+ var def = defVals["theme_advanced_buttons" + i];
+
+ var buttons = tinyMCE.getParam("theme_advanced_buttons" + i, def == null ? '' : def, true, ',');
+ if (buttons.length == 0)
+ break;
+
+ buttons = removeFromArray(buttons, tinyMCE.getParam("theme_advanced_disable", "", true, ','));
+ buttons = addToArray(buttons, tinyMCE.getParam("theme_advanced_buttons" + i + "_add", "", true, ','));
+ buttons = addToArray(tinyMCE.getParam("theme_advanced_buttons" + i + "_add_before", "", true, ','), buttons);
+
+ for (var b=0; b<buttons.length; b++)
+ toolbarHTML += tinyMCE.getControlHTML(buttons[b]);
+
+ if (buttons.length > 0) {
+ toolbarHTML += "<br />";
+ deltaHeight -= 23;
+ }
+ }
+
+ // Add accessibility control
+ toolbarHTML += '<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"></a>';
+
+ // Setup template html
+ template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';
+
+ if (toolbarLocation == "top")
+ template['html'] += '<tr><td dir="ltr" class="mceToolbarTop" align="' + toolbarAlign + '" height="1" nowrap="nowrap"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
+
+ if (statusbarLocation == "top") {
+ template['html'] += '<tr><td class="mceStatusbarTop" height="1">' + statusbarHTML + '</td></tr>';
+ deltaHeight -= 23;
+ }
+
+ template['html'] += '<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';
+
+ if (toolbarLocation == "bottom")
+ template['html'] += '<tr><td dir="ltr" class="mceToolbarBottom" align="' + toolbarAlign + '" height="1"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
+
+ // External toolbar changes
+ if (toolbarLocation == "external") {
+ var bod = document.body;
+ var elm = document.createElement ("div");
+
+ toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML);
+ toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId});
+
+ elm.className = "mceToolbarExternal";
+ elm.id = editorId+"_toolbar";
+ elm.innerHTML = '<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';
+ bod.appendChild (elm);
+ // bod.style.marginTop = elm.offsetHeight + "px";
+
+ deltaHeight = 0;
+ tinyMCE.getInstanceById(editorId).toolbarElement = elm;
+
+ //template['html'] = '<div id="mceExternalToolbar" align="center" class="mceToolbarExternal"><table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table></div>' + template["html"];
+ } else {
+ tinyMCE.getInstanceById(editorId).toolbarElement = null;
+ }
+
+ if (statusbarLocation == "bottom") {
+ template['html'] += '<tr><td class="mceStatusbarBottom" height="1">' + statusbarHTML + '</td></tr>';
+ deltaHeight -= 23;
+ }
+
+ template['html'] += '</tbody></table>';
+ //"SimpleLayout"
+ break;
+
+ case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom.
+ template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';
+
+ var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ",");
+ var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container");
+ var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center");
+
+ //Render Containers:
+ for (var i = 0; i < containers.length; i++)
+ {
+ if (containers[i] == "mceEditor") //Exceptions for mceEditor and ...
+ template['html'] += '<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';
+ else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath:
+ {
+ var pathClass = "mceStatusbar";
+
+ if (i == containers.length-1)
+ {
+ pathClass = "mceStatusbarBottom";
+ }
+ else if (i == 0)
+ {
+ pathClass = "mceStatusbar";
+ }
+ else
+ {
+ deltaHeight-=2;
+ }
+
+ template['html'] += '<tr><td class="' + pathClass + '" height="1">' + statusbarHTML + '</td></tr>';
+ deltaHeight -= 22;
+ } else { // Render normal Container
+ var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ',');
+ var curContainerHTML = "";
+ var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign);
+ var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS);
+
+ curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ','));
+
+ for (var j=0; j<curContainer.length; j++)
+ curContainerHTML += tinyMCE.getControlHTML(curContainer[j]);
+
+ if (curContainer.length > 0) {
+ curContainerHTML += "<br />";
+ deltaHeight -= 23;
+ }
+
+ template['html'] += '<tr><td class="' + curCSS + '" align="' + curAlign + '" height="1">' + curContainerHTML + '</td></tr>';
+ }
+ }
+
+ template['html'] += '</tbody></table>';
+ //RowLayout
+ break;
+
+ case "CustomLayout" : //User defined layout callback...
+ var customLayout = tinyMCE.getParam("theme_advanced_custom_layout","");
+
+ if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") {
+ template = eval(customLayout + "(template);");
+ }
+ break;
+ }
+
+ if (resizing)
+ template['html'] += '<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';
+
+ template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML);
+
+ // Set to default values
+ if (!template['delta_width'])
+ template['delta_width'] = 0;
+
+ if (!template['delta_height'])
+ template['delta_height'] = deltaHeight;
+
+ return template;
+ },
+
+ initInstance : function(inst) {
+ if (tinyMCE.getParam("theme_advanced_resizing", false)) {
+ if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {
+ var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width");
+ var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height");
+
+ TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true));
+ }
+ }
+
+ inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink');
+ },
+
+ removeInstance : function(inst) {
+ new TinyMCE_Layer(inst.editorId + '_fcMenu').remove();
+ new TinyMCE_Layer(inst.editorId + '_bcMenu').remove();
+ },
+
+ hideInstance : function(inst) {
+ TinyMCE_AdvancedTheme._hideMenus(inst.editorId);
+ },
+
+ _handleMenuEvent : function(e) {
+ var te = tinyMCE.isMSIE ? window.event.srcElement : e.target;
+ tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId));
+
+ if (e.type == "click")
+ tinyMCE.execInstanceCommand(te._editor_id, te._command);
+ },
+
+ _hideMenus : function(id) {
+ var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu');
+
+ if (fcml.exists() && fcml.isVisible()) {
+ tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton');
+ fcml.hide();
+ }
+
+ if (bcml.exists() && bcml.isVisible()) {
+ tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton');
+ bcml.hide();
+ }
+ },
+
+ /**
+ * Node change handler.
+ */
+ handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) {
+ var alignNode, breakOut, classNode;
+
+ function selectByValue(select_elm, value, first_index) {
+ first_index = typeof(first_index) == "undefined" ? false : true;
+
+ if (select_elm) {
+ for (var i=0; i<select_elm.options.length; i++) {
+ var ov = "" + select_elm.options[i].value;
+
+ if (first_index && ov.toLowerCase().indexOf(value.toLowerCase()) == 0) {
+ select_elm.selectedIndex = i;
+ return true;
+ }
+
+ if (ov == value) {
+ select_elm.selectedIndex = i;
+ return true;
+ }
+ }
+ }
+
+ return false;
+ };
+
+ // No node provided
+ if (node == null)
+ return;
+
+ // Update path
+ var pathElm = document.getElementById(editor_id + "_path");
+ var inst = tinyMCE.getInstanceById(editor_id);
+ var doc = inst.getDoc();
+ TinyMCE_AdvancedTheme._hideMenus(editor_id);
+
+ if (pathElm) {
+ // Get node path
+ var parentNode = node;
+ var path = new Array();
+
+ while (parentNode != null) {
+ if (parentNode.nodeName.toUpperCase() == "BODY") {
+ break;
+ }
+
+ // Only append element nodes to path
+ if (parentNode.nodeType == 1 && tinyMCE.getAttrib(parentNode, "class").indexOf('mceItemHidden') == -1) {
+ path[path.length] = parentNode;
+ }
+
+ parentNode = parentNode.parentNode;
+ }
+
+ // Setup HTML
+ var html = "";
+ for (var i=path.length-1; i>=0; i--) {
+ var nodeName = path[i].nodeName.toLowerCase();
+ var nodeData = "";
+
+ if (nodeName.indexOf("html:") == 0)
+ nodeName = nodeName.substring(5);
+
+ if (nodeName == "b") {
+ nodeName = "strong";
+ }
+
+ if (nodeName == "i") {
+ nodeName = "em";
+ }
+
+ if (nodeName == "span") {
+ var cn = tinyMCE.getAttrib(path[i], "class");
+ if (cn != "" && cn.indexOf('mceItem') == -1)
+ nodeData += "class: " + cn + " ";
+
+ var st = tinyMCE.getAttrib(path[i], "style");
+ if (st != "") {
+ st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st));
+ nodeData += "style: " + tinyMCE.xmlEncode(st) + " ";
+ }
+ }
+
+ if (nodeName == "font") {
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ nodeName = "span";
+
+ var face = tinyMCE.getAttrib(path[i], "face");
+ if (face != "")
+ nodeData += "font: " + tinyMCE.xmlEncode(face) + " ";
+
+ var size = tinyMCE.getAttrib(path[i], "size");
+ if (size != "")
+ nodeData += "size: " + tinyMCE.xmlEncode(size) + " ";
+
+ var color = tinyMCE.getAttrib(path[i], "color");
+ if (color != "")
+ nodeData += "color: " + tinyMCE.xmlEncode(color) + " ";
+ }
+
+ if (tinyMCE.getAttrib(path[i], 'id') != "") {
+ nodeData += "id: " + path[i].getAttribute('id') + " ";
+ }
+
+ var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);
+ if (className != "" && className.indexOf('mceItem') == -1)
+ nodeData += "class: " + className + " ";
+
+ if (tinyMCE.getAttrib(path[i], 'src') != "") {
+ var src = tinyMCE.getAttrib(path[i], "mce_src");
+
+ if (src == "")
+ src = tinyMCE.getAttrib(path[i], "src");
+
+ nodeData += "src: " + tinyMCE.xmlEncode(src) + " ";
+ }
+
+ if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") {
+ var href = tinyMCE.getAttrib(path[i], "mce_href");
+
+ if (href == "")
+ href = tinyMCE.getAttrib(path[i], "href");
+
+ nodeData += "href: " + tinyMCE.xmlEncode(href) + " ";
+ }
+
+ className = tinyMCE.getAttrib(path[i], "class");
+ if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) {
+ nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase();
+ nodeData = path[i].getAttribute('title');
+ }
+
+ if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") {
+ nodeName = "a";
+ nodeName += "#" + tinyMCE.xmlEncode(anchor);
+ nodeData = "";
+ }
+
+ if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) {
+ var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);
+ if (className != "" && className.indexOf('mceItem') == -1) {
+ nodeName += "." + className;
+ }
+ }
+
+ var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');';
+ html += '<a title="' + nodeData + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" target="_self" class="mcePathItem">' + nodeName + '</a>';
+
+ if (i > 0) {
+ html += " » ";
+ }
+ }
+
+ pathElm.innerHTML = '<a href="#" accesskey="x"></a>' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' ';
+ }
+
+ // Reset old states
+ tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled');
+ tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled');
+ tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled');
+ tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal');
+
+ if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1)
+ tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected');
+
+ // Get link
+ var anchorLink = tinyMCE.getParentElement(node, "a", "href");
+
+ if (anchorLink || any_selection) {
+ tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');
+ }
+
+ // Handle visual aid
+ tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal');
+
+ if (undo_levels != -1) {
+ tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled');
+ tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled');
+ }
+
+ // Within li, blockquote
+ if (tinyMCE.getParentElement(node, "li,blockquote"))
+ tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal');
+
+ // Has redo levels
+ if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0))
+ tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal');
+
+ // Has undo levels
+ if (undo_index != -1 && (undo_index > 0 && undo_levels > 0))
+ tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal');
+
+ // Select class in select box
+ var selectElm = document.getElementById(editor_id + "_styleSelect");
+
+ if (selectElm) {
+ TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);
+
+ classNode = node;
+ breakOut = false;
+ var index = 0;
+
+ do {
+ if (classNode && classNode.className) {
+ for (var i=0; i<selectElm.options.length; i++) {
+ if (selectElm.options[i].value == classNode.className) {
+ index = i;
+ breakOut = true;
+ break;
+ }
+ }
+ }
+ } while (!breakOut && classNode != null && (classNode = classNode.parentNode) != null);
+
+ selectElm.selectedIndex = index;
+ }
+
+ // Select formatblock
+ var selectElm = document.getElementById(editor_id + "_formatSelect");
+ if (selectElm) {
+ var elm = tinyMCE.getParentElement(node, "p,div,h1,h2,h3,h4,h5,h6,pre,address");
+
+ if (elm)
+ selectByValue(selectElm, "<" + elm.nodeName.toLowerCase() + ">");
+ else
+ selectByValue(selectElm, "");
+ }
+
+ // Select fontselect
+ var selectElm = document.getElementById(editor_id + "_fontNameSelect");
+ if (selectElm) {
+ if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) {
+ var face = inst.queryCommandValue('FontName');
+
+ face = face == null || face == "" ? "" : face;
+
+ selectByValue(selectElm, face, face != "");
+ } else {
+ var elm = tinyMCE.getParentElement(node, "font", "face");
+
+ if (elm) {
+ var family = tinyMCE.getAttrib(elm, "face");
+
+ if (family == '')
+ family = '' + elm.style.fontFamily;
+
+ if (!selectByValue(selectElm, family, family != ""))
+ selectByValue(selectElm, "");
+ } else
+ selectByValue(selectElm, "");
+ }
+ }
+
+ // Select fontsize
+ var selectElm = document.getElementById(editor_id + "_fontSizeSelect");
+ if (selectElm) {
+ if (!tinyMCE.isSafari && !tinyMCE.isOpera) {
+ var size = inst.queryCommandValue('FontSize');
+ selectByValue(selectElm, size == null || size == "" ? "0" : size);
+ } else {
+ var elm = tinyMCE.getParentElement(node, "font", "size");
+ if (elm) {
+ var size = tinyMCE.getAttrib(elm, "size");
+
+ if (size == '') {
+ var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px');
+
+ size = '' + elm.style.fontSize;
+
+ for (var i=0; i<sizes.length; i++) {
+ if (('' + sizes[i]) == size) {
+ size = i;
+ break;
+ }
+ }
+ }
+
+ if (!selectByValue(selectElm, size))
+ selectByValue(selectElm, "");
+ } else
+ selectByValue(selectElm, "0");
+ }
+ }
+
+ // Handle align attributes
+ alignNode = node;
+ breakOut = false;
+ do {
+ if (!alignNode.getAttribute || !alignNode.getAttribute('align'))
+ continue;
+
+ switch (alignNode.getAttribute('align').toLowerCase()) {
+ case "left":
+ tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonSelected');
+ breakOut = true;
+ break;
+
+ case "right":
+ tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonSelected');
+ breakOut = true;
+ break;
+
+ case "middle":
+ case "center":
+ tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');
+ breakOut = true;
+ break;
+
+ case "justify":
+ tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonSelected');
+ breakOut = true;
+ break;
+ }
+ } while (!breakOut && (alignNode = alignNode.parentNode) != null);
+
+ // Div justification
+ var div = tinyMCE.getParentElement(node, "div");
+ if (div && div.style.textAlign == "center")
+ tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');
+
+ // Do special text
+ if (!setup_content) {
+ // , "JustifyLeft", "_justifyleft", "JustifyCenter", "justifycenter", "JustifyRight", "justifyright", "JustifyFull", "justifyfull", "InsertUnorderedList", "bullist", "InsertOrderedList", "numlist", "InsertUnorderedList", "bullist", "Outdent", "outdent", "Indent", "indent", "subscript", "sub"
+ var ar = new Array("Bold", "_bold", "Italic", "_italic", "Strikethrough", "_strikethrough", "superscript", "_sup", "subscript", "_sub");
+ for (var i=0; i<ar.length; i+=2) {
+ if (inst.queryCommandState(ar[i]))
+ tinyMCE.switchClass(editor_id + ar[i+1], 'mceButtonSelected');
+ }
+
+ if (inst.queryCommandState("Underline") && (node.parentNode == null || node.parentNode.nodeName != "A"))
+ tinyMCE.switchClass(editor_id + '_underline', 'mceButtonSelected');
+ }
+
+ // Handle elements
+ do {
+ switch (node.nodeName) {
+ case "UL":
+ tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonSelected');
+ break;
+
+ case "OL":
+ tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonSelected');
+ break;
+
+ case "HR":
+ tinyMCE.switchClass(editor_id + '_hr', 'mceButtonSelected');
+ break;
+
+ case "IMG":
+ if (tinyMCE.getAttrib(node, 'name').indexOf('mce_') != 0 && tinyMCE.getAttrib(node, 'class').indexOf('mceItem') == -1) {
+ tinyMCE.switchClass(editor_id + '_image', 'mceButtonSelected');
+ }
+ break;
+ }
+ } while ((node = node.parentNode) != null);
+ },
+
+ // Private theme internal functions
+
+ // This function auto imports CSS classes into the class selection droplist
+ _setupCSSClasses : function(editor_id) {
+ var i, selectElm;
+
+ if (!TinyMCE_AdvancedTheme._autoImportCSSClasses)
+ return;
+
+ selectElm = document.getElementById(editor_id + '_styleSelect');
+
+ if (selectElm && selectElm.getAttribute('cssImported') != 'true') {
+ var csses = tinyMCE.getCSSClasses(editor_id);
+ if (csses && selectElm) {
+ for (i=0; i<csses.length; i++)
+ selectElm.options[selectElm.options.length] = new Option(csses[i], csses[i]);
+ }
+
+ // Only do this once
+ if (csses != null && csses.length > 0)
+ selectElm.setAttribute('cssImported', 'true');
+ }
+ },
+
+ _setCookie : function(name, value, expires, path, domain, secure) {
+ var curCookie = name + "=" + escape(value) +
+ ((expires) ? "; expires=" + expires.toGMTString() : "") +
+ ((path) ? "; path=" + escape(path) : "") +
+ ((domain) ? "; domain=" + domain : "") +
+ ((secure) ? "; secure" : "");
+
+ document.cookie = curCookie;
+ },
+
+ _getCookie : function(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));
+ },
+
+ _resizeTo : function(inst, w, h, set_w) {
+ var editorContainer = document.getElementById(inst.editorId + '_parent');
+ var tableElm = editorContainer.firstChild;
+ var iframe = inst.iframeElement;
+
+ if (w == null || w == "null") {
+ set_w = false;
+ w = 0;
+ }
+
+ if (h == null || h == "null")
+ return;
+
+ w = parseInt(w);
+ h = parseInt(h);
+
+ if (tinyMCE.isGecko) {
+ w += 2;
+ h += 2;
+ }
+
+ var dx = w - tableElm.clientWidth;
+ var dy = h - tableElm.clientHeight;
+
+ w = w < 1 ? 30 : w;
+ h = h < 1 ? 30 : h;
+
+ if (set_w)
+ tableElm.style.width = w + "px";
+
+ tableElm.style.height = h + "px";
+
+ iw = iframe.clientWidth + dx;
+ ih = iframe.clientHeight + dy;
+
+ iw = iw < 1 ? 30 : iw;
+ ih = ih < 1 ? 30 : ih;
+
+ if (tinyMCE.isGecko) {
+ iw -= 2;
+ ih -= 2;
+ }
+
+ if (set_w)
+ iframe.style.width = iw + "px";
+
+ iframe.style.height = ih + "px";
+
+ // Is it to small, make it bigger again
+ if (set_w) {
+ var tableBodyElm = tableElm.firstChild;
+ var minIframeWidth = tableBodyElm.scrollWidth;
+ if (inst.iframeElement.clientWidth < minIframeWidth) {
+ dx = minIframeWidth - inst.iframeElement.clientWidth;
+
+ inst.iframeElement.style.width = (iw + dx) + "px";
+ }
+ }
+
+ // Remove pesky table controls
+ inst.useCSS = false;
+ },
+
+ /**
+ * Handles resizing events.
+ */
+ _resizeEventHandler : function(e) {
+ var resizer = TinyMCE_AdvancedTheme._resizer;
+
+ // Do nothing
+ if (!resizer.resizing)
+ return;
+
+ e = typeof(e) == "undefined" ? window.event : e;
+
+ var dx = e.screenX - resizer.downX;
+ var dy = e.screenY - resizer.downY;
+ var resizeBox = resizer.resizeBox;
+ var editorId = resizer.editorId;
+
+ switch (e.type) {
+ case "mousemove":
+ var w, h;
+
+ w = resizer.width + dx;
+ h = resizer.height + dy;
+
+ w = w < 1 ? 1 : w;
+ h = h < 1 ? 1 : h;
+
+ if (resizer.horizontal)
+ resizeBox.style.width = w + "px";
+
+ resizeBox.style.height = h + "px";
+ break;
+
+ case "mouseup":
+ TinyMCE_AdvancedTheme._setResizing(e, editorId, false);
+ TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal);
+
+ // Expire in a month
+ if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {
+ var expires = new Date();
+ expires.setTime(expires.getTime() + 3600000 * 24 * 30);
+
+ // Set the cookies
+ TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires);
+ TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires);
+ }
+ break;
+ }
+ },
+
+ /**
+ * Starts/stops the editor resizing.
+ */
+ _setResizing : function(e, editor_id, state) {
+ e = typeof(e) == "undefined" ? window.event : e;
+
+ var resizer = TinyMCE_AdvancedTheme._resizer;
+ var editorContainer = document.getElementById(editor_id + '_parent');
+ var editorArea = document.getElementById(editor_id + '_parent').firstChild;
+ var resizeBox = document.getElementById(editor_id + '_resize_box');
+ var inst = tinyMCE.getInstanceById(editor_id);
+
+ if (state) {
+ // Place box over editor area
+ var width = editorArea.clientWidth;
+ var height = editorArea.clientHeight;
+
+ resizeBox.style.width = width + "px";
+ resizeBox.style.height = height + "px";
+
+ resizer.iframeWidth = inst.iframeElement.clientWidth;
+ resizer.iframeHeight = inst.iframeElement.clientHeight;
+
+ // Hide editor and show resize box
+ editorArea.style.display = "none";
+ resizeBox.style.display = "block";
+
+ // Add event handlers, only once
+ if (!resizer.eventHandlers) {
+ if (tinyMCE.isMSIE)
+ tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);
+ else
+ tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);
+
+ tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler);
+
+ resizer.eventHandlers = true;
+ }
+
+ resizer.resizing = true;
+ resizer.downX = e.screenX;
+ resizer.downY = e.screenY;
+ resizer.width = parseInt(resizeBox.style.width);
+ resizer.height = parseInt(resizeBox.style.height);
+ resizer.editorId = editor_id;
+ resizer.resizeBox = resizeBox;
+ resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true);
+ } else {
+ resizer.resizing = false;
+ resizeBox.style.display = "none";
+ editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table";
+ tinyMCE.execCommand('mceResetDesignMode');
+ }
+ },
+
+ _getColorHTML : function(id, n, cm) {
+ var i, h, cl;
+
+ h = '<span class="mceMenuLine"></span>';
+ cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(',');
+
+ h += '<table class="mceColors"><tr>';
+ for (i=0; i<cl.length; i++) {
+ c = 'tinyMCE.execInstanceCommand(\'' + id + '\', \'' + cm + '\', false, \'#' + cl[i] + '\');';
+ h += '<td><a href="javascript:' + c + '" style="background-color: #' + cl[i] + '" onclick="' + c + ';return false;"></a></td>';
+
+ if ((i+1) % 8 == 0)
+ h += '</tr><tr>';
+ }
+
+ h += '</tr></table>';
+
+ if (tinyMCE.getParam("theme_advanced_more_colors", true))
+ h += '<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\'' + id + '\',\'' + cm + '\');" class="mceMoreColors">' + tinyMCE.getLang('lang_more_colors') + '</a>';
+
+ return h;
+ },
+
+ _pickColor : function(id, cm) {
+ var inputColor, inst = tinyMCE.selectedInstance;
+
+ if (cm == 'forecolor' && inst)
+ inputColor = inst.foreColor;
+
+ if ((cm == 'backcolor' || cm == 'HiliteColor') && inst)
+ inputColor = inst.backColor;
+
+ tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) {
+ tinyMCE.execInstanceCommand(id, cm, false, c);
+ }});
+ },
+
+ _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) {
+ tinyMCE.execCommand("mceInsertContent", false, tinyMCE.createTagHTML('img', {
+ src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src), // Force absolute
+ mce_src : src,
+ alt : alt,
+ border : border,
+ hspace : hspace,
+ vspace : vspace,
+ width : width,
+ height : height,
+ align : align,
+ title : title,
+ onmouseover : onmouseover,
+ onmouseout : onmouseout
+ }));
+ },
+
+ _insertLink : function(href, target, title, onclick, style_class) {
+ tinyMCE.execCommand('mceBeginUndoLevel');
+
+ if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {
+ var doc = tinyMCE.selectedInstance.getDoc();
+ var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");
+ var newLink = false;
+
+ if (!linkElement) {
+ linkElement = doc.createElement("a");
+ newLink = true;
+ }
+
+ var mhref = href;
+ var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);");
+ mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
+
+ tinyMCE.setAttrib(linkElement, 'href', thref);
+ tinyMCE.setAttrib(linkElement, 'mce_href', mhref);
+ tinyMCE.setAttrib(linkElement, 'target', target);
+ tinyMCE.setAttrib(linkElement, 'title', title);
+ tinyMCE.setAttrib(linkElement, 'onclick', onclick);
+ tinyMCE.setAttrib(linkElement, 'class', style_class);
+
+ if (newLink) {
+ linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));
+ tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement);
+ }
+
+ return;
+ }
+
+ if (!tinyMCE.linkElement && tinyMCE.selectedInstance) {
+ if (tinyMCE.isSafari) {
+ tinyMCE.execCommand("mceInsertContent", false, '<a href="' + tinyMCE.uniqueURL + '">' + tinyMCE.selectedInstance.selection.getSelectedHTML() + '</a>');
+ } else
+ tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL);
+
+ tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);
+
+ var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);
+
+ for (var i=0; i<elementArray.length; i++) {
+ var mhref = href;
+ var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, elementArray[i]);");
+ mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
+
+ tinyMCE.setAttrib(elementArray[i], 'href', thref);
+ tinyMCE.setAttrib(elementArray[i], 'mce_href', mhref);
+ tinyMCE.setAttrib(elementArray[i], 'target', target);
+ tinyMCE.setAttrib(elementArray[i], 'title', title);
+ tinyMCE.setAttrib(elementArray[i], 'onclick', onclick);
+ tinyMCE.setAttrib(elementArray[i], 'class', style_class);
+ }
+
+ tinyMCE.linkElement = elementArray[0];
+ }
+
+ if (tinyMCE.linkElement) {
+ var mhref = href;
+ href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement);");
+ mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
+
+ tinyMCE.setAttrib(tinyMCE.linkElement, 'href', href);
+ tinyMCE.setAttrib(tinyMCE.linkElement, 'mce_href', mhref);
+ tinyMCE.setAttrib(tinyMCE.linkElement, 'target', target);
+ tinyMCE.setAttrib(tinyMCE.linkElement, 'title', title);
+ tinyMCE.setAttrib(tinyMCE.linkElement, 'onclick', onclick);
+ tinyMCE.setAttrib(tinyMCE.linkElement, 'class', style_class);
+ }
+
+ tinyMCE.execCommand('mceEndUndoLevel');
+ }
+};
+
+tinyMCE.addTheme("advanced", TinyMCE_AdvancedTheme);
+
+// Add default buttons maps for advanced theme and all internal plugins
+tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
- <title>{$lang_insert_image_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/image.js"></script>\r
- <base target="_self" />\r
-</head>\r
-<body id="image" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
-<form onsubmit="insertImage();return false;" action="#">\r
- <div class="tabs">\r
- <ul>\r
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_image_title}</a></span></li>\r
- </ul>\r
- </div>\r
-\r
- <div class="panel_wrapper">\r
- <div id="general_panel" class="panel current">\r
- <table border="0" cellpadding="4" cellspacing="0">\r
- <tr>\r
- <td nowrap="nowrap"><label for="src">{$lang_insert_image_src}</label></td>\r
- <td><table border="0" cellspacing="0" cellpadding="0">\r
- <tr>\r
- <td><input id="src" name="src" type="text" value="" style="width: 200px" onchange="getImageData();" /></td>\r
- <td id="srcbrowsercontainer"> </td>\r
- </tr>\r
- </table></td>\r
- </tr>\r
- <!-- Image list -->\r
- <script language="javascript">\r
- if (typeof(tinyMCEImageList) != "undefined" && tinyMCEImageList.length > 0) {\r
- var html = "";\r
-\r
- html += '<tr><td><label for="image_list">{$lang_image_list}</label></td>';\r
- html += '<td><select id="image_list" name="image_list" style="width: 200px" onchange="this.form.src.value=this.options[this.selectedIndex].value;resetImageData();getImageData();">';\r
- html += '<option value="">---</option>';\r
-\r
- for (var i=0; i<tinyMCEImageList.length; i++)\r
- html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>';\r
-\r
- html += '</select></td></tr>';\r
-\r
- document.write(html);\r
- }\r
- </script>\r
- <!-- /Image list -->\r
- <tr>\r
- <td nowrap="nowrap"><label for="alt">{$lang_insert_image_alt}</label></td>\r
- <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>\r
- </tr>\r
- <tr>\r
- <td nowrap="nowrap"><label for="align">{$lang_insert_image_align}</label></td>\r
- <td><select id="align" name="align">\r
- <option value="">{$lang_insert_image_align_default}</option>\r
- <option value="baseline">{$lang_insert_image_align_baseline}</option>\r
- <option value="top">{$lang_insert_image_align_top}</option>\r
- <option value="middle">{$lang_insert_image_align_middle}</option>\r
- <option value="bottom">{$lang_insert_image_align_bottom}</option>\r
- <option value="texttop">{$lang_insert_image_align_texttop}</option>\r
- <option value="absmiddle">{$lang_insert_image_align_absmiddle}</option>\r
- <option value="absbottom">{$lang_insert_image_align_absbottom}</option>\r
- <option value="left">{$lang_insert_image_align_left}</option>\r
- <option value="right">{$lang_insert_image_align_right}</option>\r
- </select></td>\r
- </tr>\r
- <tr>\r
- <td nowrap="nowrap"><label for="width">{$lang_insert_image_dimensions}</label></td>\r
- <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />\r
- x\r
- <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>\r
- </tr>\r
- <tr>\r
- <td nowrap="nowrap"><label for="border">{$lang_insert_image_border}</label></td>\r
- <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" /></td>\r
- </tr>\r
- <tr>\r
- <td nowrap="nowrap"><label for="vspace">{$lang_insert_image_vspace}</label></td>\r
- <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" /></td>\r
- </tr>\r
- <tr>\r
- <td nowrap="nowrap"><label for="hspace">{$lang_insert_image_hspace}</label></td>\r
- <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" /></td>\r
- </tr>\r
- </table>\r
- </div>\r
- </div>\r
-\r
- <div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertImage();" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
- </div>\r
-</form>\r
-</body>\r
-</html>\r
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{$lang_insert_image_title}</title>
+ <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
+ <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
+ <script language="javascript" type="text/javascript" src="jscripts/image.js"></script>
+ <base target="_self" />
+</head>
+<body id="image" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
+<form onsubmit="insertImage();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_image_title}</a></span></li>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td nowrap="nowrap"><label for="src">{$lang_insert_image_src}</label></td>
+ <td><table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="src" name="src" type="text" value="" style="width: 200px" onchange="getImageData();" /></td>
+ <td id="srcbrowsercontainer"> </td>
+ </tr>
+ </table></td>
+ </tr>
+ <!-- Image list -->
+ <script language="javascript">
+ if (typeof(tinyMCEImageList) != "undefined" && tinyMCEImageList.length > 0) {
+ var html = "";
+
+ html += '<tr><td><label for="image_list">{$lang_image_list}</label></td>';
+ html += '<td><select id="image_list" name="image_list" style="width: 200px" onchange="this.form.src.value=this.options[this.selectedIndex].value;resetImageData();getImageData();">';
+ html += '<option value="">---</option>';
+
+ for (var i=0; i<tinyMCEImageList.length; i++)
+ html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>';
+
+ html += '</select></td></tr>';
+
+ document.write(html);
+ }
+ </script>
+ <!-- /Image list -->
+ <tr>
+ <td nowrap="nowrap"><label for="alt">{$lang_insert_image_alt}</label></td>
+ <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap"><label for="align">{$lang_insert_image_align}</label></td>
+ <td><select id="align" name="align">
+ <option value="">{$lang_insert_image_align_default}</option>
+ <option value="baseline">{$lang_insert_image_align_baseline}</option>
+ <option value="top">{$lang_insert_image_align_top}</option>
+ <option value="middle">{$lang_insert_image_align_middle}</option>
+ <option value="bottom">{$lang_insert_image_align_bottom}</option>
+ <option value="texttop">{$lang_insert_image_align_texttop}</option>
+ <option value="absmiddle">{$lang_insert_image_align_absmiddle}</option>
+ <option value="absbottom">{$lang_insert_image_align_absbottom}</option>
+ <option value="left">{$lang_insert_image_align_left}</option>
+ <option value="right">{$lang_insert_image_align_right}</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap"><label for="width">{$lang_insert_image_dimensions}</label></td>
+ <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
+ x
+ <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap"><label for="border">{$lang_insert_image_border}</label></td>
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap"><label for="vspace">{$lang_insert_image_vspace}</label></td>
+ <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap"><label for="hspace">{$lang_insert_image_hspace}</label></td>
+ <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" /></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <div style="float: left">
+ <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertImage();" />
+ </div>
+
+ <div style="float: right">
+ <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </div>
+</form>
+</body>
+</html>
-function TinyMCE_Engine(){var ua;this.majorVersion="2";this.minorVersion="1.1.1";this.releaseDate="2007-05-14";this.instances=[];this.switchClassCache=[];this.windowArgs=[];this.loadedFiles=[];this.pendingFiles=[];this.loadingIndex=0;this.configs=[];this.currentConfig=0;this.eventHandlers=[];this.log=[];this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.settings=[];ua=navigator.userAgent;this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.isMSIE5=this.isMSIE&&(ua.indexOf('MSIE 5')!=-1);this.isMSIE5_0=this.isMSIE&&(ua.indexOf('MSIE 5.0')!=-1);this.isMSIE7=this.isMSIE&&(ua.indexOf('MSIE 7')!=-1);this.isGecko=ua.indexOf('Gecko')!=-1;this.isSafari=ua.indexOf('Safari')!=-1;this.isOpera=window['opera']&&opera.buildNumber?true:false;this.isMac=ua.indexOf('Mac')!=-1;this.isNS7=ua.indexOf('Netscape/7')!=-1;this.isNS71=ua.indexOf('Netscape/7.1')!=-1;this.dialogCounter=0;this.plugins=[];this.themes=[];this.menus=[];this.loadedPlugins=[];this.buttonMap=[];this.isLoaded=false;if(this.isOpera){this.isMSIE=true;this.isGecko=false;this.isSafari=false}this.isIE=this.isMSIE;this.isRealIE=this.isMSIE&&!this.isOpera;this.idCounter=0};TinyMCE_Engine.prototype={init:function(settings){var theme,nl,baseHREF="",i,cssPath,entities,h,p,src,elements=[],head;if(this.isMSIE5_0)return;this.settings=settings;if(typeof(document.execCommand)=='undefined')return;if(!tinyMCE.baseURL){head=document.getElementsByTagName('head')[0];if(head){for(i=0,nl=head.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i])}for(i=0,nl=document.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i]);nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)baseHREF=nl[i].href}for(i=0;i<elements.length;i++){if(elements[i].src&&(elements[i].src.indexOf("tiny_mce.js")!=-1||elements[i].src.indexOf("tiny_mce_dev.js")!=-1||elements[i].src.indexOf("tiny_mce_src.js")!=-1||elements[i].src.indexOf("tiny_mce_gzip")!=-1)){src=elements[i].src;tinyMCE.srcMode=(src.indexOf('_src')!=-1||src.indexOf('_dev')!=-1)?'_src':'';tinyMCE.gzipMode=src.indexOf('_gzip')!=-1;src=src.substring(0,src.lastIndexOf('/'));if(settings.exec_mode=="src"||settings.exec_mode=="normal")tinyMCE.srcMode=settings.exec_mode=="src"?'_src':'';if(baseHREF!==''&&src.indexOf('://')==-1)tinyMCE.baseURL=baseHREF+src;else tinyMCE.baseURL=src;break}}}this.documentBasePath=document.location.href;if(this.documentBasePath.indexOf('?')!=-1)this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.indexOf('?'));this.documentURL=this.documentBasePath;this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.lastIndexOf('/'));if(tinyMCE.baseURL.indexOf('://')==-1&&tinyMCE.baseURL.charAt(0)!='/'){tinyMCE.baseURL=this.documentBasePath+"/"+tinyMCE.baseURL}this._def("mode","none");this._def("theme","advanced");this._def("plugins","",true);this._def("language","en");this._def("docs_language",this.settings.language);this._def("elements","");this._def("textarea_trigger","mce_editable");this._def("editor_selector","");this._def("editor_deselector","mceNoEditor");this._def("valid_elements","+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");this._def("extended_valid_elements","");this._def("invalid_elements","");this._def("encoding","");this._def("urlconverter_callback",tinyMCE.getParam("urlconvertor_callback","TinyMCE_Engine.prototype.convertURL"));this._def("save_callback","");this._def("force_br_newlines",false);this._def("force_p_newlines",true);this._def("add_form_submit_trigger",true);this._def("relative_urls",true);this._def("remove_script_host",true);this._def("focus_alert",true);this._def("document_base_url",this.documentURL);this._def("visual",true);this._def("visual_table_class","mceVisualAid");this._def("setupcontent_callback","");this._def("fix_content_duplication",true);this._def("custom_undo_redo",true);this._def("custom_undo_redo_levels",-1);this._def("custom_undo_redo_keyboard_shortcuts",true);this._def("custom_undo_redo_restore_selection",true);this._def("custom_undo_redo_global",false);this._def("verify_html",true);this._def("apply_source_formatting",false);this._def("directionality","ltr");this._def("cleanup_on_startup",false);this._def("inline_styles",false);this._def("convert_newlines_to_brs",false);this._def("auto_reset_designmode",true);this._def("entities","39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",true);this._def("entity_encoding","named");this._def("cleanup_callback","");this._def("add_unload_trigger",true);this._def("ask",false);this._def("nowrap",false);this._def("auto_resize",false);this._def("auto_focus",false);this._def("cleanup",true);this._def("remove_linebreaks",true);this._def("button_tile_map",false);this._def("submit_patch",true);this._def("browsers","msie,safari,gecko,opera",true);this._def("dialog_type","window");this._def("accessibility_warnings",true);this._def("accessibility_focus",true);this._def("merge_styles_invalid_parents","");this._def("force_hex_style_colors",true);this._def("trim_span_elements",true);this._def("convert_fonts_to_spans",false);this._def("doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",true);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');this._def("gecko_spellcheck",false);this._def("hide_selects_on_submit",true);this._def("forced_root_block",false);this._def("remove_trailing_nbsp",false);if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings.browsers.indexOf('msie')==-1)return;if(this.isGecko&&this.settings.browsers.indexOf('gecko')==-1)return;if(this.isSafari&&this.settings.browsers.indexOf('safari')==-1)return;if(this.isOpera&&this.settings.browsers.indexOf('opera')==-1)return;baseHREF=tinyMCE.settings.document_base_url;h=document.location.href;p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings.document_base_url=baseHREF;tinyMCE.settings.document_base_prefix=h}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings.base_href=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings.theme;this.inlineStrict='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';this.inlineTransitional='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';this.blockElms='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';this.blockRegExp=new RegExp("^("+this.blockElms+")$","i");this.posKeyCodes=[13,45,36,35,33,34,37,38,39,40];this.uniqueURL='javascript:void(091039730);';this.uniqueTag='<div id="mceTMPElement" style="display: none">TMP</div>';this.callbacks=['onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup','removeInstance'];this.settings.theme_href=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isIE||tinyMCE.isOpera)this.settings.force_br_newlines=false;if(tinyMCE.getParam("popups_css",false)){cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.popups_css=this.documentBasePath+"/"+cssPath;else this.settings.popups_css=cssPath}else this.settings.popups_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.editor_css=this.documentBasePath+"/"+cssPath;else this.settings.editor_css=cssPath}else{if(this.settings.editor_css!=='')this.settings.editor_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css"}if(this.configs.length==0){if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isRealIE){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad)}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents()}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings.theme+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings.language+'.js');this.loadCSS(this.settings.editor_css);p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){if(p[i].charAt(0)!='-')this.loadScript(tinyMCE.baseURL+'/plugins/'+p[i]+'/editor_plugin'+tinyMCE.srcMode+'.js')}}if(tinyMCE.getParam('entity_encoding')=='named'){settings.cleanup_entities=[];entities=tinyMCE.getParam('entities','',true,',');for(i=0;i<entities.length;i+=2)settings.cleanup_entities['c'+entities[i]]=entities[i+1]}settings.index=this.configs.length;this.configs[this.configs.length]=settings;this.loadNextScript();if(this.isIE&&!this.isOpera){try{document.execCommand('BackgroundImageCache',false,true)}catch(e){}}this.xmlEncodeRe=new RegExp('[<>&"]','g')},_addUnloadEvents:function(){var st=tinyMCE.settings.add_unload_trigger;if(tinyMCE.isIE){if(st){tinyMCE.addEvent(window,"unload",TinyMCE_Engine.prototype.unloadHandler);tinyMCE.addEvent(window.document,"beforeunload",TinyMCE_Engine.prototype.unloadHandler)}}else{if(st)tinyMCE.addEvent(window,"unload",function(){tinyMCE.triggerSave(true,true)})}},_def:function(key,def_val,t){var v=tinyMCE.getParam(key,def_val);v=t?v.replace(/\s+/g,""):v;this.settings[key]=v},hasPlugin:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},addPlugin:function(n,p){var op=this.plugins[n];p.baseURL=op?op.baseURL:tinyMCE.baseURL+"/plugins/"+n;this.plugins[n]=p;this.loadNextScript()},setPluginBaseURL:function(n,u){var op=this.plugins[n];if(op)op.baseURL=u;else this.plugins[n]={baseURL:u}},loadPlugin:function(n,u){u=u.indexOf('.js')!=-1?u.substring(0,u.lastIndexOf('/')):u;u=u.charAt(u.length-1)=='/'?u.substring(0,u.length-1):u;this.plugins[n]={baseURL:u};this.loadScript(u+"/editor_plugin"+(tinyMCE.srcMode?'_src':'')+".js")},hasTheme:function(n){return typeof(this.themes[n])!="undefined"&&this.themes[n]!=null},addTheme:function(n,t){this.themes[n]=t;this.loadNextScript()},addMenu:function(n,m){this.menus[n]=m},hasMenu:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},loadScript:function(url){var i;for(i=0;i<this.loadedFiles.length;i++){if(this.loadedFiles[i]==url)return}if(tinyMCE.settings.strict_loading_mode)this.pendingFiles[this.pendingFiles.length]=url;else document.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'"></script>');this.loadedFiles[this.loadedFiles.length]=url},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex<this.pendingFiles.length){se=d.createElementNS('http://www.w3.org/1999/xhtml','script');se.setAttribute('language','javascript');se.setAttribute('type','text/javascript');se.setAttribute('src',this.pendingFiles[this.loadingIndex++]);d.getElementsByTagName("head")[0].appendChild(se)}else this.loadingIndex=-1;},loadCSS:function(url){var ar=url.replace(/\s+/,'').split(',');var lflen=0,csslen=0,skip=false;var x=0,i=0,nl,le;for(x=0,csslen=ar.length;x<csslen;x++){if(ar[x]!=null&&ar[x]!='null'&&ar[x].length>0){for(i=0,lflen=this.loadedFiles.length;i<lflen;i++){if(this.loadedFiles[i]==ar[x]){skip=true;break}}if(!skip){if(tinyMCE.settings.strict_loading_mode){nl=document.getElementsByTagName("head");le=document.createElement('link');le.setAttribute('href',ar[x]);le.setAttribute('rel','stylesheet');le.setAttribute('type','text/css');nl[0].appendChild(le)}else document.write('<link href="'+ar[x]+'" rel="stylesheet" type="text/css" />');this.loadedFiles[this.loadedFiles.length]=ar[x]}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x<csslen;x++){css_file=css_ary[x];if(css_file!=null&&css_file!='null'&&css_file.length>0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm)}else doc.createStyleSheet(css_file)}}},confirmAdd:function(e,settings){var elm=tinyMCE.isIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings.convert_on_click||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang.lang_edit_confirm)))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true')},updateContent:function(form_element_name){var formElement,n,inst,doc;formElement=document.getElementById(form_element_name);for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid)}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document)},removeInstance:function(ti){var t=[],n,i;for(n in tinyMCE.instances){i=tinyMCE.instances[n];if(tinyMCE.isInstance(i)&&ti!=i)t[n]=i}tinyMCE.instances=t;n=[];t=tinyMCE.undoLevels;for(i=0;i<t.length;i++){if(t[i]!=ti)n.push(t[i])}tinyMCE.undoLevels=n;tinyMCE.undoIndex=n.length;tinyMCE.dispatchCallback(ti,'remove_instance_callback','removeInstance',ti);return ti},removeMCEControl:function(editor_id){var inst=tinyMCE.getInstanceById(editor_id),h,re,ot,tn;if(inst){inst.switchSettings();editor_id=inst.editorId;h=tinyMCE.getContent(editor_id);this.removeInstance(inst);tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;re=document.getElementById(editor_id+"_parent");ot=inst.oldTargetElement;tn=ot.nodeName.toLowerCase();if(tn=="textarea"||tn=="input"){re.parentNode.removeChild(re);ot.style.display="inline";ot.value=h}else{ot.innerHTML=h;ot.style.display='block';re.parentNode.insertBefore(ot,re);re.parentNode.removeChild(re)}}},triggerSave:function(skip_cleanup,skip_callback){var inst,n;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.triggerSave(skip_cleanup,skip_callback)}},resetForm:function(form_index){var i,inst,n,formObj=document.forms[form_index];for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();for(i=0;i<formObj.elements.length;i++){if(inst.formTargetElementId==formObj.elements[i].name)inst.getBody().innerHTML=inst.startContent}}},execInstanceCommand:function(editor_id,command,user_interface,value,focus){var inst=tinyMCE.getInstanceById(editor_id),r;if(inst){r=inst.selection.getRng();if(typeof(focus)=="undefined")focus=true;if(focus&&(!r||!r.item))inst.contentWindow.focus();inst.autoResetDesignMode();this.selectedElement=inst.getFocusElement();inst.select();tinyMCE.execCommand(command,user_interface,value);if(tinyMCE.isIE&&window.event!=null)tinyMCE.cancelEvent(window.event)}},execCommand:function(command,user_interface,value){var inst=tinyMCE.selectedInstance,n,pe,te;user_interface=user_interface?user_interface:false;value=value?value:null;if(inst)inst.switchSettings();switch(command){case"Undo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex>0){tinyMCE.nextUndoRedoAction='Undo';inst=this.undoLevels[--this.undoIndex];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Undo')}}else inst.execCommand('Undo');return true;case"Redo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex<=this.undoLevels.length-1){tinyMCE.nextUndoRedoAction='Redo';inst=this.undoLevels[this.undoIndex++];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Redo')}}else inst.execCommand('Redo');return true;case'mceFocus':inst=tinyMCE.getInstanceById(value);if(inst)inst.getWin().focus();return;case"mceAddControl":case"mceAddEditor":tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceAddFrameControl":tinyMCE.addMCEControl(tinyMCE._getElementById(value.element,value.document),value.element,value.document);return;case"mceRemoveControl":case"mceRemoveEditor":tinyMCE.removeMCEControl(value);return;case"mceToggleEditor":inst=tinyMCE.getInstanceById(value);if(inst){pe=document.getElementById(inst.editorId+'_parent');te=inst.oldTargetElement;if(typeof(inst.enabled)=='undefined')inst.enabled=true;inst.enabled=!inst.enabled;if(!inst.enabled){pe.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')te.value=inst.getHTML();else te.innerHTML=inst.getHTML();te.style.display=inst.oldTargetDisplay;tinyMCE.dispatchCallback(inst,'hide_instance_callback','hideInstance',inst)}else{pe.style.display='block';te.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')inst.setHTML(te.value);else inst.setHTML(te.innerHTML);inst.useCSS=false;tinyMCE.dispatchCallback(inst,'show_instance_callback','showInstance',inst)}}else tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceResetDesignMode":if(tinyMCE.isGecko){for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;try{tinyMCE.instances[n].getDoc().designMode="off";tinyMCE.instances[n].getDoc().designMode="on";tinyMCE.instances[n].useCSS=false}catch(e){}}}return}if(inst){inst.execCommand(command,user_interface,value)}else if(tinyMCE.settings.focus_alert)alert(tinyMCELang.lang_focus_alert)},_createIFrame:function(replace_element,doc,win){var iframe,id=replace_element.getAttribute("id");var aw,ah;if(typeof(doc)=="undefined")doc=document;if(typeof(win)=="undefined")win=window;iframe=doc.createElement("iframe");aw=""+tinyMCE.settings.area_width;ah=""+tinyMCE.settings.area_height;if(aw.indexOf('%')==-1){aw=parseInt(aw);aw=(isNaN(aw)||aw<0)?300:aw;aw=aw+"px"}if(ah.indexOf('%')==-1){ah=parseInt(ah);ah=(isNaN(ah)||ah<0)?240:ah;ah=ah+"px"}iframe.setAttribute("id",id);iframe.setAttribute("name",id);iframe.setAttribute("class","mceEditorIframe");iframe.setAttribute("border","0");iframe.setAttribute("frameBorder","0");iframe.setAttribute("marginWidth","0");iframe.setAttribute("marginHeight","0");iframe.setAttribute("leftMargin","0");iframe.setAttribute("topMargin","0");iframe.setAttribute("width",aw);iframe.setAttribute("height",ah);iframe.setAttribute("allowtransparency","true");iframe.className='mceEditorIframe';if(tinyMCE.settings.auto_resize)iframe.setAttribute("scrolling","no");if(tinyMCE.isRealIE)iframe.setAttribute("src",this.settings.default_document);iframe.style.width=aw;iframe.style.height=ah;if(tinyMCE.settings.strict_loading_mode)iframe.style.marginBottom='-5px';if(tinyMCE.isRealIE)replace_element.outerHTML=iframe.outerHTML;else replace_element.parentNode.replaceChild(iframe,replace_element);if(tinyMCE.isRealIE)return win.frames[id];else return iframe},setupContent:function(editor_id){var inst=tinyMCE.instances[editor_id],i,doc=inst.getDoc(),head=doc.getElementsByTagName('head').item(0);var content=inst.startContent,contentElement,body;if(tinyMCE.settings.strict_loading_mode){content=content.replace(/</g,'<');content=content.replace(/>/g,'>');content=content.replace(/"/g,'"');content=content.replace(/&/g,'&')}tinyMCE.selectedInstance=inst;inst.switchSettings();if(!tinyMCE.isIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm"}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return}if(!head||!doc.body){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings.theme+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings.content_css);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo')}for(i=1;i<=6;i++)inst.addShortcut('ctrl',''+i,'','FormatBlock',false,'<h'+i+'>');inst.addShortcut('ctrl','7','','FormatBlock',false,'<p>');inst.addShortcut('ctrl','8','','FormatBlock',false,'<div>');inst.addShortcut('ctrl','9','','FormatBlock',false,'<address>');if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline')}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getBody().setAttribute('id','mceSpanFonts');if(tinyMCE.settings.nowrap)doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings.directionality;doc.editorId=editor_id;if(!tinyMCE.isIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings.base_href);if(tinyMCE.settings.convert_newlines_to_brs){content=tinyMCE.regexpReplace(content,"\r\n","<br />","gi");content=tinyMCE.regexpReplace(content,"\r","<br />","gi");content=tinyMCE.regexpReplace(content,"\n","<br />","gi")}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings.force_br_newlines)doc.styleSheets[0].addRule("p","margin: 0;");body=inst.getBody();body.editorId=editor_id}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isIE){contentElement=inst.getDoc().createElement("body");doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings.cleanup_on_startup)tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else tinyMCE.setInnerHTML(inst.getBody(),content);tinyMCE.convertAllRelativeURLs(inst.getBody())}else{if(tinyMCE.settings.cleanup_on_startup){tinyMCE._setHTML(inst.getDoc(),content);try{tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,inst.contentDocument,this.settings,inst.getBody()))}catch(e){}}else tinyMCE._setHTML(inst.getDoc(),content)}tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings.visual,inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch)}}inst.select();tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}if(tinyMCE.isGecko)inst.getBody().spellcheck=tinyMCE.getParam("gecko_spellcheck");tinyMCE._removeInternal(inst.getBody());inst.select();tinyMCE.triggerNodeChange(false,true)},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"','gi'),'href="$1" mce_href="$1"')}return s},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}},removeTinyMCEFormElements:function(form_obj){var i,elementId;if(!tinyMCE.getParam('hide_selects_on_submit'))return;if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form")}if(form_obj==null)return;for(i=0;i<form_obj.elements.length;i++){elementId=form_obj.elements[i].name?form_obj.elements[i].name:form_obj.elements[i].id;if(elementId.indexOf('mce_editor_')==0)form_obj.elements[i].disabled=true}},handleEvent:function(e){var inst=tinyMCE.selectedInstance,i,elm,keys;if(typeof(tinyMCE)=="undefined")return true;if(tinyMCE.executeCallback(tinyMCE.selectedInstance,'handle_event_callback','handleEvent',e))return false;switch(e.type){case"beforedeactivate":case"blur":if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.execCommand('mceEndTyping');tinyMCE.hideMenus();return;case"drop":case"beforepaste":if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.setBaseHREF(null);if(tinyMCE.isRealIE){var ife=tinyMCE.selectedInstance.iframeElement;if(ife.style.height.indexOf('%')!=-1){ife._oldHeight=ife.style.height;ife.style.height=ife.clientHeight}}window.setTimeout("tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings.base_href);tinyMCE._resetIframeHeight();",1);return;case"submit":tinyMCE.formSubmit(tinyMCE.isMSIE?window.event.srcElement:e.target);return;case"reset":var formObj=tinyMCE.isIE?window.event.srcElement:e.target;for(i=0;i<document.forms.length;i++){if(document.forms[i]==formObj)window.setTimeout('tinyMCE.resetForm('+i+');',10)}return;case"keypress":if(inst&&inst.handleShortcut(e))return false;if(e.target.editorId){tinyMCE.instances[e.target.editorId].select()}else{if(e.target.ownerDocument.editorId)tinyMCE.instances[e.target.ownerDocument.editorId].select()}if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();if((tinyMCE.isGecko||tinyMCE.isOpera||tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&e.keyCode==13&&!e.shiftKey){if(TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance,e)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if((tinyMCE.isGecko&&!tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if(tinyMCE.isIE&&tinyMCE.settings.force_br_newlines&&e.keyCode==13){if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance){var sel=tinyMCE.selectedInstance.getDoc().selection;var rng=sel.createRange();if(tinyMCE.getParentElement(rng.parentElement(),"li")!=null)return false;e.returnValue=false;e.cancelBubble=true;rng.pasteHTML("<br />");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false)}return false;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;inst._fixRootBlocks();if(inst.settings.remove_trailing_nbsp)inst._fixTrailingNbsp();if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings.visual,tinyMCE.selectedInstance);if(tinyMCE.isIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isIE&&e.type=="keyup"&&e.keyCode==13){elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML=" ";else elm.innerHTML=" "}}}keys=tinyMCE.posKeyCodes;var posKey=false;for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){posKey=true;break}}if(tinyMCE.isIE&&tinyMCE.settings.custom_undo_redo){keys=[8,46];for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){if(e.type=="keyup")tinyMCE.triggerNodeChange(false)}}}if(e.keyCode==17)return true;if(tinyMCE.isGecko){if(!posKey&&e.type=="keyup"&&!e.ctrlKey||(e.ctrlKey&&(e.keyCode==86||e.keyCode==88)))tinyMCE.execCommand("mceStartTyping")}else{if(!posKey&&e.type=="keyup")tinyMCE.execCommand("mceStartTyping")}if(e.type=="keydown"&&(posKey||e.ctrlKey)&&inst)inst.undoBookmark=inst.selection.getBookmark();if(e.type=="keyup"&&(posKey||e.ctrlKey))tinyMCE.execCommand("mceEndTyping");if(posKey&&e.type=="keyup")tinyMCE.triggerNodeChange(false);if(tinyMCE.isIE&&e.ctrlKey)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);break;case"mousedown":case"mouseup":case"click":case"dblclick":case"focus":tinyMCE.hideMenus();if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.switchSettings();tinyMCE.selectedInstance.isFocused=true}var targetBody=tinyMCE.getParentElement(e.target,"html");for(var instanceName in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[instanceName]))continue;inst=tinyMCE.instances[instanceName];inst.autoResetDesignMode();if(inst.getBody().parentNode==targetBody){inst.select();tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");tinyMCE.imgElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"img");break}}if(!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark&&(e.type=="mouseup"||e.type=="dblclick"))tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark=tinyMCE.selectedInstance.selection.getBookmark();if(e.type!="focus")tinyMCE.selectedNode=null;tinyMCE.triggerNodeChange(false);tinyMCE.execCommand("mceEndTyping");if(e.type=="mouseup")tinyMCE.execCommand("mceAddUndoLevel");if(!tinyMCE.selectedInstance&&e.target.editorId)tinyMCE.instances[e.target.editorId].select();return false}},getButtonHTML:function(id,lang,img,cmd,ui,val){var h='',m,x,io='';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.isRealIE)io='onmouseover="tinyMCE.lastHover = this;"';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=this.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}else{h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceButtonNormal" target="_self">';h+='<img src="'+img+'" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}return h},getMenuButtonHTML:function(id,lang,img,mcmd,cmd,ui,val){var h='',m,x;mcmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+mcmd+'\');';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: '+x+'px 0" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}else{if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}return h},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'')},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i<a.length;i++)this.buttonMap[a[i]]=i},formSubmit:function(f,p){var n,inst,found=false;if(f.form)f=f.form;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formElement){if(f==inst.formElement.form){found=true;inst.isNotDirty=true}}}if(found){tinyMCE.removeTinyMCEFormElements(f);tinyMCE.triggerSave()}if(f.mceOldSubmit&&p)f.mceOldSubmit()},submitPatch:function(){tinyMCE.formSubmit(this,true)},onLoad:function(){var r,i,c,mode,trigger,elements,element,settings,elementId,elm;var selector,deselector,elementRefAr,form;if(tinyMCE.settings.strict_loading_mode&&this.loadingIndex!=-1){window.setTimeout('tinyMCE.onLoad();',1);return}if(tinyMCE.isRealIE&&window.event.type=="readystatechange"&&document.readyState!="complete")return true;if(tinyMCE.isLoaded)return true;tinyMCE.isLoaded=true;if(tinyMCE.isRealIE&&document.body&&window.location.href!=window.top.location.href){r=document.body.createTextRange();r.collapse(true);r.select()}tinyMCE.dispatchCallback(null,'onpageload','onPageLoad');for(c=0;c<tinyMCE.configs.length;c++){tinyMCE.settings=tinyMCE.configs[c];selector=tinyMCE.getParam("editor_selector");deselector=tinyMCE.getParam("editor_deselector");elementRefAr=[];if(document.forms&&tinyMCE.settings.add_form_submit_trigger&&!tinyMCE.submitTriggers){for(i=0;i<document.forms.length;i++){form=document.forms[i];tinyMCE.addEvent(form,"submit",TinyMCE_Engine.prototype.handleEvent);tinyMCE.addEvent(form,"reset",TinyMCE_Engine.prototype.handleEvent);tinyMCE.submitTriggers=true;if(tinyMCE.settings.submit_patch){try{form.mceOldSubmit=form.submit;form.submit=TinyMCE_Engine.prototype.submitPatch}catch(e){}}}}mode=tinyMCE.settings.mode;switch(mode){case"exact":elements=tinyMCE.getParam('elements','',true,',');for(i=0;i<elements.length;i++){element=tinyMCE._getElementById(elements[i]);trigger=element?element.getAttribute(tinyMCE.settings.textarea_trigger):"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(element,"class")))continue;if(trigger=="false")continue;if((tinyMCE.settings.ask||tinyMCE.settings.convert_on_click)&&element){elementRefAr[elementRefAr.length]=element;continue}if(element)tinyMCE.addMCEControl(element,elements[i])}break;case"specific_textareas":case"textareas":elements=document.getElementsByTagName("textarea");for(i=0;i<elements.length;i++){elm=elements.item(i);trigger=elm.getAttribute(tinyMCE.settings.textarea_trigger);if(selector!==''&&!new RegExp('\\b'+selector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if(selector!=='')trigger=selector!==''?"true":"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if((mode=="specific_textareas"&&trigger=="true")||(mode=="textareas"&&trigger!="false"))elementRefAr[elementRefAr.length]=elm}break}for(i=0;i<elementRefAr.length;i++){element=elementRefAr[i];elementId=element.name?element.name:element.id;if(tinyMCE.settings.ask||tinyMCE.settings.convert_on_click){if(tinyMCE.isGecko){settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});if(element.nodeName!="TEXTAREA"&&element.nodeName!="INPUT")tinyMCE.addEvent(element,"click",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});}else{settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});tinyMCE.addEvent(element,"click",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});}}else tinyMCE.addMCEControl(element,elementId)}if(tinyMCE.settings.auto_focus){window.setTimeout(function(){var inst=tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);inst.selection.selectNode(inst.getBody(),true,true);inst.contentWindow.focus()},100)}tinyMCE.dispatchCallback(null,'oninit','onInit')}},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.isTinyMCE_Control},getParam:function(name,default_value,strip_whitespace,split_chr){var i,outArray,value=(typeof(this.settings[name])=="undefined")?default_value:this.settings[name];if(value=="true"||value=="false")return(value=="true");if(strip_whitespace)value=tinyMCE.regexpReplace(value,"[ \t\r\n]","");if(typeof(split_chr)!="undefined"&&split_chr!=null){value=value.split(split_chr);outArray=[];for(i=0;i<value.length;i++){if(value[i]&&value[i]!=='')outArray[outArray.length]=value[i]}value=outArray}return value},getLang:function(name,default_value,parse_entities,va){var v=(typeof(tinyMCELang[name])=="undefined")?default_value:tinyMCELang[name],n;if(parse_entities)v=tinyMCE.entityDecode(v);if(va){for(n in va)v=this.replaceVar(v,n,va[n])}return v},entityDecode:function(s){var e=document.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue},addToLang:function(prefix,ar){var k;for(k in ar){if(typeof(ar[k])=='function')continue;tinyMCELang[(k.indexOf('lang_')==-1?'lang_':'')+(prefix!==''?(prefix+"_"):'')+k]=ar[k]}this.loadNextScript()},triggerNodeChange:function(focus,setup_content){var elm,inst,editorId,undoIndex=-1,undoLevels=-1,doc,anySelection=false,st;if(tinyMCE.selectedInstance){inst=tinyMCE.selectedInstance;elm=(typeof(setup_content)!="undefined"&&setup_content)?tinyMCE.selectedElement:inst.getFocusElement();editorId=inst.editorId;st=inst.selection.getSelectedText();if(tinyMCE.settings.auto_resize)inst.resizeToContent();if(setup_content&&tinyMCE.isGecko&&inst.isHidden())elm=inst.getBody();inst.switchSettings();if(tinyMCE.selectedElement)anySelection=(tinyMCE.selectedElement.nodeName.toLowerCase()=="img")||(st&&st.length>0);if(tinyMCE.settings.custom_undo_redo){undoIndex=inst.undoRedo.undoIndex;undoLevels=inst.undoRedo.undoLevels.length}tinyMCE.dispatchCallback(inst,'handle_node_change_callback','handleNodeChange',editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection,setup_content)}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus()},_customCleanup:function(inst,type,content){var pl,po,i,customCleanup;customCleanup=tinyMCE.settings.cleanup_callback;if(customCleanup!='')content=tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback,window)(type,content,inst);po=tinyMCE.themes[tinyMCE.settings.theme];if(po&&po.cleanup)content=po.cleanup(type,content,inst);pl=inst.plugins;for(i=0;i<pl.length;i++){po=tinyMCE.plugins[pl[i]];if(po&&po.cleanup)content=po.cleanup(type,content,inst)}return content},setContent:function(h){if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.execCommand('mceSetContent',false,h);tinyMCE.selectedInstance.repaint()}},importThemeLanguagePack:function(name){if(typeof(name)=="undefined")name=tinyMCE.settings.theme;tinyMCE.loadScript(tinyMCE.baseURL+'/themes/'+name+'/langs/'+tinyMCE.settings.language+'.js')},importPluginLanguagePack:function(name){var b=tinyMCE.baseURL+'/plugins/'+name;if(this.plugins[name])b=this.plugins[name].baseURL;tinyMCE.loadScript(b+'/langs/'+tinyMCE.settings.language+'.js')},applyTemplate:function(h,ag){return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}','gi'),function(m,s){if(s.indexOf('lang_')==0&&tinyMCELang[s])return tinyMCELang[s];if(ag&&ag[s])return ag[s];if(tinyMCE.settings[s])return tinyMCE.settings[s];if(m=='themeurl')return tinyMCE.themeURL;return m})},replaceVar:function(h,r,v){return h.replace(new RegExp('{\\\$'+r+'}','g'),v)},openWindow:function(template,args){var html,width,height,x,y,resizable,scrollbars,url,name,win,modal,features;args=!args?{}:args;args.mce_template_file=template.file;args.mce_width=template.width;args.mce_height=template.height;tinyMCE.windowArgs=args;html=template.html;if(!(width=parseInt(template.width)))width=320;if(!(height=parseInt(template.height)))height=200;if(tinyMCE.isIE)height+=40;else height+=20;x=parseInt(screen.width/ 2.0) - (width /2.0);y=parseInt(screen.height/ 2.0) - (height /2.0);resizable=(args&&args.resizable)?args.resizable:"no";scrollbars=(args&&args.scrollbars)?args.scrollbars:"no";if(template.file.charAt(0)!='/'&&template.file.indexOf('://')==-1)url=tinyMCE.baseURL+"/themes/"+tinyMCE.getParam("theme")+"/"+template.file;else url=template.file;for(name in args){if(typeof(args[name])=='function')continue;url=tinyMCE.replaceVar(url,name,escape(args[name]))}if(html){html=tinyMCE.replaceVar(html,"css",this.settings.popups_css);html=tinyMCE.applyTemplate(html,args);win=window.open("","mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog=yes,minimizable="+resizable+",modal=yes,width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}win.document.write(html);win.document.close();win.resizeTo(width,height);win.focus()}else{if((tinyMCE.isRealIE)&&resizable!='yes'&&tinyMCE.settings.dialog_type=="modal"){height+=10;features="resizable:"+resizable+";scroll:"+scrollbars+";status:yes;center:yes;help:no;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";window.showModalDialog(url,window,features)}else{modal=(resizable=="yes")?"no":"yes";if(tinyMCE.isGecko&&tinyMCE.isMac)modal="no";if(template.close_previous!="no")try{tinyMCE.lastWindow.close()}catch(ex){}win=window.open(url,"mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog="+modal+",minimizable="+resizable+",modal="+modal+",width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}if(template.close_previous!="no")tinyMCE.lastWindow=win;try{win.resizeTo(width,height)}catch(e){}if(tinyMCE.isGecko){if(win.document.defaultView.statusbar.visible)win.resizeBy(0,tinyMCE.isMac?10:24)}win.focus()}}},closeWindow:function(win){win.close()},getVisualAidClass:function(class_name,state){var i,classNames,ar,className,aidClass=tinyMCE.settings.visual_table_class;if(typeof(state)=="undefined")state=tinyMCE.settings.visual;classNames=[];ar=class_name.split(' ');for(i=0;i<ar.length;i++){if(ar[i]==aidClass)ar[i]="";if(ar[i]!=='')classNames[classNames.length]=ar[i]}if(state)classNames[classNames.length]=aidClass;className="";for(i=0;i<classNames.length;i++){if(i>0)className+=" ";className+=classNames[i]}return className},handleVisualAid:function(el,deep,state,inst,skip_dispatch){var i,x,y,tableElement,anchorName,oldW,oldH,bo,cn;if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);tableElement=null;switch(el.nodeName){case"TABLE":oldW=el.style.width;oldH=el.style.height;bo=tinyMCE.getAttrib(el,"border");bo=bo==''||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(y=0;y<el.rows.length;y++){for(x=0;x<el.rows[y].cells.length;x++){cn=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x],"class"),state&&bo);tinyMCE.setAttrib(el.rows[y].cells[x],"class",cn)}}break;case"A":anchorName=tinyMCE.getAttrib(el,"name");if(anchorName!==''&&state){el.title=anchorName;tinyMCE.addCSSClass(el,'mceItemAnchor')}else if(anchorName!==''&&!state)el.className='';break}if(deep&&el.hasChildNodes()){for(i=0;i<el.childNodes.length;i++)tinyMCE.handleVisualAid(el.childNodes[i],deep,state,inst,true)}},fixGeckoBaseHREFBug:function(m,e,h){var xsrc,xhref;if(tinyMCE.isGecko){if(m==1){h=h.replace(/\ssrc=/gi," mce_tsrc=");h=h.replace(/\shref=/gi," mce_thref=");return h}else{if(!new RegExp('(src|href)=','g').test(h))return h;tinyMCE.selectElements(e,'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK',function(n){xsrc=tinyMCE.getAttrib(n,"mce_tsrc");xhref=tinyMCE.getAttrib(n,"mce_thref");if(xsrc!==''){try{n.src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xsrc)}catch(e){}n.removeAttribute("mce_tsrc")}if(xhref!==''){try{n.href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xhref)}catch(e){}n.removeAttribute("mce_thref")}return false});tinyMCE.selectNodes(e,function(n){if(n.nodeType==3||n.nodeType==8){n.nodeValue=n.nodeValue.replace(/\smce_tsrc=/gi," src=");n.nodeValue=n.nodeValue.replace(/\smce_thref=/gi," href=")}return false})}}return h},_setHTML:function(doc,html_content){var i,html,paras,node;html_content=tinyMCE.cleanupHTMLCode(html_content);try{tinyMCE.setInnerHTML(doc.body,html_content)}catch(e){if(this.isMSIE)doc.body.createTextRange().pasteHTML(html_content)}if(tinyMCE.isIE&&tinyMCE.settings.fix_content_duplication){paras=doc.getElementsByTagName("P");for(i=0;i<paras.length;i++){node=paras[i];while((node=node.parentNode)!=null){if(node.nodeName=="P")node.outerHTML=node.innerHTML}}html=doc.body.innerHTML;tinyMCE.setInnerHTML(doc.body,html)}tinyMCE.cleanupAnchors(doc);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc)},getEditorId:function(form_element){var inst=this.getInstanceById(form_element);if(!inst)return null;return inst.editorId},getInstanceById:function(editor_id){var inst=this.instances[editor_id],n;if(!inst){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formTargetElementId==editor_id)return inst}}else return inst;return null},queryInstanceCommandValue:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandValue(command);return false},queryInstanceCommandState:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandState(command);return null},setWindowArg:function(n,v){this.windowArgs[n]=v},getWindowArg:function(n,d){return(typeof(this.windowArgs[n])=="undefined")?d:this.windowArgs[n]},getCSSClasses:function(editor_id,doc){var i,c,x,rule,styles,rules,csses,selectorText,inst=tinyMCE.getInstanceById(editor_id);var cssClass,addClass,p;if(!inst)inst=tinyMCE.selectedInstance;if(!inst)return[];if(!doc)doc=inst.getDoc();if(inst&&inst.cssClasses.length>0)return inst.cssClasses;if(!doc)return;styles=doc.styleSheets;if(styles&&styles.length>0){for(x=0;x<styles.length;x++){csses=null;try{csses=tinyMCE.isIE?doc.styleSheets(x).rules:styles[x].cssRules}catch(e){}if(!csses)return[];for(i=0;i<csses.length;i++){selectorText=csses[i].selectorText;if(selectorText){rules=selectorText.split(',');for(c=0;c<rules.length;c++){rule=rules[c];while(rule.indexOf(' ')==0)rule=rule.substring(1);if(rule.indexOf(' ')!=-1||rule.indexOf(':')!=-1||rule.indexOf('mceItem')!=-1)continue;if(rule.indexOf(tinyMCE.settings.visual_table_class)!=-1||rule.indexOf('mceEditable')!=-1||rule.indexOf('mceNonEditable')!=-1)continue;if(rule.indexOf('.')!=-1){cssClass=rule.substring(rule.indexOf('.')+1);addClass=true;for(p=0;p<inst.cssClasses.length&&addClass;p++){if(inst.cssClasses[p]==cssClass)addClass=false}if(addClass)inst.cssClasses[inst.cssClasses.length]=cssClass}}}}}}return inst.cssClasses},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str)},trim:function(s){return s.replace(/^\s*|\s*$/g,"")},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s},getControlHTML:function(c){var i,l,n,o,v,rtl=tinyMCE.getLang('lang_dir')=='rtl';l=tinyMCE.plugins;for(n in l){o=l[n];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+tinyMCE.replaceVar(v,"pluginurl",o.baseURL)+'</span>';return tinyMCE.replaceVar(v,"pluginurl",o.baseURL)}}o=tinyMCE.themes[tinyMCE.settings.theme];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+v+'</span>';return v}return''},evalFunc:function(f,idx,a,o){o=!o?window:o;f=typeof(f)=='function'?f:o[f];return f.apply(o,Array.prototype.slice.call(a,idx))},dispatchCallback:function(i,p,n){return this.callFunc(i,p,n,0,this.dispatchCallback.arguments)},executeCallback:function(i,p,n){return this.callFunc(i,p,n,1,this.executeCallback.arguments)},execCommandCallback:function(i,p,n){return this.callFunc(i,p,n,2,this.execCommandCallback.arguments)},callFunc:function(ins,p,n,m,a){var l,i,on,o,s,v;s=m==2;l=tinyMCE.getParam(p,'');if(l!==''&&(v=tinyMCE.evalFunc(l,3,a))==s&&m>0)return true;if(ins!=null){for(i=0,l=ins.plugins;i<l.length;i++){o=tinyMCE.plugins[l[i]];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}return false},resolveDots:function(s,o){var i;if(typeof(s)=='string'){for(i=0,s=s.split('.');i<s.length;i++)o=o[s[i]]}else o=s;return o},xmlEncode:function(s){return s?(''+s).replace(this.xmlEncodeRe,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>'}return c}):s},add:function(c,m){var n;for(n in m)c.prototype[n]=m[n]},extend:function(p,np){var o={},n;o.parent=p;for(n in p)o[n]=p[n];for(n in np)o[n]=np[n];return o},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null}}};var TinyMCE=TinyMCE_Engine;var tinyMCE=new TinyMCE_Engine();var tinyMCELang={};function TinyMCE_Control(settings){var t,i,tos,fu,p,x,fn,fu,pn,s=settings;this.undoRedoLevel=true;this.isTinyMCE_Control=true;this.enabled=true;this.settings=s;this.settings.theme=tinyMCE.getParam("theme","default");this.settings.width=tinyMCE.getParam("width",-1);this.settings.height=tinyMCE.getParam("height",-1);this.selection=new TinyMCE_Selection(this);this.undoRedo=new TinyMCE_UndoRedo(this);this.cleanup=new TinyMCE_Cleanup();this.shortcuts=[];this.hasMouseMoved=false;this.foreColor=this.backColor="#999999";this.data={};this.cssClasses=[];this.cleanup.init({valid_elements:s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,entities:s.entities,entity_encoding:s.entity_encoding,debug:s.cleanup_debug,indent:s.apply_source_formatting,invalid_elements:s.invalid_elements,verify_html:s.verify_html,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans});t=this.settings.theme;if(!tinyMCE.hasTheme(t)){fn=tinyMCE.callbacks;tos={};for(i=0;i<fn.length;i++){if((fu=window['TinyMCE_'+t+"_"+fn[i]]))tos[fn[i]]=fu}tinyMCE.addTheme(t,tos)}this.plugins=[];p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){pn=p[i];if(pn.charAt(0)=='-')pn=pn.substring(1);if(!tinyMCE.hasPlugin(pn)){fn=tinyMCE.callbacks;tos={};for(x=0;x<fn.length;x++){if((fu=window['TinyMCE_'+pn+"_"+fn[x]]))tos[fn[x]]=fu}tinyMCE.addPlugin(pn,tos)}this.plugins[this.plugins.length]=pn}}};TinyMCE_Control.prototype={selection:null,settings:null,cleanup:null,getData:function(na){var o=this.data[na];if(!o)o=this.data[na]={};return o},hasPlugin:function(n){var i;for(i=0;i<this.plugins.length;i++){if(this.plugins[i]==n)return true}return false},addPlugin:function(n,p){if(!this.hasPlugin(n)){tinyMCE.addPlugin(n,p);this.plugins[this.plugins.length]=n}},repaint:function(){var s,b,ex;if(tinyMCE.isRealIE)return;try{s=this.selection;b=s.getBookmark(true);this.getBody().style.display='none';this.getDoc().execCommand('selectall',false,null);this.getSel().collapseToStart();this.getBody().style.display='block';s.moveToBookmark(b)}catch(ex){}},switchSettings:function(){if(tinyMCE.configs.length>1&&tinyMCE.currentConfig!=this.settings.index){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings.index}},select:function(){var oldInst=tinyMCE.selectedInstance;if(oldInst!=this){if(oldInst)oldInst.execCommand('mceEndTyping');tinyMCE.dispatchCallback(this,'select_instance_callback','selectInstance',this,oldInst);tinyMCE.selectedInstance=this}},getBody:function(){return this.contentBody?this.contentBody:this.getDoc().body},getDoc:function(){return this.contentWindow.document},getWin:function(){return this.contentWindow},getContainerWin:function(){return this.containerWindow?this.containerWindow:window},getViewPort:function(){return tinyMCE.getViewPort(this.getWin())},getParentNode:function(n,f){return tinyMCE.getParentNode(n,f,this.getBody())},getParentElement:function(n,na,f){return tinyMCE.getParentElement(n,na,f,this.getBody())},getParentBlockElement:function(n){return tinyMCE.getParentBlockElement(n,this.getBody())},resizeToContent:function(){var d=this.getDoc(),b=d.body,de=d.documentElement;this.iframeElement.style.height=(tinyMCE.isRealIE)?b.scrollHeight:de.offsetHeight+'px'},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isIE,c,sc,i,scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i<scl.length;i++){if(sc.alt==scl[i].alt&&sc.ctrl==scl[i].ctrl&&sc.shift==scl[i].shift&&sc.charCode==scl[i].charCode&&sc.keyCode==scl[i].keyCode){return false}}scl[scl.length]=sc;return true},handleShortcut:function(e){var i,s,o;if(!e.altKey&&!e.ctrlKey)return false;s=this.shortcuts;for(i=0;i<s.length;i++){o=s[i];if(o.alt==e.altKey&&o.ctrl==e.ctrlKey&&(o.keyCode==e.keyCode||o.charCode==e.charCode)){if(o.cmd&&(e.type=="keydown"||(e.type=="keypress"&&!tinyMCE.isOpera)))tinyMCE.execCommand(o.cmd,o.ui,o.val);tinyMCE.cancelEvent(e);return true}}return false},autoResetDesignMode:function(){if(!tinyMCE.isIE&&this.isHidden()&&tinyMCE.getParam('auto_reset_designmode'))eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}')},isHidden:function(){var s;if(tinyMCE.isIE)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0)},isDirty:function(){return tinyMCE.trim(this.startContent)!=tinyMCE.trim(this.getBody().innerHTML)&&!this.isNotDirty},_mergeElements:function(scmd,pa,ch,override){var st,stc,className,n;if(scmd=="removeformat"){pa.className="";pa.style.cssText="";ch.className="";ch.style.cssText="";return}st=tinyMCE.parseStyle(tinyMCE.getAttrib(pa,"style"));stc=tinyMCE.parseStyle(tinyMCE.getAttrib(ch,"style"));className=tinyMCE.getAttrib(pa,"class");className=tinyMCE.getAttrib(ch,"class");if(override){for(n in st){if(typeof(st[n])=='function')continue;stc[n]=st[n]}}else{for(n in stc){if(typeof(stc[n])=='function')continue;st[n]=stc[n]}}tinyMCE.setAttrib(pa,"style",tinyMCE.serializeStyle(st));tinyMCE.setAttrib(pa,"class",tinyMCE.trim(className));ch.className="";ch.style.cssText="";ch.removeAttribute("class");ch.removeAttribute("style")},_fixRootBlocks:function(){var rb,b,ne,be,nx,bm;rb=tinyMCE.getParam('forced_root_block');if(!rb)return;b=this.getBody();ne=b.firstChild;while(ne){nx=ne.nextSibling;if(ne.nodeType==3||!tinyMCE.blockRegExp.test(ne.nodeName)){if(!bm)bm=this.selection.getBookmark();if(!be){be=this.getDoc().createElement(rb);be.appendChild(ne.cloneNode(true));b.replaceChild(be,ne)}else{be.appendChild(ne.cloneNode(true));b.removeChild(ne)}}else be=null;ne=nx}if(bm)this.selection.moveToBookmark(bm)},_fixTrailingNbsp:function(){var s=this.selection,e=s.getFocusElement(),bm,v;if(e&&tinyMCE.blockRegExp.test(e.nodeName)&&e.firstChild){v=e.firstChild.nodeValue;if(v&&v.length>1&&/(^\u00a0|\u00a0$)/.test(v)){e.firstChild.nodeValue=v.replace(/(^\u00a0|\u00a0$)/,'');s.selectNode(e.firstChild,true,false,false);}}},_setUseCSS:function(b){var d=this.getDoc();try{d.execCommand("useCSS",false,!b)}catch(ex){}try{d.execCommand("styleWithCSS",false,b)}catch(ex){}if(!tinyMCE.getParam("table_inline_editing"))try{d.execCommand('enableInlineTableEditing',false,"false")}catch(ex){}if(!tinyMCE.getParam("object_resizing"))try{d.execCommand('enableObjectResizing',false,"false")}catch(ex){}},execCommand:function(command,user_interface,value){var i,x,z,align,img,div,doc=this.getDoc(),win=this.getWin(),focusElm=this.getFocusElement();if(!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel','gi').test(command))this.undoBookmark=null;if(!tinyMCE.isIE&&!this.useCSS){this._setUseCSS(false);this.useCSS=true}this.contentDocument=doc;if(!/mceStartTyping|mceEndTyping/.test(command)){if(tinyMCE.execCommandCallback(this,'execcommand_callback','execCommand',this.editorId,this.getBody(),command,user_interface,value))return}if(focusElm&&focusElm.nodeName=="IMG"){align=focusElm.getAttribute('align');img=command=="JustifyCenter"?focusElm.cloneNode(false):focusElm;switch(command){case"JustifyLeft":if(align=='left')img.removeAttribute('align');else img.setAttribute('align','left');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyCenter":img.removeAttribute('align');div=tinyMCE.getParentElement(focusElm,"div");if(div&&div.style.textAlign=="center"){if(div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div)}else{div=this.getDoc().createElement("div");div.style.textAlign='center';div.appendChild(img);focusElm.parentNode.replaceChild(div,focusElm)}this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyRight":if(align=='right')img.removeAttribute('align');else img.setAttribute('align','right');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return}}if(tinyMCE.settings.force_br_newlines){var alignValue="";if(doc.selection.type!="Control"){switch(command){case"JustifyLeft":alignValue="left";break;case"JustifyCenter":alignValue="center";break;case"JustifyFull":alignValue="justify";break;case"JustifyRight":alignValue="right";break}if(alignValue!==''){var rng=doc.selection.createRange();if((divElm=tinyMCE.getParentElement(rng.parentElement(),"div"))!=null)divElm.setAttribute("align",alignValue);else if(rng.pasteHTML&&rng.htmlText.length>0)rng.pasteHTML('<div align="'+alignValue+'">'+rng.htmlText+"</div>");tinyMCE.triggerNodeChange();return}}}switch(command){case"mceRepaint":this.repaint();return true;case"unlink":if(tinyMCE.isGecko&&this.getSel().isCollapsed){focusElm=tinyMCE.getParentElement(focusElm,'A');if(focusElm)this.selection.selectNode(focusElm,false)}this.getDoc().execCommand(command,user_interface,value);tinyMCE.isGecko&&this.getSel().collapseToEnd();tinyMCE.triggerNodeChange();return true;case"InsertUnorderedList":case"InsertOrderedList":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==''){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm)}else{if(!this.cleanup.isValid(value))return true;if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'<p>');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b)}else this.getDoc().execCommand("FormatBlock",false,value)}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isIE){value.outerHTML=value.innerHTML}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML))}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return}parentNode=parentNode.parentNode}break;case"mceSetStyleInfo":case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value.command;var sname=value.name;var svalue=value.value==null?'':value.value;var wrapper=value.wrapper?value.wrapper:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings.merge_styles_invalid_parents!==''?new RegExp(tinyMCE.settings.merge_styles_invalid_parents,"gi"):null;if(tinyMCE.isIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table|img','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','')}var ch=tinyMCE.getNodeTree(parentElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==parentElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}else{this._setUseCSS(false);doc.execCommand("FontName",false,"#mce_temp_font#");var elementArray=tinyMCE.getElementsByAttributeValue(this.getBody(),"font","face","#mce_temp_font#");for(x=0;x<elementArray.length;x++){elm=elementArray[x];if(elm){var spanElm=doc.createElement(wrapper);if(scmd=="setstyle")tinyMCE.setStyleAttrib(spanElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(spanElm,sname,svalue);if(scmd=="removeformat"){spanElm.style.cssText='';tinyMCE.setAttrib(spanElm,'class','')}if(elm.hasChildNodes()){for(i=0;i<elm.childNodes.length;i++)spanElm.appendChild(elm.childNodes[i].cloneNode(true))}spanElm.setAttribute("mce_new","true");elm.parentNode.replaceChild(spanElm,elm);var ch=tinyMCE.getNodeTree(spanElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==spanElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false)}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i],isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('<span>','gi').test(tmp.innerHTML)){for(x=0;x<elm.childNodes.length;x++){if(elm.parentNode!=null)elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true),elm)}elm.parentNode.removeChild(elm)}}if(scmd=="removeformat")tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"FontName":if(value==null){var s=this.getSel();if(tinyMCE.isGecko&&s.isCollapsed){var f=tinyMCE.getParentElement(this.getFocusElement(),"font");if(f!=null)this.selection.selectNode(f,false)}this.getDoc().execCommand("RemoveFormat",false,null);if(f!=null&&tinyMCE.isGecko){var r=this.getRng().cloneRange();r.collapse(true);s.removeAllRanges();s.addRange(r)}}else this.getDoc().execCommand('FontName',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"FontSize":this.getDoc().execCommand('FontSize',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"forecolor":value=value==null?this.foreColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.foreColor=value;this.getDoc().execCommand('forecolor',false,value);break;case"HiliteColor":value=value==null?this.backColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.backColor=value;if(tinyMCE.isGecko){this._setUseCSS(true);this.getDoc().execCommand('hilitecolor',false,value);this._setUseCSS(false)}else this.getDoc().execCommand('BackColor',false,value);break;case"Cut":case"Copy":case"Paste":var cmdFailed=false;eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');if(tinyMCE.isOpera&&cmdFailed)alert('Currently not supported by your browser, use keyboard shortcuts instead.');if(tinyMCE.isGecko&&cmdFailed){if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');return}else tinyMCE.triggerNodeChange();break;case"mceSetContent":if(!value)value="";value=tinyMCE.storeAwayURLs(value);value=tinyMCE._customCleanup(this,"insert_to_editor",value);if(this.getBody().nodeName=='BODY')tinyMCE._setHTML(doc,value);else this.getBody().innerHTML=value;tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,doc,this.settings,this.getBody(),false,false,false,true));tinyMCE.convertAllRelativeURLs(this.getBody());tinyMCE._removeInternal(this.getBody());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();return true;case"mceCleanup":var b=this.selection.getBookmark();tinyMCE._setHTML(this.contentDocument,this.getBody().innerHTML);tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,this.contentDocument,this.settings,this.getBody(),this.visualAid));tinyMCE.convertAllRelativeURLs(doc.body);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();this.repaint();this.selection.moveToBookmark(b);tinyMCE.triggerNodeChange();break;case"mceReplaceContent":if(!value)value='';this.getWin().focus();var selectedText="";if(tinyMCE.isIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=this.getSel().toString();if(selectedText.length>0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value)}this._addBogusBR();tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value.targets)=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value.targets;var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value.name,value.value);tinyMCE.triggerNodeChange()}}break;case"mceSetCSSClass":this.execCommand("mceSetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getBody().scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getBody().scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&| |<|>)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2)}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}}catch(ex){insertHTMLFailed=true}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return}}if(!tinyMCE.isIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value)}else value=rng.createContextualFragment(value)}else{value=doc.createTextNode(tinyMCE.entityDecode(value))}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node)}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng)}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}else{var rng=doc.selection.createRange(),tmpRng=null;var c=value.indexOf('<!--')!=-1;if(c)value=tinyMCE.uniqueTag+value;if(rng.item)rng.item(0).outerHTML=value;else rng.pasteHTML(value);if(c){var e=this.getDoc().getElementById('mceTMPElement');e.parentNode.removeChild(e)}}tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange();break;case"mceStartTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex==-1){this.undoRedo.typingUndoIndex=this.undoRedo.undoIndex;tinyMCE.typingUndoIndex=tinyMCE.undoIndex;this.execCommand('mceAddUndoLevel')}break;case"mceEndTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex!=-1){this.execCommand('mceAddUndoLevel');this.undoRedo.typingUndoIndex=-1}tinyMCE.typingUndoIndex=-1;break;case"mceBeginUndoLevel":this.undoRedoLevel=false;break;case"mceEndUndoLevel":this.undoRedoLevel=true;this.execCommand('mceAddUndoLevel');break;case"mceAddUndoLevel":if(tinyMCE.settings.custom_undo_redo&&this.undoRedoLevel){if(this.undoRedo.add())tinyMCE.triggerNodeChange(false)}break;case"Undo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.undo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"Redo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.redo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"mceToggleVisualAid":this.visualAid=!this.visualAid;tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"Indent":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();if(tinyMCE.isIE){var n=tinyMCE.getParentElement(this.getFocusElement(),"blockquote");do{if(n&&n.nodeName=="BLOCKQUOTE"){n.removeAttribute("dir");n.removeAttribute("style")}}while(n!=null&&(n=n.parentNode)!=null)}break;case"RemoveFormat":case"removeformat":var text=this.selection.getSelectedText();if(tinyMCE.isOpera){this.getDoc().execCommand("RemoveFormat",false,null);return}if(tinyMCE.isIE){try{var rng=doc.selection.createRange();rng.execCommand("RemoveFormat",false,null)}catch(e){}this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}else{this.getDoc().execCommand(command,user_interface,value);this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}if(text.length==0)this.execCommand("mceSetCSSClass",false,"");tinyMCE.triggerNodeChange();break;default:this.getDoc().execCommand(command,user_interface,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);else tinyMCE.triggerNodeChange()}if(command!="mceAddUndoLevel"&&command!="Undo"&&command!="Redo"&&command!="mceStartTyping"&&command!="mceEndTyping")tinyMCE.execCommand("mceAddUndoLevel")},queryCommandValue:function(c){try{return this.getDoc().queryCommandValue(c)}catch(e){return null}},queryCommandState:function(c){return this.getDoc().queryCommandState(c)},_addBogusBR:function(){var b=this.getBody();if(tinyMCE.isGecko&&!b.hasChildNodes())b.innerHTML='<br _moz_editor_bogus_node="TRUE" />'},_onAdd:function(replace_element,form_element_name,target_document){var hc,th,tos,editorTemplate,targetDoc,deltaWidth,deltaHeight,html,rng,fragment;var dynamicIFrame,tElm,doc,parentElm;th=this.settings.theme;tos=tinyMCE.themes[th];targetDoc=target_document?target_document:document;this.targetDoc=targetDoc;tinyMCE.themeURL=tinyMCE.baseURL+"/themes/"+this.settings.theme;this.settings.themeurl=tinyMCE.themeURL;if(!replace_element){alert("Error: Could not find the target element.");return false}if(tos.getEditorTemplate)editorTemplate=tos.getEditorTemplate(this.settings,this.editorId);deltaWidth=editorTemplate.delta_width?editorTemplate.delta_width:0;deltaHeight=editorTemplate.delta_height?editorTemplate.delta_height:0;html='<span id="'+this.editorId+'_parent" class="mceEditorContainer">'+editorTemplate.html;html=tinyMCE.replaceVar(html,"editor_id",this.editorId);if(!this.settings.default_document)this.settings.default_document=tinyMCE.baseURL+"/blank.htm";this.settings.old_width=this.settings.width;this.settings.old_height=this.settings.height;if(this.settings.width==-1)this.settings.width=replace_element.offsetWidth;if(this.settings.height==-1)this.settings.height=replace_element.offsetHeight;if(this.settings.width==0)this.settings.width=replace_element.style.width;if(this.settings.height==0)this.settings.height=replace_element.style.height;if(this.settings.width==0)this.settings.width=320;if(this.settings.height==0)this.settings.height=240;this.settings.area_width=parseInt(this.settings.width);this.settings.area_height=parseInt(this.settings.height);this.settings.area_width+=deltaWidth;this.settings.area_height+=deltaHeight;this.settings.width_style=""+this.settings.width;this.settings.height_style=""+this.settings.height;if((""+this.settings.width).indexOf('%')!=-1)this.settings.area_width="100%";else this.settings.width_style+='px';if((""+this.settings.height).indexOf('%')!=-1)this.settings.area_height="100%";else this.settings.height_style+='px';if((""+replace_element.style.width).indexOf('%')!=-1){this.settings.width=replace_element.style.width;this.settings.area_width="100%";this.settings.width_style="100%"}if((""+replace_element.style.height).indexOf('%')!=-1){this.settings.height=replace_element.style.height;this.settings.area_height="100%";this.settings.height_style="100%"}html=tinyMCE.applyTemplate(html);this.settings.width=this.settings.old_width;this.settings.height=this.settings.old_height;this.visualAid=this.settings.visual;this.formTargetElementId=form_element_name;if(replace_element.nodeName=="TEXTAREA"||replace_element.nodeName=="INPUT")this.startContent=replace_element.value;else this.startContent=replace_element.innerHTML;if(replace_element.nodeName!="TEXTAREA"&&replace_element.nodeName!="INPUT"){this.oldTargetElement=replace_element;hc='<input type="hidden" id="'+form_element_name+'" name="'+form_element_name+'" />';this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";html+='</span>';if(tinyMCE.isGecko)html=hc+html;else html+=hc;if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}else{html+='</span>';this.oldTargetElement=replace_element;this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}dynamicIFrame=false;tElm=targetDoc.getElementById(this.editorId);if(!tinyMCE.isIE){if(tElm&&(tElm.nodeName=="SPAN"||tElm.nodeName=="span")){tElm=tinyMCE._createIFrame(tElm,targetDoc);dynamicIFrame=true}this.targetElement=tElm;this.iframeElement=tElm;this.contentDocument=tElm.contentDocument;this.contentWindow=tElm.contentWindow;}else{if(tElm&&tElm.nodeName=="SPAN")tElm=tinyMCE._createIFrame(tElm,targetDoc,targetDoc.parentWindow);else tElm=targetDoc.frames[this.editorId];this.targetElement=tElm;this.iframeElement=targetDoc.getElementById(this.editorId);if(tinyMCE.isOpera){this.contentDocument=this.iframeElement.contentDocument;this.contentWindow=this.iframeElement.contentWindow;dynamicIFrame=true}else{this.contentDocument=tElm.window.document;this.contentWindow=tElm.window}this.getDoc().designMode="on"}doc=this.contentDocument;if(dynamicIFrame){html=tinyMCE.getParam('doctype')+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+tinyMCE.settings.base_href+'" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';try{if(!this.isHidden())this.getDoc().designMode="on";doc.open();doc.write(html);doc.close()}catch(e){this.getDoc().location.href=tinyMCE.baseURL+"/blank.htm"}}if(tinyMCE.isIE)window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\""+this.editorId+"\"]);",1);parentElm=this.targetDoc.getElementById(this.editorId+'_parent');this.formElement=tinyMCE.isGecko?parentElm.previousSibling:parentElm.nextSibling;tinyMCE.setupContent(this.editorId,true);return true},setBaseHREF:function(u){var h,b,d,nl;d=this.getDoc();nl=d.getElementsByTagName("base");b=nl.length>0?nl[0]:null;if(!b){nl=d.getElementsByTagName("head");h=nl.length>0?nl[0]:null;b=d.createElement("base");b.setAttribute('href',u);h.appendChild(b)}else{if(u==''||u==null)b.parentNode.removeChild(b);else b.setAttribute('href',u)}},getHTML:function(r){var h,d=this.getDoc(),b=this.getBody();if(r)return b.innerHTML;h=tinyMCE._cleanupHTML(this,d,this.settings,b,false,true,false,true);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(d);return h},setHTML:function(h){this.execCommand('mceSetContent',false,h);this.repaint()},getFocusElement:function(){return this.selection.getFocusElement()},getSel:function(){return this.selection.getSel()},getRng:function(){return this.selection.getRng()},triggerSave:function(skip_cleanup,skip_callback){var e,nl=[],i,s,content,htm;if(!this.enabled)return;this.switchSettings();s=tinyMCE.settings;if(tinyMCE.isRealIE){e=this.iframeElement;do{if(e.style&&e.style.display=='none'){e.style.display='block';nl[nl.length]={elm:e,type:'style'}}if(e.style&&s.hidden_tab_class.length>0&&e.className.indexOf(s.hidden_tab_class)!=-1){e.className=s.display_tab_class;nl[nl.length]={elm:e,type:'class'}}}while((e=e.parentNode)!=null)}tinyMCE.settings.preformatted=false;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;tinyMCE._setHTML(this.getDoc(),this.getBody().innerHTML);if(this.settings.cleanup==false){tinyMCE.handleVisualAid(this.getBody(),true,false,this);tinyMCE._setEventsEnabled(this.getBody(),true)}tinyMCE._customCleanup(this,"submit_content_dom",this.contentWindow.document.body);htm=skip_cleanup?this.getBody().innerHTML:tinyMCE._cleanupHTML(this,this.getDoc(),this.settings,this.getBody(),tinyMCE.visualAid,true,true);htm=tinyMCE._customCleanup(this,"submit_content",htm);if(!skip_callback&&tinyMCE.settings.save_callback!=='')content=tinyMCE.resolveDots(tinyMCE.settings.save_callback,window)(this.formTargetElementId,htm,this.getBody());if((typeof(content)!="undefined")&&content!=null)htm=content;htm=tinyMCE.regexpReplace(htm,"(","(","gi");htm=tinyMCE.regexpReplace(htm,")",")","gi");htm=tinyMCE.regexpReplace(htm,";",";","gi");htm=tinyMCE.regexpReplace(htm,""",""","gi");htm=tinyMCE.regexpReplace(htm,"^","^","gi");if(this.formElement)this.formElement.value=htm;if(tinyMCE.isSafari&&this.formElement)this.formElement.innerText=htm;for(i=0;i<nl.length;i++){if(nl[i].type=='style')nl[i].elm.style.display='none';else nl[i].elm.className=s.hidden_tab_class}}};tinyMCE.add(TinyMCE_Engine,{cleanupHTMLCode:function(s){s=s.replace(new RegExp('<p \\/>','gi'),'<p> </p>');s=s.replace(new RegExp('<p>\\s*<\\/p>','gi'),'<p> </p>');s=s.replace(new RegExp('<br>\\s*<\\/br>','gi'),'<br />');s=s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>','gi'),'<$1$2$3></$1$2>');s=s.replace(new RegExp('\\s+></','gi'),'></');s=s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>','gi'),'<$1$2 />');if(tinyMCE.isIE)s=s.replace(new RegExp('<p><hr \\/><\\/p>','gi'),"<hr>");if(tinyMCE.isIE)s=s.replace(/<!(\s*)\/>/g,'');return s},parseStyle:function(str){var ar=[],st,i,re,pa;if(str==null)return ar;st=str.split(';');tinyMCE.clearArray(ar);for(i=0;i<st.length;i++){if(st[i]=='')continue;re=new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');pa=st[i].replace(re,'$1||$2').split('||');if(pa.length==2)ar[pa[0].toLowerCase()]=pa[1]}return ar},compressStyle:function(ar,pr,sf,res){var box=[],i,a;box[0]=ar[pr+'-top'+sf];box[1]=ar[pr+'-left'+sf];box[2]=ar[pr+'-right'+sf];box[3]=ar[pr+'-bottom'+sf];for(i=0;i<box.length;i++){if(box[i]==null)return;for(a=0;a<box.length;a++){if(box[a]!=box[i])return}}ar[res]=box[0];ar[pr+'-top'+sf]=null;ar[pr+'-left'+sf]=null;ar[pr+'-right'+sf]=null;ar[pr+'-bottom'+sf]=null},serializeStyle:function(ar){var str="",key,val,m;tinyMCE.compressStyle(ar,"border","","border");tinyMCE.compressStyle(ar,"border","-width","border-width");tinyMCE.compressStyle(ar,"border","-color","border-color");tinyMCE.compressStyle(ar,"border","-style","border-style");tinyMCE.compressStyle(ar,"padding","","padding");tinyMCE.compressStyle(ar,"margin","","margin");for(key in ar){val=ar[key];if(typeof(val)=='function')continue;if(key.indexOf('mso-')==0)continue;if(val!=null&&val!==''){val=''+val;val=val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)",'gi'),"url('$1')");if(val.indexOf('url(')!=-1&&tinyMCE.getParam('convert_urls')){m=new RegExp("url\\('(.*?)'\\)").exec(val);if(m.length>1)val="url('"+eval(tinyMCE.getParam('urlconverter_callback')+"(m[1], null, true);")+"')"}if(tinyMCE.getParam("force_hex_style_colors"))val=tinyMCE.convertRGBToHex(val,true);val=val.replace(/\"/g,'\'');if(val!="url('')")str+=key.toLowerCase()+": "+val+"; "}}if(new RegExp('; $').test(str))str=str.substring(0,str.length-2);return str},convertRGBToHex:function(s,k){var re,rgb;if(s.toLowerCase().indexOf('rgb')!=-1){re=new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)","gi");rgb=s.replace(re,"$1,$2,$3,$4,$5").split(',');if(rgb.length==5){r=parseInt(rgb[1]).toString(16);g=parseInt(rgb[2]).toString(16);b=parseInt(rgb[3]).toString(16);r=r.length==1?'0'+r:r;g=g.length==1?'0'+g:g;b=b.length==1?'0'+b:b;s="#"+r+g+b;if(k)s=rgb[0]+s+rgb[4]}}return s},convertHexToRGB:function(s){if(s.indexOf('#')!=-1){s=s.replace(new RegExp('[^0-9A-F]','gi'),'');return"rgb("+parseInt(s.substring(0,2),16)+","+parseInt(s.substring(2,4),16)+","+parseInt(s.substring(4,6),16)+")"}return s},convertSpansToFonts:function(doc){var s,i,size,fSize,x,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){size=tinyMCE.trim(s[i].style.fontSize).toLowerCase();fSize=0;for(x=0;x<sizes.length;x++){if(sizes[x]==size){fSize=x+1;break}}if(fSize>0){tinyMCE.setAttrib(s[i],'size',fSize);s[i].style.fontSize=''}fFace=s[i].style.fontFamily;if(fFace!=null&&fFace!==''){tinyMCE.setAttrib(s[i],'face',fFace);s[i].style.fontFamily=''}fColor=s[i].style.color;if(fColor!=null&&fColor!==''){tinyMCE.setAttrib(s[i],'color',tinyMCE.convertRGBToHex(fColor));s[i].style.color=''}}},convertFontsToSpans:function(doc){var fsClasses,s,i,fSize,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');fsClasses=tinyMCE.getParam('font_size_classes');if(fsClasses!=='')fsClasses=fsClasses.replace(/\s+/,'').split(',');else fsClasses=null;s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){fSize=tinyMCE.getAttrib(s[i],'size');fFace=tinyMCE.getAttrib(s[i],'face');fColor=tinyMCE.getAttrib(s[i],'color');if(fSize!==''){fSize=parseInt(fSize);if(fSize>0&&fSize<8){if(fsClasses!=null)tinyMCE.setAttrib(s[i],'class',fsClasses[fSize-1]);else s[i].style.fontSize=sizes[fSize-1]}s[i].removeAttribute('size')}if(fFace!==''){s[i].style.fontFamily=fFace;s[i].removeAttribute('face')}if(fColor!==''){s[i].style.color=fColor;s[i].removeAttribute('color')}}},cleanupAnchors:function(doc){var i,cn,x,an=doc.getElementsByTagName("a");for(i=an.length-1;i>=0;i--){if(tinyMCE.getAttrib(an[i],"name")!==''&&tinyMCE.getAttrib(an[i],"href")==''){cn=an[i].childNodes;for(x=cn.length-1;x>=0;x--)tinyMCE.insertAfter(cn[x],an[i])}}},getContent:function(editor_id){if(typeof(editor_id)!="undefined")tinyMCE.getInstanceById(editor_id).select();if(tinyMCE.selectedInstance)return tinyMCE.selectedInstance.getHTML();return null},_fixListElements:function(d){var nl,x,a=['ol','ul'],i,n,p,r=new RegExp('^(OL|UL)$'),np;for(x=0;x<a.length;x++){nl=d.getElementsByTagName(a[x]);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=tinyMCE.prevNode(n,'LI');if(!np){np=d.createElement('li');np.innerHTML=' ';np.appendChild(n);p.insertBefore(np,p.firstChild)}else np.appendChild(n)}}}},_fixTables:function(d){var nl,i,n,p,np,x,t;nl=d.getElementsByTagName('table');for(i=0;i<nl.length;i++){n=nl[i];if((p=tinyMCE.getParentElement(n,'p,h1,h2,h3,h4,h5,h6'))!=null){np=p.cloneNode(false);np.removeAttribute('id');t=n;while((n=n.nextSibling))np.appendChild(n);tinyMCE.insertAfter(np,p);tinyMCE.insertAfter(t,p)}}},_cleanupHTML:function(inst,doc,config,elm,visual,on_save,on_submit,inn){var h,d,t1,t2,t3,t4,t5,c,s,nb;if(!tinyMCE.getParam('cleanup'))return elm.innerHTML;on_save=typeof(on_save)=='undefined'?false:on_save;c=inst.cleanup;s=inst.settings;d=c.settings.debug;if(d)t1=new Date().getTime();inst._fixRootBlocks();if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertFontsToSpans(doc);if(tinyMCE.getParam("fix_list_elements"))tinyMCE._fixListElements(doc);if(tinyMCE.getParam("fix_table_elements"))tinyMCE._fixTables(doc);tinyMCE._customCleanup(inst,on_save?"get_from_editor_dom":"insert_to_editor_dom",doc.body);if(d)t2=new Date().getTime();c.settings.on_save=on_save;c.idCount=0;c.serializationId=new Date().getTime().toString(32);c.serializedNodes=[];c.sourceIndex=-1;if(s.cleanup_serializer=="xml")h=c.serializeNodeAsXML(elm,inn);else h=c.serializeNodeAsHTML(elm,inn);if(d)t3=new Date().getTime();nb=tinyMCE.getParam('entity_encoding')=='numeric'?' ':' ';h=h.replace(/<\/?(body|head|html)[^>]*>/gi,'');h=h.replace(new RegExp(' (rowspan="1"|colspan="1")','g'),'');h=h.replace(/<p><hr \/><\/p>/g,'<hr />');h=h.replace(/<p>( | )<\/p><hr \/><p>( | )<\/p>/g,'<hr />');h=h.replace(/<td>\s*<br \/>\s*<\/td>/g,'<td>'+nb+'</td>');h=h.replace(/<p>\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<br \/>$/,'');h=h.replace(/<br \/><\/p>/g,'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*( | )\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*<br \/>\s* \s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(new RegExp('<a>(.*?)<\\/a>','g'),'$1');h=h.replace(/<p([^>]*)>\s*<\/p>/g,'<p$1>'+nb+'</p>');if(/^\s*(<br \/>|<p> <\/p>|<p> <\/p>|<p><\/p>)\s*$/.test(h))h='';if(s.preformatted){h=h.replace(/^<pre>/,'');h=h.replace(/<\/pre>$/,'');h='<pre>'+h+'</pre>'}if(tinyMCE.isGecko){h=h.replace(/<br \/>\s*<\/li>/g,'</li>');h=h.replace(/ \s*<\/(dd|dt)>/g,'</$1>');h=h.replace(/<o:p _moz-userdefined="" \/>/g,'');h=h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g,'<td$1>'+nb+'</td>')}if(s.force_br_newlines)h=h.replace(/<p>( | )<\/p>/g,'<br />');h=tinyMCE._customCleanup(inst,on_save?"get_from_editor":"insert_to_editor",h);if(on_save){h=h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|'+s.visual_table_class+')','g'),'');h=h.replace(new RegExp(' ?class=""','g'),'')}if(s.remove_linebreaks&&!c.settings.indent)h=h.replace(/\n|\r/g,' ');if(d)t4=new Date().getTime();if(on_save&&c.settings.indent)h=c.formatHTML(h);if(on_submit&&(s.encoding=="xml"||s.encoding=="html"))h=c.xmlEncode(h);if(d)t5=new Date().getTime();if(c.settings.debug)tinyMCE.debug("Cleanup in ms: Pre="+(t2-t1)+", Serialize: "+(t3-t2)+", Post: "+(t4-t3)+", Format: "+(t5-t4)+", Sum: "+(t5-t1)+".");return h}});function TinyMCE_Cleanup(){this.isIE=(navigator.appName=="Microsoft Internet Explorer");this.rules=tinyMCE.clearArray([]);this.settings={indent_elements:'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',newline_before_elements:'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',newline_after_elements:'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',newline_before_after_elements:'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',indent_char:'\t',indent_levels:1,entity_encoding:'raw',valid_elements:'*[*]',entities:'',url_converter:'',invalid_elements:'',verify_html:false};this.vElements=tinyMCE.clearArray([]);this.vElementsRe='';this.closeElementsRe=/^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;this.codeElementsRe=/^(SCRIPT|STYLE)$/;this.serializationId=0;this.mceAttribs={href:'mce_href',src:'mce_src',type:'mce_type'}}TinyMCE_Cleanup.prototype={init:function(s){var n,a,i,ir,or,st;for(n in s)this.settings[n]=s[n];s=this.settings;this.inRe=this._arrayToRe(s.indent_elements.split(','),'','^<(',')[^>]*');this.ouRe=this._arrayToRe(s.indent_elements.split(','),'','^<\\/(',')[^>]*');this.nlBeforeRe=this._arrayToRe(s.newline_before_elements.split(','),'gi','<(',')([^>]*)>');this.nlAfterRe=this._arrayToRe(s.newline_after_elements.split(','),'gi','<(',')([^>]*)>');this.nlBeforeAfterRe=this._arrayToRe(s.newline_before_after_elements.split(','),'gi','<(\\/?)(',')([^>]*)>');this.serializedNodes=[];if(s.invalid_elements!=='')this.iveRe=this._arrayToRe(s.invalid_elements.toUpperCase().split(','),'g','^(',')$');else this.iveRe=null;st='';for(i=0;i<s.indent_levels;i++)st+=s.indent_char;this.inStr=st;if(!s.verify_html){s.valid_elements='*[*]';s.extended_valid_elements=''}this.fillStr=s.entity_encoding=="named"?" ":" ";this.idCount=0;this.xmlEncodeRe=new RegExp('[\u007F-\uFFFF<>&"]','g')},addRuleStr:function(s){var r=this.parseRuleStr(s),n;for(n in r){if(r[n])this.rules[n]=r[n]}this.vElements=tinyMCE.clearArray([]);for(n in this.rules){if(this.rules[n])this.vElements[this.vElements.length]=this.rules[n].tag}this.vElementsRe=this._arrayToRe(this.vElements,'')},isValid:function(n){if(!this.rulesDone)this._setupRules();if(!n)return true;n=n.replace(/[^a-z0-9]+/gi,'').toUpperCase();return!tinyMCE.getParam('cleanup')||this.vElementsRe.test(n)},addChildRemoveRuleStr:function(s){var x,y,p,i,t,tn,ta,cl,r;if(!s)return;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r="^(";cl=this.split(/\|/,p[1]);for(i=0;i<cl.length;i++){if(cl[i]=='%istrict')r+=tinyMCE.inlineStrict;else if(cl[i]=='%itrans')r+=tinyMCE.inlineTransitional;else if(cl[i]=='%istrict_na')r+=tinyMCE.inlineStrict.substring(2);else if(cl[i]=='%itrans_na')r+=tinyMCE.inlineTransitional.substring(2);else if(cl[i]=='%btrans')r+=tinyMCE.blockElms;else if(cl[i]=='%strict')r+=tinyMCE.blockStrict;else r+=(cl[i].charAt(0)!='#'?cl[i].toUpperCase():cl[i]);r+=(i!=cl.length-1?'|':'')}r+=')$';if(this.childRules==null)this.childRules=tinyMCE.clearArray([]);this.childRules[tn[y]]=new RegExp(r);if(p.length>1)this.childRules[tn[y]].wrapTag=p[2]}}},parseRuleStr:function(s){var ta,p,r,a,i,x,px,t,tn,y,av,or=tinyMCE.clearArray([]),dv;if(s==null||s.length==0)return or;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];if(s.length==0)continue;p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r={};r.tag=tn[y];r.forceAttribs=null;r.defaultAttribs=null;r.validAttribValues=null;px=r.tag.charAt(0);r.forceOpen=px=='+';r.removeEmpty=px=='-';r.fill=px=='#';r.tag=r.tag.replace(/\+|-|#/g,'');r.oTagName=tn[0].replace(/\+|-|#/g,'').toLowerCase();r.isWild=new RegExp('\\*|\\?|\\+','g').test(r.tag);r.validRe=new RegExp(this._wildcardToRe('^'+r.tag+'$'));if(p.length>1){r.vAttribsRe='^(';a=this.split(/\|/,p[1]);for(i=0;i<a.length;i++){t=a[i];if(t.charAt(0)=='!'){a[i]=t=t.substring(1);if(!r.reqAttribsRe)r.reqAttribsRe='\\s+('+t;else r.reqAttribsRe+='|'+t}av=new RegExp('(=|:|<)(.*?)$').exec(t);t=t.replace(new RegExp('(=|:|<).*?$'),'');if(av&&av.length>0){if(av[0].charAt(0)==':'){if(!r.forceAttribs)r.forceAttribs=tinyMCE.clearArray([]);r.forceAttribs[t.toLowerCase()]=av[0].substring(1)}else if(av[0].charAt(0)=='='){if(!r.defaultAttribs)r.defaultAttribs=tinyMCE.clearArray([]);dv=av[0].substring(1);r.defaultAttribs[t.toLowerCase()]=dv==''?"mce_empty":dv}else if(av[0].charAt(0)=='<'){if(!r.validAttribValues)r.validAttribValues=tinyMCE.clearArray([]);r.validAttribValues[t.toLowerCase()]=this._arrayToRe(this.split('?',av[0].substring(1)),'i')}}r.vAttribsRe+=''+t.toLowerCase()+(i!=a.length-1?'|':'');a[i]=t.toLowerCase()}if(r.reqAttribsRe)r.reqAttribsRe=new RegExp(r.reqAttribsRe+')=\"','g');r.vAttribsRe+=')$';r.vAttribsRe=this._wildcardToRe(r.vAttribsRe);r.vAttribsReIsWild=new RegExp('\\*|\\?|\\+','g').test(r.vAttribsRe);r.vAttribsRe=new RegExp(r.vAttribsRe);r.vAttribs=a.reverse();}else{r.vAttribsRe='';r.vAttribs=tinyMCE.clearArray([]);r.vAttribsReIsWild=false}or[r.tag]=r}}return or},serializeNodeAsXML:function(n){var s,b;if(!this.xmlDoc){if(this.isIE){try{this.xmlDoc=new ActiveXObject('MSXML2.DOMDocument')}catch(e){}if(!this.xmlDoc)try{this.xmlDoc=new ActiveXObject('Microsoft.XmlDom')}catch(e){}}else this.xmlDoc=document.implementation.createDocument('','',null);if(!this.xmlDoc)alert("Error XML Parser could not be found.")}if(this.xmlDoc.firstChild)this.xmlDoc.removeChild(this.xmlDoc.firstChild);b=this.xmlDoc.createElement("html");b=this.xmlDoc.appendChild(b);this._convertToXML(n,b);if(this.isIE)return this.xmlDoc.xml;else return new XMLSerializer().serializeToString(this.xmlDoc)},_convertToXML:function(n,xn){var xd,el,i,l,cn,at,no,hc=false;if(tinyMCE.isRealIE&&this._isDuplicate(n))return;xd=this.xmlDoc;switch(n.nodeType){case 1:hc=n.hasChildNodes();el=xd.createElement(n.nodeName.toLowerCase());at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&no.nodeValue)el.setAttribute(no.nodeName.toLowerCase(),no.nodeValue)}if(!hc&&!this.closeElementsRe.test(n.nodeName))el.appendChild(xd.createTextNode(""));xn=xn.appendChild(el);break;case 3:xn.appendChild(xd.createTextNode(n.nodeValue));return;case 8:xn.appendChild(xd.createComment(n.nodeValue));return}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)this._convertToXML(cn[i],xn)}},serializeNodeAsHTML:function(n,inn){var en,no,h='',i,l,t,st,r,cn,va=false,f=false,at,hc,cr,nn;if(!this.rulesDone)this._setupRules();if(tinyMCE.isRealIE&&this._isDuplicate(n))return'';if(n.parentNode&&this.childRules!=null){cr=this.childRules[n.parentNode.nodeName];if(typeof(cr)!="undefined"&&!cr.test(n.nodeName)){st=true;t=null}}switch(n.nodeType){case 1:hc=n.hasChildNodes();if(st)break;nn=n.nodeName;if(tinyMCE.isRealIE){if(n.nodeName.indexOf('/')!=-1)break;if(n.scopeName&&n.scopeName!='HTML')nn=n.scopeName.toUpperCase()+':'+nn.toUpperCase()}else if(tinyMCE.isOpera&&nn.indexOf(':')>0)nn=nn.toUpperCase();if(this.settings.convert_fonts_to_spans){if(this.settings.on_save&&nn=='FONT')nn='SPAN';if(!this.settings.on_save&&nn=='SPAN')nn='FONT'}if(this.vElementsRe.test(nn)&&(!this.iveRe||!this.iveRe.test(nn))&&!inn){va=true;r=this.rules[nn];if(!r){at=this.rules;for(no in at){if(at[no]&&at[no].validRe.test(nn)){r=at[no];break}}}en=r.isWild?nn.toLowerCase():r.oTagName;f=r.fill;if(r.removeEmpty&&!hc)return"";t='<'+en;if(r.vAttribsReIsWild){at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&r.vAttribsRe.test(no.nodeName))t+=this._serializeAttribute(n,r,no.nodeName)}}else{for(i=r.vAttribs.length-1;i>-1;i--)t+=this._serializeAttribute(n,r,r.vAttribs[i])}if(!this.settings.on_save){at=this.mceAttribs;for(no in at){if(at[no])t+=this._serializeAttribute(n,r,at[no])}}if(r.reqAttribsRe&&!t.match(r.reqAttribsRe))t=null;if(t!=null&&this.closeElementsRe.test(nn))return t+' />';if(t!=null)h+=t+'>';if(this.isIE&&this.codeElementsRe.test(nn))h+=n.innerHTML}break;case 3:if(st)break;if(n.parentNode&&this.codeElementsRe.test(n.parentNode.nodeName))return this.isIE?'':n.nodeValue;return this.xmlEncode(n.nodeValue);case 8:if(st)break;return"<!--"+this._trimComment(n.nodeValue)+"-->"}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)h+=this.serializeNodeAsHTML(cn[i])}if(f&&!hc)h+=this.fillStr;if(t!=null&&va)h+='</'+en+'>';return h},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""'}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&/^(src|href|longdesc)$/.test(an))av=this._urlConverter(this,n,av);if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0){if(an.indexOf('on')!=0)av=this.xmlEncode(av,1);return" "+an+"="+'"'+av+'"'}return""},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi,function(a,b,c){c=c.replace(/<br\s*\/>/gi,'\n');return'<pre'+b+'>'+c+'</pre>'});h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr}li=i}return o},xmlEncode:function(s){var cl=this,re=this.xmlEncodeRe;if(!this.entitiesDone)this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":return s.replace(re,function(c){var b=cl.entities[c.charCodeAt(0)];return b?'&'+b+';':c});case"numeric":return s.replace(re,function(c){return'&#'+c.charCodeAt(0)+';'})}return s},split:function(re,s){var i,l,o=[],c=s.split(re);for(i=0,l=c.length;i<l;i++){if(c[i]!=='')o[i]=c[i]}return o},_trimComment:function(s){s=s.replace(new RegExp('\\smce_src=\"[^\"]*\"','gi'),"");s=s.replace(new RegExp('\\smce_href=\"[^\"]*\"','gi'),"");return s},_getAttrib:function(e,n,d){var v,ex,nn;if(typeof(d)=="undefined")d="";if(!e||e.nodeType!=1)return d;try{v=e.getAttribute(n,0)}catch(ex){v=e.getAttribute(n,2)}if(n=="class"&&!v)v=e.className;if(this.isIE){if(n=="http-equiv")v=e.httpEquiv;nn=e.nodeName;if(nn=="FORM"&&n=="enctype"&&v=="application/x-www-form-urlencoded")v="";if(nn=="INPUT"&&n=="size"&&v=="20")v="";if(nn=="INPUT"&&n=="maxlength"&&v=="2147483647")v="";if(n=="width"||n=="height")v=e.getAttribute(n,2)}if(n=='style'&&v){if(!tinyMCE.isOpera)v=e.style.cssText;v=tinyMCE.serializeStyle(tinyMCE.parseStyle(v))}if(this.settings.on_save&&n.indexOf('on')!=-1&&this.settings.on_save&&v&&v!=='')v=tinyMCE.cleanupEventStr(v);return(v&&v!=='')?''+v:d},_urlConverter:function(c,n,v){if(!c.settings.on_save)return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,v);else if(tinyMCE.getParam('convert_urls')){if(!this.urlConverter)this.urlConverter=eval(tinyMCE.settings.urlconverter_callback);return this.urlConverter(v,n,true)}return v},_arrayToRe:function(a,op,be,af){var i,r;op=typeof(op)=="undefined"?"gi":op;be=typeof(be)=="undefined"?"^(":be;af=typeof(af)=="undefined"?")$":af;r=be;for(i=0;i<a.length;i++)r+=this._wildcardToRe(a[i])+(i!=a.length-1?"|":"");r+=af;return new RegExp(r,op)},_wildcardToRe:function(s){s=s.replace(/\?/g,'(\\S?)');s=s.replace(/\+/g,'(\\S+)');s=s.replace(/\*/g,'(\\S*)');return s},_setupEntities:function(){var n,a,i,s=this.settings;if(s.entity_encoding=="named"){n=tinyMCE.clearArray([]);a=this.split(',',s.entities);for(i=0;i<a.length;i+=2)n[a[i]]=a[i+1];this.entities=n}this.entitiesDone=true},_setupRules:function(){var s=this.settings;this.addRuleStr(s.valid_elements);this.addRuleStr(s.extended_valid_elements);this.addChildRemoveRuleStr(s.valid_child_elements);this.rulesDone=true},_isDuplicate:function(n){var i,l,sn;if(!this.settings.fix_content_duplication)return false;if(tinyMCE.isRealIE&&n.nodeType==1){if(n.mce_serialized==this.serializationId)return true;n.setAttribute('mce_serialized',this.serializationId)}else{sn=this.serializedNodes;for(i=0,l=sn.length;i<l;i++){if(sn[i]==n)return true}sn.push(n)}return false}};tinyMCE.add(TinyMCE_Engine,{createTagHTML:function(tn,a,h){var o='',f=tinyMCE.xmlEncode,n;o='<'+tn;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)o+=' '+f(n)+'="'+f(''+a[n])+'"'}}o+=!h?' />':'>'+h+'</'+tn+'>';return o},createTag:function(d,tn,a,h){var o=d.createElement(tn),n;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)tinyMCE.setAttrib(o,n,a[n])}}if(h)o.innerHTML=h;return o},getElementByAttributeValue:function(n,e,a,v){return(n=this.getElementsByAttributeValue(n,e,a,v)).length==0?null:n[0]},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i]}return o},isBlockElement:function(n){return n!=null&&n.nodeType==1&&this.blockRegExp.test(n.nodeName)},getParentBlockElement:function(n,r){return this.getParentNode(n,function(n){return tinyMCE.isBlockElement(n)},r);return null},insertAfter:function(n,r){if(r.nextSibling)r.parentNode.insertBefore(n,r.nextSibling);else r.parentNode.appendChild(n)},setInnerHTML:function(e,h){var i,nl,n;if(tinyMCE.isGecko){h=h.replace(/<embed([^>]*)>/gi,'<tmpembed$1>');h=h.replace(/<em([^>]*)>/gi,'<i$1>');h=h.replace(/<tmpembed([^>]*)>/gi,'<embed$1>');h=h.replace(/<strong([^>]*)>/gi,'<b$1>');h=h.replace(/<\/strong>/gi,'</b>');h=h.replace(/<\/em>/gi,'</i>')}if(tinyMCE.isRealIE){h=h.replace(/\s\/>/g,'>');h=h.replace(/<p([^>]*)>\u00A0?<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s* \s*<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s+<\/p>/gi,'<p$1 mce_keep="true"> </p>');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n)}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h)}},getOuterHTML:function(e){var d;if(tinyMCE.isIE)return e.outerHTML;d=e.ownerDocument.createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML},setOuterHTML:function(e,h,d){var d=typeof(d)=="undefined"?e.ownerDocument:d,i,nl,t;if(tinyMCE.isIE&&e.nodeType==1)e.outerHTML=h;else{t=d.createElement("body");t.innerHTML=h;for(i=0,nl=t.childNodes;i<nl.length;i++)e.parentNode.insertBefore(nl[i].cloneNode(true),e);e.parentNode.removeChild(e)}},_getElementById:function(id,d){var e,i,j,f;if(typeof(d)=="undefined")d=document;e=d.getElementById(id);if(!e){f=d.forms;for(i=0;i<f.length;i++){for(j=0;j<f[i].elements.length;j++){if(f[i].elements[j].name==id){e=f[i].elements[j];break}}}}return e},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn)},na?na:[])},getParentElement:function(n,na,f,r){var re=na?new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$'):0,v;if(f&&typeof(f)=='string')return this.getParentElement(n,na,function(no){return tinyMCE.getAttrib(no,f)!==''});return this.getParentNode(n,function(n){return((n.nodeType==1&&!re)||(re&&re.test(n.nodeName)))&&(!f||f(n))},r)},getParentNode:function(n,f,r){while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode}return null},getAttrib:function(elm,name,dv){var v;if(typeof(dv)=="undefined")dv="";if(!elm||elm.nodeType!=1)return dv;try{v=elm.getAttribute(name,0)}catch(ex){v=elm.getAttribute(name,2)}if(name=="class"&&!v)v=elm.className;if(tinyMCE.isGecko){if(name=="src"&&elm.src!=null&&elm.src!=='')v=elm.src;if(name=="href"&&elm.href!=null&&elm.href!=='')v=elm.href}else if(tinyMCE.isIE){switch(name){case"http-equiv":v=elm.httpEquiv;break;case"width":case"height":v=elm.getAttribute(name,2);break}}if(name=="style"&&!tinyMCE.isOpera)v=elm.style.cssText;return(v&&v!=='')?v:dv},setAttrib:function(el,name,va,fix){if(typeof(va)=="number"&&va!=null)va=""+va;if(fix){if(va==null)va="";va=va.replace(/[^0-9%]/g,'')}if(name=="style")el.style.cssText=va;if(name=="class")el.className=va;if(va!=null&&va!==''&&va!=-1)el.setAttribute(name,va);else el.removeAttribute(name)},setStyleAttrib:function(e,n,v){e.style[n]=v;if(tinyMCE.isIE&&v==null||v==''){v=tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));e.style.cssText=v;e.setAttribute("style",v)}},switchClass:function(ei,c){var e;if(tinyMCE.switchClassCache[ei])e=tinyMCE.switchClassCache[ei];else e=tinyMCE.switchClassCache[ei]=document.getElementById(ei);if(e){if(tinyMCE.settings.button_tile_map&&e.className&&e.className.indexOf('mceTiledButton')==0)c='mceTiledButton '+c;e.className=c}},getAbsPosition:function(n,cn){var l=0,t=0;while(n&&n!=cn){l+=n.offsetLeft;t+=n.offsetTop;n=n.offsetParent}return{absLeft:l,absTop:t}},prevNode:function(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},nextNode:function(e,n){var a=n.split(','),i;while((e=e.nextSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a)}return a},addCSSClass:function(e,c,b){var o=this.removeCSSClass(e,c);return e.className=b?c+(o!==''?(' '+o):''):(o!==''?(o+' '):'')+c},removeCSSClass:function(e,c){c=e.className.replace(new RegExp("(^|\\s+)"+c+"(\\s+|$)"),' ');return e.className=c!=' '?c:''},hasCSSClass:function(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className)},renameElement:function(e,n,d){var ne,i,ar;d=typeof(d)=="undefined"?tinyMCE.selectedInstance.getDoc():d;if(e){ne=d.createElement(n);ar=e.attributes;for(i=ar.length-1;i>-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue)}ar=e.childNodes;for(i=0;i<ar.length;i++)ne.appendChild(ar[i].cloneNode(true));e.parentNode.replaceChild(ne,e)}},getViewPort:function(w){var d=w.document,m=d.compatMode=='CSS1Compat',b=d.body,de=d.documentElement;return{left:w.pageXOffset||(m?de.scrollLeft:b.scrollLeft),top:w.pageYOffset||(m?de.scrollTop:b.scrollTop),width:w.innerWidth||(m?de.clientWidth:b.clientWidth),height:w.innerHeight||(m?de.clientHeight:b.clientHeight)}},getStyle:function(n,na,d){if(!n)return false;if(tinyMCE.isGecko&&n.ownerDocument.defaultView){try{return n.ownerDocument.defaultView.getComputedStyle(n,null).getPropertyValue(na)}catch(n){return null}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase()});if(n.currentStyle)return n.currentStyle[na];return false}});tinyMCE.add(TinyMCE_Engine,{parseURL:function(url_str){var urlParts=[],i,pos,lastPos,chr;if(url_str){pos=url_str.indexOf('://');if(pos!=-1){urlParts.protocol=url_str.substring(0,pos);lastPos=pos+3}for(i=lastPos;i<url_str.length;i++){chr=url_str.charAt(i);if(chr==':')break;if(chr=='/')break}pos=i;urlParts.host=url_str.substring(lastPos,pos);urlParts.port="";lastPos=pos;if(url_str.charAt(pos)==':'){pos=url_str.indexOf('/',lastPos);urlParts.port=url_str.substring(lastPos+1,pos)}lastPos=pos;pos=url_str.indexOf('?',lastPos);if(pos==-1)pos=url_str.indexOf('#',lastPos);if(pos==-1)pos=url_str.length;urlParts.path=url_str.substring(lastPos,pos);lastPos=pos;if(url_str.charAt(pos)=='?'){pos=url_str.indexOf('#');pos=(pos==-1)?url_str.length:pos;urlParts.query=url_str.substring(lastPos+1,pos)}lastPos=pos;if(url_str.charAt(pos)=='#'){pos=url_str.length;urlParts.anchor=url_str.substring(lastPos+1,pos)}}return urlParts},serializeURL:function(up){var o="";if(up.protocol)o+=up.protocol+"://";if(up.host)o+=up.host;if(up.port)o+=":"+up.port;if(up.path)o+=up.path;if(up.query)o+="?"+up.query;if(up.anchor)o+="#"+up.anchor;return o},convertAbsoluteURLToRelativeURL:function(base_url,url_to_relative){var baseURL=this.parseURL(base_url),targetURL=this.parseURL(url_to_relative);var i,strTok1,strTok2,breakPoint=0,outPath="",forceSlash=false;var fileName,pos;if(targetURL.path=='')targetURL.path="/";else forceSlash=true;base_url=baseURL.path.substring(0,baseURL.path.lastIndexOf('/'));strTok1=base_url.split('/');strTok2=targetURL.path.split('/');if(strTok1.length>=strTok2.length){for(i=0;i<strTok1.length;i++){if(i>=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(strTok1.length<strTok2.length){for(i=0;i<strTok2.length;i++){if(i>=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(breakPoint==1)return targetURL.path;for(i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(i=breakPoint-1;i<strTok2.length;i++){if(i!=(breakPoint-1))outPath+="/"+strTok2[i];else outPath+=strTok2[i]}targetURL.protocol=null;targetURL.host=null;targetURL.port=null;targetURL.path=outPath==''&&forceSlash?"/":outPath;fileName=baseURL.path;if((pos=fileName.lastIndexOf('/'))!=-1)fileName=fileName.substring(pos+1);if(fileName==targetURL.path&&targetURL.anchor!=='')targetURL.path="";if(targetURL.path==''&&!targetURL.anchor)targetURL.path=fileName!==''?fileName:"/";return this.serializeURL(targetURL)},convertRelativeToAbsoluteURL:function(base_url,relative_url){var baseURL=this.parseURL(base_url),baseURLParts,relURLParts,newRelURLParts,numBack,relURL=this.parseURL(relative_url),i;var len,absPath,start,end,newBaseURLParts;if(relative_url==''||relative_url.indexOf('://')!=-1||/^(mailto:|javascript:|#|\/)/.test(relative_url))return relative_url;baseURLParts=baseURL.path.split('/');relURLParts=relURL.path.split('/');newBaseURLParts=[];for(i=baseURLParts.length-1;i>=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i]}baseURLParts=newBaseURLParts.reverse();newRelURLParts=[];numBack=0;for(i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue}if(numBack>0){numBack--;continue}newRelURLParts[newRelURLParts.length]=relURLParts[i]}relURLParts=newRelURLParts.reverse();len=baseURLParts.length-numBack;absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');start="";end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL)},convertURL:function(url,node,on_save){var dl=document.location,start,portPart,urlParts,baseUrlParts,tmpUrlParts,curl;var prot=dl.protocol,host=dl.hostname,port=dl.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||/^[ \t\r\n\+]*[#\?]/.test(url))return url;if(!tinyMCE.isIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings.base_href+url;if(on_save&&tinyMCE.getParam('relative_urls')){curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(curl.charAt(0)=='/')curl=tinyMCE.settings.document_base_prefix+curl;urlParts=tinyMCE.parseURL(curl);tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings.document_base_url);if(urlParts.host==tmpUrlParts.host&&(urlParts.port==tmpUrlParts.port))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url,curl)}if(!tinyMCE.getParam('relative_urls')){urlParts=tinyMCE.parseURL(url);baseUrlParts=tinyMCE.parseURL(tinyMCE.settings.base_href);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(urlParts.anchor&&urlParts.path==baseUrlParts.path)return"#"+urlParts.anchor}if(tinyMCE.getParam('remove_script_host')){start="";portPart="";if(port!=='')portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1)}return url},convertAllRelativeURLs:function(body){var i,elms,src,href,mhref,msrc;elms=body.getElementsByTagName("img");for(i=0;i<elms.length;i++){src=tinyMCE.getAttrib(elms[i],'src');msrc=tinyMCE.getAttrib(elms[i],'mce_src');if(msrc!=='')src=msrc;if(src!==''){src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,src);elms[i].setAttribute("src",src)}}elms=body.getElementsByTagName("a");for(i=0;i<elms.length;i++){href=tinyMCE.getAttrib(elms[i],'href');mhref=tinyMCE.getAttrib(elms[i],'mce_href');if(mhref!=='')href=mhref;if(href&&href!==''){href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,href);elms[i].setAttribute("href",href)}}}});tinyMCE.add(TinyMCE_Engine,{clearArray:function(a){var n;for(n in a)a[n]=null;return a},explode:function(d,s){var ar=s.split(d),oar=[],i;for(i=0;i<ar.length;i++){if(ar[i]!=='')oar[oar.length]=ar[i]}return oar}});tinyMCE.add(TinyMCE_Engine,{_setEventsEnabled:function(node,state){var evs,x,y,elms,i,event;var events=['onfocus','onblur','onclick','ondblclick','onmousedown','onmouseup','onmouseover','onmousemove','onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];evs=tinyMCE.settings.event_elements.split(',');for(y=0;y<evs.length;y++){elms=node.getElementsByTagName(evs[y]);for(i=0;i<elms.length;i++){event="";for(x=0;x<events.length;x++){if((event=tinyMCE.getAttrib(elms[i],events[x]))!==''){event=tinyMCE.cleanupEventStr(""+event);if(!state)event="return true;"+event;else event=event.replace(/^return true;/gi,'');elms[i].removeAttribute(events[x]);elms[i].setAttribute(events[x],event)}}}}},_eventPatch:function(editor_id){var n,inst,win,e;if(typeof(tinyMCE)=="undefined")return true;try{if(tinyMCE.selectedInstance){win=tinyMCE.selectedInstance.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.select();win=inst.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}}catch(ex){}},findEvent:function(e){var n,inst;if(e)return e;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(tinyMCE.isInstance(inst)&&inst.getWin().event)return inst.getWin().event}return null},unloadHandler:function(){tinyMCE.triggerSave(true,true)},addEventHandlers:function(inst){this.setEventHandlers(inst,1)},setEventHandlers:function(inst,s){var doc=inst.getDoc(),ie,ot,i,f=s?tinyMCE.addEvent:tinyMCE.removeEvent;ie=['keypress','keyup','keydown','click','mouseup','mousedown','controlselect','dblclick'];ot=['keypress','keyup','keydown','click','mouseup','mousedown','focus','blur','dragdrop'];inst.switchSettings();if(tinyMCE.isIE){for(i=0;i<ie.length;i++)f(doc,ie[i],TinyMCE_Engine.prototype._eventPatch)}else{for(i=0;i<ot.length;i++)f(doc,ot[i],tinyMCE.handleEvent);try{doc.designMode="On"}catch(e){}}},onMouseMove:function(){var inst,lh;if(tinyMCE.lastHover){lh=tinyMCE.lastHover;if(lh.className.indexOf('mceMenu')!=-1)tinyMCE._menuButtonEvent('out',lh);else lh.className=lh.className;tinyMCE.lastHover=null}if(!tinyMCE.hasMouseMoved){inst=tinyMCE.selectedInstance;if(inst.isFocused){inst.undoBookmark=inst.selection.getBookmark();tinyMCE.hasMouseMoved=true}}},cancelEvent:function(e){if(!e)return false;if(tinyMCE.isIE){e.returnValue=false;e.cancelBubble=true}else{e.preventDefault();e.stopPropagation&&e.stopPropagation()}return false},addEvent:function(o,n,h){if(n!='unload'){function clean(){var ex;try{tinyMCE.removeEvent(o,n,h);tinyMCE.removeEvent(window,'unload',clean);o=n=h=null}catch(ex){}}tinyMCE.addEvent(window,'unload',clean)}if(o.attachEvent)o.attachEvent("on"+n,h);else o.addEventListener(n,h,false)},removeEvent:function(o,n,h){if(o.detachEvent)o.detachEvent("on"+n,h);else o.removeEventListener(n,h,false)},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w}return false},accessibleEventHandler:function(e){var elm,win=this._win;e=tinyMCE.isIE?win.event:e;elm=tinyMCE.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null}return true}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false}return true},_resetIframeHeight:function(){var ife;if(tinyMCE.isRealIE){ife=tinyMCE.selectedInstance.iframeElement;if(ife._oldHeight){ife.style.height=ife._oldHeight;ife.height=ife._oldHeight}}}});function TinyMCE_Selection(inst){this.instance=inst};TinyMCE_Selection.prototype={getSelectedHTML:function(){var inst=this.instance,e,r=this.getRng(),h;if(!r)return null;e=document.createElement("body");if(r.cloneContents)e.appendChild(r.cloneContents());else if(typeof(r.item)!='undefined'||typeof(r.htmlText)!='undefined')e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();h=tinyMCE._cleanupHTML(inst,inst.contentDocument,inst.settings,e,e,false,true,false);return h},getSelectedText:function(){var inst=this.instance,d,r,s,t;if(tinyMCE.isIE){d=inst.getDoc();if(d.selection.type=="Text"){r=d.selection.createRange();t=r.text}else t=''}else{s=this.getSel();if(s&&s.toString)t=s.toString();else t=''}return t},getBookmark:function(simple){var inst=this.instance,rng=this.getRng(),doc=inst.getDoc(),b=inst.getBody();var trng,sx,sy,xx=-999999999,vp=inst.getViewPort();var sp,le,s,e,nl,i,si,ei,w;sx=vp.left;sy=vp.top;if(simple)return{rng:rng,scrollX:sx,scrollY:sy};if(tinyMCE.isRealIE){if(rng.item){e=rng.item(0);nl=b.getElementsByTagName(e.nodeName);for(i=0;i<nl.length;i++){if(e==nl[i]){sp=i;break}}return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy}}else{trng=doc.body.createTextRange();trng.moveToElementText(inst.getBody());trng.collapse(true);bp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(true);sp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(false);le=Math.abs(trng.move('character',xx))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy}}}else{s=this.getSel();e=this.getFocusElement();if(!s)return null;if(e&&e.nodeName=='IMG'){return{start:-1,end:-1,index:sp,scrollX:sx,scrollY:sy}}if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=this._getPosText(b,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+s.anchorOffset,end:e.end+s.focusOffset,scrollX:sx,scrollY:sy}}else{e=this._getPosText(b,rng.startContainer,rng.endContainer);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+rng.startOffset,end:e.end+rng.endOffset,scrollX:sx,scrollY:sy}}}return null},moveToBookmark:function(bookmark){var inst=this.instance,rng,nl,i,ex,b=inst.getBody(),sd;var doc=inst.getDoc(),win=inst.getWin(),sel=this.getSel();if(!bookmark)return false;if(tinyMCE.isSafari&&bookmark.rng){sel.setBaseAndExtent(bookmark.rng.startContainer,bookmark.rng.startOffset,bookmark.rng.endContainer,bookmark.rng.endOffset);return true}if(tinyMCE.isRealIE){if(bookmark.rng){try{bookmark.rng.select()}catch(ex){}return true}win.focus();if(bookmark.tag){rng=b.createControlRange();nl=b.getElementsByTagName(bookmark.tag);if(nl.length>bookmark.index){try{rng.addElement(nl[bookmark.index])}catch(ex){}}}else{try{if(bookmark.start<0)return true;rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length)}catch(ex){return true}}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}if(tinyMCE.isGecko||tinyMCE.isOpera){if(!sel)return false;if(bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng)}if(bookmark.start!=-1&&bookmark.end!=-1){try{sd=this._getTextPos(b,bookmark.start,bookmark.end);rng=doc.createRange();rng.setStart(sd.startNode,sd.startOffset);rng.setEnd(sd.endNode,sd.endOffset);sel.removeAllRanges();sel.addRange(rng);if(!tinyMCE.isOpera)win.focus()}catch(ex){}}win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}return false},_getPosText:function(r,sn,en){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d}p+=n.nodeValue?n.nodeValue.length:0}return null},_getTextPos:function(r,sp,ep){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){p+=n.nodeValue?n.nodeValue.length:0;if(p>=sp&&!d.startNode){d.startNode=n;d.startOffset=sp-(p-n.nodeValue.length)}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-n.nodeValue.length);return d}}return null},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(inst.settings.auto_resize)inst.resizeToContent();if(tinyMCE.isRealIE){rng=inst.getDoc().body.createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select()}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd()}this.scrollToNode(node);return}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,[],3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node)}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length)}else rng.collapse(to_start)}sel.removeAllRanges();sel.addRange(rng)}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node},scrollToNode:function(node){var inst=this.instance,w=inst.getWin(),vp=inst.getViewPort(),pos=tinyMCE.getAbsPosition(node),cvp,p,cwin;if(pos.absLeft<vp.left||pos.absLeft>vp.left+vp.width||pos.absTop<vp.top||pos.absTop>vp.top+(vp.height-25))w.scrollTo(pos.absLeft,pos.absTop-vp.height+25);if(inst.settings.auto_resize){cwin=inst.getContainerWin();cvp=tinyMCE.getViewPort(cwin);p=this.getAbsPosition(node);if(p.absLeft<cvp.left||p.absLeft>cvp.left+cvp.width||p.absTop<cvp.top||p.absTop>cvp.top+cvp.height)cwin.scrollTo(p.absLeft,p.absTop-cvp.height+25)}},getAbsPosition:function(n){var pos=tinyMCE.getAbsPosition(n),ipos=tinyMCE.getAbsPosition(this.instance.iframeElement);return{absLeft:ipos.absLeft+pos.absLeft,absTop:ipos.absTop+pos.absTop}},getSel:function(){var inst=this.instance;if(tinyMCE.isRealIE)return inst.getDoc().selection;return inst.contentWindow.getSelection()},getRng:function(){var s=this.getSel();if(s==null)return null;if(tinyMCE.isRealIE)return s.createRange();if(tinyMCE.isSafari&&!s.getRangeAt)return''+window.getSelection();if(s.rangeCount>0)return s.getRangeAt(0);return null},isCollapsed:function(){var r=this.getRng();if(r.item)return false;return r.boundingWidth==0||this.getSel().isCollapsed},collapse:function(b){var r=this.getRng(),s=this.getSel();if(r.select){r.collapse(b);r.select()}else{if(b)s.collapseToStart();else s.collapseToEnd()}},getFocusElement:function(){var inst=this.instance,doc,rng,sel,elm;if(tinyMCE.isRealIE){doc=inst.getDoc();rng=doc.selection.createRange();elm=rng.item?rng.item(0):rng.parentElement()}else{if(!tinyMCE.isSafari&&inst.isHidden())return inst.getBody();sel=this.getSel();rng=this.getRng();if(!sel||!rng)return null;elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset]}}}elm=tinyMCE.getParentElement(elm);}return elm}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true};TinyMCE_UndoRedo.prototype={add:function(l){var b,customUndoLevels,newHTML,inst=this.instance,i,ul,ur;if(l){this.undoLevels[this.undoLevels.length]=l;return true}if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;if(tinyMCE.typingUndoIndex!=-1)tinyMCE.undoIndex=tinyMCE.typingUndoIndex}newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){inst.isNotDirty=false;tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);customUndoLevels=tinyMCE.settings.custom_undo_redo_levels;if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(i=0;i<this.undoLevels.length-1;i++)this.undoLevels[i]=this.undoLevels[i+1];this.undoLevels.length--;this.undoIndex--;}b=inst.undoBookmark;if(!b)b=inst.selection.getBookmark();this.undoIndex++;this.undoLevels[this.undoIndex]={content:newHTML,bookmark:b};ul=tinyMCE.undoLevels;for(i=tinyMCE.undoIndex+1;i<ul.length;i++){ur=ul[i].undoRedo;if(ur.undoIndex==ur.undoLevels.length-1)ur.undoIndex--;ur.undoLevels.length--}tinyMCE.undoLevels[tinyMCE.undoIndex++]=inst;tinyMCE.undoLevels.length=tinyMCE.undoIndex;this.undoLevels.length=this.undoIndex+1;return true}return false},undo:function(){var inst=this.instance;if(this.undoIndex>0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}tinyMCE.triggerNodeChange()}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){var doc=inst.getDoc(),sel=inst.getSel(),body=inst.getBody(),win=inst.contentWindow,rng=sel.getRangeAt(0);var rootElm=doc.documentElement,blockName="P",startNode,endNode,startBlock,endBlock;var rngBefore,rngAfter,direct,startNode,startOffset,endNode,endOffset,b=tinyMCE.isOpera?inst.selection.getBookmark():null;var paraBefore,paraAfter,startChop,endChop,contents,i;function isEmpty(para){var nodes;function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()==''}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;nodes=tinyMCE.getNodeTree(para,[],3);for(i=0;i<nodes.length;i++){if(!isEmptyHTML(nodes[i].nodeValue))return false}return true}rngBefore=doc.createRange();rngBefore.setStart(sel.anchorNode,sel.anchorOffset);rngBefore.collapse(true);rngAfter=doc.createRange();rngAfter.setStart(sel.focusNode,sel.focusOffset);rngAfter.collapse(true);direct=rngBefore.compareBoundaryPoints(rngBefore.START_TO_END,rngAfter)<0;startNode=direct?sel.anchorNode:sel.focusNode;startOffset=direct?sel.anchorOffset:sel.focusOffset;endNode=direct?sel.focusNode:sel.anchorNode;endOffset=direct?sel.focusOffset:sel.anchorOffset;startNode=startNode.nodeName=="BODY"?startNode.firstChild:startNode;endNode=endNode.nodeName=="BODY"?endNode.firstChild:endNode;startBlock=inst.getParentBlockElement(startNode);endBlock=inst.getParentBlockElement(endNode);if(startBlock&&(startBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(startBlock.style.position)))startBlock=null;if(endBlock&&(endBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(endBlock.style.position)))endBlock=null;if(startBlock!=null){blockName=startBlock.nodeName;if(/(TD|TABLE|TH|CAPTION)/.test(blockName)||(blockName=="DIV"&&/left|right/gi.test(startBlock.style.cssFloat)))blockName="P"}if(tinyMCE.getParentElement(startBlock,"OL,UL",null,body)!=null)return false;if((startBlock!=null&&startBlock.nodeName=="TABLE")||(endBlock!=null&&endBlock.nodeName=="TABLE"))startBlock=endBlock=null;paraBefore=(startBlock!=null&&startBlock.nodeName==blockName)?startBlock.cloneNode(false):doc.createElement(blockName);paraAfter=(endBlock!=null&&endBlock.nodeName==blockName)?endBlock.cloneNode(false):doc.createElement(blockName);if(/^(H[1-6])$/.test(blockName))paraAfter=doc.createElement("p");startChop=startNode;endChop=endNode;node=startChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;startChop=node}while((node=node.previousSibling?node.previousSibling:node.parentNode));node=endChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;endChop=node}while((node=node.nextSibling?node.nextSibling:node.parentNode));if(startChop.nodeName=="TD")startChop=startChop.firstChild;if(endChop.nodeName=="TD")endChop=endChop.lastChild;if(startBlock==null){rng.deleteContents();if(!tinyMCE.isSafari)sel.removeAllRanges();if(startChop!=rootElm&&endChop!=rootElm){rngBefore=rng.cloneRange();if(startChop==body)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);paraBefore.appendChild(rngBefore.cloneContents());if(endChop.parentNode.nodeName==blockName)endChop=endChop.parentNode;rng.setEndAfter(endChop);if(endChop.nodeName!="#text"&&endChop.nodeName!="BODY")rngBefore.setEndAfter(endChop);contents=rng.cloneContents();if(contents.firstChild&&(contents.firstChild.nodeName==blockName||contents.firstChild.nodeName=="BODY"))paraAfter.innerHTML=contents.firstChild.innerHTML;else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng.deleteContents();rngAfter.deleteContents();rngBefore.deleteContents();if(tinyMCE.isOpera){paraBefore.normalize();rngBefore.insertNode(paraBefore);paraAfter.normalize();rngBefore.insertNode(paraAfter)}else{paraAfter.normalize();rngBefore.insertNode(paraAfter);paraBefore.normalize();rngBefore.insertNode(paraBefore)}}else{body.innerHTML="<"+blockName+"> </"+blockName+"><"+blockName+"> </"+blockName+">";paraAfter=body.childNodes[1]}inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode)}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset)}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();if(tinyMCE.isOpera){rng.insertNode(paraBefore);rng.insertNode(paraAfter)}else{rng.insertNode(paraAfter);rng.insertNode(paraBefore)}paraAfter.normalize();paraBefore.normalize();inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"&&sn.parentNode.nodeName!="BODY"){nv=sn.nodeValue;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling)}if(inst.settings.auto_resize)inst.resizeToContent();return s}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re),e=this.getElement(),x,y;var w=parseInt(re.offsetWidth),h=parseInt(re.offsetHeight);var ew=parseInt(e.offsetWidth),eh=parseInt(e.offsetHeight);switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/ 2) - (ew /2);y=rep.absTop+(h/ 2) - (eh /2);break}this.moveTo(x,y)},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y)},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker()},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h)},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker()},show:function(){var el=this.getElement();if(el){el.style.display='block';this.updateBlocker()}},hide:function(){var el=this.getElement();if(el){el.style.display='none';this.updateBlocker()}},isVisible:function(){return this.getElement().style.display=='block'},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element},setBlockMode:function(s){this.blockMode=s},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display}else b.style.display='none'}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.getElementById(this.id+"_blocker");if(!b){b=d.createElement("iframe");b.setAttribute('id',this.id+"_blocker");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b)}this.blockerElement=b}return this.blockerElement},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent}return p},create:function(n,c,p,h){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;if(h)e.innerHTML=h;p.appendChild(e);return this.element=e},exists:function(){return this.doc.getElementById(this.id)!=null},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s)},remove:function(){var e=this.getElement(),b=this.getBlocker();if(e)e.parentNode.removeChild(e);if(b)b.parentNode.removeChild(b)}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=[];this.needsUpdate=true};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class)},clear:function(){this.items=[]},addTitle:function(t){this.add({type:'title',text:t})},addDisabled:function(t){this.add({type:'disabled',text:t})},addSeparator:function(){this.add({type:'separator'})},addItem:function(t,js){this.add({text:t,js:js})},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='<span class="mceMenuLine"></span>';h+='<table border="0" cellpadding="0" cellspacing="0">';for(i=0;i<m.length;i++){t=tinyMCE.xmlEncode(m[i].text);c=m[i].class_name?' class="'+m[i].class_name+'"':'';switch(m[i].type){case'separator':h+='<tr class="'+s.separator_class+'"><td>';break;case'title':h+='<tr class="'+s.title_class+'"><td><span'+c+'>'+t+'</span>';break;case'disabled':h+='<tr class="'+s.disabled_class+'"><td><span'+c+'>'+t+'</span>';break;default:h+='<tr><td><a href="'+tinyMCE.xmlEncode(m[i].js)+'" onmousedown="'+tinyMCE.xmlEncode(m[i].js)+';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span'+c+'>'+t+'</span></a>'}h+='</td></tr>'}h+='</table>';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker()},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this}});tinyMCE.add(TinyMCE_Engine,{debug:function(){var m="",a,i,l=tinyMCE.log.length;for(i=0,a=this.debug.arguments;i<a.length;i++){m+=a[i];if(i<a.length-1)m+=', '}if(l<1000)tinyMCE.log[l]="[debug] "+m}});
\ No newline at end of file
+function TinyMCE_Engine(){var ua;this.majorVersion="2";this.minorVersion="1.3";this.releaseDate="2007-11-27";this.instances=[];this.switchClassCache=[];this.windowArgs=[];this.loadedFiles=[];this.pendingFiles=[];this.loadingIndex=0;this.configs=[];this.currentConfig=0;this.eventHandlers=[];this.log=[];this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.settings=[];ua=navigator.userAgent;this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.isMSIE5=this.isMSIE&&(ua.indexOf('MSIE 5')!=-1);this.isMSIE5_0=this.isMSIE&&(ua.indexOf('MSIE 5.0')!=-1);this.isMSIE7=this.isMSIE&&(ua.indexOf('MSIE 7')!=-1);this.isGecko=ua.indexOf('Gecko')!=-1;this.isSafari=ua.indexOf('Safari')!=-1;this.isOpera=window['opera']&&opera.buildNumber?true:false;this.isMac=ua.indexOf('Mac')!=-1;this.isNS7=ua.indexOf('Netscape/7')!=-1;this.isNS71=ua.indexOf('Netscape/7.1')!=-1;this.dialogCounter=0;this.plugins=[];this.themes=[];this.menus=[];this.loadedPlugins=[];this.buttonMap=[];this.isLoaded=false;if(this.isOpera){this.isMSIE=true;this.isGecko=false;this.isSafari=false}this.isIE=this.isMSIE;this.isRealIE=this.isMSIE&&!this.isOpera;this.idCounter=0};TinyMCE_Engine.prototype={init:function(settings){var theme,nl,baseHREF="",i,cssPath,entities,h,p,src,elements=[],head;if(this.isMSIE5_0)return;this.settings=settings;if(typeof(document.execCommand)=='undefined')return;if(!tinyMCE.baseURL){head=document.getElementsByTagName('head')[0];if(head){for(i=0,nl=head.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i])}for(i=0,nl=document.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i]);nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)baseHREF=nl[i].href}for(i=0;i<elements.length;i++){if(elements[i].src&&(elements[i].src.indexOf("tiny_mce.js")!=-1||elements[i].src.indexOf("tiny_mce_dev.js")!=-1||elements[i].src.indexOf("tiny_mce_src.js")!=-1||elements[i].src.indexOf("tiny_mce_gzip")!=-1)){src=elements[i].src;tinyMCE.srcMode=(src.indexOf('_src')!=-1||src.indexOf('_dev')!=-1)?'_src':'';tinyMCE.gzipMode=src.indexOf('_gzip')!=-1;src=src.substring(0,src.lastIndexOf('/'));if(settings.exec_mode=="src"||settings.exec_mode=="normal")tinyMCE.srcMode=settings.exec_mode=="src"?'_src':'';if(baseHREF!==''&&src.indexOf('://')==-1)tinyMCE.baseURL=baseHREF+src;else tinyMCE.baseURL=src;break}}}this.documentBasePath=document.location.href;if(this.documentBasePath.indexOf('?')!=-1)this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.indexOf('?'));this.documentURL=this.documentBasePath;this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.lastIndexOf('/'));if(tinyMCE.baseURL.indexOf('://')==-1&&tinyMCE.baseURL.charAt(0)!='/'){tinyMCE.baseURL=this.documentBasePath+"/"+tinyMCE.baseURL}this._def("mode","none");this._def("theme","advanced");this._def("plugins","",true);this._def("language","en");this._def("docs_language",this.settings.language);this._def("elements","");this._def("textarea_trigger","mce_editable");this._def("editor_selector","");this._def("editor_deselector","mceNoEditor");this._def("valid_elements","+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");this._def("extended_valid_elements","");this._def("invalid_elements","");this._def("encoding","");this._def("urlconverter_callback",tinyMCE.getParam("urlconvertor_callback","TinyMCE_Engine.prototype.convertURL"));this._def("save_callback","");this._def("force_br_newlines",false);this._def("force_p_newlines",true);this._def("add_form_submit_trigger",true);this._def("relative_urls",true);this._def("remove_script_host",true);this._def("focus_alert",true);this._def("document_base_url",this.documentURL);this._def("visual",true);this._def("visual_table_class","mceVisualAid");this._def("setupcontent_callback","");this._def("fix_content_duplication",true);this._def("custom_undo_redo",true);this._def("custom_undo_redo_levels",-1);this._def("custom_undo_redo_keyboard_shortcuts",true);this._def("custom_undo_redo_restore_selection",true);this._def("custom_undo_redo_global",false);this._def("verify_html",true);this._def("apply_source_formatting",false);this._def("directionality","ltr");this._def("cleanup_on_startup",false);this._def("inline_styles",false);this._def("convert_newlines_to_brs",false);this._def("auto_reset_designmode",true);this._def("entities","39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",true);this._def("entity_encoding","named");this._def("cleanup_callback","");this._def("add_unload_trigger",true);this._def("ask",false);this._def("nowrap",false);this._def("auto_resize",false);this._def("auto_focus",false);this._def("cleanup",true);this._def("remove_linebreaks",true);this._def("button_tile_map",false);this._def("submit_patch",true);this._def("browsers","msie,safari,gecko,opera",true);this._def("dialog_type","window");this._def("accessibility_warnings",true);this._def("accessibility_focus",true);this._def("merge_styles_invalid_parents","");this._def("force_hex_style_colors",true);this._def("trim_span_elements",true);this._def("convert_fonts_to_spans",false);this._def("doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",true);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');this._def("gecko_spellcheck",false);this._def("hide_selects_on_submit",true);this._def("forced_root_block",false);this._def("remove_trailing_nbsp",false);this._def("save_on_tinymce_forms",false);if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings.browsers.indexOf('msie')==-1)return;if(this.isGecko&&this.settings.browsers.indexOf('gecko')==-1)return;if(this.isSafari&&this.settings.browsers.indexOf('safari')==-1)return;if(this.isOpera&&this.settings.browsers.indexOf('opera')==-1)return;baseHREF=tinyMCE.settings.document_base_url;h=document.location.href;p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings.document_base_url=baseHREF;tinyMCE.settings.document_base_prefix=h}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings.base_href=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings.theme;this.inlineStrict='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';this.inlineTransitional='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';this.blockElms='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';this.blockRegExp=new RegExp("^("+this.blockElms+")$","i");this.posKeyCodes=[13,45,36,35,33,34,37,38,39,40];this.uniqueURL='javascript:void(091039730);';this.uniqueTag='<div id="mceTMPElement" style="display: none">TMP</div>';this.callbacks=['onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup','removeInstance'];this.settings.theme_href=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isIE||tinyMCE.isOpera)this.settings.force_br_newlines=false;if(tinyMCE.getParam("popups_css",false)){cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.popups_css=this.documentBasePath+"/"+cssPath;else this.settings.popups_css=cssPath}else this.settings.popups_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.editor_css=this.documentBasePath+"/"+cssPath;else this.settings.editor_css=cssPath}else{if(this.settings.editor_css!=='')this.settings.editor_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css"}if(this.configs.length==0){if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isRealIE){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad)}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents()}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings.theme+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings.language+'.js');this.loadCSS(this.settings.editor_css);p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){if(p[i].charAt(0)!='-')this.loadScript(tinyMCE.baseURL+'/plugins/'+p[i]+'/editor_plugin'+tinyMCE.srcMode+'.js')}}if(tinyMCE.getParam('entity_encoding')=='named'){settings.cleanup_entities=[];entities=tinyMCE.getParam('entities','',true,',');for(i=0;i<entities.length;i+=2)settings.cleanup_entities['c'+entities[i]]=entities[i+1]}settings.index=this.configs.length;this.configs[this.configs.length]=settings;this.loadNextScript();if(this.isIE&&!this.isOpera){try{document.execCommand('BackgroundImageCache',false,true)}catch(e){}}this.xmlEncodeRe=new RegExp('[<>&"]','g')},_addUnloadEvents:function(){var st=tinyMCE.settings.add_unload_trigger;if(tinyMCE.isIE){if(st){tinyMCE.addEvent(window,"unload",TinyMCE_Engine.prototype.unloadHandler);tinyMCE.addEvent(window.document,"beforeunload",TinyMCE_Engine.prototype.unloadHandler)}}else{if(st)tinyMCE.addEvent(window,"unload",function(){tinyMCE.triggerSave(true,true)})}},_def:function(key,def_val,t){var v=tinyMCE.getParam(key,def_val);v=t?v.replace(/\s+/g,""):v;this.settings[key]=v},hasPlugin:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},addPlugin:function(n,p){var op=this.plugins[n];p.baseURL=op?op.baseURL:tinyMCE.baseURL+"/plugins/"+n;this.plugins[n]=p;this.loadNextScript()},setPluginBaseURL:function(n,u){var op=this.plugins[n];if(op)op.baseURL=u;else this.plugins[n]={baseURL:u}},loadPlugin:function(n,u){u=u.indexOf('.js')!=-1?u.substring(0,u.lastIndexOf('/')):u;u=u.charAt(u.length-1)=='/'?u.substring(0,u.length-1):u;this.plugins[n]={baseURL:u};this.loadScript(u+"/editor_plugin"+(tinyMCE.srcMode?'_src':'')+".js")},hasTheme:function(n){return typeof(this.themes[n])!="undefined"&&this.themes[n]!=null},addTheme:function(n,t){this.themes[n]=t;this.loadNextScript()},addMenu:function(n,m){this.menus[n]=m},hasMenu:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},loadScript:function(url){var i;for(i=0;i<this.loadedFiles.length;i++){if(this.loadedFiles[i]==url)return}if(tinyMCE.settings.strict_loading_mode)this.pendingFiles[this.pendingFiles.length]=url;else document.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'"></script>');this.loadedFiles[this.loadedFiles.length]=url},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex<this.pendingFiles.length){se=d.createElementNS('http://www.w3.org/1999/xhtml','script');se.setAttribute('language','javascript');se.setAttribute('type','text/javascript');se.setAttribute('src',this.pendingFiles[this.loadingIndex++]);d.getElementsByTagName("head")[0].appendChild(se)}else this.loadingIndex=-1;},loadCSS:function(url){var ar=url.replace(/\s+/,'').split(',');var lflen=0,csslen=0,skip=false;var x=0,i=0,nl,le;for(x=0,csslen=ar.length;x<csslen;x++){if(ar[x]!=null&&ar[x]!='null'&&ar[x].length>0){for(i=0,lflen=this.loadedFiles.length;i<lflen;i++){if(this.loadedFiles[i]==ar[x]){skip=true;break}}if(!skip){if(tinyMCE.settings.strict_loading_mode){nl=document.getElementsByTagName("head");le=document.createElement('link');le.setAttribute('href',ar[x]);le.setAttribute('rel','stylesheet');le.setAttribute('type','text/css');nl[0].appendChild(le)}else document.write('<link href="'+ar[x]+'" rel="stylesheet" type="text/css" />');this.loadedFiles[this.loadedFiles.length]=ar[x]}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x<csslen;x++){css_file=css_ary[x];if(css_file!=null&&css_file!='null'&&css_file.length>0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm)}else doc.createStyleSheet(css_file)}}},confirmAdd:function(e,settings){var elm=tinyMCE.isIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings.convert_on_click||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang.lang_edit_confirm)))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true')},updateContent:function(form_element_name){var formElement,n,inst,doc;formElement=document.getElementById(form_element_name);for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid)}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document)},removeInstance:function(ti){var t=[],n,i;for(n in tinyMCE.instances){i=tinyMCE.instances[n];if(tinyMCE.isInstance(i)&&ti!=i)t[n]=i}tinyMCE.instances=t;n=[];t=tinyMCE.undoLevels;for(i=0;i<t.length;i++){if(t[i]!=ti)n.push(t[i])}tinyMCE.undoLevels=n;tinyMCE.undoIndex=n.length;tinyMCE.dispatchCallback(ti,'remove_instance_callback','removeInstance',ti);return ti},removeMCEControl:function(editor_id){var inst=tinyMCE.getInstanceById(editor_id),h,re,ot,tn,n;if(inst){inst.switchSettings();editor_id=inst.editorId;h=tinyMCE.getContent(editor_id);this.removeInstance(inst);tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;tinyMCE.selectedInstance=tinyMCE.instances[n];break}re=document.getElementById(editor_id+"_parent");ot=inst.oldTargetElement;tn=ot.nodeName.toLowerCase();if(tn=="textarea"||tn=="input"){re.parentNode.removeChild(re);ot.style.display="inline";ot.value=h}else{ot.innerHTML=h;ot.style.display='block';re.parentNode.insertBefore(ot,re);re.parentNode.removeChild(re)}}},triggerSave:function(skip_cleanup,skip_callback){var inst,n;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.triggerSave(skip_cleanup,skip_callback)}},resetForm:function(form_index){var i,inst,n,formObj=document.forms[form_index];for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();for(i=0;i<formObj.elements.length;i++){if(inst.formTargetElementId==formObj.elements[i].name)inst.getBody().innerHTML=inst.startContent}}},execInstanceCommand:function(editor_id,command,user_interface,value,focus){var inst=tinyMCE.getInstanceById(editor_id),r;if(inst){r=inst.selection.getRng();if(typeof(focus)=="undefined")focus=true;if(focus&&(!r||!r.item))inst.contentWindow.focus();inst.autoResetDesignMode();this.selectedElement=inst.getFocusElement();inst.select();tinyMCE.execCommand(command,user_interface,value);if(tinyMCE.isIE&&window.event!=null)tinyMCE.cancelEvent(window.event)}},execCommand:function(command,user_interface,value){var inst=tinyMCE.selectedInstance,n,pe,te;user_interface=user_interface?user_interface:false;value=value?value:null;if(inst)inst.switchSettings();switch(command){case"Undo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex>0){tinyMCE.nextUndoRedoAction='Undo';inst=this.undoLevels[--this.undoIndex];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Undo')}}else inst.execCommand('Undo');return true;case"Redo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex<=this.undoLevels.length-1){tinyMCE.nextUndoRedoAction='Redo';inst=this.undoLevels[this.undoIndex++];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Redo')}}else inst.execCommand('Redo');return true;case'mceFocus':inst=tinyMCE.getInstanceById(value);if(inst)inst.getWin().focus();return;case"mceAddControl":case"mceAddEditor":tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceAddFrameControl":tinyMCE.addMCEControl(tinyMCE._getElementById(value.element,value.document),value.element,value.document);return;case"mceRemoveControl":case"mceRemoveEditor":tinyMCE.removeMCEControl(value);return;case"mceToggleEditor":inst=tinyMCE.getInstanceById(value);if(inst){pe=document.getElementById(inst.editorId+'_parent');te=inst.oldTargetElement;if(typeof(inst.enabled)=='undefined')inst.enabled=true;inst.enabled=!inst.enabled;if(!inst.enabled){pe.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')te.value=inst.getHTML();else te.innerHTML=inst.getHTML();te.style.display=inst.oldTargetDisplay;tinyMCE.dispatchCallback(inst,'hide_instance_callback','hideInstance',inst)}else{pe.style.display='block';te.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')inst.setHTML(te.value);else inst.setHTML(te.innerHTML);inst.useCSS=false;tinyMCE.dispatchCallback(inst,'show_instance_callback','showInstance',inst)}}else tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceResetDesignMode":if(tinyMCE.isGecko){for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;try{tinyMCE.instances[n].getDoc().designMode="off";tinyMCE.instances[n].getDoc().designMode="on";tinyMCE.instances[n].useCSS=false}catch(e){}}}return}if(inst){inst.execCommand(command,user_interface,value)}else if(tinyMCE.settings.focus_alert)alert(tinyMCELang.lang_focus_alert)},_createIFrame:function(replace_element,doc,win){var iframe,id=replace_element.getAttribute("id");var aw,ah;if(typeof(doc)=="undefined")doc=document;if(typeof(win)=="undefined")win=window;iframe=doc.createElement("iframe");aw=""+tinyMCE.settings.area_width;ah=""+tinyMCE.settings.area_height;if(aw.indexOf('%')==-1){aw=parseInt(aw);aw=(isNaN(aw)||aw<0)?300:aw;aw=aw+"px"}if(ah.indexOf('%')==-1){ah=parseInt(ah);ah=(isNaN(ah)||ah<0)?240:ah;ah=ah+"px"}iframe.setAttribute("id",id);iframe.setAttribute("name",id);iframe.setAttribute("class","mceEditorIframe");iframe.setAttribute("border","0");iframe.setAttribute("frameBorder","0");iframe.setAttribute("marginWidth","0");iframe.setAttribute("marginHeight","0");iframe.setAttribute("leftMargin","0");iframe.setAttribute("topMargin","0");iframe.setAttribute("width",aw);iframe.setAttribute("height",ah);iframe.setAttribute("allowtransparency","true");iframe.className='mceEditorIframe';if(tinyMCE.settings.auto_resize)iframe.setAttribute("scrolling","no");if(tinyMCE.isRealIE)iframe.setAttribute("src",this.settings.default_document);iframe.style.width=aw;iframe.style.height=ah;if(tinyMCE.settings.strict_loading_mode)iframe.style.marginBottom='-5px';if(tinyMCE.isRealIE)replace_element.outerHTML=iframe.outerHTML;else replace_element.parentNode.replaceChild(iframe,replace_element);if(tinyMCE.isRealIE)return win.frames[id];else return iframe},setupContent:function(editor_id){var inst=tinyMCE.instances[editor_id],i,doc=inst.getDoc(),head=doc.getElementsByTagName('head').item(0);var content=inst.startContent,contentElement,body;if(tinyMCE.settings.strict_loading_mode){content=content.replace(/</g,'<');content=content.replace(/>/g,'>');content=content.replace(/"/g,'"');content=content.replace(/&/g,'&')}tinyMCE.selectedInstance=inst;inst.switchSettings();if(!tinyMCE.isIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm"}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return}if(!head||!doc.body){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings.theme+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings.content_css);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo')}for(i=1;i<=6;i++)inst.addShortcut('ctrl',''+i,'','FormatBlock',false,'<h'+i+'>');inst.addShortcut('ctrl','7','','FormatBlock',false,'<p>');inst.addShortcut('ctrl','8','','FormatBlock',false,'<div>');inst.addShortcut('ctrl','9','','FormatBlock',false,'<address>');if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline')}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getBody().setAttribute('id','mceSpanFonts');if(tinyMCE.settings.nowrap)doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings.directionality;doc.editorId=editor_id;if(!tinyMCE.isIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings.base_href);if(tinyMCE.settings.convert_newlines_to_brs){content=tinyMCE.regexpReplace(content,"\r\n","<br />","gi");content=tinyMCE.regexpReplace(content,"\r","<br />","gi");content=tinyMCE.regexpReplace(content,"\n","<br />","gi")}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings.force_br_newlines)doc.styleSheets[0].addRule("p","margin: 0;");body=inst.getBody();body.editorId=editor_id}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isIE){contentElement=inst.getDoc().createElement("body");doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings.cleanup_on_startup)tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else tinyMCE.setInnerHTML(inst.getBody(),content);tinyMCE.convertAllRelativeURLs(inst.getBody())}else{if(tinyMCE.settings.cleanup_on_startup){tinyMCE._setHTML(inst.getDoc(),content);try{tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,inst.contentDocument,this.settings,inst.getBody()))}catch(e){}}else tinyMCE._setHTML(inst.getDoc(),content)}tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings.visual,inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch)}}inst.select();tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}if(tinyMCE.isGecko)inst.getBody().spellcheck=tinyMCE.getParam("gecko_spellcheck");tinyMCE._removeInternal(inst.getBody());inst.select();tinyMCE.triggerNodeChange(false,true)},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'href="$1" mce_href="$1"')}return s},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}},removeTinyMCEFormElements:function(form_obj){var i,elementId;if(!tinyMCE.getParam('hide_selects_on_submit'))return;if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form")}if(form_obj==null)return;for(i=0;i<form_obj.elements.length;i++){elementId=form_obj.elements[i].name?form_obj.elements[i].name:form_obj.elements[i].id;if(elementId.indexOf('mce_editor_')==0)form_obj.elements[i].disabled=true}},handleEvent:function(e){var inst=tinyMCE.selectedInstance,i,elm,keys;if(typeof(tinyMCE)=="undefined")return true;if(tinyMCE.executeCallback(tinyMCE.selectedInstance,'handle_event_callback','handleEvent',e))return false;switch(e.type){case"beforedeactivate":case"blur":if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.execCommand('mceEndTyping');tinyMCE.hideMenus();return;case"drop":case"beforepaste":return;case"submit":tinyMCE.formSubmit(tinyMCE.isMSIE?window.event.srcElement:e.target);return;case"reset":var formObj=tinyMCE.isIE?window.event.srcElement:e.target;for(i=0;i<document.forms.length;i++){if(document.forms[i]==formObj)window.setTimeout('tinyMCE.resetForm('+i+');',10)}return;case"keypress":if(inst&&inst.handleShortcut(e))return false;if(e.target.editorId){tinyMCE.instances[e.target.editorId].select()}else{if(e.target.ownerDocument.editorId)tinyMCE.instances[e.target.ownerDocument.editorId].select()}if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();if((tinyMCE.isGecko||tinyMCE.isOpera||tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&e.keyCode==13&&!e.shiftKey){if(TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance,e)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if((tinyMCE.isGecko&&!tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if(tinyMCE.isIE&&tinyMCE.settings.force_br_newlines&&e.keyCode==13){if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance){var sel=tinyMCE.selectedInstance.getDoc().selection;var rng=sel.createRange();if(tinyMCE.getParentElement(rng.parentElement(),"li")!=null)return false;e.returnValue=false;e.cancelBubble=true;rng.pasteHTML("<br />");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false)}return false;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;inst._fixRootBlocks();if(inst.settings.remove_trailing_nbsp)inst._fixTrailingNbsp();if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings.visual,tinyMCE.selectedInstance);if(tinyMCE.isIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isIE&&e.type=="keyup"&&e.keyCode==13){elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML=" ";else elm.innerHTML=" "}}}keys=tinyMCE.posKeyCodes;var posKey=false;for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){posKey=true;break}}if(tinyMCE.isIE&&tinyMCE.settings.custom_undo_redo){keys=[8,46];for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){if(e.type=="keyup")tinyMCE.triggerNodeChange(false)}}}if(e.keyCode==17)return true;if(tinyMCE.isGecko){if(!posKey&&e.type=="keyup"&&!e.ctrlKey||(e.ctrlKey&&(e.keyCode==86||e.keyCode==88)))tinyMCE.execCommand("mceStartTyping")}else{if(!posKey&&e.type=="keyup")tinyMCE.execCommand("mceStartTyping")}if(e.type=="keydown"&&(posKey||e.ctrlKey)&&inst)inst.undoBookmark=inst.selection.getBookmark();if(e.type=="keyup"&&(posKey||e.ctrlKey))tinyMCE.execCommand("mceEndTyping");if(posKey&&e.type=="keyup")tinyMCE.triggerNodeChange(false);if(tinyMCE.isIE&&e.ctrlKey)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);break;case"mousedown":case"mouseup":case"click":case"dblclick":case"focus":tinyMCE.hideMenus();if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.switchSettings();tinyMCE.selectedInstance.isFocused=true}var targetBody=tinyMCE.getParentElement(e.target,"html");for(var instanceName in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[instanceName]))continue;inst=tinyMCE.instances[instanceName];inst.autoResetDesignMode();if(inst.getBody().parentNode==targetBody){inst.select();tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");tinyMCE.imgElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"img");break}}if(!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark&&(e.type=="mouseup"||e.type=="dblclick"))tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark=tinyMCE.selectedInstance.selection.getBookmark();if(e.type!="focus")tinyMCE.selectedNode=null;tinyMCE.triggerNodeChange(false);tinyMCE.execCommand("mceEndTyping");if(e.type=="mouseup")tinyMCE.execCommand("mceAddUndoLevel");if(!tinyMCE.selectedInstance&&e.target.editorId)tinyMCE.instances[e.target.editorId].select();return false}},getButtonHTML:function(id,lang,img,cmd,ui,val){var h='',m,x,io='';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.isRealIE)io='onmouseover="tinyMCE.lastHover = this;"';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=this.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}else{h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceButtonNormal" target="_self">';h+='<img src="'+img+'" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}return h},getMenuButtonHTML:function(id,lang,img,mcmd,cmd,ui,val){var h='',m,x;mcmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+mcmd+'\');';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: '+x+'px 0" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}else{if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}return h},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'')},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i<a.length;i++)this.buttonMap[a[i]]=i},formSubmit:function(f,p){var n,inst,found=false;if(f.form)f=f.form;if(tinyMCE.getParam('save_on_tinymce_forms')){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formElement){if(f==inst.formElement.form){found=true;inst.isNotDirty=true}}}}else found=true;if(found){tinyMCE.removeTinyMCEFormElements(f);tinyMCE.triggerSave()}if(f.mceOldSubmit&&p)f.mceOldSubmit()},submitPatch:function(){tinyMCE.formSubmit(this,true)},onLoad:function(){var r,i,c,mode,trigger,elements,element,settings,elementId,elm;var selector,deselector,elementRefAr,form;if(tinyMCE.settings.strict_loading_mode&&this.loadingIndex!=-1){window.setTimeout('tinyMCE.onLoad();',1);return}if(tinyMCE.isRealIE&&window.event.type=="readystatechange"&&document.readyState!="complete")return true;if(tinyMCE.isLoaded)return true;tinyMCE.isLoaded=true;if(tinyMCE.isRealIE&&document.body&&window.location.href!=window.top.location.href){r=document.body.createTextRange();r.collapse(true);r.select()}tinyMCE.dispatchCallback(null,'onpageload','onPageLoad');for(c=0;c<tinyMCE.configs.length;c++){tinyMCE.settings=tinyMCE.configs[c];selector=tinyMCE.getParam("editor_selector");deselector=tinyMCE.getParam("editor_deselector");elementRefAr=[];if(document.forms&&tinyMCE.settings.add_form_submit_trigger&&!tinyMCE.submitTriggers){for(i=0;i<document.forms.length;i++){form=document.forms[i];tinyMCE.addEvent(form,"submit",TinyMCE_Engine.prototype.handleEvent);tinyMCE.addEvent(form,"reset",TinyMCE_Engine.prototype.handleEvent);tinyMCE.submitTriggers=true;if(tinyMCE.settings.submit_patch){try{form.mceOldSubmit=form.submit;form.submit=TinyMCE_Engine.prototype.submitPatch}catch(e){}}}}mode=tinyMCE.settings.mode;switch(mode){case"exact":elements=tinyMCE.getParam('elements','',true,',');for(i=0;i<elements.length;i++){element=tinyMCE._getElementById(elements[i]);trigger=element?element.getAttribute(tinyMCE.settings.textarea_trigger):"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(element,"class")))continue;if(trigger=="false")continue;if((tinyMCE.settings.ask||tinyMCE.settings.convert_on_click)&&element){elementRefAr[elementRefAr.length]=element;continue}if(element)tinyMCE.addMCEControl(element,elements[i])}break;case"specific_textareas":case"textareas":elements=document.getElementsByTagName("textarea");for(i=0;i<elements.length;i++){elm=elements.item(i);trigger=elm.getAttribute(tinyMCE.settings.textarea_trigger);if(selector!==''&&!new RegExp('\\b'+selector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if(selector!=='')trigger=selector!==''?"true":"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if((mode=="specific_textareas"&&trigger=="true")||(mode=="textareas"&&trigger!="false"))elementRefAr[elementRefAr.length]=elm}break}for(i=0;i<elementRefAr.length;i++){element=elementRefAr[i];elementId=element.name?element.name:element.id;if(tinyMCE.settings.ask||tinyMCE.settings.convert_on_click){if(tinyMCE.isGecko){settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});if(element.nodeName!="TEXTAREA"&&element.nodeName!="INPUT")tinyMCE.addEvent(element,"click",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});}else{settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});tinyMCE.addEvent(element,"click",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});}}else tinyMCE.addMCEControl(element,elementId)}if(tinyMCE.settings.auto_focus){window.setTimeout(function(){var inst=tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);inst.selection.selectNode(inst.getBody(),true,true);inst.contentWindow.focus()},100)}tinyMCE.dispatchCallback(null,'oninit','onInit')}},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.isTinyMCE_Control},getParam:function(name,default_value,strip_whitespace,split_chr){var i,outArray,value=(typeof(this.settings[name])=="undefined")?default_value:this.settings[name];if(value=="true"||value=="false")return(value=="true");if(strip_whitespace)value=tinyMCE.regexpReplace(value,"[ \t\r\n]","");if(typeof(split_chr)!="undefined"&&split_chr!=null){value=value.split(split_chr);outArray=[];for(i=0;i<value.length;i++){if(value[i]&&value[i]!=='')outArray[outArray.length]=value[i]}value=outArray}return value},getLang:function(name,default_value,parse_entities,va){var v=(typeof(tinyMCELang[name])=="undefined")?default_value:tinyMCELang[name],n;if(parse_entities)v=tinyMCE.entityDecode(v);if(va){for(n in va)v=this.replaceVar(v,n,va[n])}return v},entityDecode:function(s){var e=document.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue},addToLang:function(prefix,ar){var k;for(k in ar){if(typeof(ar[k])=='function')continue;tinyMCELang[(k.indexOf('lang_')==-1?'lang_':'')+(prefix!==''?(prefix+"_"):'')+k]=ar[k]}this.loadNextScript()},triggerNodeChange:function(focus,setup_content){var elm,inst,editorId,undoIndex=-1,undoLevels=-1,doc,anySelection,st;if(tinyMCE.selectedInstance){inst=tinyMCE.selectedInstance;elm=(typeof(setup_content)!="undefined"&&setup_content)?tinyMCE.selectedElement:inst.getFocusElement();editorId=inst.editorId;st=inst.selection.getSelectedText();if(tinyMCE.settings.auto_resize)inst.resizeToContent();if(setup_content&&tinyMCE.isGecko&&inst.isHidden())elm=inst.getBody();inst.switchSettings();anySelection=!inst.selection.isCollapsed();if(tinyMCE.settings.custom_undo_redo){undoIndex=inst.undoRedo.undoIndex;undoLevels=inst.undoRedo.undoLevels.length}tinyMCE.dispatchCallback(inst,'handle_node_change_callback','handleNodeChange',editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection,setup_content)}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus()},_customCleanup:function(inst,type,content){var pl,po,i,customCleanup;customCleanup=tinyMCE.settings.cleanup_callback;if(customCleanup!='')content=tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback,window)(type,content,inst);po=tinyMCE.themes[tinyMCE.settings.theme];if(po&&po.cleanup)content=po.cleanup(type,content,inst);pl=inst.plugins;for(i=0;i<pl.length;i++){po=tinyMCE.plugins[pl[i]];if(po&&po.cleanup)content=po.cleanup(type,content,inst)}return content},setContent:function(h){if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.execCommand('mceSetContent',false,h);tinyMCE.selectedInstance.repaint()}},importThemeLanguagePack:function(name){if(typeof(name)=="undefined")name=tinyMCE.settings.theme;tinyMCE.loadScript(tinyMCE.baseURL+'/themes/'+name+'/langs/'+tinyMCE.settings.language+'.js')},importPluginLanguagePack:function(name){var b=tinyMCE.baseURL+'/plugins/'+name;if(this.plugins[name])b=this.plugins[name].baseURL;tinyMCE.loadScript(b+'/langs/'+tinyMCE.settings.language+'.js')},applyTemplate:function(h,ag){return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}','gi'),function(m,s){if(s.indexOf('lang_')==0&&tinyMCELang[s])return tinyMCELang[s];if(ag&&ag[s])return ag[s];if(tinyMCE.settings[s])return tinyMCE.settings[s];if(m=='themeurl')return tinyMCE.themeURL;return m})},replaceVar:function(h,r,v){return h.replace(new RegExp('{\\\$'+r+'}','g'),v)},openWindow:function(template,args){var html,width,height,x,y,resizable,scrollbars,url,name,win,modal,features;args=!args?{}:args;args.mce_template_file=template.file;args.mce_width=template.width;args.mce_height=template.height;tinyMCE.windowArgs=args;html=template.html;if(!(width=parseInt(template.width)))width=320;if(!(height=parseInt(template.height)))height=200;if(tinyMCE.isIE)height+=40;else height+=20;x=parseInt(screen.width/ 2.0) - (width /2.0);y=parseInt(screen.height/ 2.0) - (height /2.0);resizable=(args&&args.resizable)?args.resizable:"no";scrollbars=(args&&args.scrollbars)?args.scrollbars:"no";if(template.file.charAt(0)!='/'&&template.file.indexOf('://')==-1)url=tinyMCE.baseURL+"/themes/"+tinyMCE.getParam("theme")+"/"+template.file;else url=template.file;for(name in args){if(typeof(args[name])=='function')continue;url=tinyMCE.replaceVar(url,name,escape(args[name]))}if(html){html=tinyMCE.replaceVar(html,"css",this.settings.popups_css);html=tinyMCE.applyTemplate(html,args);win=window.open("","mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog=yes,minimizable="+resizable+",modal=yes,width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}win.document.write(html);win.document.close();win.resizeTo(width,height);win.focus()}else{if((tinyMCE.isRealIE)&&resizable!='yes'&&tinyMCE.settings.dialog_type=="modal"){height+=10;features="resizable:"+resizable+";scroll:"+scrollbars+";status:yes;center:yes;help:no;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";window.showModalDialog(url,window,features)}else{modal=(resizable=="yes")?"no":"yes";if(tinyMCE.isGecko&&tinyMCE.isMac)modal="no";if(template.close_previous!="no")try{tinyMCE.lastWindow.close()}catch(ex){}win=window.open(url,"mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog="+modal+",minimizable="+resizable+",modal="+modal+",width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}if(template.close_previous!="no")tinyMCE.lastWindow=win;try{win.resizeTo(width,height)}catch(e){}if(tinyMCE.isGecko&&win.document){if(win.document.defaultView.statusbar.visible)win.resizeBy(0,tinyMCE.isMac?10:24)}win.focus()}}},closeWindow:function(win){win.close()},getVisualAidClass:function(class_name,state){var i,classNames,ar,className,aidClass=tinyMCE.settings.visual_table_class;if(typeof(state)=="undefined")state=tinyMCE.settings.visual;classNames=[];ar=class_name.split(' ');for(i=0;i<ar.length;i++){if(ar[i]==aidClass)ar[i]="";if(ar[i]!=='')classNames[classNames.length]=ar[i]}if(state)classNames[classNames.length]=aidClass;className="";for(i=0;i<classNames.length;i++){if(i>0)className+=" ";className+=classNames[i]}return className},handleVisualAid:function(el,deep,state,inst,skip_dispatch){var i,x,y,tableElement,anchorName,oldW,oldH,bo,cn;if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);tableElement=null;switch(el.nodeName){case"TABLE":oldW=el.style.width;oldH=el.style.height;bo=tinyMCE.getAttrib(el,"border");bo=bo==''||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(y=0;y<el.rows.length;y++){for(x=0;x<el.rows[y].cells.length;x++){cn=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x],"class"),state&&bo);tinyMCE.setAttrib(el.rows[y].cells[x],"class",cn)}}break;case"A":anchorName=tinyMCE.getAttrib(el,"name");if(anchorName!==''&&state){el.title=anchorName;tinyMCE.addCSSClass(el,'mceItemAnchor')}else if(anchorName!==''&&!state)el.className='';break}if(deep&&el.hasChildNodes()){for(i=0;i<el.childNodes.length;i++)tinyMCE.handleVisualAid(el.childNodes[i],deep,state,inst,true)}},fixGeckoBaseHREFBug:function(m,e,h){var xsrc,xhref;if(tinyMCE.isGecko){if(m==1){h=h.replace(/\ssrc=/gi," mce_tsrc=");h=h.replace(/\shref=/gi," mce_thref=");return h}else{if(!new RegExp('(src|href)=','g').test(h))return h;tinyMCE.selectElements(e,'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK',function(n){xsrc=tinyMCE.getAttrib(n,"mce_tsrc");xhref=tinyMCE.getAttrib(n,"mce_thref");if(xsrc!==''){try{n.src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xsrc)}catch(e){}n.removeAttribute("mce_tsrc")}if(xhref!==''){try{n.href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xhref)}catch(e){}n.removeAttribute("mce_thref")}return false});tinyMCE.selectNodes(e,function(n){if(n.nodeType==3||n.nodeType==8){n.nodeValue=n.nodeValue.replace(/\smce_tsrc=/gi," src=");n.nodeValue=n.nodeValue.replace(/\smce_thref=/gi," href=")}return false})}}return h},_setHTML:function(doc,html_content){var i,html,paras,node;html_content=tinyMCE.cleanupHTMLCode(html_content);try{tinyMCE.setInnerHTML(doc.body,html_content)}catch(e){if(this.isMSIE)doc.body.createTextRange().pasteHTML(html_content)}if(tinyMCE.isIE&&tinyMCE.settings.fix_content_duplication){paras=doc.getElementsByTagName("P");for(i=0;i<paras.length;i++){node=paras[i];while((node=node.parentNode)!=null){if(node.nodeName=="P")node.outerHTML=node.innerHTML}}html=doc.body.innerHTML;tinyMCE.setInnerHTML(doc.body,html)}tinyMCE.cleanupAnchors(doc);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc)},getEditorId:function(form_element){var inst=this.getInstanceById(form_element);if(!inst)return null;return inst.editorId},getInstanceById:function(editor_id){var inst=this.instances[editor_id],n;if(!inst){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formTargetElementId==editor_id)return inst}}else return inst;return null},queryInstanceCommandValue:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandValue(command);return false},queryInstanceCommandState:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandState(command);return null},setWindowArg:function(n,v){this.windowArgs[n]=v},getWindowArg:function(n,d){return(typeof(this.windowArgs[n])=="undefined")?d:this.windowArgs[n]},getCSSClasses:function(editor_id,doc){var i,c,x,rule,styles,rules,csses,selectorText,inst=tinyMCE.getInstanceById(editor_id);var cssClass,addClass,p;if(!inst)inst=tinyMCE.selectedInstance;if(!inst)return[];if(!doc)doc=inst.getDoc();if(inst&&inst.cssClasses.length>0)return inst.cssClasses;if(!doc)return;styles=doc.styleSheets;if(styles&&styles.length>0){for(x=0;x<styles.length;x++){csses=null;try{csses=tinyMCE.isIE?doc.styleSheets(x).rules:styles[x].cssRules}catch(e){}if(!csses)return[];for(i=0;i<csses.length;i++){selectorText=csses[i].selectorText;if(selectorText){rules=selectorText.split(',');for(c=0;c<rules.length;c++){rule=rules[c];while(rule.indexOf(' ')==0)rule=rule.substring(1);if(rule.indexOf(' ')!=-1||rule.indexOf(':')!=-1||rule.indexOf('mceItem')!=-1)continue;if(rule.indexOf(tinyMCE.settings.visual_table_class)!=-1||rule.indexOf('mceEditable')!=-1||rule.indexOf('mceNonEditable')!=-1)continue;if(rule.indexOf('.')!=-1){cssClass=rule.substring(rule.indexOf('.')+1);addClass=true;for(p=0;p<inst.cssClasses.length&&addClass;p++){if(inst.cssClasses[p]==cssClass)addClass=false}if(addClass)inst.cssClasses[inst.cssClasses.length]=cssClass}}}}}}return inst.cssClasses},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str)},trim:function(s){return s.replace(/^\s*|\s*$/g,"")},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s},getControlHTML:function(c){var i,l,n,o,v,rtl=tinyMCE.getLang('lang_dir')=='rtl';l=tinyMCE.plugins;for(n in l){o=l[n];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+tinyMCE.replaceVar(v,"pluginurl",o.baseURL)+'</span>';return tinyMCE.replaceVar(v,"pluginurl",o.baseURL)}}o=tinyMCE.themes[tinyMCE.settings.theme];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+v+'</span>';return v}return''},evalFunc:function(f,idx,a,o){o=!o?window:o;f=typeof(f)=='function'?f:o[f];return f.apply(o,Array.prototype.slice.call(a,idx))},dispatchCallback:function(i,p,n){return this.callFunc(i,p,n,0,this.dispatchCallback.arguments)},executeCallback:function(i,p,n){return this.callFunc(i,p,n,1,this.executeCallback.arguments)},execCommandCallback:function(i,p,n){return this.callFunc(i,p,n,2,this.execCommandCallback.arguments)},callFunc:function(ins,p,n,m,a){var l,i,on,o,s,v;s=m==2;l=tinyMCE.getParam(p,'');if(l!==''&&(v=tinyMCE.evalFunc(l,3,a))==s&&m>0)return true;if(ins!=null){for(i=0,l=ins.plugins;i<l.length;i++){o=tinyMCE.plugins[l[i]];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}return false},resolveDots:function(s,o){var i;if(typeof(s)=='string'){for(i=0,s=s.split('.');i<s.length;i++)o=o[s[i]]}else o=s;return o},xmlEncode:function(s){return s?(''+s).replace(this.xmlEncodeRe,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>'}return c}):s},add:function(c,m){var n;for(n in m){if(m.hasOwnProperty(n))c.prototype[n]=m[n]}},extend:function(p,np){var o={},n;o.parent=p;for(n in p){if(p.hasOwnProperty(n))o[n]=p[n]}for(n in np){if(np.hasOwnProperty(n))o[n]=np[n]}return o},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null}}};var TinyMCE=TinyMCE_Engine;var tinyMCE=new TinyMCE_Engine();var tinyMCELang={};function TinyMCE_Control(settings){var t,i,tos,fu,p,x,fn,fu,pn,s=settings;this.undoRedoLevel=true;this.isTinyMCE_Control=true;this.enabled=true;this.settings=s;this.settings.theme=tinyMCE.getParam("theme","default");this.settings.width=tinyMCE.getParam("width",-1);this.settings.height=tinyMCE.getParam("height",-1);this.selection=new TinyMCE_Selection(this);this.undoRedo=new TinyMCE_UndoRedo(this);this.cleanup=new TinyMCE_Cleanup();this.shortcuts=[];this.hasMouseMoved=false;this.foreColor=this.backColor="#999999";this.data={};this.cssClasses=[];this.cleanup.init({valid_elements:s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,entities:s.entities,entity_encoding:s.entity_encoding,debug:s.cleanup_debug,indent:s.apply_source_formatting,invalid_elements:s.invalid_elements,verify_html:s.verify_html,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans});t=this.settings.theme;if(!tinyMCE.hasTheme(t)){fn=tinyMCE.callbacks;tos={};for(i=0;i<fn.length;i++){if((fu=window['TinyMCE_'+t+"_"+fn[i]]))tos[fn[i]]=fu}tinyMCE.addTheme(t,tos)}this.plugins=[];p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){pn=p[i];if(pn.charAt(0)=='-')pn=pn.substring(1);if(!tinyMCE.hasPlugin(pn)){fn=tinyMCE.callbacks;tos={};for(x=0;x<fn.length;x++){if((fu=window['TinyMCE_'+pn+"_"+fn[x]]))tos[fn[x]]=fu}tinyMCE.addPlugin(pn,tos)}this.plugins[this.plugins.length]=pn}}};TinyMCE_Control.prototype={selection:null,settings:null,cleanup:null,getData:function(na){var o=this.data[na];if(!o)o=this.data[na]={};return o},hasPlugin:function(n){var i;for(i=0;i<this.plugins.length;i++){if(this.plugins[i]==n)return true}return false},addPlugin:function(n,p){if(!this.hasPlugin(n)){tinyMCE.addPlugin(n,p);this.plugins[this.plugins.length]=n}},repaint:function(){var s,b,ex;if(tinyMCE.isRealIE)return;try{s=this.selection;b=s.getBookmark(true);this.getBody().style.display='none';this.getDoc().execCommand('selectall',false,null);this.getSel().collapseToStart();this.getBody().style.display='block';s.moveToBookmark(b)}catch(ex){}},switchSettings:function(){if(tinyMCE.configs.length>1&&tinyMCE.currentConfig!=this.settings.index){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings.index}},select:function(){var oldInst=tinyMCE.selectedInstance;if(oldInst!=this){if(oldInst)oldInst.execCommand('mceEndTyping');tinyMCE.dispatchCallback(this,'select_instance_callback','selectInstance',this,oldInst);tinyMCE.selectedInstance=this}},getBody:function(){return this.contentBody?this.contentBody:this.getDoc().body},getDoc:function(){return this.contentWindow.document},getWin:function(){return this.contentWindow},getContainerWin:function(){return this.containerWindow?this.containerWindow:window},getViewPort:function(){return tinyMCE.getViewPort(this.getWin())},getParentNode:function(n,f){return tinyMCE.getParentNode(n,f,this.getBody())},getParentElement:function(n,na,f){return tinyMCE.getParentElement(n,na,f,this.getBody())},getParentBlockElement:function(n){return tinyMCE.getParentBlockElement(n,this.getBody())},resizeToContent:function(){var d=this.getDoc(),b=d.body,de=d.documentElement;this.iframeElement.style.height=(tinyMCE.isRealIE)?b.scrollHeight:de.offsetHeight+'px'},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isIE,c,sc,i,scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i<scl.length;i++){if(sc.alt==scl[i].alt&&sc.ctrl==scl[i].ctrl&&sc.shift==scl[i].shift&&sc.charCode==scl[i].charCode&&sc.keyCode==scl[i].keyCode){return false}}scl[scl.length]=sc;return true},handleShortcut:function(e){var i,s,o;if(!e.altKey&&!e.ctrlKey)return false;s=this.shortcuts;for(i=0;i<s.length;i++){o=s[i];if(o.alt==e.altKey&&o.ctrl==e.ctrlKey&&(o.keyCode==e.keyCode||o.charCode==e.charCode)){if(o.cmd&&(e.type=="keydown"||(e.type=="keypress"&&!tinyMCE.isOpera)))tinyMCE.execCommand(o.cmd,o.ui,o.val);tinyMCE.cancelEvent(e);return true}}return false},autoResetDesignMode:function(){if(!tinyMCE.isIE&&this.isHidden()&&tinyMCE.getParam('auto_reset_designmode'))eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}')},isHidden:function(){var s;if(tinyMCE.isIE)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0)},isDirty:function(){return tinyMCE.trim(this.startContent)!=tinyMCE.trim(this.getBody().innerHTML)&&!this.isNotDirty},_mergeElements:function(scmd,pa,ch,override){var st,stc,className,n;if(scmd=="removeformat"){pa.className="";pa.style.cssText="";ch.className="";ch.style.cssText="";return}st=tinyMCE.parseStyle(tinyMCE.getAttrib(pa,"style"));stc=tinyMCE.parseStyle(tinyMCE.getAttrib(ch,"style"));className=tinyMCE.getAttrib(pa,"class");className=tinyMCE.getAttrib(ch,"class");if(override){for(n in st){if(typeof(st[n])=='function')continue;stc[n]=st[n]}}else{for(n in stc){if(typeof(stc[n])=='function')continue;st[n]=stc[n]}}tinyMCE.setAttrib(pa,"style",tinyMCE.serializeStyle(st));tinyMCE.setAttrib(pa,"class",tinyMCE.trim(className));ch.className="";ch.style.cssText="";ch.removeAttribute("class");ch.removeAttribute("style")},_fixRootBlocks:function(){var rb,b,ne,be,nx,bm;rb=tinyMCE.getParam('forced_root_block');if(!rb)return;b=this.getBody();ne=b.firstChild;while(ne){nx=ne.nextSibling;if((ne.nodeType==3&&ne.nodeValue.replace(/\s+/g,'')!='')||(ne.nodeType==1&&!tinyMCE.blockRegExp.test(ne.nodeName))){if(!bm)bm=this.selection.getBookmark();if(!be){be=this.getDoc().createElement(rb);be.appendChild(ne.cloneNode(true));b.replaceChild(be,ne)}else{be.appendChild(ne.cloneNode(true));b.removeChild(ne)}}else be=null;ne=nx}if(bm)this.selection.moveToBookmark(bm)},_fixTrailingNbsp:function(){var s=this.selection,e=s.getFocusElement(),bm,v;if(e&&tinyMCE.blockRegExp.test(e.nodeName)&&e.firstChild){v=e.firstChild.nodeValue;if(v&&v.length>1&&/(^\u00a0|\u00a0$)/.test(v)){e.firstChild.nodeValue=v.replace(/(^\u00a0|\u00a0$)/,'');s.selectNode(e.firstChild,true,false,false);}}},_setUseCSS:function(b){var d=this.getDoc();try{d.execCommand("useCSS",false,!b)}catch(ex){}try{d.execCommand("styleWithCSS",false,b)}catch(ex){}if(!tinyMCE.getParam("table_inline_editing"))try{d.execCommand('enableInlineTableEditing',false,"false")}catch(ex){}if(!tinyMCE.getParam("object_resizing"))try{d.execCommand('enableObjectResizing',false,"false")}catch(ex){}},execCommand:function(command,user_interface,value){var i,x,z,align,img,div,doc=this.getDoc(),win=this.getWin(),focusElm=this.getFocusElement();if(!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel','gi').test(command))this.undoBookmark=null;if(!tinyMCE.isIE&&!this.useCSS){this._setUseCSS(false);this.useCSS=true}this.contentDocument=doc;if(!/mceStartTyping|mceEndTyping/.test(command)){if(tinyMCE.execCommandCallback(this,'execcommand_callback','execCommand',this.editorId,this.getBody(),command,user_interface,value))return}if(focusElm&&focusElm.nodeName=="IMG"){align=focusElm.getAttribute('align');img=command=="JustifyCenter"?focusElm.cloneNode(false):focusElm;switch(command){case"JustifyLeft":if(align=='left'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','left');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyCenter":img.setAttribute('align','');img.removeAttribute('align');div=tinyMCE.getParentElement(focusElm,"div");if(div&&div.style.textAlign=="center"){if(div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div)}else{div=this.getDoc().createElement("div");div.style.textAlign='center';div.appendChild(img);focusElm.parentNode.replaceChild(div,focusElm)}this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyRight":if(align=='right'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','right');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return}}if(tinyMCE.settings.force_br_newlines){var alignValue="";if(doc.selection.type!="Control"){switch(command){case"JustifyLeft":alignValue="left";break;case"JustifyCenter":alignValue="center";break;case"JustifyFull":alignValue="justify";break;case"JustifyRight":alignValue="right";break}if(alignValue!==''){var rng=doc.selection.createRange();if((divElm=tinyMCE.getParentElement(rng.parentElement(),"div"))!=null)divElm.setAttribute("align",alignValue);else if(rng.pasteHTML&&rng.htmlText.length>0)rng.pasteHTML('<div align="'+alignValue+'">'+rng.htmlText+"</div>");tinyMCE.triggerNodeChange();return}}}switch(command){case"mceRepaint":this.repaint();return true;case"JustifyLeft":case"JustifyCenter":case"JustifyFull":case"JustifyRight":var el=tinyMCE.getParentNode(focusElm,function(n){return tinyMCE.getAttrib(n,'align')});if(el){el.setAttribute('align','');el.removeAttribute('align')}else this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();return true;case"unlink":if(tinyMCE.isGecko&&this.getSel().isCollapsed){focusElm=tinyMCE.getParentElement(focusElm,'A');if(focusElm)this.selection.selectNode(focusElm,false)}this.getDoc().execCommand(command,user_interface,value);tinyMCE.isGecko&&this.getSel().collapseToEnd();tinyMCE.triggerNodeChange();return true;case"InsertUnorderedList":case"InsertOrderedList":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==''){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm)}else{if(!this.cleanup.isValid(value))return true;if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'<p>');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b)}else this.getDoc().execCommand("FormatBlock",false,value)}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isIE){value.outerHTML=value.innerHTML}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML))}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return}parentNode=parentNode.parentNode}break;case"mceSetStyleInfo":case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value.command;var sname=value.name;var svalue=value.value==null?'':value.value;var wrapper=value.wrapper?value.wrapper:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings.merge_styles_invalid_parents!==''?new RegExp(tinyMCE.settings.merge_styles_invalid_parents,"gi"):null;if(tinyMCE.isIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table|img','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','')}var ch=tinyMCE.getNodeTree(parentElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==parentElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}else{this._setUseCSS(false);doc.execCommand("FontName",false,"#mce_temp_font#");var elementArray=tinyMCE.getElementsByAttributeValue(this.getBody(),"font","face","#mce_temp_font#");for(x=0;x<elementArray.length;x++){elm=elementArray[x];if(elm){var spanElm=doc.createElement(wrapper);if(scmd=="setstyle")tinyMCE.setStyleAttrib(spanElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(spanElm,sname,svalue);if(scmd=="removeformat"){spanElm.style.cssText='';tinyMCE.setAttrib(spanElm,'class','')}if(elm.hasChildNodes()){for(i=0;i<elm.childNodes.length;i++)spanElm.appendChild(elm.childNodes[i].cloneNode(true))}spanElm.setAttribute("mce_new","true");elm.parentNode.replaceChild(spanElm,elm);var ch=tinyMCE.getNodeTree(spanElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==spanElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false)}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i],isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('<span>','gi').test(tmp.innerHTML)){for(x=0;x<elm.childNodes.length;x++){if(elm.parentNode!=null)elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true),elm)}elm.parentNode.removeChild(elm)}}if(scmd=="removeformat")tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"FontName":if(value==null){var s=this.getSel();if(tinyMCE.isGecko&&s.isCollapsed){var f=tinyMCE.getParentElement(this.getFocusElement(),"font");if(f!=null)this.selection.selectNode(f,false)}this.getDoc().execCommand("RemoveFormat",false,null);if(f!=null&&tinyMCE.isGecko){var r=this.getRng().cloneRange();r.collapse(true);s.removeAllRanges();s.addRange(r)}}else this.getDoc().execCommand('FontName',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"FontSize":this.getDoc().execCommand('FontSize',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"forecolor":value=value==null?this.foreColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.foreColor=value;this.getDoc().execCommand('forecolor',false,value);break;case"HiliteColor":value=value==null?this.backColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.backColor=value;if(tinyMCE.isGecko||tinyMCE.isOpera){this._setUseCSS(true);this.getDoc().execCommand('hilitecolor',false,value);this._setUseCSS(false)}else this.getDoc().execCommand('BackColor',false,value);break;case"Cut":case"Copy":case"Paste":var cmdFailed=false;eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');if(tinyMCE.isOpera&&cmdFailed)alert('Currently not supported by your browser, use keyboard shortcuts instead.');if(tinyMCE.isGecko&&cmdFailed){if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');return}else tinyMCE.triggerNodeChange();break;case"mceSetContent":if(!value)value="";value=tinyMCE.storeAwayURLs(value);value=tinyMCE._customCleanup(this,"insert_to_editor",value);if(this.getBody().nodeName=='BODY')tinyMCE._setHTML(doc,value);else this.getBody().innerHTML=value;tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,doc,this.settings,this.getBody(),false,false,false,true));tinyMCE.convertAllRelativeURLs(this.getBody());tinyMCE._removeInternal(this.getBody());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();return true;case"mceCleanup":var b=this.selection.getBookmark();tinyMCE._setHTML(this.contentDocument,this.getBody().innerHTML);tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,this.contentDocument,this.settings,this.getBody(),this.visualAid));tinyMCE.convertAllRelativeURLs(doc.body);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();this.repaint();this.selection.moveToBookmark(b);tinyMCE.triggerNodeChange();break;case"mceReplaceContent":if(!value)value='';this.getWin().focus();var selectedText="";if(tinyMCE.isIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=this.getSel().toString();if(selectedText.length>0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value)}this._addBogusBR();tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value.targets)=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value.targets;var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value.name,value.value);tinyMCE.triggerNodeChange()}}break;case"mceSetCSSClass":this.execCommand("mceSetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getBody().scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getBody().scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&| |<|>)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2)}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}}catch(ex){insertHTMLFailed=true}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return}}if(!tinyMCE.isIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value)}else value=rng.createContextualFragment(value)}else{value=doc.createTextNode(tinyMCE.entityDecode(value))}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node)}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng)}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}else{var rng=doc.selection.createRange(),tmpRng=null;var c=value.indexOf('<!--')!=-1;if(c)value=tinyMCE.uniqueTag+value;if(rng.item)rng.item(0).outerHTML=value;else rng.pasteHTML(value);if(c){var e=this.getDoc().getElementById('mceTMPElement');e.parentNode.removeChild(e)}}tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange();break;case"mceStartTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex==-1){this.undoRedo.typingUndoIndex=this.undoRedo.undoIndex;tinyMCE.typingUndoIndex=tinyMCE.undoIndex;this.execCommand('mceAddUndoLevel')}break;case"mceEndTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex!=-1){this.execCommand('mceAddUndoLevel');this.undoRedo.typingUndoIndex=-1}tinyMCE.typingUndoIndex=-1;break;case"mceBeginUndoLevel":this.undoRedoLevel=false;break;case"mceEndUndoLevel":this.undoRedoLevel=true;this.execCommand('mceAddUndoLevel');break;case"mceAddUndoLevel":if(tinyMCE.settings.custom_undo_redo&&this.undoRedoLevel){if(this.undoRedo.add())tinyMCE.triggerNodeChange(false)}break;case"Undo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.undo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"Redo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.redo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"mceToggleVisualAid":this.visualAid=!this.visualAid;tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"Indent":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();if(tinyMCE.isIE){var n=tinyMCE.getParentElement(this.getFocusElement(),"blockquote");do{if(n&&n.nodeName=="BLOCKQUOTE"){n.removeAttribute("dir");n.removeAttribute("style")}}while(n!=null&&(n=n.parentNode)!=null)}break;case"RemoveFormat":case"removeformat":var text=this.selection.getSelectedText();if(tinyMCE.isOpera){this.getDoc().execCommand("RemoveFormat",false,null);return}if(tinyMCE.isIE){try{var rng=doc.selection.createRange();rng.execCommand("RemoveFormat",false,null)}catch(e){}this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}else{this.getDoc().execCommand(command,user_interface,value);this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}if(text.length==0)this.execCommand("mceSetCSSClass",false,"");tinyMCE.triggerNodeChange();break;default:this.getDoc().execCommand(command,user_interface,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);else tinyMCE.triggerNodeChange()}if(command!="mceAddUndoLevel"&&command!="Undo"&&command!="Redo"&&command!="mceStartTyping"&&command!="mceEndTyping")tinyMCE.execCommand("mceAddUndoLevel")},queryCommandValue:function(c){try{return this.getDoc().queryCommandValue(c)}catch(e){return null}},queryCommandState:function(c){return this.getDoc().queryCommandState(c)},_addBogusBR:function(){var b=this.getBody();if(tinyMCE.isGecko&&!b.hasChildNodes())b.innerHTML='<br _moz_editor_bogus_node="TRUE" />'},_onAdd:function(replace_element,form_element_name,target_document){var hc,th,tos,editorTemplate,targetDoc,deltaWidth,deltaHeight,html,rng,fragment;var dynamicIFrame,tElm,doc,parentElm;th=this.settings.theme;tos=tinyMCE.themes[th];targetDoc=target_document?target_document:document;this.targetDoc=targetDoc;tinyMCE.themeURL=tinyMCE.baseURL+"/themes/"+this.settings.theme;this.settings.themeurl=tinyMCE.themeURL;if(!replace_element){alert("Error: Could not find the target element.");return false}if(tos.getEditorTemplate)editorTemplate=tos.getEditorTemplate(this.settings,this.editorId);deltaWidth=editorTemplate.delta_width?editorTemplate.delta_width:0;deltaHeight=editorTemplate.delta_height?editorTemplate.delta_height:0;html='<span id="'+this.editorId+'_parent" class="mceEditorContainer">'+editorTemplate.html;html=tinyMCE.replaceVar(html,"editor_id",this.editorId);if(!this.settings.default_document)this.settings.default_document=tinyMCE.baseURL+"/blank.htm";this.settings.old_width=this.settings.width;this.settings.old_height=this.settings.height;if(this.settings.width==-1)this.settings.width=replace_element.offsetWidth;if(this.settings.height==-1)this.settings.height=replace_element.offsetHeight;if(this.settings.width==0)this.settings.width=replace_element.style.width;if(this.settings.height==0)this.settings.height=replace_element.style.height;if(this.settings.width==0)this.settings.width=320;if(this.settings.height==0)this.settings.height=240;this.settings.area_width=parseInt(this.settings.width);this.settings.area_height=parseInt(this.settings.height);this.settings.area_width+=deltaWidth;this.settings.area_height+=deltaHeight;this.settings.width_style=""+this.settings.width;this.settings.height_style=""+this.settings.height;if((""+this.settings.width).indexOf('%')!=-1)this.settings.area_width="100%";else this.settings.width_style+='px';if((""+this.settings.height).indexOf('%')!=-1)this.settings.area_height="100%";else this.settings.height_style+='px';if((""+replace_element.style.width).indexOf('%')!=-1){this.settings.width=replace_element.style.width;this.settings.area_width="100%";this.settings.width_style="100%"}if((""+replace_element.style.height).indexOf('%')!=-1){this.settings.height=replace_element.style.height;this.settings.area_height="100%";this.settings.height_style="100%"}html=tinyMCE.applyTemplate(html);this.settings.width=this.settings.old_width;this.settings.height=this.settings.old_height;this.visualAid=this.settings.visual;this.formTargetElementId=form_element_name;if(replace_element.nodeName=="TEXTAREA"||replace_element.nodeName=="INPUT")this.startContent=replace_element.value;else this.startContent=replace_element.innerHTML;if(replace_element.nodeName!="TEXTAREA"&&replace_element.nodeName!="INPUT"){this.oldTargetElement=replace_element;hc='<input type="hidden" id="'+form_element_name+'" name="'+form_element_name+'" />';this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";html+='</span>';if(tinyMCE.isGecko)html=hc+html;else html+=hc;if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}else{html+='</span>';this.oldTargetElement=replace_element;this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}dynamicIFrame=false;tElm=targetDoc.getElementById(this.editorId);if(!tinyMCE.isIE){if(tElm&&(tElm.nodeName=="SPAN"||tElm.nodeName=="span")){tElm=tinyMCE._createIFrame(tElm,targetDoc);dynamicIFrame=true}this.targetElement=tElm;this.iframeElement=tElm;this.contentDocument=tElm.contentDocument;this.contentWindow=tElm.contentWindow;}else{if(tElm&&tElm.nodeName=="SPAN")tElm=tinyMCE._createIFrame(tElm,targetDoc,targetDoc.parentWindow);else tElm=targetDoc.frames[this.editorId];this.targetElement=tElm;this.iframeElement=targetDoc.getElementById(this.editorId);if(tinyMCE.isOpera){this.contentDocument=this.iframeElement.contentDocument;this.contentWindow=this.iframeElement.contentWindow;dynamicIFrame=true}else{this.contentDocument=tElm.window.document;this.contentWindow=tElm.window}this.getDoc().designMode="on"}doc=this.contentDocument;if(dynamicIFrame){html=tinyMCE.getParam('doctype')+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+tinyMCE.settings.base_href+'" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';try{if(!this.isHidden())this.getDoc().designMode="on";doc.open();doc.write(html);doc.close()}catch(e){this.getDoc().location.href=tinyMCE.baseURL+"/blank.htm"}}if(tinyMCE.isIE)window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\""+this.editorId+"\"]);",1);parentElm=this.targetDoc.getElementById(this.editorId+'_parent');this.formElement=tinyMCE.isGecko?parentElm.previousSibling:parentElm.nextSibling;tinyMCE.setupContent(this.editorId,true);return true},setBaseHREF:function(u){var h,b,d,nl;d=this.getDoc();nl=d.getElementsByTagName("base");b=nl.length>0?nl[0]:null;if(!b){nl=d.getElementsByTagName("head");h=nl.length>0?nl[0]:null;b=d.createElement("base");b.setAttribute('href',u);h.appendChild(b)}else{if(u==''||u==null)b.parentNode.removeChild(b);else b.setAttribute('href',u)}},getHTML:function(r){var h,d=this.getDoc(),b=this.getBody();if(r)return b.innerHTML;h=tinyMCE._cleanupHTML(this,d,this.settings,b,false,true,false,true);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(d);return h},setHTML:function(h){this.execCommand('mceSetContent',false,h);this.repaint()},getFocusElement:function(){return this.selection.getFocusElement()},getSel:function(){return this.selection.getSel()},getRng:function(){return this.selection.getRng()},triggerSave:function(skip_cleanup,skip_callback){var e,nl=[],i,s,content,htm;if(!this.enabled)return;this.switchSettings();s=tinyMCE.settings;if(tinyMCE.isRealIE){e=this.iframeElement;do{if(e.style&&e.style.display=='none'){e.style.display='block';nl[nl.length]={elm:e,type:'style'}}if(e.style&&s.hidden_tab_class.length>0&&e.className.indexOf(s.hidden_tab_class)!=-1){e.className=s.display_tab_class;nl[nl.length]={elm:e,type:'class'}}}while((e=e.parentNode)!=null)}tinyMCE.settings.preformatted=false;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;tinyMCE._setHTML(this.getDoc(),this.getBody().innerHTML);if(this.settings.cleanup==false){tinyMCE.handleVisualAid(this.getBody(),true,false,this);tinyMCE._setEventsEnabled(this.getBody(),true)}tinyMCE._customCleanup(this,"submit_content_dom",this.contentWindow.document.body);htm=skip_cleanup?this.getBody().innerHTML:tinyMCE._cleanupHTML(this,this.getDoc(),this.settings,this.getBody(),tinyMCE.visualAid,true,true);htm=tinyMCE._customCleanup(this,"submit_content",htm);if(!skip_callback&&tinyMCE.settings.save_callback!=='')content=tinyMCE.resolveDots(tinyMCE.settings.save_callback,window)(this.formTargetElementId,htm,this.getBody());if((typeof(content)!="undefined")&&content!=null)htm=content;htm=tinyMCE.regexpReplace(htm,"(","(","gi");htm=tinyMCE.regexpReplace(htm,")",")","gi");htm=tinyMCE.regexpReplace(htm,";",";","gi");htm=tinyMCE.regexpReplace(htm,""",""","gi");htm=tinyMCE.regexpReplace(htm,"^","^","gi");if(this.formElement)this.formElement.value=htm;if(tinyMCE.isSafari&&this.formElement)this.formElement.innerText=htm;for(i=0;i<nl.length;i++){if(nl[i].type=='style')nl[i].elm.style.display='none';else nl[i].elm.className=s.hidden_tab_class}}};tinyMCE.add(TinyMCE_Engine,{cleanupHTMLCode:function(s){s=s.replace(new RegExp('<p \\/>','gi'),'<p> </p>');s=s.replace(new RegExp('<p>\\s*<\\/p>','gi'),'<p> </p>');s=s.replace(new RegExp('<br>\\s*<\\/br>','gi'),'<br />');s=s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>','gi'),'<$1$2$3></$1$2>');s=s.replace(new RegExp('\\s+></','gi'),'></');s=s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>','gi'),'<$1$2 />');if(tinyMCE.isIE)s=s.replace(new RegExp('<p><hr \\/><\\/p>','gi'),"<hr>");if(tinyMCE.isIE)s=s.replace(/<!(\s*)\/>/g,'');return s},parseStyle:function(str){var ar=[],st,i,re,pa;if(str==null)return ar;st=str.split(';');tinyMCE.clearArray(ar);for(i=0;i<st.length;i++){if(st[i]=='')continue;re=new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');pa=st[i].replace(re,'$1||$2').split('||');if(pa.length==2)ar[pa[0].toLowerCase()]=pa[1]}return ar},compressStyle:function(ar,pr,sf,res){var box=[],i,a;box[0]=ar[pr+'-top'+sf];box[1]=ar[pr+'-left'+sf];box[2]=ar[pr+'-right'+sf];box[3]=ar[pr+'-bottom'+sf];for(i=0;i<box.length;i++){if(box[i]==null)return;if(i&&box[i]!=box[i-1])return}ar[res]=box[0];ar[pr+'-top'+sf]=null;ar[pr+'-left'+sf]=null;ar[pr+'-right'+sf]=null;ar[pr+'-bottom'+sf]=null},serializeStyle:function(ar){var str="",key,val,m;tinyMCE.compressStyle(ar,"border","","border");tinyMCE.compressStyle(ar,"border","-width","border-width");tinyMCE.compressStyle(ar,"border","-color","border-color");tinyMCE.compressStyle(ar,"border","-style","border-style");tinyMCE.compressStyle(ar,"padding","","padding");tinyMCE.compressStyle(ar,"margin","","margin");for(key in ar){val=ar[key];if(typeof(val)=='function')continue;if(key.indexOf('mso-')==0)continue;if(val!=null&&val!==''){val=''+val;val=val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)",'gi'),"url('$1')");if(val.indexOf('url(')!=-1&&tinyMCE.getParam('convert_urls')){m=new RegExp("url\\('(.*?)'\\)").exec(val);if(m.length>1)val="url('"+eval(tinyMCE.getParam('urlconverter_callback')+"(m[1], null, true);")+"')"}if(tinyMCE.getParam("force_hex_style_colors"))val=tinyMCE.convertRGBToHex(val,true);val=val.replace(/\"/g,'\'');if(val!="url('')")str+=key.toLowerCase()+": "+val+"; "}}if(new RegExp('; $').test(str))str=str.substring(0,str.length-2);return str},convertRGBToHex:function(s,k){var re,rgb;if(s.toLowerCase().indexOf('rgb')!=-1){re=new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)","gi");rgb=s.replace(re,"$1,$2,$3,$4,$5").split(',');if(rgb.length==5){r=parseInt(rgb[1]).toString(16);g=parseInt(rgb[2]).toString(16);b=parseInt(rgb[3]).toString(16);r=r.length==1?'0'+r:r;g=g.length==1?'0'+g:g;b=b.length==1?'0'+b:b;s="#"+r+g+b;if(k)s=rgb[0]+s+rgb[4]}}return s},convertHexToRGB:function(s){if(s.indexOf('#')!=-1){s=s.replace(new RegExp('[^0-9A-F]','gi'),'');return"rgb("+parseInt(s.substring(0,2),16)+","+parseInt(s.substring(2,4),16)+","+parseInt(s.substring(4,6),16)+")"}return s},convertSpansToFonts:function(doc){var s,i,size,fSize,x,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){size=tinyMCE.trim(s[i].style.fontSize).toLowerCase();fSize=0;for(x=0;x<sizes.length;x++){if(sizes[x]==size){fSize=x+1;break}}if(fSize>0){tinyMCE.setAttrib(s[i],'size',fSize);s[i].style.fontSize=''}fFace=s[i].style.fontFamily;if(fFace!=null&&fFace!==''){tinyMCE.setAttrib(s[i],'face',fFace);s[i].style.fontFamily=''}fColor=s[i].style.color;if(fColor!=null&&fColor!==''){tinyMCE.setAttrib(s[i],'color',tinyMCE.convertRGBToHex(fColor));s[i].style.color=''}}},convertFontsToSpans:function(doc){var fsClasses,s,i,fSize,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');fsClasses=tinyMCE.getParam('font_size_classes');if(fsClasses!=='')fsClasses=fsClasses.replace(/\s+/,'').split(',');else fsClasses=null;s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){fSize=tinyMCE.getAttrib(s[i],'size');fFace=tinyMCE.getAttrib(s[i],'face');fColor=tinyMCE.getAttrib(s[i],'color');if(fSize!==''){fSize=parseInt(fSize);if(fSize>0&&fSize<8){if(fsClasses!=null)tinyMCE.setAttrib(s[i],'class',fsClasses[fSize-1]);else s[i].style.fontSize=sizes[fSize-1]}s[i].removeAttribute('size')}if(fFace!==''){s[i].style.fontFamily=fFace;s[i].removeAttribute('face')}if(fColor!==''){s[i].style.color=fColor;s[i].removeAttribute('color')}}},cleanupAnchors:function(doc){var i,cn,x,an=doc.getElementsByTagName("a");for(i=an.length-1;i>=0;i--){if(tinyMCE.getAttrib(an[i],"name")!==''&&tinyMCE.getAttrib(an[i],"href")==''){cn=an[i].childNodes;for(x=cn.length-1;x>=0;x--)tinyMCE.insertAfter(cn[x],an[i])}}},getContent:function(editor_id){if(typeof(editor_id)!="undefined")tinyMCE.getInstanceById(editor_id).select();if(tinyMCE.selectedInstance)return tinyMCE.selectedInstance.getHTML();return null},_fixListElements:function(d){var nl,x,a=['ol','ul'],i,n,p,r=new RegExp('^(OL|UL)$'),np;for(x=0;x<a.length;x++){nl=d.getElementsByTagName(a[x]);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=tinyMCE.prevNode(n,'LI');if(!np){np=d.createElement('li');np.innerHTML=' ';np.appendChild(n);p.insertBefore(np,p.firstChild)}else np.appendChild(n)}}}},_fixTables:function(d){var nl,i,n,p,np,x,t;nl=d.getElementsByTagName('table');for(i=0;i<nl.length;i++){n=nl[i];if((p=tinyMCE.getParentElement(n,'p,h1,h2,h3,h4,h5,h6'))!=null){np=p.cloneNode(false);np.removeAttribute('id');t=n;while((n=n.nextSibling))np.appendChild(n);tinyMCE.insertAfter(np,p);tinyMCE.insertAfter(t,p)}}},_cleanupHTML:function(inst,doc,config,elm,visual,on_save,on_submit,inn){var h,d,t1,t2,t3,t4,t5,c,s,nb;if(!tinyMCE.getParam('cleanup'))return elm.innerHTML;on_save=typeof(on_save)=='undefined'?false:on_save;c=inst.cleanup;s=inst.settings;d=c.settings.debug;if(d)t1=new Date().getTime();inst._fixRootBlocks();if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertFontsToSpans(doc);if(tinyMCE.getParam("fix_list_elements"))tinyMCE._fixListElements(doc);if(tinyMCE.getParam("fix_table_elements"))tinyMCE._fixTables(doc);tinyMCE._customCleanup(inst,on_save?"get_from_editor_dom":"insert_to_editor_dom",doc.body);if(d)t2=new Date().getTime();c.settings.on_save=on_save;c.idCount=0;c.serializationId++;c.serializedNodes=[];c.sourceIndex=-1;if(s.cleanup_serializer=="xml")h=c.serializeNodeAsXML(elm,inn);else h=c.serializeNodeAsHTML(elm,inn);if(d)t3=new Date().getTime();nb=tinyMCE.getParam('entity_encoding')=='numeric'?' ':' ';h=h.replace(/<\/?(body|head|html)[^>]*>/gi,'');h=h.replace(new RegExp(' (rowspan="1"|colspan="1")','g'),'');h=h.replace(/<p><hr \/><\/p>/g,'<hr />');h=h.replace(/<p>( | )<\/p><hr \/><p>( | )<\/p>/g,'<hr />');h=h.replace(/<td>\s*<br \/>\s*<\/td>/g,'<td>'+nb+'</td>');h=h.replace(/<p>\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<br \/>$/,'');h=h.replace(/<br \/><\/p>/g,'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*( | )\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*<br \/>\s* \s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(new RegExp('<a>(.*?)<\\/a>','g'),'$1');h=h.replace(/<p([^>]*)>\s*<\/p>/g,'<p$1>'+nb+'</p>');if(/^\s*(<br \/>|<p> <\/p>|<p> <\/p>|<p><\/p>)\s*$/.test(h))h='';if(s.preformatted){h=h.replace(/^<pre>/,'');h=h.replace(/<\/pre>$/,'');h='<pre>'+h+'</pre>'}if(tinyMCE.isGecko){h=h.replace(/<br \/>\s*<\/li>/g,'</li>');h=h.replace(/ \s*<\/(dd|dt)>/g,'</$1>');h=h.replace(/<o:p _moz-userdefined="" \/>/g,'');h=h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g,'<td$1>'+nb+'</td>')}if(s.force_br_newlines)h=h.replace(/<p>( | )<\/p>/g,'<br />');h=tinyMCE._customCleanup(inst,on_save?"get_from_editor":"insert_to_editor",h);if(on_save){h=h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|'+s.visual_table_class+')','g'),'');h=h.replace(new RegExp(' ?class=""','g'),'')}if(s.remove_linebreaks&&!c.settings.indent)h=h.replace(/\n|\r/g,' ');if(d)t4=new Date().getTime();if(on_save&&c.settings.indent)h=c.formatHTML(h);if(on_submit&&(s.encoding=="xml"||s.encoding=="html"))h=c.xmlEncode(h);if(d)t5=new Date().getTime();if(c.settings.debug)tinyMCE.debug("Cleanup in ms: Pre="+(t2-t1)+", Serialize: "+(t3-t2)+", Post: "+(t4-t3)+", Format: "+(t5-t4)+", Sum: "+(t5-t1)+".");return h}});function TinyMCE_Cleanup(){this.isIE=(navigator.appName=="Microsoft Internet Explorer");this.rules=tinyMCE.clearArray([]);this.settings={indent_elements:'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',newline_before_elements:'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',newline_after_elements:'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',newline_before_after_elements:'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',indent_char:'\t',indent_levels:1,entity_encoding:'raw',valid_elements:'*[*]',entities:'',url_converter:'',invalid_elements:'',verify_html:false};this.vElements=tinyMCE.clearArray([]);this.vElementsRe='';this.closeElementsRe=/^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;this.codeElementsRe=/^(SCRIPT|STYLE)$/;this.serializationId=0;this.mceAttribs={href:'mce_href',src:'mce_src',type:'mce_type'}}TinyMCE_Cleanup.prototype={init:function(s){var n,a,i,ir,or,st;for(n in s)this.settings[n]=s[n];s=this.settings;this.inRe=this._arrayToRe(s.indent_elements.split(','),'','^<(',')[^>]*');this.ouRe=this._arrayToRe(s.indent_elements.split(','),'','^<\\/(',')[^>]*');this.nlBeforeRe=this._arrayToRe(s.newline_before_elements.split(','),'gi','<(',')([^>]*)>');this.nlAfterRe=this._arrayToRe(s.newline_after_elements.split(','),'gi','<(',')([^>]*)>');this.nlBeforeAfterRe=this._arrayToRe(s.newline_before_after_elements.split(','),'gi','<(\\/?)(',')([^>]*)>');this.serializedNodes=[];this.serializationId=0;if(s.invalid_elements!=='')this.iveRe=this._arrayToRe(s.invalid_elements.toUpperCase().split(','),'g','^(',')$');else this.iveRe=null;st='';for(i=0;i<s.indent_levels;i++)st+=s.indent_char;this.inStr=st;if(!s.verify_html){s.valid_elements='*[*]';s.extended_valid_elements=''}this.fillStr=s.entity_encoding=="named"?" ":" ";this.idCount=0;this.xmlEncodeRe=new RegExp('[\u007F-\uFFFF<>&"]','g')},addRuleStr:function(s){var r=this.parseRuleStr(s),n;for(n in r){if(r[n])this.rules[n]=r[n]}this.vElements=tinyMCE.clearArray([]);for(n in this.rules){if(this.rules[n])this.vElements[this.vElements.length]=this.rules[n].tag}this.vElementsRe=this._arrayToRe(this.vElements,'')},isValid:function(n){if(!this.rulesDone)this._setupRules();if(!n)return true;n=n.replace(/[^a-z0-9]+/gi,'').toUpperCase();return!tinyMCE.getParam('cleanup')||this.vElementsRe.test(n)},addChildRemoveRuleStr:function(s){var x,y,p,i,t,tn,ta,cl,r;if(!s)return;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r="^(";cl=this.split(/\|/,p[1]);for(i=0;i<cl.length;i++){if(cl[i]=='%istrict')r+=tinyMCE.inlineStrict;else if(cl[i]=='%itrans')r+=tinyMCE.inlineTransitional;else if(cl[i]=='%istrict_na')r+=tinyMCE.inlineStrict.substring(2);else if(cl[i]=='%itrans_na')r+=tinyMCE.inlineTransitional.substring(2);else if(cl[i]=='%btrans')r+=tinyMCE.blockElms;else if(cl[i]=='%strict')r+=tinyMCE.blockStrict;else r+=(cl[i].charAt(0)!='#'?cl[i].toUpperCase():cl[i]);r+=(i!=cl.length-1?'|':'')}r+=')$';if(this.childRules==null)this.childRules=tinyMCE.clearArray([]);this.childRules[tn[y]]=new RegExp(r);if(p.length>1)this.childRules[tn[y]].wrapTag=p[2]}}},parseRuleStr:function(s){var ta,p,r,a,i,x,px,t,tn,y,av,or=tinyMCE.clearArray([]),dv;if(s==null||s.length==0)return or;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];if(s.length==0)continue;p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r={};r.tag=tn[y];r.forceAttribs=null;r.defaultAttribs=null;r.validAttribValues=null;px=r.tag.charAt(0);r.forceOpen=px=='+';r.removeEmpty=px=='-';r.fill=px=='#';r.tag=r.tag.replace(/\+|-|#/g,'');r.oTagName=tn[0].replace(/\+|-|#/g,'').toLowerCase();r.isWild=new RegExp('\\*|\\?|\\+','g').test(r.tag);r.validRe=new RegExp(this._wildcardToRe('^'+r.tag+'$'));if(p.length>1){r.vAttribsRe='^(';a=this.split(/\|/,p[1]);for(i=0;i<a.length;i++){t=a[i];if(t.charAt(0)=='!'){a[i]=t=t.substring(1);if(!r.reqAttribsRe)r.reqAttribsRe='\\s+('+t;else r.reqAttribsRe+='|'+t}av=new RegExp('(=|:|<)(.*?)$').exec(t);t=t.replace(new RegExp('(=|:|<).*?$'),'');if(av&&av.length>0){if(av[0].charAt(0)==':'){if(!r.forceAttribs)r.forceAttribs=tinyMCE.clearArray([]);r.forceAttribs[t.toLowerCase()]=av[0].substring(1)}else if(av[0].charAt(0)=='='){if(!r.defaultAttribs)r.defaultAttribs=tinyMCE.clearArray([]);dv=av[0].substring(1);r.defaultAttribs[t.toLowerCase()]=dv==''?"mce_empty":dv}else if(av[0].charAt(0)=='<'){if(!r.validAttribValues)r.validAttribValues=tinyMCE.clearArray([]);r.validAttribValues[t.toLowerCase()]=this._arrayToRe(this.split('?',av[0].substring(1)),'i')}}r.vAttribsRe+=''+t.toLowerCase()+(i!=a.length-1?'|':'');a[i]=t.toLowerCase()}if(r.reqAttribsRe)r.reqAttribsRe=new RegExp(r.reqAttribsRe+')=\"','g');r.vAttribsRe+=')$';r.vAttribsRe=this._wildcardToRe(r.vAttribsRe);r.vAttribsReIsWild=new RegExp('\\*|\\?|\\+','g').test(r.vAttribsRe);r.vAttribsRe=new RegExp(r.vAttribsRe);r.vAttribs=a.reverse();}else{r.vAttribsRe='';r.vAttribs=tinyMCE.clearArray([]);r.vAttribsReIsWild=false}or[r.tag]=r}}return or},serializeNodeAsXML:function(n){var s,b;if(!this.xmlDoc){if(this.isIE){try{this.xmlDoc=new ActiveXObject('MSXML2.DOMDocument')}catch(e){}if(!this.xmlDoc)try{this.xmlDoc=new ActiveXObject('Microsoft.XmlDom')}catch(e){}}else this.xmlDoc=document.implementation.createDocument('','',null);if(!this.xmlDoc)alert("Error XML Parser could not be found.")}if(this.xmlDoc.firstChild)this.xmlDoc.removeChild(this.xmlDoc.firstChild);b=this.xmlDoc.createElement("html");b=this.xmlDoc.appendChild(b);this._convertToXML(n,b);if(this.isIE)return this.xmlDoc.xml;else return new XMLSerializer().serializeToString(this.xmlDoc)},_convertToXML:function(n,xn){var xd,el,i,l,cn,at,no,hc=false;if(tinyMCE.isRealIE&&this._isDuplicate(n))return;xd=this.xmlDoc;switch(n.nodeType){case 1:hc=n.hasChildNodes();el=xd.createElement(n.nodeName.toLowerCase());at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&no.nodeValue)el.setAttribute(no.nodeName.toLowerCase(),no.nodeValue)}if(!hc&&!this.closeElementsRe.test(n.nodeName))el.appendChild(xd.createTextNode(""));xn=xn.appendChild(el);break;case 3:xn.appendChild(xd.createTextNode(n.nodeValue));return;case 8:xn.appendChild(xd.createComment(n.nodeValue));return}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)this._convertToXML(cn[i],xn)}},serializeNodeAsHTML:function(n,inn){var en,no,h='',i,l,t,st,r,cn,va=false,f=false,at,hc,cr,nn;if(!this.rulesDone)this._setupRules();if(tinyMCE.isRealIE&&this._isDuplicate(n))return'';if(n.parentNode&&this.childRules!=null){cr=this.childRules[n.parentNode.nodeName];if(typeof(cr)!="undefined"&&!cr.test(n.nodeName)){st=true;t=null}}switch(n.nodeType){case 1:hc=n.hasChildNodes();if(st)break;nn=n.nodeName;if(tinyMCE.isRealIE){if(n.nodeName.indexOf('/')!=-1)break;if(n.scopeName&&n.scopeName!='HTML')nn=n.scopeName.toUpperCase()+':'+nn.toUpperCase()}else if(tinyMCE.isOpera&&nn.indexOf(':')>0)nn=nn.toUpperCase();if(this.settings.convert_fonts_to_spans){if(this.settings.on_save&&nn=='FONT')nn='SPAN';if(!this.settings.on_save&&nn=='SPAN')nn='FONT'}if(this.vElementsRe.test(nn)&&(!this.iveRe||!this.iveRe.test(nn))&&!inn){va=true;r=this.rules[nn];if(!r){at=this.rules;for(no in at){if(at[no]&&at[no].validRe.test(nn)){r=at[no];break}}}en=r.isWild?nn.toLowerCase():r.oTagName;f=r.fill;if(r.removeEmpty&&!hc)return"";t='<'+en;if(r.vAttribsReIsWild){at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&r.vAttribsRe.test(no.nodeName))t+=this._serializeAttribute(n,r,no.nodeName)}}else{for(i=r.vAttribs.length-1;i>-1;i--)t+=this._serializeAttribute(n,r,r.vAttribs[i])}if(!this.settings.on_save){at=this.mceAttribs;for(no in at){if(at[no])t+=this._serializeAttribute(n,r,at[no])}}if(r.reqAttribsRe&&!t.match(r.reqAttribsRe))t=null;if(t!=null&&this.closeElementsRe.test(nn))return t+' />';if(t!=null)h+=t+'>';if(this.isIE&&this.codeElementsRe.test(nn))h+=n.innerHTML}break;case 3:if(st)break;if(n.parentNode&&this.codeElementsRe.test(n.parentNode.nodeName))return this.isIE?'':n.nodeValue;return this.xmlEncode(n.nodeValue);case 8:if(st)break;return"<!--"+this._trimComment(n.nodeValue)+"-->"}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)h+=this.serializeNodeAsHTML(cn[i])}if(f&&!hc)h+=this.fillStr;if(t!=null&&va)h+='</'+en+'>';return h},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""'}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&/^(src|href|longdesc)$/.test(an))av=this._urlConverter(this,n,av);if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0){if(an.indexOf('on')!=0)av=this.xmlEncode(av,1);return" "+an+"="+'"'+av+'"'}return""},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi,function(a,b,c){c=c.replace(/<br\s*\/>/gi,'\n');return'<pre'+b+'>'+c+'</pre>'});h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr}li=i}return o},xmlEncode:function(s){var cl=this,re=this.xmlEncodeRe;if(!this.entitiesDone)this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":return s.replace(re,function(c){var b=cl.entities[c.charCodeAt(0)];return b?'&'+b+';':c});case"numeric":return s.replace(re,function(c){return'&#'+c.charCodeAt(0)+';'})}return s},split:function(re,s){var i,l,o=[],c=s.split(re);for(i=0,l=c.length;i<l;i++){if(c[i]!=='')o[i]=c[i]}return o},_trimComment:function(s){s=s.replace(new RegExp('\\smce_src=\"[^\"]*\"','gi'),"");s=s.replace(new RegExp('\\smce_href=\"[^\"]*\"','gi'),"");return s},_getAttrib:function(e,n,d){var v,ex,nn;if(typeof(d)=="undefined")d="";if(!e||e.nodeType!=1)return d;try{v=e.getAttribute(n,0)}catch(ex){v=e.getAttribute(n,2)}if(n=="class"&&!v)v=e.className;if(this.isIE){if(n=="http-equiv")v=e.httpEquiv;nn=e.nodeName;if(nn=="FORM"&&n=="enctype"&&v=="application/x-www-form-urlencoded")v="";if(nn=="INPUT"&&n=="size"&&v=="20")v="";if(nn=="INPUT"&&n=="maxlength"&&v=="2147483647")v="";if(n=="width"||n=="height")v=e.getAttribute(n,2)}if(n=='style'&&v){if(!tinyMCE.isOpera)v=e.style.cssText;v=tinyMCE.serializeStyle(tinyMCE.parseStyle(v))}if(this.settings.on_save&&n.indexOf('on')!=-1&&this.settings.on_save&&v&&v!=='')v=tinyMCE.cleanupEventStr(v);return(v&&v!=='')?''+v:d},_urlConverter:function(c,n,v){if(!c.settings.on_save)return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,v);else if(tinyMCE.getParam('convert_urls')){if(!this.urlConverter)this.urlConverter=eval(tinyMCE.settings.urlconverter_callback);return this.urlConverter(v,n,true)}return v},_arrayToRe:function(a,op,be,af){var i,r;op=typeof(op)=="undefined"?"gi":op;be=typeof(be)=="undefined"?"^(":be;af=typeof(af)=="undefined"?")$":af;r=be;for(i=0;i<a.length;i++)r+=this._wildcardToRe(a[i])+(i!=a.length-1?"|":"");r+=af;return new RegExp(r,op)},_wildcardToRe:function(s){s=s.replace(/\?/g,'(\\S?)');s=s.replace(/\+/g,'(\\S+)');s=s.replace(/\*/g,'(\\S*)');return s},_setupEntities:function(){var n,a,i,s=this.settings;if(s.entity_encoding=="named"){n=tinyMCE.clearArray([]);a=this.split(',',s.entities);for(i=0;i<a.length;i+=2)n[a[i]]=a[i+1];this.entities=n}this.entitiesDone=true},_setupRules:function(){var s=this.settings;this.addRuleStr(s.valid_elements);this.addRuleStr(s.extended_valid_elements);this.addChildRemoveRuleStr(s.valid_child_elements);this.rulesDone=true},_isDuplicate:function(n){var i,l,sn;if(!this.settings.fix_content_duplication)return false;if(tinyMCE.isRealIE&&n.nodeType==1){if(n.mce_serialized==this.serializationId)return true;n.setAttribute('mce_serialized',this.serializationId)}else{sn=this.serializedNodes;for(i=0,l=sn.length;i<l;i++){if(sn[i]==n)return true}sn.push(n)}return false}};tinyMCE.add(TinyMCE_Engine,{createTagHTML:function(tn,a,h){var o='',f=tinyMCE.xmlEncode,n;o='<'+tn;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)o+=' '+f(n)+'="'+f(''+a[n])+'"'}}o+=!h?' />':'>'+h+'</'+tn+'>';return o},createTag:function(d,tn,a,h){var o=d.createElement(tn),n;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)tinyMCE.setAttrib(o,n,a[n])}}if(h)o.innerHTML=h;return o},getElementByAttributeValue:function(n,e,a,v){return(n=this.getElementsByAttributeValue(n,e,a,v)).length==0?null:n[0]},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i]}return o},isBlockElement:function(n){return n!=null&&n.nodeType==1&&this.blockRegExp.test(n.nodeName)},getParentBlockElement:function(n,r){return this.getParentNode(n,function(n){return tinyMCE.isBlockElement(n)},r);return null},insertAfter:function(n,r){if(r.nextSibling)r.parentNode.insertBefore(n,r.nextSibling);else r.parentNode.appendChild(n)},setInnerHTML:function(e,h){var i,nl,n;if(tinyMCE.isGecko){h=h.replace(/<embed([^>]*)>/gi,'<tmpembed$1>');h=h.replace(/<em([^>]*)>/gi,'<i$1>');h=h.replace(/<tmpembed([^>]*)>/gi,'<embed$1>');h=h.replace(/<strong([^>]*)>/gi,'<b$1>');h=h.replace(/<\/strong>/gi,'</b>');h=h.replace(/<\/em>/gi,'</i>')}if(tinyMCE.isRealIE){h=h.replace(/\s\/>/g,'>');h=h.replace(/<p([^>]*)>\u00A0?<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s* \s*<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s+<\/p>/gi,'<p$1 mce_keep="true"> </p>');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n)}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h)}},getOuterHTML:function(e){var d;if(tinyMCE.isIE)return e.outerHTML;d=e.ownerDocument.createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML},setOuterHTML:function(e,h,d){var d=typeof(d)=="undefined"?e.ownerDocument:d,i,nl,t;if(tinyMCE.isIE&&e.nodeType==1)e.outerHTML=h;else{t=d.createElement("body");t.innerHTML=h;for(i=0,nl=t.childNodes;i<nl.length;i++)e.parentNode.insertBefore(nl[i].cloneNode(true),e);e.parentNode.removeChild(e)}},_getElementById:function(id,d){var e,i,j,f;if(typeof(d)=="undefined")d=document;e=d.getElementById(id);if(!e){f=d.forms;for(i=0;i<f.length;i++){for(j=0;j<f[i].elements.length;j++){if(f[i].elements[j].name==id){e=f[i].elements[j];break}}}}return e},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn)},na?na:[])},getParentElement:function(n,na,f,r){var re=na?new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$'):0,v;if(f&&typeof(f)=='string')return this.getParentElement(n,na,function(no){return tinyMCE.getAttrib(no,f)!==''});return this.getParentNode(n,function(n){return((n.nodeType==1&&!re)||(re&&re.test(n.nodeName)))&&(!f||f(n))},r)},getParentNode:function(n,f,r){while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode}return null},getAttrib:function(elm,name,dv){var v;if(typeof(dv)=="undefined")dv="";if(!elm||elm.nodeType!=1)return dv;try{v=elm.getAttribute(name,0)}catch(ex){v=elm.getAttribute(name,2)}if(name=="class"&&!v)v=elm.className;if(tinyMCE.isGecko){if(name=="src"&&elm.src!=null&&elm.src!=='')v=elm.src;if(name=="href"&&elm.href!=null&&elm.href!=='')v=elm.href}else if(tinyMCE.isIE){switch(name){case"http-equiv":v=elm.httpEquiv;break;case"width":case"height":v=elm.getAttribute(name,2);break}}if(name=="style"&&!tinyMCE.isOpera)v=elm.style.cssText;return(v&&v!=='')?v:dv},setAttrib:function(el,name,va,fix){if(typeof(va)=="number"&&va!=null)va=""+va;if(fix){if(va==null)va="";va=va.replace(/[^0-9%]/g,'')}if(name=="style")el.style.cssText=va;if(name=="class")el.className=va;if(va!=null&&va!==''&&va!=-1)el.setAttribute(name,va);else el.removeAttribute(name)},setStyleAttrib:function(e,n,v){e.style[n]=v;if(tinyMCE.isIE&&v==null||v==''){v=tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));e.style.cssText=v;e.setAttribute("style",v)}},switchClass:function(ei,c){var e;if(tinyMCE.switchClassCache[ei])e=tinyMCE.switchClassCache[ei];else e=tinyMCE.switchClassCache[ei]=document.getElementById(ei);if(e){if(tinyMCE.settings.button_tile_map&&e.className&&e.className.indexOf('mceTiledButton')==0)c='mceTiledButton '+c;e.className=c}},getAbsPosition:function(n,cn){var l=0,t=0;while(n&&n!=cn){l+=n.offsetLeft;t+=n.offsetTop;n=n.offsetParent}return{absLeft:l,absTop:t}},prevNode:function(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},nextNode:function(e,n){var a=n.split(','),i;while((e=e.nextSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a)}return a},addCSSClass:function(e,c,b){var o=this.removeCSSClass(e,c);return e.className=b?c+(o!==''?(' '+o):''):(o!==''?(o+' '):'')+c},removeCSSClass:function(e,c){c=e.className.replace(new RegExp("(^|\\s+)"+c+"(\\s+|$)"),' ');return e.className=c!=' '?c:''},hasCSSClass:function(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className)},renameElement:function(e,n,d){var ne,i,ar;d=typeof(d)=="undefined"?tinyMCE.selectedInstance.getDoc():d;if(e){ne=d.createElement(n);ar=e.attributes;for(i=ar.length-1;i>-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue)}ar=e.childNodes;for(i=0;i<ar.length;i++)ne.appendChild(ar[i].cloneNode(true));e.parentNode.replaceChild(ne,e)}},getViewPort:function(w){var d=w.document,m=d.compatMode=='CSS1Compat',b=d.body,de=d.documentElement;return{left:w.pageXOffset||(m?de.scrollLeft:b.scrollLeft),top:w.pageYOffset||(m?de.scrollTop:b.scrollTop),width:w.innerWidth||(m?de.clientWidth:b.clientWidth),height:w.innerHeight||(m?de.clientHeight:b.clientHeight)}},getStyle:function(n,na,d){if(!n)return false;if(tinyMCE.isGecko&&n.ownerDocument.defaultView){try{return n.ownerDocument.defaultView.getComputedStyle(n,null).getPropertyValue(na)}catch(n){return null}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase()});if(n.currentStyle)return n.currentStyle[na];return false}});tinyMCE.add(TinyMCE_Engine,{parseURL:function(url_str){var urlParts=[],i,pos,lastPos,chr;if(url_str){pos=url_str.indexOf('://');if(pos!=-1){urlParts.protocol=url_str.substring(0,pos);lastPos=pos+3}for(i=lastPos;i<url_str.length;i++){chr=url_str.charAt(i);if(chr==':')break;if(chr=='/')break}pos=i;urlParts.host=url_str.substring(lastPos,pos);urlParts.port="";lastPos=pos;if(url_str.charAt(pos)==':'){pos=url_str.indexOf('/',lastPos);urlParts.port=url_str.substring(lastPos+1,pos)}lastPos=pos;pos=url_str.indexOf('?',lastPos);if(pos==-1)pos=url_str.indexOf('#',lastPos);if(pos==-1)pos=url_str.length;urlParts.path=url_str.substring(lastPos,pos);lastPos=pos;if(url_str.charAt(pos)=='?'){pos=url_str.indexOf('#');pos=(pos==-1)?url_str.length:pos;urlParts.query=url_str.substring(lastPos+1,pos)}lastPos=pos;if(url_str.charAt(pos)=='#'){pos=url_str.length;urlParts.anchor=url_str.substring(lastPos+1,pos)}}return urlParts},serializeURL:function(up){var o="";if(up.protocol)o+=up.protocol+"://";if(up.host)o+=up.host;if(up.port)o+=":"+up.port;if(up.path)o+=up.path;if(up.query)o+="?"+up.query;if(up.anchor)o+="#"+up.anchor;return o},convertAbsoluteURLToRelativeURL:function(base_url,url_to_relative){var baseURL=this.parseURL(base_url),targetURL=this.parseURL(url_to_relative);var i,strTok1,strTok2,breakPoint=0,outPath="",forceSlash=false;var fileName,pos;if(targetURL.path=='')targetURL.path="/";else forceSlash=true;base_url=baseURL.path.substring(0,baseURL.path.lastIndexOf('/'));strTok1=base_url.split('/');strTok2=targetURL.path.split('/');if(strTok1.length>=strTok2.length){for(i=0;i<strTok1.length;i++){if(i>=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(strTok1.length<strTok2.length){for(i=0;i<strTok2.length;i++){if(i>=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(breakPoint==1)return targetURL.path;for(i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(i=breakPoint-1;i<strTok2.length;i++){if(i!=(breakPoint-1))outPath+="/"+strTok2[i];else outPath+=strTok2[i]}targetURL.protocol=null;targetURL.host=null;targetURL.port=null;targetURL.path=outPath==''&&forceSlash?"/":outPath;fileName=baseURL.path;if((pos=fileName.lastIndexOf('/'))!=-1)fileName=fileName.substring(pos+1);if(fileName==targetURL.path&&targetURL.anchor!=='')targetURL.path="";if(targetURL.path==''&&!targetURL.anchor)targetURL.path=fileName!==''?fileName:"/";return this.serializeURL(targetURL)},convertRelativeToAbsoluteURL:function(base_url,relative_url){var baseURL=this.parseURL(base_url),baseURLParts,relURLParts,newRelURLParts,numBack,relURL=this.parseURL(relative_url),i;var len,absPath,start,end,newBaseURLParts;if(relative_url==''||relative_url.indexOf('://')!=-1||/^(mailto:|javascript:|#|\/)/.test(relative_url))return relative_url;baseURLParts=baseURL.path.split('/');relURLParts=relURL.path.split('/');newBaseURLParts=[];for(i=baseURLParts.length-1;i>=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i]}baseURLParts=newBaseURLParts.reverse();newRelURLParts=[];numBack=0;for(i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue}if(numBack>0){numBack--;continue}newRelURLParts[newRelURLParts.length]=relURLParts[i]}relURLParts=newRelURLParts.reverse();len=baseURLParts.length-numBack;absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');start="";end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL)},convertURL:function(url,node,on_save){var dl=document.location,start,portPart,urlParts,baseUrlParts,tmpUrlParts,curl;var prot=dl.protocol,host=dl.hostname,port=dl.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||/^[ \t\r\n\+]*[#\?]/.test(url))return url;if(!tinyMCE.isIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings.base_href+url;if(on_save&&tinyMCE.getParam('relative_urls')){curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(curl.charAt(0)=='/')curl=tinyMCE.settings.document_base_prefix+curl;urlParts=tinyMCE.parseURL(curl);tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings.document_base_url);if(urlParts.host==tmpUrlParts.host&&(urlParts.port==tmpUrlParts.port))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url,curl)}if(!tinyMCE.getParam('relative_urls')){urlParts=tinyMCE.parseURL(url);baseUrlParts=tinyMCE.parseURL(tinyMCE.settings.base_href);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(urlParts.anchor&&urlParts.path==baseUrlParts.path)return"#"+urlParts.anchor}if(tinyMCE.getParam('remove_script_host')){start="";portPart="";if(port!=='')portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1)}return url},convertAllRelativeURLs:function(body){var i,elms,src,href,mhref,msrc;elms=body.getElementsByTagName("img");for(i=0;i<elms.length;i++){src=tinyMCE.getAttrib(elms[i],'src');msrc=tinyMCE.getAttrib(elms[i],'mce_src');if(msrc!=='')src=msrc;if(src!==''){src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,src);elms[i].setAttribute("src",src)}}elms=body.getElementsByTagName("a");for(i=0;i<elms.length;i++){href=tinyMCE.getAttrib(elms[i],'href');mhref=tinyMCE.getAttrib(elms[i],'mce_href');if(mhref!=='')href=mhref;if(href&&href!==''){href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,href);elms[i].setAttribute("href",href)}}}});tinyMCE.add(TinyMCE_Engine,{clearArray:function(a){var n;for(n in a)a[n]=null;return a},explode:function(d,s){var ar=s.split(d),oar=[],i;for(i=0;i<ar.length;i++){if(ar[i]!=='')oar[oar.length]=ar[i]}return oar}});tinyMCE.add(TinyMCE_Engine,{_setEventsEnabled:function(node,state){var evs,x,y,elms,i,event;var events=['onfocus','onblur','onclick','ondblclick','onmousedown','onmouseup','onmouseover','onmousemove','onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];evs=tinyMCE.settings.event_elements.split(',');for(y=0;y<evs.length;y++){elms=node.getElementsByTagName(evs[y]);for(i=0;i<elms.length;i++){event="";for(x=0;x<events.length;x++){if((event=tinyMCE.getAttrib(elms[i],events[x]))!==''){event=tinyMCE.cleanupEventStr(""+event);if(!state)event="return true;"+event;else event=event.replace(/^return true;/gi,'');elms[i].removeAttribute(events[x]);elms[i].setAttribute(events[x],event)}}}}},_eventPatch:function(editor_id){var n,inst,win,e;if(typeof(tinyMCE)=="undefined")return true;try{if(tinyMCE.selectedInstance){win=tinyMCE.selectedInstance.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.select();win=inst.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}}catch(ex){}},findEvent:function(e){var n,inst;if(e)return e;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(tinyMCE.isInstance(inst)&&inst.getWin().event)return inst.getWin().event}return null},unloadHandler:function(){tinyMCE.triggerSave(true,true)},addEventHandlers:function(inst){this.setEventHandlers(inst,1)},setEventHandlers:function(inst,s){var doc=inst.getDoc(),ie,ot,i,f=s?tinyMCE.addEvent:tinyMCE.removeEvent;ie=['keypress','keyup','keydown','click','mouseup','mousedown','controlselect','dblclick'];ot=['keypress','keyup','keydown','click','mouseup','mousedown','focus','blur','dragdrop'];inst.switchSettings();if(tinyMCE.isIE){for(i=0;i<ie.length;i++)f(doc,ie[i],TinyMCE_Engine.prototype._eventPatch)}else{for(i=0;i<ot.length;i++)f(doc,ot[i],tinyMCE.handleEvent);try{doc.designMode="On"}catch(e){}}},onMouseMove:function(){var inst,lh;if(tinyMCE.lastHover){lh=tinyMCE.lastHover;if(lh.className.indexOf('mceMenu')!=-1)tinyMCE._menuButtonEvent('out',lh);else lh.className=lh.className;tinyMCE.lastHover=null}if(!tinyMCE.hasMouseMoved){inst=tinyMCE.selectedInstance;if(inst.isFocused){inst.undoBookmark=inst.selection.getBookmark();tinyMCE.hasMouseMoved=true}}},cancelEvent:function(e){if(!e)return false;if(tinyMCE.isIE){e.returnValue=false;e.cancelBubble=true}else{e.preventDefault();e.stopPropagation&&e.stopPropagation()}return false},addEvent:function(o,n,h){if(n!='unload'){function clean(){var ex;try{tinyMCE.removeEvent(o,n,h);tinyMCE.removeEvent(window,'unload',clean);o=n=h=null}catch(ex){}}tinyMCE.addEvent(window,'unload',clean)}if(o.attachEvent)o.attachEvent("on"+n,h);else o.addEventListener(n,h,false)},removeEvent:function(o,n,h){if(o.detachEvent)o.detachEvent("on"+n,h);else o.removeEventListener(n,h,false)},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w}return false},accessibleEventHandler:function(e){var elm,win=this._win;e=tinyMCE.isIE?win.event:e;elm=tinyMCE.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null}return true}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false}return true},_resetIframeHeight:function(){var ife;if(tinyMCE.isRealIE){ife=tinyMCE.selectedInstance.iframeElement;if(ife._oldHeight){ife.style.height=ife._oldHeight;ife.height=ife._oldHeight}}}});function TinyMCE_Selection(inst){this.instance=inst};TinyMCE_Selection.prototype={getSelectedHTML:function(){var inst=this.instance,e,r=this.getRng(),h;if(!r)return null;e=document.createElement("body");if(r.cloneContents)e.appendChild(document.importNode(r.cloneContents(),true));else if(typeof(r.item)!='undefined'||typeof(r.htmlText)!='undefined')e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();h=tinyMCE._cleanupHTML(inst,inst.contentDocument,inst.settings,e,e,false,true,false);return h},getSelectedText:function(){var inst=this.instance,d,r,s,t;if(tinyMCE.isIE){d=inst.getDoc();if(d.selection.type=="Text"){r=d.selection.createRange();t=r.text}else t=''}else{s=this.getSel();if(s&&s.toString)t=s.toString();else t=''}return t},getBookmark:function(simple){var inst=this.instance,rng=this.getRng(),doc=inst.getDoc(),b=inst.getBody();var trng,sx,sy,xx=-999999999,vp=inst.getViewPort();var sp,le,s,e,nl,i,si,ei,w;sx=vp.left;sy=vp.top;if(simple)return{rng:rng,scrollX:sx,scrollY:sy};if(tinyMCE.isRealIE){if(rng.item){e=rng.item(0);nl=b.getElementsByTagName(e.nodeName);for(i=0;i<nl.length;i++){if(e==nl[i]){sp=i;break}}return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy}}else{trng=doc.body.createTextRange();trng.moveToElementText(inst.getBody());trng.collapse(true);bp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(true);sp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(false);le=Math.abs(trng.move('character',xx))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy}}}else{s=this.getSel();e=this.getFocusElement();if(!s)return null;if(e&&e.nodeName=='IMG'){return{start:-1,end:-1,index:sp,scrollX:sx,scrollY:sy}}if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=this._getPosText(b,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+s.anchorOffset,end:e.end+s.focusOffset,scrollX:sx,scrollY:sy}}else{e=this._getPosText(b,rng.startContainer,rng.endContainer);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+rng.startOffset,end:e.end+rng.endOffset,scrollX:sx,scrollY:sy}}}return null},moveToBookmark:function(bookmark){var inst=this.instance,rng,nl,i,ex,b=inst.getBody(),sd;var doc=inst.getDoc(),win=inst.getWin(),sel=this.getSel();if(!bookmark)return false;if(tinyMCE.isSafari&&bookmark.rng){sel.setBaseAndExtent(bookmark.rng.startContainer,bookmark.rng.startOffset,bookmark.rng.endContainer,bookmark.rng.endOffset);return true}if(tinyMCE.isRealIE){if(bookmark.rng){try{bookmark.rng.select()}catch(ex){}return true}win.focus();if(bookmark.tag){rng=b.createControlRange();nl=b.getElementsByTagName(bookmark.tag);if(nl.length>bookmark.index){try{rng.addElement(nl[bookmark.index])}catch(ex){}}}else{try{if(bookmark.start<0)return true;rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length)}catch(ex){return true}}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}if(tinyMCE.isGecko||tinyMCE.isOpera){if(!sel)return false;if(bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng)}if(bookmark.start!=-1&&bookmark.end!=-1){try{sd=this._getTextPos(b,bookmark.start,bookmark.end);rng=doc.createRange();rng.setStart(sd.startNode,sd.startOffset);rng.setEnd(sd.endNode,sd.endOffset);sel.removeAllRanges();sel.addRange(rng);if(!tinyMCE.isOpera)win.focus()}catch(ex){}}win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}return false},_getPosText:function(r,sn,en){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d}p+=n.nodeValue?n.nodeValue.length:0}return null},_getTextPos:function(r,sp,ep){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){p+=n.nodeValue?n.nodeValue.length:0;if(p>=sp&&!d.startNode){d.startNode=n;d.startOffset=sp-(p-n.nodeValue.length)}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-n.nodeValue.length);return d}}return null},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(inst.settings.auto_resize)inst.resizeToContent();if(tinyMCE.isRealIE){rng=inst.getDoc().body.createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select()}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd()}this.scrollToNode(node);return}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,[],3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node)}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length)}else rng.collapse(to_start)}sel.removeAllRanges();sel.addRange(rng)}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node},scrollToNode:function(node){var inst=this.instance,w=inst.getWin(),vp=inst.getViewPort(),pos=tinyMCE.getAbsPosition(node),cvp,p,cwin;if(pos.absLeft<vp.left||pos.absLeft>vp.left+vp.width||pos.absTop<vp.top||pos.absTop>vp.top+(vp.height-25))w.scrollTo(pos.absLeft,pos.absTop-vp.height+25);if(inst.settings.auto_resize){cwin=inst.getContainerWin();cvp=tinyMCE.getViewPort(cwin);p=this.getAbsPosition(node);if(p.absLeft<cvp.left||p.absLeft>cvp.left+cvp.width||p.absTop<cvp.top||p.absTop>cvp.top+cvp.height)cwin.scrollTo(p.absLeft,p.absTop-cvp.height+25)}},getAbsPosition:function(n){var pos=tinyMCE.getAbsPosition(n),ipos=tinyMCE.getAbsPosition(this.instance.iframeElement);return{absLeft:ipos.absLeft+pos.absLeft,absTop:ipos.absTop+pos.absTop}},getSel:function(){var inst=this.instance;if(tinyMCE.isRealIE)return inst.getDoc().selection;return inst.contentWindow.getSelection()},getRng:function(){var s=this.getSel();if(s==null)return null;if(tinyMCE.isRealIE)return s.createRange();if(tinyMCE.isSafari&&!s.getRangeAt)return''+window.getSelection();if(s.rangeCount>0)return s.getRangeAt(0);return null},isCollapsed:function(){var r=this.getRng();if(r.item)return false;return r.boundingWidth==0||this.getSel().isCollapsed},collapse:function(b){var r=this.getRng(),s=this.getSel();if(r.select){r.collapse(b);r.select()}else{if(b)s.collapseToStart();else s.collapseToEnd()}},getFocusElement:function(){var inst=this.instance,doc,rng,sel,elm;if(tinyMCE.isRealIE){doc=inst.getDoc();rng=doc.selection.createRange();elm=rng.item?rng.item(0):rng.parentElement()}else{if(!tinyMCE.isSafari&&inst.isHidden())return inst.getBody();sel=this.getSel();rng=this.getRng();if(!sel||!rng)return null;elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset]}}}elm=tinyMCE.getParentElement(elm);}return elm}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true};TinyMCE_UndoRedo.prototype={add:function(l){var b,customUndoLevels,newHTML,inst=this.instance,i,ul,ur;if(l){this.undoLevels[this.undoLevels.length]=l;return true}if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;if(tinyMCE.typingUndoIndex!=-1)tinyMCE.undoIndex=tinyMCE.typingUndoIndex}newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){inst.isNotDirty=false;tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);customUndoLevels=tinyMCE.settings.custom_undo_redo_levels;if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(i=0;i<this.undoLevels.length-1;i++)this.undoLevels[i]=this.undoLevels[i+1];this.undoLevels.length--;this.undoIndex--;}b=inst.undoBookmark;if(!b)b=inst.selection.getBookmark();this.undoIndex++;this.undoLevels[this.undoIndex]={content:newHTML,bookmark:b};ul=tinyMCE.undoLevels;for(i=tinyMCE.undoIndex+1;i<ul.length;i++){ur=ul[i].undoRedo;if(ur.undoIndex==ur.undoLevels.length-1)ur.undoIndex--;ur.undoLevels.length--}tinyMCE.undoLevels[tinyMCE.undoIndex++]=inst;tinyMCE.undoLevels.length=tinyMCE.undoIndex;this.undoLevels.length=this.undoIndex+1;return true}return false},undo:function(){var inst=this.instance;if(this.undoIndex>0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}tinyMCE.triggerNodeChange()}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){var doc=inst.getDoc(),sel=inst.getSel(),body=inst.getBody(),win=inst.contentWindow,rng=sel.getRangeAt(0);var rootElm=doc.documentElement,blockName="P",startNode,endNode,startBlock,endBlock;var rngBefore,rngAfter,direct,startNode,startOffset,endNode,endOffset,b=tinyMCE.isOpera?inst.selection.getBookmark():null;var paraBefore,paraAfter,startChop,endChop,contents,i;function isEmpty(para){var nodes;function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()==''}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;nodes=tinyMCE.getNodeTree(para,[],3);for(i=0;i<nodes.length;i++){if(!isEmptyHTML(nodes[i].nodeValue))return false}return true}rngBefore=doc.createRange();rngBefore.setStart(sel.anchorNode,sel.anchorOffset);rngBefore.collapse(true);rngAfter=doc.createRange();rngAfter.setStart(sel.focusNode,sel.focusOffset);rngAfter.collapse(true);direct=rngBefore.compareBoundaryPoints(rngBefore.START_TO_END,rngAfter)<0;startNode=direct?sel.anchorNode:sel.focusNode;startOffset=direct?sel.anchorOffset:sel.focusOffset;endNode=direct?sel.focusNode:sel.anchorNode;endOffset=direct?sel.focusOffset:sel.anchorOffset;startNode=startNode.nodeName=="HTML"?doc.body:startNode;startNode=startNode.nodeName=="BODY"?startNode.firstChild:startNode;endNode=endNode.nodeName=="BODY"?endNode.firstChild:endNode;startBlock=inst.getParentBlockElement(startNode);endBlock=inst.getParentBlockElement(endNode);if(startBlock&&(startBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(startBlock.style.position)))startBlock=null;if(endBlock&&(endBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(endBlock.style.position)))endBlock=null;if(startBlock!=null){blockName=startBlock.nodeName;if(/(TD|TABLE|TH|CAPTION)/.test(blockName)||(blockName=="DIV"&&/left|right/gi.test(startBlock.style.cssFloat)))blockName="P"}if(tinyMCE.getParentElement(startBlock,"OL,UL",null,body)!=null)return false;if((startBlock!=null&&startBlock.nodeName=="TABLE")||(endBlock!=null&&endBlock.nodeName=="TABLE"))startBlock=endBlock=null;paraBefore=(startBlock!=null&&startBlock.nodeName==blockName)?startBlock.cloneNode(false):doc.createElement(blockName);paraAfter=(endBlock!=null&&endBlock.nodeName==blockName)?endBlock.cloneNode(false):doc.createElement(blockName);if(/^(H[1-6])$/.test(blockName))paraAfter=doc.createElement("p");startChop=startNode;endChop=endNode;node=startChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;startChop=node}while((node=node.previousSibling?node.previousSibling:node.parentNode));node=endChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;endChop=node}while((node=node.nextSibling?node.nextSibling:node.parentNode));if(startChop.nodeName=="TD")startChop=startChop.firstChild;if(endChop.nodeName=="TD")endChop=endChop.lastChild;if(startBlock==null){rng.deleteContents();if(!tinyMCE.isSafari)sel.removeAllRanges();if(startChop!=rootElm&&endChop!=rootElm){rngBefore=rng.cloneRange();if(startChop==body)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);paraBefore.appendChild(rngBefore.cloneContents());if(endChop.parentNode.nodeName==blockName)endChop=endChop.parentNode;rng.setEndAfter(endChop);if(endChop.nodeName!="#text"&&endChop.nodeName!="BODY")rngBefore.setEndAfter(endChop);contents=rng.cloneContents();if(contents.firstChild&&(contents.firstChild.nodeName==blockName||contents.firstChild.nodeName=="BODY"))paraAfter.innerHTML=contents.firstChild.innerHTML;else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng.deleteContents();rngAfter.deleteContents();rngBefore.deleteContents();if(tinyMCE.isOpera){paraBefore.normalize();rngBefore.insertNode(paraBefore);paraAfter.normalize();rngBefore.insertNode(paraAfter)}else{paraAfter.normalize();rngBefore.insertNode(paraAfter);paraBefore.normalize();rngBefore.insertNode(paraBefore)}}else{body.innerHTML="<"+blockName+"> </"+blockName+"><"+blockName+"> </"+blockName+">";paraAfter=body.childNodes[1]}inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode)}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset)}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();if(tinyMCE.isOpera){rng.insertNode(paraBefore);rng.insertNode(paraAfter)}else{rng.insertNode(paraAfter);rng.insertNode(paraBefore)}paraAfter.normalize();paraBefore.normalize();inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"&&sn.parentNode.nodeName!="BODY"){nv=sn.nodeValue;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling)}if(inst.settings.auto_resize)inst.resizeToContent();return s}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re),e=this.getElement(),x,y;var w=parseInt(re.offsetWidth),h=parseInt(re.offsetHeight);var ew=parseInt(e.offsetWidth),eh=parseInt(e.offsetHeight);switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/ 2) - (ew /2);y=rep.absTop+(h/ 2) - (eh /2);break}this.moveTo(x,y)},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y)},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker()},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h)},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker()},show:function(){var el=this.getElement();if(el){el.style.display='block';this.updateBlocker()}},hide:function(){var el=this.getElement();if(el){el.style.display='none';this.updateBlocker()}},isVisible:function(){return this.getElement().style.display=='block'},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element},setBlockMode:function(s){this.blockMode=s},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display}else b.style.display='none'}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.getElementById(this.id+"_blocker");if(!b){b=d.createElement("iframe");b.setAttribute('id',this.id+"_blocker");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b)}this.blockerElement=b}return this.blockerElement},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent}return p},create:function(n,c,p,h){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;if(h)e.innerHTML=h;p.appendChild(e);return this.element=e},exists:function(){return this.doc.getElementById(this.id)!=null},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s)},remove:function(){var e=this.getElement(),b=this.getBlocker();if(e)e.parentNode.removeChild(e);if(b)b.parentNode.removeChild(b)}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=[];this.needsUpdate=true};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class)},clear:function(){this.items=[]},addTitle:function(t){this.add({type:'title',text:t})},addDisabled:function(t){this.add({type:'disabled',text:t})},addSeparator:function(){this.add({type:'separator'})},addItem:function(t,js){this.add({text:t,js:js})},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='<span class="mceMenuLine"></span>';h+='<table border="0" cellpadding="0" cellspacing="0">';for(i=0;i<m.length;i++){t=tinyMCE.xmlEncode(m[i].text);c=m[i].class_name?' class="'+m[i].class_name+'"':'';switch(m[i].type){case'separator':h+='<tr class="'+s.separator_class+'"><td>';break;case'title':h+='<tr class="'+s.title_class+'"><td><span'+c+'>'+t+'</span>';break;case'disabled':h+='<tr class="'+s.disabled_class+'"><td><span'+c+'>'+t+'</span>';break;default:h+='<tr><td><a href="'+tinyMCE.xmlEncode(m[i].js)+'" onmousedown="'+tinyMCE.xmlEncode(m[i].js)+';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span'+c+'>'+t+'</span></a>'}h+='</td></tr>'}h+='</table>';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker()},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this}});tinyMCE.add(TinyMCE_Engine,{debug:function(){var m="",a,i,l=tinyMCE.log.length;for(i=0,a=this.debug.arguments;i<a.length;i++){m+=a[i];if(i<a.length-1)m+=', '}if(l<1000)tinyMCE.log[l]="[debug] "+m}});
\ No newline at end of file
-// Some global instances, this will be filled later\r
-var tinyMCE = null, tinyMCELang = null;\r
-\r
-function TinyMCE_Popup() {\r
-};\r
-\r
-TinyMCE_Popup.prototype = {\r
- findWin : function(w) {\r
- var c;\r
-\r
- // Check parents\r
- c = w;\r
- while (c && (c = c.parent) != null) {\r
- if (typeof(c.tinyMCE) != "undefined")\r
- return c;\r
- }\r
-\r
- // Check openers\r
- c = w;\r
- while (c && (c = c.opener) != null) {\r
- if (typeof(c.tinyMCE) != "undefined")\r
- return c;\r
- }\r
-\r
- // Try top\r
- if (typeof(top.tinyMCE) != "undefined")\r
- return top;\r
-\r
- return null;\r
- },\r
-\r
- init : function() {\r
- var win = window.opener ? window.opener : window.dialogArguments, c;\r
- var inst, re, title, divElm;\r
-\r
- if (!win)\r
- win = this.findWin(window);\r
-\r
- if (!win) {\r
- alert("tinyMCE object reference not found from popup.");\r
- return;\r
- }\r
-\r
- window.opener = win;\r
- this.windowOpener = win;\r
- this.onLoadEval = "";\r
-\r
- // Setup parent references\r
- tinyMCE = win.tinyMCE;\r
- tinyMCELang = win.tinyMCELang;\r
-\r
- inst = tinyMCE.selectedInstance;\r
- this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false;\r
- this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true);\r
-\r
- if (this.isWindow)\r
- window.focus();\r
-\r
- // Store selection\r
- if (this.storeSelection)\r
- inst.selectionBookmark = inst.selection.getBookmark(true);\r
-\r
- // Setup dir\r
- if (tinyMCELang.lang_dir)\r
- document.dir = tinyMCELang.lang_dir;\r
-\r
- // Setup title\r
- re = new RegExp('{|\\\$|}', 'g');\r
- title = document.title.replace(re, "");\r
- if (typeof(tinyMCELang[title]) != "undefined") {\r
- divElm = document.createElement("div");\r
- divElm.innerHTML = tinyMCELang[title];\r
- document.title = divElm.innerHTML;\r
-\r
- if (typeof(tinyMCE.setWindowTitle) != 'undefined')\r
- tinyMCE.setWindowTitle(window, divElm.innerHTML);\r
- }\r
-\r
- // Output Popup CSS class\r
- document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">');\r
-\r
- if (tinyMCE.getParam("popups_css_add")) {\r
- c = tinyMCE.getParam("popups_css_add");\r
-\r
- // Is relative\r
- if (c.indexOf('://') == -1 && c.charAt(0) != '/')\r
- c = tinyMCE.documentBasePath + "/" + c;\r
-\r
- document.write('<link href="' + c + '" rel="stylesheet" type="text/css">');\r
- }\r
-\r
- tinyMCE.addEvent(window, "load", this.onLoad);\r
- },\r
-\r
- onLoad : function() {\r
- var dir, i, elms, body = document.body;\r
-\r
- if (tinyMCE.getWindowArg('mce_replacevariables', true))\r
- body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs);\r
-\r
- dir = tinyMCE.selectedInstance.settings.directionality;\r
- if (dir == "rtl" && document.forms && document.forms.length > 0) {\r
- elms = document.forms[0].elements;\r
- for (i=0; i<elms.length; i++) {\r
- if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr")\r
- elms[i].dir = dir;\r
- }\r
- }\r
-\r
- if (body.style.display == 'none')\r
- body.style.display = 'block';\r
-\r
- // Execute real onload (Opera fix)\r
- if (tinyMCEPopup.onLoadEval !== '')\r
- eval(tinyMCEPopup.onLoadEval);\r
- },\r
-\r
- executeOnLoad : function(str) {\r
- if (tinyMCE.isOpera)\r
- this.onLoadEval = str;\r
- else\r
- eval(str);\r
- },\r
-\r
- resizeToInnerSize : function() {\r
- var i, doc, body, oldMargin, wrapper, iframe, nodes, dx, dy;\r
-\r
- // Netscape 7.1 workaround\r
- if (this.isWindow && tinyMCE.isNS71) {\r
- window.resizeBy(0, 10);\r
- return;\r
- }\r
-\r
- if (this.isWindow) {\r
- doc = document;\r
- body = doc.body;\r
-\r
- if (body.style.display == 'none')\r
- body.style.display = 'block';\r
-\r
- // Remove margin\r
- oldMargin = body.style.margin;\r
- body.style.margin = '0';\r
-\r
- // Create wrapper\r
- wrapper = doc.createElement("div");\r
- wrapper.id = 'mcBodyWrapper';\r
- wrapper.style.display = 'none';\r
- wrapper.style.margin = '0';\r
-\r
- // Wrap body elements\r
- nodes = doc.body.childNodes;\r
- for (i=nodes.length-1; i>=0; i--) {\r
- if (wrapper.hasChildNodes())\r
- wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild);\r
- else\r
- wrapper.appendChild(nodes[i].cloneNode(true));\r
-\r
- nodes[i].parentNode.removeChild(nodes[i]);\r
- }\r
-\r
- // Add wrapper\r
- doc.body.appendChild(wrapper);\r
-\r
- // Create iframe\r
- iframe = document.createElement("iframe");\r
- iframe.id = "mcWinIframe";\r
- iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document;\r
- iframe.width = "100%";\r
- iframe.height = "100%";\r
- iframe.style.margin = '0';\r
-\r
- // Add iframe\r
- doc.body.appendChild(iframe);\r
-\r
- // Measure iframe\r
- iframe = document.getElementById('mcWinIframe');\r
- dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth;\r
- dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight;\r
-\r
- // Resize window\r
- // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy);\r
- window.resizeBy(dx, dy);\r
-\r
- // Hide iframe and show wrapper\r
- body.style.margin = oldMargin;\r
- iframe.style.display = 'none';\r
- wrapper.style.display = 'block';\r
- }\r
- },\r
-\r
- resizeToContent : function() {\r
- var isMSIE = (navigator.appName == "Microsoft Internet Explorer");\r
- var isOpera = (navigator.userAgent.indexOf("Opera") != -1);\r
- var elm, width, height, x, y, dx, dy;\r
-\r
- if (isOpera)\r
- return;\r
-\r
- if (isMSIE) {\r
- try { window.resizeTo(10, 10); } catch (e) {}\r
-\r
- elm = document.body;\r
- width = elm.offsetWidth;\r
- height = elm.offsetHeight;\r
- dx = (elm.scrollWidth - width) + 4;\r
- dy = elm.scrollHeight - height;\r
-\r
- try { window.resizeBy(dx, dy); } catch (e) {}\r
- } else {\r
- window.scrollBy(1000, 1000);\r
- if (window.scrollX > 0 || window.scrollY > 0) {\r
- window.resizeBy(window.innerWidth * 2, window.innerHeight * 2);\r
- window.sizeToContent();\r
- window.scrollTo(0, 0);\r
- x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0);\r
- y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0);\r
- window.moveTo(x, y);\r
- }\r
- }\r
- },\r
-\r
- getWindowArg : function(name, default_value) {\r
- return tinyMCE.getWindowArg(name, default_value);\r
- },\r
-\r
- restoreSelection : function() {\r
- var inst;\r
-\r
- if (this.storeSelection) {\r
- inst = tinyMCE.selectedInstance;\r
-\r
- inst.getWin().focus();\r
-\r
- if (inst.selectionBookmark)\r
- inst.selection.moveToBookmark(inst.selectionBookmark);\r
- }\r
- },\r
-\r
- execCommand : function(command, user_interface, value) {\r
- var inst = tinyMCE.selectedInstance;\r
-\r
- this.restoreSelection();\r
- inst.execCommand(command, user_interface, value);\r
-\r
- // Store selection\r
- if (this.storeSelection)\r
- inst.selectionBookmark = inst.selection.getBookmark(true);\r
- },\r
-\r
- close : function() {\r
- tinyMCE.closeWindow(window);\r
- },\r
-\r
- pickColor : function(e, element_id) {\r
- tinyMCE.selectedInstance.execCommand('mceColorPicker', true, {\r
- element_id : element_id,\r
- document : document,\r
- window : window,\r
- store_selection : false\r
- });\r
- },\r
-\r
- openBrowser : function(element_id, type, option) {\r
- var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));\r
- var url = document.getElementById(element_id).value;\r
-\r
- tinyMCE.setWindowArg("window", window);\r
- tinyMCE.setWindowArg("document", document);\r
-\r
- // Call to external callback\r
- if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined")\r
- alert("Callback function: " + cb + " could not be found.");\r
- else\r
- eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);");\r
- },\r
-\r
- importClass : function(c) {\r
- var n;\r
-\r
- window[c] = function() {};\r
-\r
- for (n in window.opener[c].prototype)\r
- window[c].prototype[n] = window.opener[c].prototype[n];\r
-\r
- window[c].constructor = window.opener[c].constructor;\r
- }\r
-\r
- };\r
-\r
-// Setup global instance\r
-var tinyMCEPopup = new TinyMCE_Popup();\r
-\r
-tinyMCEPopup.init();\r
+// Some global instances, this will be filled later
+var tinyMCE = null, tinyMCELang = null;
+
+function TinyMCE_Popup() {
+};
+
+TinyMCE_Popup.prototype = {
+ findWin : function(w) {
+ var c;
+
+ // Check parents
+ c = w;
+ while (c && (c = c.parent) != null) {
+ if (typeof(c.tinyMCE) != "undefined")
+ return c;
+ }
+
+ // Check openers
+ c = w;
+ while (c && (c = c.opener) != null) {
+ if (typeof(c.tinyMCE) != "undefined")
+ return c;
+ }
+
+ // Try top
+ if (typeof(top.tinyMCE) != "undefined")
+ return top;
+
+ return null;
+ },
+
+ init : function() {
+ var win = window.opener ? window.opener : window.dialogArguments, c;
+ var inst, re, title, divElm;
+
+ if (!win)
+ win = this.findWin(window);
+
+ if (!win) {
+ alert("tinyMCE object reference not found from popup.");
+ return;
+ }
+
+ window.opener = win;
+ this.windowOpener = win;
+ this.onLoadEval = "";
+
+ // Setup parent references
+ tinyMCE = win.tinyMCE;
+ tinyMCELang = win.tinyMCELang;
+
+ inst = tinyMCE.selectedInstance;
+ this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false;
+ this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true);
+
+ if (this.isWindow)
+ window.focus();
+
+ // Store selection
+ if (this.storeSelection)
+ inst.selectionBookmark = inst.selection.getBookmark(true);
+
+ // Setup dir
+ if (tinyMCELang.lang_dir)
+ document.dir = tinyMCELang.lang_dir;
+
+ // Setup title
+ re = new RegExp('{|\\\$|}', 'g');
+ title = document.title.replace(re, "");
+ if (typeof(tinyMCELang[title]) != "undefined") {
+ divElm = document.createElement("div");
+ divElm.innerHTML = tinyMCELang[title];
+ document.title = divElm.innerHTML;
+
+ if (typeof(tinyMCE.setWindowTitle) != 'undefined')
+ tinyMCE.setWindowTitle(window, divElm.innerHTML);
+ }
+
+ // Output Popup CSS class
+ document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">');
+
+ if (tinyMCE.getParam("popups_css_add")) {
+ c = tinyMCE.getParam("popups_css_add");
+
+ // Is relative
+ if (c.indexOf('://') == -1 && c.charAt(0) != '/')
+ c = tinyMCE.documentBasePath + "/" + c;
+
+ document.write('<link href="' + c + '" rel="stylesheet" type="text/css">');
+ }
+
+ tinyMCE.addEvent(window, "load", this.onLoad);
+ },
+
+ onLoad : function() {
+ var dir, i, elms, body = document.body;
+
+ if (tinyMCE.getWindowArg('mce_replacevariables', true))
+ body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs);
+
+ dir = tinyMCE.selectedInstance.settings.directionality;
+ if (dir == "rtl" && document.forms && document.forms.length > 0) {
+ elms = document.forms[0].elements;
+ for (i=0; i<elms.length; i++) {
+ if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr")
+ elms[i].dir = dir;
+ }
+ }
+
+ if (body.style.display == 'none')
+ body.style.display = 'block';
+
+ // Execute real onload (Opera fix)
+ if (tinyMCEPopup.onLoadEval !== '')
+ eval(tinyMCEPopup.onLoadEval);
+ },
+
+ executeOnLoad : function(str) {
+ if (tinyMCE.isOpera && parseFloat(opera.version()) < 9.5)
+ this.onLoadEval = str;
+ else
+ eval(str);
+ },
+
+ resizeToInnerSize : function() {
+ var i, doc, body, oldMargin, wrapper, iframe, nodes, dx, dy;
+
+ // Netscape 7.1 workaround
+ if (this.isWindow && tinyMCE.isNS71) {
+ window.resizeBy(0, 10);
+ return;
+ }
+
+ if (this.isWindow) {
+ doc = document;
+ body = doc.body;
+
+ if (body.style.display == 'none')
+ body.style.display = 'block';
+
+ // Remove margin
+ oldMargin = body.style.margin;
+ body.style.margin = '0';
+
+ // Create wrapper
+ wrapper = doc.createElement("div");
+ wrapper.id = 'mcBodyWrapper';
+ wrapper.style.display = 'none';
+ wrapper.style.margin = '0';
+
+ // Wrap body elements
+ nodes = doc.body.childNodes;
+ for (i=nodes.length-1; i>=0; i--) {
+ if (wrapper.hasChildNodes())
+ wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild);
+ else
+ wrapper.appendChild(nodes[i].cloneNode(true));
+
+ nodes[i].parentNode.removeChild(nodes[i]);
+ }
+
+ // Add wrapper
+ doc.body.appendChild(wrapper);
+
+ // Create iframe
+ iframe = document.createElement("iframe");
+ iframe.id = "mcWinIframe";
+ iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document;
+ iframe.width = "100%";
+ iframe.height = "100%";
+ iframe.style.margin = '0';
+
+ // Add iframe
+ doc.body.appendChild(iframe);
+
+ // Measure iframe
+ iframe = document.getElementById('mcWinIframe');
+ dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth;
+ dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight;
+
+ // Resize window
+ // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy);
+ window.resizeBy(dx, dy);
+
+ // Hide iframe and show wrapper
+ body.style.margin = oldMargin;
+ iframe.style.display = 'none';
+ wrapper.style.display = 'block';
+ }
+ },
+
+ resizeToContent : function() {
+ var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
+ var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
+ var elm, width, height, x, y, dx, dy;
+
+ if (isOpera)
+ return;
+
+ if (isMSIE) {
+ try { window.resizeTo(10, 10); } catch (e) {}
+
+ elm = document.body;
+ width = elm.offsetWidth;
+ height = elm.offsetHeight;
+ dx = (elm.scrollWidth - width) + 4;
+ dy = elm.scrollHeight - height;
+
+ try { window.resizeBy(dx, dy); } catch (e) {}
+ } else {
+ window.scrollBy(1000, 1000);
+ if (window.scrollX > 0 || window.scrollY > 0) {
+ window.resizeBy(window.innerWidth * 2, window.innerHeight * 2);
+ window.sizeToContent();
+ window.scrollTo(0, 0);
+ x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0);
+ y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0);
+ window.moveTo(x, y);
+ }
+ }
+ },
+
+ getWindowArg : function(name, default_value) {
+ return tinyMCE.getWindowArg(name, default_value);
+ },
+
+ restoreSelection : function() {
+ var inst;
+
+ if (this.storeSelection) {
+ inst = tinyMCE.selectedInstance;
+
+ inst.getWin().focus();
+
+ if (inst.selectionBookmark)
+ inst.selection.moveToBookmark(inst.selectionBookmark);
+ }
+ },
+
+ execCommand : function(command, user_interface, value) {
+ var inst = tinyMCE.selectedInstance;
+
+ this.restoreSelection();
+ inst.execCommand(command, user_interface, value);
+
+ // Store selection
+ if (this.storeSelection)
+ inst.selectionBookmark = inst.selection.getBookmark(true);
+ },
+
+ close : function() {
+ tinyMCE.closeWindow(window);
+ },
+
+ pickColor : function(e, element_id) {
+ tinyMCE.selectedInstance.execCommand('mceColorPicker', true, {
+ element_id : element_id,
+ document : document,
+ window : window,
+ store_selection : false
+ });
+ },
+
+ openBrowser : function(element_id, type, option) {
+ var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
+ var url = document.getElementById(element_id).value;
+
+ tinyMCE.setWindowArg("window", window);
+ tinyMCE.setWindowArg("document", document);
+
+ // Call to external callback
+ if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined")
+ alert("Callback function: " + cb + " could not be found.");
+ else
+ eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);");
+ },
+
+ importClass : function(c) {
+ var n;
+
+ window[c] = function() {};
+
+ for (n in window.opener[c].prototype)
+ window[c].prototype[n] = window.opener[c].prototype[n];
+
+ window[c].constructor = window.opener[c].constructor;
+ }
+
+ };
+
+// Setup global instance
+var tinyMCEPopup = new TinyMCE_Popup();
+
+tinyMCEPopup.init();
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Engine.class.js */\r
-\r
-function TinyMCE_Engine() {\r
- var ua;\r
-\r
- this.majorVersion = "2";\r
- this.minorVersion = "1.1.1";\r
- this.releaseDate = "2007-05-14";\r
-\r
- this.instances = [];\r
- this.switchClassCache = [];\r
- this.windowArgs = [];\r
- this.loadedFiles = [];\r
- this.pendingFiles = [];\r
- this.loadingIndex = 0;\r
- this.configs = [];\r
- this.currentConfig = 0;\r
- this.eventHandlers = [];\r
- this.log = [];\r
- this.undoLevels = [];\r
- this.undoIndex = 0;\r
- this.typingUndoIndex = -1;\r
- this.settings = [];\r
-\r
- // Browser check\r
- ua = navigator.userAgent;\r
- this.isMSIE = (navigator.appName == "Microsoft Internet Explorer");\r
- this.isMSIE5 = this.isMSIE && (ua.indexOf('MSIE 5') != -1);\r
- this.isMSIE5_0 = this.isMSIE && (ua.indexOf('MSIE 5.0') != -1);\r
- this.isMSIE7 = this.isMSIE && (ua.indexOf('MSIE 7') != -1);\r
- this.isGecko = ua.indexOf('Gecko') != -1; // Will also be true on Safari\r
- this.isSafari = ua.indexOf('Safari') != -1;\r
- this.isOpera = window['opera'] && opera.buildNumber ? true : false;\r
- this.isMac = ua.indexOf('Mac') != -1;\r
- this.isNS7 = ua.indexOf('Netscape/7') != -1;\r
- this.isNS71 = ua.indexOf('Netscape/7.1') != -1;\r
- this.dialogCounter = 0;\r
- this.plugins = [];\r
- this.themes = [];\r
- this.menus = [];\r
- this.loadedPlugins = [];\r
- this.buttonMap = [];\r
- this.isLoaded = false;\r
-\r
- // Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those\r
- if (this.isOpera) {\r
- this.isMSIE = true;\r
- this.isGecko = false;\r
- this.isSafari = false;\r
- }\r
-\r
- this.isIE = this.isMSIE;\r
- this.isRealIE = this.isMSIE && !this.isOpera;\r
-\r
- // TinyMCE editor id instance counter\r
- this.idCounter = 0;\r
-};\r
-\r
-TinyMCE_Engine.prototype = {\r
- init : function(settings) {\r
- var theme, nl, baseHREF = "", i, cssPath, entities, h, p, src, elements = [], head;\r
-\r
- // IE 5.0x is no longer supported since 5.5, 6.0 and 7.0 now exists. We can't support old browsers forever, sorry.\r
- if (this.isMSIE5_0)\r
- return;\r
-\r
- this.settings = settings;\r
-\r
- // Check if valid browser has execcommand support\r
- if (typeof(document.execCommand) == 'undefined')\r
- return;\r
-\r
- // Get script base path\r
- if (!tinyMCE.baseURL) {\r
- // Search through head\r
- head = document.getElementsByTagName('head')[0];\r
-\r
- if (head) {\r
- for (i=0, nl = head.getElementsByTagName('script'); i<nl.length; i++)\r
- elements.push(nl[i]);\r
- }\r
-\r
- // Search through rest of document\r
- for (i=0, nl = document.getElementsByTagName('script'); i<nl.length; i++)\r
- elements.push(nl[i]);\r
-\r
- // If base element found, add that infront of baseURL\r
- nl = document.getElementsByTagName('base');\r
- for (i=0; i<nl.length; i++) {\r
- if (nl[i].href)\r
- baseHREF = nl[i].href;\r
- }\r
-\r
- for (i=0; i<elements.length; i++) {\r
- if (elements[i].src && (elements[i].src.indexOf("tiny_mce.js") != -1 || elements[i].src.indexOf("tiny_mce_dev.js") != -1 || elements[i].src.indexOf("tiny_mce_src.js") != -1 || elements[i].src.indexOf("tiny_mce_gzip") != -1)) {\r
- src = elements[i].src;\r
-\r
- tinyMCE.srcMode = (src.indexOf('_src') != -1 || src.indexOf('_dev') != -1) ? '_src' : '';\r
- tinyMCE.gzipMode = src.indexOf('_gzip') != -1;\r
- src = src.substring(0, src.lastIndexOf('/'));\r
-\r
- if (settings.exec_mode == "src" || settings.exec_mode == "normal")\r
- tinyMCE.srcMode = settings.exec_mode == "src" ? '_src' : '';\r
-\r
- // Force it absolute if page has a base href\r
- if (baseHREF !== '' && src.indexOf('://') == -1)\r
- tinyMCE.baseURL = baseHREF + src;\r
- else\r
- tinyMCE.baseURL = src;\r
-\r
- break;\r
- }\r
- }\r
- }\r
-\r
- // Get document base path\r
- this.documentBasePath = document.location.href;\r
- if (this.documentBasePath.indexOf('?') != -1)\r
- this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.indexOf('?'));\r
- this.documentURL = this.documentBasePath;\r
- this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.lastIndexOf('/'));\r
-\r
- // If not HTTP absolute\r
- if (tinyMCE.baseURL.indexOf('://') == -1 && tinyMCE.baseURL.charAt(0) != '/') {\r
- // If site absolute\r
- tinyMCE.baseURL = this.documentBasePath + "/" + tinyMCE.baseURL;\r
- }\r
-\r
- // Set default values on settings\r
- this._def("mode", "none");\r
- this._def("theme", "advanced");\r
- this._def("plugins", "", true);\r
- this._def("language", "en");\r
- this._def("docs_language", this.settings.language);\r
- this._def("elements", "");\r
- this._def("textarea_trigger", "mce_editable");\r
- this._def("editor_selector", "");\r
- this._def("editor_deselector", "mceNoEditor");\r
- this._def("valid_elements", "+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");\r
- this._def("extended_valid_elements", "");\r
- this._def("invalid_elements", "");\r
- this._def("encoding", "");\r
- this._def("urlconverter_callback", tinyMCE.getParam("urlconvertor_callback", "TinyMCE_Engine.prototype.convertURL"));\r
- this._def("save_callback", "");\r
- this._def("force_br_newlines", false);\r
- this._def("force_p_newlines", true);\r
- this._def("add_form_submit_trigger", true);\r
- this._def("relative_urls", true);\r
- this._def("remove_script_host", true);\r
- this._def("focus_alert", true);\r
- this._def("document_base_url", this.documentURL);\r
- this._def("visual", true);\r
- this._def("visual_table_class", "mceVisualAid");\r
- this._def("setupcontent_callback", "");\r
- this._def("fix_content_duplication", true);\r
- this._def("custom_undo_redo", true);\r
- this._def("custom_undo_redo_levels", -1);\r
- this._def("custom_undo_redo_keyboard_shortcuts", true);\r
- this._def("custom_undo_redo_restore_selection", true);\r
- this._def("custom_undo_redo_global", false);\r
- this._def("verify_html", true);\r
- this._def("apply_source_formatting", false);\r
- this._def("directionality", "ltr");\r
- this._def("cleanup_on_startup", false);\r
- this._def("inline_styles", false);\r
- this._def("convert_newlines_to_brs", false);\r
- this._def("auto_reset_designmode", true);\r
- this._def("entities", "39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro", true);\r
- this._def("entity_encoding", "named");\r
- this._def("cleanup_callback", "");\r
- this._def("add_unload_trigger", true);\r
- this._def("ask", false);\r
- this._def("nowrap", false);\r
- this._def("auto_resize", false);\r
- this._def("auto_focus", false);\r
- this._def("cleanup", true);\r
- this._def("remove_linebreaks", true);\r
- this._def("button_tile_map", false);\r
- this._def("submit_patch", true);\r
- this._def("browsers", "msie,safari,gecko,opera", true);\r
- this._def("dialog_type", "window");\r
- this._def("accessibility_warnings", true);\r
- this._def("accessibility_focus", true);\r
- this._def("merge_styles_invalid_parents", "");\r
- this._def("force_hex_style_colors", true);\r
- this._def("trim_span_elements", true);\r
- this._def("convert_fonts_to_spans", false);\r
- this._def("doctype", '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');\r
- this._def("font_size_classes", '');\r
- this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true);\r
- this._def("event_elements", 'a,img', true);\r
- this._def("convert_urls", true);\r
- this._def("table_inline_editing", false);\r
- this._def("object_resizing", true);\r
- this._def("custom_shortcuts", true);\r
- this._def("convert_on_click", false);\r
- this._def("content_css", '');\r
- this._def("fix_list_elements", true);\r
- this._def("fix_table_elements", false);\r
- this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml');\r
- this._def("hidden_tab_class", '');\r
- this._def("display_tab_class", '');\r
- this._def("gecko_spellcheck", false);\r
- this._def("hide_selects_on_submit", true);\r
- this._def("forced_root_block", false);\r
- this._def("remove_trailing_nbsp", false);\r
-\r
- // Force strict loading mode to false on non Gecko browsers\r
- if (this.isMSIE && !this.isOpera)\r
- this.settings.strict_loading_mode = false;\r
-\r
- // Browser check IE\r
- if (this.isMSIE && this.settings.browsers.indexOf('msie') == -1)\r
- return;\r
-\r
- // Browser check Gecko\r
- if (this.isGecko && this.settings.browsers.indexOf('gecko') == -1)\r
- return;\r
-\r
- // Browser check Safari\r
- if (this.isSafari && this.settings.browsers.indexOf('safari') == -1)\r
- return;\r
-\r
- // Browser check Opera\r
- if (this.isOpera && this.settings.browsers.indexOf('opera') == -1)\r
- return;\r
-\r
- // If not super absolute make it so\r
- baseHREF = tinyMCE.settings.document_base_url;\r
- h = document.location.href;\r
- p = h.indexOf('://');\r
- if (p > 0 && document.location.protocol != "file:") {\r
- p = h.indexOf('/', p + 3);\r
- h = h.substring(0, p);\r
-\r
- if (baseHREF.indexOf('://') == -1)\r
- baseHREF = h + baseHREF;\r
-\r
- tinyMCE.settings.document_base_url = baseHREF;\r
- tinyMCE.settings.document_base_prefix = h;\r
- }\r
-\r
- // Trim away query part\r
- if (baseHREF.indexOf('?') != -1)\r
- baseHREF = baseHREF.substring(0, baseHREF.indexOf('?'));\r
-\r
- this.settings.base_href = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/";\r
-\r
- theme = this.settings.theme;\r
- this.inlineStrict = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';\r
- this.inlineTransitional = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';\r
- this.blockElms = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';\r
- this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i");\r
- this.posKeyCodes = [13,45,36,35,33,34,37,38,39,40];\r
- this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL\r
- this.uniqueTag = '<div id="mceTMPElement" style="display: none">TMP</div>';\r
- this.callbacks = ['onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance'];\r
-\r
- // Theme url\r
- this.settings.theme_href = tinyMCE.baseURL + "/themes/" + theme;\r
-\r
- if (!tinyMCE.isIE || tinyMCE.isOpera)\r
- this.settings.force_br_newlines = false;\r
-\r
- if (tinyMCE.getParam("popups_css", false)) {\r
- cssPath = tinyMCE.getParam("popups_css", "");\r
-\r
- // Is relative\r
- if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')\r
- this.settings.popups_css = this.documentBasePath + "/" + cssPath;\r
- else\r
- this.settings.popups_css = cssPath;\r
- } else\r
- this.settings.popups_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css";\r
-\r
- if (tinyMCE.getParam("editor_css", false)) {\r
- cssPath = tinyMCE.getParam("editor_css", "");\r
-\r
- // Is relative\r
- if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')\r
- this.settings.editor_css = this.documentBasePath + "/" + cssPath;\r
- else\r
- this.settings.editor_css = cssPath;\r
- } else {\r
- if (this.settings.editor_css !== '')\r
- this.settings.editor_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css";\r
- }\r
-\r
- // Only do this once\r
- if (this.configs.length == 0) {\r
- if (typeof(TinyMCECompressed) == "undefined") {\r
- tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad);\r
-\r
- if (tinyMCE.isRealIE) {\r
- if (document.body)\r
- tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad);\r
- else\r
- tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad);\r
- }\r
-\r
- tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad);\r
- tinyMCE._addUnloadEvents();\r
- }\r
- }\r
-\r
- this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings.theme + '/editor_template' + tinyMCE.srcMode + '.js');\r
- this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings.language + '.js');\r
- this.loadCSS(this.settings.editor_css);\r
-\r
- // Add plugins\r
- p = tinyMCE.getParam('plugins', '', true, ',');\r
- if (p.length > 0) {\r
- for (i=0; i<p.length; i++) {\r
- if (p[i].charAt(0) != '-')\r
- this.loadScript(tinyMCE.baseURL + '/plugins/' + p[i] + '/editor_plugin' + tinyMCE.srcMode + '.js');\r
- }\r
- }\r
-\r
- // Setup entities\r
- if (tinyMCE.getParam('entity_encoding') == 'named') {\r
- settings.cleanup_entities = [];\r
- entities = tinyMCE.getParam('entities', '', true, ',');\r
- for (i=0; i<entities.length; i+=2)\r
- settings.cleanup_entities['c' + entities[i]] = entities[i+1];\r
- }\r
-\r
- // Save away this config\r
- settings.index = this.configs.length;\r
- this.configs[this.configs.length] = settings;\r
-\r
- // Start loading first one in chain\r
- this.loadNextScript();\r
-\r
- // Force flicker free CSS backgrounds in IE\r
- if (this.isIE && !this.isOpera) {\r
- try {\r
- document.execCommand('BackgroundImageCache', false, true);\r
- } catch (e) {\r
- // Ignore\r
- }\r
- }\r
-\r
- // Setup XML encoding regexps\r
- this.xmlEncodeRe = new RegExp('[<>&"]', 'g');\r
- },\r
-\r
- _addUnloadEvents : function() {\r
- var st = tinyMCE.settings.add_unload_trigger;\r
-\r
- if (tinyMCE.isIE) {\r
- if (st) {\r
- tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler);\r
- tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler);\r
- }\r
- } else {\r
- if (st)\r
- tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);});\r
- }\r
- },\r
-\r
- _def : function(key, def_val, t) {\r
- var v = tinyMCE.getParam(key, def_val);\r
-\r
- v = t ? v.replace(/\s+/g, "") : v;\r
-\r
- this.settings[key] = v;\r
- },\r
-\r
- hasPlugin : function(n) {\r
- return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;\r
- },\r
-\r
- addPlugin : function(n, p) {\r
- var op = this.plugins[n];\r
-\r
- // Use the previous plugin object base URL used when loading external plugins\r
- p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n;\r
- this.plugins[n] = p;\r
-\r
- this.loadNextScript();\r
- },\r
-\r
- setPluginBaseURL : function(n, u) {\r
- var op = this.plugins[n];\r
-\r
- if (op)\r
- op.baseURL = u;\r
- else\r
- this.plugins[n] = {baseURL : u};\r
- },\r
-\r
- loadPlugin : function(n, u) {\r
- u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u;\r
- u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u;\r
- this.plugins[n] = {baseURL : u};\r
- this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js");\r
- },\r
-\r
- hasTheme : function(n) {\r
- return typeof(this.themes[n]) != "undefined" && this.themes[n] != null;\r
- },\r
-\r
- addTheme : function(n, t) {\r
- this.themes[n] = t;\r
-\r
- this.loadNextScript();\r
- },\r
-\r
- addMenu : function(n, m) {\r
- this.menus[n] = m;\r
- },\r
-\r
- hasMenu : function(n) {\r
- return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;\r
- },\r
-\r
- loadScript : function(url) {\r
- var i;\r
-\r
- for (i=0; i<this.loadedFiles.length; i++) {\r
- if (this.loadedFiles[i] == url)\r
- return;\r
- }\r
-\r
- if (tinyMCE.settings.strict_loading_mode)\r
- this.pendingFiles[this.pendingFiles.length] = url;\r
- else\r
- document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></script>');\r
-\r
- this.loadedFiles[this.loadedFiles.length] = url;\r
- },\r
-\r
- loadNextScript : function() {\r
- var d = document, se;\r
-\r
- if (!tinyMCE.settings.strict_loading_mode)\r
- return;\r
-\r
- if (this.loadingIndex < this.pendingFiles.length) {\r
- se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script');\r
- se.setAttribute('language', 'javascript');\r
- se.setAttribute('type', 'text/javascript');\r
- se.setAttribute('src', this.pendingFiles[this.loadingIndex++]);\r
-\r
- d.getElementsByTagName("head")[0].appendChild(se);\r
- } else\r
- this.loadingIndex = -1; // Done with loading\r
- },\r
-\r
- loadCSS : function(url) {\r
- var ar = url.replace(/\s+/, '').split(',');\r
- var lflen = 0, csslen = 0, skip = false;\r
- var x = 0, i = 0, nl, le;\r
-\r
- for (x = 0,csslen = ar.length; x<csslen; x++) {\r
- if (ar[x] != null && ar[x] != 'null' && ar[x].length > 0) {\r
- /* Make sure it doesn't exist. */\r
- for (i=0, lflen=this.loadedFiles.length; i<lflen; i++) {\r
- if (this.loadedFiles[i] == ar[x]) {\r
- skip = true;\r
- break;\r
- }\r
- }\r
-\r
- if (!skip) {\r
- if (tinyMCE.settings.strict_loading_mode) {\r
- nl = document.getElementsByTagName("head");\r
-\r
- le = document.createElement('link');\r
- le.setAttribute('href', ar[x]);\r
- le.setAttribute('rel', 'stylesheet');\r
- le.setAttribute('type', 'text/css');\r
-\r
- nl[0].appendChild(le); \r
- } else\r
- document.write('<link href="' + ar[x] + '" rel="stylesheet" type="text/css" />');\r
-\r
- this.loadedFiles[this.loadedFiles.length] = ar[x];\r
- }\r
- }\r
- }\r
- },\r
-\r
- importCSS : function(doc, css) {\r
- var css_ary = css.replace(/\s+/, '').split(',');\r
- var csslen, elm, headArr, x, css_file;\r
-\r
- for (x = 0, csslen = css_ary.length; x<csslen; x++) {\r
- css_file = css_ary[x];\r
-\r
- if (css_file != null && css_file != 'null' && css_file.length > 0) {\r
- // Is relative, make absolute\r
- if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/')\r
- css_file = this.documentBasePath + "/" + css_file;\r
-\r
- if (typeof(doc.createStyleSheet) == "undefined") {\r
- elm = doc.createElement("link");\r
-\r
- elm.rel = "stylesheet";\r
- elm.href = css_file;\r
-\r
- if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0)\r
- headArr[0].appendChild(elm);\r
- } else\r
- doc.createStyleSheet(css_file);\r
- }\r
- }\r
- },\r
-\r
- confirmAdd : function(e, settings) {\r
- var elm = tinyMCE.isIE ? event.srcElement : e.target;\r
- var elementId = elm.name ? elm.name : elm.id;\r
-\r
- tinyMCE.settings = settings;\r
-\r
- if (tinyMCE.settings.convert_on_click || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang.lang_edit_confirm)))\r
- tinyMCE.addMCEControl(elm, elementId);\r
-\r
- elm.setAttribute('mce_noask', 'true');\r
- },\r
-\r
- updateContent : function(form_element_name) {\r
- var formElement, n, inst, doc;\r
-\r
- // Find MCE instance linked to given form element and copy it's value\r
- formElement = document.getElementById(form_element_name);\r
- for (n in tinyMCE.instances) {\r
- inst = tinyMCE.instances[n];\r
-\r
- if (!tinyMCE.isInstance(inst))\r
- continue;\r
-\r
- inst.switchSettings();\r
-\r
- if (inst.formElement == formElement) {\r
- doc = inst.getDoc();\r
-\r
- tinyMCE._setHTML(doc, inst.formElement.value);\r
-\r
- if (!tinyMCE.isIE)\r
- doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid);\r
- }\r
- }\r
- },\r
-\r
- addMCEControl : function(replace_element, form_element_name, target_document) {\r
- var id = "mce_editor_" + tinyMCE.idCounter++;\r
- var inst = new TinyMCE_Control(tinyMCE.settings);\r
-\r
- inst.editorId = id;\r
- this.instances[id] = inst;\r
-\r
- inst._onAdd(replace_element, form_element_name, target_document);\r
- },\r
-\r
- removeInstance : function(ti) {\r
- var t = [], n, i;\r
-\r
- // Remove from instances\r
- for (n in tinyMCE.instances) {\r
- i = tinyMCE.instances[n];\r
-\r
- if (tinyMCE.isInstance(i) && ti != i)\r
- t[n] = i;\r
- }\r
-\r
- tinyMCE.instances = t;\r
-\r
- // Remove from global undo/redo\r
- n = [];\r
- t = tinyMCE.undoLevels;\r
-\r
- for (i=0; i<t.length; i++) {\r
- if (t[i] != ti)\r
- n.push(t[i]);\r
- }\r
-\r
- tinyMCE.undoLevels = n;\r
- tinyMCE.undoIndex = n.length;\r
-\r
- // Dispatch remove instance call\r
- tinyMCE.dispatchCallback(ti, 'remove_instance_callback', 'removeInstance', ti);\r
-\r
- return ti;\r
- },\r
-\r
- removeMCEControl : function(editor_id) {\r
- var inst = tinyMCE.getInstanceById(editor_id), h, re, ot, tn;\r
-\r
- if (inst) {\r
- inst.switchSettings();\r
-\r
- editor_id = inst.editorId;\r
- h = tinyMCE.getContent(editor_id);\r
-\r
- this.removeInstance(inst);\r
-\r
- tinyMCE.selectedElement = null;\r
- tinyMCE.selectedInstance = null;\r
-\r
- // Remove element\r
- re = document.getElementById(editor_id + "_parent");\r
- ot = inst.oldTargetElement;\r
- tn = ot.nodeName.toLowerCase();\r
-\r
- if (tn == "textarea" || tn == "input") {\r
- re.parentNode.removeChild(re);\r
- ot.style.display = "inline";\r
- ot.value = h;\r
- } else {\r
- ot.innerHTML = h;\r
- ot.style.display = 'block';\r
- re.parentNode.insertBefore(ot, re);\r
- re.parentNode.removeChild(re);\r
- }\r
- }\r
- },\r
-\r
- triggerSave : function(skip_cleanup, skip_callback) {\r
- var inst, n;\r
-\r
- // Default to false\r
- if (typeof(skip_cleanup) == "undefined")\r
- skip_cleanup = false;\r
-\r
- // Default to false\r
- if (typeof(skip_callback) == "undefined")\r
- skip_callback = false;\r
-\r
- // Cleanup and set all form fields\r
- for (n in tinyMCE.instances) {\r
- inst = tinyMCE.instances[n];\r
-\r
- if (!tinyMCE.isInstance(inst))\r
- continue;\r
-\r
- inst.triggerSave(skip_cleanup, skip_callback);\r
- }\r
- },\r
-\r
- resetForm : function(form_index) {\r
- var i, inst, n, formObj = document.forms[form_index];\r
-\r
- for (n in tinyMCE.instances) {\r
- inst = tinyMCE.instances[n];\r
-\r
- if (!tinyMCE.isInstance(inst))\r
- continue;\r
-\r
- inst.switchSettings();\r
-\r
- for (i=0; i<formObj.elements.length; i++) {\r
- if (inst.formTargetElementId == formObj.elements[i].name)\r
- inst.getBody().innerHTML = inst.startContent;\r
- }\r
- }\r
- },\r
-\r
- execInstanceCommand : function(editor_id, command, user_interface, value, focus) {\r
- var inst = tinyMCE.getInstanceById(editor_id), r;\r
-\r
- if (inst) {\r
- r = inst.selection.getRng();\r
-\r
- if (typeof(focus) == "undefined")\r
- focus = true;\r
-\r
- // IE bug lost focus on images in absolute divs Bug #1534575\r
- if (focus && (!r || !r.item))\r
- inst.contentWindow.focus();\r
-\r
- // Reset design mode if lost\r
- inst.autoResetDesignMode();\r
-\r
- this.selectedElement = inst.getFocusElement();\r
- inst.select();\r
- tinyMCE.execCommand(command, user_interface, value);\r
-\r
- // Cancel event so it doesn't call onbeforeonunlaod\r
- if (tinyMCE.isIE && window.event != null)\r
- tinyMCE.cancelEvent(window.event);\r
- }\r
- },\r
-\r
- execCommand : function(command, user_interface, value) {\r
- var inst = tinyMCE.selectedInstance, n, pe, te;\r
-\r
- // Default input\r
- user_interface = user_interface ? user_interface : false;\r
- value = value ? value : null;\r
-\r
- if (inst)\r
- inst.switchSettings();\r
-\r
- switch (command) {\r
- case "Undo":\r
- if (this.getParam('custom_undo_redo_global')) {\r
- if (this.undoIndex > 0) {\r
- tinyMCE.nextUndoRedoAction = 'Undo';\r
- inst = this.undoLevels[--this.undoIndex];\r
- inst.select();\r
-\r
- if (!tinyMCE.nextUndoRedoInstanceId)\r
- inst.execCommand('Undo');\r
- }\r
- } else\r
- inst.execCommand('Undo');\r
- return true;\r
-\r
- case "Redo":\r
- if (this.getParam('custom_undo_redo_global')) {\r
- if (this.undoIndex <= this.undoLevels.length - 1) {\r
- tinyMCE.nextUndoRedoAction = 'Redo';\r
- inst = this.undoLevels[this.undoIndex++];\r
- inst.select();\r
-\r
- if (!tinyMCE.nextUndoRedoInstanceId)\r
- inst.execCommand('Redo');\r
- }\r
- } else\r
- inst.execCommand('Redo');\r
-\r
- return true;\r
-\r
- case 'mceFocus':\r
- inst = tinyMCE.getInstanceById(value);\r
-\r
- if (inst)\r
- inst.getWin().focus();\r
- return;\r
-\r
- case "mceAddControl":\r
- case "mceAddEditor":\r
- tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);\r
- return;\r
-\r
- case "mceAddFrameControl":\r
- tinyMCE.addMCEControl(tinyMCE._getElementById(value.element, value.document), value.element, value.document);\r
- return;\r
-\r
- case "mceRemoveControl":\r
- case "mceRemoveEditor":\r
- tinyMCE.removeMCEControl(value);\r
- return;\r
-\r
- case "mceToggleEditor":\r
- inst = tinyMCE.getInstanceById(value);\r
-\r
- if (inst) {\r
- pe = document.getElementById(inst.editorId + '_parent');\r
- te = inst.oldTargetElement;\r
-\r
- if (typeof(inst.enabled) == 'undefined')\r
- inst.enabled = true;\r
-\r
- inst.enabled = !inst.enabled;\r
-\r
- if (!inst.enabled) {\r
- pe.style.display = 'none';\r
-\r
- if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT')\r
- te.value = inst.getHTML();\r
- else\r
- te.innerHTML = inst.getHTML();\r
-\r
- te.style.display = inst.oldTargetDisplay;\r
- tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst);\r
- } else {\r
- pe.style.display = 'block';\r
- te.style.display = 'none';\r
-\r
- if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT')\r
- inst.setHTML(te.value);\r
- else\r
- inst.setHTML(te.innerHTML);\r
-\r
- inst.useCSS = false;\r
- tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst);\r
- }\r
- } else\r
- tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);\r
-\r
- return;\r
-\r
- case "mceResetDesignMode":\r
- // Resets the designmode state of the editors in Gecko\r
- if (tinyMCE.isGecko) {\r
- for (n in tinyMCE.instances) {\r
- if (!tinyMCE.isInstance(tinyMCE.instances[n]))\r
- continue;\r
-\r
- try {\r
- tinyMCE.instances[n].getDoc().designMode = "off";\r
- tinyMCE.instances[n].getDoc().designMode = "on";\r
- tinyMCE.instances[n].useCSS = false;\r
- } catch (e) {\r
- // Ignore any errors\r
- }\r
- }\r
- }\r
-\r
- return;\r
- }\r
-\r
- if (inst) {\r
- inst.execCommand(command, user_interface, value);\r
- } else if (tinyMCE.settings.focus_alert)\r
- alert(tinyMCELang.lang_focus_alert);\r
- },\r
-\r
- _createIFrame : function(replace_element, doc, win) {\r
- var iframe, id = replace_element.getAttribute("id");\r
- var aw, ah;\r
-\r
- if (typeof(doc) == "undefined")\r
- doc = document;\r
-\r
- if (typeof(win) == "undefined")\r
- win = window;\r
-\r
- iframe = doc.createElement("iframe");\r
-\r
- aw = "" + tinyMCE.settings.area_width;\r
- ah = "" + tinyMCE.settings.area_height;\r
-\r
- if (aw.indexOf('%') == -1) {\r
- aw = parseInt(aw);\r
- aw = (isNaN(aw) || aw < 0) ? 300 : aw;\r
- aw = aw + "px";\r
- }\r
-\r
- if (ah.indexOf('%') == -1) {\r
- ah = parseInt(ah);\r
- ah = (isNaN(ah) || ah < 0) ? 240 : ah;\r
- ah = ah + "px";\r
- }\r
-\r
- iframe.setAttribute("id", id);\r
- iframe.setAttribute("name", id);\r
- iframe.setAttribute("class", "mceEditorIframe");\r
- iframe.setAttribute("border", "0");\r
- iframe.setAttribute("frameBorder", "0");\r
- iframe.setAttribute("marginWidth", "0");\r
- iframe.setAttribute("marginHeight", "0");\r
- iframe.setAttribute("leftMargin", "0");\r
- iframe.setAttribute("topMargin", "0");\r
- iframe.setAttribute("width", aw);\r
- iframe.setAttribute("height", ah);\r
- iframe.setAttribute("allowtransparency", "true");\r
- iframe.className = 'mceEditorIframe';\r
-\r
- if (tinyMCE.settings.auto_resize)\r
- iframe.setAttribute("scrolling", "no");\r
-\r
- // Must have a src element in MSIE HTTPs breaks aswell as absoute URLs\r
- if (tinyMCE.isRealIE)\r
- iframe.setAttribute("src", this.settings.default_document);\r
-\r
- iframe.style.width = aw;\r
- iframe.style.height = ah;\r
-\r
- // Ugly hack for Gecko problem in strict mode\r
- if (tinyMCE.settings.strict_loading_mode)\r
- iframe.style.marginBottom = '-5px';\r
-\r
- // MSIE 5.0 issue\r
- if (tinyMCE.isRealIE)\r
- replace_element.outerHTML = iframe.outerHTML;\r
- else\r
- replace_element.parentNode.replaceChild(iframe, replace_element);\r
-\r
- if (tinyMCE.isRealIE)\r
- return win.frames[id];\r
- else\r
- return iframe;\r
- },\r
-\r
- setupContent : function(editor_id) {\r
- var inst = tinyMCE.instances[editor_id], i, doc = inst.getDoc(), head = doc.getElementsByTagName('head').item(0);\r
- var content = inst.startContent, contentElement, body;\r
-\r
- // HTML values get XML encoded in strict mode\r
- if (tinyMCE.settings.strict_loading_mode) {\r
- content = content.replace(/</g, '<');\r
- content = content.replace(/>/g, '>');\r
- content = content.replace(/"/g, '"');\r
- content = content.replace(/&/g, '&');\r
- }\r
-\r
- tinyMCE.selectedInstance = inst;\r
- inst.switchSettings();\r
-\r
- // Not loaded correctly hit it again, Mozilla bug #997860\r
- if (!tinyMCE.isIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") {\r
- // This part will remove the designMode status\r
- // Failes first time in Firefox 1.5b2 on Mac\r
- try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {}\r
- window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000);\r
- return;\r
- }\r
-\r
- // Wait for it to load\r
- if (!head || !doc.body) {\r
- window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10);\r
- return;\r
- }\r
-\r
- // Import theme specific content CSS the user specific\r
- tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings.theme + "/css/editor_content.css");\r
- tinyMCE.importCSS(inst.getDoc(), inst.settings.content_css);\r
- tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst);\r
-\r
- // Setup keyboard shortcuts\r
- if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) {\r
- inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo');\r
- inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo');\r
- }\r
-\r
- // BlockFormat shortcuts keys\r
- for (i=1; i<=6; i++)\r
- inst.addShortcut('ctrl', '' + i, '', 'FormatBlock', false, '<h' + i + '>');\r
-\r
- inst.addShortcut('ctrl', '7', '', 'FormatBlock', false, '<p>');\r
- inst.addShortcut('ctrl', '8', '', 'FormatBlock', false, '<div>');\r
- inst.addShortcut('ctrl', '9', '', 'FormatBlock', false, '<address>');\r
-\r
- // Add default shortcuts for gecko\r
- if (tinyMCE.isGecko) {\r
- inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold');\r
- inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic');\r
- inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline');\r
- }\r
-\r
- // Setup span styles\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- inst.getBody().setAttribute('id', 'mceSpanFonts');\r
-\r
- if (tinyMCE.settings.nowrap)\r
- doc.body.style.whiteSpace = "nowrap";\r
-\r
- doc.body.dir = this.settings.directionality;\r
- doc.editorId = editor_id;\r
-\r
- // Add on document element in Mozilla\r
- if (!tinyMCE.isIE)\r
- doc.documentElement.editorId = editor_id;\r
-\r
- inst.setBaseHREF(tinyMCE.settings.base_href);\r
-\r
- // Replace new line characters to BRs\r
- if (tinyMCE.settings.convert_newlines_to_brs) {\r
- content = tinyMCE.regexpReplace(content, "\r\n", "<br />", "gi");\r
- content = tinyMCE.regexpReplace(content, "\r", "<br />", "gi");\r
- content = tinyMCE.regexpReplace(content, "\n", "<br />", "gi");\r
- }\r
-\r
- // Open closed anchors\r
- // content = content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');\r
-\r
- // Call custom cleanup code\r
- content = tinyMCE.storeAwayURLs(content);\r
- content = tinyMCE._customCleanup(inst, "insert_to_editor", content);\r
-\r
- if (tinyMCE.isIE) {\r
- // Ugly!!!\r
- window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500);\r
-\r
- if (tinyMCE.settings.force_br_newlines)\r
- doc.styleSheets[0].addRule("p", "margin: 0;");\r
-\r
- body = inst.getBody();\r
- body.editorId = editor_id;\r
- }\r
-\r
- content = tinyMCE.cleanupHTMLCode(content);\r
-\r
- // Fix for bug #958637\r
- if (!tinyMCE.isIE) {\r
- contentElement = inst.getDoc().createElement("body");\r
- doc = inst.getDoc();\r
-\r
- contentElement.innerHTML = content;\r
-\r
- if (tinyMCE.settings.cleanup_on_startup)\r
- tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement));\r
- else\r
- tinyMCE.setInnerHTML(inst.getBody(), content);\r
-\r
- tinyMCE.convertAllRelativeURLs(inst.getBody());\r
- } else {\r
- if (tinyMCE.settings.cleanup_on_startup) {\r
- tinyMCE._setHTML(inst.getDoc(), content);\r
-\r
- // Produces permission denied error in MSIE 5.5\r
- try {\r
- tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));\r
- } catch(e) {\r
- // Ignore\r
- }\r
- } else\r
- tinyMCE._setHTML(inst.getDoc(), content);\r
- }\r
-\r
- // Fix for bug #957681\r
- //inst.getDoc().designMode = inst.getDoc().designMode;\r
-\r
- tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings.visual, inst);\r
- tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc());\r
-\r
- // Re-add design mode on mozilla\r
- if (!tinyMCE.isIE)\r
- tinyMCE.addEventHandlers(inst);\r
-\r
- // Add blur handler\r
- if (tinyMCE.isIE) {\r
- tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch);\r
- tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953\r
-\r
- // Workaround for drag drop/copy paste base href bug\r
- if (!tinyMCE.isOpera) {\r
- tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove);\r
- tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch);\r
- tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch);\r
- }\r
- }\r
-\r
- // Trigger node change, this call locks buttons for tables and so forth\r
- inst.select();\r
- tinyMCE.selectedElement = inst.contentWindow.document.body;\r
-\r
- // Call custom DOM cleanup\r
- tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody());\r
- tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody());\r
- tinyMCE._setEventsEnabled(inst.getBody(), false);\r
- tinyMCE.cleanupAnchors(inst.getDoc());\r
-\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- tinyMCE.convertSpansToFonts(inst.getDoc());\r
-\r
- inst.startContent = tinyMCE.trim(inst.getBody().innerHTML);\r
- inst.undoRedo.add({ content : inst.startContent });\r
-\r
- // Cleanup any mess left from storyAwayURLs\r
- if (tinyMCE.isGecko) {\r
- // Remove mce_src from textnodes and comments\r
- tinyMCE.selectNodes(inst.getBody(), function(n) {\r
- if (n.nodeType == 3 || n.nodeType == 8)\r
- n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), "");\r
-\r
- return false;\r
- });\r
- }\r
-\r
- // Remove Gecko spellchecking\r
- if (tinyMCE.isGecko)\r
- inst.getBody().spellcheck = tinyMCE.getParam("gecko_spellcheck");\r
-\r
- // Cleanup any mess left from storyAwayURLs\r
- tinyMCE._removeInternal(inst.getBody());\r
-\r
- inst.select();\r
- tinyMCE.triggerNodeChange(false, true);\r
- },\r
-\r
- storeAwayURLs : function(s) {\r
- // Remove all mce_src, mce_href and replace them with new ones\r
- // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');\r
- // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');\r
-\r
- if (!s.match(/(mce_src|mce_href)/gi, s)) {\r
- s = s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'src="$1" mce_src="$1"');\r
- s = s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'href="$1" mce_href="$1"');\r
- }\r
-\r
- return s;\r
- },\r
-\r
- _removeInternal : function(n) {\r
- if (tinyMCE.isGecko) {\r
- // Remove mce_src from textnodes and comments\r
- tinyMCE.selectNodes(n, function(n) {\r
- if (n.nodeType == 3 || n.nodeType == 8)\r
- n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), "");\r
-\r
- return false;\r
- });\r
- }\r
- },\r
-\r
- removeTinyMCEFormElements : function(form_obj) {\r
- var i, elementId;\r
-\r
- // Skip form element removal\r
- if (!tinyMCE.getParam('hide_selects_on_submit'))\r
- return;\r
-\r
- // Check if form is valid\r
- if (typeof(form_obj) == "undefined" || form_obj == null)\r
- return;\r
-\r
- // If not a form, find the form\r
- if (form_obj.nodeName != "FORM") {\r
- if (form_obj.form)\r
- form_obj = form_obj.form;\r
- else\r
- form_obj = tinyMCE.getParentElement(form_obj, "form");\r
- }\r
-\r
- // Still nothing\r
- if (form_obj == null)\r
- return;\r
-\r
- // Disable all UI form elements that TinyMCE created\r
- for (i=0; i<form_obj.elements.length; i++) {\r
- elementId = form_obj.elements[i].name ? form_obj.elements[i].name : form_obj.elements[i].id;\r
-\r
- if (elementId.indexOf('mce_editor_') == 0)\r
- form_obj.elements[i].disabled = true;\r
- }\r
- },\r
-\r
- handleEvent : function(e) {\r
- var inst = tinyMCE.selectedInstance, i, elm, keys;\r
-\r
- // Remove odd, error\r
- if (typeof(tinyMCE) == "undefined")\r
- return true;\r
-\r
- //tinyMCE.debug(e.type + " " + e.target.nodeName + " " + (e.relatedTarget ? e.relatedTarget.nodeName : ""));\r
-\r
- if (tinyMCE.executeCallback(tinyMCE.selectedInstance, 'handle_event_callback', 'handleEvent', e))\r
- return false;\r
-\r
- switch (e.type) {\r
- case "beforedeactivate": // Was added due to bug #1439953\r
- case "blur":\r
- if (tinyMCE.selectedInstance)\r
- tinyMCE.selectedInstance.execCommand('mceEndTyping');\r
-\r
- tinyMCE.hideMenus();\r
-\r
- return;\r
-\r
- // Workaround for drag drop/copy paste base href bug\r
- case "drop":\r
- case "beforepaste":\r
- if (tinyMCE.selectedInstance)\r
- tinyMCE.selectedInstance.setBaseHREF(null);\r
-\r
- // Fixes odd MSIE bug where drag/droping elements in a iframe with height 100% breaks\r
- // This logic forces the width/height to be in pixels while the user is drag/dropping\r
- if (tinyMCE.isRealIE) {\r
- var ife = tinyMCE.selectedInstance.iframeElement;\r
-\r
- /*if (ife.style.width.indexOf('%') != -1) {\r
- ife._oldWidth = ife.width.height;\r
- ife.style.width = ife.clientWidth;\r
- }*/\r
-\r
- if (ife.style.height.indexOf('%') != -1) {\r
- ife._oldHeight = ife.style.height;\r
- ife.style.height = ife.clientHeight;\r
- }\r
- }\r
-\r
- window.setTimeout("tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings.base_href);tinyMCE._resetIframeHeight();", 1);\r
- return;\r
-\r
- case "submit":\r
- tinyMCE.formSubmit(tinyMCE.isMSIE ? window.event.srcElement : e.target);\r
- return;\r
-\r
- case "reset":\r
- var formObj = tinyMCE.isIE ? window.event.srcElement : e.target;\r
-\r
- for (i=0; i<document.forms.length; i++) {\r
- if (document.forms[i] == formObj)\r
- window.setTimeout('tinyMCE.resetForm(' + i + ');', 10);\r
- }\r
-\r
- return;\r
-\r
- case "keypress":\r
- if (inst && inst.handleShortcut(e))\r
- return false;\r
-\r
- if (e.target.editorId) {\r
- tinyMCE.instances[e.target.editorId].select();\r
- } else {\r
- if (e.target.ownerDocument.editorId)\r
- tinyMCE.instances[e.target.ownerDocument.editorId].select();\r
- }\r
-\r
- if (tinyMCE.selectedInstance)\r
- tinyMCE.selectedInstance.switchSettings();\r
-\r
- // Insert P element\r
- if ((tinyMCE.isGecko || tinyMCE.isOpera || tinyMCE.isSafari) && tinyMCE.settings.force_p_newlines && e.keyCode == 13 && !e.shiftKey) {\r
- // Insert P element instead of BR\r
- if (TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance, e)) {\r
- // Cancel event\r
- tinyMCE.execCommand("mceAddUndoLevel");\r
- return tinyMCE.cancelEvent(e);\r
- }\r
- }\r
-\r
- // Handle backspace\r
- if ((tinyMCE.isGecko && !tinyMCE.isSafari) && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {\r
- // Insert P element instead of BR\r
- if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {\r
- // Cancel event\r
- tinyMCE.execCommand("mceAddUndoLevel");\r
- return tinyMCE.cancelEvent(e);\r
- }\r
- }\r
-\r
- // Return key pressed\r
- if (tinyMCE.isIE && tinyMCE.settings.force_br_newlines && e.keyCode == 13) {\r
- if (e.target.editorId)\r
- tinyMCE.instances[e.target.editorId].select();\r
-\r
- if (tinyMCE.selectedInstance) {\r
- var sel = tinyMCE.selectedInstance.getDoc().selection;\r
- var rng = sel.createRange();\r
-\r
- if (tinyMCE.getParentElement(rng.parentElement(), "li") != null)\r
- return false;\r
-\r
- // Cancel event\r
- e.returnValue = false;\r
- e.cancelBubble = true;\r
-\r
- // Insert BR element\r
- rng.pasteHTML("<br />");\r
- rng.collapse(false);\r
- rng.select();\r
-\r
- tinyMCE.execCommand("mceAddUndoLevel");\r
- tinyMCE.triggerNodeChange(false);\r
- return false;\r
- }\r
- }\r
-\r
- // Backspace or delete\r
- if (e.keyCode == 8 || e.keyCode == 46) {\r
- tinyMCE.selectedElement = e.target;\r
- tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a");\r
- tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img");\r
- tinyMCE.triggerNodeChange(false);\r
- }\r
-\r
- return false;\r
-\r
- case "keyup":\r
- case "keydown":\r
- tinyMCE.hideMenus();\r
- tinyMCE.hasMouseMoved = false;\r
-\r
- if (inst && inst.handleShortcut(e))\r
- return false;\r
-\r
- inst._fixRootBlocks();\r
-\r
- if (inst.settings.remove_trailing_nbsp)\r
- inst._fixTrailingNbsp();\r
-\r
- if (e.target.editorId)\r
- tinyMCE.instances[e.target.editorId].select();\r
-\r
- if (tinyMCE.selectedInstance)\r
- tinyMCE.selectedInstance.switchSettings();\r
-\r
- inst = tinyMCE.selectedInstance;\r
-\r
- // Handle backspace\r
- if (tinyMCE.isGecko && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {\r
- // Insert P element instead of BR\r
- if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {\r
- // Cancel event\r
- tinyMCE.execCommand("mceAddUndoLevel");\r
- e.preventDefault();\r
- return false;\r
- }\r
- }\r
-\r
- tinyMCE.selectedElement = null;\r
- tinyMCE.selectedNode = null;\r
- elm = tinyMCE.selectedInstance.getFocusElement();\r
- tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a");\r
- tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img");\r
- tinyMCE.selectedElement = elm;\r
-\r
- // Update visualaids on tabs\r
- if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9)\r
- tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings.visual, tinyMCE.selectedInstance);\r
-\r
- // Fix empty elements on return/enter, check where enter occured\r
- if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13)\r
- tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement();\r
-\r
- // Fix empty elements on return/enter\r
- if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) {\r
- elm = tinyMCE.enterKeyElement;\r
- if (elm) {\r
- var re = new RegExp('^HR|IMG|BR$','g'); // Skip these\r
- var dre = new RegExp('^H[1-6]$','g'); // Add double on these\r
-\r
- if (!elm.hasChildNodes() && !re.test(elm.nodeName)) {\r
- if (dre.test(elm.nodeName))\r
- elm.innerHTML = " ";\r
- else\r
- elm.innerHTML = " ";\r
- }\r
- }\r
- }\r
-\r
- // Check if it's a position key\r
- keys = tinyMCE.posKeyCodes;\r
- var posKey = false;\r
- for (i=0; i<keys.length; i++) {\r
- if (keys[i] == e.keyCode) {\r
- posKey = true;\r
- break;\r
- }\r
- }\r
-\r
- // MSIE custom key handling\r
- if (tinyMCE.isIE && tinyMCE.settings.custom_undo_redo) {\r
- keys = [8, 46]; // Backspace,Delete\r
-\r
- for (i=0; i<keys.length; i++) {\r
- if (keys[i] == e.keyCode) {\r
- if (e.type == "keyup")\r
- tinyMCE.triggerNodeChange(false);\r
- }\r
- }\r
- }\r
-\r
- // If Ctrl key\r
- if (e.keyCode == 17)\r
- return true;\r
-\r
- // Handle Undo/Redo when typing content\r
-\r
- if (tinyMCE.isGecko) {\r
- // Start typing (not a position key or ctrl key, but ctrl+x and ctrl+p is ok)\r
- if (!posKey && e.type == "keyup" && !e.ctrlKey || (e.ctrlKey && (e.keyCode == 86 || e.keyCode == 88)))\r
- tinyMCE.execCommand("mceStartTyping");\r
- } else {\r
- // IE seems to be working better with this setting\r
- if (!posKey && e.type == "keyup")\r
- tinyMCE.execCommand("mceStartTyping");\r
- }\r
-\r
- // Store undo bookmark\r
- if (e.type == "keydown" && (posKey || e.ctrlKey) && inst)\r
- inst.undoBookmark = inst.selection.getBookmark();\r
-\r
- // End typing (position key) or some Ctrl event\r
- if (e.type == "keyup" && (posKey || e.ctrlKey))\r
- tinyMCE.execCommand("mceEndTyping");\r
-\r
- if (posKey && e.type == "keyup")\r
- tinyMCE.triggerNodeChange(false);\r
-\r
- if (tinyMCE.isIE && e.ctrlKey)\r
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);\r
- break;\r
-\r
- case "mousedown":\r
- case "mouseup":\r
- case "click":\r
- case "dblclick":\r
- case "focus":\r
- tinyMCE.hideMenus();\r
-\r
- if (tinyMCE.selectedInstance) {\r
- tinyMCE.selectedInstance.switchSettings();\r
- tinyMCE.selectedInstance.isFocused = true;\r
- }\r
-\r
- // Check instance event trigged on\r
- var targetBody = tinyMCE.getParentElement(e.target, "html");\r
- for (var instanceName in tinyMCE.instances) {\r
- if (!tinyMCE.isInstance(tinyMCE.instances[instanceName]))\r
- continue;\r
-\r
- inst = tinyMCE.instances[instanceName];\r
-\r
- // Reset design mode if lost (on everything just in case)\r
- inst.autoResetDesignMode();\r
-\r
- // Use HTML element since users might click outside of body element\r
- if (inst.getBody().parentNode == targetBody) {\r
- inst.select();\r
- tinyMCE.selectedElement = e.target;\r
- tinyMCE.linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");\r
- tinyMCE.imgElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "img");\r
- break;\r
- }\r
- }\r
-\r
- // Add first bookmark location\r
- if (!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark && (e.type == "mouseup" || e.type == "dblclick"))\r
- tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark = tinyMCE.selectedInstance.selection.getBookmark();\r
-\r
- // Reset selected node\r
- if (e.type != "focus")\r
- tinyMCE.selectedNode = null;\r
-\r
- tinyMCE.triggerNodeChange(false);\r
- tinyMCE.execCommand("mceEndTyping");\r
-\r
- if (e.type == "mouseup")\r
- tinyMCE.execCommand("mceAddUndoLevel");\r
-\r
- // Just in case\r
- if (!tinyMCE.selectedInstance && e.target.editorId)\r
- tinyMCE.instances[e.target.editorId].select();\r
-\r
- return false;\r
- }\r
- },\r
-\r
- getButtonHTML : function(id, lang, img, cmd, ui, val) {\r
- var h = '', m, x, io = '';\r
-\r
- cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';\r
-\r
- if (typeof(ui) != "undefined" && ui != null)\r
- cmd += ',' + ui;\r
-\r
- if (typeof(val) != "undefined" && val != null)\r
- cmd += ",'" + val + "'";\r
-\r
- cmd += ');';\r
-\r
- // Patch for IE7 bug with hover out not restoring correctly\r
- if (tinyMCE.isRealIE)\r
- io = 'onmouseover="tinyMCE.lastHover = this;"';\r
-\r
- // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled\r
- if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = this.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {\r
- // Tiled button\r
- x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);\r
- h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" ' + io + ' class="mceTiledButton mceButtonNormal" target="_self">';\r
- h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" alt="{$'+lang+'}" title="{$' + lang + '}" />';\r
- h += '</a>';\r
- } else {\r
- // Normal button\r
- h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" ' + io + ' class="mceButtonNormal" target="_self">';\r
- h += '<img src="' + img + '" alt="{$'+lang+'}" title="{$' + lang + '}" />';\r
- h += '</a>';\r
- }\r
-\r
- return h;\r
- },\r
-\r
- getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) {\r
- var h = '', m, x;\r
-\r
- mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');';\r
- cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';\r
-\r
- if (typeof(ui) != "undefined" && ui != null)\r
- cmd += ',' + ui;\r
-\r
- if (typeof(val) != "undefined" && val != null)\r
- cmd += ",'" + val + "'";\r
-\r
- cmd += ');';\r
-\r
- // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled\r
- if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {\r
- x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);\r
-\r
- if (tinyMCE.isRealIE)\r
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';\r
- else\r
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';\r
-\r
- h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';\r
- h += '<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: ' + x + 'px 0" title="{$' + lang + '}" /></a>';\r
- h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';\r
- h += '</a></span>';\r
- } else {\r
- if (tinyMCE.isRealIE)\r
- h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';\r
- else\r
- h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton">';\r
-\r
- h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';\r
- h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';\r
- h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';\r
- h += '</a></span>';\r
- }\r
-\r
- return h;\r
- },\r
-\r
- _menuButtonEvent : function(e, o) {\r
- if (o.className == 'mceMenuButtonFocus')\r
- return;\r
-\r
- if (e == 'over')\r
- o.className = o.className + ' mceMenuHover';\r
- else\r
- o.className = o.className.replace(/\s.*$/, '');\r
- },\r
-\r
- addButtonMap : function(m) {\r
- var i, a = m.replace(/\s+/, '').split(',');\r
-\r
- for (i=0; i<a.length; i++)\r
- this.buttonMap[a[i]] = i;\r
- },\r
-\r
- formSubmit : function(f, p) {\r
- var n, inst, found = false;\r
-\r
- if (f.form)\r
- f = f.form;\r
-\r
- // Is it a form that has a TinyMCE instance\r
- for (n in tinyMCE.instances) {\r
- inst = tinyMCE.instances[n];\r
-\r
- if (!tinyMCE.isInstance(inst))\r
- continue;\r
-\r
- if (inst.formElement) {\r
- if (f == inst.formElement.form) {\r
- found = true;\r
- inst.isNotDirty = true;\r
- }\r
- }\r
- }\r
-\r
- // Is valid\r
- if (found) {\r
- tinyMCE.removeTinyMCEFormElements(f);\r
- tinyMCE.triggerSave();\r
- }\r
-\r
- // Is it patched\r
- if (f.mceOldSubmit && p)\r
- f.mceOldSubmit();\r
- },\r
-\r
- submitPatch : function() {\r
- tinyMCE.formSubmit(this, true);\r
- },\r
-\r
- onLoad : function() {\r
- var r, i, c, mode, trigger, elements, element, settings, elementId, elm;\r
- var selector, deselector, elementRefAr, form;\r
-\r
- // Wait for everything to be loaded first\r
- if (tinyMCE.settings.strict_loading_mode && this.loadingIndex != -1) {\r
- window.setTimeout('tinyMCE.onLoad();', 1);\r
- return;\r
- }\r
-\r
- if (tinyMCE.isRealIE && window.event.type == "readystatechange" && document.readyState != "complete")\r
- return true;\r
-\r
- if (tinyMCE.isLoaded)\r
- return true;\r
-\r
- tinyMCE.isLoaded = true;\r
-\r
- // IE produces JS error if TinyMCE is placed in a frame\r
- // It seems to have something to do with the selection not beeing\r
- // correctly initialized in IE so this hack solves the problem\r
- if (tinyMCE.isRealIE && document.body && window.location.href != window.top.location.href) {\r
- r = document.body.createTextRange();\r
- r.collapse(true);\r
- r.select();\r
- }\r
-\r
- tinyMCE.dispatchCallback(null, 'onpageload', 'onPageLoad');\r
-\r
- for (c=0; c<tinyMCE.configs.length; c++) {\r
- tinyMCE.settings = tinyMCE.configs[c];\r
-\r
- selector = tinyMCE.getParam("editor_selector");\r
- deselector = tinyMCE.getParam("editor_deselector");\r
- elementRefAr = [];\r
-\r
- // Add submit triggers\r
- if (document.forms && tinyMCE.settings.add_form_submit_trigger && !tinyMCE.submitTriggers) {\r
- for (i=0; i<document.forms.length; i++) {\r
- form = document.forms[i];\r
-\r
- tinyMCE.addEvent(form, "submit", TinyMCE_Engine.prototype.handleEvent);\r
- tinyMCE.addEvent(form, "reset", TinyMCE_Engine.prototype.handleEvent);\r
- tinyMCE.submitTriggers = true; // Do it only once\r
-\r
- // Patch the form.submit function\r
- if (tinyMCE.settings.submit_patch) {\r
- try {\r
- form.mceOldSubmit = form.submit;\r
- form.submit = TinyMCE_Engine.prototype.submitPatch;\r
- } catch (e) {\r
- // Do nothing\r
- }\r
- }\r
- }\r
- }\r
-\r
- // Add editor instances based on mode\r
- mode = tinyMCE.settings.mode;\r
- switch (mode) {\r
- case "exact":\r
- elements = tinyMCE.getParam('elements', '', true, ',');\r
-\r
- for (i=0; i<elements.length; i++) {\r
- element = tinyMCE._getElementById(elements[i]);\r
- trigger = element ? element.getAttribute(tinyMCE.settings.textarea_trigger) : "";\r
-\r
- if (new RegExp('\\b' + deselector + '\\b').test(tinyMCE.getAttrib(element, "class")))\r
- continue;\r
-\r
- if (trigger == "false")\r
- continue;\r
-\r
- if ((tinyMCE.settings.ask || tinyMCE.settings.convert_on_click) && element) {\r
- elementRefAr[elementRefAr.length] = element;\r
- continue;\r
- }\r
-\r
- if (element)\r
- tinyMCE.addMCEControl(element, elements[i]);\r
- }\r
- break;\r
-\r
- case "specific_textareas":\r
- case "textareas":\r
- elements = document.getElementsByTagName("textarea");\r
-\r
- for (i=0; i<elements.length; i++) {\r
- elm = elements.item(i);\r
- trigger = elm.getAttribute(tinyMCE.settings.textarea_trigger);\r
-\r
- if (selector !== '' && !new RegExp('\\b' + selector + '\\b').test(tinyMCE.getAttrib(elm, "class")))\r
- continue;\r
-\r
- if (selector !== '')\r
- trigger = selector !== '' ? "true" : "";\r
-\r
- if (new RegExp('\\b' + deselector + '\\b').test(tinyMCE.getAttrib(elm, "class")))\r
- continue;\r
-\r
- if ((mode == "specific_textareas" && trigger == "true") || (mode == "textareas" && trigger != "false"))\r
- elementRefAr[elementRefAr.length] = elm;\r
- }\r
- break;\r
- }\r
-\r
- for (i=0; i<elementRefAr.length; i++) {\r
- element = elementRefAr[i];\r
- elementId = element.name ? element.name : element.id;\r
-\r
- if (tinyMCE.settings.ask || tinyMCE.settings.convert_on_click) {\r
- // Focus breaks in Mozilla\r
- if (tinyMCE.isGecko) {\r
- settings = tinyMCE.settings;\r
-\r
- tinyMCE.addEvent(element, "focus", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});\r
-\r
- if (element.nodeName != "TEXTAREA" && element.nodeName != "INPUT")\r
- tinyMCE.addEvent(element, "click", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});\r
- // tinyMCE.addEvent(element, "mouseover", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});\r
- } else {\r
- settings = tinyMCE.settings;\r
-\r
- tinyMCE.addEvent(element, "focus", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });\r
- tinyMCE.addEvent(element, "click", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });\r
- // tinyMCE.addEvent(element, "mouseenter", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });\r
- }\r
- } else\r
- tinyMCE.addMCEControl(element, elementId);\r
- }\r
-\r
- // Handle auto focus\r
- if (tinyMCE.settings.auto_focus) {\r
- window.setTimeout(function () {\r
- var inst = tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);\r
- inst.selection.selectNode(inst.getBody(), true, true);\r
- inst.contentWindow.focus();\r
- }, 100);\r
- }\r
-\r
- tinyMCE.dispatchCallback(null, 'oninit', 'onInit');\r
- }\r
- },\r
-\r
- isInstance : function(o) {\r
- return o != null && typeof(o) == "object" && o.isTinyMCE_Control;\r
- },\r
-\r
- getParam : function(name, default_value, strip_whitespace, split_chr) {\r
- var i, outArray, value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];\r
-\r
- // Fix bool values\r
- if (value == "true" || value == "false")\r
- return (value == "true");\r
-\r
- if (strip_whitespace)\r
- value = tinyMCE.regexpReplace(value, "[ \t\r\n]", "");\r
-\r
- if (typeof(split_chr) != "undefined" && split_chr != null) {\r
- value = value.split(split_chr);\r
- outArray = [];\r
-\r
- for (i=0; i<value.length; i++) {\r
- if (value[i] && value[i] !== '')\r
- outArray[outArray.length] = value[i];\r
- }\r
-\r
- value = outArray;\r
- }\r
-\r
- return value;\r
- },\r
-\r
- getLang : function(name, default_value, parse_entities, va) {\r
- var v = (typeof(tinyMCELang[name]) == "undefined") ? default_value : tinyMCELang[name], n;\r
-\r
- if (parse_entities)\r
- v = tinyMCE.entityDecode(v);\r
-\r
- if (va) {\r
- for (n in va)\r
- v = this.replaceVar(v, n, va[n]);\r
- }\r
-\r
- return v;\r
- },\r
-\r
- entityDecode : function(s) {\r
- var e = document.createElement("div");\r
-\r
- e.innerHTML = s;\r
-\r
- return !e.firstChild ? s : e.firstChild.nodeValue;\r
- },\r
-\r
- addToLang : function(prefix, ar) {\r
- var k;\r
-\r
- for (k in ar) {\r
- if (typeof(ar[k]) == 'function')\r
- continue;\r
-\r
- tinyMCELang[(k.indexOf('lang_') == -1 ? 'lang_' : '') + (prefix !== '' ? (prefix + "_") : '') + k] = ar[k];\r
- }\r
-\r
- this.loadNextScript();\r
- },\r
-\r
- triggerNodeChange : function(focus, setup_content) {\r
- var elm, inst, editorId, undoIndex = -1, undoLevels = -1, doc, anySelection = false, st;\r
-\r
- if (tinyMCE.selectedInstance) {\r
- inst = tinyMCE.selectedInstance;\r
- elm = (typeof(setup_content) != "undefined" && setup_content) ? tinyMCE.selectedElement : inst.getFocusElement();\r
-\r
-/* if (elm == inst.lastTriggerEl)\r
- return;\r
-\r
- inst.lastTriggerEl = elm;*/\r
-\r
- editorId = inst.editorId;\r
- st = inst.selection.getSelectedText();\r
-\r
- if (tinyMCE.settings.auto_resize)\r
- inst.resizeToContent();\r
-\r
- if (setup_content && tinyMCE.isGecko && inst.isHidden())\r
- elm = inst.getBody();\r
-\r
- inst.switchSettings();\r
-\r
- if (tinyMCE.selectedElement)\r
- anySelection = (tinyMCE.selectedElement.nodeName.toLowerCase() == "img") || (st && st.length > 0);\r
-\r
- if (tinyMCE.settings.custom_undo_redo) {\r
- undoIndex = inst.undoRedo.undoIndex;\r
- undoLevels = inst.undoRedo.undoLevels.length;\r
- }\r
-\r
- tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content);\r
- }\r
-\r
- if (this.selectedInstance && (typeof(focus) == "undefined" || focus))\r
- this.selectedInstance.contentWindow.focus();\r
- },\r
-\r
- _customCleanup : function(inst, type, content) {\r
- var pl, po, i, customCleanup;\r
-\r
- // Call custom cleanup\r
- customCleanup = tinyMCE.settings.cleanup_callback;\r
- if (customCleanup != '')\r
- content = tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback, window)(type, content, inst);\r
-\r
- // Trigger theme cleanup\r
- po = tinyMCE.themes[tinyMCE.settings.theme];\r
- if (po && po.cleanup)\r
- content = po.cleanup(type, content, inst);\r
-\r
- // Trigger plugin cleanups\r
- pl = inst.plugins;\r
- for (i=0; i<pl.length; i++) {\r
- po = tinyMCE.plugins[pl[i]];\r
-\r
- if (po && po.cleanup)\r
- content = po.cleanup(type, content, inst);\r
- }\r
-\r
- return content;\r
- },\r
-\r
- setContent : function(h) {\r
- if (tinyMCE.selectedInstance) {\r
- tinyMCE.selectedInstance.execCommand('mceSetContent', false, h);\r
- tinyMCE.selectedInstance.repaint();\r
- }\r
- },\r
-\r
- importThemeLanguagePack : function(name) {\r
- if (typeof(name) == "undefined")\r
- name = tinyMCE.settings.theme;\r
-\r
- tinyMCE.loadScript(tinyMCE.baseURL + '/themes/' + name + '/langs/' + tinyMCE.settings.language + '.js');\r
- },\r
-\r
- importPluginLanguagePack : function(name) {\r
- var b = tinyMCE.baseURL + '/plugins/' + name;\r
-\r
- if (this.plugins[name])\r
- b = this.plugins[name].baseURL;\r
-\r
- tinyMCE.loadScript(b + '/langs/' + tinyMCE.settings.language + '.js');\r
- },\r
-\r
- applyTemplate : function(h, ag) {\r
- return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}', 'gi'), function(m, s) {\r
- if (s.indexOf('lang_') == 0 && tinyMCELang[s])\r
- return tinyMCELang[s];\r
-\r
- if (ag && ag[s])\r
- return ag[s];\r
-\r
- if (tinyMCE.settings[s])\r
- return tinyMCE.settings[s];\r
-\r
- if (m == 'themeurl')\r
- return tinyMCE.themeURL;\r
-\r
- return m;\r
- });\r
- },\r
-\r
- replaceVar : function(h, r, v) {\r
- return h.replace(new RegExp('{\\\$' + r + '}', 'g'), v);\r
- },\r
-\r
- openWindow : function(template, args) {\r
- var html, width, height, x, y, resizable, scrollbars, url, name, win, modal, features;\r
-\r
- args = !args ? {} : args;\r
-\r
- args.mce_template_file = template.file;\r
- args.mce_width = template.width;\r
- args.mce_height = template.height;\r
- tinyMCE.windowArgs = args;\r
-\r
- html = template.html;\r
- if (!(width = parseInt(template.width)))\r
- width = 320;\r
-\r
- if (!(height = parseInt(template.height)))\r
- height = 200;\r
-\r
- // Add to height in M$ due to SP2 WHY DON'T YOU GUYS IMPLEMENT innerWidth of windows!!\r
- if (tinyMCE.isIE)\r
- height += 40;\r
- else\r
- height += 20;\r
-\r
- x = parseInt(screen.width / 2.0) - (width / 2.0);\r
- y = parseInt(screen.height / 2.0) - (height / 2.0);\r
-\r
- resizable = (args && args.resizable) ? args.resizable : "no";\r
- scrollbars = (args && args.scrollbars) ? args.scrollbars : "no";\r
-\r
- if (template.file.charAt(0) != '/' && template.file.indexOf('://') == -1)\r
- url = tinyMCE.baseURL + "/themes/" + tinyMCE.getParam("theme") + "/" + template.file;\r
- else\r
- url = template.file;\r
-\r
- // Replace all args as variables in URL\r
- for (name in args) {\r
- if (typeof(args[name]) == 'function')\r
- continue;\r
-\r
- url = tinyMCE.replaceVar(url, name, escape(args[name]));\r
- }\r
-\r
- if (html) {\r
- html = tinyMCE.replaceVar(html, "css", this.settings.popups_css);\r
- html = tinyMCE.applyTemplate(html, args);\r
-\r
- win = window.open("", "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=yes,minimizable=" + resizable + ",modal=yes,width=" + width + ",height=" + height + ",resizable=" + resizable);\r
- if (win == null) {\r
- alert(tinyMCELang.lang_popup_blocked);\r
- return;\r
- }\r
-\r
- win.document.write(html);\r
- win.document.close();\r
- win.resizeTo(width, height);\r
- win.focus();\r
- } else {\r
- if ((tinyMCE.isRealIE) && resizable != 'yes' && tinyMCE.settings.dialog_type == "modal") {\r
- height += 10;\r
-\r
- features = "resizable:" + resizable + ";scroll:" + scrollbars + ";status:yes;center:yes;help:no;dialogWidth:" + width + "px;dialogHeight:" + height + "px;";\r
-\r
- window.showModalDialog(url, window, features);\r
- } else {\r
- modal = (resizable == "yes") ? "no" : "yes";\r
-\r
- if (tinyMCE.isGecko && tinyMCE.isMac)\r
- modal = "no";\r
-\r
- if (template.close_previous != "no")\r
- try {tinyMCE.lastWindow.close();} catch (ex) {}\r
-\r
- win = window.open(url, "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=" + modal + ",minimizable=" + resizable + ",modal=" + modal + ",width=" + width + ",height=" + height + ",resizable=" + resizable);\r
- if (win == null) {\r
- alert(tinyMCELang.lang_popup_blocked);\r
- return;\r
- }\r
-\r
- if (template.close_previous != "no")\r
- tinyMCE.lastWindow = win;\r
-\r
- try {\r
- win.resizeTo(width, height);\r
- } catch(e) {\r
- // Ignore\r
- }\r
-\r
- // Make it bigger if statusbar is forced\r
- if (tinyMCE.isGecko) {\r
- if (win.document.defaultView.statusbar.visible)\r
- win.resizeBy(0, tinyMCE.isMac ? 10 : 24);\r
- }\r
-\r
- win.focus();\r
- }\r
- }\r
- },\r
-\r
- closeWindow : function(win) {\r
- win.close();\r
- },\r
-\r
- getVisualAidClass : function(class_name, state) {\r
- var i, classNames, ar, className, aidClass = tinyMCE.settings.visual_table_class;\r
-\r
- if (typeof(state) == "undefined")\r
- state = tinyMCE.settings.visual;\r
-\r
- // Split\r
- classNames = [];\r
- ar = class_name.split(' ');\r
- for (i=0; i<ar.length; i++) {\r
- if (ar[i] == aidClass)\r
- ar[i] = "";\r
-\r
- if (ar[i] !== '')\r
- classNames[classNames.length] = ar[i];\r
- }\r
-\r
- if (state)\r
- classNames[classNames.length] = aidClass;\r
-\r
- // Glue\r
- className = "";\r
- for (i=0; i<classNames.length; i++) {\r
- if (i > 0)\r
- className += " ";\r
-\r
- className += classNames[i];\r
- }\r
-\r
- return className;\r
- },\r
-\r
- handleVisualAid : function(el, deep, state, inst, skip_dispatch) {\r
- var i, x, y, tableElement, anchorName, oldW, oldH, bo, cn;\r
-\r
- if (!el)\r
- return;\r
-\r
- if (!skip_dispatch)\r
- tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst);\r
-\r
- tableElement = null;\r
-\r
- switch (el.nodeName) {\r
- case "TABLE":\r
- oldW = el.style.width;\r
- oldH = el.style.height;\r
- bo = tinyMCE.getAttrib(el, "border");\r
-\r
- bo = bo == '' || bo == "0" ? true : false;\r
-\r
- tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo));\r
-\r
- el.style.width = oldW;\r
- el.style.height = oldH;\r
-\r
- for (y=0; y<el.rows.length; y++) {\r
- for (x=0; x<el.rows[y].cells.length; x++) {\r
- cn = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x], "class"), state && bo);\r
- tinyMCE.setAttrib(el.rows[y].cells[x], "class", cn);\r
- }\r
- }\r
-\r
- break;\r
-\r
- case "A":\r
- anchorName = tinyMCE.getAttrib(el, "name");\r
-\r
- if (anchorName !== '' && state) {\r
- el.title = anchorName;\r
- tinyMCE.addCSSClass(el, 'mceItemAnchor');\r
- } else if (anchorName !== '' && !state)\r
- el.className = '';\r
-\r
- break;\r
- }\r
-\r
- if (deep && el.hasChildNodes()) {\r
- for (i=0; i<el.childNodes.length; i++)\r
- tinyMCE.handleVisualAid(el.childNodes[i], deep, state, inst, true);\r
- }\r
- },\r
-\r
- fixGeckoBaseHREFBug : function(m, e, h) {\r
- var xsrc, xhref;\r
-\r
- if (tinyMCE.isGecko) {\r
- if (m == 1) {\r
- h = h.replace(/\ssrc=/gi, " mce_tsrc=");\r
- h = h.replace(/\shref=/gi, " mce_thref=");\r
-\r
- return h;\r
- } else {\r
- // Why bother if there is no src or href broken\r
- if (!new RegExp('(src|href)=', 'g').test(h))\r
- return h;\r
-\r
- // Restore src and href that gets messed up by Gecko\r
- tinyMCE.selectElements(e, 'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK', function (n) {\r
- xsrc = tinyMCE.getAttrib(n, "mce_tsrc");\r
- xhref = tinyMCE.getAttrib(n, "mce_thref");\r
-\r
- if (xsrc !== '') {\r
- try {\r
- n.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, xsrc);\r
- } catch (e) {\r
- // Ignore, Firefox cast exception if local file wasn't found\r
- }\r
-\r
- n.removeAttribute("mce_tsrc");\r
- }\r
-\r
- if (xhref !== '') {\r
- try {\r
- n.href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, xhref);\r
- } catch (e) {\r
- // Ignore, Firefox cast exception if local file wasn't found\r
- }\r
-\r
- n.removeAttribute("mce_thref");\r
- }\r
-\r
- return false;\r
- });\r
-\r
- // Restore text/comment nodes\r
- tinyMCE.selectNodes(e, function(n) {\r
- if (n.nodeType == 3 || n.nodeType == 8) {\r
- n.nodeValue = n.nodeValue.replace(/\smce_tsrc=/gi, " src=");\r
- n.nodeValue = n.nodeValue.replace(/\smce_thref=/gi, " href=");\r
- }\r
-\r
- return false;\r
- });\r
- }\r
- }\r
-\r
- return h;\r
- },\r
-\r
- _setHTML : function(doc, html_content) {\r
- var i, html, paras, node;\r
-\r
- // Force closed anchors open\r
- //html_content = html_content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');\r
-\r
- html_content = tinyMCE.cleanupHTMLCode(html_content);\r
-\r
- // Try innerHTML if it fails use pasteHTML in MSIE\r
- try {\r
- tinyMCE.setInnerHTML(doc.body, html_content);\r
- } catch (e) {\r
- if (this.isMSIE)\r
- doc.body.createTextRange().pasteHTML(html_content);\r
- }\r
-\r
- // Content duplication bug fix\r
- if (tinyMCE.isIE && tinyMCE.settings.fix_content_duplication) {\r
- // Remove P elements in P elements\r
- paras = doc.getElementsByTagName("P");\r
- for (i=0; i<paras.length; i++) {\r
- node = paras[i];\r
-\r
- while ((node = node.parentNode) != null) {\r
- if (node.nodeName == "P")\r
- node.outerHTML = node.innerHTML;\r
- }\r
- }\r
-\r
- // Content duplication bug fix (Seems to be word crap)\r
- html = doc.body.innerHTML;\r
-\r
- // Always set the htmlText output\r
- tinyMCE.setInnerHTML(doc.body, html);\r
- }\r
-\r
- tinyMCE.cleanupAnchors(doc);\r
-\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- tinyMCE.convertSpansToFonts(doc);\r
- },\r
-\r
- getEditorId : function(form_element) {\r
- var inst = this.getInstanceById(form_element);\r
-\r
- if (!inst)\r
- return null;\r
-\r
- return inst.editorId;\r
- },\r
-\r
- getInstanceById : function(editor_id) {\r
- var inst = this.instances[editor_id], n;\r
-\r
- if (!inst) {\r
- for (n in tinyMCE.instances) {\r
- inst = tinyMCE.instances[n];\r
-\r
- if (!tinyMCE.isInstance(inst))\r
- continue;\r
-\r
- if (inst.formTargetElementId == editor_id)\r
- return inst;\r
- }\r
- } else\r
- return inst;\r
-\r
- return null;\r
- },\r
-\r
- queryInstanceCommandValue : function(editor_id, command) {\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
-\r
- if (inst)\r
- return inst.queryCommandValue(command);\r
-\r
- return false;\r
- },\r
-\r
- queryInstanceCommandState : function(editor_id, command) {\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
-\r
- if (inst)\r
- return inst.queryCommandState(command);\r
-\r
- return null;\r
- },\r
-\r
- setWindowArg : function(n, v) {\r
- this.windowArgs[n] = v;\r
- },\r
-\r
- getWindowArg : function(n, d) {\r
- return (typeof(this.windowArgs[n]) == "undefined") ? d : this.windowArgs[n];\r
- },\r
-\r
- getCSSClasses : function(editor_id, doc) {\r
- var i, c, x, rule, styles, rules, csses, selectorText, inst = tinyMCE.getInstanceById(editor_id);\r
- var cssClass, addClass, p;\r
-\r
- if (!inst)\r
- inst = tinyMCE.selectedInstance;\r
-\r
- if (!inst)\r
- return [];\r
-\r
- if (!doc)\r
- doc = inst.getDoc();\r
-\r
- // Is cached, use that\r
- if (inst && inst.cssClasses.length > 0)\r
- return inst.cssClasses;\r
-\r
- if (!doc)\r
- return;\r
-\r
- styles = doc.styleSheets;\r
-\r
- if (styles && styles.length > 0) {\r
- for (x=0; x<styles.length; x++) {\r
- csses = null;\r
-\r
- try {\r
- csses = tinyMCE.isIE ? doc.styleSheets(x).rules : styles[x].cssRules;\r
- } catch(e) {\r
- // Just ignore any errors I know this is ugly!!\r
- }\r
- \r
- if (!csses)\r
- return [];\r
-\r
- for (i=0; i<csses.length; i++) {\r
- selectorText = csses[i].selectorText;\r
-\r
- // Can be multiple rules per selector\r
- if (selectorText) {\r
- rules = selectorText.split(',');\r
- for (c=0; c<rules.length; c++) {\r
- rule = rules[c];\r
-\r
- // Strip spaces between selectors\r
- while (rule.indexOf(' ') == 0)\r
- rule = rule.substring(1);\r
-\r
- // Invalid rule\r
- if (rule.indexOf(' ') != -1 || rule.indexOf(':') != -1 || rule.indexOf('mceItem') != -1)\r
- continue;\r
-\r
- if (rule.indexOf(tinyMCE.settings.visual_table_class) != -1 || rule.indexOf('mceEditable') != -1 || rule.indexOf('mceNonEditable') != -1)\r
- continue;\r
-\r
- // Is class rule\r
- if (rule.indexOf('.') != -1) {\r
- cssClass = rule.substring(rule.indexOf('.') + 1);\r
- addClass = true;\r
-\r
- for (p=0; p<inst.cssClasses.length && addClass; p++) {\r
- if (inst.cssClasses[p] == cssClass)\r
- addClass = false;\r
- }\r
-\r
- if (addClass)\r
- inst.cssClasses[inst.cssClasses.length] = cssClass;\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- return inst.cssClasses;\r
- },\r
-\r
- regexpReplace : function(in_str, reg_exp, replace_str, opts) {\r
- var re;\r
-\r
- if (in_str == null)\r
- return in_str;\r
-\r
- if (typeof(opts) == "undefined")\r
- opts = 'g';\r
-\r
- re = new RegExp(reg_exp, opts);\r
-\r
- return in_str.replace(re, replace_str);\r
- },\r
-\r
- trim : function(s) {\r
- return s.replace(/^\s*|\s*$/g, "");\r
- },\r
-\r
- cleanupEventStr : function(s) {\r
- s = "" + s;\r
- s = s.replace('function anonymous()\n{\n', '');\r
- s = s.replace('\n}', '');\r
- s = s.replace(/^return true;/gi, ''); // Remove event blocker\r
-\r
- return s;\r
- },\r
-\r
- getControlHTML : function(c) {\r
- var i, l, n, o, v, rtl = tinyMCE.getLang('lang_dir') == 'rtl';\r
-\r
- l = tinyMCE.plugins;\r
- for (n in l) {\r
- o = l[n];\r
-\r
- if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') {\r
- if (rtl)\r
- return '<span dir="rtl">' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + '</span>';\r
-\r
- return tinyMCE.replaceVar(v, "pluginurl", o.baseURL);\r
- }\r
- }\r
-\r
- o = tinyMCE.themes[tinyMCE.settings.theme];\r
- if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') {\r
- if (rtl)\r
- return '<span dir="rtl">' + v + '</span>';\r
-\r
- return v;\r
- }\r
-\r
- return '';\r
- },\r
-\r
- evalFunc : function(f, idx, a, o) {\r
- o = !o ? window : o;\r
- f = typeof(f) == 'function' ? f : o[f];\r
-\r
- return f.apply(o, Array.prototype.slice.call(a, idx));\r
- },\r
-\r
- dispatchCallback : function(i, p, n) {\r
- return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments);\r
- },\r
-\r
- executeCallback : function(i, p, n) {\r
- return this.callFunc(i, p, n, 1, this.executeCallback.arguments);\r
- },\r
-\r
- execCommandCallback : function(i, p, n) {\r
- return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments);\r
- },\r
-\r
- callFunc : function(ins, p, n, m, a) {\r
- var l, i, on, o, s, v;\r
-\r
- s = m == 2;\r
-\r
- l = tinyMCE.getParam(p, '');\r
-\r
- if (l !== '' && (v = tinyMCE.evalFunc(l, 3, a)) == s && m > 0)\r
- return true;\r
-\r
- if (ins != null) {\r
- for (i=0, l = ins.plugins; i<l.length; i++) {\r
- o = tinyMCE.plugins[l[i]];\r
-\r
- if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0)\r
- return true;\r
- }\r
- }\r
-\r
- l = tinyMCE.themes;\r
- for (on in l) {\r
- o = l[on];\r
-\r
- if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0)\r
- return true;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- resolveDots : function(s, o) {\r
- var i;\r
-\r
- if (typeof(s) == 'string') {\r
- for (i=0, s=s.split('.'); i<s.length; i++)\r
- o = o[s[i]];\r
- } else\r
- o = s;\r
-\r
- return o;\r
- },\r
-\r
- xmlEncode : function(s) {\r
- return s ? ('' + s).replace(this.xmlEncodeRe, function (c, b) {\r
- switch (c) {\r
- case '&':\r
- return '&';\r
-\r
- case '"':\r
- return '"';\r
-\r
- case '<':\r
- return '<';\r
-\r
- case '>':\r
- return '>';\r
- }\r
-\r
- return c;\r
- }) : s;\r
- },\r
-\r
- add : function(c, m) {\r
- var n;\r
-\r
- for (n in m)\r
- c.prototype[n] = m[n];\r
- },\r
-\r
- extend : function(p, np) {\r
- var o = {}, n;\r
-\r
- o.parent = p;\r
-\r
- for (n in p)\r
- o[n] = p[n];\r
-\r
- for (n in np)\r
- o[n] = np[n];\r
-\r
- return o;\r
- },\r
-\r
- hideMenus : function() {\r
- var e = tinyMCE.lastSelectedMenuBtn;\r
-\r
- if (tinyMCE.lastMenu) {\r
- tinyMCE.lastMenu.hide();\r
- tinyMCE.lastMenu = null;\r
- }\r
-\r
- if (e) {\r
- tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass);\r
- tinyMCE.lastSelectedMenuBtn = null;\r
- }\r
- }\r
-\r
- };\r
-\r
-// Global instances\r
-var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors\r
-var tinyMCE = new TinyMCE_Engine();\r
-var tinyMCELang = {};\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Control.class.js */\r
-\r
-function TinyMCE_Control(settings) {\r
- var t, i, tos, fu, p, x, fn, fu, pn, s = settings;\r
-\r
- this.undoRedoLevel = true;\r
- this.isTinyMCE_Control = true;\r
-\r
- // Default settings\r
- this.enabled = true;\r
- this.settings = s;\r
- this.settings.theme = tinyMCE.getParam("theme", "default");\r
- this.settings.width = tinyMCE.getParam("width", -1);\r
- this.settings.height = tinyMCE.getParam("height", -1);\r
- this.selection = new TinyMCE_Selection(this);\r
- this.undoRedo = new TinyMCE_UndoRedo(this);\r
- this.cleanup = new TinyMCE_Cleanup();\r
- this.shortcuts = [];\r
- this.hasMouseMoved = false;\r
- this.foreColor = this.backColor = "#999999";\r
- this.data = {};\r
- this.cssClasses = [];\r
-\r
- this.cleanup.init({\r
- valid_elements : s.valid_elements,\r
- extended_valid_elements : s.extended_valid_elements,\r
- valid_child_elements : s.valid_child_elements,\r
- entities : s.entities,\r
- entity_encoding : s.entity_encoding,\r
- debug : s.cleanup_debug,\r
- indent : s.apply_source_formatting,\r
- invalid_elements : s.invalid_elements,\r
- verify_html : s.verify_html,\r
- fix_content_duplication : s.fix_content_duplication,\r
- convert_fonts_to_spans : s.convert_fonts_to_spans\r
- });\r
-\r
- // Wrap old theme\r
- t = this.settings.theme;\r
- if (!tinyMCE.hasTheme(t)) {\r
- fn = tinyMCE.callbacks;\r
- tos = {};\r
-\r
- for (i=0; i<fn.length; i++) {\r
- if ((fu = window['TinyMCE_' + t + "_" + fn[i]]))\r
- tos[fn[i]] = fu;\r
- }\r
-\r
- tinyMCE.addTheme(t, tos);\r
- }\r
-\r
- // Wrap old plugins\r
- this.plugins = [];\r
- p = tinyMCE.getParam('plugins', '', true, ',');\r
- if (p.length > 0) {\r
- for (i=0; i<p.length; i++) {\r
- pn = p[i];\r
-\r
- if (pn.charAt(0) == '-')\r
- pn = pn.substring(1);\r
-\r
- if (!tinyMCE.hasPlugin(pn)) {\r
- fn = tinyMCE.callbacks;\r
- tos = {};\r
-\r
- for (x=0; x<fn.length; x++) {\r
- if ((fu = window['TinyMCE_' + pn + "_" + fn[x]]))\r
- tos[fn[x]] = fu;\r
- }\r
-\r
- tinyMCE.addPlugin(pn, tos);\r
- }\r
-\r
- this.plugins[this.plugins.length] = pn; \r
- }\r
- }\r
-};\r
-\r
-TinyMCE_Control.prototype = {\r
- selection : null,\r
-\r
- settings : null,\r
-\r
- cleanup : null,\r
-\r
- getData : function(na) {\r
- var o = this.data[na];\r
-\r
- if (!o)\r
- o = this.data[na] = {};\r
-\r
- return o;\r
- },\r
-\r
- hasPlugin : function(n) {\r
- var i;\r
-\r
- for (i=0; i<this.plugins.length; i++) {\r
- if (this.plugins[i] == n)\r
- return true;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- addPlugin : function(n, p) {\r
- if (!this.hasPlugin(n)) {\r
- tinyMCE.addPlugin(n, p);\r
- this.plugins[this.plugins.length] = n;\r
- }\r
- },\r
-\r
- repaint : function() {\r
- var s, b, ex;\r
-\r
- if (tinyMCE.isRealIE)\r
- return;\r
-\r
- try {\r
- s = this.selection;\r
- b = s.getBookmark(true);\r
- this.getBody().style.display = 'none';\r
- this.getDoc().execCommand('selectall', false, null);\r
- this.getSel().collapseToStart();\r
- this.getBody().style.display = 'block';\r
- s.moveToBookmark(b);\r
- } catch (ex) {\r
- // Ignore\r
- }\r
- },\r
-\r
- switchSettings : function() {\r
- if (tinyMCE.configs.length > 1 && tinyMCE.currentConfig != this.settings.index) {\r
- tinyMCE.settings = this.settings;\r
- tinyMCE.currentConfig = this.settings.index;\r
- }\r
- },\r
-\r
- select : function() {\r
- var oldInst = tinyMCE.selectedInstance;\r
-\r
- if (oldInst != this) {\r
- if (oldInst)\r
- oldInst.execCommand('mceEndTyping');\r
-\r
- tinyMCE.dispatchCallback(this, 'select_instance_callback', 'selectInstance', this, oldInst);\r
- tinyMCE.selectedInstance = this;\r
- }\r
- },\r
-\r
- getBody : function() {\r
- return this.contentBody ? this.contentBody : this.getDoc().body;\r
- },\r
-\r
- getDoc : function() {\r
-// return this.contentDocument ? this.contentDocument : this.contentWindow.document; // Removed due to IE 5.5 ?\r
- return this.contentWindow.document;\r
- },\r
-\r
- getWin : function() {\r
- return this.contentWindow;\r
- },\r
-\r
- getContainerWin : function() {\r
- return this.containerWindow ? this.containerWindow : window;\r
- },\r
-\r
- getViewPort : function() {\r
- return tinyMCE.getViewPort(this.getWin());\r
- },\r
-\r
- getParentNode : function(n, f) {\r
- return tinyMCE.getParentNode(n, f, this.getBody());\r
- },\r
-\r
- getParentElement : function(n, na, f) {\r
- return tinyMCE.getParentElement(n, na, f, this.getBody());\r
- },\r
-\r
- getParentBlockElement : function(n) {\r
- return tinyMCE.getParentBlockElement(n, this.getBody());\r
- },\r
-\r
- resizeToContent : function() {\r
- var d = this.getDoc(), b = d.body, de = d.documentElement;\r
-\r
- this.iframeElement.style.height = (tinyMCE.isRealIE) ? b.scrollHeight : de.offsetHeight + 'px';\r
- },\r
-\r
- addShortcut : function(m, k, d, cmd, ui, va) {\r
- var n = typeof(k) == "number", ie = tinyMCE.isIE, c, sc, i, scl = this.shortcuts;\r
-\r
- if (!tinyMCE.getParam('custom_shortcuts'))\r
- return false;\r
-\r
- m = m.toLowerCase();\r
- k = ie && !n ? k.toUpperCase() : k;\r
- c = n ? null : k.charCodeAt(0);\r
- d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d;\r
-\r
- sc = {\r
- alt : m.indexOf('alt') != -1,\r
- ctrl : m.indexOf('ctrl') != -1,\r
- shift : m.indexOf('shift') != -1,\r
- charCode : c,\r
- keyCode : n ? k : (ie ? c : null),\r
- desc : d,\r
- cmd : cmd,\r
- ui : ui,\r
- val : va\r
- };\r
-\r
- for (i=0; i<scl.length; i++) {\r
- if (sc.alt == scl[i].alt && sc.ctrl == scl[i].ctrl && sc.shift == scl[i].shift\r
- && sc.charCode == scl[i].charCode && sc.keyCode == scl[i].keyCode) {\r
- return false;\r
- }\r
- }\r
-\r
- scl[scl.length] = sc;\r
-\r
- return true;\r
- },\r
-\r
- handleShortcut : function(e) {\r
- var i, s, o;\r
-\r
- // Normal key press, then ignore it\r
- if (!e.altKey && !e.ctrlKey)\r
- return false;\r
-\r
- s = this.shortcuts;\r
-\r
- for (i=0; i<s.length; i++) {\r
- o = s[i];\r
-\r
- if (o.alt == e.altKey && o.ctrl == e.ctrlKey && (o.keyCode == e.keyCode || o.charCode == e.charCode)) {\r
- if (o.cmd && (e.type == "keydown" || (e.type == "keypress" && !tinyMCE.isOpera)))\r
- tinyMCE.execCommand(o.cmd, o.ui, o.val);\r
-\r
- tinyMCE.cancelEvent(e);\r
- return true;\r
- }\r
- }\r
-\r
- return false;\r
- },\r
-\r
- autoResetDesignMode : function() {\r
- // Add fix for tab/style.display none/block problems in Gecko\r
- if (!tinyMCE.isIE && this.isHidden() && tinyMCE.getParam('auto_reset_designmode'))\r
- eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}');\r
- },\r
-\r
- isHidden : function() {\r
- var s;\r
-\r
- if (tinyMCE.isIE)\r
- return false;\r
-\r
- s = this.getSel();\r
-\r
- // Weird, wheres that cursor selection?\r
- return (!s || !s.rangeCount || s.rangeCount == 0);\r
- },\r
-\r
- isDirty : function() {\r
- // Is content modified and not in a submit procedure\r
- return tinyMCE.trim(this.startContent) != tinyMCE.trim(this.getBody().innerHTML) && !this.isNotDirty;\r
- },\r
-\r
- _mergeElements : function(scmd, pa, ch, override) {\r
- var st, stc, className, n;\r
-\r
- if (scmd == "removeformat") {\r
- pa.className = "";\r
- pa.style.cssText = "";\r
- ch.className = "";\r
- ch.style.cssText = "";\r
- return;\r
- }\r
-\r
- st = tinyMCE.parseStyle(tinyMCE.getAttrib(pa, "style"));\r
- stc = tinyMCE.parseStyle(tinyMCE.getAttrib(ch, "style"));\r
- className = tinyMCE.getAttrib(pa, "class");\r
-\r
- // Removed class adding due to bug #1478272\r
- className = tinyMCE.getAttrib(ch, "class");\r
-\r
- if (override) {\r
- for (n in st) {\r
- if (typeof(st[n]) == 'function')\r
- continue;\r
-\r
- stc[n] = st[n];\r
- }\r
- } else {\r
- for (n in stc) {\r
- if (typeof(stc[n]) == 'function')\r
- continue;\r
-\r
- st[n] = stc[n];\r
- }\r
- }\r
-\r
- tinyMCE.setAttrib(pa, "style", tinyMCE.serializeStyle(st));\r
- tinyMCE.setAttrib(pa, "class", tinyMCE.trim(className));\r
- ch.className = "";\r
- ch.style.cssText = "";\r
- ch.removeAttribute("class");\r
- ch.removeAttribute("style");\r
- },\r
-\r
- _fixRootBlocks : function() {\r
- var rb, b, ne, be, nx, bm;\r
-\r
- rb = tinyMCE.getParam('forced_root_block');\r
- if (!rb)\r
- return;\r
-\r
- b = this.getBody();\r
- ne = b.firstChild;\r
-\r
- while (ne) {\r
- nx = ne.nextSibling;\r
-\r
- // If text node or inline element wrap it in a block element\r
- if (ne.nodeType == 3 || !tinyMCE.blockRegExp.test(ne.nodeName)) {\r
- if (!bm)\r
- bm = this.selection.getBookmark();\r
-\r
- if (!be) {\r
- be = this.getDoc().createElement(rb);\r
- be.appendChild(ne.cloneNode(true));\r
- b.replaceChild(be, ne);\r
- } else {\r
- be.appendChild(ne.cloneNode(true));\r
- b.removeChild(ne);\r
- }\r
- } else\r
- be = null;\r
-\r
- ne = nx;\r
- }\r
-\r
- if (bm)\r
- this.selection.moveToBookmark(bm);\r
- },\r
-\r
- _fixTrailingNbsp : function() {\r
- var s = this.selection, e = s.getFocusElement(), bm, v;\r
-\r
- if (e && tinyMCE.blockRegExp.test(e.nodeName) && e.firstChild) {\r
- v = e.firstChild.nodeValue;\r
-\r
- if (v && v.length > 1 && /(^\u00a0|\u00a0$)/.test(v)) {\r
- e.firstChild.nodeValue = v.replace(/(^\u00a0|\u00a0$)/, '');\r
- s.selectNode(e.firstChild, true, false, false); // Select and collapse\r
- }\r
- }\r
- },\r
-\r
- _setUseCSS : function(b) {\r
- var d = this.getDoc();\r
-\r
- try {d.execCommand("useCSS", false, !b);} catch (ex) {}\r
- try {d.execCommand("styleWithCSS", false, b);} catch (ex) {}\r
-\r
- if (!tinyMCE.getParam("table_inline_editing"))\r
- try {d.execCommand('enableInlineTableEditing', false, "false");} catch (ex) {}\r
-\r
- if (!tinyMCE.getParam("object_resizing"))\r
- try {d.execCommand('enableObjectResizing', false, "false");} catch (ex) {}\r
- },\r
-\r
- execCommand : function(command, user_interface, value) {\r
- var i, x, z, align, img, div, doc = this.getDoc(), win = this.getWin(), focusElm = this.getFocusElement();\r
-\r
- // Is not a undo specific command\r
- if (!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel', 'gi').test(command))\r
- this.undoBookmark = null;\r
-\r
- // Mozilla issue\r
- if (!tinyMCE.isIE && !this.useCSS) {\r
- this._setUseCSS(false);\r
- this.useCSS = true;\r
- }\r
-\r
- //debug("command: " + command + ", user_interface: " + user_interface + ", value: " + value);\r
- this.contentDocument = doc; // <-- Strange, unless this is applied Mozilla 1.3 breaks\r
-\r
- // Don't dispatch key commands\r
- if (!/mceStartTyping|mceEndTyping/.test(command)) {\r
- if (tinyMCE.execCommandCallback(this, 'execcommand_callback', 'execCommand', this.editorId, this.getBody(), command, user_interface, value))\r
- return;\r
- }\r
-\r
- // Fix align on images\r
- if (focusElm && focusElm.nodeName == "IMG") {\r
- align = focusElm.getAttribute('align');\r
- img = command == "JustifyCenter" ? focusElm.cloneNode(false) : focusElm;\r
-\r
- switch (command) {\r
- case "JustifyLeft":\r
- if (align == 'left')\r
- img.removeAttribute('align');\r
- else\r
- img.setAttribute('align', 'left');\r
-\r
- // Remove the div\r
- div = focusElm.parentNode;\r
- if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)\r
- div.parentNode.replaceChild(img, div);\r
-\r
- this.selection.selectNode(img);\r
- this.repaint();\r
- tinyMCE.triggerNodeChange();\r
- return;\r
-\r
- case "JustifyCenter":\r
- img.removeAttribute('align');\r
-\r
- // Is centered\r
- div = tinyMCE.getParentElement(focusElm, "div");\r
- if (div && div.style.textAlign == "center") {\r
- // Remove div\r
- if (div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)\r
- div.parentNode.replaceChild(img, div);\r
- } else {\r
- // Add div\r
- div = this.getDoc().createElement("div");\r
- div.style.textAlign = 'center';\r
- div.appendChild(img);\r
- focusElm.parentNode.replaceChild(div, focusElm);\r
- }\r
-\r
- this.selection.selectNode(img);\r
- this.repaint();\r
- tinyMCE.triggerNodeChange();\r
- return;\r
-\r
- case "JustifyRight":\r
- if (align == 'right')\r
- img.removeAttribute('align');\r
- else\r
- img.setAttribute('align', 'right');\r
-\r
- // Remove the div\r
- div = focusElm.parentNode;\r
- if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)\r
- div.parentNode.replaceChild(img, div);\r
-\r
- this.selection.selectNode(img);\r
- this.repaint();\r
- tinyMCE.triggerNodeChange();\r
- return;\r
- }\r
- }\r
-\r
- if (tinyMCE.settings.force_br_newlines) {\r
- var alignValue = "";\r
-\r
- if (doc.selection.type != "Control") {\r
- switch (command) {\r
- case "JustifyLeft":\r
- alignValue = "left";\r
- break;\r
-\r
- case "JustifyCenter":\r
- alignValue = "center";\r
- break;\r
-\r
- case "JustifyFull":\r
- alignValue = "justify";\r
- break;\r
-\r
- case "JustifyRight":\r
- alignValue = "right";\r
- break;\r
- }\r
-\r
- if (alignValue !== '') {\r
- var rng = doc.selection.createRange();\r
-\r
- if ((divElm = tinyMCE.getParentElement(rng.parentElement(), "div")) != null)\r
- divElm.setAttribute("align", alignValue);\r
- else if (rng.pasteHTML && rng.htmlText.length > 0)\r
- rng.pasteHTML('<div align="' + alignValue + '">' + rng.htmlText + "</div>");\r
-\r
- tinyMCE.triggerNodeChange();\r
- return;\r
- }\r
- }\r
- }\r
-\r
- switch (command) {\r
- case "mceRepaint":\r
- this.repaint();\r
- return true;\r
-\r
- case "unlink":\r
- // Unlink if caret is inside link\r
- if (tinyMCE.isGecko && this.getSel().isCollapsed) {\r
- focusElm = tinyMCE.getParentElement(focusElm, 'A');\r
-\r
- if (focusElm)\r
- this.selection.selectNode(focusElm, false);\r
- }\r
-\r
- this.getDoc().execCommand(command, user_interface, value);\r
-\r
- tinyMCE.isGecko && this.getSel().collapseToEnd();\r
-\r
- tinyMCE.triggerNodeChange();\r
-\r
- return true;\r
-\r
- case "InsertUnorderedList":\r
- case "InsertOrderedList":\r
- this.getDoc().execCommand(command, user_interface, value);\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- case "Strikethrough":\r
- this.getDoc().execCommand(command, user_interface, value);\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- case "mceSelectNode":\r
- this.selection.selectNode(value);\r
- tinyMCE.triggerNodeChange();\r
- tinyMCE.selectedNode = value;\r
- break;\r
-\r
- case "FormatBlock":\r
- if (value == null || value == '') {\r
- var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");\r
-\r
- if (elm)\r
- this.execCommand("mceRemoveNode", false, elm);\r
- } else {\r
- if (!this.cleanup.isValid(value))\r
- return true;\r
-\r
- if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value))\r
- value = value.replace(/[^a-z]/gi, '');\r
-\r
- if (tinyMCE.isIE && new RegExp('blockquote|code|samp', 'gi').test(value)) {\r
- var b = this.selection.getBookmark();\r
- this.getDoc().execCommand("FormatBlock", false, '<p>');\r
- tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value);\r
- this.selection.moveToBookmark(b);\r
- } else\r
- this.getDoc().execCommand("FormatBlock", false, value);\r
- }\r
-\r
- tinyMCE.triggerNodeChange();\r
-\r
- break;\r
-\r
- case "mceRemoveNode":\r
- if (!value)\r
- value = tinyMCE.getParentElement(this.getFocusElement());\r
-\r
- if (tinyMCE.isIE) {\r
- value.outerHTML = value.innerHTML;\r
- } else {\r
- var rng = value.ownerDocument.createRange();\r
- rng.setStartBefore(value);\r
- rng.setEndAfter(value);\r
- rng.deleteContents();\r
- rng.insertNode(rng.createContextualFragment(value.innerHTML));\r
- }\r
-\r
- tinyMCE.triggerNodeChange();\r
-\r
- break;\r
-\r
- case "mceSelectNodeDepth":\r
- var parentNode = this.getFocusElement();\r
- for (i=0; parentNode; i++) {\r
- if (parentNode.nodeName.toLowerCase() == "body")\r
- break;\r
-\r
- if (parentNode.nodeName.toLowerCase() == "#text") {\r
- i--;\r
- parentNode = parentNode.parentNode;\r
- continue;\r
- }\r
-\r
- if (i == value) {\r
- this.selection.selectNode(parentNode, false);\r
- tinyMCE.triggerNodeChange();\r
- tinyMCE.selectedNode = parentNode;\r
- return;\r
- }\r
-\r
- parentNode = parentNode.parentNode;\r
- }\r
-\r
- break;\r
-\r
- case "mceSetStyleInfo":\r
- case "SetStyleInfo":\r
- var rng = this.getRng();\r
- var sel = this.getSel();\r
- var scmd = value.command;\r
- var sname = value.name;\r
- var svalue = value.value == null ? '' : value.value;\r
- //var svalue = value['value'] == null ? '' : value['value'];\r
- var wrapper = value.wrapper ? value.wrapper : "span";\r
- var parentElm = null;\r
- var invalidRe = new RegExp("^BODY|HTML$", "g");\r
- var invalidParentsRe = tinyMCE.settings.merge_styles_invalid_parents !== '' ? new RegExp(tinyMCE.settings.merge_styles_invalid_parents, "gi") : null;\r
-\r
- // Whole element selected check\r
- if (tinyMCE.isIE) {\r
- // Control range\r
- if (rng.item)\r
- parentElm = rng.item(0);\r
- else {\r
- var pelm = rng.parentElement();\r
- var prng = doc.selection.createRange();\r
- prng.moveToElementText(pelm);\r
-\r
- if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) {\r
- if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName))\r
- parentElm = pelm;\r
- }\r
- }\r
- } else {\r
- var felm = this.getFocusElement();\r
- if (sel.isCollapsed || (new RegExp('td|tr|tbody|table|img', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode))\r
- parentElm = felm;\r
- }\r
-\r
- // Whole element selected\r
- if (parentElm && !invalidRe.test(parentElm.nodeName)) {\r
- if (scmd == "setstyle")\r
- tinyMCE.setStyleAttrib(parentElm, sname, svalue);\r
-\r
- if (scmd == "setattrib")\r
- tinyMCE.setAttrib(parentElm, sname, svalue);\r
-\r
- if (scmd == "removeformat") {\r
- parentElm.style.cssText = '';\r
- tinyMCE.setAttrib(parentElm, 'class', '');\r
- }\r
-\r
- // Remove style/attribs from all children\r
- var ch = tinyMCE.getNodeTree(parentElm, [], 1);\r
- for (z=0; z<ch.length; z++) {\r
- if (ch[z] == parentElm)\r
- continue;\r
-\r
- if (scmd == "setstyle")\r
- tinyMCE.setStyleAttrib(ch[z], sname, '');\r
-\r
- if (scmd == "setattrib")\r
- tinyMCE.setAttrib(ch[z], sname, '');\r
-\r
- if (scmd == "removeformat") {\r
- ch[z].style.cssText = '';\r
- tinyMCE.setAttrib(ch[z], 'class', '');\r
- }\r
- }\r
- } else {\r
- this._setUseCSS(false); // Bug in FF when running in fullscreen\r
- doc.execCommand("FontName", false, "#mce_temp_font#");\r
- var elementArray = tinyMCE.getElementsByAttributeValue(this.getBody(), "font", "face", "#mce_temp_font#");\r
-\r
- // Change them all\r
- for (x=0; x<elementArray.length; x++) {\r
- elm = elementArray[x];\r
- if (elm) {\r
- var spanElm = doc.createElement(wrapper);\r
-\r
- if (scmd == "setstyle")\r
- tinyMCE.setStyleAttrib(spanElm, sname, svalue);\r
-\r
- if (scmd == "setattrib")\r
- tinyMCE.setAttrib(spanElm, sname, svalue);\r
-\r
- if (scmd == "removeformat") {\r
- spanElm.style.cssText = '';\r
- tinyMCE.setAttrib(spanElm, 'class', '');\r
- }\r
-\r
- if (elm.hasChildNodes()) {\r
- for (i=0; i<elm.childNodes.length; i++)\r
- spanElm.appendChild(elm.childNodes[i].cloneNode(true));\r
- }\r
-\r
- spanElm.setAttribute("mce_new", "true");\r
- elm.parentNode.replaceChild(spanElm, elm);\r
-\r
- // Remove style/attribs from all children\r
- var ch = tinyMCE.getNodeTree(spanElm, [], 1);\r
- for (z=0; z<ch.length; z++) {\r
- if (ch[z] == spanElm)\r
- continue;\r
-\r
- if (scmd == "setstyle")\r
- tinyMCE.setStyleAttrib(ch[z], sname, '');\r
-\r
- if (scmd == "setattrib")\r
- tinyMCE.setAttrib(ch[z], sname, '');\r
-\r
- if (scmd == "removeformat") {\r
- ch[z].style.cssText = '';\r
- tinyMCE.setAttrib(ch[z], 'class', '');\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- // Cleaup wrappers\r
- var nodes = doc.getElementsByTagName(wrapper);\r
- for (i=nodes.length-1; i>=0; i--) {\r
- var elm = nodes[i];\r
- var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true";\r
-\r
- elm.removeAttribute("mce_new");\r
-\r
- // Is only child a element\r
- if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) {\r
- //tinyMCE.debug("merge1" + isNew);\r
- this._mergeElements(scmd, elm, elm.childNodes[0], isNew);\r
- continue;\r
- }\r
-\r
- // Is I the only child\r
- if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) {\r
- //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName);\r
- if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName))\r
- this._mergeElements(scmd, elm.parentNode, elm, false);\r
- }\r
- }\r
-\r
- // Remove empty wrappers\r
- var nodes = doc.getElementsByTagName(wrapper);\r
- for (i=nodes.length-1; i>=0; i--) {\r
- var elm = nodes[i], isEmpty = true;\r
-\r
- // Check if it has any attribs\r
- var tmp = doc.createElement("body");\r
- tmp.appendChild(elm.cloneNode(false));\r
-\r
- // Is empty span, remove it\r
- tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), '');\r
- //tinyMCE.debug(tmp.innerHTML);\r
- if (new RegExp('<span>', 'gi').test(tmp.innerHTML)) {\r
- for (x=0; x<elm.childNodes.length; x++) {\r
- if (elm.parentNode != null)\r
- elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true), elm);\r
- }\r
-\r
- elm.parentNode.removeChild(elm);\r
- }\r
- }\r
-\r
- // Re add the visual aids\r
- if (scmd == "removeformat")\r
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);\r
-\r
- tinyMCE.triggerNodeChange();\r
-\r
- break;\r
-\r
- case "FontName":\r
- if (value == null) {\r
- var s = this.getSel();\r
-\r
- // Find font and select it\r
- if (tinyMCE.isGecko && s.isCollapsed) {\r
- var f = tinyMCE.getParentElement(this.getFocusElement(), "font");\r
-\r
- if (f != null)\r
- this.selection.selectNode(f, false);\r
- }\r
-\r
- // Remove format\r
- this.getDoc().execCommand("RemoveFormat", false, null);\r
-\r
- // Collapse range if font was found\r
- if (f != null && tinyMCE.isGecko) {\r
- var r = this.getRng().cloneRange();\r
- r.collapse(true);\r
- s.removeAllRanges();\r
- s.addRange(r);\r
- }\r
- } else\r
- this.getDoc().execCommand('FontName', false, value);\r
-\r
- if (tinyMCE.isGecko)\r
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);\r
-\r
- return;\r
-\r
- case "FontSize":\r
- this.getDoc().execCommand('FontSize', false, value);\r
-\r
- if (tinyMCE.isGecko)\r
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);\r
-\r
- return;\r
-\r
- case "forecolor":\r
- value = value == null ? this.foreColor : value;\r
- value = tinyMCE.trim(value);\r
- value = value.charAt(0) != '#' ? (isNaN('0x' + value) ? value : '#' + value) : value;\r
-\r
- this.foreColor = value;\r
- this.getDoc().execCommand('forecolor', false, value);\r
- break;\r
-\r
- case "HiliteColor":\r
- value = value == null ? this.backColor : value;\r
- value = tinyMCE.trim(value);\r
- value = value.charAt(0) != '#' ? (isNaN('0x' + value) ? value : '#' + value) : value;\r
- this.backColor = value;\r
-\r
- if (tinyMCE.isGecko) {\r
- this._setUseCSS(true);\r
- this.getDoc().execCommand('hilitecolor', false, value);\r
- this._setUseCSS(false);\r
- } else\r
- this.getDoc().execCommand('BackColor', false, value);\r
- break;\r
-\r
- case "Cut":\r
- case "Copy":\r
- case "Paste":\r
- var cmdFailed = false;\r
-\r
- // Try executing command\r
- eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');\r
-\r
- if (tinyMCE.isOpera && cmdFailed)\r
- alert('Currently not supported by your browser, use keyboard shortcuts instead.');\r
-\r
- // Alert error in gecko if command failed\r
- if (tinyMCE.isGecko && cmdFailed) {\r
- // Confirm more info\r
- if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))\r
- window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal');\r
-\r
- return;\r
- } else\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- case "mceSetContent":\r
- if (!value)\r
- value = "";\r
-\r
- // Call custom cleanup code\r
- value = tinyMCE.storeAwayURLs(value);\r
- value = tinyMCE._customCleanup(this, "insert_to_editor", value);\r
-\r
- if (this.getBody().nodeName == 'BODY')\r
- tinyMCE._setHTML(doc, value);\r
- else\r
- this.getBody().innerHTML = value;\r
-\r
- tinyMCE.setInnerHTML(this.getBody(), tinyMCE._cleanupHTML(this, doc, this.settings, this.getBody(), false, false, false, true));\r
- tinyMCE.convertAllRelativeURLs(this.getBody());\r
-\r
- // Cleanup any mess left from storyAwayURLs\r
- tinyMCE._removeInternal(this.getBody());\r
-\r
- // When editing always use fonts internaly\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- tinyMCE.convertSpansToFonts(doc);\r
-\r
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);\r
- tinyMCE._setEventsEnabled(this.getBody(), false);\r
- this._addBogusBR();\r
-\r
- return true;\r
-\r
- case "mceCleanup":\r
- var b = this.selection.getBookmark();\r
- tinyMCE._setHTML(this.contentDocument, this.getBody().innerHTML);\r
- tinyMCE.setInnerHTML(this.getBody(), tinyMCE._cleanupHTML(this, this.contentDocument, this.settings, this.getBody(), this.visualAid));\r
- tinyMCE.convertAllRelativeURLs(doc.body);\r
-\r
- // When editing always use fonts internaly\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- tinyMCE.convertSpansToFonts(doc);\r
-\r
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);\r
- tinyMCE._setEventsEnabled(this.getBody(), false);\r
- this._addBogusBR();\r
- this.repaint();\r
- this.selection.moveToBookmark(b);\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- case "mceReplaceContent":\r
- // Force empty string\r
- if (!value)\r
- value = '';\r
-\r
- this.getWin().focus();\r
-\r
- var selectedText = "";\r
-\r
- if (tinyMCE.isIE) {\r
- var rng = doc.selection.createRange();\r
- selectedText = rng.text;\r
- } else\r
- selectedText = this.getSel().toString();\r
-\r
- if (selectedText.length > 0) {\r
- value = tinyMCE.replaceVar(value, "selection", selectedText);\r
- tinyMCE.execCommand('mceInsertContent', false, value);\r
- }\r
-\r
- this._addBogusBR();\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- case "mceSetAttribute":\r
- if (typeof(value) == 'object') {\r
- var targetElms = (typeof(value.targets) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value.targets;\r
- var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms);\r
-\r
- if (targetNode) {\r
- targetNode.setAttribute(value.name, value.value);\r
- tinyMCE.triggerNodeChange();\r
- }\r
- }\r
- break;\r
-\r
- case "mceSetCSSClass":\r
- this.execCommand("mceSetStyleInfo", false, {command : "setattrib", name : "class", value : value});\r
- break;\r
-\r
- case "mceInsertRawHTML":\r
- var key = 'tiny_mce_marker';\r
-\r
- this.execCommand('mceBeginUndoLevel');\r
-\r
- // Insert marker key\r
- this.execCommand('mceInsertContent', false, key);\r
-\r
- // Store away scroll pos\r
- var scrollX = this.getBody().scrollLeft + this.getDoc().documentElement.scrollLeft;\r
- var scrollY = this.getBody().scrollTop + this.getDoc().documentElement.scrollTop;\r
-\r
- // Find marker and replace with RAW HTML\r
- var html = this.getBody().innerHTML;\r
- if ((pos = html.indexOf(key)) != -1)\r
- tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length));\r
-\r
- // Restore scoll pos\r
- this.contentWindow.scrollTo(scrollX, scrollY);\r
-\r
- this.execCommand('mceEndUndoLevel');\r
-\r
- break;\r
-\r
- case "mceInsertContent":\r
- // Force empty string\r
- if (!value)\r
- value = '';\r
-\r
- var insertHTMLFailed = false;\r
-\r
- // Removed since it produced problems in IE\r
- // this.getWin().focus();\r
-\r
- if (tinyMCE.isGecko || tinyMCE.isOpera) {\r
- try {\r
- // Is plain text or HTML, &, etc will be encoded wrong in FF\r
- if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) {\r
- var r = this.getRng();\r
- var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value));\r
- var s = this.getSel();\r
- var r2 = r.cloneRange();\r
-\r
- // Insert text at cursor position\r
- s.removeAllRanges();\r
- r.deleteContents();\r
- r.insertNode(n);\r
-\r
- // Move the cursor to the end of text\r
- r2.selectNode(n);\r
- r2.collapse(false);\r
- s.removeAllRanges();\r
- s.addRange(r2);\r
- } else {\r
- value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value);\r
- this.getDoc().execCommand('inserthtml', false, value);\r
- tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);\r
- }\r
- } catch (ex) {\r
- insertHTMLFailed = true;\r
- }\r
-\r
- if (!insertHTMLFailed) {\r
- tinyMCE.triggerNodeChange();\r
- return;\r
- }\r
- }\r
-\r
- if (!tinyMCE.isIE) {\r
- var isHTML = value.indexOf('<') != -1;\r
- var sel = this.getSel();\r
- var rng = this.getRng();\r
-\r
- if (isHTML) {\r
- if (tinyMCE.isSafari) {\r
- var tmpRng = this.getDoc().createRange();\r
-\r
- tmpRng.setStart(this.getBody(), 0);\r
- tmpRng.setEnd(this.getBody(), 0);\r
-\r
- value = tmpRng.createContextualFragment(value);\r
- } else\r
- value = rng.createContextualFragment(value);\r
- } else {\r
- // Setup text node\r
- value = doc.createTextNode(tinyMCE.entityDecode(value));\r
- }\r
-\r
- // Insert plain text in Safari\r
- if (tinyMCE.isSafari && !isHTML) {\r
- this.execCommand('InsertText', false, value.nodeValue);\r
- tinyMCE.triggerNodeChange();\r
- return true;\r
- } else if (tinyMCE.isSafari && isHTML) {\r
- rng.deleteContents();\r
- rng.insertNode(value);\r
- tinyMCE.triggerNodeChange();\r
- return true;\r
- }\r
-\r
- rng.deleteContents();\r
-\r
- // If target node is text do special treatment, (Mozilla 1.3 fix)\r
- if (rng.startContainer.nodeType == 3) {\r
- var node = rng.startContainer.splitText(rng.startOffset);\r
- node.parentNode.insertBefore(value, node); \r
- } else\r
- rng.insertNode(value);\r
-\r
- if (!isHTML) {\r
- // Removes weird selection trails\r
- sel.selectAllChildren(doc.body);\r
- sel.removeAllRanges();\r
-\r
- // Move cursor to end of content\r
- var rng = doc.createRange();\r
-\r
- rng.selectNode(value);\r
- rng.collapse(false);\r
-\r
- sel.addRange(rng);\r
- } else\r
- rng.collapse(false);\r
-\r
- tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);\r
- } else {\r
- var rng = doc.selection.createRange(), tmpRng = null;\r
- var c = value.indexOf('<!--') != -1;\r
-\r
- // Fix comment bug, add tag before comments\r
- if (c)\r
- value = tinyMCE.uniqueTag + value;\r
-\r
- // tmpRng = rng.duplicate(); // Store away range (Fixes Undo bookmark bug in IE)\r
-\r
- if (rng.item)\r
- rng.item(0).outerHTML = value;\r
- else\r
- rng.pasteHTML(value);\r
-\r
- //if (tmpRng)\r
- // tmpRng.select(); // Restore range (Fixes Undo bookmark bug in IE)\r
-\r
- // Remove unique tag\r
- if (c) {\r
- var e = this.getDoc().getElementById('mceTMPElement');\r
- e.parentNode.removeChild(e);\r
- }\r
- }\r
-\r
- tinyMCE.execCommand("mceAddUndoLevel");\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- case "mceStartTyping":\r
- if (tinyMCE.settings.custom_undo_redo && this.undoRedo.typingUndoIndex == -1) {\r
- this.undoRedo.typingUndoIndex = this.undoRedo.undoIndex;\r
- tinyMCE.typingUndoIndex = tinyMCE.undoIndex;\r
- this.execCommand('mceAddUndoLevel');\r
- }\r
- break;\r
-\r
- case "mceEndTyping":\r
- if (tinyMCE.settings.custom_undo_redo && this.undoRedo.typingUndoIndex != -1) {\r
- this.execCommand('mceAddUndoLevel');\r
- this.undoRedo.typingUndoIndex = -1;\r
- }\r
-\r
- tinyMCE.typingUndoIndex = -1;\r
- break;\r
-\r
- case "mceBeginUndoLevel":\r
- this.undoRedoLevel = false;\r
- break;\r
-\r
- case "mceEndUndoLevel":\r
- this.undoRedoLevel = true;\r
- this.execCommand('mceAddUndoLevel');\r
- break;\r
-\r
- case "mceAddUndoLevel":\r
- if (tinyMCE.settings.custom_undo_redo && this.undoRedoLevel) {\r
- if (this.undoRedo.add())\r
- tinyMCE.triggerNodeChange(false);\r
- }\r
- break;\r
-\r
- case "Undo":\r
- if (tinyMCE.settings.custom_undo_redo) {\r
- tinyMCE.execCommand("mceEndTyping");\r
- this.undoRedo.undo();\r
- tinyMCE.triggerNodeChange();\r
- } else\r
- this.getDoc().execCommand(command, user_interface, value);\r
- break;\r
-\r
- case "Redo":\r
- if (tinyMCE.settings.custom_undo_redo) {\r
- tinyMCE.execCommand("mceEndTyping");\r
- this.undoRedo.redo();\r
- tinyMCE.triggerNodeChange();\r
- } else\r
- this.getDoc().execCommand(command, user_interface, value);\r
- break;\r
-\r
- case "mceToggleVisualAid":\r
- this.visualAid = !this.visualAid;\r
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- case "Indent":\r
- this.getDoc().execCommand(command, user_interface, value);\r
- tinyMCE.triggerNodeChange();\r
-\r
- if (tinyMCE.isIE) {\r
- var n = tinyMCE.getParentElement(this.getFocusElement(), "blockquote");\r
- do {\r
- if (n && n.nodeName == "BLOCKQUOTE") {\r
- n.removeAttribute("dir");\r
- n.removeAttribute("style");\r
- }\r
- } while (n != null && (n = n.parentNode) != null);\r
- }\r
- break;\r
-\r
- case "RemoveFormat":\r
- case "removeformat":\r
- var text = this.selection.getSelectedText();\r
-\r
- if (tinyMCE.isOpera) {\r
- this.getDoc().execCommand("RemoveFormat", false, null);\r
- return;\r
- }\r
-\r
- if (tinyMCE.isIE) {\r
- try {\r
- var rng = doc.selection.createRange();\r
- rng.execCommand("RemoveFormat", false, null);\r
- } catch (e) {\r
- // Do nothing\r
- }\r
-\r
- this.execCommand("mceSetStyleInfo", false, {command : "removeformat"});\r
- } else {\r
- this.getDoc().execCommand(command, user_interface, value);\r
-\r
- this.execCommand("mceSetStyleInfo", false, {command : "removeformat"});\r
- }\r
-\r
- // Remove class\r
- if (text.length == 0)\r
- this.execCommand("mceSetCSSClass", false, "");\r
-\r
- tinyMCE.triggerNodeChange();\r
- break;\r
-\r
- default:\r
- this.getDoc().execCommand(command, user_interface, value);\r
-\r
- if (tinyMCE.isGecko)\r
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);\r
- else\r
- tinyMCE.triggerNodeChange();\r
- }\r
-\r
- // Add undo level after modification\r
- if (command != "mceAddUndoLevel" && command != "Undo" && command != "Redo" && command != "mceStartTyping" && command != "mceEndTyping")\r
- tinyMCE.execCommand("mceAddUndoLevel");\r
- },\r
-\r
- queryCommandValue : function(c) {\r
- try {\r
- return this.getDoc().queryCommandValue(c);\r
- } catch (e) {\r
- return null;\r
- }\r
- },\r
-\r
- queryCommandState : function(c) {\r
- return this.getDoc().queryCommandState(c);\r
- },\r
-\r
- _addBogusBR : function() {\r
- var b = this.getBody();\r
-\r
- if (tinyMCE.isGecko && !b.hasChildNodes())\r
- b.innerHTML = '<br _moz_editor_bogus_node="TRUE" />';\r
- },\r
-\r
- _onAdd : function(replace_element, form_element_name, target_document) {\r
- var hc, th, tos, editorTemplate, targetDoc, deltaWidth, deltaHeight, html, rng, fragment;\r
- var dynamicIFrame, tElm, doc, parentElm;\r
-\r
- th = this.settings.theme;\r
- tos = tinyMCE.themes[th];\r
-\r
- targetDoc = target_document ? target_document : document;\r
-\r
- this.targetDoc = targetDoc;\r
-\r
- tinyMCE.themeURL = tinyMCE.baseURL + "/themes/" + this.settings.theme;\r
- this.settings.themeurl = tinyMCE.themeURL;\r
-\r
- if (!replace_element) {\r
- alert("Error: Could not find the target element.");\r
- return false;\r
- }\r
-\r
- if (tos.getEditorTemplate)\r
- editorTemplate = tos.getEditorTemplate(this.settings, this.editorId);\r
-\r
- deltaWidth = editorTemplate.delta_width ? editorTemplate.delta_width : 0;\r
- deltaHeight = editorTemplate.delta_height ? editorTemplate.delta_height : 0;\r
- html = '<span id="' + this.editorId + '_parent" class="mceEditorContainer">' + editorTemplate.html;\r
-\r
- html = tinyMCE.replaceVar(html, "editor_id", this.editorId);\r
-\r
- if (!this.settings.default_document)\r
- this.settings.default_document = tinyMCE.baseURL + "/blank.htm";\r
-\r
- this.settings.old_width = this.settings.width;\r
- this.settings.old_height = this.settings.height;\r
-\r
- // Set default width, height\r
- if (this.settings.width == -1)\r
- this.settings.width = replace_element.offsetWidth;\r
-\r
- if (this.settings.height == -1)\r
- this.settings.height = replace_element.offsetHeight;\r
-\r
- // Try the style width\r
- if (this.settings.width == 0)\r
- this.settings.width = replace_element.style.width;\r
-\r
- // Try the style height\r
- if (this.settings.height == 0)\r
- this.settings.height = replace_element.style.height; \r
-\r
- // If no width/height then default to 320x240, better than nothing\r
- if (this.settings.width == 0)\r
- this.settings.width = 320;\r
-\r
- if (this.settings.height == 0)\r
- this.settings.height = 240;\r
-\r
- this.settings.area_width = parseInt(this.settings.width);\r
- this.settings.area_height = parseInt(this.settings.height);\r
- this.settings.area_width += deltaWidth;\r
- this.settings.area_height += deltaHeight;\r
- this.settings.width_style = "" + this.settings.width;\r
- this.settings.height_style = "" + this.settings.height;\r
-\r
- // Special % handling\r
- if (("" + this.settings.width).indexOf('%') != -1)\r
- this.settings.area_width = "100%";\r
- else\r
- this.settings.width_style += 'px';\r
-\r
- if (("" + this.settings.height).indexOf('%') != -1)\r
- this.settings.area_height = "100%";\r
- else\r
- this.settings.height_style += 'px';\r
-\r
- if (("" + replace_element.style.width).indexOf('%') != -1) {\r
- this.settings.width = replace_element.style.width;\r
- this.settings.area_width = "100%";\r
- this.settings.width_style = "100%";\r
- }\r
-\r
- if (("" + replace_element.style.height).indexOf('%') != -1) {\r
- this.settings.height = replace_element.style.height;\r
- this.settings.area_height = "100%";\r
- this.settings.height_style = "100%";\r
- }\r
-\r
- html = tinyMCE.applyTemplate(html);\r
-\r
- this.settings.width = this.settings.old_width;\r
- this.settings.height = this.settings.old_height;\r
-\r
- this.visualAid = this.settings.visual;\r
- this.formTargetElementId = form_element_name;\r
-\r
- // Get replace_element contents\r
- if (replace_element.nodeName == "TEXTAREA" || replace_element.nodeName == "INPUT")\r
- this.startContent = replace_element.value;\r
- else\r
- this.startContent = replace_element.innerHTML;\r
-\r
- // If not text area or input\r
- if (replace_element.nodeName != "TEXTAREA" && replace_element.nodeName != "INPUT") {\r
- this.oldTargetElement = replace_element;\r
-\r
- // Debug mode\r
- hc = '<input type="hidden" id="' + form_element_name + '" name="' + form_element_name + '" />';\r
- this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');\r
- this.oldTargetElement.style.display = "none";\r
-\r
- html += '</span>';\r
-\r
- if (tinyMCE.isGecko)\r
- html = hc + html;\r
- else\r
- html += hc;\r
-\r
- // Output HTML and set editable\r
- if (tinyMCE.isGecko) {\r
- rng = replace_element.ownerDocument.createRange();\r
- rng.setStartBefore(replace_element);\r
-\r
- fragment = rng.createContextualFragment(html);\r
- tinyMCE.insertAfter(fragment, replace_element);\r
- } else\r
- replace_element.insertAdjacentHTML("beforeBegin", html);\r
- } else {\r
- html += '</span>';\r
-\r
- // Just hide the textarea element\r
- this.oldTargetElement = replace_element;\r
-\r
- this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');\r
- this.oldTargetElement.style.display = "none";\r
-\r
- // Output HTML and set editable\r
- if (tinyMCE.isGecko) {\r
- rng = replace_element.ownerDocument.createRange();\r
- rng.setStartBefore(replace_element);\r
-\r
- fragment = rng.createContextualFragment(html);\r
- tinyMCE.insertAfter(fragment, replace_element);\r
- } else\r
- replace_element.insertAdjacentHTML("beforeBegin", html);\r
- }\r
-\r
- // Setup iframe\r
- dynamicIFrame = false;\r
- tElm = targetDoc.getElementById(this.editorId);\r
-\r
- if (!tinyMCE.isIE) {\r
- // Node case is preserved in XML strict mode\r
- if (tElm && (tElm.nodeName == "SPAN" || tElm.nodeName == "span")) {\r
- tElm = tinyMCE._createIFrame(tElm, targetDoc);\r
- dynamicIFrame = true;\r
- }\r
-\r
- this.targetElement = tElm;\r
- this.iframeElement = tElm;\r
- this.contentDocument = tElm.contentDocument;\r
- this.contentWindow = tElm.contentWindow;\r
-\r
- //this.getDoc().designMode = "on";\r
- } else {\r
- if (tElm && tElm.nodeName == "SPAN")\r
- tElm = tinyMCE._createIFrame(tElm, targetDoc, targetDoc.parentWindow);\r
- else\r
- tElm = targetDoc.frames[this.editorId];\r
-\r
- this.targetElement = tElm;\r
- this.iframeElement = targetDoc.getElementById(this.editorId);\r
-\r
- if (tinyMCE.isOpera) {\r
- this.contentDocument = this.iframeElement.contentDocument;\r
- this.contentWindow = this.iframeElement.contentWindow;\r
- dynamicIFrame = true;\r
- } else {\r
- this.contentDocument = tElm.window.document;\r
- this.contentWindow = tElm.window;\r
- }\r
-\r
- this.getDoc().designMode = "on";\r
- }\r
-\r
- // Setup base HTML\r
- doc = this.contentDocument;\r
- if (dynamicIFrame) {\r
- html = tinyMCE.getParam('doctype') + '<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="' + tinyMCE.settings.base_href + '" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';\r
-\r
- try {\r
- if (!this.isHidden())\r
- this.getDoc().designMode = "on";\r
-\r
- doc.open();\r
- doc.write(html);\r
- doc.close();\r
- } catch (e) {\r
- // Failed Mozilla 1.3\r
- this.getDoc().location.href = tinyMCE.baseURL + "/blank.htm";\r
- }\r
- }\r
-\r
- // This timeout is needed in MSIE 5.5 for some odd reason\r
- // it seems that the document.frames isn't initialized yet?\r
- if (tinyMCE.isIE)\r
- window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\"" + this.editorId + "\"]);", 1);\r
-\r
- // Setup element references\r
- parentElm = this.targetDoc.getElementById(this.editorId + '_parent');\r
- this.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;\r
-\r
- tinyMCE.setupContent(this.editorId, true);\r
-\r
- return true;\r
- },\r
-\r
- setBaseHREF : function(u) {\r
- var h, b, d, nl;\r
-\r
- d = this.getDoc();\r
- nl = d.getElementsByTagName("base");\r
- b = nl.length > 0 ? nl[0] : null;\r
-\r
- if (!b) {\r
- nl = d.getElementsByTagName("head");\r
- h = nl.length > 0 ? nl[0] : null;\r
-\r
- b = d.createElement("base");\r
- b.setAttribute('href', u);\r
- h.appendChild(b);\r
- } else {\r
- if (u == '' || u == null)\r
- b.parentNode.removeChild(b);\r
- else\r
- b.setAttribute('href', u);\r
- }\r
- },\r
-\r
- getHTML : function(r) {\r
- var h, d = this.getDoc(), b = this.getBody();\r
-\r
- if (r)\r
- return b.innerHTML;\r
-\r
- h = tinyMCE._cleanupHTML(this, d, this.settings, b, false, true, false, true);\r
-\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- tinyMCE.convertSpansToFonts(d);\r
-\r
- return h;\r
- },\r
-\r
- setHTML : function(h) {\r
- this.execCommand('mceSetContent', false, h);\r
- this.repaint();\r
- },\r
-\r
- getFocusElement : function() {\r
- return this.selection.getFocusElement();\r
- },\r
-\r
- getSel : function() {\r
- return this.selection.getSel();\r
- },\r
-\r
- getRng : function() {\r
- return this.selection.getRng();\r
- },\r
-\r
- triggerSave : function(skip_cleanup, skip_callback) {\r
- var e, nl = [], i, s, content, htm;\r
-\r
- if (!this.enabled)\r
- return;\r
-\r
- this.switchSettings();\r
- s = tinyMCE.settings;\r
-\r
- // Force hidden tabs visible while serializing\r
- if (tinyMCE.isRealIE) {\r
- e = this.iframeElement;\r
-\r
- do {\r
- if (e.style && e.style.display == 'none') {\r
- e.style.display = 'block';\r
- nl[nl.length] = {elm : e, type : 'style'};\r
- }\r
-\r
- if (e.style && s.hidden_tab_class.length > 0 && e.className.indexOf(s.hidden_tab_class) != -1) {\r
- e.className = s.display_tab_class;\r
- nl[nl.length] = {elm : e, type : 'class'};\r
- }\r
- } while ((e = e.parentNode) != null)\r
- }\r
-\r
- tinyMCE.settings.preformatted = false;\r
-\r
- // Default to false\r
- if (typeof(skip_cleanup) == "undefined")\r
- skip_cleanup = false;\r
-\r
- // Default to false\r
- if (typeof(skip_callback) == "undefined")\r
- skip_callback = false;\r
-\r
- tinyMCE._setHTML(this.getDoc(), this.getBody().innerHTML);\r
-\r
- // Remove visual aids when cleanup is disabled\r
- if (this.settings.cleanup == false) {\r
- tinyMCE.handleVisualAid(this.getBody(), true, false, this);\r
- tinyMCE._setEventsEnabled(this.getBody(), true);\r
- }\r
-\r
- tinyMCE._customCleanup(this, "submit_content_dom", this.contentWindow.document.body);\r
- htm = skip_cleanup ? this.getBody().innerHTML : tinyMCE._cleanupHTML(this, this.getDoc(), this.settings, this.getBody(), tinyMCE.visualAid, true, true);\r
- htm = tinyMCE._customCleanup(this, "submit_content", htm);\r
-\r
- if (!skip_callback && tinyMCE.settings.save_callback !== '')\r
- content = tinyMCE.resolveDots(tinyMCE.settings.save_callback, window)(this.formTargetElementId,htm,this.getBody());\r
-\r
- // Use callback content if available\r
- if ((typeof(content) != "undefined") && content != null)\r
- htm = content;\r
-\r
- // Replace some weird entities (Bug: #1056343)\r
- htm = tinyMCE.regexpReplace(htm, "(", "(", "gi");\r
- htm = tinyMCE.regexpReplace(htm, ")", ")", "gi");\r
- htm = tinyMCE.regexpReplace(htm, ";", ";", "gi");\r
- htm = tinyMCE.regexpReplace(htm, """, """, "gi");\r
- htm = tinyMCE.regexpReplace(htm, "^", "^", "gi");\r
-\r
- if (this.formElement)\r
- this.formElement.value = htm;\r
-\r
- if (tinyMCE.isSafari && this.formElement)\r
- this.formElement.innerText = htm;\r
-\r
- // Hide them again (tabs in MSIE)\r
- for (i=0; i<nl.length; i++) {\r
- if (nl[i].type == 'style')\r
- nl[i].elm.style.display = 'none';\r
- else\r
- nl[i].elm.className = s.hidden_tab_class;\r
- }\r
- }\r
-\r
- };\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Cleanup.class.js */\r
-\r
-tinyMCE.add(TinyMCE_Engine, {\r
- cleanupHTMLCode : function(s) {\r
- s = s.replace(new RegExp('<p \\/>', 'gi'), '<p> </p>');\r
- s = s.replace(new RegExp('<p>\\s*<\\/p>', 'gi'), '<p> </p>');\r
-\r
- // Fix close BR elements\r
- s = s.replace(new RegExp('<br>\\s*<\\/br>', 'gi'), '<br />');\r
-\r
- // Open closed tags like <b/> to <b></b>\r
- s = s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>', 'gi'), '<$1$2$3></$1$2>');\r
-\r
- // Remove trailing space <b > to <b>\r
- s = s.replace(new RegExp('\\s+></', 'gi'), '></');\r
-\r
- // Close tags <img></img> to <img/>\r
- s = s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>', 'gi'), '<$1$2 />');\r
-\r
- // Weird MSIE bug, <p><hr /></p> breaks runtime?\r
- if (tinyMCE.isIE)\r
- s = s.replace(new RegExp('<p><hr \\/><\\/p>', 'gi'), "<hr>");\r
-\r
- // Weird tags will make IE error #bug: 1538495\r
- if (tinyMCE.isIE)\r
- s = s.replace(/<!(\s*)\/>/g, '');\r
-\r
- // Convert relative anchors to absolute URLs ex: #something to file.htm#something\r
- // Removed: Since local document anchors should never be forced absolute example edit.php?id=something\r
- //if (tinyMCE.getParam('convert_urls'))\r
- // s = s.replace(new RegExp('(href=\"{0,1})(\\s*#)', 'gi'), '$1' + tinyMCE.settings.document_base_url + "#");\r
-\r
- return s;\r
- },\r
-\r
- parseStyle : function(str) {\r
- var ar = [], st, i, re, pa;\r
-\r
- if (str == null)\r
- return ar;\r
-\r
- st = str.split(';');\r
-\r
- tinyMCE.clearArray(ar);\r
-\r
- for (i=0; i<st.length; i++) {\r
- if (st[i] == '')\r
- continue;\r
-\r
- re = new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');\r
- pa = st[i].replace(re, '$1||$2').split('||');\r
- //tinyMCE.debug(str, pa[0] + "=" + pa[1], st[i].replace(re, '$1||$2'));\r
- if (pa.length == 2)\r
- ar[pa[0].toLowerCase()] = pa[1];\r
- }\r
-\r
- return ar;\r
- },\r
-\r
- compressStyle : function(ar, pr, sf, res) {\r
- var box = [], i, a;\r
-\r
- box[0] = ar[pr + '-top' + sf];\r
- box[1] = ar[pr + '-left' + sf];\r
- box[2] = ar[pr + '-right' + sf];\r
- box[3] = ar[pr + '-bottom' + sf];\r
-\r
- for (i=0; i<box.length; i++) {\r
- if (box[i] == null)\r
- return;\r
-\r
- for (a=0; a<box.length; a++) {\r
- if (box[a] != box[i])\r
- return;\r
- }\r
- }\r
-\r
- // They are all the same\r
- ar[res] = box[0];\r
- ar[pr + '-top' + sf] = null;\r
- ar[pr + '-left' + sf] = null;\r
- ar[pr + '-right' + sf] = null;\r
- ar[pr + '-bottom' + sf] = null;\r
- },\r
-\r
- serializeStyle : function(ar) {\r
- var str = "", key, val, m;\r
-\r
- // Compress box\r
- tinyMCE.compressStyle(ar, "border", "", "border");\r
- tinyMCE.compressStyle(ar, "border", "-width", "border-width");\r
- tinyMCE.compressStyle(ar, "border", "-color", "border-color");\r
- tinyMCE.compressStyle(ar, "border", "-style", "border-style");\r
- tinyMCE.compressStyle(ar, "padding", "", "padding");\r
- tinyMCE.compressStyle(ar, "margin", "", "margin");\r
-\r
- for (key in ar) {\r
- val = ar[key];\r
-\r
- if (typeof(val) == 'function')\r
- continue;\r
-\r
- if (key.indexOf('mso-') == 0)\r
- continue;\r
-\r
- if (val != null && val !== '') {\r
- val = '' + val; // Force string\r
-\r
- // Fix style URL\r
- val = val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)", 'gi'), "url('$1')");\r
-\r
- // Convert URL\r
- if (val.indexOf('url(') != -1 && tinyMCE.getParam('convert_urls')) {\r
- m = new RegExp("url\\('(.*?)'\\)").exec(val);\r
-\r
- if (m.length > 1)\r
- val = "url('" + eval(tinyMCE.getParam('urlconverter_callback') + "(m[1], null, true);") + "')";\r
- }\r
-\r
- // Force HEX colors\r
- if (tinyMCE.getParam("force_hex_style_colors"))\r
- val = tinyMCE.convertRGBToHex(val, true);\r
-\r
- val = val.replace(/\"/g, '\'');\r
-\r
- if (val != "url('')")\r
- str += key.toLowerCase() + ": " + val + "; ";\r
- }\r
- }\r
-\r
- if (new RegExp('; $').test(str))\r
- str = str.substring(0, str.length - 2);\r
-\r
- return str;\r
- },\r
-\r
- convertRGBToHex : function(s, k) {\r
- var re, rgb;\r
-\r
- if (s.toLowerCase().indexOf('rgb') != -1) {\r
- re = new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)", "gi");\r
- rgb = s.replace(re, "$1,$2,$3,$4,$5").split(',');\r
-\r
- if (rgb.length == 5) {\r
- r = parseInt(rgb[1]).toString(16);\r
- g = parseInt(rgb[2]).toString(16);\r
- b = parseInt(rgb[3]).toString(16);\r
-\r
- r = r.length == 1 ? '0' + r : r;\r
- g = g.length == 1 ? '0' + g : g;\r
- b = b.length == 1 ? '0' + b : b;\r
-\r
- s = "#" + r + g + b;\r
-\r
- if (k)\r
- s = rgb[0] + s + rgb[4];\r
- }\r
- }\r
-\r
- return s;\r
- },\r
-\r
- convertHexToRGB : function(s) {\r
- if (s.indexOf('#') != -1) {\r
- s = s.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
- return "rgb(" + parseInt(s.substring(0, 2), 16) + "," + parseInt(s.substring(2, 4), 16) + "," + parseInt(s.substring(4, 6), 16) + ")";\r
- }\r
-\r
- return s;\r
- },\r
-\r
- convertSpansToFonts : function(doc) {\r
- var s, i, size, fSize, x, fFace, fColor, sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');\r
-\r
- s = tinyMCE.selectElements(doc, 'span,font');\r
- for (i=0; i<s.length; i++) {\r
- size = tinyMCE.trim(s[i].style.fontSize).toLowerCase();\r
- fSize = 0;\r
-\r
- for (x=0; x<sizes.length; x++) {\r
- if (sizes[x] == size) {\r
- fSize = x + 1;\r
- break;\r
- }\r
- }\r
-\r
- if (fSize > 0) {\r
- tinyMCE.setAttrib(s[i], 'size', fSize);\r
- s[i].style.fontSize = '';\r
- }\r
-\r
- fFace = s[i].style.fontFamily;\r
- if (fFace != null && fFace !== '') {\r
- tinyMCE.setAttrib(s[i], 'face', fFace);\r
- s[i].style.fontFamily = '';\r
- }\r
-\r
- fColor = s[i].style.color;\r
- if (fColor != null && fColor !== '') {\r
- tinyMCE.setAttrib(s[i], 'color', tinyMCE.convertRGBToHex(fColor));\r
- s[i].style.color = '';\r
- }\r
- }\r
- },\r
-\r
- convertFontsToSpans : function(doc) {\r
- var fsClasses, s, i, fSize, fFace, fColor, sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');\r
-\r
- fsClasses = tinyMCE.getParam('font_size_classes');\r
- if (fsClasses !== '')\r
- fsClasses = fsClasses.replace(/\s+/, '').split(',');\r
- else\r
- fsClasses = null;\r
-\r
- s = tinyMCE.selectElements(doc, 'span,font');\r
- for (i=0; i<s.length; i++) {\r
- fSize = tinyMCE.getAttrib(s[i], 'size');\r
- fFace = tinyMCE.getAttrib(s[i], 'face');\r
- fColor = tinyMCE.getAttrib(s[i], 'color');\r
-\r
- if (fSize !== '') {\r
- fSize = parseInt(fSize);\r
-\r
- if (fSize > 0 && fSize < 8) {\r
- if (fsClasses != null)\r
- tinyMCE.setAttrib(s[i], 'class', fsClasses[fSize-1]);\r
- else\r
- s[i].style.fontSize = sizes[fSize-1];\r
- }\r
-\r
- s[i].removeAttribute('size');\r
- }\r
-\r
- if (fFace !== '') {\r
- s[i].style.fontFamily = fFace;\r
- s[i].removeAttribute('face');\r
- }\r
-\r
- if (fColor !== '') {\r
- s[i].style.color = fColor;\r
- s[i].removeAttribute('color');\r
- }\r
- }\r
- },\r
-\r
- cleanupAnchors : function(doc) {\r
- var i, cn, x, an = doc.getElementsByTagName("a");\r
-\r
- // Loops backwards due to bug #1467987\r
- for (i=an.length-1; i>=0; i--) {\r
- if (tinyMCE.getAttrib(an[i], "name") !== '' && tinyMCE.getAttrib(an[i], "href") == '') {\r
- cn = an[i].childNodes;\r
-\r
- for (x=cn.length-1; x>=0; x--)\r
- tinyMCE.insertAfter(cn[x], an[i]);\r
- }\r
- }\r
- },\r
-\r
- getContent : function(editor_id) {\r
- if (typeof(editor_id) != "undefined")\r
- tinyMCE.getInstanceById(editor_id).select();\r
-\r
- if (tinyMCE.selectedInstance)\r
- return tinyMCE.selectedInstance.getHTML();\r
-\r
- return null;\r
- },\r
-\r
- _fixListElements : function(d) {\r
- var nl, x, a = ['ol', 'ul'], i, n, p, r = new RegExp('^(OL|UL)$'), np;\r
-\r
- for (x=0; x<a.length; x++) {\r
- nl = d.getElementsByTagName(a[x]);\r
-\r
- for (i=0; i<nl.length; i++) {\r
- n = nl[i];\r
- p = n.parentNode;\r
-\r
- if (r.test(p.nodeName)) {\r
- np = tinyMCE.prevNode(n, 'LI');\r
-\r
- if (!np) {\r
- np = d.createElement('li');\r
- np.innerHTML = ' ';\r
- np.appendChild(n);\r
- p.insertBefore(np, p.firstChild);\r
- } else\r
- np.appendChild(n);\r
- }\r
- }\r
- }\r
- },\r
-\r
- _fixTables : function(d) {\r
- var nl, i, n, p, np, x, t;\r
-\r
- nl = d.getElementsByTagName('table');\r
- for (i=0; i<nl.length; i++) {\r
- n = nl[i];\r
-\r
- if ((p = tinyMCE.getParentElement(n, 'p,h1,h2,h3,h4,h5,h6')) != null) {\r
- np = p.cloneNode(false);\r
- np.removeAttribute('id');\r
-\r
- t = n;\r
-\r
- while ((n = n.nextSibling))\r
- np.appendChild(n);\r
-\r
- tinyMCE.insertAfter(np, p);\r
- tinyMCE.insertAfter(t, p);\r
- }\r
- }\r
- },\r
-\r
- _cleanupHTML : function(inst, doc, config, elm, visual, on_save, on_submit, inn) {\r
- var h, d, t1, t2, t3, t4, t5, c, s, nb;\r
-\r
- if (!tinyMCE.getParam('cleanup'))\r
- return elm.innerHTML;\r
-\r
- on_save = typeof(on_save) == 'undefined' ? false : on_save;\r
-\r
- c = inst.cleanup;\r
- s = inst.settings;\r
- d = c.settings.debug;\r
-\r
- if (d)\r
- t1 = new Date().getTime();\r
-\r
- inst._fixRootBlocks();\r
-\r
- if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- tinyMCE.convertFontsToSpans(doc);\r
-\r
- if (tinyMCE.getParam("fix_list_elements"))\r
- tinyMCE._fixListElements(doc);\r
-\r
- if (tinyMCE.getParam("fix_table_elements"))\r
- tinyMCE._fixTables(doc);\r
-\r
- // Call custom cleanup code\r
- tinyMCE._customCleanup(inst, on_save ? "get_from_editor_dom" : "insert_to_editor_dom", doc.body);\r
-\r
- if (d)\r
- t2 = new Date().getTime();\r
-\r
- c.settings.on_save = on_save;\r
-\r
- c.idCount = 0;\r
- c.serializationId = new Date().getTime().toString(32); // Unique ID needed for the content duplication bug\r
- c.serializedNodes = [];\r
- c.sourceIndex = -1;\r
-\r
- if (s.cleanup_serializer == "xml")\r
- h = c.serializeNodeAsXML(elm, inn);\r
- else\r
- h = c.serializeNodeAsHTML(elm, inn);\r
-\r
- if (d)\r
- t3 = new Date().getTime();\r
-\r
- // Post processing\r
- nb = tinyMCE.getParam('entity_encoding') == 'numeric' ? ' ' : ' ';\r
- h = h.replace(/<\/?(body|head|html)[^>]*>/gi, '');\r
- h = h.replace(new RegExp(' (rowspan="1"|colspan="1")', 'g'), '');\r
- h = h.replace(/<p><hr \/><\/p>/g, '<hr />');\r
- h = h.replace(/<p>( | )<\/p><hr \/><p>( | )<\/p>/g, '<hr />');\r
- h = h.replace(/<td>\s*<br \/>\s*<\/td>/g, '<td>' + nb + '</td>');\r
- h = h.replace(/<p>\s*<br \/>\s*<\/p>/g, '<p>' + nb + '</p>');\r
- h = h.replace(/<br \/>$/, ''); // Remove last BR for Gecko\r
- h = h.replace(/<br \/><\/p>/g, '</p>'); // Remove last BR in P tags for Gecko\r
- h = h.replace(/<p>\s*( | )\s*<br \/>\s*( | )\s*<\/p>/g, '<p>' + nb + '</p>');\r
- h = h.replace(/<p>\s*( | )\s*<br \/>\s*<\/p>/g, '<p>' + nb + '</p>');\r
- h = h.replace(/<p>\s*<br \/>\s* \s*<\/p>/g, '<p>' + nb + '</p>');\r
- h = h.replace(new RegExp('<a>(.*?)<\\/a>', 'g'), '$1');\r
- h = h.replace(/<p([^>]*)>\s*<\/p>/g, '<p$1>' + nb + '</p>');\r
-\r
- // Clean body\r
- if (/^\s*(<br \/>|<p> <\/p>|<p> <\/p>|<p><\/p>)\s*$/.test(h))\r
- h = '';\r
-\r
- // If preformatted\r
- if (s.preformatted) {\r
- h = h.replace(/^<pre>/, '');\r
- h = h.replace(/<\/pre>$/, '');\r
- h = '<pre>' + h + '</pre>';\r
- }\r
-\r
- // Gecko specific processing\r
- if (tinyMCE.isGecko) {\r
- // Makes no sence but FF generates it!!\r
- h = h.replace(/<br \/>\s*<\/li>/g, '</li>');\r
- h = h.replace(/ \s*<\/(dd|dt)>/g, '</$1>');\r
- h = h.replace(/<o:p _moz-userdefined="" \/>/g, '');\r
- h = h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g, '<td$1>' + nb + '</td>');\r
- }\r
-\r
- if (s.force_br_newlines)\r
- h = h.replace(/<p>( | )<\/p>/g, '<br />');\r
-\r
- // Call custom cleanup code\r
- h = tinyMCE._customCleanup(inst, on_save ? "get_from_editor" : "insert_to_editor", h);\r
-\r
- // Remove internal classes\r
- if (on_save) {\r
- h = h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|' + s.visual_table_class + ')', 'g'), '');\r
- h = h.replace(new RegExp(' ?class=""', 'g'), '');\r
- }\r
-\r
- if (s.remove_linebreaks && !c.settings.indent)\r
- h = h.replace(/\n|\r/g, ' ');\r
-\r
- if (d)\r
- t4 = new Date().getTime();\r
-\r
- if (on_save && c.settings.indent)\r
- h = c.formatHTML(h);\r
-\r
- // If encoding (not recommended option)\r
- if (on_submit && (s.encoding == "xml" || s.encoding == "html"))\r
- h = c.xmlEncode(h);\r
-\r
- if (d)\r
- t5 = new Date().getTime();\r
-\r
- if (c.settings.debug)\r
- tinyMCE.debug("Cleanup in ms: Pre=" + (t2-t1) + ", Serialize: " + (t3-t2) + ", Post: " + (t4-t3) + ", Format: " + (t5-t4) + ", Sum: " + (t5-t1) + ".");\r
-\r
- return h;\r
- }\r
-});\r
-\r
-function TinyMCE_Cleanup() {\r
- this.isIE = (navigator.appName == "Microsoft Internet Explorer");\r
- this.rules = tinyMCE.clearArray([]);\r
-\r
- // Default config\r
- this.settings = {\r
- indent_elements : 'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',\r
- newline_before_elements : 'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',\r
- newline_after_elements : 'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',\r
- newline_before_after_elements : 'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',\r
- indent_char : '\t',\r
- indent_levels : 1,\r
- entity_encoding : 'raw',\r
- valid_elements : '*[*]',\r
- entities : '',\r
- url_converter : '',\r
- invalid_elements : '',\r
- verify_html : false\r
- };\r
-\r
- this.vElements = tinyMCE.clearArray([]);\r
- this.vElementsRe = '';\r
- this.closeElementsRe = /^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;\r
- this.codeElementsRe = /^(SCRIPT|STYLE)$/;\r
- this.serializationId = 0;\r
- this.mceAttribs = {\r
- href : 'mce_href',\r
- src : 'mce_src',\r
- type : 'mce_type'\r
- };\r
-}\r
-\r
-TinyMCE_Cleanup.prototype = {\r
- init : function(s) {\r
- var n, a, i, ir, or, st;\r
-\r
- for (n in s)\r
- this.settings[n] = s[n];\r
-\r
- // Setup code formating\r
- s = this.settings;\r
-\r
- // Setup regexps\r
- this.inRe = this._arrayToRe(s.indent_elements.split(','), '', '^<(', ')[^>]*');\r
- this.ouRe = this._arrayToRe(s.indent_elements.split(','), '', '^<\\/(', ')[^>]*');\r
- this.nlBeforeRe = this._arrayToRe(s.newline_before_elements.split(','), 'gi', '<(', ')([^>]*)>');\r
- this.nlAfterRe = this._arrayToRe(s.newline_after_elements.split(','), 'gi', '<(', ')([^>]*)>');\r
- this.nlBeforeAfterRe = this._arrayToRe(s.newline_before_after_elements.split(','), 'gi', '<(\\/?)(', ')([^>]*)>');\r
- this.serializedNodes = [];\r
-\r
- if (s.invalid_elements !== '')\r
- this.iveRe = this._arrayToRe(s.invalid_elements.toUpperCase().split(','), 'g', '^(', ')$');\r
- else\r
- this.iveRe = null;\r
-\r
- // Setup separator\r
- st = '';\r
- for (i=0; i<s.indent_levels; i++)\r
- st += s.indent_char;\r
-\r
- this.inStr = st;\r
-\r
- // If verify_html if false force *[*]\r
- if (!s.verify_html) {\r
- s.valid_elements = '*[*]';\r
- s.extended_valid_elements = '';\r
- }\r
-\r
- this.fillStr = s.entity_encoding == "named" ? " " : " ";\r
- this.idCount = 0;\r
- this.xmlEncodeRe = new RegExp('[\u007F-\uFFFF<>&"]', 'g');\r
- },\r
-\r
- addRuleStr : function(s) {\r
- var r = this.parseRuleStr(s), n;\r
-\r
- for (n in r) {\r
- if (r[n])\r
- this.rules[n] = r[n];\r
- }\r
-\r
- this.vElements = tinyMCE.clearArray([]);\r
-\r
- for (n in this.rules) {\r
- if (this.rules[n])\r
- this.vElements[this.vElements.length] = this.rules[n].tag;\r
- }\r
-\r
- this.vElementsRe = this._arrayToRe(this.vElements, '');\r
- },\r
-\r
- isValid : function(n) {\r
- if (!this.rulesDone)\r
- this._setupRules(); // Will initialize cleanup rules\r
-\r
- // Empty is true since it removes formatting\r
- if (!n)\r
- return true;\r
-\r
- // Clean the name up a bit\r
- n = n.replace(/[^a-z0-9]+/gi, '').toUpperCase();\r
-\r
- return !tinyMCE.getParam('cleanup') || this.vElementsRe.test(n);\r
- },\r
-\r
- addChildRemoveRuleStr : function(s) {\r
- var x, y, p, i, t, tn, ta, cl, r;\r
-\r
- if (!s)\r
- return;\r
-\r
- ta = s.split(',');\r
- for (x=0; x<ta.length; x++) {\r
- s = ta[x];\r
-\r
- // Split tag/children\r
- p = this.split(/\[|\]/, s);\r
- if (p == null || p.length < 1)\r
- t = s.toUpperCase();\r
- else\r
- t = p[0].toUpperCase();\r
-\r
- // Handle all tag names\r
- tn = this.split('/', t);\r
- for (y=0; y<tn.length; y++) {\r
- r = "^(";\r
-\r
- // Build regex\r
- cl = this.split(/\|/, p[1]);\r
- for (i=0; i<cl.length; i++) {\r
- if (cl[i] == '%istrict')\r
- r += tinyMCE.inlineStrict;\r
- else if (cl[i] == '%itrans')\r
- r += tinyMCE.inlineTransitional;\r
- else if (cl[i] == '%istrict_na')\r
- r += tinyMCE.inlineStrict.substring(2);\r
- else if (cl[i] == '%itrans_na')\r
- r += tinyMCE.inlineTransitional.substring(2);\r
- else if (cl[i] == '%btrans')\r
- r += tinyMCE.blockElms;\r
- else if (cl[i] == '%strict')\r
- r += tinyMCE.blockStrict;\r
- else\r
- r += (cl[i].charAt(0) != '#' ? cl[i].toUpperCase() : cl[i]);\r
-\r
- r += (i != cl.length - 1 ? '|' : '');\r
- }\r
-\r
- r += ')$';\r
-\r
- if (this.childRules == null)\r
- this.childRules = tinyMCE.clearArray([]);\r
-\r
- this.childRules[tn[y]] = new RegExp(r);\r
-\r
- if (p.length > 1)\r
- this.childRules[tn[y]].wrapTag = p[2];\r
- }\r
- }\r
- },\r
-\r
- parseRuleStr : function(s) {\r
- var ta, p, r, a, i, x, px, t, tn, y, av, or = tinyMCE.clearArray([]), dv;\r
-\r
- if (s == null || s.length == 0)\r
- return or;\r
-\r
- ta = s.split(',');\r
- for (x=0; x<ta.length; x++) {\r
- s = ta[x];\r
- if (s.length == 0)\r
- continue;\r
-\r
- // Split tag/attrs\r
- p = this.split(/\[|\]/, s);\r
- if (p == null || p.length < 1)\r
- t = s.toUpperCase();\r
- else\r
- t = p[0].toUpperCase();\r
-\r
- // Handle all tag names\r
- tn = this.split('/', t);\r
- for (y=0; y<tn.length; y++) {\r
- r = {};\r
-\r
- r.tag = tn[y];\r
- r.forceAttribs = null;\r
- r.defaultAttribs = null;\r
- r.validAttribValues = null;\r
-\r
- // Handle prefixes\r
- px = r.tag.charAt(0);\r
- r.forceOpen = px == '+';\r
- r.removeEmpty = px == '-';\r
- r.fill = px == '#';\r
- r.tag = r.tag.replace(/\+|-|#/g, '');\r
- r.oTagName = tn[0].replace(/\+|-|#/g, '').toLowerCase();\r
- r.isWild = new RegExp('\\*|\\?|\\+', 'g').test(r.tag);\r
- r.validRe = new RegExp(this._wildcardToRe('^' + r.tag + '$'));\r
-\r
- // Setup valid attributes\r
- if (p.length > 1) {\r
- r.vAttribsRe = '^(';\r
- a = this.split(/\|/, p[1]);\r
-\r
- for (i=0; i<a.length; i++) {\r
- t = a[i];\r
-\r
- if (t.charAt(0) == '!') {\r
- a[i] = t = t.substring(1);\r
-\r
- if (!r.reqAttribsRe)\r
- r.reqAttribsRe = '\\s+(' + t;\r
- else\r
- r.reqAttribsRe += '|' + t;\r
- }\r
-\r
- av = new RegExp('(=|:|<)(.*?)$').exec(t);\r
- t = t.replace(new RegExp('(=|:|<).*?$'), '');\r
- if (av && av.length > 0) {\r
- if (av[0].charAt(0) == ':') {\r
- if (!r.forceAttribs)\r
- r.forceAttribs = tinyMCE.clearArray([]);\r
-\r
- r.forceAttribs[t.toLowerCase()] = av[0].substring(1);\r
- } else if (av[0].charAt(0) == '=') {\r
- if (!r.defaultAttribs)\r
- r.defaultAttribs = tinyMCE.clearArray([]);\r
-\r
- dv = av[0].substring(1);\r
-\r
- r.defaultAttribs[t.toLowerCase()] = dv == '' ? "mce_empty" : dv;\r
- } else if (av[0].charAt(0) == '<') {\r
- if (!r.validAttribValues)\r
- r.validAttribValues = tinyMCE.clearArray([]);\r
-\r
- r.validAttribValues[t.toLowerCase()] = this._arrayToRe(this.split('?', av[0].substring(1)), 'i');\r
- }\r
- }\r
-\r
- r.vAttribsRe += '' + t.toLowerCase() + (i != a.length - 1 ? '|' : '');\r
-\r
- a[i] = t.toLowerCase();\r
- }\r
-\r
- if (r.reqAttribsRe)\r
- r.reqAttribsRe = new RegExp(r.reqAttribsRe + ')=\"', 'g');\r
-\r
- r.vAttribsRe += ')$';\r
- r.vAttribsRe = this._wildcardToRe(r.vAttribsRe);\r
- r.vAttribsReIsWild = new RegExp('\\*|\\?|\\+', 'g').test(r.vAttribsRe);\r
- r.vAttribsRe = new RegExp(r.vAttribsRe);\r
- r.vAttribs = a.reverse();\r
-\r
- //tinyMCE.debug(r.tag, r.oTagName, r.vAttribsRe, r.vAttribsReWC);\r
- } else {\r
- r.vAttribsRe = '';\r
- r.vAttribs = tinyMCE.clearArray([]);\r
- r.vAttribsReIsWild = false;\r
- }\r
-\r
- or[r.tag] = r;\r
- }\r
- }\r
-\r
- return or;\r
- },\r
-\r
- serializeNodeAsXML : function(n) {\r
- var s, b;\r
-\r
- if (!this.xmlDoc) {\r
- if (this.isIE) {\r
- try {this.xmlDoc = new ActiveXObject('MSXML2.DOMDocument');} catch (e) {}\r
-\r
- if (!this.xmlDoc)\r
- try {this.xmlDoc = new ActiveXObject('Microsoft.XmlDom');} catch (e) {}\r
- } else\r
- this.xmlDoc = document.implementation.createDocument('', '', null);\r
-\r
- if (!this.xmlDoc)\r
- alert("Error XML Parser could not be found.");\r
- }\r
-\r
- if (this.xmlDoc.firstChild)\r
- this.xmlDoc.removeChild(this.xmlDoc.firstChild);\r
-\r
- b = this.xmlDoc.createElement("html");\r
- b = this.xmlDoc.appendChild(b);\r
-\r
- this._convertToXML(n, b);\r
-\r
- if (this.isIE)\r
- return this.xmlDoc.xml;\r
- else\r
- return new XMLSerializer().serializeToString(this.xmlDoc);\r
- },\r
-\r
- _convertToXML : function(n, xn) {\r
- var xd, el, i, l, cn, at, no, hc = false;\r
-\r
- if (tinyMCE.isRealIE && this._isDuplicate(n))\r
- return;\r
-\r
- xd = this.xmlDoc;\r
-\r
- switch (n.nodeType) {\r
- case 1: // Element\r
- hc = n.hasChildNodes();\r
-\r
- el = xd.createElement(n.nodeName.toLowerCase());\r
-\r
- at = n.attributes;\r
- for (i=at.length-1; i>-1; i--) {\r
- no = at[i];\r
-\r
- if (no.specified && no.nodeValue)\r
- el.setAttribute(no.nodeName.toLowerCase(), no.nodeValue);\r
- }\r
-\r
- if (!hc && !this.closeElementsRe.test(n.nodeName))\r
- el.appendChild(xd.createTextNode(""));\r
-\r
- xn = xn.appendChild(el);\r
- break;\r
-\r
- case 3: // Text\r
- xn.appendChild(xd.createTextNode(n.nodeValue));\r
- return;\r
-\r
- case 8: // Comment\r
- xn.appendChild(xd.createComment(n.nodeValue));\r
- return;\r
- }\r
-\r
- if (hc) {\r
- cn = n.childNodes;\r
-\r
- for (i=0, l=cn.length; i<l; i++)\r
- this._convertToXML(cn[i], xn);\r
- }\r
- },\r
-\r
- serializeNodeAsHTML : function(n, inn) {\r
- var en, no, h = '', i, l, t, st, r, cn, va = false, f = false, at, hc, cr, nn;\r
-\r
- if (!this.rulesDone)\r
- this._setupRules(); // Will initialize cleanup rules\r
-\r
- if (tinyMCE.isRealIE && this._isDuplicate(n))\r
- return '';\r
-\r
- // Skip non valid child elements\r
- if (n.parentNode && this.childRules != null) {\r
- cr = this.childRules[n.parentNode.nodeName];\r
-\r
- if (typeof(cr) != "undefined" && !cr.test(n.nodeName)) {\r
- st = true;\r
- t = null;\r
- }\r
- }\r
-\r
- switch (n.nodeType) {\r
- case 1: // Element\r
- hc = n.hasChildNodes();\r
-\r
- if (st)\r
- break;\r
-\r
- nn = n.nodeName;\r
-\r
- if (tinyMCE.isRealIE) {\r
- // MSIE sometimes produces <//tag>\r
- if (n.nodeName.indexOf('/') != -1)\r
- break;\r
-\r
- // MSIE has it's NS in a separate attrib\r
- if (n.scopeName && n.scopeName != 'HTML')\r
- nn = n.scopeName.toUpperCase() + ':' + nn.toUpperCase();\r
- } else if (tinyMCE.isOpera && nn.indexOf(':') > 0)\r
- nn = nn.toUpperCase();\r
-\r
- // Convert fonts to spans\r
- if (this.settings.convert_fonts_to_spans) {\r
- // On get content FONT -> SPAN\r
- if (this.settings.on_save && nn == 'FONT')\r
- nn = 'SPAN';\r
-\r
- // On insert content SPAN -> FONT\r
- if (!this.settings.on_save && nn == 'SPAN')\r
- nn = 'FONT';\r
- }\r
-\r
- if (this.vElementsRe.test(nn) && (!this.iveRe || !this.iveRe.test(nn)) && !inn) {\r
- va = true;\r
-\r
- r = this.rules[nn];\r
- if (!r) {\r
- at = this.rules;\r
- for (no in at) {\r
- if (at[no] && at[no].validRe.test(nn)) {\r
- r = at[no];\r
- break;\r
- }\r
- }\r
- }\r
-\r
- en = r.isWild ? nn.toLowerCase() : r.oTagName;\r
- f = r.fill;\r
-\r
- if (r.removeEmpty && !hc)\r
- return "";\r
-\r
- t = '<' + en;\r
-\r
- if (r.vAttribsReIsWild) {\r
- // Serialize wildcard attributes\r
- at = n.attributes;\r
- for (i=at.length-1; i>-1; i--) {\r
- no = at[i];\r
- if (no.specified && r.vAttribsRe.test(no.nodeName))\r
- t += this._serializeAttribute(n, r, no.nodeName);\r
- }\r
- } else {\r
- // Serialize specific attributes\r
- for (i=r.vAttribs.length-1; i>-1; i--)\r
- t += this._serializeAttribute(n, r, r.vAttribs[i]);\r
- }\r
-\r
- // Serialize mce_ atts\r
- if (!this.settings.on_save) {\r
- at = this.mceAttribs;\r
-\r
- for (no in at) {\r
- if (at[no])\r
- t += this._serializeAttribute(n, r, at[no]);\r
- }\r
- }\r
-\r
- // Check for required attribs\r
- if (r.reqAttribsRe && !t.match(r.reqAttribsRe))\r
- t = null;\r
-\r
- // Close these\r
- if (t != null && this.closeElementsRe.test(nn))\r
- return t + ' />';\r
-\r
- if (t != null)\r
- h += t + '>';\r
-\r
- if (this.isIE && this.codeElementsRe.test(nn))\r
- h += n.innerHTML;\r
- }\r
- break;\r
-\r
- case 3: // Text\r
- if (st)\r
- break;\r
-\r
- if (n.parentNode && this.codeElementsRe.test(n.parentNode.nodeName))\r
- return this.isIE ? '' : n.nodeValue;\r
-\r
- return this.xmlEncode(n.nodeValue);\r
-\r
- case 8: // Comment\r
- if (st)\r
- break;\r
-\r
- return "<!--" + this._trimComment(n.nodeValue) + "-->";\r
- }\r
-\r
- if (hc) {\r
- cn = n.childNodes;\r
-\r
- for (i=0, l=cn.length; i<l; i++)\r
- h += this.serializeNodeAsHTML(cn[i]);\r
- }\r
-\r
- // Fill empty nodes\r
- if (f && !hc)\r
- h += this.fillStr;\r
-\r
- // End element\r
- if (t != null && va)\r
- h += '</' + en + '>';\r
-\r
- return h;\r
- },\r
-\r
- _serializeAttribute : function(n, r, an) {\r
- var av = '', t, os = this.settings.on_save;\r
-\r
- if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0))\r
- return '';\r
-\r
- if (os && this.mceAttribs[an])\r
- av = this._getAttrib(n, this.mceAttribs[an]);\r
-\r
- if (av.length == 0)\r
- av = this._getAttrib(n, an);\r
-\r
- if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) {\r
- av = t;\r
-\r
- if (av == "mce_empty")\r
- return " " + an + '=""';\r
- }\r
-\r
- if (r.forceAttribs && (t = r.forceAttribs[an]))\r
- av = t;\r
-\r
- if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an))\r
- av = this._urlConverter(this, n, av);\r
-\r
- if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av))\r
- return "";\r
-\r
- if (av.length != 0 && av == "{$uid}")\r
- av = "uid_" + (this.idCount++);\r
-\r
- if (av.length != 0) {\r
- if (an.indexOf('on') != 0)\r
- av = this.xmlEncode(av, 1);\r
-\r
- return " " + an + "=" + '"' + av + '"';\r
- }\r
-\r
- return "";\r
- },\r
-\r
- formatHTML : function(h) {\r
- var s = this.settings, p = '', i = 0, li = 0, o = '', l;\r
-\r
- // Replace BR in pre elements to \n\r
- h = h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi, function (a, b, c) {\r
- c = c.replace(/<br\s*\/>/gi, '\n');\r
- return '<pre' + b + '>' + c + '</pre>';\r
- });\r
-\r
- h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :)\r
- h = '\n' + h;\r
- h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting\r
- h = h.replace(this.nlBeforeRe, '\n<$1$2>');\r
- h = h.replace(this.nlAfterRe, '<$1$2>\n');\r
- h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n');\r
- h += '\n';\r
-\r
- //tinyMCE.debug(h);\r
-\r
- while ((i = h.indexOf('\n', i + 1)) != -1) {\r
- if ((l = h.substring(li + 1, i)).length != 0) {\r
- if (this.ouRe.test(l) && p.length >= s.indent_levels)\r
- p = p.substring(s.indent_levels);\r
-\r
- o += p + l + '\n';\r
- \r
- if (this.inRe.test(l))\r
- p += this.inStr;\r
- }\r
-\r
- li = i;\r
- }\r
-\r
- //tinyMCE.debug(h);\r
-\r
- return o;\r
- },\r
-\r
- xmlEncode : function(s) {\r
- var cl = this, re = this.xmlEncodeRe;\r
-\r
- if (!this.entitiesDone)\r
- this._setupEntities(); // Will intialize lookup table\r
-\r
- switch (this.settings.entity_encoding) {\r
- case "raw":\r
- return tinyMCE.xmlEncode(s);\r
-\r
- case "named":\r
- return s.replace(re, function (c) {\r
- var b = cl.entities[c.charCodeAt(0)];\r
-\r
- return b ? '&' + b + ';' : c;\r
- });\r
-\r
- case "numeric":\r
- return s.replace(re, function (c) {\r
- return '&#' + c.charCodeAt(0) + ';';\r
- });\r
- }\r
-\r
- return s;\r
- },\r
-\r
- split : function(re, s) {\r
- var i, l, o = [], c = s.split(re);\r
-\r
- for (i=0, l=c.length; i<l; i++) {\r
- if (c[i] !== '')\r
- o[i] = c[i];\r
- }\r
-\r
- return o;\r
- },\r
-\r
- _trimComment : function(s) {\r
- // Remove mce_src, mce_href\r
- s = s.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), "");\r
- s = s.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), "");\r
-\r
- return s;\r
- },\r
-\r
- _getAttrib : function(e, n, d) {\r
- var v, ex, nn;\r
-\r
- if (typeof(d) == "undefined")\r
- d = "";\r
-\r
- if (!e || e.nodeType != 1)\r
- return d;\r
-\r
- try {\r
- v = e.getAttribute(n, 0);\r
- } catch (ex) {\r
- // IE 7 may cast exception on invalid attributes\r
- v = e.getAttribute(n, 2);\r
- }\r
-\r
- if (n == "class" && !v)\r
- v = e.className;\r
-\r
- if (this.isIE) {\r
- if (n == "http-equiv")\r
- v = e.httpEquiv;\r
-\r
- nn = e.nodeName;\r
-\r
- // Skip the default values that IE returns\r
- if (nn == "FORM" && n == "enctype" && v == "application/x-www-form-urlencoded")\r
- v = "";\r
-\r
- if (nn == "INPUT" && n == "size" && v == "20")\r
- v = "";\r
-\r
- if (nn == "INPUT" && n == "maxlength" && v == "2147483647")\r
- v = "";\r
-\r
- // Images\r
- if (n == "width" || n == "height")\r
- v = e.getAttribute(n, 2);\r
- }\r
-\r
- if (n == 'style' && v) {\r
- if (!tinyMCE.isOpera)\r
- v = e.style.cssText;\r
-\r
- v = tinyMCE.serializeStyle(tinyMCE.parseStyle(v));\r
- }\r
-\r
- if (this.settings.on_save && n.indexOf('on') != -1 && this.settings.on_save && v && v !== '')\r
- v = tinyMCE.cleanupEventStr(v);\r
-\r
- return (v && v !== '') ? '' + v : d;\r
- },\r
-\r
- _urlConverter : function(c, n, v) {\r
- if (!c.settings.on_save)\r
- return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, v);\r
- else if (tinyMCE.getParam('convert_urls')) {\r
- if (!this.urlConverter)\r
- this.urlConverter = eval(tinyMCE.settings.urlconverter_callback);\r
-\r
- return this.urlConverter(v, n, true);\r
- }\r
-\r
- return v;\r
- },\r
-\r
- _arrayToRe : function(a, op, be, af) {\r
- var i, r;\r
-\r
- op = typeof(op) == "undefined" ? "gi" : op;\r
- be = typeof(be) == "undefined" ? "^(" : be;\r
- af = typeof(af) == "undefined" ? ")$" : af;\r
-\r
- r = be;\r
-\r
- for (i=0; i<a.length; i++)\r
- r += this._wildcardToRe(a[i]) + (i != a.length-1 ? "|" : "");\r
-\r
- r += af;\r
-\r
- return new RegExp(r, op);\r
- },\r
-\r
- _wildcardToRe : function(s) {\r
- s = s.replace(/\?/g, '(\\S?)');\r
- s = s.replace(/\+/g, '(\\S+)');\r
- s = s.replace(/\*/g, '(\\S*)');\r
-\r
- return s;\r
- },\r
-\r
- _setupEntities : function() {\r
- var n, a, i, s = this.settings;\r
-\r
- // Setup entities\r
- if (s.entity_encoding == "named") {\r
- n = tinyMCE.clearArray([]);\r
- a = this.split(',', s.entities);\r
- for (i=0; i<a.length; i+=2)\r
- n[a[i]] = a[i+1];\r
-\r
- this.entities = n;\r
- }\r
-\r
- this.entitiesDone = true;\r
- },\r
-\r
- _setupRules : function() {\r
- var s = this.settings;\r
-\r
- // Setup default rule\r
- this.addRuleStr(s.valid_elements);\r
- this.addRuleStr(s.extended_valid_elements);\r
- this.addChildRemoveRuleStr(s.valid_child_elements);\r
-\r
- this.rulesDone = true;\r
- },\r
-\r
- _isDuplicate : function(n) {\r
- var i, l, sn;\r
-\r
- if (!this.settings.fix_content_duplication)\r
- return false;\r
-\r
- if (tinyMCE.isRealIE && n.nodeType == 1) {\r
- // Mark elements\r
- if (n.mce_serialized == this.serializationId)\r
- return true;\r
-\r
- n.setAttribute('mce_serialized', this.serializationId);\r
- } else {\r
- sn = this.serializedNodes;\r
-\r
- // Search lookup table for text nodes and comments\r
- for (i=0, l = sn.length; i<l; i++) {\r
- if (sn[i] == n)\r
- return true;\r
- }\r
-\r
- sn.push(n);\r
- }\r
-\r
- return false;\r
- }\r
-\r
- };\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_DOMUtils.class.js */\r
-\r
-tinyMCE.add(TinyMCE_Engine, {\r
- createTagHTML : function(tn, a, h) {\r
- var o = '', f = tinyMCE.xmlEncode, n;\r
-\r
- o = '<' + tn;\r
-\r
- if (a) {\r
- for (n in a) {\r
- if (typeof(a[n]) != 'function' && a[n] != null)\r
- o += ' ' + f(n) + '="' + f('' + a[n]) + '"';\r
- }\r
- }\r
-\r
- o += !h ? ' />' : '>' + h + '</' + tn + '>';\r
-\r
- return o;\r
- },\r
-\r
- createTag : function(d, tn, a, h) {\r
- var o = d.createElement(tn), n;\r
-\r
- if (a) {\r
- for (n in a) {\r
- if (typeof(a[n]) != 'function' && a[n] != null)\r
- tinyMCE.setAttrib(o, n, a[n]);\r
- }\r
- }\r
-\r
- if (h)\r
- o.innerHTML = h;\r
-\r
- return o;\r
- },\r
-\r
- getElementByAttributeValue : function(n, e, a, v) {\r
- return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0];\r
- },\r
-\r
- getElementsByAttributeValue : function(n, e, a, v) {\r
- var i, nl = n.getElementsByTagName(e), o = [];\r
-\r
- for (i=0; i<nl.length; i++) {\r
- if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)\r
- o[o.length] = nl[i];\r
- }\r
-\r
- return o;\r
- },\r
-\r
- isBlockElement : function(n) {\r
- return n != null && n.nodeType == 1 && this.blockRegExp.test(n.nodeName);\r
- },\r
-\r
- getParentBlockElement : function(n, r) {\r
- return this.getParentNode(n, function(n) {\r
- return tinyMCE.isBlockElement(n);\r
- }, r);\r
-\r
- return null;\r
- },\r
-\r
- insertAfter : function(n, r){\r
- if (r.nextSibling)\r
- r.parentNode.insertBefore(n, r.nextSibling);\r
- else\r
- r.parentNode.appendChild(n);\r
- },\r
-\r
- setInnerHTML : function(e, h) {\r
- var i, nl, n;\r
-\r
- // Convert all strong/em to b/i in Gecko\r
- if (tinyMCE.isGecko) {\r
- h = h.replace(/<embed([^>]*)>/gi, '<tmpembed$1>');\r
- h = h.replace(/<em([^>]*)>/gi, '<i$1>');\r
- h = h.replace(/<tmpembed([^>]*)>/gi, '<embed$1>');\r
- h = h.replace(/<strong([^>]*)>/gi, '<b$1>');\r
- h = h.replace(/<\/strong>/gi, '</b>');\r
- h = h.replace(/<\/em>/gi, '</i>');\r
- }\r
-\r
- if (tinyMCE.isRealIE) {\r
- // Since MSIE handles invalid HTML better that valid XHTML we\r
- // need to make some things invalid. <hr /> gets converted to <hr>.\r
- h = h.replace(/\s\/>/g, '>');\r
-\r
- // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones\r
- h = h.replace(/<p([^>]*)>\u00A0?<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs\r
- h = h.replace(/<p([^>]*)>\s* \s*<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs\r
- h = h.replace(/<p([^>]*)>\s+<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs\r
-\r
- // Remove first comment\r
- e.innerHTML = tinyMCE.uniqueTag + h;\r
- e.firstChild.removeNode(true);\r
-\r
- // Remove weird auto generated empty paragraphs unless it's supposed to be there\r
- nl = e.getElementsByTagName("p");\r
- for (i=nl.length-1; i>=0; i--) {\r
- n = nl[i];\r
-\r
- if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep)\r
- n.parentNode.removeChild(n);\r
- }\r
- } else {\r
- h = this.fixGeckoBaseHREFBug(1, e, h);\r
- e.innerHTML = h;\r
- this.fixGeckoBaseHREFBug(2, e, h);\r
- }\r
- },\r
-\r
- getOuterHTML : function(e) {\r
- var d;\r
-\r
- if (tinyMCE.isIE)\r
- return e.outerHTML;\r
-\r
- d = e.ownerDocument.createElement("body");\r
- d.appendChild(e.cloneNode(true));\r
-\r
- return d.innerHTML;\r
- },\r
-\r
- setOuterHTML : function(e, h, d) {\r
- var d = typeof(d) == "undefined" ? e.ownerDocument : d, i, nl, t;\r
-\r
- if (tinyMCE.isIE && e.nodeType == 1)\r
- e.outerHTML = h;\r
- else {\r
- t = d.createElement("body");\r
- t.innerHTML = h;\r
-\r
- for (i=0, nl=t.childNodes; i<nl.length; i++)\r
- e.parentNode.insertBefore(nl[i].cloneNode(true), e);\r
-\r
- e.parentNode.removeChild(e);\r
- }\r
- },\r
-\r
- _getElementById : function(id, d) {\r
- var e, i, j, f;\r
-\r
- if (typeof(d) == "undefined")\r
- d = document;\r
-\r
- e = d.getElementById(id);\r
- if (!e) {\r
- f = d.forms;\r
-\r
- for (i=0; i<f.length; i++) {\r
- for (j=0; j<f[i].elements.length; j++) {\r
- if (f[i].elements[j].name == id) {\r
- e = f[i].elements[j];\r
- break;\r
- }\r
- }\r
- }\r
- }\r
-\r
- return e;\r
- },\r
-\r
- getNodeTree : function(n, na, t, nn) {\r
- return this.selectNodes(n, function(n) {\r
- return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);\r
- }, na ? na : []);\r
- },\r
-\r
- getParentElement : function(n, na, f, r) {\r
- var re = na ? new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$') : 0, v;\r
-\r
- // Compatiblity with old scripts where f param was a attribute string\r
- if (f && typeof(f) == 'string')\r
- return this.getParentElement(n, na, function(no) {return tinyMCE.getAttrib(no, f) !== '';});\r
-\r
- return this.getParentNode(n, function(n) {\r
- return ((n.nodeType == 1 && !re) || (re && re.test(n.nodeName))) && (!f || f(n));\r
- }, r);\r
- },\r
-\r
- getParentNode : function(n, f, r) {\r
- while (n) {\r
- if (n == r)\r
- return null;\r
-\r
- if (f(n))\r
- return n;\r
-\r
- n = n.parentNode;\r
- }\r
-\r
- return null;\r
- },\r
-\r
- getAttrib : function(elm, name, dv) {\r
- var v;\r
-\r
- if (typeof(dv) == "undefined")\r
- dv = "";\r
-\r
- // Not a element\r
- if (!elm || elm.nodeType != 1)\r
- return dv;\r
-\r
- try {\r
- v = elm.getAttribute(name, 0);\r
- } catch (ex) {\r
- // IE 7 may cast exception on invalid attributes\r
- v = elm.getAttribute(name, 2);\r
- }\r
-\r
- // Try className for class attrib\r
- if (name == "class" && !v)\r
- v = elm.className;\r
-\r
- // Workaround for a issue with Firefox 1.5rc2+\r
- if (tinyMCE.isGecko) {\r
- if (name == "src" && elm.src != null && elm.src !== '')\r
- v = elm.src;\r
-\r
- // Workaround for a issue with Firefox 1.5rc2+\r
- if (name == "href" && elm.href != null && elm.href !== '')\r
- v = elm.href;\r
- } else if (tinyMCE.isIE) {\r
- switch (name) {\r
- case "http-equiv":\r
- v = elm.httpEquiv;\r
- break;\r
-\r
- case "width":\r
- case "height":\r
- v = elm.getAttribute(name, 2);\r
- break;\r
- }\r
- }\r
-\r
- if (name == "style" && !tinyMCE.isOpera)\r
- v = elm.style.cssText;\r
-\r
- return (v && v !== '') ? v : dv;\r
- },\r
-\r
- setAttrib : function(el, name, va, fix) {\r
- if (typeof(va) == "number" && va != null)\r
- va = "" + va;\r
-\r
- if (fix) {\r
- if (va == null)\r
- va = "";\r
-\r
- va = va.replace(/[^0-9%]/g, '');\r
- }\r
-\r
- if (name == "style")\r
- el.style.cssText = va;\r
-\r
- if (name == "class")\r
- el.className = va;\r
-\r
- if (va != null && va !== '' && va != -1)\r
- el.setAttribute(name, va);\r
- else\r
- el.removeAttribute(name);\r
- },\r
-\r
- setStyleAttrib : function(e, n, v) {\r
- e.style[n] = v;\r
-\r
- // Style attrib deleted in IE\r
- if (tinyMCE.isIE && v == null || v == '') {\r
- v = tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));\r
- e.style.cssText = v;\r
- e.setAttribute("style", v);\r
- }\r
- },\r
-\r
- switchClass : function(ei, c) {\r
- var e;\r
-\r
- if (tinyMCE.switchClassCache[ei])\r
- e = tinyMCE.switchClassCache[ei];\r
- else\r
- e = tinyMCE.switchClassCache[ei] = document.getElementById(ei);\r
-\r
- if (e) {\r
- // Keep tile mode\r
- if (tinyMCE.settings.button_tile_map && e.className && e.className.indexOf('mceTiledButton') == 0)\r
- c = 'mceTiledButton ' + c;\r
-\r
- e.className = c;\r
- }\r
- },\r
-\r
- getAbsPosition : function(n, cn) {\r
- var l = 0, t = 0;\r
-\r
- while (n && n != cn) {\r
- l += n.offsetLeft;\r
- t += n.offsetTop;\r
- n = n.offsetParent;\r
- }\r
-\r
- return {absLeft : l, absTop : t};\r
- },\r
-\r
- prevNode : function(e, n) {\r
- var a = n.split(','), i;\r
-\r
- while ((e = e.previousSibling) != null) {\r
- for (i=0; i<a.length; i++) {\r
- if (e.nodeName == a[i])\r
- return e;\r
- }\r
- }\r
-\r
- return null;\r
- },\r
-\r
- nextNode : function(e, n) {\r
- var a = n.split(','), i;\r
-\r
- while ((e = e.nextSibling) != null) {\r
- for (i=0; i<a.length; i++) {\r
- if (e.nodeName == a[i])\r
- return e;\r
- }\r
- }\r
-\r
- return null;\r
- },\r
-\r
- selectElements : function(n, na, f) {\r
- var i, a = [], nl, x;\r
-\r
- for (x=0, na = na.split(','); x<na.length; x++)\r
- for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)\r
- (!f || f(nl[i])) && a.push(nl[i]);\r
-\r
- return a;\r
- },\r
-\r
- selectNodes : function(n, f, a) {\r
- var i;\r
-\r
- if (!a)\r
- a = [];\r
-\r
- if (f(n))\r
- a[a.length] = n;\r
-\r
- if (n.hasChildNodes()) {\r
- for (i=0; i<n.childNodes.length; i++)\r
- tinyMCE.selectNodes(n.childNodes[i], f, a);\r
- }\r
-\r
- return a;\r
- },\r
-\r
- addCSSClass : function(e, c, b) {\r
- var o = this.removeCSSClass(e, c);\r
- return e.className = b ? c + (o !== '' ? (' ' + o) : '') : (o !== '' ? (o + ' ') : '') + c;\r
- },\r
-\r
- removeCSSClass : function(e, c) {\r
- c = e.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');\r
- return e.className = c != ' ' ? c : '';\r
- },\r
-\r
- hasCSSClass : function(n, c) {\r
- return new RegExp('\\b' + c + '\\b', 'g').test(n.className);\r
- },\r
-\r
- renameElement : function(e, n, d) {\r
- var ne, i, ar;\r
-\r
- d = typeof(d) == "undefined" ? tinyMCE.selectedInstance.getDoc() : d;\r
-\r
- if (e) {\r
- ne = d.createElement(n);\r
-\r
- ar = e.attributes;\r
- for (i=ar.length-1; i>-1; i--) {\r
- if (ar[i].specified && ar[i].nodeValue)\r
- ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue);\r
- }\r
-\r
- ar = e.childNodes;\r
- for (i=0; i<ar.length; i++)\r
- ne.appendChild(ar[i].cloneNode(true));\r
-\r
- e.parentNode.replaceChild(ne, e);\r
- }\r
- },\r
-\r
- getViewPort : function(w) {\r
- var d = w.document, m = d.compatMode == 'CSS1Compat', b = d.body, de = d.documentElement;\r
-\r
- return {\r
- left : w.pageXOffset || (m ? de.scrollLeft : b.scrollLeft),\r
- top : w.pageYOffset || (m ? de.scrollTop : b.scrollTop),\r
- width : w.innerWidth || (m ? de.clientWidth : b.clientWidth),\r
- height : w.innerHeight || (m ? de.clientHeight : b.clientHeight)\r
- };\r
- },\r
-\r
- getStyle : function(n, na, d) {\r
- if (!n)\r
- return false;\r
-\r
- // Gecko\r
- if (tinyMCE.isGecko && n.ownerDocument.defaultView) {\r
- try {\r
- return n.ownerDocument.defaultView.getComputedStyle(n, null).getPropertyValue(na);\r
- } catch (n) {\r
- // Old safari might fail\r
- return null;\r
- }\r
- }\r
-\r
- // Camelcase it, if needed\r
- na = na.replace(/-(\D)/g, function(a, b){\r
- return b.toUpperCase();\r
- });\r
-\r
- // IE & Opera\r
- if (n.currentStyle)\r
- return n.currentStyle[na];\r
-\r
- return false;\r
- }\r
-\r
- });\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_URL.class.js */\r
-\r
-tinyMCE.add(TinyMCE_Engine, {\r
- parseURL : function(url_str) {\r
- var urlParts = [], i, pos, lastPos, chr;\r
-\r
- if (url_str) {\r
- // Parse protocol part\r
- pos = url_str.indexOf('://');\r
- if (pos != -1) {\r
- urlParts.protocol = url_str.substring(0, pos);\r
- lastPos = pos + 3;\r
- }\r
-\r
- // Find port or path start\r
- for (i=lastPos; i<url_str.length; i++) {\r
- chr = url_str.charAt(i);\r
-\r
- if (chr == ':')\r
- break;\r
-\r
- if (chr == '/')\r
- break;\r
- }\r
- pos = i;\r
-\r
- // Get host\r
- urlParts.host = url_str.substring(lastPos, pos);\r
-\r
- // Get port\r
- urlParts.port = "";\r
- lastPos = pos;\r
- if (url_str.charAt(pos) == ':') {\r
- pos = url_str.indexOf('/', lastPos);\r
- urlParts.port = url_str.substring(lastPos+1, pos);\r
- }\r
-\r
- // Get path\r
- lastPos = pos;\r
- pos = url_str.indexOf('?', lastPos);\r
-\r
- if (pos == -1)\r
- pos = url_str.indexOf('#', lastPos);\r
-\r
- if (pos == -1)\r
- pos = url_str.length;\r
-\r
- urlParts.path = url_str.substring(lastPos, pos);\r
-\r
- // Get query\r
- lastPos = pos;\r
- if (url_str.charAt(pos) == '?') {\r
- pos = url_str.indexOf('#');\r
- pos = (pos == -1) ? url_str.length : pos;\r
- urlParts.query = url_str.substring(lastPos+1, pos);\r
- }\r
-\r
- // Get anchor\r
- lastPos = pos;\r
- if (url_str.charAt(pos) == '#') {\r
- pos = url_str.length;\r
- urlParts.anchor = url_str.substring(lastPos+1, pos);\r
- }\r
- }\r
-\r
- return urlParts;\r
- },\r
-\r
- serializeURL : function(up) {\r
- var o = "";\r
-\r
- if (up.protocol)\r
- o += up.protocol + "://";\r
-\r
- if (up.host)\r
- o += up.host;\r
-\r
- if (up.port)\r
- o += ":" + up.port;\r
-\r
- if (up.path)\r
- o += up.path;\r
-\r
- if (up.query)\r
- o += "?" + up.query;\r
-\r
- if (up.anchor)\r
- o += "#" + up.anchor;\r
-\r
- return o;\r
- },\r
-\r
- convertAbsoluteURLToRelativeURL : function(base_url, url_to_relative) {\r
- var baseURL = this.parseURL(base_url), targetURL = this.parseURL(url_to_relative);\r
- var i, strTok1, strTok2, breakPoint = 0, outPath = "", forceSlash = false;\r
- var fileName, pos;\r
-\r
- if (targetURL.path == '')\r
- targetURL.path = "/";\r
- else\r
- forceSlash = true;\r
-\r
- // Crop away last path part\r
- base_url = baseURL.path.substring(0, baseURL.path.lastIndexOf('/'));\r
- strTok1 = base_url.split('/');\r
- strTok2 = targetURL.path.split('/');\r
-\r
- if (strTok1.length >= strTok2.length) {\r
- for (i=0; i<strTok1.length; i++) {\r
- if (i >= strTok2.length || strTok1[i] != strTok2[i]) {\r
- breakPoint = i + 1;\r
- break;\r
- }\r
- }\r
- }\r
-\r
- if (strTok1.length < strTok2.length) {\r
- for (i=0; i<strTok2.length; i++) {\r
- if (i >= strTok1.length || strTok1[i] != strTok2[i]) {\r
- breakPoint = i + 1;\r
- break;\r
- }\r
- }\r
- }\r
-\r
- if (breakPoint == 1)\r
- return targetURL.path;\r
-\r
- for (i=0; i<(strTok1.length-(breakPoint-1)); i++)\r
- outPath += "../";\r
-\r
- for (i=breakPoint-1; i<strTok2.length; i++) {\r
- if (i != (breakPoint-1))\r
- outPath += "/" + strTok2[i];\r
- else\r
- outPath += strTok2[i];\r
- }\r
-\r
- targetURL.protocol = null;\r
- targetURL.host = null;\r
- targetURL.port = null;\r
- targetURL.path = outPath == '' && forceSlash ? "/" : outPath;\r
-\r
- // Remove document prefix from local anchors\r
- fileName = baseURL.path;\r
-\r
- if ((pos = fileName.lastIndexOf('/')) != -1)\r
- fileName = fileName.substring(pos + 1);\r
-\r
- // Is local anchor\r
- if (fileName == targetURL.path && targetURL.anchor !== '')\r
- targetURL.path = "";\r
-\r
- // If empty and not local anchor force filename or slash\r
- if (targetURL.path == '' && !targetURL.anchor)\r
- targetURL.path = fileName !== '' ? fileName : "/";\r
-\r
- return this.serializeURL(targetURL);\r
- },\r
-\r
- convertRelativeToAbsoluteURL : function(base_url, relative_url) {\r
- var baseURL = this.parseURL(base_url), baseURLParts, relURLParts, newRelURLParts, numBack, relURL = this.parseURL(relative_url), i;\r
- var len, absPath, start, end, newBaseURLParts;\r
-\r
- if (relative_url == '' || relative_url.indexOf('://') != -1 || /^(mailto:|javascript:|#|\/)/.test(relative_url))\r
- return relative_url;\r
-\r
- // Split parts\r
- baseURLParts = baseURL.path.split('/');\r
- relURLParts = relURL.path.split('/');\r
-\r
- // Remove empty chunks\r
- newBaseURLParts = [];\r
- for (i=baseURLParts.length-1; i>=0; i--) {\r
- if (baseURLParts[i].length == 0)\r
- continue;\r
-\r
- newBaseURLParts[newBaseURLParts.length] = baseURLParts[i];\r
- }\r
- baseURLParts = newBaseURLParts.reverse();\r
-\r
- // Merge relURLParts chunks\r
- newRelURLParts = [];\r
- numBack = 0;\r
- for (i=relURLParts.length-1; i>=0; i--) {\r
- if (relURLParts[i].length == 0 || relURLParts[i] == ".")\r
- continue;\r
-\r
- if (relURLParts[i] == '..') {\r
- numBack++;\r
- continue;\r
- }\r
-\r
- if (numBack > 0) {\r
- numBack--;\r
- continue;\r
- }\r
-\r
- newRelURLParts[newRelURLParts.length] = relURLParts[i];\r
- }\r
-\r
- relURLParts = newRelURLParts.reverse();\r
-\r
- // Remove end from absolute path\r
- len = baseURLParts.length-numBack;\r
- absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/');\r
- start = "";\r
- end = "";\r
-\r
- // Build output URL\r
- relURL.protocol = baseURL.protocol;\r
- relURL.host = baseURL.host;\r
- relURL.port = baseURL.port;\r
-\r
- // Re-add trailing slash if it's removed\r
- if (relURL.path.charAt(relURL.path.length-1) == "/")\r
- absPath += "/";\r
-\r
- relURL.path = absPath;\r
-\r
- return this.serializeURL(relURL);\r
- },\r
-\r
- convertURL : function(url, node, on_save) {\r
- var dl = document.location, start, portPart, urlParts, baseUrlParts, tmpUrlParts, curl;\r
- var prot = dl.protocol, host = dl.hostname, port = dl.port;\r
-\r
- // Pass through file protocol\r
- if (prot == "file:")\r
- return url;\r
-\r
- // Something is wrong, remove weirdness\r
- url = tinyMCE.regexpReplace(url, '(http|https):///', '/');\r
-\r
- // Mailto link or anchor (Pass through)\r
- if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || /^[ \t\r\n\+]*[#\?]/.test(url))\r
- return url;\r
-\r
- // Fix relative/Mozilla\r
- if (!tinyMCE.isIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/')\r
- return tinyMCE.settings.base_href + url;\r
-\r
- // Handle relative URLs\r
- if (on_save && tinyMCE.getParam('relative_urls')) {\r
- curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url);\r
- if (curl.charAt(0) == '/')\r
- curl = tinyMCE.settings.document_base_prefix + curl;\r
-\r
- urlParts = tinyMCE.parseURL(curl);\r
- tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings.document_base_url);\r
-\r
- // Force relative\r
- if (urlParts.host == tmpUrlParts.host && (urlParts.port == tmpUrlParts.port))\r
- return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url, curl);\r
- }\r
-\r
- // Handle absolute URLs\r
- if (!tinyMCE.getParam('relative_urls')) {\r
- urlParts = tinyMCE.parseURL(url);\r
- baseUrlParts = tinyMCE.parseURL(tinyMCE.settings.base_href);\r
-\r
- // Force absolute URLs from relative URLs\r
- url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url);\r
-\r
- // If anchor and path is the same page\r
- if (urlParts.anchor && urlParts.path == baseUrlParts.path)\r
- return "#" + urlParts.anchor;\r
- }\r
-\r
- // Remove current domain\r
- if (tinyMCE.getParam('remove_script_host')) {\r
- start = "";\r
- portPart = "";\r
-\r
- if (port !== '')\r
- portPart = ":" + port;\r
-\r
- start = prot + "//" + host + portPart + "/";\r
-\r
- if (url.indexOf(start) == 0)\r
- url = url.substring(start.length-1);\r
- }\r
-\r
- return url;\r
- },\r
-\r
- convertAllRelativeURLs : function(body) {\r
- var i, elms, src, href, mhref, msrc;\r
-\r
- // Convert all image URL:s to absolute URL\r
- elms = body.getElementsByTagName("img");\r
- for (i=0; i<elms.length; i++) {\r
- src = tinyMCE.getAttrib(elms[i], 'src');\r
-\r
- msrc = tinyMCE.getAttrib(elms[i], 'mce_src');\r
- if (msrc !== '')\r
- src = msrc;\r
-\r
- if (src !== '') {\r
- src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src);\r
- elms[i].setAttribute("src", src);\r
- }\r
- }\r
-\r
- // Convert all link URL:s to absolute URL\r
- elms = body.getElementsByTagName("a");\r
- for (i=0; i<elms.length; i++) {\r
- href = tinyMCE.getAttrib(elms[i], 'href');\r
-\r
- mhref = tinyMCE.getAttrib(elms[i], 'mce_href');\r
- if (mhref !== '')\r
- href = mhref;\r
-\r
- if (href && href !== '') {\r
- href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, href);\r
- elms[i].setAttribute("href", href);\r
- }\r
- }\r
- }\r
-\r
- });\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Array.class.js */\r
-\r
-tinyMCE.add(TinyMCE_Engine, {\r
- clearArray : function(a) {\r
- var n;\r
-\r
- for (n in a)\r
- a[n] = null;\r
-\r
- return a;\r
- },\r
-\r
- explode : function(d, s) {\r
- var ar = s.split(d), oar = [], i;\r
-\r
- for (i = 0; i<ar.length; i++) {\r
- if (ar[i] !== '')\r
- oar[oar.length] = ar[i];\r
- }\r
-\r
- return oar;\r
- }\r
-});\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Event.class.js */\r
-\r
-tinyMCE.add(TinyMCE_Engine, {\r
- _setEventsEnabled : function(node, state) {\r
- var evs, x, y, elms, i, event;\r
- var events = ['onfocus','onblur','onclick','ondblclick',\r
- 'onmousedown','onmouseup','onmouseover','onmousemove',\r
- 'onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];\r
-\r
- evs = tinyMCE.settings.event_elements.split(',');\r
- for (y=0; y<evs.length; y++){\r
- elms = node.getElementsByTagName(evs[y]);\r
- for (i=0; i<elms.length; i++) {\r
- event = "";\r
-\r
- for (x=0; x<events.length; x++) {\r
- if ((event = tinyMCE.getAttrib(elms[i], events[x])) !== '') {\r
- event = tinyMCE.cleanupEventStr("" + event);\r
-\r
- if (!state)\r
- event = "return true;" + event;\r
- else\r
- event = event.replace(/^return true;/gi, '');\r
-\r
- elms[i].removeAttribute(events[x]);\r
- elms[i].setAttribute(events[x], event);\r
- }\r
- }\r
- }\r
- }\r
- },\r
-\r
- _eventPatch : function(editor_id) {\r
- var n, inst, win, e;\r
-\r
- // Remove odd, error\r
- if (typeof(tinyMCE) == "undefined")\r
- return true;\r
-\r
- try {\r
- // Try selected instance first\r
- if (tinyMCE.selectedInstance) {\r
- win = tinyMCE.selectedInstance.getWin();\r
-\r
- if (win && win.event) {\r
- e = win.event;\r
-\r
- if (!e.target)\r
- e.target = e.srcElement;\r
-\r
- TinyMCE_Engine.prototype.handleEvent(e);\r
- return;\r
- }\r
- }\r
-\r
- // Search for it\r
- for (n in tinyMCE.instances) {\r
- inst = tinyMCE.instances[n];\r
-\r
- if (!tinyMCE.isInstance(inst))\r
- continue;\r
-\r
- inst.select();\r
- win = inst.getWin();\r
-\r
- if (win && win.event) {\r
- e = win.event;\r
-\r
- if (!e.target)\r
- e.target = e.srcElement;\r
-\r
- TinyMCE_Engine.prototype.handleEvent(e);\r
- return;\r
- }\r
- }\r
- } catch (ex) {\r
- // Ignore error if iframe is pointing to external URL\r
- }\r
- },\r
-\r
- findEvent : function(e) {\r
- var n, inst;\r
-\r
- if (e)\r
- return e;\r
-\r
- for (n in tinyMCE.instances) {\r
- inst = tinyMCE.instances[n];\r
-\r
- if (tinyMCE.isInstance(inst) && inst.getWin().event)\r
- return inst.getWin().event;\r
- }\r
-\r
- return null;\r
- },\r
-\r
- unloadHandler : function() {\r
- tinyMCE.triggerSave(true, true);\r
- },\r
-\r
- addEventHandlers : function(inst) {\r
- this.setEventHandlers(inst, 1);\r
- },\r
-\r
- setEventHandlers : function(inst, s) {\r
- var doc = inst.getDoc(), ie, ot, i, f = s ? tinyMCE.addEvent : tinyMCE.removeEvent;\r
-\r
- ie = ['keypress', 'keyup', 'keydown', 'click', 'mouseup', 'mousedown', 'controlselect', 'dblclick'];\r
- ot = ['keypress', 'keyup', 'keydown', 'click', 'mouseup', 'mousedown', 'focus', 'blur', 'dragdrop'];\r
-\r
- inst.switchSettings();\r
-\r
- if (tinyMCE.isIE) {\r
- for (i=0; i<ie.length; i++)\r
- f(doc, ie[i], TinyMCE_Engine.prototype._eventPatch);\r
- } else {\r
- for (i=0; i<ot.length; i++)\r
- f(doc, ot[i], tinyMCE.handleEvent);\r
-\r
- // Force designmode\r
- try {\r
- doc.designMode = "On";\r
- } catch (e) {\r
- // Ignore\r
- }\r
- }\r
- },\r
-\r
- onMouseMove : function() {\r
- var inst, lh;\r
-\r
- // Fix for IE7 bug where it's not restoring hover on anchors correctly\r
- if (tinyMCE.lastHover) {\r
- lh = tinyMCE.lastHover;\r
-\r
- // Call out on menus and refresh class on normal buttons\r
- if (lh.className.indexOf('mceMenu') != -1)\r
- tinyMCE._menuButtonEvent('out', lh);\r
- else\r
- lh.className = lh.className;\r
-\r
- tinyMCE.lastHover = null;\r
- }\r
-\r
- if (!tinyMCE.hasMouseMoved) {\r
- inst = tinyMCE.selectedInstance;\r
-\r
- // Workaround for bug #1437457 (Odd MSIE bug)\r
- if (inst.isFocused) {\r
- inst.undoBookmark = inst.selection.getBookmark();\r
- tinyMCE.hasMouseMoved = true;\r
- }\r
- }\r
-\r
- // tinyMCE.cancelEvent(inst.getWin().event);\r
- // return false;\r
- },\r
-\r
- cancelEvent : function(e) {\r
- if (!e)\r
- return false;\r
-\r
- if (tinyMCE.isIE) {\r
- e.returnValue = false;\r
- e.cancelBubble = true;\r
- } else {\r
- e.preventDefault();\r
- e.stopPropagation && e.stopPropagation();\r
- }\r
-\r
- return false;\r
- },\r
-\r
- addEvent : function(o, n, h) {\r
- // Add cleanup for all non unload events\r
- if (n != 'unload') {\r
- function clean() {\r
- var ex;\r
-\r
- try {\r
- tinyMCE.removeEvent(o, n, h);\r
- tinyMCE.removeEvent(window, 'unload', clean);\r
- o = n = h = null;\r
- } catch (ex) {\r
- // IE may produce access denied exception on unload\r
- }\r
- }\r
-\r
- // Add memory cleaner\r
- tinyMCE.addEvent(window, 'unload', clean);\r
- }\r
-\r
- if (o.attachEvent)\r
- o.attachEvent("on" + n, h);\r
- else\r
- o.addEventListener(n, h, false);\r
- },\r
-\r
- removeEvent : function(o, n, h) {\r
- if (o.detachEvent)\r
- o.detachEvent("on" + n, h);\r
- else\r
- o.removeEventListener(n, h, false);\r
- },\r
-\r
- addSelectAccessibility : function(e, s, w) {\r
- // Add event handlers \r
- if (!s._isAccessible) {\r
- s.onkeydown = tinyMCE.accessibleEventHandler;\r
- s.onblur = tinyMCE.accessibleEventHandler;\r
- s._isAccessible = true;\r
- s._win = w;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- accessibleEventHandler : function(e) {\r
- var elm, win = this._win;\r
-\r
- e = tinyMCE.isIE ? win.event : e;\r
- elm = tinyMCE.isIE ? e.srcElement : e.target;\r
-\r
- // Unpiggyback onchange on blur\r
- if (e.type == "blur") {\r
- if (elm.oldonchange) {\r
- elm.onchange = elm.oldonchange;\r
- elm.oldonchange = null;\r
- }\r
-\r
- return true;\r
- }\r
-\r
- // Piggyback onchange\r
- if (elm.nodeName == "SELECT" && !elm.oldonchange) {\r
- elm.oldonchange = elm.onchange;\r
- elm.onchange = null;\r
- }\r
-\r
- // Execute onchange and remove piggyback\r
- if (e.keyCode == 13 || e.keyCode == 32) {\r
- elm.onchange = elm.oldonchange;\r
- elm.onchange();\r
- elm.oldonchange = null;\r
-\r
- tinyMCE.cancelEvent(e);\r
- return false;\r
- }\r
-\r
- return true;\r
- },\r
-\r
- _resetIframeHeight : function() {\r
- var ife;\r
-\r
- if (tinyMCE.isRealIE) {\r
- ife = tinyMCE.selectedInstance.iframeElement;\r
-\r
- /* if (ife._oldWidth) {\r
- ife.style.width = ife._oldWidth;\r
- ife.width = ife._oldWidth;\r
- }*/\r
-\r
- if (ife._oldHeight) {\r
- ife.style.height = ife._oldHeight;\r
- ife.height = ife._oldHeight;\r
- }\r
- }\r
- }\r
-\r
- });\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Selection.class.js */\r
-\r
-function TinyMCE_Selection(inst) {\r
- this.instance = inst;\r
-};\r
-\r
-TinyMCE_Selection.prototype = {\r
- getSelectedHTML : function() {\r
- var inst = this.instance, e, r = this.getRng(), h;\r
-\r
- if (!r)\r
- return null;\r
-\r
- e = document.createElement("body");\r
-\r
- if (r.cloneContents)\r
- e.appendChild(r.cloneContents());\r
- else if (typeof(r.item) != 'undefined' || typeof(r.htmlText) != 'undefined')\r
- e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;\r
- else\r
- e.innerHTML = r.toString(); // Failed, use text for now\r
-\r
- h = tinyMCE._cleanupHTML(inst, inst.contentDocument, inst.settings, e, e, false, true, false);\r
-\r
- // When editing always use fonts internaly\r
- //if (tinyMCE.getParam("convert_fonts_to_spans"))\r
- // tinyMCE.convertSpansToFonts(inst.getDoc());\r
-\r
- return h;\r
- },\r
-\r
- getSelectedText : function() {\r
- var inst = this.instance, d, r, s, t;\r
-\r
- if (tinyMCE.isIE) {\r
- d = inst.getDoc();\r
-\r
- if (d.selection.type == "Text") {\r
- r = d.selection.createRange();\r
- t = r.text;\r
- } else\r
- t = '';\r
- } else {\r
- s = this.getSel();\r
-\r
- if (s && s.toString)\r
- t = s.toString();\r
- else\r
- t = '';\r
- }\r
-\r
- return t;\r
- },\r
-\r
- getBookmark : function(simple) {\r
- var inst = this.instance, rng = this.getRng(), doc = inst.getDoc(), b = inst.getBody();\r
- var trng, sx, sy, xx = -999999999, vp = inst.getViewPort();\r
- var sp, le, s, e, nl, i, si, ei, w;\r
-\r
- sx = vp.left;\r
- sy = vp.top;\r
-\r
- if (simple)\r
- return {rng : rng, scrollX : sx, scrollY : sy};\r
-\r
- if (tinyMCE.isRealIE) {\r
- if (rng.item) {\r
- e = rng.item(0);\r
-\r
- nl = b.getElementsByTagName(e.nodeName);\r
- for (i=0; i<nl.length; i++) {\r
- if (e == nl[i]) {\r
- sp = i;\r
- break;\r
- }\r
- }\r
-\r
- return {\r
- tag : e.nodeName,\r
- index : sp,\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
- } else {\r
- trng = doc.body.createTextRange();\r
- trng.moveToElementText(inst.getBody());\r
- trng.collapse(true);\r
- bp = Math.abs(trng.move('character', xx));\r
-\r
- trng = rng.duplicate();\r
- trng.collapse(true);\r
- sp = Math.abs(trng.move('character', xx));\r
-\r
- trng = rng.duplicate();\r
- trng.collapse(false);\r
- le = Math.abs(trng.move('character', xx)) - sp;\r
-\r
- return {\r
- start : sp - bp,\r
- length : le,\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
- }\r
- } else {\r
- s = this.getSel();\r
- e = this.getFocusElement();\r
-\r
- if (!s)\r
- return null;\r
-\r
- if (e && e.nodeName == 'IMG') {\r
- /*nl = b.getElementsByTagName('IMG');\r
- for (i=0; i<nl.length; i++) {\r
- if (e == nl[i]) {\r
- sp = i;\r
- break;\r
- }\r
- }*/\r
-\r
- return {\r
- start : -1,\r
- end : -1,\r
- index : sp,\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
- }\r
-\r
- // Caret or selection\r
- if (s.anchorNode == s.focusNode && s.anchorOffset == s.focusOffset) {\r
- e = this._getPosText(b, s.anchorNode, s.focusNode);\r
-\r
- if (!e)\r
- return {scrollX : sx, scrollY : sy};\r
-\r
- return {\r
- start : e.start + s.anchorOffset,\r
- end : e.end + s.focusOffset,\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
- } else {\r
- e = this._getPosText(b, rng.startContainer, rng.endContainer);\r
-\r
- if (!e)\r
- return {scrollX : sx, scrollY : sy};\r
-\r
- return {\r
- start : e.start + rng.startOffset,\r
- end : e.end + rng.endOffset,\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
- }\r
- }\r
-\r
- return null;\r
- },\r
-\r
- moveToBookmark : function(bookmark) {\r
- var inst = this.instance, rng, nl, i, ex, b = inst.getBody(), sd;\r
- var doc = inst.getDoc(), win = inst.getWin(), sel = this.getSel();\r
-\r
- if (!bookmark)\r
- return false;\r
-\r
- if (tinyMCE.isSafari && bookmark.rng) {\r
- sel.setBaseAndExtent(bookmark.rng.startContainer, bookmark.rng.startOffset, bookmark.rng.endContainer, bookmark.rng.endOffset);\r
- return true;\r
- }\r
-\r
- if (tinyMCE.isRealIE) {\r
- if (bookmark.rng) {\r
- try {\r
- bookmark.rng.select();\r
- } catch (ex) {\r
- // Ignore\r
- }\r
-\r
- return true;\r
- }\r
-\r
- win.focus();\r
-\r
- if (bookmark.tag) {\r
- rng = b.createControlRange();\r
-\r
- nl = b.getElementsByTagName(bookmark.tag);\r
-\r
- if (nl.length > bookmark.index) {\r
- try {\r
- rng.addElement(nl[bookmark.index]);\r
- } catch (ex) {\r
- // Might be thrown if the node no longer exists\r
- }\r
- }\r
- } else {\r
- // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs\r
- try {\r
- // Incorrect bookmark\r
- if (bookmark.start < 0)\r
- return true;\r
-\r
- rng = inst.getSel().createRange();\r
- rng.moveToElementText(inst.getBody());\r
- rng.collapse(true);\r
- rng.moveStart('character', bookmark.start);\r
- rng.moveEnd('character', bookmark.length);\r
- } catch (ex) {\r
- return true;\r
- }\r
- }\r
-\r
- rng.select();\r
-\r
- win.scrollTo(bookmark.scrollX, bookmark.scrollY);\r
- return true;\r
- }\r
-\r
- if (tinyMCE.isGecko || tinyMCE.isOpera) {\r
- if (!sel)\r
- return false;\r
-\r
- if (bookmark.rng) {\r
- sel.removeAllRanges();\r
- sel.addRange(bookmark.rng);\r
- }\r
-\r
- if (bookmark.start != -1 && bookmark.end != -1) {\r
- try {\r
- sd = this._getTextPos(b, bookmark.start, bookmark.end);\r
- rng = doc.createRange();\r
- rng.setStart(sd.startNode, sd.startOffset);\r
- rng.setEnd(sd.endNode, sd.endOffset);\r
- sel.removeAllRanges();\r
- sel.addRange(rng);\r
-\r
- if (!tinyMCE.isOpera)\r
- win.focus();\r
- } catch (ex) {\r
- // Ignore\r
- }\r
- }\r
-\r
- /*\r
- if (typeof(bookmark.index) != 'undefined') {\r
- tinyMCE.selectElements(b, 'IMG', function (n) {\r
- if (bookmark.index-- == 0) {\r
- // Select image in Gecko here\r
- }\r
-\r
- return false;\r
- });\r
- }\r
- */\r
-\r
- win.scrollTo(bookmark.scrollX, bookmark.scrollY);\r
- return true;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- _getPosText : function(r, sn, en) {\r
- var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};\r
-\r
- while ((n = w.nextNode()) != null) {\r
- if (n == sn)\r
- d.start = p;\r
-\r
- if (n == en) {\r
- d.end = p;\r
- return d;\r
- }\r
-\r
- p += n.nodeValue ? n.nodeValue.length : 0;\r
- }\r
-\r
- return null;\r
- },\r
-\r
- _getTextPos : function(r, sp, ep) {\r
- var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};\r
-\r
- while ((n = w.nextNode()) != null) {\r
- p += n.nodeValue ? n.nodeValue.length : 0;\r
-\r
- if (p >= sp && !d.startNode) {\r
- d.startNode = n;\r
- d.startOffset = sp - (p - n.nodeValue.length);\r
- }\r
-\r
- if (p >= ep) {\r
- d.endNode = n;\r
- d.endOffset = ep - (p - n.nodeValue.length);\r
-\r
- return d;\r
- }\r
- }\r
-\r
- return null;\r
- },\r
-\r
- selectNode : function(node, collapse, select_text_node, to_start) {\r
- var inst = this.instance, sel, rng, nodes;\r
-\r
- if (!node)\r
- return;\r
-\r
- if (typeof(collapse) == "undefined")\r
- collapse = true;\r
-\r
- if (typeof(select_text_node) == "undefined")\r
- select_text_node = false;\r
-\r
- if (typeof(to_start) == "undefined")\r
- to_start = true;\r
-\r
- if (inst.settings.auto_resize)\r
- inst.resizeToContent();\r
-\r
- if (tinyMCE.isRealIE) {\r
- rng = inst.getDoc().body.createTextRange();\r
-\r
- try {\r
- rng.moveToElementText(node);\r
-\r
- if (collapse)\r
- rng.collapse(to_start);\r
-\r
- rng.select();\r
- } catch (e) {\r
- // Throws illigal agrument in MSIE some times\r
- }\r
- } else {\r
- sel = this.getSel();\r
-\r
- if (!sel)\r
- return;\r
-\r
- if (tinyMCE.isSafari) {\r
- sel.setBaseAndExtent(node, 0, node, node.innerText.length);\r
-\r
- if (collapse) {\r
- if (to_start)\r
- sel.collapseToStart();\r
- else\r
- sel.collapseToEnd();\r
- }\r
-\r
- this.scrollToNode(node);\r
-\r
- return;\r
- }\r
-\r
- rng = inst.getDoc().createRange();\r
-\r
- if (select_text_node) {\r
- // Find first textnode in tree\r
- nodes = tinyMCE.getNodeTree(node, [], 3);\r
- if (nodes.length > 0)\r
- rng.selectNodeContents(nodes[0]);\r
- else\r
- rng.selectNodeContents(node);\r
- } else\r
- rng.selectNode(node);\r
-\r
- if (collapse) {\r
- // Special treatment of textnode collapse\r
- if (!to_start && node.nodeType == 3) {\r
- rng.setStart(node, node.nodeValue.length);\r
- rng.setEnd(node, node.nodeValue.length);\r
- } else\r
- rng.collapse(to_start);\r
- }\r
-\r
- sel.removeAllRanges();\r
- sel.addRange(rng);\r
- }\r
-\r
- this.scrollToNode(node);\r
-\r
- // Set selected element\r
- tinyMCE.selectedElement = null;\r
- if (node.nodeType == 1)\r
- tinyMCE.selectedElement = node;\r
- },\r
-\r
- scrollToNode : function(node) {\r
- var inst = this.instance, w = inst.getWin(), vp = inst.getViewPort(), pos = tinyMCE.getAbsPosition(node), cvp, p, cwin;\r
-\r
- // Only scroll if out of visible area\r
- if (pos.absLeft < vp.left || pos.absLeft > vp.left + vp.width || pos.absTop < vp.top || pos.absTop > vp.top + (vp.height-25))\r
- w.scrollTo(pos.absLeft, pos.absTop - vp.height + 25);\r
-\r
- // Scroll container window\r
- if (inst.settings.auto_resize) {\r
- cwin = inst.getContainerWin();\r
- cvp = tinyMCE.getViewPort(cwin);\r
- p = this.getAbsPosition(node);\r
-\r
- if (p.absLeft < cvp.left || p.absLeft > cvp.left + cvp.width || p.absTop < cvp.top || p.absTop > cvp.top + cvp.height)\r
- cwin.scrollTo(p.absLeft, p.absTop - cvp.height + 25);\r
- }\r
- },\r
-\r
- getAbsPosition : function(n) {\r
- var pos = tinyMCE.getAbsPosition(n), ipos = tinyMCE.getAbsPosition(this.instance.iframeElement);\r
-\r
- return {\r
- absLeft : ipos.absLeft + pos.absLeft,\r
- absTop : ipos.absTop + pos.absTop\r
- };\r
- },\r
-\r
- getSel : function() {\r
- var inst = this.instance;\r
-\r
- if (tinyMCE.isRealIE)\r
- return inst.getDoc().selection;\r
-\r
- return inst.contentWindow.getSelection();\r
- },\r
-\r
- getRng : function() {\r
- var s = this.getSel();\r
-\r
- if (s == null)\r
- return null;\r
-\r
- if (tinyMCE.isRealIE)\r
- return s.createRange();\r
-\r
- if (tinyMCE.isSafari && !s.getRangeAt)\r
- return '' + window.getSelection();\r
-\r
- if (s.rangeCount > 0)\r
- return s.getRangeAt(0);\r
-\r
- return null;\r
- },\r
-\r
- isCollapsed : function() {\r
- var r = this.getRng();\r
-\r
- if (r.item)\r
- return false;\r
-\r
- return r.boundingWidth == 0 || this.getSel().isCollapsed;\r
- },\r
-\r
- collapse : function(b) {\r
- var r = this.getRng(), s = this.getSel();\r
-\r
- if (r.select) {\r
- r.collapse(b);\r
- r.select();\r
- } else {\r
- if (b)\r
- s.collapseToStart();\r
- else\r
- s.collapseToEnd();\r
- }\r
- },\r
-\r
- getFocusElement : function() {\r
- var inst = this.instance, doc, rng, sel, elm;\r
-\r
- if (tinyMCE.isRealIE) {\r
- doc = inst.getDoc();\r
- rng = doc.selection.createRange();\r
-\r
- // if (rng.collapse)\r
- // rng.collapse(true);\r
-\r
- elm = rng.item ? rng.item(0) : rng.parentElement();\r
- } else {\r
- if (!tinyMCE.isSafari && inst.isHidden())\r
- return inst.getBody();\r
-\r
- sel = this.getSel();\r
- rng = this.getRng();\r
-\r
- if (!sel || !rng)\r
- return null;\r
-\r
- elm = rng.commonAncestorContainer;\r
- //elm = (sel && sel.anchorNode) ? sel.anchorNode : null;\r
-\r
- // Handle selection a image or other control like element such as anchors\r
- if (!rng.collapsed) {\r
- // Is selection small\r
- if (rng.startContainer == rng.endContainer) {\r
- if (rng.startOffset - rng.endOffset < 2) {\r
- if (rng.startContainer.hasChildNodes())\r
- elm = rng.startContainer.childNodes[rng.startOffset];\r
- }\r
- }\r
- }\r
-\r
- // Get the element parent of the node\r
- elm = tinyMCE.getParentElement(elm);\r
-\r
- //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img")\r
- // elm = tinyMCE.selectedElement;\r
- }\r
-\r
- return elm;\r
- }\r
-\r
- };\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */\r
-\r
-function TinyMCE_UndoRedo(inst) {\r
- this.instance = inst;\r
- this.undoLevels = [];\r
- this.undoIndex = 0;\r
- this.typingUndoIndex = -1;\r
- this.undoRedo = true;\r
-};\r
-\r
-TinyMCE_UndoRedo.prototype = {\r
- add : function(l) {\r
- var b, customUndoLevels, newHTML, inst = this.instance, i, ul, ur;\r
-\r
- if (l) {\r
- this.undoLevels[this.undoLevels.length] = l;\r
- return true;\r
- }\r
-\r
- if (this.typingUndoIndex != -1) {\r
- this.undoIndex = this.typingUndoIndex;\r
-\r
- if (tinyMCE.typingUndoIndex != -1)\r
- tinyMCE.undoIndex = tinyMCE.typingUndoIndex;\r
- }\r
-\r
- newHTML = tinyMCE.trim(inst.getBody().innerHTML);\r
- if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) {\r
- //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex].content);\r
-\r
- // Is dirty again\r
- inst.isNotDirty = false;\r
-\r
- tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst);\r
-\r
- // Time to compress\r
- customUndoLevels = tinyMCE.settings.custom_undo_redo_levels;\r
- if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) {\r
- for (i=0; i<this.undoLevels.length-1; i++)\r
- this.undoLevels[i] = this.undoLevels[i+1];\r
-\r
- this.undoLevels.length--;\r
- this.undoIndex--;\r
-\r
- // Todo: Implement global undo/redo logic here\r
- }\r
-\r
- b = inst.undoBookmark;\r
-\r
- if (!b)\r
- b = inst.selection.getBookmark();\r
-\r
- this.undoIndex++;\r
- this.undoLevels[this.undoIndex] = {\r
- content : newHTML,\r
- bookmark : b\r
- };\r
-\r
- // Remove all above from global undo/redo\r
- ul = tinyMCE.undoLevels;\r
- for (i=tinyMCE.undoIndex + 1; i<ul.length; i++) {\r
- ur = ul[i].undoRedo;\r
-\r
- if (ur.undoIndex == ur.undoLevels.length -1)\r
- ur.undoIndex--;\r
-\r
- ur.undoLevels.length--;\r
- }\r
-\r
- // Add global undo level\r
- tinyMCE.undoLevels[tinyMCE.undoIndex++] = inst;\r
- tinyMCE.undoLevels.length = tinyMCE.undoIndex;\r
-\r
- this.undoLevels.length = this.undoIndex + 1;\r
-\r
- return true;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- undo : function() {\r
- var inst = this.instance;\r
-\r
- // Do undo\r
- if (this.undoIndex > 0) {\r
- this.undoIndex--;\r
-\r
- tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);\r
- inst.repaint();\r
-\r
- if (inst.settings.custom_undo_redo_restore_selection)\r
- inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);\r
- }\r
- },\r
-\r
- redo : function() {\r
- var inst = this.instance;\r
-\r
- tinyMCE.execCommand("mceEndTyping");\r
-\r
- if (this.undoIndex < (this.undoLevels.length-1)) {\r
- this.undoIndex++;\r
-\r
- tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);\r
- inst.repaint();\r
-\r
- if (inst.settings.custom_undo_redo_restore_selection)\r
- inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);\r
- }\r
-\r
- tinyMCE.triggerNodeChange();\r
- }\r
-\r
- };\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */\r
-\r
-var TinyMCE_ForceParagraphs = {\r
- _insertPara : function(inst, e) {\r
- var doc = inst.getDoc(), sel = inst.getSel(), body = inst.getBody(), win = inst.contentWindow, rng = sel.getRangeAt(0);\r
- var rootElm = doc.documentElement, blockName = "P", startNode, endNode, startBlock, endBlock;\r
- var rngBefore, rngAfter, direct, startNode, startOffset, endNode, endOffset, b = tinyMCE.isOpera ? inst.selection.getBookmark() : null;\r
- var paraBefore, paraAfter, startChop, endChop, contents, i;\r
-\r
- function isEmpty(para) {\r
- var nodes;\r
-\r
- function isEmptyHTML(html) {\r
- return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == '';\r
- }\r
-\r
- // Check for images\r
- if (para.getElementsByTagName("img").length > 0)\r
- return false;\r
-\r
- // Check for tables\r
- if (para.getElementsByTagName("table").length > 0)\r
- return false;\r
-\r
- // Check for HRs\r
- if (para.getElementsByTagName("hr").length > 0)\r
- return false;\r
-\r
- // Check all textnodes\r
- nodes = tinyMCE.getNodeTree(para, [], 3);\r
- for (i=0; i<nodes.length; i++) {\r
- if (!isEmptyHTML(nodes[i].nodeValue))\r
- return false;\r
- }\r
-\r
- // No images, no tables, no hrs, no text content then it's empty\r
- return true;\r
- }\r
-\r
- // tinyMCE.debug(body.innerHTML);\r
-\r
- // debug(e.target, sel.anchorNode.nodeName, sel.focusNode.nodeName, rng.startContainer, rng.endContainer, rng.commonAncestorContainer, sel.anchorOffset, sel.focusOffset, rng.toString());\r
-\r
- // Setup before range\r
- rngBefore = doc.createRange();\r
- rngBefore.setStart(sel.anchorNode, sel.anchorOffset);\r
- rngBefore.collapse(true);\r
-\r
- // Setup after range\r
- rngAfter = doc.createRange();\r
- rngAfter.setStart(sel.focusNode, sel.focusOffset);\r
- rngAfter.collapse(true);\r
-\r
- // Setup start/end points\r
- direct = rngBefore.compareBoundaryPoints(rngBefore.START_TO_END, rngAfter) < 0;\r
- startNode = direct ? sel.anchorNode : sel.focusNode;\r
- startOffset = direct ? sel.anchorOffset : sel.focusOffset;\r
- endNode = direct ? sel.focusNode : sel.anchorNode;\r
- endOffset = direct ? sel.focusOffset : sel.anchorOffset;\r
-\r
- startNode = startNode.nodeName == "BODY" ? startNode.firstChild : startNode;\r
- endNode = endNode.nodeName == "BODY" ? endNode.firstChild : endNode;\r
-\r
- // Get block elements\r
- startBlock = inst.getParentBlockElement(startNode);\r
- endBlock = inst.getParentBlockElement(endNode);\r
-\r
- // If absolute force paragraph generation within\r
- if (startBlock && (startBlock.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(startBlock.style.position)))\r
- startBlock = null;\r
-\r
- if (endBlock && (endBlock.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(endBlock.style.position)))\r
- endBlock = null;\r
-\r
- // Use current block name\r
- if (startBlock != null) {\r
- blockName = startBlock.nodeName;\r
-\r
- // Use P instead\r
- if (/(TD|TABLE|TH|CAPTION)/.test(blockName) || (blockName == "DIV" && /left|right/gi.test(startBlock.style.cssFloat)))\r
- blockName = "P";\r
- }\r
-\r
- // Within a list use normal behaviour\r
- if (tinyMCE.getParentElement(startBlock, "OL,UL", null, body) != null)\r
- return false;\r
-\r
- // Within a table create new paragraphs\r
- if ((startBlock != null && startBlock.nodeName == "TABLE") || (endBlock != null && endBlock.nodeName == "TABLE"))\r
- startBlock = endBlock = null;\r
-\r
- // Setup new paragraphs\r
- paraBefore = (startBlock != null && startBlock.nodeName == blockName) ? startBlock.cloneNode(false) : doc.createElement(blockName);\r
- paraAfter = (endBlock != null && endBlock.nodeName == blockName) ? endBlock.cloneNode(false) : doc.createElement(blockName);\r
-\r
- // Is header, then force paragraph under\r
- if (/^(H[1-6])$/.test(blockName))\r
- paraAfter = doc.createElement("p");\r
-\r
- // Setup chop nodes\r
- startChop = startNode;\r
- endChop = endNode;\r
-\r
- // Get startChop node\r
- node = startChop;\r
- do {\r
- if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))\r
- break;\r
-\r
- startChop = node;\r
- } while ((node = node.previousSibling ? node.previousSibling : node.parentNode));\r
-\r
- // Get endChop node\r
- node = endChop;\r
- do {\r
- if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))\r
- break;\r
-\r
- endChop = node;\r
- } while ((node = node.nextSibling ? node.nextSibling : node.parentNode));\r
-\r
- // Fix when only a image is within the TD\r
- if (startChop.nodeName == "TD")\r
- startChop = startChop.firstChild;\r
-\r
- if (endChop.nodeName == "TD")\r
- endChop = endChop.lastChild;\r
-\r
- // If not in a block element\r
- if (startBlock == null) {\r
- // Delete selection\r
- rng.deleteContents();\r
-\r
- if (!tinyMCE.isSafari)\r
- sel.removeAllRanges();\r
-\r
- if (startChop != rootElm && endChop != rootElm) {\r
- // Insert paragraph before\r
- rngBefore = rng.cloneRange();\r
-\r
- if (startChop == body)\r
- rngBefore.setStart(startChop, 0);\r
- else\r
- rngBefore.setStartBefore(startChop);\r
-\r
- paraBefore.appendChild(rngBefore.cloneContents());\r
-\r
- // Insert paragraph after\r
- if (endChop.parentNode.nodeName == blockName)\r
- endChop = endChop.parentNode;\r
-\r
- // If not after image\r
- //if (rng.startContainer.nodeName != "BODY" && rng.endContainer.nodeName != "BODY")\r
- rng.setEndAfter(endChop);\r
-\r
- if (endChop.nodeName != "#text" && endChop.nodeName != "BODY")\r
- rngBefore.setEndAfter(endChop);\r
-\r
- contents = rng.cloneContents();\r
- if (contents.firstChild && (contents.firstChild.nodeName == blockName || contents.firstChild.nodeName == "BODY"))\r
- paraAfter.innerHTML = contents.firstChild.innerHTML;\r
- else\r
- paraAfter.appendChild(contents);\r
-\r
- // Check if it's a empty paragraph\r
- if (isEmpty(paraBefore))\r
- paraBefore.innerHTML = " ";\r
-\r
- // Check if it's a empty paragraph\r
- if (isEmpty(paraAfter))\r
- paraAfter.innerHTML = " ";\r
-\r
- // Delete old contents\r
- rng.deleteContents();\r
- rngAfter.deleteContents();\r
- rngBefore.deleteContents();\r
-\r
- // Insert new paragraphs\r
- if (tinyMCE.isOpera) {\r
- paraBefore.normalize();\r
- rngBefore.insertNode(paraBefore);\r
- paraAfter.normalize();\r
- rngBefore.insertNode(paraAfter);\r
- } else {\r
- paraAfter.normalize();\r
- rngBefore.insertNode(paraAfter);\r
- paraBefore.normalize();\r
- rngBefore.insertNode(paraBefore);\r
- }\r
-\r
- //tinyMCE.debug("1: ", paraBefore.innerHTML, paraAfter.innerHTML);\r
- } else {\r
- body.innerHTML = "<" + blockName + "> </" + blockName + "><" + blockName + "> </" + blockName + ">";\r
- paraAfter = body.childNodes[1];\r
- }\r
-\r
- inst.selection.moveToBookmark(b);\r
- inst.selection.selectNode(paraAfter, true, true);\r
-\r
- return true;\r
- }\r
-\r
- // Place first part within new paragraph\r
- if (startChop.nodeName == blockName)\r
- rngBefore.setStart(startChop, 0);\r
- else\r
- rngBefore.setStartBefore(startChop);\r
-\r
- rngBefore.setEnd(startNode, startOffset);\r
- paraBefore.appendChild(rngBefore.cloneContents());\r
-\r
- // Place secound part within new paragraph\r
- rngAfter.setEndAfter(endChop);\r
- rngAfter.setStart(endNode, endOffset);\r
- contents = rngAfter.cloneContents();\r
-\r
- if (contents.firstChild && contents.firstChild.nodeName == blockName) {\r
- /* var nodes = contents.firstChild.childNodes;\r
- for (i=0; i<nodes.length; i++) {\r
- //tinyMCE.debug(nodes[i].nodeName);\r
- if (nodes[i].nodeName != "BODY")\r
- paraAfter.appendChild(nodes[i]);\r
- }\r
- */\r
- paraAfter.innerHTML = contents.firstChild.innerHTML;\r
- } else\r
- paraAfter.appendChild(contents);\r
-\r
- // Check if it's a empty paragraph\r
- if (isEmpty(paraBefore))\r
- paraBefore.innerHTML = " ";\r
-\r
- // Check if it's a empty paragraph\r
- if (isEmpty(paraAfter))\r
- paraAfter.innerHTML = " ";\r
-\r
- // Create a range around everything\r
- rng = doc.createRange();\r
-\r
- if (!startChop.previousSibling && startChop.parentNode.nodeName.toUpperCase() == blockName) {\r
- rng.setStartBefore(startChop.parentNode);\r
- } else {\r
- if (rngBefore.startContainer.nodeName.toUpperCase() == blockName && rngBefore.startOffset == 0)\r
- rng.setStartBefore(rngBefore.startContainer);\r
- else\r
- rng.setStart(rngBefore.startContainer, rngBefore.startOffset);\r
- }\r
-\r
- if (!endChop.nextSibling && endChop.parentNode.nodeName.toUpperCase() == blockName)\r
- rng.setEndAfter(endChop.parentNode);\r
- else\r
- rng.setEnd(rngAfter.endContainer, rngAfter.endOffset);\r
-\r
- // Delete all contents and insert new paragraphs\r
- rng.deleteContents();\r
-\r
- if (tinyMCE.isOpera) {\r
- rng.insertNode(paraBefore);\r
- rng.insertNode(paraAfter);\r
- } else {\r
- rng.insertNode(paraAfter);\r
- rng.insertNode(paraBefore);\r
- }\r
-\r
- //tinyMCE.debug("2", paraBefore.innerHTML, paraAfter.innerHTML);\r
-\r
- // Normalize\r
- paraAfter.normalize();\r
- paraBefore.normalize();\r
-\r
- inst.selection.moveToBookmark(b);\r
- inst.selection.selectNode(paraAfter, true, true);\r
-\r
- return true;\r
- },\r
-\r
- _handleBackSpace : function(inst) {\r
- var r = inst.getRng(), sn = r.startContainer, nv, s = false;\r
-\r
- // Added body check for bug #1527787\r
- if (sn && sn.nextSibling && sn.nextSibling.nodeName == "BR" && sn.parentNode.nodeName != "BODY") {\r
- nv = sn.nodeValue;\r
-\r
- // Handle if a backspace is pressed after a space character #bug 1466054 removed since fix for #1527787\r
- /*if (nv != null && nv.length >= r.startOffset && nv.charAt(r.startOffset - 1) == ' ')\r
- s = true;*/\r
-\r
- // Only remove BRs if we are at the end of line #bug 1464152\r
- if (nv != null && r.startOffset == nv.length)\r
- sn.nextSibling.parentNode.removeChild(sn.nextSibling);\r
- }\r
-\r
- if (inst.settings.auto_resize)\r
- inst.resizeToContent();\r
-\r
- return s;\r
- }\r
-\r
- };\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */\r
-\r
-function TinyMCE_Layer(id, bm) {\r
- this.id = id;\r
- this.blockerElement = null;\r
- this.events = false;\r
- this.element = null;\r
- this.blockMode = typeof(bm) != 'undefined' ? bm : true;\r
- this.doc = document;\r
-};\r
-\r
-TinyMCE_Layer.prototype = {\r
- moveRelativeTo : function(re, p) {\r
- var rep = this.getAbsPosition(re), e = this.getElement(), x, y;\r
- var w = parseInt(re.offsetWidth), h = parseInt(re.offsetHeight);\r
- var ew = parseInt(e.offsetWidth), eh = parseInt(e.offsetHeight);\r
-\r
- switch (p) {\r
- case "tl":\r
- x = rep.absLeft;\r
- y = rep.absTop;\r
- break;\r
-\r
- case "tr":\r
- x = rep.absLeft + w;\r
- y = rep.absTop;\r
- break;\r
-\r
- case "bl":\r
- x = rep.absLeft;\r
- y = rep.absTop + h;\r
- break;\r
-\r
- case "br":\r
- x = rep.absLeft + w;\r
- y = rep.absTop + h;\r
- break;\r
-\r
- case "cc":\r
- x = rep.absLeft + (w / 2) - (ew / 2);\r
- y = rep.absTop + (h / 2) - (eh / 2);\r
- break;\r
- }\r
-\r
- this.moveTo(x, y);\r
- },\r
-\r
- moveBy : function(x, y) {\r
- var e = this.getElement();\r
- this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y);\r
- },\r
-\r
- moveTo : function(x, y) {\r
- var e = this.getElement();\r
-\r
- e.style.left = x + "px";\r
- e.style.top = y + "px";\r
-\r
- this.updateBlocker();\r
- },\r
-\r
- resizeBy : function(w, h) {\r
- var e = this.getElement();\r
- this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h);\r
- },\r
-\r
- resizeTo : function(w, h) {\r
- var e = this.getElement();\r
-\r
- if (w != null)\r
- e.style.width = w + "px";\r
-\r
- if (h != null)\r
- e.style.height = h + "px";\r
-\r
- this.updateBlocker();\r
- },\r
-\r
- show : function() {\r
- var el = this.getElement();\r
-\r
- if (el) {\r
- el.style.display = 'block';\r
- this.updateBlocker();\r
- }\r
- },\r
-\r
- hide : function() {\r
- var el = this.getElement();\r
-\r
- if (el) {\r
- el.style.display = 'none';\r
- this.updateBlocker();\r
- }\r
- },\r
-\r
- isVisible : function() {\r
- return this.getElement().style.display == 'block';\r
- },\r
-\r
- getElement : function() {\r
- if (!this.element)\r
- this.element = this.doc.getElementById(this.id);\r
-\r
- return this.element;\r
- },\r
-\r
- setBlockMode : function(s) {\r
- this.blockMode = s;\r
- },\r
-\r
- updateBlocker : function() {\r
- var e, b, x, y, w, h;\r
-\r
- b = this.getBlocker();\r
- if (b) {\r
- if (this.blockMode) {\r
- e = this.getElement();\r
- x = this.parseInt(e.style.left);\r
- y = this.parseInt(e.style.top);\r
- w = this.parseInt(e.offsetWidth);\r
- h = this.parseInt(e.offsetHeight);\r
-\r
- b.style.left = x + 'px';\r
- b.style.top = y + 'px';\r
- b.style.width = w + 'px';\r
- b.style.height = h + 'px';\r
- b.style.display = e.style.display;\r
- } else\r
- b.style.display = 'none';\r
- }\r
- },\r
-\r
- getBlocker : function() {\r
- var d, b;\r
-\r
- if (!this.blockerElement && this.blockMode) {\r
- d = this.doc;\r
- b = d.getElementById(this.id + "_blocker");\r
-\r
- if (!b) {\r
- b = d.createElement("iframe");\r
-\r
- b.setAttribute('id', this.id + "_blocker");\r
- b.style.cssText = 'display: none; position: absolute; left: 0; top: 0';\r
- b.src = 'javascript:false;';\r
- b.frameBorder = '0';\r
- b.scrolling = 'no';\r
- \r
- d.body.appendChild(b);\r
- }\r
-\r
- this.blockerElement = b;\r
- }\r
-\r
- return this.blockerElement;\r
- },\r
-\r
- getAbsPosition : function(n) {\r
- var p = {absLeft : 0, absTop : 0};\r
-\r
- while (n) {\r
- p.absLeft += n.offsetLeft;\r
- p.absTop += n.offsetTop;\r
- n = n.offsetParent;\r
- }\r
-\r
- return p;\r
- },\r
-\r
- create : function(n, c, p, h) {\r
- var d = this.doc, e = d.createElement(n);\r
-\r
- e.setAttribute('id', this.id);\r
-\r
- if (c)\r
- e.className = c;\r
-\r
- if (!p)\r
- p = d.body;\r
-\r
- if (h)\r
- e.innerHTML = h;\r
-\r
- p.appendChild(e);\r
-\r
- return this.element = e;\r
- },\r
-\r
- exists : function() {\r
- return this.doc.getElementById(this.id) != null;\r
- },\r
-\r
- parseInt : function(s) {\r
- if (s == null || s == '')\r
- return 0;\r
-\r
- return parseInt(s);\r
- },\r
-\r
- remove : function() {\r
- var e = this.getElement(), b = this.getBlocker();\r
-\r
- if (e)\r
- e.parentNode.removeChild(e);\r
-\r
- if (b)\r
- b.parentNode.removeChild(b);\r
- }\r
-\r
- };\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */\r
-\r
-function TinyMCE_Menu() {\r
- var id;\r
-\r
- if (typeof(tinyMCE.menuCounter) == "undefined")\r
- tinyMCE.menuCounter = 0;\r
-\r
- id = "mc_menu_" + tinyMCE.menuCounter++;\r
-\r
- TinyMCE_Layer.call(this, id, true);\r
-\r
- this.id = id;\r
- this.items = [];\r
- this.needsUpdate = true;\r
-};\r
-\r
-TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, {\r
- init : function(s) {\r
- var n;\r
-\r
- // Default params\r
- this.settings = {\r
- separator_class : 'mceMenuSeparator',\r
- title_class : 'mceMenuTitle',\r
- disabled_class : 'mceMenuDisabled',\r
- menu_class : 'mceMenu',\r
- drop_menu : true\r
- };\r
-\r
- for (n in s)\r
- this.settings[n] = s[n];\r
-\r
- this.create('div', this.settings.menu_class);\r
- },\r
-\r
- clear : function() {\r
- this.items = [];\r
- },\r
-\r
- addTitle : function(t) {\r
- this.add({type : 'title', text : t});\r
- },\r
-\r
- addDisabled : function(t) {\r
- this.add({type : 'disabled', text : t});\r
- },\r
-\r
- addSeparator : function() {\r
- this.add({type : 'separator'});\r
- },\r
-\r
- addItem : function(t, js) {\r
- this.add({text : t, js : js});\r
- },\r
-\r
- add : function(mi) {\r
- this.items[this.items.length] = mi;\r
- this.needsUpdate = true;\r
- },\r
-\r
- update : function() {\r
- var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings;\r
-\r
- if (this.settings.drop_menu)\r
- h += '<span class="mceMenuLine"></span>';\r
-\r
- h += '<table border="0" cellpadding="0" cellspacing="0">';\r
-\r
- for (i=0; i<m.length; i++) {\r
- t = tinyMCE.xmlEncode(m[i].text);\r
- c = m[i].class_name ? ' class="' + m[i].class_name + '"' : '';\r
-\r
- switch (m[i].type) {\r
- case 'separator':\r
- h += '<tr class="' + s.separator_class + '"><td>';\r
- break;\r
-\r
- case 'title':\r
- h += '<tr class="' + s.title_class + '"><td><span' + c +'>' + t + '</span>';\r
- break;\r
-\r
- case 'disabled':\r
- h += '<tr class="' + s.disabled_class + '"><td><span' + c +'>' + t + '</span>';\r
- break;\r
-\r
- default:\r
- h += '<tr><td><a href="' + tinyMCE.xmlEncode(m[i].js) + '" onmousedown="' + tinyMCE.xmlEncode(m[i].js) + ';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span' + c +'>' + t + '</span></a>';\r
- }\r
-\r
- h += '</td></tr>';\r
- }\r
-\r
- h += '</table>';\r
-\r
- e.innerHTML = h;\r
-\r
- this.needsUpdate = false;\r
- this.updateBlocker();\r
- },\r
-\r
- show : function() {\r
- var nl, i;\r
-\r
- if (tinyMCE.lastMenu == this)\r
- return;\r
-\r
- if (this.needsUpdate)\r
- this.update();\r
-\r
- if (tinyMCE.lastMenu && tinyMCE.lastMenu != this)\r
- tinyMCE.lastMenu.hide();\r
-\r
- TinyMCE_Layer.prototype.show.call(this);\r
-\r
- if (!tinyMCE.isOpera) {\r
- // Accessibility stuff\r
-/* nl = this.getElement().getElementsByTagName("a");\r
- if (nl.length > 0)\r
- nl[0].focus();*/\r
- }\r
-\r
- tinyMCE.lastMenu = this;\r
- }\r
-\r
- });\r
-\r
-/* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */\r
-\r
-tinyMCE.add(TinyMCE_Engine, {\r
- debug : function() {\r
- var m = "", a, i, l = tinyMCE.log.length;\r
-\r
- for (i=0, a = this.debug.arguments; i<a.length; i++) {\r
- m += a[i];\r
-\r
- if (i<a.length-1)\r
- m += ', ';\r
- }\r
-\r
- if (l < 1000)\r
- tinyMCE.log[l] = "[debug] " + m;\r
- }\r
-\r
- });\r
-\r
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Engine.class.js */
+
+function TinyMCE_Engine() {
+ var ua;
+
+ this.majorVersion = "2";
+ this.minorVersion = "1.3";
+ this.releaseDate = "2007-11-27";
+
+ this.instances = [];
+ this.switchClassCache = [];
+ this.windowArgs = [];
+ this.loadedFiles = [];
+ this.pendingFiles = [];
+ this.loadingIndex = 0;
+ this.configs = [];
+ this.currentConfig = 0;
+ this.eventHandlers = [];
+ this.log = [];
+ this.undoLevels = [];
+ this.undoIndex = 0;
+ this.typingUndoIndex = -1;
+ this.settings = [];
+
+ // Browser check
+ ua = navigator.userAgent;
+ this.isMSIE = (navigator.appName == "Microsoft Internet Explorer");
+ this.isMSIE5 = this.isMSIE && (ua.indexOf('MSIE 5') != -1);
+ this.isMSIE5_0 = this.isMSIE && (ua.indexOf('MSIE 5.0') != -1);
+ this.isMSIE7 = this.isMSIE && (ua.indexOf('MSIE 7') != -1);
+ this.isGecko = ua.indexOf('Gecko') != -1; // Will also be true on Safari
+ this.isSafari = ua.indexOf('Safari') != -1;
+ this.isOpera = window['opera'] && opera.buildNumber ? true : false;
+ this.isMac = ua.indexOf('Mac') != -1;
+ this.isNS7 = ua.indexOf('Netscape/7') != -1;
+ this.isNS71 = ua.indexOf('Netscape/7.1') != -1;
+ this.dialogCounter = 0;
+ this.plugins = [];
+ this.themes = [];
+ this.menus = [];
+ this.loadedPlugins = [];
+ this.buttonMap = [];
+ this.isLoaded = false;
+
+ // Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those
+ if (this.isOpera) {
+ this.isMSIE = true;
+ this.isGecko = false;
+ this.isSafari = false;
+ }
+
+ this.isIE = this.isMSIE;
+ this.isRealIE = this.isMSIE && !this.isOpera;
+
+ // TinyMCE editor id instance counter
+ this.idCounter = 0;
+};
+
+TinyMCE_Engine.prototype = {
+ init : function(settings) {
+ var theme, nl, baseHREF = "", i, cssPath, entities, h, p, src, elements = [], head;
+
+ // IE 5.0x is no longer supported since 5.5, 6.0 and 7.0 now exists. We can't support old browsers forever, sorry.
+ if (this.isMSIE5_0)
+ return;
+
+ this.settings = settings;
+
+ // Check if valid browser has execcommand support
+ if (typeof(document.execCommand) == 'undefined')
+ return;
+
+ // Get script base path
+ if (!tinyMCE.baseURL) {
+ // Search through head
+ head = document.getElementsByTagName('head')[0];
+
+ if (head) {
+ for (i=0, nl = head.getElementsByTagName('script'); i<nl.length; i++)
+ elements.push(nl[i]);
+ }
+
+ // Search through rest of document
+ for (i=0, nl = document.getElementsByTagName('script'); i<nl.length; i++)
+ elements.push(nl[i]);
+
+ // If base element found, add that infront of baseURL
+ nl = document.getElementsByTagName('base');
+ for (i=0; i<nl.length; i++) {
+ if (nl[i].href)
+ baseHREF = nl[i].href;
+ }
+
+ for (i=0; i<elements.length; i++) {
+ if (elements[i].src && (elements[i].src.indexOf("tiny_mce.js") != -1 || elements[i].src.indexOf("tiny_mce_dev.js") != -1 || elements[i].src.indexOf("tiny_mce_src.js") != -1 || elements[i].src.indexOf("tiny_mce_gzip") != -1)) {
+ src = elements[i].src;
+
+ tinyMCE.srcMode = (src.indexOf('_src') != -1 || src.indexOf('_dev') != -1) ? '_src' : '';
+ tinyMCE.gzipMode = src.indexOf('_gzip') != -1;
+ src = src.substring(0, src.lastIndexOf('/'));
+
+ if (settings.exec_mode == "src" || settings.exec_mode == "normal")
+ tinyMCE.srcMode = settings.exec_mode == "src" ? '_src' : '';
+
+ // Force it absolute if page has a base href
+ if (baseHREF !== '' && src.indexOf('://') == -1)
+ tinyMCE.baseURL = baseHREF + src;
+ else
+ tinyMCE.baseURL = src;
+
+ break;
+ }
+ }
+ }
+
+ // Get document base path
+ this.documentBasePath = document.location.href;
+ if (this.documentBasePath.indexOf('?') != -1)
+ this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.indexOf('?'));
+ this.documentURL = this.documentBasePath;
+ this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.lastIndexOf('/'));
+
+ // If not HTTP absolute
+ if (tinyMCE.baseURL.indexOf('://') == -1 && tinyMCE.baseURL.charAt(0) != '/') {
+ // If site absolute
+ tinyMCE.baseURL = this.documentBasePath + "/" + tinyMCE.baseURL;
+ }
+
+ // Set default values on settings
+ this._def("mode", "none");
+ this._def("theme", "advanced");
+ this._def("plugins", "", true);
+ this._def("language", "en");
+ this._def("docs_language", this.settings.language);
+ this._def("elements", "");
+ this._def("textarea_trigger", "mce_editable");
+ this._def("editor_selector", "");
+ this._def("editor_deselector", "mceNoEditor");
+ this._def("valid_elements", "+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");
+ this._def("extended_valid_elements", "");
+ this._def("invalid_elements", "");
+ this._def("encoding", "");
+ this._def("urlconverter_callback", tinyMCE.getParam("urlconvertor_callback", "TinyMCE_Engine.prototype.convertURL"));
+ this._def("save_callback", "");
+ this._def("force_br_newlines", false);
+ this._def("force_p_newlines", true);
+ this._def("add_form_submit_trigger", true);
+ this._def("relative_urls", true);
+ this._def("remove_script_host", true);
+ this._def("focus_alert", true);
+ this._def("document_base_url", this.documentURL);
+ this._def("visual", true);
+ this._def("visual_table_class", "mceVisualAid");
+ this._def("setupcontent_callback", "");
+ this._def("fix_content_duplication", true);
+ this._def("custom_undo_redo", true);
+ this._def("custom_undo_redo_levels", -1);
+ this._def("custom_undo_redo_keyboard_shortcuts", true);
+ this._def("custom_undo_redo_restore_selection", true);
+ this._def("custom_undo_redo_global", false);
+ this._def("verify_html", true);
+ this._def("apply_source_formatting", false);
+ this._def("directionality", "ltr");
+ this._def("cleanup_on_startup", false);
+ this._def("inline_styles", false);
+ this._def("convert_newlines_to_brs", false);
+ this._def("auto_reset_designmode", true);
+ this._def("entities", "39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro", true);
+ this._def("entity_encoding", "named");
+ this._def("cleanup_callback", "");
+ this._def("add_unload_trigger", true);
+ this._def("ask", false);
+ this._def("nowrap", false);
+ this._def("auto_resize", false);
+ this._def("auto_focus", false);
+ this._def("cleanup", true);
+ this._def("remove_linebreaks", true);
+ this._def("button_tile_map", false);
+ this._def("submit_patch", true);
+ this._def("browsers", "msie,safari,gecko,opera", true);
+ this._def("dialog_type", "window");
+ this._def("accessibility_warnings", true);
+ this._def("accessibility_focus", true);
+ this._def("merge_styles_invalid_parents", "");
+ this._def("force_hex_style_colors", true);
+ this._def("trim_span_elements", true);
+ this._def("convert_fonts_to_spans", false);
+ this._def("doctype", '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');
+ this._def("font_size_classes", '');
+ this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true);
+ this._def("event_elements", 'a,img', true);
+ this._def("convert_urls", true);
+ this._def("table_inline_editing", false);
+ this._def("object_resizing", true);
+ this._def("custom_shortcuts", true);
+ this._def("convert_on_click", false);
+ this._def("content_css", '');
+ this._def("fix_list_elements", true);
+ this._def("fix_table_elements", false);
+ this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml');
+ this._def("hidden_tab_class", '');
+ this._def("display_tab_class", '');
+ this._def("gecko_spellcheck", false);
+ this._def("hide_selects_on_submit", true);
+ this._def("forced_root_block", false);
+ this._def("remove_trailing_nbsp", false);
+ this._def("save_on_tinymce_forms", false);
+
+ // Force strict loading mode to false on non Gecko browsers
+ if (this.isMSIE && !this.isOpera)
+ this.settings.strict_loading_mode = false;
+
+ // Browser check IE
+ if (this.isMSIE && this.settings.browsers.indexOf('msie') == -1)
+ return;
+
+ // Browser check Gecko
+ if (this.isGecko && this.settings.browsers.indexOf('gecko') == -1)
+ return;
+
+ // Browser check Safari
+ if (this.isSafari && this.settings.browsers.indexOf('safari') == -1)
+ return;
+
+ // Browser check Opera
+ if (this.isOpera && this.settings.browsers.indexOf('opera') == -1)
+ return;
+
+ // If not super absolute make it so
+ baseHREF = tinyMCE.settings.document_base_url;
+ h = document.location.href;
+ p = h.indexOf('://');
+ if (p > 0 && document.location.protocol != "file:") {
+ p = h.indexOf('/', p + 3);
+ h = h.substring(0, p);
+
+ if (baseHREF.indexOf('://') == -1)
+ baseHREF = h + baseHREF;
+
+ tinyMCE.settings.document_base_url = baseHREF;
+ tinyMCE.settings.document_base_prefix = h;
+ }
+
+ // Trim away query part
+ if (baseHREF.indexOf('?') != -1)
+ baseHREF = baseHREF.substring(0, baseHREF.indexOf('?'));
+
+ this.settings.base_href = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/";
+
+ theme = this.settings.theme;
+ this.inlineStrict = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';
+ this.inlineTransitional = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';
+ this.blockElms = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';
+ this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i");
+ this.posKeyCodes = [13,45,36,35,33,34,37,38,39,40];
+ this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL
+ this.uniqueTag = '<div id="mceTMPElement" style="display: none">TMP</div>';
+ this.callbacks = ['onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance'];
+
+ // Theme url
+ this.settings.theme_href = tinyMCE.baseURL + "/themes/" + theme;
+
+ if (!tinyMCE.isIE || tinyMCE.isOpera)
+ this.settings.force_br_newlines = false;
+
+ if (tinyMCE.getParam("popups_css", false)) {
+ cssPath = tinyMCE.getParam("popups_css", "");
+
+ // Is relative
+ if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')
+ this.settings.popups_css = this.documentBasePath + "/" + cssPath;
+ else
+ this.settings.popups_css = cssPath;
+ } else
+ this.settings.popups_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css";
+
+ if (tinyMCE.getParam("editor_css", false)) {
+ cssPath = tinyMCE.getParam("editor_css", "");
+
+ // Is relative
+ if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')
+ this.settings.editor_css = this.documentBasePath + "/" + cssPath;
+ else
+ this.settings.editor_css = cssPath;
+ } else {
+ if (this.settings.editor_css !== '')
+ this.settings.editor_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css";
+ }
+
+ // Only do this once
+ if (this.configs.length == 0) {
+ if (typeof(TinyMCECompressed) == "undefined") {
+ tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad);
+
+ if (tinyMCE.isRealIE) {
+ if (document.body)
+ tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad);
+ else
+ tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad);
+ }
+
+ tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad);
+ tinyMCE._addUnloadEvents();
+ }
+ }
+
+ this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings.theme + '/editor_template' + tinyMCE.srcMode + '.js');
+ this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings.language + '.js');
+ this.loadCSS(this.settings.editor_css);
+
+ // Add plugins
+ p = tinyMCE.getParam('plugins', '', true, ',');
+ if (p.length > 0) {
+ for (i=0; i<p.length; i++) {
+ if (p[i].charAt(0) != '-')
+ this.loadScript(tinyMCE.baseURL + '/plugins/' + p[i] + '/editor_plugin' + tinyMCE.srcMode + '.js');
+ }
+ }
+
+ // Setup entities
+ if (tinyMCE.getParam('entity_encoding') == 'named') {
+ settings.cleanup_entities = [];
+ entities = tinyMCE.getParam('entities', '', true, ',');
+ for (i=0; i<entities.length; i+=2)
+ settings.cleanup_entities['c' + entities[i]] = entities[i+1];
+ }
+
+ // Save away this config
+ settings.index = this.configs.length;
+ this.configs[this.configs.length] = settings;
+
+ // Start loading first one in chain
+ this.loadNextScript();
+
+ // Force flicker free CSS backgrounds in IE
+ if (this.isIE && !this.isOpera) {
+ try {
+ document.execCommand('BackgroundImageCache', false, true);
+ } catch (e) {
+ // Ignore
+ }
+ }
+
+ // Setup XML encoding regexps
+ this.xmlEncodeRe = new RegExp('[<>&"]', 'g');
+ },
+
+ _addUnloadEvents : function() {
+ var st = tinyMCE.settings.add_unload_trigger;
+
+ if (tinyMCE.isIE) {
+ if (st) {
+ tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler);
+ tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler);
+ }
+ } else {
+ if (st)
+ tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);});
+ }
+ },
+
+ _def : function(key, def_val, t) {
+ var v = tinyMCE.getParam(key, def_val);
+
+ v = t ? v.replace(/\s+/g, "") : v;
+
+ this.settings[key] = v;
+ },
+
+ hasPlugin : function(n) {
+ return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;
+ },
+
+ addPlugin : function(n, p) {
+ var op = this.plugins[n];
+
+ // Use the previous plugin object base URL used when loading external plugins
+ p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n;
+ this.plugins[n] = p;
+
+ this.loadNextScript();
+ },
+
+ setPluginBaseURL : function(n, u) {
+ var op = this.plugins[n];
+
+ if (op)
+ op.baseURL = u;
+ else
+ this.plugins[n] = {baseURL : u};
+ },
+
+ loadPlugin : function(n, u) {
+ u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u;
+ u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u;
+ this.plugins[n] = {baseURL : u};
+ this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js");
+ },
+
+ hasTheme : function(n) {
+ return typeof(this.themes[n]) != "undefined" && this.themes[n] != null;
+ },
+
+ addTheme : function(n, t) {
+ this.themes[n] = t;
+
+ this.loadNextScript();
+ },
+
+ addMenu : function(n, m) {
+ this.menus[n] = m;
+ },
+
+ hasMenu : function(n) {
+ return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;
+ },
+
+ loadScript : function(url) {
+ var i;
+
+ for (i=0; i<this.loadedFiles.length; i++) {
+ if (this.loadedFiles[i] == url)
+ return;
+ }
+
+ if (tinyMCE.settings.strict_loading_mode)
+ this.pendingFiles[this.pendingFiles.length] = url;
+ else
+ document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></script>');
+
+ this.loadedFiles[this.loadedFiles.length] = url;
+ },
+
+ loadNextScript : function() {
+ var d = document, se;
+
+ if (!tinyMCE.settings.strict_loading_mode)
+ return;
+
+ if (this.loadingIndex < this.pendingFiles.length) {
+ se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script');
+ se.setAttribute('language', 'javascript');
+ se.setAttribute('type', 'text/javascript');
+ se.setAttribute('src', this.pendingFiles[this.loadingIndex++]);
+
+ d.getElementsByTagName("head")[0].appendChild(se);
+ } else
+ this.loadingIndex = -1; // Done with loading
+ },
+
+ loadCSS : function(url) {
+ var ar = url.replace(/\s+/, '').split(',');
+ var lflen = 0, csslen = 0, skip = false;
+ var x = 0, i = 0, nl, le;
+
+ for (x = 0,csslen = ar.length; x<csslen; x++) {
+ if (ar[x] != null && ar[x] != 'null' && ar[x].length > 0) {
+ /* Make sure it doesn't exist. */
+ for (i=0, lflen=this.loadedFiles.length; i<lflen; i++) {
+ if (this.loadedFiles[i] == ar[x]) {
+ skip = true;
+ break;
+ }
+ }
+
+ if (!skip) {
+ if (tinyMCE.settings.strict_loading_mode) {
+ nl = document.getElementsByTagName("head");
+
+ le = document.createElement('link');
+ le.setAttribute('href', ar[x]);
+ le.setAttribute('rel', 'stylesheet');
+ le.setAttribute('type', 'text/css');
+
+ nl[0].appendChild(le);
+ } else
+ document.write('<link href="' + ar[x] + '" rel="stylesheet" type="text/css" />');
+
+ this.loadedFiles[this.loadedFiles.length] = ar[x];
+ }
+ }
+ }
+ },
+
+ importCSS : function(doc, css) {
+ var css_ary = css.replace(/\s+/, '').split(',');
+ var csslen, elm, headArr, x, css_file;
+
+ for (x = 0, csslen = css_ary.length; x<csslen; x++) {
+ css_file = css_ary[x];
+
+ if (css_file != null && css_file != 'null' && css_file.length > 0) {
+ // Is relative, make absolute
+ if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/')
+ css_file = this.documentBasePath + "/" + css_file;
+
+ if (typeof(doc.createStyleSheet) == "undefined") {
+ elm = doc.createElement("link");
+
+ elm.rel = "stylesheet";
+ elm.href = css_file;
+
+ if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0)
+ headArr[0].appendChild(elm);
+ } else
+ doc.createStyleSheet(css_file);
+ }
+ }
+ },
+
+ confirmAdd : function(e, settings) {
+ var elm = tinyMCE.isIE ? event.srcElement : e.target;
+ var elementId = elm.name ? elm.name : elm.id;
+
+ tinyMCE.settings = settings;
+
+ if (tinyMCE.settings.convert_on_click || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang.lang_edit_confirm)))
+ tinyMCE.addMCEControl(elm, elementId);
+
+ elm.setAttribute('mce_noask', 'true');
+ },
+
+ updateContent : function(form_element_name) {
+ var formElement, n, inst, doc;
+
+ // Find MCE instance linked to given form element and copy it's value
+ formElement = document.getElementById(form_element_name);
+ for (n in tinyMCE.instances) {
+ inst = tinyMCE.instances[n];
+
+ if (!tinyMCE.isInstance(inst))
+ continue;
+
+ inst.switchSettings();
+
+ if (inst.formElement == formElement) {
+ doc = inst.getDoc();
+
+ tinyMCE._setHTML(doc, inst.formElement.value);
+
+ if (!tinyMCE.isIE)
+ doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid);
+ }
+ }
+ },
+
+ addMCEControl : function(replace_element, form_element_name, target_document) {
+ var id = "mce_editor_" + tinyMCE.idCounter++;
+ var inst = new TinyMCE_Control(tinyMCE.settings);
+
+ inst.editorId = id;
+ this.instances[id] = inst;
+
+ inst._onAdd(replace_element, form_element_name, target_document);
+ },
+
+ removeInstance : function(ti) {
+ var t = [], n, i;
+
+ // Remove from instances
+ for (n in tinyMCE.instances) {
+ i = tinyMCE.instances[n];
+
+ if (tinyMCE.isInstance(i) && ti != i)
+ t[n] = i;
+ }
+
+ tinyMCE.instances = t;
+
+ // Remove from global undo/redo
+ n = [];
+ t = tinyMCE.undoLevels;
+
+ for (i=0; i<t.length; i++) {
+ if (t[i] != ti)
+ n.push(t[i]);
+ }
+
+ tinyMCE.undoLevels = n;
+ tinyMCE.undoIndex = n.length;
+
+ // Dispatch remove instance call
+ tinyMCE.dispatchCallback(ti, 'remove_instance_callback', 'removeInstance', ti);
+
+ return ti;
+ },
+
+ removeMCEControl : function(editor_id) {
+ var inst = tinyMCE.getInstanceById(editor_id), h, re, ot, tn, n;
+
+ if (inst) {
+ inst.switchSettings();
+
+ editor_id = inst.editorId;
+ h = tinyMCE.getContent(editor_id);
+
+ this.removeInstance(inst);
+
+ tinyMCE.selectedElement = null;
+ tinyMCE.selectedInstance = null;
+
+ tinyMCE.selectedElement = null;
+ tinyMCE.selectedInstance = null;
+
+ // Try finding an instance
+ for (n in tinyMCE.instances) {
+ if (!tinyMCE.isInstance(tinyMCE.instances[n]))
+ continue;
+
+ tinyMCE.selectedInstance = tinyMCE.instances[n];
+ break;
+ }
+
+ // Remove element
+ re = document.getElementById(editor_id + "_parent");
+ ot = inst.oldTargetElement;
+ tn = ot.nodeName.toLowerCase();
+
+ if (tn == "textarea" || tn == "input") {
+ re.parentNode.removeChild(re);
+ ot.style.display = "inline";
+ ot.value = h;
+ } else {
+ ot.innerHTML = h;
+ ot.style.display = 'block';
+ re.parentNode.insertBefore(ot, re);
+ re.parentNode.removeChild(re);
+ }
+ }
+ },
+
+ triggerSave : function(skip_cleanup, skip_callback) {
+ var inst, n;
+
+ // Default to false
+ if (typeof(skip_cleanup) == "undefined")
+ skip_cleanup = false;
+
+ // Default to false
+ if (typeof(skip_callback) == "undefined")
+ skip_callback = false;
+
+ // Cleanup and set all form fields
+ for (n in tinyMCE.instances) {
+ inst = tinyMCE.instances[n];
+
+ if (!tinyMCE.isInstance(inst))
+ continue;
+
+ inst.triggerSave(skip_cleanup, skip_callback);
+ }
+ },
+
+ resetForm : function(form_index) {
+ var i, inst, n, formObj = document.forms[form_index];
+
+ for (n in tinyMCE.instances) {
+ inst = tinyMCE.instances[n];
+
+ if (!tinyMCE.isInstance(inst))
+ continue;
+
+ inst.switchSettings();
+
+ for (i=0; i<formObj.elements.length; i++) {
+ if (inst.formTargetElementId == formObj.elements[i].name)
+ inst.getBody().innerHTML = inst.startContent;
+ }
+ }
+ },
+
+ execInstanceCommand : function(editor_id, command, user_interface, value, focus) {
+ var inst = tinyMCE.getInstanceById(editor_id), r;
+
+ if (inst) {
+ r = inst.selection.getRng();
+
+ if (typeof(focus) == "undefined")
+ focus = true;
+
+ // IE bug lost focus on images in absolute divs Bug #1534575
+ if (focus && (!r || !r.item))
+ inst.contentWindow.focus();
+
+ // Reset design mode if lost
+ inst.autoResetDesignMode();
+
+ this.selectedElement = inst.getFocusElement();
+ inst.select();
+ tinyMCE.execCommand(command, user_interface, value);
+
+ // Cancel event so it doesn't call onbeforeonunlaod
+ if (tinyMCE.isIE && window.event != null)
+ tinyMCE.cancelEvent(window.event);
+ }
+ },
+
+ execCommand : function(command, user_interface, value) {
+ var inst = tinyMCE.selectedInstance, n, pe, te;
+
+ // Default input
+ user_interface = user_interface ? user_interface : false;
+ value = value ? value : null;
+
+ if (inst)
+ inst.switchSettings();
+
+ switch (command) {
+ case "Undo":
+ if (this.getParam('custom_undo_redo_global')) {
+ if (this.undoIndex > 0) {
+ tinyMCE.nextUndoRedoAction = 'Undo';
+ inst = this.undoLevels[--this.undoIndex];
+ inst.select();
+
+ if (!tinyMCE.nextUndoRedoInstanceId)
+ inst.execCommand('Undo');
+ }
+ } else
+ inst.execCommand('Undo');
+ return true;
+
+ case "Redo":
+ if (this.getParam('custom_undo_redo_global')) {
+ if (this.undoIndex <= this.undoLevels.length - 1) {
+ tinyMCE.nextUndoRedoAction = 'Redo';
+ inst = this.undoLevels[this.undoIndex++];
+ inst.select();
+
+ if (!tinyMCE.nextUndoRedoInstanceId)
+ inst.execCommand('Redo');
+ }
+ } else
+ inst.execCommand('Redo');
+
+ return true;
+
+ case 'mceFocus':
+ inst = tinyMCE.getInstanceById(value);
+
+ if (inst)
+ inst.getWin().focus();
+ return;
+
+ case "mceAddControl":
+ case "mceAddEditor":
+ tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);
+ return;
+
+ case "mceAddFrameControl":
+ tinyMCE.addMCEControl(tinyMCE._getElementById(value.element, value.document), value.element, value.document);
+ return;
+
+ case "mceRemoveControl":
+ case "mceRemoveEditor":
+ tinyMCE.removeMCEControl(value);
+ return;
+
+ case "mceToggleEditor":
+ inst = tinyMCE.getInstanceById(value);
+
+ if (inst) {
+ pe = document.getElementById(inst.editorId + '_parent');
+ te = inst.oldTargetElement;
+
+ if (typeof(inst.enabled) == 'undefined')
+ inst.enabled = true;
+
+ inst.enabled = !inst.enabled;
+
+ if (!inst.enabled) {
+ pe.style.display = 'none';
+
+ if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT')
+ te.value = inst.getHTML();
+ else
+ te.innerHTML = inst.getHTML();
+
+ te.style.display = inst.oldTargetDisplay;
+ tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst);
+ } else {
+ pe.style.display = 'block';
+ te.style.display = 'none';
+
+ if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT')
+ inst.setHTML(te.value);
+ else
+ inst.setHTML(te.innerHTML);
+
+ inst.useCSS = false;
+ tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst);
+ }
+ } else
+ tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);
+
+ return;
+
+ case "mceResetDesignMode":
+ // Resets the designmode state of the editors in Gecko
+ if (tinyMCE.isGecko) {
+ for (n in tinyMCE.instances) {
+ if (!tinyMCE.isInstance(tinyMCE.instances[n]))
+ continue;
+
+ try {
+ tinyMCE.instances[n].getDoc().designMode = "off";
+ tinyMCE.instances[n].getDoc().designMode = "on";
+ tinyMCE.instances[n].useCSS = false;
+ } catch (e) {
+ // Ignore any errors
+ }
+ }
+ }
+
+ return;
+ }
+
+ if (inst) {
+ inst.execCommand(command, user_interface, value);
+ } else if (tinyMCE.settings.focus_alert)
+ alert(tinyMCELang.lang_focus_alert);
+ },
+
+ _createIFrame : function(replace_element, doc, win) {
+ var iframe, id = replace_element.getAttribute("id");
+ var aw, ah;
+
+ if (typeof(doc) == "undefined")
+ doc = document;
+
+ if (typeof(win) == "undefined")
+ win = window;
+
+ iframe = doc.createElement("iframe");
+
+ aw = "" + tinyMCE.settings.area_width;
+ ah = "" + tinyMCE.settings.area_height;
+
+ if (aw.indexOf('%') == -1) {
+ aw = parseInt(aw);
+ aw = (isNaN(aw) || aw < 0) ? 300 : aw;
+ aw = aw + "px";
+ }
+
+ if (ah.indexOf('%') == -1) {
+ ah = parseInt(ah);
+ ah = (isNaN(ah) || ah < 0) ? 240 : ah;
+ ah = ah + "px";
+ }
+
+ iframe.setAttribute("id", id);
+ iframe.setAttribute("name", id);
+ iframe.setAttribute("class", "mceEditorIframe");
+ iframe.setAttribute("border", "0");
+ iframe.setAttribute("frameBorder", "0");
+ iframe.setAttribute("marginWidth", "0");
+ iframe.setAttribute("marginHeight", "0");
+ iframe.setAttribute("leftMargin", "0");
+ iframe.setAttribute("topMargin", "0");
+ iframe.setAttribute("width", aw);
+ iframe.setAttribute("height", ah);
+ iframe.setAttribute("allowtransparency", "true");
+ iframe.className = 'mceEditorIframe';
+
+ if (tinyMCE.settings.auto_resize)
+ iframe.setAttribute("scrolling", "no");
+
+ // Must have a src element in MSIE HTTPs breaks aswell as absoute URLs
+ if (tinyMCE.isRealIE)
+ iframe.setAttribute("src", this.settings.default_document);
+
+ iframe.style.width = aw;
+ iframe.style.height = ah;
+
+ // Ugly hack for Gecko problem in strict mode
+ if (tinyMCE.settings.strict_loading_mode)
+ iframe.style.marginBottom = '-5px';
+
+ // MSIE 5.0 issue
+ if (tinyMCE.isRealIE)
+ replace_element.outerHTML = iframe.outerHTML;
+ else
+ replace_element.parentNode.replaceChild(iframe, replace_element);
+
+ if (tinyMCE.isRealIE)
+ return win.frames[id];
+ else
+ return iframe;
+ },
+
+ setupContent : function(editor_id) {
+ var inst = tinyMCE.instances[editor_id], i, doc = inst.getDoc(), head = doc.getElementsByTagName('head').item(0);
+ var content = inst.startContent, contentElement, body;
+
+ // HTML values get XML encoded in strict mode
+ if (tinyMCE.settings.strict_loading_mode) {
+ content = content.replace(/</g, '<');
+ content = content.replace(/>/g, '>');
+ content = content.replace(/"/g, '"');
+ content = content.replace(/&/g, '&');
+ }
+
+ tinyMCE.selectedInstance = inst;
+ inst.switchSettings();
+
+ // Not loaded correctly hit it again, Mozilla bug #997860
+ if (!tinyMCE.isIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") {
+ // This part will remove the designMode status
+ // Failes first time in Firefox 1.5b2 on Mac
+ try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {}
+ window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000);
+ return;
+ }
+
+ // Wait for it to load
+ if (!head || !doc.body) {
+ window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10);
+ return;
+ }
+
+ // Import theme specific content CSS the user specific
+ tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings.theme + "/css/editor_content.css");
+ tinyMCE.importCSS(inst.getDoc(), inst.settings.content_css);
+ tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst);
+
+ // Setup keyboard shortcuts
+ if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) {
+ inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo');
+ inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo');
+ }
+
+ // BlockFormat shortcuts keys
+ for (i=1; i<=6; i++)
+ inst.addShortcut('ctrl', '' + i, '', 'FormatBlock', false, '<h' + i + '>');
+
+ inst.addShortcut('ctrl', '7', '', 'FormatBlock', false, '<p>');
+ inst.addShortcut('ctrl', '8', '', 'FormatBlock', false, '<div>');
+ inst.addShortcut('ctrl', '9', '', 'FormatBlock', false, '<address>');
+
+ // Add default shortcuts for gecko
+ if (tinyMCE.isGecko) {
+ inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold');
+ inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic');
+ inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline');
+ }
+
+ // Setup span styles
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ inst.getBody().setAttribute('id', 'mceSpanFonts');
+
+ if (tinyMCE.settings.nowrap)
+ doc.body.style.whiteSpace = "nowrap";
+
+ doc.body.dir = this.settings.directionality;
+ doc.editorId = editor_id;
+
+ // Add on document element in Mozilla
+ if (!tinyMCE.isIE)
+ doc.documentElement.editorId = editor_id;
+
+ inst.setBaseHREF(tinyMCE.settings.base_href);
+
+ // Replace new line characters to BRs
+ if (tinyMCE.settings.convert_newlines_to_brs) {
+ content = tinyMCE.regexpReplace(content, "\r\n", "<br />", "gi");
+ content = tinyMCE.regexpReplace(content, "\r", "<br />", "gi");
+ content = tinyMCE.regexpReplace(content, "\n", "<br />", "gi");
+ }
+
+ // Open closed anchors
+ // content = content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');
+
+ // Call custom cleanup code
+ content = tinyMCE.storeAwayURLs(content);
+ content = tinyMCE._customCleanup(inst, "insert_to_editor", content);
+
+ if (tinyMCE.isIE) {
+ // Ugly!!!
+ window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500);
+
+ if (tinyMCE.settings.force_br_newlines)
+ doc.styleSheets[0].addRule("p", "margin: 0;");
+
+ body = inst.getBody();
+ body.editorId = editor_id;
+ }
+
+ content = tinyMCE.cleanupHTMLCode(content);
+
+ // Fix for bug #958637
+ if (!tinyMCE.isIE) {
+ contentElement = inst.getDoc().createElement("body");
+ doc = inst.getDoc();
+
+ contentElement.innerHTML = content;
+
+ if (tinyMCE.settings.cleanup_on_startup)
+ tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement));
+ else
+ tinyMCE.setInnerHTML(inst.getBody(), content);
+
+ tinyMCE.convertAllRelativeURLs(inst.getBody());
+ } else {
+ if (tinyMCE.settings.cleanup_on_startup) {
+ tinyMCE._setHTML(inst.getDoc(), content);
+
+ // Produces permission denied error in MSIE 5.5
+ try {
+ tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));
+ } catch(e) {
+ // Ignore
+ }
+ } else
+ tinyMCE._setHTML(inst.getDoc(), content);
+ }
+
+ // Fix for bug #957681
+ //inst.getDoc().designMode = inst.getDoc().designMode;
+
+ tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings.visual, inst);
+ tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc());
+
+ // Re-add design mode on mozilla
+ if (!tinyMCE.isIE)
+ tinyMCE.addEventHandlers(inst);
+
+ // Add blur handler
+ if (tinyMCE.isIE) {
+ tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch);
+ tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953
+
+ // Workaround for drag drop/copy paste base href bug
+ if (!tinyMCE.isOpera) {
+ tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove);
+ tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch);
+ tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch);
+ }
+ }
+
+ // Trigger node change, this call locks buttons for tables and so forth
+ inst.select();
+ tinyMCE.selectedElement = inst.contentWindow.document.body;
+
+ // Call custom DOM cleanup
+ tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody());
+ tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody());
+ tinyMCE._setEventsEnabled(inst.getBody(), false);
+ tinyMCE.cleanupAnchors(inst.getDoc());
+
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ tinyMCE.convertSpansToFonts(inst.getDoc());
+
+ inst.startContent = tinyMCE.trim(inst.getBody().innerHTML);
+ inst.undoRedo.add({ content : inst.startContent });
+
+ // Cleanup any mess left from storyAwayURLs
+ if (tinyMCE.isGecko) {
+ // Remove mce_src from textnodes and comments
+ tinyMCE.selectNodes(inst.getBody(), function(n) {
+ if (n.nodeType == 3 || n.nodeType == 8)
+ n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), "");
+
+ return false;
+ });
+ }
+
+ // Remove Gecko spellchecking
+ if (tinyMCE.isGecko)
+ inst.getBody().spellcheck = tinyMCE.getParam("gecko_spellcheck");
+
+ // Cleanup any mess left from storyAwayURLs
+ tinyMCE._removeInternal(inst.getBody());
+
+ inst.select();
+ tinyMCE.triggerNodeChange(false, true);
+ },
+
+ storeAwayURLs : function(s) {
+ // Remove all mce_src, mce_href and replace them with new ones
+ // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');
+ // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');
+
+ if (!s.match(/(mce_src|mce_href)/gi, s)) {
+ s = s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']', 'gi'), 'src="$1" mce_src="$1"');
+ s = s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']', 'gi'), 'href="$1" mce_href="$1"');
+ }
+
+ return s;
+ },
+
+ _removeInternal : function(n) {
+ if (tinyMCE.isGecko) {
+ // Remove mce_src from textnodes and comments
+ tinyMCE.selectNodes(n, function(n) {
+ if (n.nodeType == 3 || n.nodeType == 8)
+ n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), "");
+
+ return false;
+ });
+ }
+ },
+
+ removeTinyMCEFormElements : function(form_obj) {
+ var i, elementId;
+
+ // Skip form element removal
+ if (!tinyMCE.getParam('hide_selects_on_submit'))
+ return;
+
+ // Check if form is valid
+ if (typeof(form_obj) == "undefined" || form_obj == null)
+ return;
+
+ // If not a form, find the form
+ if (form_obj.nodeName != "FORM") {
+ if (form_obj.form)
+ form_obj = form_obj.form;
+ else
+ form_obj = tinyMCE.getParentElement(form_obj, "form");
+ }
+
+ // Still nothing
+ if (form_obj == null)
+ return;
+
+ // Disable all UI form elements that TinyMCE created
+ for (i=0; i<form_obj.elements.length; i++) {
+ elementId = form_obj.elements[i].name ? form_obj.elements[i].name : form_obj.elements[i].id;
+
+ if (elementId.indexOf('mce_editor_') == 0)
+ form_obj.elements[i].disabled = true;
+ }
+ },
+
+ handleEvent : function(e) {
+ var inst = tinyMCE.selectedInstance, i, elm, keys;
+
+ // Remove odd, error
+ if (typeof(tinyMCE) == "undefined")
+ return true;
+
+ //tinyMCE.debug(e.type + " " + e.target.nodeName + " " + (e.relatedTarget ? e.relatedTarget.nodeName : ""));
+
+ if (tinyMCE.executeCallback(tinyMCE.selectedInstance, 'handle_event_callback', 'handleEvent', e))
+ return false;
+
+ switch (e.type) {
+ case "beforedeactivate": // Was added due to bug #1439953
+ case "blur":
+ if (tinyMCE.selectedInstance)
+ tinyMCE.selectedInstance.execCommand('mceEndTyping');
+
+ tinyMCE.hideMenus();
+
+ return;
+
+ // Workaround for drag drop/copy paste base href bug
+ case "drop":
+ case "beforepaste":
+/* if (tinyMCE.selectedInstance)
+ tinyMCE.selectedInstance.setBaseHREF(null);
+
+ // Fixes odd MSIE bug where drag/droping elements in a iframe with height 100% breaks
+ // This logic forces the width/height to be in pixels while the user is drag/dropping
+ // NOTE: This has been disabled for now since it messes up copy/paste that is far more important than image drag
+ if (tinyMCE.isRealIE) {
+ var ife = tinyMCE.selectedInstance.iframeElement;
+
+ if (ife.style.height.indexOf('%') != -1) {
+ ife._oldHeight = ife.style.height;
+ ife.style.height = ife.clientHeight;
+ }
+ }
+
+ window.setTimeout("tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings.base_href);tinyMCE._resetIframeHeight();", 1);
+ */
+ return;
+
+ case "submit":
+ tinyMCE.formSubmit(tinyMCE.isMSIE ? window.event.srcElement : e.target);
+ return;
+
+ case "reset":
+ var formObj = tinyMCE.isIE ? window.event.srcElement : e.target;
+
+ for (i=0; i<document.forms.length; i++) {
+ if (document.forms[i] == formObj)
+ window.setTimeout('tinyMCE.resetForm(' + i + ');', 10);
+ }
+
+ return;
+
+ case "keypress":
+ if (inst && inst.handleShortcut(e))
+ return false;
+
+ if (e.target.editorId) {
+ tinyMCE.instances[e.target.editorId].select();
+ } else {
+ if (e.target.ownerDocument.editorId)
+ tinyMCE.instances[e.target.ownerDocument.editorId].select();
+ }
+
+ if (tinyMCE.selectedInstance)
+ tinyMCE.selectedInstance.switchSettings();
+
+ // Insert P element
+ if ((tinyMCE.isGecko || tinyMCE.isOpera || tinyMCE.isSafari) && tinyMCE.settings.force_p_newlines && e.keyCode == 13 && !e.shiftKey) {
+ // Insert P element instead of BR
+ if (TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance, e)) {
+ // Cancel event
+ tinyMCE.execCommand("mceAddUndoLevel");
+ return tinyMCE.cancelEvent(e);
+ }
+ }
+
+ // Handle backspace
+ if ((tinyMCE.isGecko && !tinyMCE.isSafari) && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
+ // Insert P element instead of BR
+ if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
+ // Cancel event
+ tinyMCE.execCommand("mceAddUndoLevel");
+ return tinyMCE.cancelEvent(e);
+ }
+ }
+
+ // Return key pressed
+ if (tinyMCE.isIE && tinyMCE.settings.force_br_newlines && e.keyCode == 13) {
+ if (e.target.editorId)
+ tinyMCE.instances[e.target.editorId].select();
+
+ if (tinyMCE.selectedInstance) {
+ var sel = tinyMCE.selectedInstance.getDoc().selection;
+ var rng = sel.createRange();
+
+ if (tinyMCE.getParentElement(rng.parentElement(), "li") != null)
+ return false;
+
+ // Cancel event
+ e.returnValue = false;
+ e.cancelBubble = true;
+
+ // Insert BR element
+ rng.pasteHTML("<br />");
+ rng.collapse(false);
+ rng.select();
+
+ tinyMCE.execCommand("mceAddUndoLevel");
+ tinyMCE.triggerNodeChange(false);
+ return false;
+ }
+ }
+
+ // Backspace or delete
+ if (e.keyCode == 8 || e.keyCode == 46) {
+ tinyMCE.selectedElement = e.target;
+ tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a");
+ tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img");
+ tinyMCE.triggerNodeChange(false);
+ }
+
+ return false;
+
+ case "keyup":
+ case "keydown":
+ tinyMCE.hideMenus();
+ tinyMCE.hasMouseMoved = false;
+
+ if (inst && inst.handleShortcut(e))
+ return false;
+
+ inst._fixRootBlocks();
+
+ if (inst.settings.remove_trailing_nbsp)
+ inst._fixTrailingNbsp();
+
+ if (e.target.editorId)
+ tinyMCE.instances[e.target.editorId].select();
+
+ if (tinyMCE.selectedInstance)
+ tinyMCE.selectedInstance.switchSettings();
+
+ inst = tinyMCE.selectedInstance;
+
+ // Handle backspace
+ if (tinyMCE.isGecko && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
+ // Insert P element instead of BR
+ if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
+ // Cancel event
+ tinyMCE.execCommand("mceAddUndoLevel");
+ e.preventDefault();
+ return false;
+ }
+ }
+
+ tinyMCE.selectedElement = null;
+ tinyMCE.selectedNode = null;
+ elm = tinyMCE.selectedInstance.getFocusElement();
+ tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a");
+ tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img");
+ tinyMCE.selectedElement = elm;
+
+ // Update visualaids on tabs
+ if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9)
+ tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings.visual, tinyMCE.selectedInstance);
+
+ // Fix empty elements on return/enter, check where enter occured
+ if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13)
+ tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement();
+
+ // Fix empty elements on return/enter
+ if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) {
+ elm = tinyMCE.enterKeyElement;
+ if (elm) {
+ var re = new RegExp('^HR|IMG|BR$','g'); // Skip these
+ var dre = new RegExp('^H[1-6]$','g'); // Add double on these
+
+ if (!elm.hasChildNodes() && !re.test(elm.nodeName)) {
+ if (dre.test(elm.nodeName))
+ elm.innerHTML = " ";
+ else
+ elm.innerHTML = " ";
+ }
+ }
+ }
+
+ // Check if it's a position key
+ keys = tinyMCE.posKeyCodes;
+ var posKey = false;
+ for (i=0; i<keys.length; i++) {
+ if (keys[i] == e.keyCode) {
+ posKey = true;
+ break;
+ }
+ }
+
+ // MSIE custom key handling
+ if (tinyMCE.isIE && tinyMCE.settings.custom_undo_redo) {
+ keys = [8, 46]; // Backspace,Delete
+
+ for (i=0; i<keys.length; i++) {
+ if (keys[i] == e.keyCode) {
+ if (e.type == "keyup")
+ tinyMCE.triggerNodeChange(false);
+ }
+ }
+ }
+
+ // If Ctrl key
+ if (e.keyCode == 17)
+ return true;
+
+ // Handle Undo/Redo when typing content
+
+ if (tinyMCE.isGecko) {
+ // Start typing (not a position key or ctrl key, but ctrl+x and ctrl+p is ok)
+ if (!posKey && e.type == "keyup" && !e.ctrlKey || (e.ctrlKey && (e.keyCode == 86 || e.keyCode == 88)))
+ tinyMCE.execCommand("mceStartTyping");
+ } else {
+ // IE seems to be working better with this setting
+ if (!posKey && e.type == "keyup")
+ tinyMCE.execCommand("mceStartTyping");
+ }
+
+ // Store undo bookmark
+ if (e.type == "keydown" && (posKey || e.ctrlKey) && inst)
+ inst.undoBookmark = inst.selection.getBookmark();
+
+ // End typing (position key) or some Ctrl event
+ if (e.type == "keyup" && (posKey || e.ctrlKey))
+ tinyMCE.execCommand("mceEndTyping");
+
+ if (posKey && e.type == "keyup")
+ tinyMCE.triggerNodeChange(false);
+
+ if (tinyMCE.isIE && e.ctrlKey)
+ window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+ break;
+
+ case "mousedown":
+ case "mouseup":
+ case "click":
+ case "dblclick":
+ case "focus":
+ tinyMCE.hideMenus();
+
+ if (tinyMCE.selectedInstance) {
+ tinyMCE.selectedInstance.switchSettings();
+ tinyMCE.selectedInstance.isFocused = true;
+ }
+
+ // Check instance event trigged on
+ var targetBody = tinyMCE.getParentElement(e.target, "html");
+ for (var instanceName in tinyMCE.instances) {
+ if (!tinyMCE.isInstance(tinyMCE.instances[instanceName]))
+ continue;
+
+ inst = tinyMCE.instances[instanceName];
+
+ // Reset design mode if lost (on everything just in case)
+ inst.autoResetDesignMode();
+
+ // Use HTML element since users might click outside of body element
+ if (inst.getBody().parentNode == targetBody) {
+ inst.select();
+ tinyMCE.selectedElement = e.target;
+ tinyMCE.linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");
+ tinyMCE.imgElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "img");
+ break;
+ }
+ }
+
+ // Add first bookmark location
+ if (!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark && (e.type == "mouseup" || e.type == "dblclick"))
+ tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark = tinyMCE.selectedInstance.selection.getBookmark();
+
+ // Reset selected node
+ if (e.type != "focus")
+ tinyMCE.selectedNode = null;
+
+ tinyMCE.triggerNodeChange(false);
+ tinyMCE.execCommand("mceEndTyping");
+
+ if (e.type == "mouseup")
+ tinyMCE.execCommand("mceAddUndoLevel");
+
+ // Just in case
+ if (!tinyMCE.selectedInstance && e.target.editorId)
+ tinyMCE.instances[e.target.editorId].select();
+
+ return false;
+ }
+ },
+
+ getButtonHTML : function(id, lang, img, cmd, ui, val) {
+ var h = '', m, x, io = '';
+
+ cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
+
+ if (typeof(ui) != "undefined" && ui != null)
+ cmd += ',' + ui;
+
+ if (typeof(val) != "undefined" && val != null)
+ cmd += ",'" + val + "'";
+
+ cmd += ');';
+
+ // Patch for IE7 bug with hover out not restoring correctly
+ if (tinyMCE.isRealIE)
+ io = 'onmouseover="tinyMCE.lastHover = this;"';
+
+ // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
+ if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = this.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
+ // Tiled button
+ x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
+ h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" ' + io + ' class="mceTiledButton mceButtonNormal" target="_self">';
+ h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" alt="{$'+lang+'}" title="{$' + lang + '}" />';
+ h += '</a>';
+ } else {
+ // Normal button
+ h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" ' + io + ' class="mceButtonNormal" target="_self">';
+ h += '<img src="' + img + '" alt="{$'+lang+'}" title="{$' + lang + '}" />';
+ h += '</a>';
+ }
+
+ return h;
+ },
+
+ getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) {
+ var h = '', m, x;
+
+ mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');';
+ cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
+
+ if (typeof(ui) != "undefined" && ui != null)
+ cmd += ',' + ui;
+
+ if (typeof(val) != "undefined" && val != null)
+ cmd += ",'" + val + "'";
+
+ cmd += ');';
+
+ // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
+ if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
+ x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
+
+ if (tinyMCE.isRealIE)
+ h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
+ else
+ h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';
+
+ h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';
+ h += '<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: ' + x + 'px 0" title="{$' + lang + '}" /></a>';
+ h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
+ h += '</a></span>';
+ } else {
+ if (tinyMCE.isRealIE)
+ h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
+ else
+ h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton">';
+
+ h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';
+ h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';
+ h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
+ h += '</a></span>';
+ }
+
+ return h;
+ },
+
+ _menuButtonEvent : function(e, o) {
+ if (o.className == 'mceMenuButtonFocus')
+ return;
+
+ if (e == 'over')
+ o.className = o.className + ' mceMenuHover';
+ else
+ o.className = o.className.replace(/\s.*$/, '');
+ },
+
+ addButtonMap : function(m) {
+ var i, a = m.replace(/\s+/, '').split(',');
+
+ for (i=0; i<a.length; i++)
+ this.buttonMap[a[i]] = i;
+ },
+
+ formSubmit : function(f, p) {
+ var n, inst, found = false;
+
+ if (f.form)
+ f = f.form;
+
+ // Is it a form that has a TinyMCE instance
+ if (tinyMCE.getParam('save_on_tinymce_forms')) {
+ for (n in tinyMCE.instances) {
+ inst = tinyMCE.instances[n];
+
+ if (!tinyMCE.isInstance(inst))
+ continue;
+
+ if (inst.formElement) {
+ if (f == inst.formElement.form) {
+ found = true;
+ inst.isNotDirty = true;
+ }
+ }
+ }
+ } else
+ found = true;
+
+ // Is valid
+ if (found) {
+ tinyMCE.removeTinyMCEFormElements(f);
+ tinyMCE.triggerSave();
+ }
+
+ // Is it patched
+ if (f.mceOldSubmit && p)
+ f.mceOldSubmit();
+ },
+
+ submitPatch : function() {
+ tinyMCE.formSubmit(this, true);
+ },
+
+ onLoad : function() {
+ var r, i, c, mode, trigger, elements, element, settings, elementId, elm;
+ var selector, deselector, elementRefAr, form;
+
+ // Wait for everything to be loaded first
+ if (tinyMCE.settings.strict_loading_mode && this.loadingIndex != -1) {
+ window.setTimeout('tinyMCE.onLoad();', 1);
+ return;
+ }
+
+ if (tinyMCE.isRealIE && window.event.type == "readystatechange" && document.readyState != "complete")
+ return true;
+
+ if (tinyMCE.isLoaded)
+ return true;
+
+ tinyMCE.isLoaded = true;
+
+ // IE produces JS error if TinyMCE is placed in a frame
+ // It seems to have something to do with the selection not beeing
+ // correctly initialized in IE so this hack solves the problem
+ if (tinyMCE.isRealIE && document.body && window.location.href != window.top.location.href) {
+ r = document.body.createTextRange();
+ r.collapse(true);
+ r.select();
+ }
+
+ tinyMCE.dispatchCallback(null, 'onpageload', 'onPageLoad');
+
+ for (c=0; c<tinyMCE.configs.length; c++) {
+ tinyMCE.settings = tinyMCE.configs[c];
+
+ selector = tinyMCE.getParam("editor_selector");
+ deselector = tinyMCE.getParam("editor_deselector");
+ elementRefAr = [];
+
+ // Add submit triggers
+ if (document.forms && tinyMCE.settings.add_form_submit_trigger && !tinyMCE.submitTriggers) {
+ for (i=0; i<document.forms.length; i++) {
+ form = document.forms[i];
+
+ tinyMCE.addEvent(form, "submit", TinyMCE_Engine.prototype.handleEvent);
+ tinyMCE.addEvent(form, "reset", TinyMCE_Engine.prototype.handleEvent);
+ tinyMCE.submitTriggers = true; // Do it only once
+
+ // Patch the form.submit function
+ if (tinyMCE.settings.submit_patch) {
+ try {
+ form.mceOldSubmit = form.submit;
+ form.submit = TinyMCE_Engine.prototype.submitPatch;
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ }
+ }
+
+ // Add editor instances based on mode
+ mode = tinyMCE.settings.mode;
+ switch (mode) {
+ case "exact":
+ elements = tinyMCE.getParam('elements', '', true, ',');
+
+ for (i=0; i<elements.length; i++) {
+ element = tinyMCE._getElementById(elements[i]);
+ trigger = element ? element.getAttribute(tinyMCE.settings.textarea_trigger) : "";
+
+ if (new RegExp('\\b' + deselector + '\\b').test(tinyMCE.getAttrib(element, "class")))
+ continue;
+
+ if (trigger == "false")
+ continue;
+
+ if ((tinyMCE.settings.ask || tinyMCE.settings.convert_on_click) && element) {
+ elementRefAr[elementRefAr.length] = element;
+ continue;
+ }
+
+ if (element)
+ tinyMCE.addMCEControl(element, elements[i]);
+ }
+ break;
+
+ case "specific_textareas":
+ case "textareas":
+ elements = document.getElementsByTagName("textarea");
+
+ for (i=0; i<elements.length; i++) {
+ elm = elements.item(i);
+ trigger = elm.getAttribute(tinyMCE.settings.textarea_trigger);
+
+ if (selector !== '' && !new RegExp('\\b' + selector + '\\b').test(tinyMCE.getAttrib(elm, "class")))
+ continue;
+
+ if (selector !== '')
+ trigger = selector !== '' ? "true" : "";
+
+ if (new RegExp('\\b' + deselector + '\\b').test(tinyMCE.getAttrib(elm, "class")))
+ continue;
+
+ if ((mode == "specific_textareas" && trigger == "true") || (mode == "textareas" && trigger != "false"))
+ elementRefAr[elementRefAr.length] = elm;
+ }
+ break;
+ }
+
+ for (i=0; i<elementRefAr.length; i++) {
+ element = elementRefAr[i];
+ elementId = element.name ? element.name : element.id;
+
+ if (tinyMCE.settings.ask || tinyMCE.settings.convert_on_click) {
+ // Focus breaks in Mozilla
+ if (tinyMCE.isGecko) {
+ settings = tinyMCE.settings;
+
+ tinyMCE.addEvent(element, "focus", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
+
+ if (element.nodeName != "TEXTAREA" && element.nodeName != "INPUT")
+ tinyMCE.addEvent(element, "click", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
+ // tinyMCE.addEvent(element, "mouseover", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
+ } else {
+ settings = tinyMCE.settings;
+
+ tinyMCE.addEvent(element, "focus", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
+ tinyMCE.addEvent(element, "click", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
+ // tinyMCE.addEvent(element, "mouseenter", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
+ }
+ } else
+ tinyMCE.addMCEControl(element, elementId);
+ }
+
+ // Handle auto focus
+ if (tinyMCE.settings.auto_focus) {
+ window.setTimeout(function () {
+ var inst = tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);
+ inst.selection.selectNode(inst.getBody(), true, true);
+ inst.contentWindow.focus();
+ }, 100);
+ }
+
+ tinyMCE.dispatchCallback(null, 'oninit', 'onInit');
+ }
+ },
+
+ isInstance : function(o) {
+ return o != null && typeof(o) == "object" && o.isTinyMCE_Control;
+ },
+
+ getParam : function(name, default_value, strip_whitespace, split_chr) {
+ var i, outArray, value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
+
+ // Fix bool values
+ if (value == "true" || value == "false")
+ return (value == "true");
+
+ if (strip_whitespace)
+ value = tinyMCE.regexpReplace(value, "[ \t\r\n]", "");
+
+ if (typeof(split_chr) != "undefined" && split_chr != null) {
+ value = value.split(split_chr);
+ outArray = [];
+
+ for (i=0; i<value.length; i++) {
+ if (value[i] && value[i] !== '')
+ outArray[outArray.length] = value[i];
+ }
+
+ value = outArray;
+ }
+
+ return value;
+ },
+
+ getLang : function(name, default_value, parse_entities, va) {
+ var v = (typeof(tinyMCELang[name]) == "undefined") ? default_value : tinyMCELang[name], n;
+
+ if (parse_entities)
+ v = tinyMCE.entityDecode(v);
+
+ if (va) {
+ for (n in va)
+ v = this.replaceVar(v, n, va[n]);
+ }
+
+ return v;
+ },
+
+ entityDecode : function(s) {
+ var e = document.createElement("div");
+
+ e.innerHTML = s;
+
+ return !e.firstChild ? s : e.firstChild.nodeValue;
+ },
+
+ addToLang : function(prefix, ar) {
+ var k;
+
+ for (k in ar) {
+ if (typeof(ar[k]) == 'function')
+ continue;
+
+ tinyMCELang[(k.indexOf('lang_') == -1 ? 'lang_' : '') + (prefix !== '' ? (prefix + "_") : '') + k] = ar[k];
+ }
+
+ this.loadNextScript();
+ },
+
+ triggerNodeChange : function(focus, setup_content) {
+ var elm, inst, editorId, undoIndex = -1, undoLevels = -1, doc, anySelection, st;
+
+ if (tinyMCE.selectedInstance) {
+ inst = tinyMCE.selectedInstance;
+ elm = (typeof(setup_content) != "undefined" && setup_content) ? tinyMCE.selectedElement : inst.getFocusElement();
+
+/* if (elm == inst.lastTriggerEl)
+ return;
+
+ inst.lastTriggerEl = elm;*/
+
+ editorId = inst.editorId;
+ st = inst.selection.getSelectedText();
+
+ if (tinyMCE.settings.auto_resize)
+ inst.resizeToContent();
+
+ if (setup_content && tinyMCE.isGecko && inst.isHidden())
+ elm = inst.getBody();
+
+ inst.switchSettings();
+ anySelection = !inst.selection.isCollapsed();
+
+ if (tinyMCE.settings.custom_undo_redo) {
+ undoIndex = inst.undoRedo.undoIndex;
+ undoLevels = inst.undoRedo.undoLevels.length;
+ }
+
+ tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content);
+ }
+
+ if (this.selectedInstance && (typeof(focus) == "undefined" || focus))
+ this.selectedInstance.contentWindow.focus();
+ },
+
+ _customCleanup : function(inst, type, content) {
+ var pl, po, i, customCleanup;
+
+ // Call custom cleanup
+ customCleanup = tinyMCE.settings.cleanup_callback;
+ if (customCleanup != '')
+ content = tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback, window)(type, content, inst);
+
+ // Trigger theme cleanup
+ po = tinyMCE.themes[tinyMCE.settings.theme];
+ if (po && po.cleanup)
+ content = po.cleanup(type, content, inst);
+
+ // Trigger plugin cleanups
+ pl = inst.plugins;
+ for (i=0; i<pl.length; i++) {
+ po = tinyMCE.plugins[pl[i]];
+
+ if (po && po.cleanup)
+ content = po.cleanup(type, content, inst);
+ }
+
+ return content;
+ },
+
+ setContent : function(h) {
+ if (tinyMCE.selectedInstance) {
+ tinyMCE.selectedInstance.execCommand('mceSetContent', false, h);
+ tinyMCE.selectedInstance.repaint();
+ }
+ },
+
+ importThemeLanguagePack : function(name) {
+ if (typeof(name) == "undefined")
+ name = tinyMCE.settings.theme;
+
+ tinyMCE.loadScript(tinyMCE.baseURL + '/themes/' + name + '/langs/' + tinyMCE.settings.language + '.js');
+ },
+
+ importPluginLanguagePack : function(name) {
+ var b = tinyMCE.baseURL + '/plugins/' + name;
+
+ if (this.plugins[name])
+ b = this.plugins[name].baseURL;
+
+ tinyMCE.loadScript(b + '/langs/' + tinyMCE.settings.language + '.js');
+ },
+
+ applyTemplate : function(h, ag) {
+ return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}', 'gi'), function(m, s) {
+ if (s.indexOf('lang_') == 0 && tinyMCELang[s])
+ return tinyMCELang[s];
+
+ if (ag && ag[s])
+ return ag[s];
+
+ if (tinyMCE.settings[s])
+ return tinyMCE.settings[s];
+
+ if (m == 'themeurl')
+ return tinyMCE.themeURL;
+
+ return m;
+ });
+ },
+
+ replaceVar : function(h, r, v) {
+ return h.replace(new RegExp('{\\\$' + r + '}', 'g'), v);
+ },
+
+ openWindow : function(template, args) {
+ var html, width, height, x, y, resizable, scrollbars, url, name, win, modal, features;
+
+ args = !args ? {} : args;
+
+ args.mce_template_file = template.file;
+ args.mce_width = template.width;
+ args.mce_height = template.height;
+ tinyMCE.windowArgs = args;
+
+ html = template.html;
+ if (!(width = parseInt(template.width)))
+ width = 320;
+
+ if (!(height = parseInt(template.height)))
+ height = 200;
+
+ // Add to height in M$ due to SP2 WHY DON'T YOU GUYS IMPLEMENT innerWidth of windows!!
+ if (tinyMCE.isIE)
+ height += 40;
+ else
+ height += 20;
+
+ x = parseInt(screen.width / 2.0) - (width / 2.0);
+ y = parseInt(screen.height / 2.0) - (height / 2.0);
+
+ resizable = (args && args.resizable) ? args.resizable : "no";
+ scrollbars = (args && args.scrollbars) ? args.scrollbars : "no";
+
+ if (template.file.charAt(0) != '/' && template.file.indexOf('://') == -1)
+ url = tinyMCE.baseURL + "/themes/" + tinyMCE.getParam("theme") + "/" + template.file;
+ else
+ url = template.file;
+
+ // Replace all args as variables in URL
+ for (name in args) {
+ if (typeof(args[name]) == 'function')
+ continue;
+
+ url = tinyMCE.replaceVar(url, name, escape(args[name]));
+ }
+
+ if (html) {
+ html = tinyMCE.replaceVar(html, "css", this.settings.popups_css);
+ html = tinyMCE.applyTemplate(html, args);
+
+ win = window.open("", "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=yes,minimizable=" + resizable + ",modal=yes,width=" + width + ",height=" + height + ",resizable=" + resizable);
+ if (win == null) {
+ alert(tinyMCELang.lang_popup_blocked);
+ return;
+ }
+
+ win.document.write(html);
+ win.document.close();
+ win.resizeTo(width, height);
+ win.focus();
+ } else {
+ if ((tinyMCE.isRealIE) && resizable != 'yes' && tinyMCE.settings.dialog_type == "modal") {
+ height += 10;
+
+ features = "resizable:" + resizable + ";scroll:" + scrollbars + ";status:yes;center:yes;help:no;dialogWidth:" + width + "px;dialogHeight:" + height + "px;";
+
+ window.showModalDialog(url, window, features);
+ } else {
+ modal = (resizable == "yes") ? "no" : "yes";
+
+ if (tinyMCE.isGecko && tinyMCE.isMac)
+ modal = "no";
+
+ if (template.close_previous != "no")
+ try {tinyMCE.lastWindow.close();} catch (ex) {}
+
+ win = window.open(url, "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=" + modal + ",minimizable=" + resizable + ",modal=" + modal + ",width=" + width + ",height=" + height + ",resizable=" + resizable);
+ if (win == null) {
+ alert(tinyMCELang.lang_popup_blocked);
+ return;
+ }
+
+ if (template.close_previous != "no")
+ tinyMCE.lastWindow = win;
+
+ try {
+ win.resizeTo(width, height);
+ } catch(e) {
+ // Ignore
+ }
+
+ // Make it bigger if statusbar is forced
+ if (tinyMCE.isGecko && win.document) {
+ if (win.document.defaultView.statusbar.visible)
+ win.resizeBy(0, tinyMCE.isMac ? 10 : 24);
+ }
+
+ win.focus();
+ }
+ }
+ },
+
+ closeWindow : function(win) {
+ win.close();
+ },
+
+ getVisualAidClass : function(class_name, state) {
+ var i, classNames, ar, className, aidClass = tinyMCE.settings.visual_table_class;
+
+ if (typeof(state) == "undefined")
+ state = tinyMCE.settings.visual;
+
+ // Split
+ classNames = [];
+ ar = class_name.split(' ');
+ for (i=0; i<ar.length; i++) {
+ if (ar[i] == aidClass)
+ ar[i] = "";
+
+ if (ar[i] !== '')
+ classNames[classNames.length] = ar[i];
+ }
+
+ if (state)
+ classNames[classNames.length] = aidClass;
+
+ // Glue
+ className = "";
+ for (i=0; i<classNames.length; i++) {
+ if (i > 0)
+ className += " ";
+
+ className += classNames[i];
+ }
+
+ return className;
+ },
+
+ handleVisualAid : function(el, deep, state, inst, skip_dispatch) {
+ var i, x, y, tableElement, anchorName, oldW, oldH, bo, cn;
+
+ if (!el)
+ return;
+
+ if (!skip_dispatch)
+ tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst);
+
+ tableElement = null;
+
+ switch (el.nodeName) {
+ case "TABLE":
+ oldW = el.style.width;
+ oldH = el.style.height;
+ bo = tinyMCE.getAttrib(el, "border");
+
+ bo = bo == '' || bo == "0" ? true : false;
+
+ tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo));
+
+ el.style.width = oldW;
+ el.style.height = oldH;
+
+ for (y=0; y<el.rows.length; y++) {
+ for (x=0; x<el.rows[y].cells.length; x++) {
+ cn = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x], "class"), state && bo);
+ tinyMCE.setAttrib(el.rows[y].cells[x], "class", cn);
+ }
+ }
+
+ break;
+
+ case "A":
+ anchorName = tinyMCE.getAttrib(el, "name");
+
+ if (anchorName !== '' && state) {
+ el.title = anchorName;
+ tinyMCE.addCSSClass(el, 'mceItemAnchor');
+ } else if (anchorName !== '' && !state)
+ el.className = '';
+
+ break;
+ }
+
+ if (deep && el.hasChildNodes()) {
+ for (i=0; i<el.childNodes.length; i++)
+ tinyMCE.handleVisualAid(el.childNodes[i], deep, state, inst, true);
+ }
+ },
+
+ fixGeckoBaseHREFBug : function(m, e, h) {
+ var xsrc, xhref;
+
+ if (tinyMCE.isGecko) {
+ if (m == 1) {
+ h = h.replace(/\ssrc=/gi, " mce_tsrc=");
+ h = h.replace(/\shref=/gi, " mce_thref=");
+
+ return h;
+ } else {
+ // Why bother if there is no src or href broken
+ if (!new RegExp('(src|href)=', 'g').test(h))
+ return h;
+
+ // Restore src and href that gets messed up by Gecko
+ tinyMCE.selectElements(e, 'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK', function (n) {
+ xsrc = tinyMCE.getAttrib(n, "mce_tsrc");
+ xhref = tinyMCE.getAttrib(n, "mce_thref");
+
+ if (xsrc !== '') {
+ try {
+ n.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, xsrc);
+ } catch (e) {
+ // Ignore, Firefox cast exception if local file wasn't found
+ }
+
+ n.removeAttribute("mce_tsrc");
+ }
+
+ if (xhref !== '') {
+ try {
+ n.href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, xhref);
+ } catch (e) {
+ // Ignore, Firefox cast exception if local file wasn't found
+ }
+
+ n.removeAttribute("mce_thref");
+ }
+
+ return false;
+ });
+
+ // Restore text/comment nodes
+ tinyMCE.selectNodes(e, function(n) {
+ if (n.nodeType == 3 || n.nodeType == 8) {
+ n.nodeValue = n.nodeValue.replace(/\smce_tsrc=/gi, " src=");
+ n.nodeValue = n.nodeValue.replace(/\smce_thref=/gi, " href=");
+ }
+
+ return false;
+ });
+ }
+ }
+
+ return h;
+ },
+
+ _setHTML : function(doc, html_content) {
+ var i, html, paras, node;
+
+ // Force closed anchors open
+ //html_content = html_content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');
+
+ html_content = tinyMCE.cleanupHTMLCode(html_content);
+
+ // Try innerHTML if it fails use pasteHTML in MSIE
+ try {
+ tinyMCE.setInnerHTML(doc.body, html_content);
+ } catch (e) {
+ if (this.isMSIE)
+ doc.body.createTextRange().pasteHTML(html_content);
+ }
+
+ // Content duplication bug fix
+ if (tinyMCE.isIE && tinyMCE.settings.fix_content_duplication) {
+ // Remove P elements in P elements
+ paras = doc.getElementsByTagName("P");
+ for (i=0; i<paras.length; i++) {
+ node = paras[i];
+
+ while ((node = node.parentNode) != null) {
+ if (node.nodeName == "P")
+ node.outerHTML = node.innerHTML;
+ }
+ }
+
+ // Content duplication bug fix (Seems to be word crap)
+ html = doc.body.innerHTML;
+
+ // Always set the htmlText output
+ tinyMCE.setInnerHTML(doc.body, html);
+ }
+
+ tinyMCE.cleanupAnchors(doc);
+
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ tinyMCE.convertSpansToFonts(doc);
+ },
+
+ getEditorId : function(form_element) {
+ var inst = this.getInstanceById(form_element);
+
+ if (!inst)
+ return null;
+
+ return inst.editorId;
+ },
+
+ getInstanceById : function(editor_id) {
+ var inst = this.instances[editor_id], n;
+
+ if (!inst) {
+ for (n in tinyMCE.instances) {
+ inst = tinyMCE.instances[n];
+
+ if (!tinyMCE.isInstance(inst))
+ continue;
+
+ if (inst.formTargetElementId == editor_id)
+ return inst;
+ }
+ } else
+ return inst;
+
+ return null;
+ },
+
+ queryInstanceCommandValue : function(editor_id, command) {
+ var inst = tinyMCE.getInstanceById(editor_id);
+
+ if (inst)
+ return inst.queryCommandValue(command);
+
+ return false;
+ },
+
+ queryInstanceCommandState : function(editor_id, command) {
+ var inst = tinyMCE.getInstanceById(editor_id);
+
+ if (inst)
+ return inst.queryCommandState(command);
+
+ return null;
+ },
+
+ setWindowArg : function(n, v) {
+ this.windowArgs[n] = v;
+ },
+
+ getWindowArg : function(n, d) {
+ return (typeof(this.windowArgs[n]) == "undefined") ? d : this.windowArgs[n];
+ },
+
+ getCSSClasses : function(editor_id, doc) {
+ var i, c, x, rule, styles, rules, csses, selectorText, inst = tinyMCE.getInstanceById(editor_id);
+ var cssClass, addClass, p;
+
+ if (!inst)
+ inst = tinyMCE.selectedInstance;
+
+ if (!inst)
+ return [];
+
+ if (!doc)
+ doc = inst.getDoc();
+
+ // Is cached, use that
+ if (inst && inst.cssClasses.length > 0)
+ return inst.cssClasses;
+
+ if (!doc)
+ return;
+
+ styles = doc.styleSheets;
+
+ if (styles && styles.length > 0) {
+ for (x=0; x<styles.length; x++) {
+ csses = null;
+
+ try {
+ csses = tinyMCE.isIE ? doc.styleSheets(x).rules : styles[x].cssRules;
+ } catch(e) {
+ // Just ignore any errors I know this is ugly!!
+ }
+
+ if (!csses)
+ return [];
+
+ for (i=0; i<csses.length; i++) {
+ selectorText = csses[i].selectorText;
+
+ // Can be multiple rules per selector
+ if (selectorText) {
+ rules = selectorText.split(',');
+ for (c=0; c<rules.length; c++) {
+ rule = rules[c];
+
+ // Strip spaces between selectors
+ while (rule.indexOf(' ') == 0)
+ rule = rule.substring(1);
+
+ // Invalid rule
+ if (rule.indexOf(' ') != -1 || rule.indexOf(':') != -1 || rule.indexOf('mceItem') != -1)
+ continue;
+
+ if (rule.indexOf(tinyMCE.settings.visual_table_class) != -1 || rule.indexOf('mceEditable') != -1 || rule.indexOf('mceNonEditable') != -1)
+ continue;
+
+ // Is class rule
+ if (rule.indexOf('.') != -1) {
+ cssClass = rule.substring(rule.indexOf('.') + 1);
+ addClass = true;
+
+ for (p=0; p<inst.cssClasses.length && addClass; p++) {
+ if (inst.cssClasses[p] == cssClass)
+ addClass = false;
+ }
+
+ if (addClass)
+ inst.cssClasses[inst.cssClasses.length] = cssClass;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return inst.cssClasses;
+ },
+
+ regexpReplace : function(in_str, reg_exp, replace_str, opts) {
+ var re;
+
+ if (in_str == null)
+ return in_str;
+
+ if (typeof(opts) == "undefined")
+ opts = 'g';
+
+ re = new RegExp(reg_exp, opts);
+
+ return in_str.replace(re, replace_str);
+ },
+
+ trim : function(s) {
+ return s.replace(/^\s*|\s*$/g, "");
+ },
+
+ cleanupEventStr : function(s) {
+ s = "" + s;
+ s = s.replace('function anonymous()\n{\n', '');
+ s = s.replace('\n}', '');
+ s = s.replace(/^return true;/gi, ''); // Remove event blocker
+
+ return s;
+ },
+
+ getControlHTML : function(c) {
+ var i, l, n, o, v, rtl = tinyMCE.getLang('lang_dir') == 'rtl';
+
+ l = tinyMCE.plugins;
+ for (n in l) {
+ o = l[n];
+
+ if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') {
+ if (rtl)
+ return '<span dir="rtl">' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + '</span>';
+
+ return tinyMCE.replaceVar(v, "pluginurl", o.baseURL);
+ }
+ }
+
+ o = tinyMCE.themes[tinyMCE.settings.theme];
+ if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') {
+ if (rtl)
+ return '<span dir="rtl">' + v + '</span>';
+
+ return v;
+ }
+
+ return '';
+ },
+
+ evalFunc : function(f, idx, a, o) {
+ o = !o ? window : o;
+ f = typeof(f) == 'function' ? f : o[f];
+
+ return f.apply(o, Array.prototype.slice.call(a, idx));
+ },
+
+ dispatchCallback : function(i, p, n) {
+ return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments);
+ },
+
+ executeCallback : function(i, p, n) {
+ return this.callFunc(i, p, n, 1, this.executeCallback.arguments);
+ },
+
+ execCommandCallback : function(i, p, n) {
+ return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments);
+ },
+
+ callFunc : function(ins, p, n, m, a) {
+ var l, i, on, o, s, v;
+
+ s = m == 2;
+
+ l = tinyMCE.getParam(p, '');
+
+ if (l !== '' && (v = tinyMCE.evalFunc(l, 3, a)) == s && m > 0)
+ return true;
+
+ if (ins != null) {
+ for (i=0, l = ins.plugins; i<l.length; i++) {
+ o = tinyMCE.plugins[l[i]];
+
+ if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0)
+ return true;
+ }
+ }
+
+ l = tinyMCE.themes;
+ for (on in l) {
+ o = l[on];
+
+ if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0)
+ return true;
+ }
+
+ return false;
+ },
+
+ resolveDots : function(s, o) {
+ var i;
+
+ if (typeof(s) == 'string') {
+ for (i=0, s=s.split('.'); i<s.length; i++)
+ o = o[s[i]];
+ } else
+ o = s;
+
+ return o;
+ },
+
+ xmlEncode : function(s) {
+ return s ? ('' + s).replace(this.xmlEncodeRe, function (c, b) {
+ switch (c) {
+ case '&':
+ return '&';
+
+ case '"':
+ return '"';
+
+ case '<':
+ return '<';
+
+ case '>':
+ return '>';
+ }
+
+ return c;
+ }) : s;
+ },
+
+ add : function(c, m) {
+ var n;
+
+ for (n in m) {
+ if (m.hasOwnProperty(n))
+ c.prototype[n] = m[n];
+ }
+ },
+
+ extend : function(p, np) {
+ var o = {}, n;
+
+ o.parent = p;
+
+ for (n in p) {
+ if (p.hasOwnProperty(n))
+ o[n] = p[n];
+ }
+
+ for (n in np) {
+ if (np.hasOwnProperty(n))
+ o[n] = np[n];
+ }
+
+ return o;
+ },
+
+ hideMenus : function() {
+ var e = tinyMCE.lastSelectedMenuBtn;
+
+ if (tinyMCE.lastMenu) {
+ tinyMCE.lastMenu.hide();
+ tinyMCE.lastMenu = null;
+ }
+
+ if (e) {
+ tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass);
+ tinyMCE.lastSelectedMenuBtn = null;
+ }
+ }
+
+ };
+
+// Global instances
+var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors
+var tinyMCE = new TinyMCE_Engine();
+var tinyMCELang = {};
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Control.class.js */
+
+function TinyMCE_Control(settings) {
+ var t, i, tos, fu, p, x, fn, fu, pn, s = settings;
+
+ this.undoRedoLevel = true;
+ this.isTinyMCE_Control = true;
+
+ // Default settings
+ this.enabled = true;
+ this.settings = s;
+ this.settings.theme = tinyMCE.getParam("theme", "default");
+ this.settings.width = tinyMCE.getParam("width", -1);
+ this.settings.height = tinyMCE.getParam("height", -1);
+ this.selection = new TinyMCE_Selection(this);
+ this.undoRedo = new TinyMCE_UndoRedo(this);
+ this.cleanup = new TinyMCE_Cleanup();
+ this.shortcuts = [];
+ this.hasMouseMoved = false;
+ this.foreColor = this.backColor = "#999999";
+ this.data = {};
+ this.cssClasses = [];
+
+ this.cleanup.init({
+ valid_elements : s.valid_elements,
+ extended_valid_elements : s.extended_valid_elements,
+ valid_child_elements : s.valid_child_elements,
+ entities : s.entities,
+ entity_encoding : s.entity_encoding,
+ debug : s.cleanup_debug,
+ indent : s.apply_source_formatting,
+ invalid_elements : s.invalid_elements,
+ verify_html : s.verify_html,
+ fix_content_duplication : s.fix_content_duplication,
+ convert_fonts_to_spans : s.convert_fonts_to_spans
+ });
+
+ // Wrap old theme
+ t = this.settings.theme;
+ if (!tinyMCE.hasTheme(t)) {
+ fn = tinyMCE.callbacks;
+ tos = {};
+
+ for (i=0; i<fn.length; i++) {
+ if ((fu = window['TinyMCE_' + t + "_" + fn[i]]))
+ tos[fn[i]] = fu;
+ }
+
+ tinyMCE.addTheme(t, tos);
+ }
+
+ // Wrap old plugins
+ this.plugins = [];
+ p = tinyMCE.getParam('plugins', '', true, ',');
+ if (p.length > 0) {
+ for (i=0; i<p.length; i++) {
+ pn = p[i];
+
+ if (pn.charAt(0) == '-')
+ pn = pn.substring(1);
+
+ if (!tinyMCE.hasPlugin(pn)) {
+ fn = tinyMCE.callbacks;
+ tos = {};
+
+ for (x=0; x<fn.length; x++) {
+ if ((fu = window['TinyMCE_' + pn + "_" + fn[x]]))
+ tos[fn[x]] = fu;
+ }
+
+ tinyMCE.addPlugin(pn, tos);
+ }
+
+ this.plugins[this.plugins.length] = pn;
+ }
+ }
+};
+
+TinyMCE_Control.prototype = {
+ selection : null,
+
+ settings : null,
+
+ cleanup : null,
+
+ getData : function(na) {
+ var o = this.data[na];
+
+ if (!o)
+ o = this.data[na] = {};
+
+ return o;
+ },
+
+ hasPlugin : function(n) {
+ var i;
+
+ for (i=0; i<this.plugins.length; i++) {
+ if (this.plugins[i] == n)
+ return true;
+ }
+
+ return false;
+ },
+
+ addPlugin : function(n, p) {
+ if (!this.hasPlugin(n)) {
+ tinyMCE.addPlugin(n, p);
+ this.plugins[this.plugins.length] = n;
+ }
+ },
+
+ repaint : function() {
+ var s, b, ex;
+
+ if (tinyMCE.isRealIE)
+ return;
+
+ try {
+ s = this.selection;
+ b = s.getBookmark(true);
+ this.getBody().style.display = 'none';
+ this.getDoc().execCommand('selectall', false, null);
+ this.getSel().collapseToStart();
+ this.getBody().style.display = 'block';
+ s.moveToBookmark(b);
+ } catch (ex) {
+ // Ignore
+ }
+ },
+
+ switchSettings : function() {
+ if (tinyMCE.configs.length > 1 && tinyMCE.currentConfig != this.settings.index) {
+ tinyMCE.settings = this.settings;
+ tinyMCE.currentConfig = this.settings.index;
+ }
+ },
+
+ select : function() {
+ var oldInst = tinyMCE.selectedInstance;
+
+ if (oldInst != this) {
+ if (oldInst)
+ oldInst.execCommand('mceEndTyping');
+
+ tinyMCE.dispatchCallback(this, 'select_instance_callback', 'selectInstance', this, oldInst);
+ tinyMCE.selectedInstance = this;
+ }
+ },
+
+ getBody : function() {
+ return this.contentBody ? this.contentBody : this.getDoc().body;
+ },
+
+ getDoc : function() {
+// return this.contentDocument ? this.contentDocument : this.contentWindow.document; // Removed due to IE 5.5 ?
+ return this.contentWindow.document;
+ },
+
+ getWin : function() {
+ return this.contentWindow;
+ },
+
+ getContainerWin : function() {
+ return this.containerWindow ? this.containerWindow : window;
+ },
+
+ getViewPort : function() {
+ return tinyMCE.getViewPort(this.getWin());
+ },
+
+ getParentNode : function(n, f) {
+ return tinyMCE.getParentNode(n, f, this.getBody());
+ },
+
+ getParentElement : function(n, na, f) {
+ return tinyMCE.getParentElement(n, na, f, this.getBody());
+ },
+
+ getParentBlockElement : function(n) {
+ return tinyMCE.getParentBlockElement(n, this.getBody());
+ },
+
+ resizeToContent : function() {
+ var d = this.getDoc(), b = d.body, de = d.documentElement;
+
+ this.iframeElement.style.height = (tinyMCE.isRealIE) ? b.scrollHeight : de.offsetHeight + 'px';
+ },
+
+ addShortcut : function(m, k, d, cmd, ui, va) {
+ var n = typeof(k) == "number", ie = tinyMCE.isIE, c, sc, i, scl = this.shortcuts;
+
+ if (!tinyMCE.getParam('custom_shortcuts'))
+ return false;
+
+ m = m.toLowerCase();
+ k = ie && !n ? k.toUpperCase() : k;
+ c = n ? null : k.charCodeAt(0);
+ d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d;
+
+ sc = {
+ alt : m.indexOf('alt') != -1,
+ ctrl : m.indexOf('ctrl') != -1,
+ shift : m.indexOf('shift') != -1,
+ charCode : c,
+ keyCode : n ? k : (ie ? c : null),
+ desc : d,
+ cmd : cmd,
+ ui : ui,
+ val : va
+ };
+
+ for (i=0; i<scl.length; i++) {
+ if (sc.alt == scl[i].alt && sc.ctrl == scl[i].ctrl && sc.shift == scl[i].shift
+ && sc.charCode == scl[i].charCode && sc.keyCode == scl[i].keyCode) {
+ return false;
+ }
+ }
+
+ scl[scl.length] = sc;
+
+ return true;
+ },
+
+ handleShortcut : function(e) {
+ var i, s, o;
+
+ // Normal key press, then ignore it
+ if (!e.altKey && !e.ctrlKey)
+ return false;
+
+ s = this.shortcuts;
+
+ for (i=0; i<s.length; i++) {
+ o = s[i];
+
+ if (o.alt == e.altKey && o.ctrl == e.ctrlKey && (o.keyCode == e.keyCode || o.charCode == e.charCode)) {
+ if (o.cmd && (e.type == "keydown" || (e.type == "keypress" && !tinyMCE.isOpera)))
+ tinyMCE.execCommand(o.cmd, o.ui, o.val);
+
+ tinyMCE.cancelEvent(e);
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ autoResetDesignMode : function() {
+ // Add fix for tab/style.display none/block problems in Gecko
+ if (!tinyMCE.isIE && this.isHidden() && tinyMCE.getParam('auto_reset_designmode'))
+ eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}');
+ },
+
+ isHidden : function() {
+ var s;
+
+ if (tinyMCE.isIE)
+ return false;
+
+ s = this.getSel();
+
+ // Weird, wheres that cursor selection?
+ return (!s || !s.rangeCount || s.rangeCount == 0);
+ },
+
+ isDirty : function() {
+ // Is content modified and not in a submit procedure
+ return tinyMCE.trim(this.startContent) != tinyMCE.trim(this.getBody().innerHTML) && !this.isNotDirty;
+ },
+
+ _mergeElements : function(scmd, pa, ch, override) {
+ var st, stc, className, n;
+
+ if (scmd == "removeformat") {
+ pa.className = "";
+ pa.style.cssText = "";
+ ch.className = "";
+ ch.style.cssText = "";
+ return;
+ }
+
+ st = tinyMCE.parseStyle(tinyMCE.getAttrib(pa, "style"));
+ stc = tinyMCE.parseStyle(tinyMCE.getAttrib(ch, "style"));
+ className = tinyMCE.getAttrib(pa, "class");
+
+ // Removed class adding due to bug #1478272
+ className = tinyMCE.getAttrib(ch, "class");
+
+ if (override) {
+ for (n in st) {
+ if (typeof(st[n]) == 'function')
+ continue;
+
+ stc[n] = st[n];
+ }
+ } else {
+ for (n in stc) {
+ if (typeof(stc[n]) == 'function')
+ continue;
+
+ st[n] = stc[n];
+ }
+ }
+
+ tinyMCE.setAttrib(pa, "style", tinyMCE.serializeStyle(st));
+ tinyMCE.setAttrib(pa, "class", tinyMCE.trim(className));
+ ch.className = "";
+ ch.style.cssText = "";
+ ch.removeAttribute("class");
+ ch.removeAttribute("style");
+ },
+
+ _fixRootBlocks : function() {
+ var rb, b, ne, be, nx, bm;
+
+ rb = tinyMCE.getParam('forced_root_block');
+ if (!rb)
+ return;
+
+ b = this.getBody();
+ ne = b.firstChild;
+
+ while (ne) {
+ nx = ne.nextSibling;
+
+ // If text node or inline element wrap it in a block element
+ if ((ne.nodeType == 3 && ne.nodeValue.replace(/\s+/g, '') != '') || (ne.nodeType == 1 && !tinyMCE.blockRegExp.test(ne.nodeName))) {
+ if (!bm)
+ bm = this.selection.getBookmark();
+
+ if (!be) {
+ be = this.getDoc().createElement(rb);
+ be.appendChild(ne.cloneNode(true));
+ b.replaceChild(be, ne);
+ } else {
+ be.appendChild(ne.cloneNode(true));
+ b.removeChild(ne);
+ }
+ } else
+ be = null;
+
+ ne = nx;
+ }
+
+ if (bm)
+ this.selection.moveToBookmark(bm);
+ },
+
+ _fixTrailingNbsp : function() {
+ var s = this.selection, e = s.getFocusElement(), bm, v;
+
+ if (e && tinyMCE.blockRegExp.test(e.nodeName) && e.firstChild) {
+ v = e.firstChild.nodeValue;
+
+ if (v && v.length > 1 && /(^\u00a0|\u00a0$)/.test(v)) {
+ e.firstChild.nodeValue = v.replace(/(^\u00a0|\u00a0$)/, '');
+ s.selectNode(e.firstChild, true, false, false); // Select and collapse
+ }
+ }
+ },
+
+ _setUseCSS : function(b) {
+ var d = this.getDoc();
+
+ try {d.execCommand("useCSS", false, !b);} catch (ex) {}
+ try {d.execCommand("styleWithCSS", false, b);} catch (ex) {}
+
+ if (!tinyMCE.getParam("table_inline_editing"))
+ try {d.execCommand('enableInlineTableEditing', false, "false");} catch (ex) {}
+
+ if (!tinyMCE.getParam("object_resizing"))
+ try {d.execCommand('enableObjectResizing', false, "false");} catch (ex) {}
+ },
+
+ execCommand : function(command, user_interface, value) {
+ var i, x, z, align, img, div, doc = this.getDoc(), win = this.getWin(), focusElm = this.getFocusElement();
+
+ // Is not a undo specific command
+ if (!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel', 'gi').test(command))
+ this.undoBookmark = null;
+
+ // Mozilla issue
+ if (!tinyMCE.isIE && !this.useCSS) {
+ this._setUseCSS(false);
+ this.useCSS = true;
+ }
+
+ //debug("command: " + command + ", user_interface: " + user_interface + ", value: " + value);
+ this.contentDocument = doc; // <-- Strange, unless this is applied Mozilla 1.3 breaks
+
+ // Don't dispatch key commands
+ if (!/mceStartTyping|mceEndTyping/.test(command)) {
+ if (tinyMCE.execCommandCallback(this, 'execcommand_callback', 'execCommand', this.editorId, this.getBody(), command, user_interface, value))
+ return;
+ }
+
+ // Fix align on images
+ if (focusElm && focusElm.nodeName == "IMG") {
+ align = focusElm.getAttribute('align');
+ img = command == "JustifyCenter" ? focusElm.cloneNode(false) : focusElm;
+
+ switch (command) {
+ case "JustifyLeft":
+ if (align == 'left') {
+ img.setAttribute('align', ''); // Needed for IE
+ img.removeAttribute('align');
+ } else
+ img.setAttribute('align', 'left');
+
+ // Remove the div
+ div = focusElm.parentNode;
+ if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
+ div.parentNode.replaceChild(img, div);
+
+ this.selection.selectNode(img);
+ this.repaint();
+ tinyMCE.triggerNodeChange();
+ return;
+
+ case "JustifyCenter":
+ img.setAttribute('align', ''); // Needed for IE
+ img.removeAttribute('align');
+
+ // Is centered
+ div = tinyMCE.getParentElement(focusElm, "div");
+ if (div && div.style.textAlign == "center") {
+ // Remove div
+ if (div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
+ div.parentNode.replaceChild(img, div);
+ } else {
+ // Add div
+ div = this.getDoc().createElement("div");
+ div.style.textAlign = 'center';
+ div.appendChild(img);
+ focusElm.parentNode.replaceChild(div, focusElm);
+ }
+
+ this.selection.selectNode(img);
+ this.repaint();
+ tinyMCE.triggerNodeChange();
+ return;
+
+ case "JustifyRight":
+ if (align == 'right') {
+ img.setAttribute('align', ''); // Needed for IE
+ img.removeAttribute('align');
+ } else
+ img.setAttribute('align', 'right');
+
+ // Remove the div
+ div = focusElm.parentNode;
+ if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
+ div.parentNode.replaceChild(img, div);
+
+ this.selection.selectNode(img);
+ this.repaint();
+ tinyMCE.triggerNodeChange();
+ return;
+ }
+ }
+
+ if (tinyMCE.settings.force_br_newlines) {
+ var alignValue = "";
+
+ if (doc.selection.type != "Control") {
+ switch (command) {
+ case "JustifyLeft":
+ alignValue = "left";
+ break;
+
+ case "JustifyCenter":
+ alignValue = "center";
+ break;
+
+ case "JustifyFull":
+ alignValue = "justify";
+ break;
+
+ case "JustifyRight":
+ alignValue = "right";
+ break;
+ }
+
+ if (alignValue !== '') {
+ var rng = doc.selection.createRange();
+
+ if ((divElm = tinyMCE.getParentElement(rng.parentElement(), "div")) != null)
+ divElm.setAttribute("align", alignValue);
+ else if (rng.pasteHTML && rng.htmlText.length > 0)
+ rng.pasteHTML('<div align="' + alignValue + '">' + rng.htmlText + "</div>");
+
+ tinyMCE.triggerNodeChange();
+ return;
+ }
+ }
+ }
+
+ switch (command) {
+ case "mceRepaint":
+ this.repaint();
+ return true;
+
+ case "JustifyLeft":
+ case "JustifyCenter":
+ case "JustifyFull":
+ case "JustifyRight":
+ var el = tinyMCE.getParentNode(focusElm, function(n) {return tinyMCE.getAttrib(n, 'align');});
+
+ if (el) {
+ el.setAttribute('align', ''); // Needed for IE
+ el.removeAttribute('align');
+ } else
+ this.getDoc().execCommand(command, user_interface, value);
+
+ tinyMCE.triggerNodeChange();
+
+ return true;
+
+ case "unlink":
+ // Unlink if caret is inside link
+ if (tinyMCE.isGecko && this.getSel().isCollapsed) {
+ focusElm = tinyMCE.getParentElement(focusElm, 'A');
+
+ if (focusElm)
+ this.selection.selectNode(focusElm, false);
+ }
+
+ this.getDoc().execCommand(command, user_interface, value);
+
+ tinyMCE.isGecko && this.getSel().collapseToEnd();
+
+ tinyMCE.triggerNodeChange();
+
+ return true;
+
+ case "InsertUnorderedList":
+ case "InsertOrderedList":
+ this.getDoc().execCommand(command, user_interface, value);
+ tinyMCE.triggerNodeChange();
+ break;
+
+ case "Strikethrough":
+ this.getDoc().execCommand(command, user_interface, value);
+ tinyMCE.triggerNodeChange();
+ break;
+
+ case "mceSelectNode":
+ this.selection.selectNode(value);
+ tinyMCE.triggerNodeChange();
+ tinyMCE.selectedNode = value;
+ break;
+
+ case "FormatBlock":
+ if (value == null || value == '') {
+ var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");
+
+ if (elm)
+ this.execCommand("mceRemoveNode", false, elm);
+ } else {
+ if (!this.cleanup.isValid(value))
+ return true;
+
+ if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value))
+ value = value.replace(/[^a-z]/gi, '');
+
+ if (tinyMCE.isIE && new RegExp('blockquote|code|samp', 'gi').test(value)) {
+ var b = this.selection.getBookmark();
+ this.getDoc().execCommand("FormatBlock", false, '<p>');
+ tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value);
+ this.selection.moveToBookmark(b);
+ } else
+ this.getDoc().execCommand("FormatBlock", false, value);
+ }
+
+ tinyMCE.triggerNodeChange();
+
+ break;
+
+ case "mceRemoveNode":
+ if (!value)
+ value = tinyMCE.getParentElement(this.getFocusElement());
+
+ if (tinyMCE.isIE) {
+ value.outerHTML = value.innerHTML;
+ } else {
+ var rng = value.ownerDocument.createRange();
+ rng.setStartBefore(value);
+ rng.setEndAfter(value);
+ rng.deleteContents();
+ rng.insertNode(rng.createContextualFragment(value.innerHTML));
+ }
+
+ tinyMCE.triggerNodeChange();
+
+ break;
+
+ case "mceSelectNodeDepth":
+ var parentNode = this.getFocusElement();
+ for (i=0; parentNode; i++) {
+ if (parentNode.nodeName.toLowerCase() == "body")
+ break;
+
+ if (parentNode.nodeName.toLowerCase() == "#text") {
+ i--;
+ parentNode = parentNode.parentNode;
+ continue;
+ }
+
+ if (i == value) {
+ this.selection.selectNode(parentNode, false);
+ tinyMCE.triggerNodeChange();
+ tinyMCE.selectedNode = parentNode;
+ return;
+ }
+
+ parentNode = parentNode.parentNode;
+ }
+
+ break;
+
+ case "mceSetStyleInfo":
+ case "SetStyleInfo":
+ var rng = this.getRng();
+ var sel = this.getSel();
+ var scmd = value.command;
+ var sname = value.name;
+ var svalue = value.value == null ? '' : value.value;
+ //var svalue = value['value'] == null ? '' : value['value'];
+ var wrapper = value.wrapper ? value.wrapper : "span";
+ var parentElm = null;
+ var invalidRe = new RegExp("^BODY|HTML$", "g");
+ var invalidParentsRe = tinyMCE.settings.merge_styles_invalid_parents !== '' ? new RegExp(tinyMCE.settings.merge_styles_invalid_parents, "gi") : null;
+
+ // Whole element selected check
+ if (tinyMCE.isIE) {
+ // Control range
+ if (rng.item)
+ parentElm = rng.item(0);
+ else {
+ var pelm = rng.parentElement();
+ var prng = doc.selection.createRange();
+ prng.moveToElementText(pelm);
+
+ if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) {
+ if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName))
+ parentElm = pelm;
+ }
+ }
+ } else {
+ var felm = this.getFocusElement();
+ if (sel.isCollapsed || (new RegExp('td|tr|tbody|table|img', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode))
+ parentElm = felm;
+ }
+
+ // Whole element selected
+ if (parentElm && !invalidRe.test(parentElm.nodeName)) {
+ if (scmd == "setstyle")
+ tinyMCE.setStyleAttrib(parentElm, sname, svalue);
+
+ if (scmd == "setattrib")
+ tinyMCE.setAttrib(parentElm, sname, svalue);
+
+ if (scmd == "removeformat") {
+ parentElm.style.cssText = '';
+ tinyMCE.setAttrib(parentElm, 'class', '');
+ }
+
+ // Remove style/attribs from all children
+ var ch = tinyMCE.getNodeTree(parentElm, [], 1);
+ for (z=0; z<ch.length; z++) {
+ if (ch[z] == parentElm)
+ continue;
+
+ if (scmd == "setstyle")
+ tinyMCE.setStyleAttrib(ch[z], sname, '');
+
+ if (scmd == "setattrib")
+ tinyMCE.setAttrib(ch[z], sname, '');
+
+ if (scmd == "removeformat") {
+ ch[z].style.cssText = '';
+ tinyMCE.setAttrib(ch[z], 'class', '');
+ }
+ }
+ } else {
+ this._setUseCSS(false); // Bug in FF when running in fullscreen
+ doc.execCommand("FontName", false, "#mce_temp_font#");
+ var elementArray = tinyMCE.getElementsByAttributeValue(this.getBody(), "font", "face", "#mce_temp_font#");
+
+ // Change them all
+ for (x=0; x<elementArray.length; x++) {
+ elm = elementArray[x];
+ if (elm) {
+ var spanElm = doc.createElement(wrapper);
+
+ if (scmd == "setstyle")
+ tinyMCE.setStyleAttrib(spanElm, sname, svalue);
+
+ if (scmd == "setattrib")
+ tinyMCE.setAttrib(spanElm, sname, svalue);
+
+ if (scmd == "removeformat") {
+ spanElm.style.cssText = '';
+ tinyMCE.setAttrib(spanElm, 'class', '');
+ }
+
+ if (elm.hasChildNodes()) {
+ for (i=0; i<elm.childNodes.length; i++)
+ spanElm.appendChild(elm.childNodes[i].cloneNode(true));
+ }
+
+ spanElm.setAttribute("mce_new", "true");
+ elm.parentNode.replaceChild(spanElm, elm);
+
+ // Remove style/attribs from all children
+ var ch = tinyMCE.getNodeTree(spanElm, [], 1);
+ for (z=0; z<ch.length; z++) {
+ if (ch[z] == spanElm)
+ continue;
+
+ if (scmd == "setstyle")
+ tinyMCE.setStyleAttrib(ch[z], sname, '');
+
+ if (scmd == "setattrib")
+ tinyMCE.setAttrib(ch[z], sname, '');
+
+ if (scmd == "removeformat") {
+ ch[z].style.cssText = '';
+ tinyMCE.setAttrib(ch[z], 'class', '');
+ }
+ }
+ }
+ }
+ }
+
+ // Cleaup wrappers
+ var nodes = doc.getElementsByTagName(wrapper);
+ for (i=nodes.length-1; i>=0; i--) {
+ var elm = nodes[i];
+ var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true";
+
+ elm.removeAttribute("mce_new");
+
+ // Is only child a element
+ if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) {
+ //tinyMCE.debug("merge1" + isNew);
+ this._mergeElements(scmd, elm, elm.childNodes[0], isNew);
+ continue;
+ }
+
+ // Is I the only child
+ if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) {
+ //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName);
+ if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName))
+ this._mergeElements(scmd, elm.parentNode, elm, false);
+ }
+ }
+
+ // Remove empty wrappers
+ var nodes = doc.getElementsByTagName(wrapper);
+ for (i=nodes.length-1; i>=0; i--) {
+ var elm = nodes[i], isEmpty = true;
+
+ // Check if it has any attribs
+ var tmp = doc.createElement("body");
+ tmp.appendChild(elm.cloneNode(false));
+
+ // Is empty span, remove it
+ tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), '');
+ //tinyMCE.debug(tmp.innerHTML);
+ if (new RegExp('<span>', 'gi').test(tmp.innerHTML)) {
+ for (x=0; x<elm.childNodes.length; x++) {
+ if (elm.parentNode != null)
+ elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true), elm);
+ }
+
+ elm.parentNode.removeChild(elm);
+ }
+ }
+
+ // Re add the visual aids
+ if (scmd == "removeformat")
+ tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
+
+ tinyMCE.triggerNodeChange();
+
+ break;
+
+ case "FontName":
+ if (value == null) {
+ var s = this.getSel();
+
+ // Find font and select it
+ if (tinyMCE.isGecko && s.isCollapsed) {
+ var f = tinyMCE.getParentElement(this.getFocusElement(), "font");
+
+ if (f != null)
+ this.selection.selectNode(f, false);
+ }
+
+ // Remove format
+ this.getDoc().execCommand("RemoveFormat", false, null);
+
+ // Collapse range if font was found
+ if (f != null && tinyMCE.isGecko) {
+ var r = this.getRng().cloneRange();
+ r.collapse(true);
+ s.removeAllRanges();
+ s.addRange(r);
+ }
+ } else
+ this.getDoc().execCommand('FontName', false, value);
+
+ if (tinyMCE.isGecko)
+ window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+
+ return;
+
+ case "FontSize":
+ this.getDoc().execCommand('FontSize', false, value);
+
+ if (tinyMCE.isGecko)
+ window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+
+ return;
+
+ case "forecolor":
+ value = value == null ? this.foreColor : value;
+ value = tinyMCE.trim(value);
+ value = value.charAt(0) != '#' ? (isNaN('0x' + value) ? value : '#' + value) : value;
+
+ this.foreColor = value;
+ this.getDoc().execCommand('forecolor', false, value);
+ break;
+
+ case "HiliteColor":
+ value = value == null ? this.backColor : value;
+ value = tinyMCE.trim(value);
+ value = value.charAt(0) != '#' ? (isNaN('0x' + value) ? value : '#' + value) : value;
+ this.backColor = value;
+
+ if (tinyMCE.isGecko || tinyMCE.isOpera) {
+ this._setUseCSS(true);
+ this.getDoc().execCommand('hilitecolor', false, value);
+ this._setUseCSS(false);
+ } else
+ this.getDoc().execCommand('BackColor', false, value);
+ break;
+
+ case "Cut":
+ case "Copy":
+ case "Paste":
+ var cmdFailed = false;
+
+ // Try executing command
+ eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');
+
+ if (tinyMCE.isOpera && cmdFailed)
+ alert('Currently not supported by your browser, use keyboard shortcuts instead.');
+
+ // Alert error in gecko if command failed
+ if (tinyMCE.isGecko && cmdFailed) {
+ // Confirm more info
+ if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))
+ window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal');
+
+ return;
+ } else
+ tinyMCE.triggerNodeChange();
+ break;
+
+ case "mceSetContent":
+ if (!value)
+ value = "";
+
+ // Call custom cleanup code
+ value = tinyMCE.storeAwayURLs(value);
+ value = tinyMCE._customCleanup(this, "insert_to_editor", value);
+
+ if (this.getBody().nodeName == 'BODY')
+ tinyMCE._setHTML(doc, value);
+ else
+ this.getBody().innerHTML = value;
+
+ tinyMCE.setInnerHTML(this.getBody(), tinyMCE._cleanupHTML(this, doc, this.settings, this.getBody(), false, false, false, true));
+ tinyMCE.convertAllRelativeURLs(this.getBody());
+
+ // Cleanup any mess left from storyAwayURLs
+ tinyMCE._removeInternal(this.getBody());
+
+ // When editing always use fonts internaly
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ tinyMCE.convertSpansToFonts(doc);
+
+ tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
+ tinyMCE._setEventsEnabled(this.getBody(), false);
+ this._addBogusBR();
+
+ return true;
+
+ case "mceCleanup":
+ var b = this.selection.getBookmark();
+ tinyMCE._setHTML(this.contentDocument, this.getBody().innerHTML);
+ tinyMCE.setInnerHTML(this.getBody(), tinyMCE._cleanupHTML(this, this.contentDocument, this.settings, this.getBody(), this.visualAid));
+ tinyMCE.convertAllRelativeURLs(doc.body);
+
+ // When editing always use fonts internaly
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ tinyMCE.convertSpansToFonts(doc);
+
+ tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
+ tinyMCE._setEventsEnabled(this.getBody(), false);
+ this._addBogusBR();
+ this.repaint();
+ this.selection.moveToBookmark(b);
+ tinyMCE.triggerNodeChange();
+ break;
+
+ case "mceReplaceContent":
+ // Force empty string
+ if (!value)
+ value = '';
+
+ this.getWin().focus();
+
+ var selectedText = "";
+
+ if (tinyMCE.isIE) {
+ var rng = doc.selection.createRange();
+ selectedText = rng.text;
+ } else
+ selectedText = this.getSel().toString();
+
+ if (selectedText.length > 0) {
+ value = tinyMCE.replaceVar(value, "selection", selectedText);
+ tinyMCE.execCommand('mceInsertContent', false, value);
+ }
+
+ this._addBogusBR();
+ tinyMCE.triggerNodeChange();
+ break;
+
+ case "mceSetAttribute":
+ if (typeof(value) == 'object') {
+ var targetElms = (typeof(value.targets) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value.targets;
+ var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms);
+
+ if (targetNode) {
+ targetNode.setAttribute(value.name, value.value);
+ tinyMCE.triggerNodeChange();
+ }
+ }
+ break;
+
+ case "mceSetCSSClass":
+ this.execCommand("mceSetStyleInfo", false, {command : "setattrib", name : "class", value : value});
+ break;
+
+ case "mceInsertRawHTML":
+ var key = 'tiny_mce_marker';
+
+ this.execCommand('mceBeginUndoLevel');
+
+ // Insert marker key
+ this.execCommand('mceInsertContent', false, key);
+
+ // Store away scroll pos
+ var scrollX = this.getBody().scrollLeft + this.getDoc().documentElement.scrollLeft;
+ var scrollY = this.getBody().scrollTop + this.getDoc().documentElement.scrollTop;
+
+ // Find marker and replace with RAW HTML
+ var html = this.getBody().innerHTML;
+ if ((pos = html.indexOf(key)) != -1)
+ tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length));
+
+ // Restore scoll pos
+ this.contentWindow.scrollTo(scrollX, scrollY);
+
+ this.execCommand('mceEndUndoLevel');
+
+ break;
+
+ case "mceInsertContent":
+ // Force empty string
+ if (!value)
+ value = '';
+
+ var insertHTMLFailed = false;
+
+ // Removed since it produced problems in IE
+ // this.getWin().focus();
+
+ if (tinyMCE.isGecko || tinyMCE.isOpera) {
+ try {
+ // Is plain text or HTML, &, etc will be encoded wrong in FF
+ if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) {
+ var r = this.getRng();
+ var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value));
+ var s = this.getSel();
+ var r2 = r.cloneRange();
+
+ // Insert text at cursor position
+ s.removeAllRanges();
+ r.deleteContents();
+ r.insertNode(n);
+
+ // Move the cursor to the end of text
+ r2.selectNode(n);
+ r2.collapse(false);
+ s.removeAllRanges();
+ s.addRange(r2);
+ } else {
+ value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value);
+ this.getDoc().execCommand('inserthtml', false, value);
+ tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);
+ }
+ } catch (ex) {
+ insertHTMLFailed = true;
+ }
+
+ if (!insertHTMLFailed) {
+ tinyMCE.triggerNodeChange();
+ return;
+ }
+ }
+
+ if (!tinyMCE.isIE) {
+ var isHTML = value.indexOf('<') != -1;
+ var sel = this.getSel();
+ var rng = this.getRng();
+
+ if (isHTML) {
+ if (tinyMCE.isSafari) {
+ var tmpRng = this.getDoc().createRange();
+
+ tmpRng.setStart(this.getBody(), 0);
+ tmpRng.setEnd(this.getBody(), 0);
+
+ value = tmpRng.createContextualFragment(value);
+ } else
+ value = rng.createContextualFragment(value);
+ } else {
+ // Setup text node
+ value = doc.createTextNode(tinyMCE.entityDecode(value));
+ }
+
+ // Insert plain text in Safari
+ if (tinyMCE.isSafari && !isHTML) {
+ this.execCommand('InsertText', false, value.nodeValue);
+ tinyMCE.triggerNodeChange();
+ return true;
+ } else if (tinyMCE.isSafari && isHTML) {
+ rng.deleteContents();
+ rng.insertNode(value);
+ tinyMCE.triggerNodeChange();
+ return true;
+ }
+
+ rng.deleteContents();
+
+ // If target node is text do special treatment, (Mozilla 1.3 fix)
+ if (rng.startContainer.nodeType == 3) {
+ var node = rng.startContainer.splitText(rng.startOffset);
+ node.parentNode.insertBefore(value, node);
+ } else
+ rng.insertNode(value);
+
+ if (!isHTML) {
+ // Removes weird selection trails
+ sel.selectAllChildren(doc.body);
+ sel.removeAllRanges();
+
+ // Move cursor to end of content
+ var rng = doc.createRange();
+
+ rng.selectNode(value);
+ rng.collapse(false);
+
+ sel.addRange(rng);
+ } else
+ rng.collapse(false);
+
+ tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);
+ } else {
+ var rng = doc.selection.createRange(), tmpRng = null;
+ var c = value.indexOf('<!--') != -1;
+
+ // Fix comment bug, add tag before comments
+ if (c)
+ value = tinyMCE.uniqueTag + value;
+
+ // tmpRng = rng.duplicate(); // Store away range (Fixes Undo bookmark bug in IE)
+
+ if (rng.item)
+ rng.item(0).outerHTML = value;
+ else
+ rng.pasteHTML(value);
+
+ //if (tmpRng)
+ // tmpRng.select(); // Restore range (Fixes Undo bookmark bug in IE)
+
+ // Remove unique tag
+ if (c) {
+ var e = this.getDoc().getElementById('mceTMPElement');
+ e.parentNode.removeChild(e);
+ }
+ }
+
+ tinyMCE.execCommand("mceAddUndoLevel");
+ tinyMCE.triggerNodeChange();
+ break;
+
+ case "mceStartTyping":
+ if (tinyMCE.settings.custom_undo_redo && this.undoRedo.typingUndoIndex == -1) {
+ this.undoRedo.typingUndoIndex = this.undoRedo.undoIndex;
+ tinyMCE.typingUndoIndex = tinyMCE.undoIndex;
+ this.execCommand('mceAddUndoLevel');
+ }
+ break;
+
+ case "mceEndTyping":
+ if (tinyMCE.settings.custom_undo_redo && this.undoRedo.typingUndoIndex != -1) {
+ this.execCommand('mceAddUndoLevel');
+ this.undoRedo.typingUndoIndex = -1;
+ }
+
+ tinyMCE.typingUndoIndex = -1;
+ break;
+
+ case "mceBeginUndoLevel":
+ this.undoRedoLevel = false;
+ break;
+
+ case "mceEndUndoLevel":
+ this.undoRedoLevel = true;
+ this.execCommand('mceAddUndoLevel');
+ break;
+
+ case "mceAddUndoLevel":
+ if (tinyMCE.settings.custom_undo_redo && this.undoRedoLevel) {
+ if (this.undoRedo.add())
+ tinyMCE.triggerNodeChange(false);
+ }
+ break;
+
+ case "Undo":
+ if (tinyMCE.settings.custom_undo_redo) {
+ tinyMCE.execCommand("mceEndTyping");
+ this.undoRedo.undo();
+ tinyMCE.triggerNodeChange();
+ } else
+ this.getDoc().execCommand(command, user_interface, value);
+ break;
+
+ case "Redo":
+ if (tinyMCE.settings.custom_undo_redo) {
+ tinyMCE.execCommand("mceEndTyping");
+ this.undoRedo.redo();
+ tinyMCE.triggerNodeChange();
+ } else
+ this.getDoc().execCommand(command, user_interface, value);
+ break;
+
+ case "mceToggleVisualAid":
+ this.visualAid = !this.visualAid;
+ tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
+ tinyMCE.triggerNodeChange();
+ break;
+
+ case "Indent":
+ this.getDoc().execCommand(command, user_interface, value);
+ tinyMCE.triggerNodeChange();
+
+ if (tinyMCE.isIE) {
+ var n = tinyMCE.getParentElement(this.getFocusElement(), "blockquote");
+ do {
+ if (n && n.nodeName == "BLOCKQUOTE") {
+ n.removeAttribute("dir");
+ n.removeAttribute("style");
+ }
+ } while (n != null && (n = n.parentNode) != null);
+ }
+ break;
+
+ case "RemoveFormat":
+ case "removeformat":
+ var text = this.selection.getSelectedText();
+
+ if (tinyMCE.isOpera) {
+ this.getDoc().execCommand("RemoveFormat", false, null);
+ return;
+ }
+
+ if (tinyMCE.isIE) {
+ try {
+ var rng = doc.selection.createRange();
+ rng.execCommand("RemoveFormat", false, null);
+ } catch (e) {
+ // Do nothing
+ }
+
+ this.execCommand("mceSetStyleInfo", false, {command : "removeformat"});
+ } else {
+ this.getDoc().execCommand(command, user_interface, value);
+
+ this.execCommand("mceSetStyleInfo", false, {command : "removeformat"});
+ }
+
+ // Remove class
+ if (text.length == 0)
+ this.execCommand("mceSetCSSClass", false, "");
+
+ tinyMCE.triggerNodeChange();
+ break;
+
+ default:
+ this.getDoc().execCommand(command, user_interface, value);
+
+ if (tinyMCE.isGecko)
+ window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+ else
+ tinyMCE.triggerNodeChange();
+ }
+
+ // Add undo level after modification
+ if (command != "mceAddUndoLevel" && command != "Undo" && command != "Redo" && command != "mceStartTyping" && command != "mceEndTyping")
+ tinyMCE.execCommand("mceAddUndoLevel");
+ },
+
+ queryCommandValue : function(c) {
+ try {
+ return this.getDoc().queryCommandValue(c);
+ } catch (e) {
+ return null;
+ }
+ },
+
+ queryCommandState : function(c) {
+ return this.getDoc().queryCommandState(c);
+ },
+
+ _addBogusBR : function() {
+ var b = this.getBody();
+
+ if (tinyMCE.isGecko && !b.hasChildNodes())
+ b.innerHTML = '<br _moz_editor_bogus_node="TRUE" />';
+ },
+
+ _onAdd : function(replace_element, form_element_name, target_document) {
+ var hc, th, tos, editorTemplate, targetDoc, deltaWidth, deltaHeight, html, rng, fragment;
+ var dynamicIFrame, tElm, doc, parentElm;
+
+ th = this.settings.theme;
+ tos = tinyMCE.themes[th];
+
+ targetDoc = target_document ? target_document : document;
+
+ this.targetDoc = targetDoc;
+
+ tinyMCE.themeURL = tinyMCE.baseURL + "/themes/" + this.settings.theme;
+ this.settings.themeurl = tinyMCE.themeURL;
+
+ if (!replace_element) {
+ alert("Error: Could not find the target element.");
+ return false;
+ }
+
+ if (tos.getEditorTemplate)
+ editorTemplate = tos.getEditorTemplate(this.settings, this.editorId);
+
+ deltaWidth = editorTemplate.delta_width ? editorTemplate.delta_width : 0;
+ deltaHeight = editorTemplate.delta_height ? editorTemplate.delta_height : 0;
+ html = '<span id="' + this.editorId + '_parent" class="mceEditorContainer">' + editorTemplate.html;
+
+ html = tinyMCE.replaceVar(html, "editor_id", this.editorId);
+
+ if (!this.settings.default_document)
+ this.settings.default_document = tinyMCE.baseURL + "/blank.htm";
+
+ this.settings.old_width = this.settings.width;
+ this.settings.old_height = this.settings.height;
+
+ // Set default width, height
+ if (this.settings.width == -1)
+ this.settings.width = replace_element.offsetWidth;
+
+ if (this.settings.height == -1)
+ this.settings.height = replace_element.offsetHeight;
+
+ // Try the style width
+ if (this.settings.width == 0)
+ this.settings.width = replace_element.style.width;
+
+ // Try the style height
+ if (this.settings.height == 0)
+ this.settings.height = replace_element.style.height;
+
+ // If no width/height then default to 320x240, better than nothing
+ if (this.settings.width == 0)
+ this.settings.width = 320;
+
+ if (this.settings.height == 0)
+ this.settings.height = 240;
+
+ this.settings.area_width = parseInt(this.settings.width);
+ this.settings.area_height = parseInt(this.settings.height);
+ this.settings.area_width += deltaWidth;
+ this.settings.area_height += deltaHeight;
+ this.settings.width_style = "" + this.settings.width;
+ this.settings.height_style = "" + this.settings.height;
+
+ // Special % handling
+ if (("" + this.settings.width).indexOf('%') != -1)
+ this.settings.area_width = "100%";
+ else
+ this.settings.width_style += 'px';
+
+ if (("" + this.settings.height).indexOf('%') != -1)
+ this.settings.area_height = "100%";
+ else
+ this.settings.height_style += 'px';
+
+ if (("" + replace_element.style.width).indexOf('%') != -1) {
+ this.settings.width = replace_element.style.width;
+ this.settings.area_width = "100%";
+ this.settings.width_style = "100%";
+ }
+
+ if (("" + replace_element.style.height).indexOf('%') != -1) {
+ this.settings.height = replace_element.style.height;
+ this.settings.area_height = "100%";
+ this.settings.height_style = "100%";
+ }
+
+ html = tinyMCE.applyTemplate(html);
+
+ this.settings.width = this.settings.old_width;
+ this.settings.height = this.settings.old_height;
+
+ this.visualAid = this.settings.visual;
+ this.formTargetElementId = form_element_name;
+
+ // Get replace_element contents
+ if (replace_element.nodeName == "TEXTAREA" || replace_element.nodeName == "INPUT")
+ this.startContent = replace_element.value;
+ else
+ this.startContent = replace_element.innerHTML;
+
+ // If not text area or input
+ if (replace_element.nodeName != "TEXTAREA" && replace_element.nodeName != "INPUT") {
+ this.oldTargetElement = replace_element;
+
+ // Debug mode
+ hc = '<input type="hidden" id="' + form_element_name + '" name="' + form_element_name + '" />';
+ this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');
+ this.oldTargetElement.style.display = "none";
+
+ html += '</span>';
+
+ if (tinyMCE.isGecko)
+ html = hc + html;
+ else
+ html += hc;
+
+ // Output HTML and set editable
+ if (tinyMCE.isGecko) {
+ rng = replace_element.ownerDocument.createRange();
+ rng.setStartBefore(replace_element);
+
+ fragment = rng.createContextualFragment(html);
+ tinyMCE.insertAfter(fragment, replace_element);
+ } else
+ replace_element.insertAdjacentHTML("beforeBegin", html);
+ } else {
+ html += '</span>';
+
+ // Just hide the textarea element
+ this.oldTargetElement = replace_element;
+
+ this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');
+ this.oldTargetElement.style.display = "none";
+
+ // Output HTML and set editable
+ if (tinyMCE.isGecko) {
+ rng = replace_element.ownerDocument.createRange();
+ rng.setStartBefore(replace_element);
+
+ fragment = rng.createContextualFragment(html);
+ tinyMCE.insertAfter(fragment, replace_element);
+ } else
+ replace_element.insertAdjacentHTML("beforeBegin", html);
+ }
+
+ // Setup iframe
+ dynamicIFrame = false;
+ tElm = targetDoc.getElementById(this.editorId);
+
+ if (!tinyMCE.isIE) {
+ // Node case is preserved in XML strict mode
+ if (tElm && (tElm.nodeName == "SPAN" || tElm.nodeName == "span")) {
+ tElm = tinyMCE._createIFrame(tElm, targetDoc);
+ dynamicIFrame = true;
+ }
+
+ this.targetElement = tElm;
+ this.iframeElement = tElm;
+ this.contentDocument = tElm.contentDocument;
+ this.contentWindow = tElm.contentWindow;
+
+ //this.getDoc().designMode = "on";
+ } else {
+ if (tElm && tElm.nodeName == "SPAN")
+ tElm = tinyMCE._createIFrame(tElm, targetDoc, targetDoc.parentWindow);
+ else
+ tElm = targetDoc.frames[this.editorId];
+
+ this.targetElement = tElm;
+ this.iframeElement = targetDoc.getElementById(this.editorId);
+
+ if (tinyMCE.isOpera) {
+ this.contentDocument = this.iframeElement.contentDocument;
+ this.contentWindow = this.iframeElement.contentWindow;
+ dynamicIFrame = true;
+ } else {
+ this.contentDocument = tElm.window.document;
+ this.contentWindow = tElm.window;
+ }
+
+ this.getDoc().designMode = "on";
+ }
+
+ // Setup base HTML
+ doc = this.contentDocument;
+ if (dynamicIFrame) {
+ html = tinyMCE.getParam('doctype') + '<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="' + tinyMCE.settings.base_href + '" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';
+
+ try {
+ if (!this.isHidden())
+ this.getDoc().designMode = "on";
+
+ doc.open();
+ doc.write(html);
+ doc.close();
+ } catch (e) {
+ // Failed Mozilla 1.3
+ this.getDoc().location.href = tinyMCE.baseURL + "/blank.htm";
+ }
+ }
+
+ // This timeout is needed in MSIE 5.5 for some odd reason
+ // it seems that the document.frames isn't initialized yet?
+ if (tinyMCE.isIE)
+ window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\"" + this.editorId + "\"]);", 1);
+
+ // Setup element references
+ parentElm = this.targetDoc.getElementById(this.editorId + '_parent');
+ this.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;
+
+ tinyMCE.setupContent(this.editorId, true);
+
+ return true;
+ },
+
+ setBaseHREF : function(u) {
+ var h, b, d, nl;
+
+ d = this.getDoc();
+ nl = d.getElementsByTagName("base");
+ b = nl.length > 0 ? nl[0] : null;
+
+ if (!b) {
+ nl = d.getElementsByTagName("head");
+ h = nl.length > 0 ? nl[0] : null;
+
+ b = d.createElement("base");
+ b.setAttribute('href', u);
+ h.appendChild(b);
+ } else {
+ if (u == '' || u == null)
+ b.parentNode.removeChild(b);
+ else
+ b.setAttribute('href', u);
+ }
+ },
+
+ getHTML : function(r) {
+ var h, d = this.getDoc(), b = this.getBody();
+
+ if (r)
+ return b.innerHTML;
+
+ h = tinyMCE._cleanupHTML(this, d, this.settings, b, false, true, false, true);
+
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ tinyMCE.convertSpansToFonts(d);
+
+ return h;
+ },
+
+ setHTML : function(h) {
+ this.execCommand('mceSetContent', false, h);
+ this.repaint();
+ },
+
+ getFocusElement : function() {
+ return this.selection.getFocusElement();
+ },
+
+ getSel : function() {
+ return this.selection.getSel();
+ },
+
+ getRng : function() {
+ return this.selection.getRng();
+ },
+
+ triggerSave : function(skip_cleanup, skip_callback) {
+ var e, nl = [], i, s, content, htm;
+
+ if (!this.enabled)
+ return;
+
+ this.switchSettings();
+ s = tinyMCE.settings;
+
+ // Force hidden tabs visible while serializing
+ if (tinyMCE.isRealIE) {
+ e = this.iframeElement;
+
+ do {
+ if (e.style && e.style.display == 'none') {
+ e.style.display = 'block';
+ nl[nl.length] = {elm : e, type : 'style'};
+ }
+
+ if (e.style && s.hidden_tab_class.length > 0 && e.className.indexOf(s.hidden_tab_class) != -1) {
+ e.className = s.display_tab_class;
+ nl[nl.length] = {elm : e, type : 'class'};
+ }
+ } while ((e = e.parentNode) != null)
+ }
+
+ tinyMCE.settings.preformatted = false;
+
+ // Default to false
+ if (typeof(skip_cleanup) == "undefined")
+ skip_cleanup = false;
+
+ // Default to false
+ if (typeof(skip_callback) == "undefined")
+ skip_callback = false;
+
+ tinyMCE._setHTML(this.getDoc(), this.getBody().innerHTML);
+
+ // Remove visual aids when cleanup is disabled
+ if (this.settings.cleanup == false) {
+ tinyMCE.handleVisualAid(this.getBody(), true, false, this);
+ tinyMCE._setEventsEnabled(this.getBody(), true);
+ }
+
+ tinyMCE._customCleanup(this, "submit_content_dom", this.contentWindow.document.body);
+ htm = skip_cleanup ? this.getBody().innerHTML : tinyMCE._cleanupHTML(this, this.getDoc(), this.settings, this.getBody(), tinyMCE.visualAid, true, true);
+ htm = tinyMCE._customCleanup(this, "submit_content", htm);
+
+ if (!skip_callback && tinyMCE.settings.save_callback !== '')
+ content = tinyMCE.resolveDots(tinyMCE.settings.save_callback, window)(this.formTargetElementId,htm,this.getBody());
+
+ // Use callback content if available
+ if ((typeof(content) != "undefined") && content != null)
+ htm = content;
+
+ // Replace some weird entities (Bug: #1056343)
+ htm = tinyMCE.regexpReplace(htm, "(", "(", "gi");
+ htm = tinyMCE.regexpReplace(htm, ")", ")", "gi");
+ htm = tinyMCE.regexpReplace(htm, ";", ";", "gi");
+ htm = tinyMCE.regexpReplace(htm, """, """, "gi");
+ htm = tinyMCE.regexpReplace(htm, "^", "^", "gi");
+
+ if (this.formElement)
+ this.formElement.value = htm;
+
+ if (tinyMCE.isSafari && this.formElement)
+ this.formElement.innerText = htm;
+
+ // Hide them again (tabs in MSIE)
+ for (i=0; i<nl.length; i++) {
+ if (nl[i].type == 'style')
+ nl[i].elm.style.display = 'none';
+ else
+ nl[i].elm.className = s.hidden_tab_class;
+ }
+ }
+
+ };
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Cleanup.class.js */
+
+tinyMCE.add(TinyMCE_Engine, {
+ cleanupHTMLCode : function(s) {
+ s = s.replace(new RegExp('<p \\/>', 'gi'), '<p> </p>');
+ s = s.replace(new RegExp('<p>\\s*<\\/p>', 'gi'), '<p> </p>');
+
+ // Fix close BR elements
+ s = s.replace(new RegExp('<br>\\s*<\\/br>', 'gi'), '<br />');
+
+ // Open closed tags like <b/> to <b></b>
+ s = s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>', 'gi'), '<$1$2$3></$1$2>');
+
+ // Remove trailing space <b > to <b>
+ s = s.replace(new RegExp('\\s+></', 'gi'), '></');
+
+ // Close tags <img></img> to <img/>
+ s = s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>', 'gi'), '<$1$2 />');
+
+ // Weird MSIE bug, <p><hr /></p> breaks runtime?
+ if (tinyMCE.isIE)
+ s = s.replace(new RegExp('<p><hr \\/><\\/p>', 'gi'), "<hr>");
+
+ // Weird tags will make IE error #bug: 1538495
+ if (tinyMCE.isIE)
+ s = s.replace(/<!(\s*)\/>/g, '');
+
+ // Convert relative anchors to absolute URLs ex: #something to file.htm#something
+ // Removed: Since local document anchors should never be forced absolute example edit.php?id=something
+ //if (tinyMCE.getParam('convert_urls'))
+ // s = s.replace(new RegExp('(href=\"{0,1})(\\s*#)', 'gi'), '$1' + tinyMCE.settings.document_base_url + "#");
+
+ return s;
+ },
+
+ parseStyle : function(str) {
+ var ar = [], st, i, re, pa;
+
+ if (str == null)
+ return ar;
+
+ st = str.split(';');
+
+ tinyMCE.clearArray(ar);
+
+ for (i=0; i<st.length; i++) {
+ if (st[i] == '')
+ continue;
+
+ re = new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');
+ pa = st[i].replace(re, '$1||$2').split('||');
+ //tinyMCE.debug(str, pa[0] + "=" + pa[1], st[i].replace(re, '$1||$2'));
+ if (pa.length == 2)
+ ar[pa[0].toLowerCase()] = pa[1];
+ }
+
+ return ar;
+ },
+
+ compressStyle : function(ar, pr, sf, res) {
+ var box = [], i, a;
+
+ box[0] = ar[pr + '-top' + sf];
+ box[1] = ar[pr + '-left' + sf];
+ box[2] = ar[pr + '-right' + sf];
+ box[3] = ar[pr + '-bottom' + sf];
+
+ for (i=0; i<box.length; i++) {
+ if (box[i] == null)
+ return;
+
+ if (i && box[i] != box[i-1])
+ return;
+ }
+
+ // They are all the same
+ ar[res] = box[0];
+ ar[pr + '-top' + sf] = null;
+ ar[pr + '-left' + sf] = null;
+ ar[pr + '-right' + sf] = null;
+ ar[pr + '-bottom' + sf] = null;
+ },
+
+ serializeStyle : function(ar) {
+ var str = "", key, val, m;
+
+ // Compress box
+ tinyMCE.compressStyle(ar, "border", "", "border");
+ tinyMCE.compressStyle(ar, "border", "-width", "border-width");
+ tinyMCE.compressStyle(ar, "border", "-color", "border-color");
+ tinyMCE.compressStyle(ar, "border", "-style", "border-style");
+ tinyMCE.compressStyle(ar, "padding", "", "padding");
+ tinyMCE.compressStyle(ar, "margin", "", "margin");
+
+ for (key in ar) {
+ val = ar[key];
+
+ if (typeof(val) == 'function')
+ continue;
+
+ if (key.indexOf('mso-') == 0)
+ continue;
+
+ if (val != null && val !== '') {
+ val = '' + val; // Force string
+
+ // Fix style URL
+ val = val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)", 'gi'), "url('$1')");
+
+ // Convert URL
+ if (val.indexOf('url(') != -1 && tinyMCE.getParam('convert_urls')) {
+ m = new RegExp("url\\('(.*?)'\\)").exec(val);
+
+ if (m.length > 1)
+ val = "url('" + eval(tinyMCE.getParam('urlconverter_callback') + "(m[1], null, true);") + "')";
+ }
+
+ // Force HEX colors
+ if (tinyMCE.getParam("force_hex_style_colors"))
+ val = tinyMCE.convertRGBToHex(val, true);
+
+ val = val.replace(/\"/g, '\'');
+
+ if (val != "url('')")
+ str += key.toLowerCase() + ": " + val + "; ";
+ }
+ }
+
+ if (new RegExp('; $').test(str))
+ str = str.substring(0, str.length - 2);
+
+ return str;
+ },
+
+ convertRGBToHex : function(s, k) {
+ var re, rgb;
+
+ if (s.toLowerCase().indexOf('rgb') != -1) {
+ re = new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)", "gi");
+ rgb = s.replace(re, "$1,$2,$3,$4,$5").split(',');
+
+ if (rgb.length == 5) {
+ r = parseInt(rgb[1]).toString(16);
+ g = parseInt(rgb[2]).toString(16);
+ b = parseInt(rgb[3]).toString(16);
+
+ r = r.length == 1 ? '0' + r : r;
+ g = g.length == 1 ? '0' + g : g;
+ b = b.length == 1 ? '0' + b : b;
+
+ s = "#" + r + g + b;
+
+ if (k)
+ s = rgb[0] + s + rgb[4];
+ }
+ }
+
+ return s;
+ },
+
+ convertHexToRGB : function(s) {
+ if (s.indexOf('#') != -1) {
+ s = s.replace(new RegExp('[^0-9A-F]', 'gi'), '');
+ return "rgb(" + parseInt(s.substring(0, 2), 16) + "," + parseInt(s.substring(2, 4), 16) + "," + parseInt(s.substring(4, 6), 16) + ")";
+ }
+
+ return s;
+ },
+
+ convertSpansToFonts : function(doc) {
+ var s, i, size, fSize, x, fFace, fColor, sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');
+
+ s = tinyMCE.selectElements(doc, 'span,font');
+ for (i=0; i<s.length; i++) {
+ size = tinyMCE.trim(s[i].style.fontSize).toLowerCase();
+ fSize = 0;
+
+ for (x=0; x<sizes.length; x++) {
+ if (sizes[x] == size) {
+ fSize = x + 1;
+ break;
+ }
+ }
+
+ if (fSize > 0) {
+ tinyMCE.setAttrib(s[i], 'size', fSize);
+ s[i].style.fontSize = '';
+ }
+
+ fFace = s[i].style.fontFamily;
+ if (fFace != null && fFace !== '') {
+ tinyMCE.setAttrib(s[i], 'face', fFace);
+ s[i].style.fontFamily = '';
+ }
+
+ fColor = s[i].style.color;
+ if (fColor != null && fColor !== '') {
+ tinyMCE.setAttrib(s[i], 'color', tinyMCE.convertRGBToHex(fColor));
+ s[i].style.color = '';
+ }
+ }
+ },
+
+ convertFontsToSpans : function(doc) {
+ var fsClasses, s, i, fSize, fFace, fColor, sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');
+
+ fsClasses = tinyMCE.getParam('font_size_classes');
+ if (fsClasses !== '')
+ fsClasses = fsClasses.replace(/\s+/, '').split(',');
+ else
+ fsClasses = null;
+
+ s = tinyMCE.selectElements(doc, 'span,font');
+ for (i=0; i<s.length; i++) {
+ fSize = tinyMCE.getAttrib(s[i], 'size');
+ fFace = tinyMCE.getAttrib(s[i], 'face');
+ fColor = tinyMCE.getAttrib(s[i], 'color');
+
+ if (fSize !== '') {
+ fSize = parseInt(fSize);
+
+ if (fSize > 0 && fSize < 8) {
+ if (fsClasses != null)
+ tinyMCE.setAttrib(s[i], 'class', fsClasses[fSize-1]);
+ else
+ s[i].style.fontSize = sizes[fSize-1];
+ }
+
+ s[i].removeAttribute('size');
+ }
+
+ if (fFace !== '') {
+ s[i].style.fontFamily = fFace;
+ s[i].removeAttribute('face');
+ }
+
+ if (fColor !== '') {
+ s[i].style.color = fColor;
+ s[i].removeAttribute('color');
+ }
+ }
+ },
+
+ cleanupAnchors : function(doc) {
+ var i, cn, x, an = doc.getElementsByTagName("a");
+
+ // Loops backwards due to bug #1467987
+ for (i=an.length-1; i>=0; i--) {
+ if (tinyMCE.getAttrib(an[i], "name") !== '' && tinyMCE.getAttrib(an[i], "href") == '') {
+ cn = an[i].childNodes;
+
+ for (x=cn.length-1; x>=0; x--)
+ tinyMCE.insertAfter(cn[x], an[i]);
+ }
+ }
+ },
+
+ getContent : function(editor_id) {
+ if (typeof(editor_id) != "undefined")
+ tinyMCE.getInstanceById(editor_id).select();
+
+ if (tinyMCE.selectedInstance)
+ return tinyMCE.selectedInstance.getHTML();
+
+ return null;
+ },
+
+ _fixListElements : function(d) {
+ var nl, x, a = ['ol', 'ul'], i, n, p, r = new RegExp('^(OL|UL)$'), np;
+
+ for (x=0; x<a.length; x++) {
+ nl = d.getElementsByTagName(a[x]);
+
+ for (i=0; i<nl.length; i++) {
+ n = nl[i];
+ p = n.parentNode;
+
+ if (r.test(p.nodeName)) {
+ np = tinyMCE.prevNode(n, 'LI');
+
+ if (!np) {
+ np = d.createElement('li');
+ np.innerHTML = ' ';
+ np.appendChild(n);
+ p.insertBefore(np, p.firstChild);
+ } else
+ np.appendChild(n);
+ }
+ }
+ }
+ },
+
+ _fixTables : function(d) {
+ var nl, i, n, p, np, x, t;
+
+ nl = d.getElementsByTagName('table');
+ for (i=0; i<nl.length; i++) {
+ n = nl[i];
+
+ if ((p = tinyMCE.getParentElement(n, 'p,h1,h2,h3,h4,h5,h6')) != null) {
+ np = p.cloneNode(false);
+ np.removeAttribute('id');
+
+ t = n;
+
+ while ((n = n.nextSibling))
+ np.appendChild(n);
+
+ tinyMCE.insertAfter(np, p);
+ tinyMCE.insertAfter(t, p);
+ }
+ }
+ },
+
+ _cleanupHTML : function(inst, doc, config, elm, visual, on_save, on_submit, inn) {
+ var h, d, t1, t2, t3, t4, t5, c, s, nb;
+
+ if (!tinyMCE.getParam('cleanup'))
+ return elm.innerHTML;
+
+ on_save = typeof(on_save) == 'undefined' ? false : on_save;
+
+ c = inst.cleanup;
+ s = inst.settings;
+ d = c.settings.debug;
+
+ if (d)
+ t1 = new Date().getTime();
+
+ inst._fixRootBlocks();
+
+ if (tinyMCE.getParam("convert_fonts_to_spans"))
+ tinyMCE.convertFontsToSpans(doc);
+
+ if (tinyMCE.getParam("fix_list_elements"))
+ tinyMCE._fixListElements(doc);
+
+ if (tinyMCE.getParam("fix_table_elements"))
+ tinyMCE._fixTables(doc);
+
+ // Call custom cleanup code
+ tinyMCE._customCleanup(inst, on_save ? "get_from_editor_dom" : "insert_to_editor_dom", doc.body);
+
+ if (d)
+ t2 = new Date().getTime();
+
+ c.settings.on_save = on_save;
+
+ c.idCount = 0;
+ c.serializationId++; // Unique ID needed for the content duplication bug
+ c.serializedNodes = [];
+ c.sourceIndex = -1;
+
+ if (s.cleanup_serializer == "xml")
+ h = c.serializeNodeAsXML(elm, inn);
+ else
+ h = c.serializeNodeAsHTML(elm, inn);
+
+ if (d)
+ t3 = new Date().getTime();
+
+ // Post processing
+ nb = tinyMCE.getParam('entity_encoding') == 'numeric' ? ' ' : ' ';
+ h = h.replace(/<\/?(body|head|html)[^>]*>/gi, '');
+ h = h.replace(new RegExp(' (rowspan="1"|colspan="1")', 'g'), '');
+ h = h.replace(/<p><hr \/><\/p>/g, '<hr />');
+ h = h.replace(/<p>( | )<\/p><hr \/><p>( | )<\/p>/g, '<hr />');
+ h = h.replace(/<td>\s*<br \/>\s*<\/td>/g, '<td>' + nb + '</td>');
+ h = h.replace(/<p>\s*<br \/>\s*<\/p>/g, '<p>' + nb + '</p>');
+ h = h.replace(/<br \/>$/, ''); // Remove last BR for Gecko
+ h = h.replace(/<br \/><\/p>/g, '</p>'); // Remove last BR in P tags for Gecko
+ h = h.replace(/<p>\s*( | )\s*<br \/>\s*( | )\s*<\/p>/g, '<p>' + nb + '</p>');
+ h = h.replace(/<p>\s*( | )\s*<br \/>\s*<\/p>/g, '<p>' + nb + '</p>');
+ h = h.replace(/<p>\s*<br \/>\s* \s*<\/p>/g, '<p>' + nb + '</p>');
+ h = h.replace(new RegExp('<a>(.*?)<\\/a>', 'g'), '$1');
+ h = h.replace(/<p([^>]*)>\s*<\/p>/g, '<p$1>' + nb + '</p>');
+
+ // Clean body
+ if (/^\s*(<br \/>|<p> <\/p>|<p> <\/p>|<p><\/p>)\s*$/.test(h))
+ h = '';
+
+ // If preformatted
+ if (s.preformatted) {
+ h = h.replace(/^<pre>/, '');
+ h = h.replace(/<\/pre>$/, '');
+ h = '<pre>' + h + '</pre>';
+ }
+
+ // Gecko specific processing
+ if (tinyMCE.isGecko) {
+ // Makes no sence but FF generates it!!
+ h = h.replace(/<br \/>\s*<\/li>/g, '</li>');
+ h = h.replace(/ \s*<\/(dd|dt)>/g, '</$1>');
+ h = h.replace(/<o:p _moz-userdefined="" \/>/g, '');
+ h = h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g, '<td$1>' + nb + '</td>');
+ }
+
+ if (s.force_br_newlines)
+ h = h.replace(/<p>( | )<\/p>/g, '<br />');
+
+ // Call custom cleanup code
+ h = tinyMCE._customCleanup(inst, on_save ? "get_from_editor" : "insert_to_editor", h);
+
+ // Remove internal classes
+ if (on_save) {
+ h = h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|' + s.visual_table_class + ')', 'g'), '');
+ h = h.replace(new RegExp(' ?class=""', 'g'), '');
+ }
+
+ if (s.remove_linebreaks && !c.settings.indent)
+ h = h.replace(/\n|\r/g, ' ');
+
+ if (d)
+ t4 = new Date().getTime();
+
+ if (on_save && c.settings.indent)
+ h = c.formatHTML(h);
+
+ // If encoding (not recommended option)
+ if (on_submit && (s.encoding == "xml" || s.encoding == "html"))
+ h = c.xmlEncode(h);
+
+ if (d)
+ t5 = new Date().getTime();
+
+ if (c.settings.debug)
+ tinyMCE.debug("Cleanup in ms: Pre=" + (t2-t1) + ", Serialize: " + (t3-t2) + ", Post: " + (t4-t3) + ", Format: " + (t5-t4) + ", Sum: " + (t5-t1) + ".");
+
+ return h;
+ }
+});
+
+function TinyMCE_Cleanup() {
+ this.isIE = (navigator.appName == "Microsoft Internet Explorer");
+ this.rules = tinyMCE.clearArray([]);
+
+ // Default config
+ this.settings = {
+ indent_elements : 'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',
+ newline_before_elements : 'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',
+ newline_after_elements : 'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',
+ newline_before_after_elements : 'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',
+ indent_char : '\t',
+ indent_levels : 1,
+ entity_encoding : 'raw',
+ valid_elements : '*[*]',
+ entities : '',
+ url_converter : '',
+ invalid_elements : '',
+ verify_html : false
+ };
+
+ this.vElements = tinyMCE.clearArray([]);
+ this.vElementsRe = '';
+ this.closeElementsRe = /^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;
+ this.codeElementsRe = /^(SCRIPT|STYLE)$/;
+ this.serializationId = 0;
+ this.mceAttribs = {
+ href : 'mce_href',
+ src : 'mce_src',
+ type : 'mce_type'
+ };
+}
+
+TinyMCE_Cleanup.prototype = {
+ init : function(s) {
+ var n, a, i, ir, or, st;
+
+ for (n in s)
+ this.settings[n] = s[n];
+
+ // Setup code formating
+ s = this.settings;
+
+ // Setup regexps
+ this.inRe = this._arrayToRe(s.indent_elements.split(','), '', '^<(', ')[^>]*');
+ this.ouRe = this._arrayToRe(s.indent_elements.split(','), '', '^<\\/(', ')[^>]*');
+ this.nlBeforeRe = this._arrayToRe(s.newline_before_elements.split(','), 'gi', '<(', ')([^>]*)>');
+ this.nlAfterRe = this._arrayToRe(s.newline_after_elements.split(','), 'gi', '<(', ')([^>]*)>');
+ this.nlBeforeAfterRe = this._arrayToRe(s.newline_before_after_elements.split(','), 'gi', '<(\\/?)(', ')([^>]*)>');
+ this.serializedNodes = [];
+ this.serializationId = 0;
+
+ if (s.invalid_elements !== '')
+ this.iveRe = this._arrayToRe(s.invalid_elements.toUpperCase().split(','), 'g', '^(', ')$');
+ else
+ this.iveRe = null;
+
+ // Setup separator
+ st = '';
+ for (i=0; i<s.indent_levels; i++)
+ st += s.indent_char;
+
+ this.inStr = st;
+
+ // If verify_html if false force *[*]
+ if (!s.verify_html) {
+ s.valid_elements = '*[*]';
+ s.extended_valid_elements = '';
+ }
+
+ this.fillStr = s.entity_encoding == "named" ? " " : " ";
+ this.idCount = 0;
+ this.xmlEncodeRe = new RegExp('[\u007F-\uFFFF<>&"]', 'g');
+ },
+
+ addRuleStr : function(s) {
+ var r = this.parseRuleStr(s), n;
+
+ for (n in r) {
+ if (r[n])
+ this.rules[n] = r[n];
+ }
+
+ this.vElements = tinyMCE.clearArray([]);
+
+ for (n in this.rules) {
+ if (this.rules[n])
+ this.vElements[this.vElements.length] = this.rules[n].tag;
+ }
+
+ this.vElementsRe = this._arrayToRe(this.vElements, '');
+ },
+
+ isValid : function(n) {
+ if (!this.rulesDone)
+ this._setupRules(); // Will initialize cleanup rules
+
+ // Empty is true since it removes formatting
+ if (!n)
+ return true;
+
+ // Clean the name up a bit
+ n = n.replace(/[^a-z0-9]+/gi, '').toUpperCase();
+
+ return !tinyMCE.getParam('cleanup') || this.vElementsRe.test(n);
+ },
+
+ addChildRemoveRuleStr : function(s) {
+ var x, y, p, i, t, tn, ta, cl, r;
+
+ if (!s)
+ return;
+
+ ta = s.split(',');
+ for (x=0; x<ta.length; x++) {
+ s = ta[x];
+
+ // Split tag/children
+ p = this.split(/\[|\]/, s);
+ if (p == null || p.length < 1)
+ t = s.toUpperCase();
+ else
+ t = p[0].toUpperCase();
+
+ // Handle all tag names
+ tn = this.split('/', t);
+ for (y=0; y<tn.length; y++) {
+ r = "^(";
+
+ // Build regex
+ cl = this.split(/\|/, p[1]);
+ for (i=0; i<cl.length; i++) {
+ if (cl[i] == '%istrict')
+ r += tinyMCE.inlineStrict;
+ else if (cl[i] == '%itrans')
+ r += tinyMCE.inlineTransitional;
+ else if (cl[i] == '%istrict_na')
+ r += tinyMCE.inlineStrict.substring(2);
+ else if (cl[i] == '%itrans_na')
+ r += tinyMCE.inlineTransitional.substring(2);
+ else if (cl[i] == '%btrans')
+ r += tinyMCE.blockElms;
+ else if (cl[i] == '%strict')
+ r += tinyMCE.blockStrict;
+ else
+ r += (cl[i].charAt(0) != '#' ? cl[i].toUpperCase() : cl[i]);
+
+ r += (i != cl.length - 1 ? '|' : '');
+ }
+
+ r += ')$';
+
+ if (this.childRules == null)
+ this.childRules = tinyMCE.clearArray([]);
+
+ this.childRules[tn[y]] = new RegExp(r);
+
+ if (p.length > 1)
+ this.childRules[tn[y]].wrapTag = p[2];
+ }
+ }
+ },
+
+ parseRuleStr : function(s) {
+ var ta, p, r, a, i, x, px, t, tn, y, av, or = tinyMCE.clearArray([]), dv;
+
+ if (s == null || s.length == 0)
+ return or;
+
+ ta = s.split(',');
+ for (x=0; x<ta.length; x++) {
+ s = ta[x];
+ if (s.length == 0)
+ continue;
+
+ // Split tag/attrs
+ p = this.split(/\[|\]/, s);
+ if (p == null || p.length < 1)
+ t = s.toUpperCase();
+ else
+ t = p[0].toUpperCase();
+
+ // Handle all tag names
+ tn = this.split('/', t);
+ for (y=0; y<tn.length; y++) {
+ r = {};
+
+ r.tag = tn[y];
+ r.forceAttribs = null;
+ r.defaultAttribs = null;
+ r.validAttribValues = null;
+
+ // Handle prefixes
+ px = r.tag.charAt(0);
+ r.forceOpen = px == '+';
+ r.removeEmpty = px == '-';
+ r.fill = px == '#';
+ r.tag = r.tag.replace(/\+|-|#/g, '');
+ r.oTagName = tn[0].replace(/\+|-|#/g, '').toLowerCase();
+ r.isWild = new RegExp('\\*|\\?|\\+', 'g').test(r.tag);
+ r.validRe = new RegExp(this._wildcardToRe('^' + r.tag + '$'));
+
+ // Setup valid attributes
+ if (p.length > 1) {
+ r.vAttribsRe = '^(';
+ a = this.split(/\|/, p[1]);
+
+ for (i=0; i<a.length; i++) {
+ t = a[i];
+
+ if (t.charAt(0) == '!') {
+ a[i] = t = t.substring(1);
+
+ if (!r.reqAttribsRe)
+ r.reqAttribsRe = '\\s+(' + t;
+ else
+ r.reqAttribsRe += '|' + t;
+ }
+
+ av = new RegExp('(=|:|<)(.*?)$').exec(t);
+ t = t.replace(new RegExp('(=|:|<).*?$'), '');
+ if (av && av.length > 0) {
+ if (av[0].charAt(0) == ':') {
+ if (!r.forceAttribs)
+ r.forceAttribs = tinyMCE.clearArray([]);
+
+ r.forceAttribs[t.toLowerCase()] = av[0].substring(1);
+ } else if (av[0].charAt(0) == '=') {
+ if (!r.defaultAttribs)
+ r.defaultAttribs = tinyMCE.clearArray([]);
+
+ dv = av[0].substring(1);
+
+ r.defaultAttribs[t.toLowerCase()] = dv == '' ? "mce_empty" : dv;
+ } else if (av[0].charAt(0) == '<') {
+ if (!r.validAttribValues)
+ r.validAttribValues = tinyMCE.clearArray([]);
+
+ r.validAttribValues[t.toLowerCase()] = this._arrayToRe(this.split('?', av[0].substring(1)), 'i');
+ }
+ }
+
+ r.vAttribsRe += '' + t.toLowerCase() + (i != a.length - 1 ? '|' : '');
+
+ a[i] = t.toLowerCase();
+ }
+
+ if (r.reqAttribsRe)
+ r.reqAttribsRe = new RegExp(r.reqAttribsRe + ')=\"', 'g');
+
+ r.vAttribsRe += ')$';
+ r.vAttribsRe = this._wildcardToRe(r.vAttribsRe);
+ r.vAttribsReIsWild = new RegExp('\\*|\\?|\\+', 'g').test(r.vAttribsRe);
+ r.vAttribsRe = new RegExp(r.vAttribsRe);
+ r.vAttribs = a.reverse();
+
+ //tinyMCE.debug(r.tag, r.oTagName, r.vAttribsRe, r.vAttribsReWC);
+ } else {
+ r.vAttribsRe = '';
+ r.vAttribs = tinyMCE.clearArray([]);
+ r.vAttribsReIsWild = false;
+ }
+
+ or[r.tag] = r;
+ }
+ }
+
+ return or;
+ },
+
+ serializeNodeAsXML : function(n) {
+ var s, b;
+
+ if (!this.xmlDoc) {
+ if (this.isIE) {
+ try {this.xmlDoc = new ActiveXObject('MSXML2.DOMDocument');} catch (e) {}
+
+ if (!this.xmlDoc)
+ try {this.xmlDoc = new ActiveXObject('Microsoft.XmlDom');} catch (e) {}
+ } else
+ this.xmlDoc = document.implementation.createDocument('', '', null);
+
+ if (!this.xmlDoc)
+ alert("Error XML Parser could not be found.");
+ }
+
+ if (this.xmlDoc.firstChild)
+ this.xmlDoc.removeChild(this.xmlDoc.firstChild);
+
+ b = this.xmlDoc.createElement("html");
+ b = this.xmlDoc.appendChild(b);
+
+ this._convertToXML(n, b);
+
+ if (this.isIE)
+ return this.xmlDoc.xml;
+ else
+ return new XMLSerializer().serializeToString(this.xmlDoc);
+ },
+
+ _convertToXML : function(n, xn) {
+ var xd, el, i, l, cn, at, no, hc = false;
+
+ if (tinyMCE.isRealIE && this._isDuplicate(n))
+ return;
+
+ xd = this.xmlDoc;
+
+ switch (n.nodeType) {
+ case 1: // Element
+ hc = n.hasChildNodes();
+
+ el = xd.createElement(n.nodeName.toLowerCase());
+
+ at = n.attributes;
+ for (i=at.length-1; i>-1; i--) {
+ no = at[i];
+
+ if (no.specified && no.nodeValue)
+ el.setAttribute(no.nodeName.toLowerCase(), no.nodeValue);
+ }
+
+ if (!hc && !this.closeElementsRe.test(n.nodeName))
+ el.appendChild(xd.createTextNode(""));
+
+ xn = xn.appendChild(el);
+ break;
+
+ case 3: // Text
+ xn.appendChild(xd.createTextNode(n.nodeValue));
+ return;
+
+ case 8: // Comment
+ xn.appendChild(xd.createComment(n.nodeValue));
+ return;
+ }
+
+ if (hc) {
+ cn = n.childNodes;
+
+ for (i=0, l=cn.length; i<l; i++)
+ this._convertToXML(cn[i], xn);
+ }
+ },
+
+ serializeNodeAsHTML : function(n, inn) {
+ var en, no, h = '', i, l, t, st, r, cn, va = false, f = false, at, hc, cr, nn;
+
+ if (!this.rulesDone)
+ this._setupRules(); // Will initialize cleanup rules
+
+ if (tinyMCE.isRealIE && this._isDuplicate(n))
+ return '';
+
+ // Skip non valid child elements
+ if (n.parentNode && this.childRules != null) {
+ cr = this.childRules[n.parentNode.nodeName];
+
+ if (typeof(cr) != "undefined" && !cr.test(n.nodeName)) {
+ st = true;
+ t = null;
+ }
+ }
+
+ switch (n.nodeType) {
+ case 1: // Element
+ hc = n.hasChildNodes();
+
+ if (st)
+ break;
+
+ nn = n.nodeName;
+
+ if (tinyMCE.isRealIE) {
+ // MSIE sometimes produces <//tag>
+ if (n.nodeName.indexOf('/') != -1)
+ break;
+
+ // MSIE has it's NS in a separate attrib
+ if (n.scopeName && n.scopeName != 'HTML')
+ nn = n.scopeName.toUpperCase() + ':' + nn.toUpperCase();
+ } else if (tinyMCE.isOpera && nn.indexOf(':') > 0)
+ nn = nn.toUpperCase();
+
+ // Convert fonts to spans
+ if (this.settings.convert_fonts_to_spans) {
+ // On get content FONT -> SPAN
+ if (this.settings.on_save && nn == 'FONT')
+ nn = 'SPAN';
+
+ // On insert content SPAN -> FONT
+ if (!this.settings.on_save && nn == 'SPAN')
+ nn = 'FONT';
+ }
+
+ if (this.vElementsRe.test(nn) && (!this.iveRe || !this.iveRe.test(nn)) && !inn) {
+ va = true;
+
+ r = this.rules[nn];
+ if (!r) {
+ at = this.rules;
+ for (no in at) {
+ if (at[no] && at[no].validRe.test(nn)) {
+ r = at[no];
+ break;
+ }
+ }
+ }
+
+ en = r.isWild ? nn.toLowerCase() : r.oTagName;
+ f = r.fill;
+
+ if (r.removeEmpty && !hc)
+ return "";
+
+ t = '<' + en;
+
+ if (r.vAttribsReIsWild) {
+ // Serialize wildcard attributes
+ at = n.attributes;
+ for (i=at.length-1; i>-1; i--) {
+ no = at[i];
+ if (no.specified && r.vAttribsRe.test(no.nodeName))
+ t += this._serializeAttribute(n, r, no.nodeName);
+ }
+ } else {
+ // Serialize specific attributes
+ for (i=r.vAttribs.length-1; i>-1; i--)
+ t += this._serializeAttribute(n, r, r.vAttribs[i]);
+ }
+
+ // Serialize mce_ atts
+ if (!this.settings.on_save) {
+ at = this.mceAttribs;
+
+ for (no in at) {
+ if (at[no])
+ t += this._serializeAttribute(n, r, at[no]);
+ }
+ }
+
+ // Check for required attribs
+ if (r.reqAttribsRe && !t.match(r.reqAttribsRe))
+ t = null;
+
+ // Close these
+ if (t != null && this.closeElementsRe.test(nn))
+ return t + ' />';
+
+ if (t != null)
+ h += t + '>';
+
+ if (this.isIE && this.codeElementsRe.test(nn))
+ h += n.innerHTML;
+ }
+ break;
+
+ case 3: // Text
+ if (st)
+ break;
+
+ if (n.parentNode && this.codeElementsRe.test(n.parentNode.nodeName))
+ return this.isIE ? '' : n.nodeValue;
+
+ return this.xmlEncode(n.nodeValue);
+
+ case 8: // Comment
+ if (st)
+ break;
+
+ return "<!--" + this._trimComment(n.nodeValue) + "-->";
+ }
+
+ if (hc) {
+ cn = n.childNodes;
+
+ for (i=0, l=cn.length; i<l; i++)
+ h += this.serializeNodeAsHTML(cn[i]);
+ }
+
+ // Fill empty nodes
+ if (f && !hc)
+ h += this.fillStr;
+
+ // End element
+ if (t != null && va)
+ h += '</' + en + '>';
+
+ return h;
+ },
+
+ _serializeAttribute : function(n, r, an) {
+ var av = '', t, os = this.settings.on_save;
+
+ if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0))
+ return '';
+
+ if (os && this.mceAttribs[an])
+ av = this._getAttrib(n, this.mceAttribs[an]);
+
+ if (av.length == 0)
+ av = this._getAttrib(n, an);
+
+ if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) {
+ av = t;
+
+ if (av == "mce_empty")
+ return " " + an + '=""';
+ }
+
+ if (r.forceAttribs && (t = r.forceAttribs[an]))
+ av = t;
+
+ if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an))
+ av = this._urlConverter(this, n, av);
+
+ if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av))
+ return "";
+
+ if (av.length != 0 && av == "{$uid}")
+ av = "uid_" + (this.idCount++);
+
+ if (av.length != 0) {
+ if (an.indexOf('on') != 0)
+ av = this.xmlEncode(av, 1);
+
+ return " " + an + "=" + '"' + av + '"';
+ }
+
+ return "";
+ },
+
+ formatHTML : function(h) {
+ var s = this.settings, p = '', i = 0, li = 0, o = '', l;
+
+ // Replace BR in pre elements to \n
+ h = h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi, function (a, b, c) {
+ c = c.replace(/<br\s*\/>/gi, '\n');
+ return '<pre' + b + '>' + c + '</pre>';
+ });
+
+ h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :)
+ h = '\n' + h;
+ h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting
+ h = h.replace(this.nlBeforeRe, '\n<$1$2>');
+ h = h.replace(this.nlAfterRe, '<$1$2>\n');
+ h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n');
+ h += '\n';
+
+ //tinyMCE.debug(h);
+
+ while ((i = h.indexOf('\n', i + 1)) != -1) {
+ if ((l = h.substring(li + 1, i)).length != 0) {
+ if (this.ouRe.test(l) && p.length >= s.indent_levels)
+ p = p.substring(s.indent_levels);
+
+ o += p + l + '\n';
+
+ if (this.inRe.test(l))
+ p += this.inStr;
+ }
+
+ li = i;
+ }
+
+ //tinyMCE.debug(h);
+
+ return o;
+ },
+
+ xmlEncode : function(s) {
+ var cl = this, re = this.xmlEncodeRe;
+
+ if (!this.entitiesDone)
+ this._setupEntities(); // Will intialize lookup table
+
+ switch (this.settings.entity_encoding) {
+ case "raw":
+ return tinyMCE.xmlEncode(s);
+
+ case "named":
+ return s.replace(re, function (c) {
+ var b = cl.entities[c.charCodeAt(0)];
+
+ return b ? '&' + b + ';' : c;
+ });
+
+ case "numeric":
+ return s.replace(re, function (c) {
+ return '&#' + c.charCodeAt(0) + ';';
+ });
+ }
+
+ return s;
+ },
+
+ split : function(re, s) {
+ var i, l, o = [], c = s.split(re);
+
+ for (i=0, l=c.length; i<l; i++) {
+ if (c[i] !== '')
+ o[i] = c[i];
+ }
+
+ return o;
+ },
+
+ _trimComment : function(s) {
+ // Remove mce_src, mce_href
+ s = s.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), "");
+ s = s.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), "");
+
+ return s;
+ },
+
+ _getAttrib : function(e, n, d) {
+ var v, ex, nn;
+
+ if (typeof(d) == "undefined")
+ d = "";
+
+ if (!e || e.nodeType != 1)
+ return d;
+
+ try {
+ v = e.getAttribute(n, 0);
+ } catch (ex) {
+ // IE 7 may cast exception on invalid attributes
+ v = e.getAttribute(n, 2);
+ }
+
+ if (n == "class" && !v)
+ v = e.className;
+
+ if (this.isIE) {
+ if (n == "http-equiv")
+ v = e.httpEquiv;
+
+ nn = e.nodeName;
+
+ // Skip the default values that IE returns
+ if (nn == "FORM" && n == "enctype" && v == "application/x-www-form-urlencoded")
+ v = "";
+
+ if (nn == "INPUT" && n == "size" && v == "20")
+ v = "";
+
+ if (nn == "INPUT" && n == "maxlength" && v == "2147483647")
+ v = "";
+
+ // Images
+ if (n == "width" || n == "height")
+ v = e.getAttribute(n, 2);
+ }
+
+ if (n == 'style' && v) {
+ if (!tinyMCE.isOpera)
+ v = e.style.cssText;
+
+ v = tinyMCE.serializeStyle(tinyMCE.parseStyle(v));
+ }
+
+ if (this.settings.on_save && n.indexOf('on') != -1 && this.settings.on_save && v && v !== '')
+ v = tinyMCE.cleanupEventStr(v);
+
+ return (v && v !== '') ? '' + v : d;
+ },
+
+ _urlConverter : function(c, n, v) {
+ if (!c.settings.on_save)
+ return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, v);
+ else if (tinyMCE.getParam('convert_urls')) {
+ if (!this.urlConverter)
+ this.urlConverter = eval(tinyMCE.settings.urlconverter_callback);
+
+ return this.urlConverter(v, n, true);
+ }
+
+ return v;
+ },
+
+ _arrayToRe : function(a, op, be, af) {
+ var i, r;
+
+ op = typeof(op) == "undefined" ? "gi" : op;
+ be = typeof(be) == "undefined" ? "^(" : be;
+ af = typeof(af) == "undefined" ? ")$" : af;
+
+ r = be;
+
+ for (i=0; i<a.length; i++)
+ r += this._wildcardToRe(a[i]) + (i != a.length-1 ? "|" : "");
+
+ r += af;
+
+ return new RegExp(r, op);
+ },
+
+ _wildcardToRe : function(s) {
+ s = s.replace(/\?/g, '(\\S?)');
+ s = s.replace(/\+/g, '(\\S+)');
+ s = s.replace(/\*/g, '(\\S*)');
+
+ return s;
+ },
+
+ _setupEntities : function() {
+ var n, a, i, s = this.settings;
+
+ // Setup entities
+ if (s.entity_encoding == "named") {
+ n = tinyMCE.clearArray([]);
+ a = this.split(',', s.entities);
+ for (i=0; i<a.length; i+=2)
+ n[a[i]] = a[i+1];
+
+ this.entities = n;
+ }
+
+ this.entitiesDone = true;
+ },
+
+ _setupRules : function() {
+ var s = this.settings;
+
+ // Setup default rule
+ this.addRuleStr(s.valid_elements);
+ this.addRuleStr(s.extended_valid_elements);
+ this.addChildRemoveRuleStr(s.valid_child_elements);
+
+ this.rulesDone = true;
+ },
+
+ _isDuplicate : function(n) {
+ var i, l, sn;
+
+ if (!this.settings.fix_content_duplication)
+ return false;
+
+ if (tinyMCE.isRealIE && n.nodeType == 1) {
+ // Mark elements
+ if (n.mce_serialized == this.serializationId)
+ return true;
+
+ n.setAttribute('mce_serialized', this.serializationId);
+ } else {
+ sn = this.serializedNodes;
+
+ // Search lookup table for text nodes and comments
+ for (i=0, l = sn.length; i<l; i++) {
+ if (sn[i] == n)
+ return true;
+ }
+
+ sn.push(n);
+ }
+
+ return false;
+ }
+
+ };
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_DOMUtils.class.js */
+
+tinyMCE.add(TinyMCE_Engine, {
+ createTagHTML : function(tn, a, h) {
+ var o = '', f = tinyMCE.xmlEncode, n;
+
+ o = '<' + tn;
+
+ if (a) {
+ for (n in a) {
+ if (typeof(a[n]) != 'function' && a[n] != null)
+ o += ' ' + f(n) + '="' + f('' + a[n]) + '"';
+ }
+ }
+
+ o += !h ? ' />' : '>' + h + '</' + tn + '>';
+
+ return o;
+ },
+
+ createTag : function(d, tn, a, h) {
+ var o = d.createElement(tn), n;
+
+ if (a) {
+ for (n in a) {
+ if (typeof(a[n]) != 'function' && a[n] != null)
+ tinyMCE.setAttrib(o, n, a[n]);
+ }
+ }
+
+ if (h)
+ o.innerHTML = h;
+
+ return o;
+ },
+
+ getElementByAttributeValue : function(n, e, a, v) {
+ return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0];
+ },
+
+ getElementsByAttributeValue : function(n, e, a, v) {
+ var i, nl = n.getElementsByTagName(e), o = [];
+
+ for (i=0; i<nl.length; i++) {
+ if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)
+ o[o.length] = nl[i];
+ }
+
+ return o;
+ },
+
+ isBlockElement : function(n) {
+ return n != null && n.nodeType == 1 && this.blockRegExp.test(n.nodeName);
+ },
+
+ getParentBlockElement : function(n, r) {
+ return this.getParentNode(n, function(n) {
+ return tinyMCE.isBlockElement(n);
+ }, r);
+
+ return null;
+ },
+
+ insertAfter : function(n, r){
+ if (r.nextSibling)
+ r.parentNode.insertBefore(n, r.nextSibling);
+ else
+ r.parentNode.appendChild(n);
+ },
+
+ setInnerHTML : function(e, h) {
+ var i, nl, n;
+
+ // Convert all strong/em to b/i in Gecko
+ if (tinyMCE.isGecko) {
+ h = h.replace(/<embed([^>]*)>/gi, '<tmpembed$1>');
+ h = h.replace(/<em([^>]*)>/gi, '<i$1>');
+ h = h.replace(/<tmpembed([^>]*)>/gi, '<embed$1>');
+ h = h.replace(/<strong([^>]*)>/gi, '<b$1>');
+ h = h.replace(/<\/strong>/gi, '</b>');
+ h = h.replace(/<\/em>/gi, '</i>');
+ }
+
+ if (tinyMCE.isRealIE) {
+ // Since MSIE handles invalid HTML better that valid XHTML we
+ // need to make some things invalid. <hr /> gets converted to <hr>.
+ h = h.replace(/\s\/>/g, '>');
+
+ // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones
+ h = h.replace(/<p([^>]*)>\u00A0?<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs
+ h = h.replace(/<p([^>]*)>\s* \s*<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs
+ h = h.replace(/<p([^>]*)>\s+<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs
+
+ // Remove first comment
+ e.innerHTML = tinyMCE.uniqueTag + h;
+ e.firstChild.removeNode(true);
+
+ // Remove weird auto generated empty paragraphs unless it's supposed to be there
+ nl = e.getElementsByTagName("p");
+ for (i=nl.length-1; i>=0; i--) {
+ n = nl[i];
+
+ if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep)
+ n.parentNode.removeChild(n);
+ }
+ } else {
+ h = this.fixGeckoBaseHREFBug(1, e, h);
+ e.innerHTML = h;
+ this.fixGeckoBaseHREFBug(2, e, h);
+ }
+ },
+
+ getOuterHTML : function(e) {
+ var d;
+
+ if (tinyMCE.isIE)
+ return e.outerHTML;
+
+ d = e.ownerDocument.createElement("body");
+ d.appendChild(e.cloneNode(true));
+
+ return d.innerHTML;
+ },
+
+ setOuterHTML : function(e, h, d) {
+ var d = typeof(d) == "undefined" ? e.ownerDocument : d, i, nl, t;
+
+ if (tinyMCE.isIE && e.nodeType == 1)
+ e.outerHTML = h;
+ else {
+ t = d.createElement("body");
+ t.innerHTML = h;
+
+ for (i=0, nl=t.childNodes; i<nl.length; i++)
+ e.parentNode.insertBefore(nl[i].cloneNode(true), e);
+
+ e.parentNode.removeChild(e);
+ }
+ },
+
+ _getElementById : function(id, d) {
+ var e, i, j, f;
+
+ if (typeof(d) == "undefined")
+ d = document;
+
+ e = d.getElementById(id);
+ if (!e) {
+ f = d.forms;
+
+ for (i=0; i<f.length; i++) {
+ for (j=0; j<f[i].elements.length; j++) {
+ if (f[i].elements[j].name == id) {
+ e = f[i].elements[j];
+ break;
+ }
+ }
+ }
+ }
+
+ return e;
+ },
+
+ getNodeTree : function(n, na, t, nn) {
+ return this.selectNodes(n, function(n) {
+ return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);
+ }, na ? na : []);
+ },
+
+ getParentElement : function(n, na, f, r) {
+ var re = na ? new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$') : 0, v;
+
+ // Compatiblity with old scripts where f param was a attribute string
+ if (f && typeof(f) == 'string')
+ return this.getParentElement(n, na, function(no) {return tinyMCE.getAttrib(no, f) !== '';});
+
+ return this.getParentNode(n, function(n) {
+ return ((n.nodeType == 1 && !re) || (re && re.test(n.nodeName))) && (!f || f(n));
+ }, r);
+ },
+
+ getParentNode : function(n, f, r) {
+ while (n) {
+ if (n == r)
+ return null;
+
+ if (f(n))
+ return n;
+
+ n = n.parentNode;
+ }
+
+ return null;
+ },
+
+ getAttrib : function(elm, name, dv) {
+ var v;
+
+ if (typeof(dv) == "undefined")
+ dv = "";
+
+ // Not a element
+ if (!elm || elm.nodeType != 1)
+ return dv;
+
+ try {
+ v = elm.getAttribute(name, 0);
+ } catch (ex) {
+ // IE 7 may cast exception on invalid attributes
+ v = elm.getAttribute(name, 2);
+ }
+
+ // Try className for class attrib
+ if (name == "class" && !v)
+ v = elm.className;
+
+ // Workaround for a issue with Firefox 1.5rc2+
+ if (tinyMCE.isGecko) {
+ if (name == "src" && elm.src != null && elm.src !== '')
+ v = elm.src;
+
+ // Workaround for a issue with Firefox 1.5rc2+
+ if (name == "href" && elm.href != null && elm.href !== '')
+ v = elm.href;
+ } else if (tinyMCE.isIE) {
+ switch (name) {
+ case "http-equiv":
+ v = elm.httpEquiv;
+ break;
+
+ case "width":
+ case "height":
+ v = elm.getAttribute(name, 2);
+ break;
+ }
+ }
+
+ if (name == "style" && !tinyMCE.isOpera)
+ v = elm.style.cssText;
+
+ return (v && v !== '') ? v : dv;
+ },
+
+ setAttrib : function(el, name, va, fix) {
+ if (typeof(va) == "number" && va != null)
+ va = "" + va;
+
+ if (fix) {
+ if (va == null)
+ va = "";
+
+ va = va.replace(/[^0-9%]/g, '');
+ }
+
+ if (name == "style")
+ el.style.cssText = va;
+
+ if (name == "class")
+ el.className = va;
+
+ if (va != null && va !== '' && va != -1)
+ el.setAttribute(name, va);
+ else
+ el.removeAttribute(name);
+ },
+
+ setStyleAttrib : function(e, n, v) {
+ e.style[n] = v;
+
+ // Style attrib deleted in IE
+ if (tinyMCE.isIE && v == null || v == '') {
+ v = tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));
+ e.style.cssText = v;
+ e.setAttribute("style", v);
+ }
+ },
+
+ switchClass : function(ei, c) {
+ var e;
+
+ if (tinyMCE.switchClassCache[ei])
+ e = tinyMCE.switchClassCache[ei];
+ else
+ e = tinyMCE.switchClassCache[ei] = document.getElementById(ei);
+
+ if (e) {
+ // Keep tile mode
+ if (tinyMCE.settings.button_tile_map && e.className && e.className.indexOf('mceTiledButton') == 0)
+ c = 'mceTiledButton ' + c;
+
+ e.className = c;
+ }
+ },
+
+ getAbsPosition : function(n, cn) {
+ var l = 0, t = 0;
+
+ while (n && n != cn) {
+ l += n.offsetLeft;
+ t += n.offsetTop;
+ n = n.offsetParent;
+ }
+
+ return {absLeft : l, absTop : t};
+ },
+
+ prevNode : function(e, n) {
+ var a = n.split(','), i;
+
+ while ((e = e.previousSibling) != null) {
+ for (i=0; i<a.length; i++) {
+ if (e.nodeName == a[i])
+ return e;
+ }
+ }
+
+ return null;
+ },
+
+ nextNode : function(e, n) {
+ var a = n.split(','), i;
+
+ while ((e = e.nextSibling) != null) {
+ for (i=0; i<a.length; i++) {
+ if (e.nodeName == a[i])
+ return e;
+ }
+ }
+
+ return null;
+ },
+
+ selectElements : function(n, na, f) {
+ var i, a = [], nl, x;
+
+ for (x=0, na = na.split(','); x<na.length; x++)
+ for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)
+ (!f || f(nl[i])) && a.push(nl[i]);
+
+ return a;
+ },
+
+ selectNodes : function(n, f, a) {
+ var i;
+
+ if (!a)
+ a = [];
+
+ if (f(n))
+ a[a.length] = n;
+
+ if (n.hasChildNodes()) {
+ for (i=0; i<n.childNodes.length; i++)
+ tinyMCE.selectNodes(n.childNodes[i], f, a);
+ }
+
+ return a;
+ },
+
+ addCSSClass : function(e, c, b) {
+ var o = this.removeCSSClass(e, c);
+ return e.className = b ? c + (o !== '' ? (' ' + o) : '') : (o !== '' ? (o + ' ') : '') + c;
+ },
+
+ removeCSSClass : function(e, c) {
+ c = e.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
+ return e.className = c != ' ' ? c : '';
+ },
+
+ hasCSSClass : function(n, c) {
+ return new RegExp('\\b' + c + '\\b', 'g').test(n.className);
+ },
+
+ renameElement : function(e, n, d) {
+ var ne, i, ar;
+
+ d = typeof(d) == "undefined" ? tinyMCE.selectedInstance.getDoc() : d;
+
+ if (e) {
+ ne = d.createElement(n);
+
+ ar = e.attributes;
+ for (i=ar.length-1; i>-1; i--) {
+ if (ar[i].specified && ar[i].nodeValue)
+ ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue);
+ }
+
+ ar = e.childNodes;
+ for (i=0; i<ar.length; i++)
+ ne.appendChild(ar[i].cloneNode(true));
+
+ e.parentNode.replaceChild(ne, e);
+ }
+ },
+
+ getViewPort : function(w) {
+ var d = w.document, m = d.compatMode == 'CSS1Compat', b = d.body, de = d.documentElement;
+
+ return {
+ left : w.pageXOffset || (m ? de.scrollLeft : b.scrollLeft),
+ top : w.pageYOffset || (m ? de.scrollTop : b.scrollTop),
+ width : w.innerWidth || (m ? de.clientWidth : b.clientWidth),
+ height : w.innerHeight || (m ? de.clientHeight : b.clientHeight)
+ };
+ },
+
+ getStyle : function(n, na, d) {
+ if (!n)
+ return false;
+
+ // Gecko
+ if (tinyMCE.isGecko && n.ownerDocument.defaultView) {
+ try {
+ return n.ownerDocument.defaultView.getComputedStyle(n, null).getPropertyValue(na);
+ } catch (n) {
+ // Old safari might fail
+ return null;
+ }
+ }
+
+ // Camelcase it, if needed
+ na = na.replace(/-(\D)/g, function(a, b){
+ return b.toUpperCase();
+ });
+
+ // IE & Opera
+ if (n.currentStyle)
+ return n.currentStyle[na];
+
+ return false;
+ }
+
+ });
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_URL.class.js */
+
+tinyMCE.add(TinyMCE_Engine, {
+ parseURL : function(url_str) {
+ var urlParts = [], i, pos, lastPos, chr;
+
+ if (url_str) {
+ // Parse protocol part
+ pos = url_str.indexOf('://');
+ if (pos != -1) {
+ urlParts.protocol = url_str.substring(0, pos);
+ lastPos = pos + 3;
+ }
+
+ // Find port or path start
+ for (i=lastPos; i<url_str.length; i++) {
+ chr = url_str.charAt(i);
+
+ if (chr == ':')
+ break;
+
+ if (chr == '/')
+ break;
+ }
+ pos = i;
+
+ // Get host
+ urlParts.host = url_str.substring(lastPos, pos);
+
+ // Get port
+ urlParts.port = "";
+ lastPos = pos;
+ if (url_str.charAt(pos) == ':') {
+ pos = url_str.indexOf('/', lastPos);
+ urlParts.port = url_str.substring(lastPos+1, pos);
+ }
+
+ // Get path
+ lastPos = pos;
+ pos = url_str.indexOf('?', lastPos);
+
+ if (pos == -1)
+ pos = url_str.indexOf('#', lastPos);
+
+ if (pos == -1)
+ pos = url_str.length;
+
+ urlParts.path = url_str.substring(lastPos, pos);
+
+ // Get query
+ lastPos = pos;
+ if (url_str.charAt(pos) == '?') {
+ pos = url_str.indexOf('#');
+ pos = (pos == -1) ? url_str.length : pos;
+ urlParts.query = url_str.substring(lastPos+1, pos);
+ }
+
+ // Get anchor
+ lastPos = pos;
+ if (url_str.charAt(pos) == '#') {
+ pos = url_str.length;
+ urlParts.anchor = url_str.substring(lastPos+1, pos);
+ }
+ }
+
+ return urlParts;
+ },
+
+ serializeURL : function(up) {
+ var o = "";
+
+ if (up.protocol)
+ o += up.protocol + "://";
+
+ if (up.host)
+ o += up.host;
+
+ if (up.port)
+ o += ":" + up.port;
+
+ if (up.path)
+ o += up.path;
+
+ if (up.query)
+ o += "?" + up.query;
+
+ if (up.anchor)
+ o += "#" + up.anchor;
+
+ return o;
+ },
+
+ convertAbsoluteURLToRelativeURL : function(base_url, url_to_relative) {
+ var baseURL = this.parseURL(base_url), targetURL = this.parseURL(url_to_relative);
+ var i, strTok1, strTok2, breakPoint = 0, outPath = "", forceSlash = false;
+ var fileName, pos;
+
+ if (targetURL.path == '')
+ targetURL.path = "/";
+ else
+ forceSlash = true;
+
+ // Crop away last path part
+ base_url = baseURL.path.substring(0, baseURL.path.lastIndexOf('/'));
+ strTok1 = base_url.split('/');
+ strTok2 = targetURL.path.split('/');
+
+ if (strTok1.length >= strTok2.length) {
+ for (i=0; i<strTok1.length; i++) {
+ if (i >= strTok2.length || strTok1[i] != strTok2[i]) {
+ breakPoint = i + 1;
+ break;
+ }
+ }
+ }
+
+ if (strTok1.length < strTok2.length) {
+ for (i=0; i<strTok2.length; i++) {
+ if (i >= strTok1.length || strTok1[i] != strTok2[i]) {
+ breakPoint = i + 1;
+ break;
+ }
+ }
+ }
+
+ if (breakPoint == 1)
+ return targetURL.path;
+
+ for (i=0; i<(strTok1.length-(breakPoint-1)); i++)
+ outPath += "../";
+
+ for (i=breakPoint-1; i<strTok2.length; i++) {
+ if (i != (breakPoint-1))
+ outPath += "/" + strTok2[i];
+ else
+ outPath += strTok2[i];
+ }
+
+ targetURL.protocol = null;
+ targetURL.host = null;
+ targetURL.port = null;
+ targetURL.path = outPath == '' && forceSlash ? "/" : outPath;
+
+ // Remove document prefix from local anchors
+ fileName = baseURL.path;
+
+ if ((pos = fileName.lastIndexOf('/')) != -1)
+ fileName = fileName.substring(pos + 1);
+
+ // Is local anchor
+ if (fileName == targetURL.path && targetURL.anchor !== '')
+ targetURL.path = "";
+
+ // If empty and not local anchor force filename or slash
+ if (targetURL.path == '' && !targetURL.anchor)
+ targetURL.path = fileName !== '' ? fileName : "/";
+
+ return this.serializeURL(targetURL);
+ },
+
+ convertRelativeToAbsoluteURL : function(base_url, relative_url) {
+ var baseURL = this.parseURL(base_url), baseURLParts, relURLParts, newRelURLParts, numBack, relURL = this.parseURL(relative_url), i;
+ var len, absPath, start, end, newBaseURLParts;
+
+ if (relative_url == '' || relative_url.indexOf('://') != -1 || /^(mailto:|javascript:|#|\/)/.test(relative_url))
+ return relative_url;
+
+ // Split parts
+ baseURLParts = baseURL.path.split('/');
+ relURLParts = relURL.path.split('/');
+
+ // Remove empty chunks
+ newBaseURLParts = [];
+ for (i=baseURLParts.length-1; i>=0; i--) {
+ if (baseURLParts[i].length == 0)
+ continue;
+
+ newBaseURLParts[newBaseURLParts.length] = baseURLParts[i];
+ }
+ baseURLParts = newBaseURLParts.reverse();
+
+ // Merge relURLParts chunks
+ newRelURLParts = [];
+ numBack = 0;
+ for (i=relURLParts.length-1; i>=0; i--) {
+ if (relURLParts[i].length == 0 || relURLParts[i] == ".")
+ continue;
+
+ if (relURLParts[i] == '..') {
+ numBack++;
+ continue;
+ }
+
+ if (numBack > 0) {
+ numBack--;
+ continue;
+ }
+
+ newRelURLParts[newRelURLParts.length] = relURLParts[i];
+ }
+
+ relURLParts = newRelURLParts.reverse();
+
+ // Remove end from absolute path
+ len = baseURLParts.length-numBack;
+ absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/');
+ start = "";
+ end = "";
+
+ // Build output URL
+ relURL.protocol = baseURL.protocol;
+ relURL.host = baseURL.host;
+ relURL.port = baseURL.port;
+
+ // Re-add trailing slash if it's removed
+ if (relURL.path.charAt(relURL.path.length-1) == "/")
+ absPath += "/";
+
+ relURL.path = absPath;
+
+ return this.serializeURL(relURL);
+ },
+
+ convertURL : function(url, node, on_save) {
+ var dl = document.location, start, portPart, urlParts, baseUrlParts, tmpUrlParts, curl;
+ var prot = dl.protocol, host = dl.hostname, port = dl.port;
+
+ // Pass through file protocol
+ if (prot == "file:")
+ return url;
+
+ // Something is wrong, remove weirdness
+ url = tinyMCE.regexpReplace(url, '(http|https):///', '/');
+
+ // Mailto link or anchor (Pass through)
+ if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || /^[ \t\r\n\+]*[#\?]/.test(url))
+ return url;
+
+ // Fix relative/Mozilla
+ if (!tinyMCE.isIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/')
+ return tinyMCE.settings.base_href + url;
+
+ // Handle relative URLs
+ if (on_save && tinyMCE.getParam('relative_urls')) {
+ curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url);
+ if (curl.charAt(0) == '/')
+ curl = tinyMCE.settings.document_base_prefix + curl;
+
+ urlParts = tinyMCE.parseURL(curl);
+ tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings.document_base_url);
+
+ // Force relative
+ if (urlParts.host == tmpUrlParts.host && (urlParts.port == tmpUrlParts.port))
+ return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url, curl);
+ }
+
+ // Handle absolute URLs
+ if (!tinyMCE.getParam('relative_urls')) {
+ urlParts = tinyMCE.parseURL(url);
+ baseUrlParts = tinyMCE.parseURL(tinyMCE.settings.base_href);
+
+ // Force absolute URLs from relative URLs
+ url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url);
+
+ // If anchor and path is the same page
+ if (urlParts.anchor && urlParts.path == baseUrlParts.path)
+ return "#" + urlParts.anchor;
+ }
+
+ // Remove current domain
+ if (tinyMCE.getParam('remove_script_host')) {
+ start = "";
+ portPart = "";
+
+ if (port !== '')
+ portPart = ":" + port;
+
+ start = prot + "//" + host + portPart + "/";
+
+ if (url.indexOf(start) == 0)
+ url = url.substring(start.length-1);
+ }
+
+ return url;
+ },
+
+ convertAllRelativeURLs : function(body) {
+ var i, elms, src, href, mhref, msrc;
+
+ // Convert all image URL:s to absolute URL
+ elms = body.getElementsByTagName("img");
+ for (i=0; i<elms.length; i++) {
+ src = tinyMCE.getAttrib(elms[i], 'src');
+
+ msrc = tinyMCE.getAttrib(elms[i], 'mce_src');
+ if (msrc !== '')
+ src = msrc;
+
+ if (src !== '') {
+ src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src);
+ elms[i].setAttribute("src", src);
+ }
+ }
+
+ // Convert all link URL:s to absolute URL
+ elms = body.getElementsByTagName("a");
+ for (i=0; i<elms.length; i++) {
+ href = tinyMCE.getAttrib(elms[i], 'href');
+
+ mhref = tinyMCE.getAttrib(elms[i], 'mce_href');
+ if (mhref !== '')
+ href = mhref;
+
+ if (href && href !== '') {
+ href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, href);
+ elms[i].setAttribute("href", href);
+ }
+ }
+ }
+
+ });
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Array.class.js */
+
+tinyMCE.add(TinyMCE_Engine, {
+ clearArray : function(a) {
+ var n;
+
+ for (n in a)
+ a[n] = null;
+
+ return a;
+ },
+
+ explode : function(d, s) {
+ var ar = s.split(d), oar = [], i;
+
+ for (i = 0; i<ar.length; i++) {
+ if (ar[i] !== '')
+ oar[oar.length] = ar[i];
+ }
+
+ return oar;
+ }
+});
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Event.class.js */
+
+tinyMCE.add(TinyMCE_Engine, {
+ _setEventsEnabled : function(node, state) {
+ var evs, x, y, elms, i, event;
+ var events = ['onfocus','onblur','onclick','ondblclick',
+ 'onmousedown','onmouseup','onmouseover','onmousemove',
+ 'onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];
+
+ evs = tinyMCE.settings.event_elements.split(',');
+ for (y=0; y<evs.length; y++){
+ elms = node.getElementsByTagName(evs[y]);
+ for (i=0; i<elms.length; i++) {
+ event = "";
+
+ for (x=0; x<events.length; x++) {
+ if ((event = tinyMCE.getAttrib(elms[i], events[x])) !== '') {
+ event = tinyMCE.cleanupEventStr("" + event);
+
+ if (!state)
+ event = "return true;" + event;
+ else
+ event = event.replace(/^return true;/gi, '');
+
+ elms[i].removeAttribute(events[x]);
+ elms[i].setAttribute(events[x], event);
+ }
+ }
+ }
+ }
+ },
+
+ _eventPatch : function(editor_id) {
+ var n, inst, win, e;
+
+ // Remove odd, error
+ if (typeof(tinyMCE) == "undefined")
+ return true;
+
+ try {
+ // Try selected instance first
+ if (tinyMCE.selectedInstance) {
+ win = tinyMCE.selectedInstance.getWin();
+
+ if (win && win.event) {
+ e = win.event;
+
+ if (!e.target)
+ e.target = e.srcElement;
+
+ TinyMCE_Engine.prototype.handleEvent(e);
+ return;
+ }
+ }
+
+ // Search for it
+ for (n in tinyMCE.instances) {
+ inst = tinyMCE.instances[n];
+
+ if (!tinyMCE.isInstance(inst))
+ continue;
+
+ inst.select();
+ win = inst.getWin();
+
+ if (win && win.event) {
+ e = win.event;
+
+ if (!e.target)
+ e.target = e.srcElement;
+
+ TinyMCE_Engine.prototype.handleEvent(e);
+ return;
+ }
+ }
+ } catch (ex) {
+ // Ignore error if iframe is pointing to external URL
+ }
+ },
+
+ findEvent : function(e) {
+ var n, inst;
+
+ if (e)
+ return e;
+
+ for (n in tinyMCE.instances) {
+ inst = tinyMCE.instances[n];
+
+ if (tinyMCE.isInstance(inst) && inst.getWin().event)
+ return inst.getWin().event;
+ }
+
+ return null;
+ },
+
+ unloadHandler : function() {
+ tinyMCE.triggerSave(true, true);
+ },
+
+ addEventHandlers : function(inst) {
+ this.setEventHandlers(inst, 1);
+ },
+
+ setEventHandlers : function(inst, s) {
+ var doc = inst.getDoc(), ie, ot, i, f = s ? tinyMCE.addEvent : tinyMCE.removeEvent;
+
+ ie = ['keypress', 'keyup', 'keydown', 'click', 'mouseup', 'mousedown', 'controlselect', 'dblclick'];
+ ot = ['keypress', 'keyup', 'keydown', 'click', 'mouseup', 'mousedown', 'focus', 'blur', 'dragdrop'];
+
+ inst.switchSettings();
+
+ if (tinyMCE.isIE) {
+ for (i=0; i<ie.length; i++)
+ f(doc, ie[i], TinyMCE_Engine.prototype._eventPatch);
+ } else {
+ for (i=0; i<ot.length; i++)
+ f(doc, ot[i], tinyMCE.handleEvent);
+
+ // Force designmode
+ try {
+ doc.designMode = "On";
+ } catch (e) {
+ // Ignore
+ }
+ }
+ },
+
+ onMouseMove : function() {
+ var inst, lh;
+
+ // Fix for IE7 bug where it's not restoring hover on anchors correctly
+ if (tinyMCE.lastHover) {
+ lh = tinyMCE.lastHover;
+
+ // Call out on menus and refresh class on normal buttons
+ if (lh.className.indexOf('mceMenu') != -1)
+ tinyMCE._menuButtonEvent('out', lh);
+ else
+ lh.className = lh.className;
+
+ tinyMCE.lastHover = null;
+ }
+
+ if (!tinyMCE.hasMouseMoved) {
+ inst = tinyMCE.selectedInstance;
+
+ // Workaround for bug #1437457 (Odd MSIE bug)
+ if (inst.isFocused) {
+ inst.undoBookmark = inst.selection.getBookmark();
+ tinyMCE.hasMouseMoved = true;
+ }
+ }
+
+ // tinyMCE.cancelEvent(inst.getWin().event);
+ // return false;
+ },
+
+ cancelEvent : function(e) {
+ if (!e)
+ return false;
+
+ if (tinyMCE.isIE) {
+ e.returnValue = false;
+ e.cancelBubble = true;
+ } else {
+ e.preventDefault();
+ e.stopPropagation && e.stopPropagation();
+ }
+
+ return false;
+ },
+
+ addEvent : function(o, n, h) {
+ // Add cleanup for all non unload events
+ if (n != 'unload') {
+ function clean() {
+ var ex;
+
+ try {
+ tinyMCE.removeEvent(o, n, h);
+ tinyMCE.removeEvent(window, 'unload', clean);
+ o = n = h = null;
+ } catch (ex) {
+ // IE may produce access denied exception on unload
+ }
+ }
+
+ // Add memory cleaner
+ tinyMCE.addEvent(window, 'unload', clean);
+ }
+
+ if (o.attachEvent)
+ o.attachEvent("on" + n, h);
+ else
+ o.addEventListener(n, h, false);
+ },
+
+ removeEvent : function(o, n, h) {
+ if (o.detachEvent)
+ o.detachEvent("on" + n, h);
+ else
+ o.removeEventListener(n, h, false);
+ },
+
+ addSelectAccessibility : function(e, s, w) {
+ // Add event handlers
+ if (!s._isAccessible) {
+ s.onkeydown = tinyMCE.accessibleEventHandler;
+ s.onblur = tinyMCE.accessibleEventHandler;
+ s._isAccessible = true;
+ s._win = w;
+ }
+
+ return false;
+ },
+
+ accessibleEventHandler : function(e) {
+ var elm, win = this._win;
+
+ e = tinyMCE.isIE ? win.event : e;
+ elm = tinyMCE.isIE ? e.srcElement : e.target;
+
+ // Unpiggyback onchange on blur
+ if (e.type == "blur") {
+ if (elm.oldonchange) {
+ elm.onchange = elm.oldonchange;
+ elm.oldonchange = null;
+ }
+
+ return true;
+ }
+
+ // Piggyback onchange
+ if (elm.nodeName == "SELECT" && !elm.oldonchange) {
+ elm.oldonchange = elm.onchange;
+ elm.onchange = null;
+ }
+
+ // Execute onchange and remove piggyback
+ if (e.keyCode == 13 || e.keyCode == 32) {
+ elm.onchange = elm.oldonchange;
+ elm.onchange();
+ elm.oldonchange = null;
+
+ tinyMCE.cancelEvent(e);
+ return false;
+ }
+
+ return true;
+ },
+
+ _resetIframeHeight : function() {
+ var ife;
+
+ if (tinyMCE.isRealIE) {
+ ife = tinyMCE.selectedInstance.iframeElement;
+
+ /* if (ife._oldWidth) {
+ ife.style.width = ife._oldWidth;
+ ife.width = ife._oldWidth;
+ }*/
+
+ if (ife._oldHeight) {
+ ife.style.height = ife._oldHeight;
+ ife.height = ife._oldHeight;
+ }
+ }
+ }
+
+ });
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Selection.class.js */
+
+function TinyMCE_Selection(inst) {
+ this.instance = inst;
+};
+
+TinyMCE_Selection.prototype = {
+ getSelectedHTML : function() {
+ var inst = this.instance, e, r = this.getRng(), h;
+
+ if (!r)
+ return null;
+
+ e = document.createElement("body");
+
+ if (r.cloneContents)
+ e.appendChild(document.importNode(r.cloneContents(), true));
+ else if (typeof(r.item) != 'undefined' || typeof(r.htmlText) != 'undefined')
+ e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;
+ else
+ e.innerHTML = r.toString(); // Failed, use text for now
+
+ h = tinyMCE._cleanupHTML(inst, inst.contentDocument, inst.settings, e, e, false, true, false);
+
+ // When editing always use fonts internaly
+ //if (tinyMCE.getParam("convert_fonts_to_spans"))
+ // tinyMCE.convertSpansToFonts(inst.getDoc());
+
+ return h;
+ },
+
+ getSelectedText : function() {
+ var inst = this.instance, d, r, s, t;
+
+ if (tinyMCE.isIE) {
+ d = inst.getDoc();
+
+ if (d.selection.type == "Text") {
+ r = d.selection.createRange();
+ t = r.text;
+ } else
+ t = '';
+ } else {
+ s = this.getSel();
+
+ if (s && s.toString)
+ t = s.toString();
+ else
+ t = '';
+ }
+
+ return t;
+ },
+
+ getBookmark : function(simple) {
+ var inst = this.instance, rng = this.getRng(), doc = inst.getDoc(), b = inst.getBody();
+ var trng, sx, sy, xx = -999999999, vp = inst.getViewPort();
+ var sp, le, s, e, nl, i, si, ei, w;
+
+ sx = vp.left;
+ sy = vp.top;
+
+ if (simple)
+ return {rng : rng, scrollX : sx, scrollY : sy};
+
+ if (tinyMCE.isRealIE) {
+ if (rng.item) {
+ e = rng.item(0);
+
+ nl = b.getElementsByTagName(e.nodeName);
+ for (i=0; i<nl.length; i++) {
+ if (e == nl[i]) {
+ sp = i;
+ break;
+ }
+ }
+
+ return {
+ tag : e.nodeName,
+ index : sp,
+ scrollX : sx,
+ scrollY : sy
+ };
+ } else {
+ trng = doc.body.createTextRange();
+ trng.moveToElementText(inst.getBody());
+ trng.collapse(true);
+ bp = Math.abs(trng.move('character', xx));
+
+ trng = rng.duplicate();
+ trng.collapse(true);
+ sp = Math.abs(trng.move('character', xx));
+
+ trng = rng.duplicate();
+ trng.collapse(false);
+ le = Math.abs(trng.move('character', xx)) - sp;
+
+ return {
+ start : sp - bp,
+ length : le,
+ scrollX : sx,
+ scrollY : sy
+ };
+ }
+ } else {
+ s = this.getSel();
+ e = this.getFocusElement();
+
+ if (!s)
+ return null;
+
+ if (e && e.nodeName == 'IMG') {
+ /*nl = b.getElementsByTagName('IMG');
+ for (i=0; i<nl.length; i++) {
+ if (e == nl[i]) {
+ sp = i;
+ break;
+ }
+ }*/
+
+ return {
+ start : -1,
+ end : -1,
+ index : sp,
+ scrollX : sx,
+ scrollY : sy
+ };
+ }
+
+ // Caret or selection
+ if (s.anchorNode == s.focusNode && s.anchorOffset == s.focusOffset) {
+ e = this._getPosText(b, s.anchorNode, s.focusNode);
+
+ if (!e)
+ return {scrollX : sx, scrollY : sy};
+
+ return {
+ start : e.start + s.anchorOffset,
+ end : e.end + s.focusOffset,
+ scrollX : sx,
+ scrollY : sy
+ };
+ } else {
+ e = this._getPosText(b, rng.startContainer, rng.endContainer);
+
+ if (!e)
+ return {scrollX : sx, scrollY : sy};
+
+ return {
+ start : e.start + rng.startOffset,
+ end : e.end + rng.endOffset,
+ scrollX : sx,
+ scrollY : sy
+ };
+ }
+ }
+
+ return null;
+ },
+
+ moveToBookmark : function(bookmark) {
+ var inst = this.instance, rng, nl, i, ex, b = inst.getBody(), sd;
+ var doc = inst.getDoc(), win = inst.getWin(), sel = this.getSel();
+
+ if (!bookmark)
+ return false;
+
+ if (tinyMCE.isSafari && bookmark.rng) {
+ sel.setBaseAndExtent(bookmark.rng.startContainer, bookmark.rng.startOffset, bookmark.rng.endContainer, bookmark.rng.endOffset);
+ return true;
+ }
+
+ if (tinyMCE.isRealIE) {
+ if (bookmark.rng) {
+ try {
+ bookmark.rng.select();
+ } catch (ex) {
+ // Ignore
+ }
+
+ return true;
+ }
+
+ win.focus();
+
+ if (bookmark.tag) {
+ rng = b.createControlRange();
+
+ nl = b.getElementsByTagName(bookmark.tag);
+
+ if (nl.length > bookmark.index) {
+ try {
+ rng.addElement(nl[bookmark.index]);
+ } catch (ex) {
+ // Might be thrown if the node no longer exists
+ }
+ }
+ } else {
+ // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs
+ try {
+ // Incorrect bookmark
+ if (bookmark.start < 0)
+ return true;
+
+ rng = inst.getSel().createRange();
+ rng.moveToElementText(inst.getBody());
+ rng.collapse(true);
+ rng.moveStart('character', bookmark.start);
+ rng.moveEnd('character', bookmark.length);
+ } catch (ex) {
+ return true;
+ }
+ }
+
+ rng.select();
+
+ win.scrollTo(bookmark.scrollX, bookmark.scrollY);
+ return true;
+ }
+
+ if (tinyMCE.isGecko || tinyMCE.isOpera) {
+ if (!sel)
+ return false;
+
+ if (bookmark.rng) {
+ sel.removeAllRanges();
+ sel.addRange(bookmark.rng);
+ }
+
+ if (bookmark.start != -1 && bookmark.end != -1) {
+ try {
+ sd = this._getTextPos(b, bookmark.start, bookmark.end);
+ rng = doc.createRange();
+ rng.setStart(sd.startNode, sd.startOffset);
+ rng.setEnd(sd.endNode, sd.endOffset);
+ sel.removeAllRanges();
+ sel.addRange(rng);
+
+ if (!tinyMCE.isOpera)
+ win.focus();
+ } catch (ex) {
+ // Ignore
+ }
+ }
+
+ /*
+ if (typeof(bookmark.index) != 'undefined') {
+ tinyMCE.selectElements(b, 'IMG', function (n) {
+ if (bookmark.index-- == 0) {
+ // Select image in Gecko here
+ }
+
+ return false;
+ });
+ }
+ */
+
+ win.scrollTo(bookmark.scrollX, bookmark.scrollY);
+ return true;
+ }
+
+ return false;
+ },
+
+ _getPosText : function(r, sn, en) {
+ var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};
+
+ while ((n = w.nextNode()) != null) {
+ if (n == sn)
+ d.start = p;
+
+ if (n == en) {
+ d.end = p;
+ return d;
+ }
+
+ p += n.nodeValue ? n.nodeValue.length : 0;
+ }
+
+ return null;
+ },
+
+ _getTextPos : function(r, sp, ep) {
+ var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};
+
+ while ((n = w.nextNode()) != null) {
+ p += n.nodeValue ? n.nodeValue.length : 0;
+
+ if (p >= sp && !d.startNode) {
+ d.startNode = n;
+ d.startOffset = sp - (p - n.nodeValue.length);
+ }
+
+ if (p >= ep) {
+ d.endNode = n;
+ d.endOffset = ep - (p - n.nodeValue.length);
+
+ return d;
+ }
+ }
+
+ return null;
+ },
+
+ selectNode : function(node, collapse, select_text_node, to_start) {
+ var inst = this.instance, sel, rng, nodes;
+
+ if (!node)
+ return;
+
+ if (typeof(collapse) == "undefined")
+ collapse = true;
+
+ if (typeof(select_text_node) == "undefined")
+ select_text_node = false;
+
+ if (typeof(to_start) == "undefined")
+ to_start = true;
+
+ if (inst.settings.auto_resize)
+ inst.resizeToContent();
+
+ if (tinyMCE.isRealIE) {
+ rng = inst.getDoc().body.createTextRange();
+
+ try {
+ rng.moveToElementText(node);
+
+ if (collapse)
+ rng.collapse(to_start);
+
+ rng.select();
+ } catch (e) {
+ // Throws illigal agrument in MSIE some times
+ }
+ } else {
+ sel = this.getSel();
+
+ if (!sel)
+ return;
+
+ if (tinyMCE.isSafari) {
+ sel.setBaseAndExtent(node, 0, node, node.innerText.length);
+
+ if (collapse) {
+ if (to_start)
+ sel.collapseToStart();
+ else
+ sel.collapseToEnd();
+ }
+
+ this.scrollToNode(node);
+
+ return;
+ }
+
+ rng = inst.getDoc().createRange();
+
+ if (select_text_node) {
+ // Find first textnode in tree
+ nodes = tinyMCE.getNodeTree(node, [], 3);
+ if (nodes.length > 0)
+ rng.selectNodeContents(nodes[0]);
+ else
+ rng.selectNodeContents(node);
+ } else
+ rng.selectNode(node);
+
+ if (collapse) {
+ // Special treatment of textnode collapse
+ if (!to_start && node.nodeType == 3) {
+ rng.setStart(node, node.nodeValue.length);
+ rng.setEnd(node, node.nodeValue.length);
+ } else
+ rng.collapse(to_start);
+ }
+
+ sel.removeAllRanges();
+ sel.addRange(rng);
+ }
+
+ this.scrollToNode(node);
+
+ // Set selected element
+ tinyMCE.selectedElement = null;
+ if (node.nodeType == 1)
+ tinyMCE.selectedElement = node;
+ },
+
+ scrollToNode : function(node) {
+ var inst = this.instance, w = inst.getWin(), vp = inst.getViewPort(), pos = tinyMCE.getAbsPosition(node), cvp, p, cwin;
+
+ // Only scroll if out of visible area
+ if (pos.absLeft < vp.left || pos.absLeft > vp.left + vp.width || pos.absTop < vp.top || pos.absTop > vp.top + (vp.height-25))
+ w.scrollTo(pos.absLeft, pos.absTop - vp.height + 25);
+
+ // Scroll container window
+ if (inst.settings.auto_resize) {
+ cwin = inst.getContainerWin();
+ cvp = tinyMCE.getViewPort(cwin);
+ p = this.getAbsPosition(node);
+
+ if (p.absLeft < cvp.left || p.absLeft > cvp.left + cvp.width || p.absTop < cvp.top || p.absTop > cvp.top + cvp.height)
+ cwin.scrollTo(p.absLeft, p.absTop - cvp.height + 25);
+ }
+ },
+
+ getAbsPosition : function(n) {
+ var pos = tinyMCE.getAbsPosition(n), ipos = tinyMCE.getAbsPosition(this.instance.iframeElement);
+
+ return {
+ absLeft : ipos.absLeft + pos.absLeft,
+ absTop : ipos.absTop + pos.absTop
+ };
+ },
+
+ getSel : function() {
+ var inst = this.instance;
+
+ if (tinyMCE.isRealIE)
+ return inst.getDoc().selection;
+
+ return inst.contentWindow.getSelection();
+ },
+
+ getRng : function() {
+ var s = this.getSel();
+
+ if (s == null)
+ return null;
+
+ if (tinyMCE.isRealIE)
+ return s.createRange();
+
+ if (tinyMCE.isSafari && !s.getRangeAt)
+ return '' + window.getSelection();
+
+ if (s.rangeCount > 0)
+ return s.getRangeAt(0);
+
+ return null;
+ },
+
+ isCollapsed : function() {
+ var r = this.getRng();
+
+ if (r.item)
+ return false;
+
+ return r.boundingWidth == 0 || this.getSel().isCollapsed;
+ },
+
+ collapse : function(b) {
+ var r = this.getRng(), s = this.getSel();
+
+ if (r.select) {
+ r.collapse(b);
+ r.select();
+ } else {
+ if (b)
+ s.collapseToStart();
+ else
+ s.collapseToEnd();
+ }
+ },
+
+ getFocusElement : function() {
+ var inst = this.instance, doc, rng, sel, elm;
+
+ if (tinyMCE.isRealIE) {
+ doc = inst.getDoc();
+ rng = doc.selection.createRange();
+
+ // if (rng.collapse)
+ // rng.collapse(true);
+
+ elm = rng.item ? rng.item(0) : rng.parentElement();
+ } else {
+ if (!tinyMCE.isSafari && inst.isHidden())
+ return inst.getBody();
+
+ sel = this.getSel();
+ rng = this.getRng();
+
+ if (!sel || !rng)
+ return null;
+
+ elm = rng.commonAncestorContainer;
+ //elm = (sel && sel.anchorNode) ? sel.anchorNode : null;
+
+ // Handle selection a image or other control like element such as anchors
+ if (!rng.collapsed) {
+ // Is selection small
+ if (rng.startContainer == rng.endContainer) {
+ if (rng.startOffset - rng.endOffset < 2) {
+ if (rng.startContainer.hasChildNodes())
+ elm = rng.startContainer.childNodes[rng.startOffset];
+ }
+ }
+ }
+
+ // Get the element parent of the node
+ elm = tinyMCE.getParentElement(elm);
+
+ //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img")
+ // elm = tinyMCE.selectedElement;
+ }
+
+ return elm;
+ }
+
+ };
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */
+
+function TinyMCE_UndoRedo(inst) {
+ this.instance = inst;
+ this.undoLevels = [];
+ this.undoIndex = 0;
+ this.typingUndoIndex = -1;
+ this.undoRedo = true;
+};
+
+TinyMCE_UndoRedo.prototype = {
+ add : function(l) {
+ var b, customUndoLevels, newHTML, inst = this.instance, i, ul, ur;
+
+ if (l) {
+ this.undoLevels[this.undoLevels.length] = l;
+ return true;
+ }
+
+ if (this.typingUndoIndex != -1) {
+ this.undoIndex = this.typingUndoIndex;
+
+ if (tinyMCE.typingUndoIndex != -1)
+ tinyMCE.undoIndex = tinyMCE.typingUndoIndex;
+ }
+
+ newHTML = tinyMCE.trim(inst.getBody().innerHTML);
+ if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) {
+ //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex].content);
+
+ // Is dirty again
+ inst.isNotDirty = false;
+
+ tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst);
+
+ // Time to compress
+ customUndoLevels = tinyMCE.settings.custom_undo_redo_levels;
+ if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) {
+ for (i=0; i<this.undoLevels.length-1; i++)
+ this.undoLevels[i] = this.undoLevels[i+1];
+
+ this.undoLevels.length--;
+ this.undoIndex--;
+
+ // Todo: Implement global undo/redo logic here
+ }
+
+ b = inst.undoBookmark;
+
+ if (!b)
+ b = inst.selection.getBookmark();
+
+ this.undoIndex++;
+ this.undoLevels[this.undoIndex] = {
+ content : newHTML,
+ bookmark : b
+ };
+
+ // Remove all above from global undo/redo
+ ul = tinyMCE.undoLevels;
+ for (i=tinyMCE.undoIndex + 1; i<ul.length; i++) {
+ ur = ul[i].undoRedo;
+
+ if (ur.undoIndex == ur.undoLevels.length -1)
+ ur.undoIndex--;
+
+ ur.undoLevels.length--;
+ }
+
+ // Add global undo level
+ tinyMCE.undoLevels[tinyMCE.undoIndex++] = inst;
+ tinyMCE.undoLevels.length = tinyMCE.undoIndex;
+
+ this.undoLevels.length = this.undoIndex + 1;
+
+ return true;
+ }
+
+ return false;
+ },
+
+ undo : function() {
+ var inst = this.instance;
+
+ // Do undo
+ if (this.undoIndex > 0) {
+ this.undoIndex--;
+
+ tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);
+ inst.repaint();
+
+ if (inst.settings.custom_undo_redo_restore_selection)
+ inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);
+ }
+ },
+
+ redo : function() {
+ var inst = this.instance;
+
+ tinyMCE.execCommand("mceEndTyping");
+
+ if (this.undoIndex < (this.undoLevels.length-1)) {
+ this.undoIndex++;
+
+ tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);
+ inst.repaint();
+
+ if (inst.settings.custom_undo_redo_restore_selection)
+ inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);
+ }
+
+ tinyMCE.triggerNodeChange();
+ }
+
+ };
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */
+
+var TinyMCE_ForceParagraphs = {
+ _insertPara : function(inst, e) {
+ var doc = inst.getDoc(), sel = inst.getSel(), body = inst.getBody(), win = inst.contentWindow, rng = sel.getRangeAt(0);
+ var rootElm = doc.documentElement, blockName = "P", startNode, endNode, startBlock, endBlock;
+ var rngBefore, rngAfter, direct, startNode, startOffset, endNode, endOffset, b = tinyMCE.isOpera ? inst.selection.getBookmark() : null;
+ var paraBefore, paraAfter, startChop, endChop, contents, i;
+
+ function isEmpty(para) {
+ var nodes;
+
+ function isEmptyHTML(html) {
+ return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == '';
+ }
+
+ // Check for images
+ if (para.getElementsByTagName("img").length > 0)
+ return false;
+
+ // Check for tables
+ if (para.getElementsByTagName("table").length > 0)
+ return false;
+
+ // Check for HRs
+ if (para.getElementsByTagName("hr").length > 0)
+ return false;
+
+ // Check all textnodes
+ nodes = tinyMCE.getNodeTree(para, [], 3);
+ for (i=0; i<nodes.length; i++) {
+ if (!isEmptyHTML(nodes[i].nodeValue))
+ return false;
+ }
+
+ // No images, no tables, no hrs, no text content then it's empty
+ return true;
+ }
+
+ // tinyMCE.debug(body.innerHTML);
+
+ // debug(e.target, sel.anchorNode.nodeName, sel.focusNode.nodeName, rng.startContainer, rng.endContainer, rng.commonAncestorContainer, sel.anchorOffset, sel.focusOffset, rng.toString());
+
+ // Setup before range
+ rngBefore = doc.createRange();
+ rngBefore.setStart(sel.anchorNode, sel.anchorOffset);
+ rngBefore.collapse(true);
+
+ // Setup after range
+ rngAfter = doc.createRange();
+ rngAfter.setStart(sel.focusNode, sel.focusOffset);
+ rngAfter.collapse(true);
+
+ // Setup start/end points
+ direct = rngBefore.compareBoundaryPoints(rngBefore.START_TO_END, rngAfter) < 0;
+ startNode = direct ? sel.anchorNode : sel.focusNode;
+ startOffset = direct ? sel.anchorOffset : sel.focusOffset;
+ endNode = direct ? sel.focusNode : sel.anchorNode;
+ endOffset = direct ? sel.focusOffset : sel.anchorOffset;
+
+ startNode = startNode.nodeName == "HTML" ? doc.body : startNode; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes
+ startNode = startNode.nodeName == "BODY" ? startNode.firstChild : startNode;
+ endNode = endNode.nodeName == "BODY" ? endNode.firstChild : endNode;
+
+ // Get block elements
+ startBlock = inst.getParentBlockElement(startNode);
+ endBlock = inst.getParentBlockElement(endNode);
+
+ // If absolute force paragraph generation within
+ if (startBlock && (startBlock.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(startBlock.style.position)))
+ startBlock = null;
+
+ if (endBlock && (endBlock.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(endBlock.style.position)))
+ endBlock = null;
+
+ // Use current block name
+ if (startBlock != null) {
+ blockName = startBlock.nodeName;
+
+ // Use P instead
+ if (/(TD|TABLE|TH|CAPTION)/.test(blockName) || (blockName == "DIV" && /left|right/gi.test(startBlock.style.cssFloat)))
+ blockName = "P";
+ }
+
+ // Within a list use normal behaviour
+ if (tinyMCE.getParentElement(startBlock, "OL,UL", null, body) != null)
+ return false;
+
+ // Within a table create new paragraphs
+ if ((startBlock != null && startBlock.nodeName == "TABLE") || (endBlock != null && endBlock.nodeName == "TABLE"))
+ startBlock = endBlock = null;
+
+ // Setup new paragraphs
+ paraBefore = (startBlock != null && startBlock.nodeName == blockName) ? startBlock.cloneNode(false) : doc.createElement(blockName);
+ paraAfter = (endBlock != null && endBlock.nodeName == blockName) ? endBlock.cloneNode(false) : doc.createElement(blockName);
+
+ // Is header, then force paragraph under
+ if (/^(H[1-6])$/.test(blockName))
+ paraAfter = doc.createElement("p");
+
+ // Setup chop nodes
+ startChop = startNode;
+ endChop = endNode;
+
+ // Get startChop node
+ node = startChop;
+ do {
+ if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))
+ break;
+
+ startChop = node;
+ } while ((node = node.previousSibling ? node.previousSibling : node.parentNode));
+
+ // Get endChop node
+ node = endChop;
+ do {
+ if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))
+ break;
+
+ endChop = node;
+ } while ((node = node.nextSibling ? node.nextSibling : node.parentNode));
+
+ // Fix when only a image is within the TD
+ if (startChop.nodeName == "TD")
+ startChop = startChop.firstChild;
+
+ if (endChop.nodeName == "TD")
+ endChop = endChop.lastChild;
+
+ // If not in a block element
+ if (startBlock == null) {
+ // Delete selection
+ rng.deleteContents();
+
+ if (!tinyMCE.isSafari)
+ sel.removeAllRanges();
+
+ if (startChop != rootElm && endChop != rootElm) {
+ // Insert paragraph before
+ rngBefore = rng.cloneRange();
+
+ if (startChop == body)
+ rngBefore.setStart(startChop, 0);
+ else
+ rngBefore.setStartBefore(startChop);
+
+ paraBefore.appendChild(rngBefore.cloneContents());
+
+ // Insert paragraph after
+ if (endChop.parentNode.nodeName == blockName)
+ endChop = endChop.parentNode;
+
+ // If not after image
+ //if (rng.startContainer.nodeName != "BODY" && rng.endContainer.nodeName != "BODY")
+ rng.setEndAfter(endChop);
+
+ if (endChop.nodeName != "#text" && endChop.nodeName != "BODY")
+ rngBefore.setEndAfter(endChop);
+
+ contents = rng.cloneContents();
+ if (contents.firstChild && (contents.firstChild.nodeName == blockName || contents.firstChild.nodeName == "BODY"))
+ paraAfter.innerHTML = contents.firstChild.innerHTML;
+ else
+ paraAfter.appendChild(contents);
+
+ // Check if it's a empty paragraph
+ if (isEmpty(paraBefore))
+ paraBefore.innerHTML = " ";
+
+ // Check if it's a empty paragraph
+ if (isEmpty(paraAfter))
+ paraAfter.innerHTML = " ";
+
+ // Delete old contents
+ rng.deleteContents();
+ rngAfter.deleteContents();
+ rngBefore.deleteContents();
+
+ // Insert new paragraphs
+ if (tinyMCE.isOpera) {
+ paraBefore.normalize();
+ rngBefore.insertNode(paraBefore);
+ paraAfter.normalize();
+ rngBefore.insertNode(paraAfter);
+ } else {
+ paraAfter.normalize();
+ rngBefore.insertNode(paraAfter);
+ paraBefore.normalize();
+ rngBefore.insertNode(paraBefore);
+ }
+
+ //tinyMCE.debug("1: ", paraBefore.innerHTML, paraAfter.innerHTML);
+ } else {
+ body.innerHTML = "<" + blockName + "> </" + blockName + "><" + blockName + "> </" + blockName + ">";
+ paraAfter = body.childNodes[1];
+ }
+
+ inst.selection.moveToBookmark(b);
+ inst.selection.selectNode(paraAfter, true, true);
+
+ return true;
+ }
+
+ // Place first part within new paragraph
+ if (startChop.nodeName == blockName)
+ rngBefore.setStart(startChop, 0);
+ else
+ rngBefore.setStartBefore(startChop);
+
+ rngBefore.setEnd(startNode, startOffset);
+ paraBefore.appendChild(rngBefore.cloneContents());
+
+ // Place secound part within new paragraph
+ rngAfter.setEndAfter(endChop);
+ rngAfter.setStart(endNode, endOffset);
+ contents = rngAfter.cloneContents();
+
+ if (contents.firstChild && contents.firstChild.nodeName == blockName) {
+ /* var nodes = contents.firstChild.childNodes;
+ for (i=0; i<nodes.length; i++) {
+ //tinyMCE.debug(nodes[i].nodeName);
+ if (nodes[i].nodeName != "BODY")
+ paraAfter.appendChild(nodes[i]);
+ }
+ */
+ paraAfter.innerHTML = contents.firstChild.innerHTML;
+ } else
+ paraAfter.appendChild(contents);
+
+ // Check if it's a empty paragraph
+ if (isEmpty(paraBefore))
+ paraBefore.innerHTML = " ";
+
+ // Check if it's a empty paragraph
+ if (isEmpty(paraAfter))
+ paraAfter.innerHTML = " ";
+
+ // Create a range around everything
+ rng = doc.createRange();
+
+ if (!startChop.previousSibling && startChop.parentNode.nodeName.toUpperCase() == blockName) {
+ rng.setStartBefore(startChop.parentNode);
+ } else {
+ if (rngBefore.startContainer.nodeName.toUpperCase() == blockName && rngBefore.startOffset == 0)
+ rng.setStartBefore(rngBefore.startContainer);
+ else
+ rng.setStart(rngBefore.startContainer, rngBefore.startOffset);
+ }
+
+ if (!endChop.nextSibling && endChop.parentNode.nodeName.toUpperCase() == blockName)
+ rng.setEndAfter(endChop.parentNode);
+ else
+ rng.setEnd(rngAfter.endContainer, rngAfter.endOffset);
+
+ // Delete all contents and insert new paragraphs
+ rng.deleteContents();
+
+ if (tinyMCE.isOpera) {
+ rng.insertNode(paraBefore);
+ rng.insertNode(paraAfter);
+ } else {
+ rng.insertNode(paraAfter);
+ rng.insertNode(paraBefore);
+ }
+
+ //tinyMCE.debug("2", paraBefore.innerHTML, paraAfter.innerHTML);
+
+ // Normalize
+ paraAfter.normalize();
+ paraBefore.normalize();
+
+ inst.selection.moveToBookmark(b);
+ inst.selection.selectNode(paraAfter, true, true);
+
+ return true;
+ },
+
+ _handleBackSpace : function(inst) {
+ var r = inst.getRng(), sn = r.startContainer, nv, s = false;
+
+ // Added body check for bug #1527787
+ if (sn && sn.nextSibling && sn.nextSibling.nodeName == "BR" && sn.parentNode.nodeName != "BODY") {
+ nv = sn.nodeValue;
+
+ // Handle if a backspace is pressed after a space character #bug 1466054 removed since fix for #1527787
+ /*if (nv != null && nv.length >= r.startOffset && nv.charAt(r.startOffset - 1) == ' ')
+ s = true;*/
+
+ // Only remove BRs if we are at the end of line #bug 1464152
+ if (nv != null && r.startOffset == nv.length)
+ sn.nextSibling.parentNode.removeChild(sn.nextSibling);
+ }
+
+ if (inst.settings.auto_resize)
+ inst.resizeToContent();
+
+ return s;
+ }
+
+ };
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */
+
+function TinyMCE_Layer(id, bm) {
+ this.id = id;
+ this.blockerElement = null;
+ this.events = false;
+ this.element = null;
+ this.blockMode = typeof(bm) != 'undefined' ? bm : true;
+ this.doc = document;
+};
+
+TinyMCE_Layer.prototype = {
+ moveRelativeTo : function(re, p) {
+ var rep = this.getAbsPosition(re), e = this.getElement(), x, y;
+ var w = parseInt(re.offsetWidth), h = parseInt(re.offsetHeight);
+ var ew = parseInt(e.offsetWidth), eh = parseInt(e.offsetHeight);
+
+ switch (p) {
+ case "tl":
+ x = rep.absLeft;
+ y = rep.absTop;
+ break;
+
+ case "tr":
+ x = rep.absLeft + w;
+ y = rep.absTop;
+ break;
+
+ case "bl":
+ x = rep.absLeft;
+ y = rep.absTop + h;
+ break;
+
+ case "br":
+ x = rep.absLeft + w;
+ y = rep.absTop + h;
+ break;
+
+ case "cc":
+ x = rep.absLeft + (w / 2) - (ew / 2);
+ y = rep.absTop + (h / 2) - (eh / 2);
+ break;
+ }
+
+ this.moveTo(x, y);
+ },
+
+ moveBy : function(x, y) {
+ var e = this.getElement();
+ this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y);
+ },
+
+ moveTo : function(x, y) {
+ var e = this.getElement();
+
+ e.style.left = x + "px";
+ e.style.top = y + "px";
+
+ this.updateBlocker();
+ },
+
+ resizeBy : function(w, h) {
+ var e = this.getElement();
+ this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h);
+ },
+
+ resizeTo : function(w, h) {
+ var e = this.getElement();
+
+ if (w != null)
+ e.style.width = w + "px";
+
+ if (h != null)
+ e.style.height = h + "px";
+
+ this.updateBlocker();
+ },
+
+ show : function() {
+ var el = this.getElement();
+
+ if (el) {
+ el.style.display = 'block';
+ this.updateBlocker();
+ }
+ },
+
+ hide : function() {
+ var el = this.getElement();
+
+ if (el) {
+ el.style.display = 'none';
+ this.updateBlocker();
+ }
+ },
+
+ isVisible : function() {
+ return this.getElement().style.display == 'block';
+ },
+
+ getElement : function() {
+ if (!this.element)
+ this.element = this.doc.getElementById(this.id);
+
+ return this.element;
+ },
+
+ setBlockMode : function(s) {
+ this.blockMode = s;
+ },
+
+ updateBlocker : function() {
+ var e, b, x, y, w, h;
+
+ b = this.getBlocker();
+ if (b) {
+ if (this.blockMode) {
+ e = this.getElement();
+ x = this.parseInt(e.style.left);
+ y = this.parseInt(e.style.top);
+ w = this.parseInt(e.offsetWidth);
+ h = this.parseInt(e.offsetHeight);
+
+ b.style.left = x + 'px';
+ b.style.top = y + 'px';
+ b.style.width = w + 'px';
+ b.style.height = h + 'px';
+ b.style.display = e.style.display;
+ } else
+ b.style.display = 'none';
+ }
+ },
+
+ getBlocker : function() {
+ var d, b;
+
+ if (!this.blockerElement && this.blockMode) {
+ d = this.doc;
+ b = d.getElementById(this.id + "_blocker");
+
+ if (!b) {
+ b = d.createElement("iframe");
+
+ b.setAttribute('id', this.id + "_blocker");
+ b.style.cssText = 'display: none; position: absolute; left: 0; top: 0';
+ b.src = 'javascript:false;';
+ b.frameBorder = '0';
+ b.scrolling = 'no';
+
+ d.body.appendChild(b);
+ }
+
+ this.blockerElement = b;
+ }
+
+ return this.blockerElement;
+ },
+
+ getAbsPosition : function(n) {
+ var p = {absLeft : 0, absTop : 0};
+
+ while (n) {
+ p.absLeft += n.offsetLeft;
+ p.absTop += n.offsetTop;
+ n = n.offsetParent;
+ }
+
+ return p;
+ },
+
+ create : function(n, c, p, h) {
+ var d = this.doc, e = d.createElement(n);
+
+ e.setAttribute('id', this.id);
+
+ if (c)
+ e.className = c;
+
+ if (!p)
+ p = d.body;
+
+ if (h)
+ e.innerHTML = h;
+
+ p.appendChild(e);
+
+ return this.element = e;
+ },
+
+ exists : function() {
+ return this.doc.getElementById(this.id) != null;
+ },
+
+ parseInt : function(s) {
+ if (s == null || s == '')
+ return 0;
+
+ return parseInt(s);
+ },
+
+ remove : function() {
+ var e = this.getElement(), b = this.getBlocker();
+
+ if (e)
+ e.parentNode.removeChild(e);
+
+ if (b)
+ b.parentNode.removeChild(b);
+ }
+
+ };
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */
+
+function TinyMCE_Menu() {
+ var id;
+
+ if (typeof(tinyMCE.menuCounter) == "undefined")
+ tinyMCE.menuCounter = 0;
+
+ id = "mc_menu_" + tinyMCE.menuCounter++;
+
+ TinyMCE_Layer.call(this, id, true);
+
+ this.id = id;
+ this.items = [];
+ this.needsUpdate = true;
+};
+
+TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, {
+ init : function(s) {
+ var n;
+
+ // Default params
+ this.settings = {
+ separator_class : 'mceMenuSeparator',
+ title_class : 'mceMenuTitle',
+ disabled_class : 'mceMenuDisabled',
+ menu_class : 'mceMenu',
+ drop_menu : true
+ };
+
+ for (n in s)
+ this.settings[n] = s[n];
+
+ this.create('div', this.settings.menu_class);
+ },
+
+ clear : function() {
+ this.items = [];
+ },
+
+ addTitle : function(t) {
+ this.add({type : 'title', text : t});
+ },
+
+ addDisabled : function(t) {
+ this.add({type : 'disabled', text : t});
+ },
+
+ addSeparator : function() {
+ this.add({type : 'separator'});
+ },
+
+ addItem : function(t, js) {
+ this.add({text : t, js : js});
+ },
+
+ add : function(mi) {
+ this.items[this.items.length] = mi;
+ this.needsUpdate = true;
+ },
+
+ update : function() {
+ var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings;
+
+ if (this.settings.drop_menu)
+ h += '<span class="mceMenuLine"></span>';
+
+ h += '<table border="0" cellpadding="0" cellspacing="0">';
+
+ for (i=0; i<m.length; i++) {
+ t = tinyMCE.xmlEncode(m[i].text);
+ c = m[i].class_name ? ' class="' + m[i].class_name + '"' : '';
+
+ switch (m[i].type) {
+ case 'separator':
+ h += '<tr class="' + s.separator_class + '"><td>';
+ break;
+
+ case 'title':
+ h += '<tr class="' + s.title_class + '"><td><span' + c +'>' + t + '</span>';
+ break;
+
+ case 'disabled':
+ h += '<tr class="' + s.disabled_class + '"><td><span' + c +'>' + t + '</span>';
+ break;
+
+ default:
+ h += '<tr><td><a href="' + tinyMCE.xmlEncode(m[i].js) + '" onmousedown="' + tinyMCE.xmlEncode(m[i].js) + ';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span' + c +'>' + t + '</span></a>';
+ }
+
+ h += '</td></tr>';
+ }
+
+ h += '</table>';
+
+ e.innerHTML = h;
+
+ this.needsUpdate = false;
+ this.updateBlocker();
+ },
+
+ show : function() {
+ var nl, i;
+
+ if (tinyMCE.lastMenu == this)
+ return;
+
+ if (this.needsUpdate)
+ this.update();
+
+ if (tinyMCE.lastMenu && tinyMCE.lastMenu != this)
+ tinyMCE.lastMenu.hide();
+
+ TinyMCE_Layer.prototype.show.call(this);
+
+ if (!tinyMCE.isOpera) {
+ // Accessibility stuff
+/* nl = this.getElement().getElementsByTagName("a");
+ if (nl.length > 0)
+ nl[0].focus();*/
+ }
+
+ tinyMCE.lastMenu = this;
+ }
+
+ });
+
+/* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */
+
+tinyMCE.add(TinyMCE_Engine, {
+ debug : function() {
+ var m = "", a, i, l = tinyMCE.log.length;
+
+ for (i=0, a = this.debug.arguments; i<a.length; i++) {
+ m += a[i];
+
+ if (i<a.length-1)
+ m += ', ';
+ }
+
+ if (l < 1000)
+ tinyMCE.log[l] = "[debug] " + m;
+ }
+
+ });
+
-/**\r
- * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $\r
- *\r
- * Makes select boxes editable.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-var TinyMCE_EditableSelects = {\r
- editSelectElm : null,\r
-\r
- init : function() {\r
- var nl = document.getElementsByTagName("select"), i, d = document, o;\r
-\r
- for (i=0; i<nl.length; i++) {\r
- if (nl[i].className.indexOf('mceEditableSelect') != -1) {\r
- o = new Option('(value)', '__mce_add_custom__');\r
-\r
- o.className = 'mceAddSelectValue';\r
-\r
- nl[i].options[nl[i].options.length] = o;\r
- nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);');\r
- }\r
- }\r
- },\r
-\r
- onChangeEditableSelect : function(se) {\r
- var d = document, ne;\r
-\r
- if (se.options[se.selectedIndex].value == '__mce_add_custom__') {\r
- ne = d.createElement("input");\r
- ne.id = se.id + "_custom";\r
- ne.name = se.name + "_custom";\r
- ne.type = "text";\r
-\r
- ne.style.width = se.clientWidth;\r
- se.parentNode.insertBefore(ne, se);\r
- se.style.display = 'none';\r
- ne.focus();\r
- ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;\r
- TinyMCE_EditableSelects.editSelectElm = se;\r
- }\r
- },\r
-\r
- onBlurEditableSelectInput : function() {\r
- var se = TinyMCE_EditableSelects.editSelectElm;\r
-\r
- if (se) {\r
- if (se.previousSibling.value != '') {\r
- addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);\r
- selectByValue(document.forms[0], se.id, se.previousSibling.value);\r
- } else\r
- selectByValue(document.forms[0], se.id, '');\r
-\r
- se.style.display = 'inline';\r
- se.parentNode.removeChild(se.previousSibling);\r
- TinyMCE_EditableSelects.editSelectElm = null;\r
- }\r
- }\r
-};\r
+/**
+ * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $
+ *
+ * Makes select boxes editable.
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+var TinyMCE_EditableSelects = {
+ editSelectElm : null,
+
+ init : function() {
+ var nl = document.getElementsByTagName("select"), i, d = document, o;
+
+ for (i=0; i<nl.length; i++) {
+ if (nl[i].className.indexOf('mceEditableSelect') != -1) {
+ o = new Option('(value)', '__mce_add_custom__');
+
+ o.className = 'mceAddSelectValue';
+
+ nl[i].options[nl[i].options.length] = o;
+ nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);');
+ }
+ }
+ },
+
+ onChangeEditableSelect : function(se) {
+ var d = document, ne;
+
+ if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
+ ne = d.createElement("input");
+ ne.id = se.id + "_custom";
+ ne.name = se.name + "_custom";
+ ne.type = "text";
+
+ ne.style.width = se.clientWidth;
+ se.parentNode.insertBefore(ne, se);
+ se.style.display = 'none';
+ ne.focus();
+ ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
+ TinyMCE_EditableSelects.editSelectElm = se;
+ }
+ },
+
+ onBlurEditableSelectInput : function() {
+ var se = TinyMCE_EditableSelects.editSelectElm;
+
+ if (se) {
+ if (se.previousSibling.value != '') {
+ addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
+ selectByValue(document.forms[0], se.id, se.previousSibling.value);
+ } else
+ selectByValue(document.forms[0], se.id, '');
+
+ se.style.display = 'inline';
+ se.parentNode.removeChild(se.previousSibling);
+ TinyMCE_EditableSelects.editSelectElm = null;
+ }
+ }
+};
-/**\r
- * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $\r
- *\r
- * Various form utilitiy functions.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.getParam("theme");\r
-\r
-function getColorPickerHTML(id, target_form_element) {\r
- var h = "";\r
-\r
- h += '<a id="' + id + '_link" href="javascript:void(0);" onkeydown="pickColor(event,\'' + target_form_element +'\');" onmousedown="pickColor(event,\'' + target_form_element +'\');return false;">';\r
- h += '<img id="' + id + '" src="' + themeBaseURL + '/images/color.gif"';\r
- h += ' onmouseover="this.className=\'mceButtonOver\'"';\r
- h += ' onmouseout="this.className=\'mceButtonNormal\'"';\r
- h += ' onmousedown="this.className=\'mceButtonDown\'"';\r
- h += ' width="20" height="16" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';\r
- h += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';\r
-\r
- return h;\r
-}\r
-\r
-function pickColor(e, target_form_element) {\r
- if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown")\r
- tinyMCEPopup.pickColor(e, target_form_element);\r
-}\r
-\r
-function updateColor(img_id, form_element_id) {\r
- document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;\r
-}\r
-\r
-function setBrowserDisabled(id, state) {\r
- var img = document.getElementById(id);\r
- var lnk = document.getElementById(id + "_link");\r
-\r
- if (lnk) {\r
- if (state) {\r
- lnk.setAttribute("realhref", lnk.getAttribute("href"));\r
- lnk.removeAttribute("href");\r
- tinyMCE.switchClass(img, 'mceButtonDisabled', true);\r
- } else {\r
- lnk.setAttribute("href", lnk.getAttribute("realhref"));\r
- tinyMCE.switchClass(img, 'mceButtonNormal', false);\r
- }\r
- }\r
-}\r
-\r
-function getBrowserHTML(id, target_form_element, type, prefix) {\r
- var option = prefix + "_" + type + "_browser_callback";\r
- var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));\r
- if (cb == null)\r
- return "";\r
-\r
- var html = "";\r
-\r
- html += '<a id="' + id + '_link" href="javascript:openBrower(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;">';\r
- html += '<img id="' + id + '" src="' + themeBaseURL + '/images/browse.gif"';\r
- html += ' onmouseover="this.className=\'mceButtonOver\';"';\r
- html += ' onmouseout="this.className=\'mceButtonNormal\';"';\r
- html += ' onmousedown="this.className=\'mceButtonDown\';"';\r
- html += ' width="20" height="18" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';\r
- html += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';\r
-\r
- return html;\r
-}\r
-\r
-function openBrower(img_id, target_form_element, type, option) {\r
- var img = document.getElementById(img_id);\r
-\r
- if (img.className != "mceButtonDisabled")\r
- tinyMCEPopup.openBrowser(target_form_element, type, option);\r
-}\r
-\r
-function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
- if (!form_obj || !form_obj.elements[field_name])\r
- return;\r
-\r
- var sel = form_obj.elements[field_name];\r
-\r
- var found = false;\r
- for (var i=0; i<sel.options.length; i++) {\r
- var option = sel.options[i];\r
-\r
- if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
- option.selected = true;\r
- found = true;\r
- } else\r
- option.selected = false;\r
- }\r
-\r
- if (!found && add_custom && value != '') {\r
- var option = new Option(value, value);\r
- option.selected = true;\r
- sel.options[sel.options.length] = option;\r
- sel.selectedIndex = sel.options.length - 1;\r
- }\r
-\r
- return found;\r
-}\r
-\r
-function getSelectValue(form_obj, field_name) {\r
- var elm = form_obj.elements[field_name];\r
-\r
- if (elm == null || elm.options == null)\r
- return "";\r
-\r
- return elm.options[elm.selectedIndex].value;\r
-}\r
-\r
-function addSelectValue(form_obj, field_name, name, value) {\r
- var s = form_obj.elements[field_name];\r
- var o = new Option(name, value);\r
- s.options[s.options.length] = o;\r
-}\r
-\r
-function addClassesToList(list_id, specific_option) {\r
- // Setup class droplist\r
- var styleSelectElm = document.getElementById(list_id);\r
- var styles = tinyMCE.getParam('theme_advanced_styles', false);\r
- styles = tinyMCE.getParam(specific_option, styles);\r
-\r
- if (styles) {\r
- var stylesAr = styles.split(';');\r
-\r
- for (var i=0; i<stylesAr.length; i++) {\r
- if (stylesAr != "") {\r
- var key, value;\r
-\r
- key = stylesAr[i].split('=')[0];\r
- value = stylesAr[i].split('=')[1];\r
-\r
- styleSelectElm.options[styleSelectElm.length] = new Option(key, value);\r
- }\r
- }\r
- } else {\r
- // Use auto impored classes\r
- var csses = tinyMCE.getCSSClasses(tinyMCE.getWindowArg('editor_id'));\r
- for (var i=0; i<csses.length; i++)\r
- styleSelectElm.options[styleSelectElm.length] = new Option(csses[i], csses[i]);\r
- }\r
-}\r
-\r
-function isVisible(element_id) {\r
- var elm = document.getElementById(element_id);\r
-\r
- return elm && elm.style.display != "none";\r
-}\r
-\r
-function convertRGBToHex(col) {\r
- var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
-\r
- var rgb = col.replace(re, "$1,$2,$3").split(',');\r
- if (rgb.length == 3) {\r
- r = parseInt(rgb[0]).toString(16);\r
- g = parseInt(rgb[1]).toString(16);\r
- b = parseInt(rgb[2]).toString(16);\r
-\r
- r = r.length == 1 ? '0' + r : r;\r
- g = g.length == 1 ? '0' + g : g;\r
- b = b.length == 1 ? '0' + b : b;\r
-\r
- return "#" + r + g + b;\r
- }\r
-\r
- return col;\r
-}\r
-\r
-function convertHexToRGB(col) {\r
- if (col.indexOf('#') != -1) {\r
- col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
-\r
- r = parseInt(col.substring(0, 2), 16);\r
- g = parseInt(col.substring(2, 4), 16);\r
- b = parseInt(col.substring(4, 6), 16);\r
-\r
- return "rgb(" + r + "," + g + "," + b + ")";\r
- }\r
-\r
- return col;\r
-}\r
-\r
-function trimSize(size) {\r
- return size.replace(new RegExp('[^0-9%]', 'gi'), '');\r
-}\r
-\r
-function getCSSSize(size) {\r
- size = trimSize(size);\r
-\r
- if (size == "")\r
- return "";\r
-\r
- return size.indexOf('%') != -1 ? size : size + "px";\r
-}\r
-\r
-function getStyle(elm, attrib, style) {\r
- var val = tinyMCE.getAttrib(elm, attrib);\r
-\r
- if (val != '')\r
- return '' + val;\r
-\r
- if (typeof(style) == 'undefined')\r
- style = attrib;\r
-\r
- val = eval('elm.style.' + style);\r
-\r
- return val == null ? '' : '' + val;\r
-}\r
+/**
+ * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $
+ *
+ * Various form utilitiy functions.
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.getParam("theme");
+
+function getColorPickerHTML(id, target_form_element) {
+ var h = "";
+
+ h += '<a id="' + id + '_link" href="javascript:void(0);" onkeydown="pickColor(event,\'' + target_form_element +'\');" onmousedown="pickColor(event,\'' + target_form_element +'\');return false;">';
+ h += '<img id="' + id + '" src="' + themeBaseURL + '/images/color.gif"';
+ h += ' onmouseover="this.className=\'mceButtonOver\'"';
+ h += ' onmouseout="this.className=\'mceButtonNormal\'"';
+ h += ' onmousedown="this.className=\'mceButtonDown\'"';
+ h += ' width="20" height="16" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
+ h += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
+
+ return h;
+}
+
+function pickColor(e, target_form_element) {
+ if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown")
+ tinyMCEPopup.pickColor(e, target_form_element);
+}
+
+function updateColor(img_id, form_element_id) {
+ document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
+}
+
+function setBrowserDisabled(id, state) {
+ var img = document.getElementById(id);
+ var lnk = document.getElementById(id + "_link");
+
+ if (lnk) {
+ if (state) {
+ lnk.setAttribute("realhref", lnk.getAttribute("href"));
+ lnk.removeAttribute("href");
+ tinyMCE.switchClass(img, 'mceButtonDisabled', true);
+ } else {
+ lnk.setAttribute("href", lnk.getAttribute("realhref"));
+ tinyMCE.switchClass(img, 'mceButtonNormal', false);
+ }
+ }
+}
+
+function getBrowserHTML(id, target_form_element, type, prefix) {
+ var option = prefix + "_" + type + "_browser_callback";
+ var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
+ if (cb == null)
+ return "";
+
+ var html = "";
+
+ html += '<a id="' + id + '_link" href="javascript:openBrower(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;">';
+ html += '<img id="' + id + '" src="' + themeBaseURL + '/images/browse.gif"';
+ html += ' onmouseover="this.className=\'mceButtonOver\';"';
+ html += ' onmouseout="this.className=\'mceButtonNormal\';"';
+ html += ' onmousedown="this.className=\'mceButtonDown\';"';
+ html += ' width="20" height="18" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
+ html += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
+
+ return html;
+}
+
+function openBrower(img_id, target_form_element, type, option) {
+ var img = document.getElementById(img_id);
+
+ if (img.className != "mceButtonDisabled")
+ tinyMCEPopup.openBrowser(target_form_element, type, option);
+}
+
+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
+ if (!form_obj || !form_obj.elements[field_name])
+ return;
+
+ var sel = form_obj.elements[field_name];
+
+ var found = false;
+ for (var i=0; i<sel.options.length; i++) {
+ var option = sel.options[i];
+
+ if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
+ option.selected = true;
+ found = true;
+ } else
+ option.selected = false;
+ }
+
+ if (!found && add_custom && value != '') {
+ var option = new Option(value, value);
+ option.selected = true;
+ sel.options[sel.options.length] = option;
+ sel.selectedIndex = sel.options.length - 1;
+ }
+
+ return found;
+}
+
+function getSelectValue(form_obj, field_name) {
+ var elm = form_obj.elements[field_name];
+
+ if (elm == null || elm.options == null)
+ return "";
+
+ return elm.options[elm.selectedIndex].value;
+}
+
+function addSelectValue(form_obj, field_name, name, value) {
+ var s = form_obj.elements[field_name];
+ var o = new Option(name, value);
+ s.options[s.options.length] = o;
+}
+
+function addClassesToList(list_id, specific_option) {
+ // Setup class droplist
+ var styleSelectElm = document.getElementById(list_id);
+ var styles = tinyMCE.getParam('theme_advanced_styles', false);
+ styles = tinyMCE.getParam(specific_option, styles);
+
+ if (styles) {
+ var stylesAr = styles.split(';');
+
+ for (var i=0; i<stylesAr.length; i++) {
+ if (stylesAr != "") {
+ var key, value;
+
+ key = stylesAr[i].split('=')[0];
+ value = stylesAr[i].split('=')[1];
+
+ styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
+ }
+ }
+ } else {
+ // Use auto impored classes
+ var csses = tinyMCE.getCSSClasses(tinyMCE.getWindowArg('editor_id'));
+ for (var i=0; i<csses.length; i++)
+ styleSelectElm.options[styleSelectElm.length] = new Option(csses[i], csses[i]);
+ }
+}
+
+function isVisible(element_id) {
+ var elm = document.getElementById(element_id);
+
+ return elm && elm.style.display != "none";
+}
+
+function convertRGBToHex(col) {
+ var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
+
+ var rgb = col.replace(re, "$1,$2,$3").split(',');
+ if (rgb.length == 3) {
+ r = parseInt(rgb[0]).toString(16);
+ g = parseInt(rgb[1]).toString(16);
+ b = parseInt(rgb[2]).toString(16);
+
+ r = r.length == 1 ? '0' + r : r;
+ g = g.length == 1 ? '0' + g : g;
+ b = b.length == 1 ? '0' + b : b;
+
+ return "#" + r + g + b;
+ }
+
+ return col;
+}
+
+function convertHexToRGB(col) {
+ if (col.indexOf('#') != -1) {
+ col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
+
+ r = parseInt(col.substring(0, 2), 16);
+ g = parseInt(col.substring(2, 4), 16);
+ b = parseInt(col.substring(4, 6), 16);
+
+ return "rgb(" + r + "," + g + "," + b + ")";
+ }
+
+ return col;
+}
+
+function trimSize(size) {
+ return size.replace(new RegExp('[^0-9%]', 'gi'), '');
+}
+
+function getCSSSize(size) {
+ size = trimSize(size);
+
+ if (size == "")
+ return "";
+
+ return size.indexOf('%') != -1 ? size : size + "px";
+}
+
+function getStyle(elm, attrib, style) {
+ var val = tinyMCE.getAttrib(elm, attrib);
+
+ if (val != '')
+ return '' + val;
+
+ if (typeof(style) == 'undefined')
+ style = attrib;
+
+ val = eval('elm.style.' + style);
+
+ return val == null ? '' : '' + val;
+}
-/**\r
- * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $\r
- *\r
- * Moxiecode floating layer script.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-function MCLayer(id) {\r
- this.id = id;\r
- this.settings = new Array();\r
- this.blockerElement = null;\r
- this.isMSIE = navigator.appName == "Microsoft Internet Explorer";\r
- this.events = false;\r
- this.autoHideCallback = null;\r
-}\r
-\r
-MCLayer.prototype = {\r
- moveRelativeTo : function(re, p, a) {\r
- var rep = this.getAbsPosition(re);\r
- var w = parseInt(re.offsetWidth);\r
- var h = parseInt(re.offsetHeight);\r
- var x, y;\r
-\r
- switch (p) {\r
- case "tl":\r
- break;\r
-\r
- case "tr":\r
- x = rep.absLeft + w;\r
- y = rep.absTop;\r
- break;\r
-\r
- case "bl":\r
- break;\r
-\r
- case "br":\r
- break;\r
- }\r
-\r
- this.moveTo(x, y);\r
- },\r
-\r
- moveBy : function(dx, dy) {\r
- var e = this.getElement();\r
- var x = parseInt(e.style.left);\r
- var y = parseInt(e.style.top);\r
-\r
- e.style.left = (x + dx) + "px";\r
- e.style.top = (y + dy) + "px";\r
-\r
- this.updateBlocker();\r
- },\r
-\r
- moveTo : function(x, y) {\r
- var e = this.getElement();\r
-\r
- e.style.left = x + "px";\r
- e.style.top = y + "px";\r
-\r
- this.updateBlocker();\r
- },\r
-\r
- show : function() {\r
- MCLayer.visibleLayer = this;\r
-\r
- this.getElement().style.display = 'block';\r
- this.updateBlocker();\r
- },\r
-\r
- hide : function() {\r
- this.getElement().style.display = 'none';\r
- this.updateBlocker();\r
- },\r
-\r
- setAutoHide : function(s, cb) {\r
- this.autoHideCallback = cb;\r
- this.registerEventHandlers();\r
- },\r
-\r
- getElement : function() {\r
- return document.getElementById(this.id);\r
- },\r
-\r
- updateBlocker : function() {\r
- if (!this.isMSIE)\r
- return;\r
-\r
- var e = this.getElement();\r
- var b = this.getBlocker();\r
- var x = this.parseInt(e.style.left);\r
- var y = this.parseInt(e.style.top);\r
- var w = this.parseInt(e.offsetWidth);\r
- var h = this.parseInt(e.offsetHeight);\r
-\r
- b.style.left = x + 'px';\r
- b.style.top = y + 'px';\r
- b.style.width = w + 'px';\r
- b.style.height = h + 'px';\r
- b.style.display = e.style.display;\r
- },\r
-\r
- getBlocker : function() {\r
- if (!this.blockerElement) {\r
- var d = document, b = d.createElement("iframe");\r
-\r
- b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';\r
- b.src = 'javascript:false;';\r
- b.frameBorder = '0';\r
- b.scrolling = 'no';\r
-\r
- d.body.appendChild(b);\r
- this.blockerElement = b;\r
- }\r
-\r
- return this.blockerElement;\r
- },\r
-\r
- getAbsPosition : function(n) {\r
- var p = {absLeft : 0, absTop : 0};\r
-\r
- while (n) {\r
- p.absLeft += n.offsetLeft;\r
- p.absTop += n.offsetTop;\r
- n = n.offsetParent;\r
- }\r
-\r
- return p;\r
- },\r
-\r
- registerEventHandlers : function() {\r
- if (!this.events) {\r
- var d = document;\r
-\r
- this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);\r
-\r
- this.events = true;\r
- }\r
- },\r
-\r
- addEvent : function(o, n, h) {\r
- if (o.attachEvent)\r
- o.attachEvent("on" + n, h);\r
- else\r
- o.addEventListener(n, h, false);\r
- },\r
-\r
- onMouseDown : function(e) {\r
- e = typeof(e) == "undefined" ? window.event : e;\r
- var b = document.body;\r
- var l = MCLayer.visibleLayer;\r
-\r
- if (l) {\r
- var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;\r
- var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;\r
- var el = l.getElement();\r
- var x = parseInt(el.style.left);\r
- var y = parseInt(el.style.top);\r
- var w = parseInt(el.offsetWidth);\r
- var h = parseInt(el.offsetHeight);\r
-\r
- if (!(mx > x && mx < x + w && my > y && my < y + h)) {\r
- MCLayer.visibleLayer = null;\r
-\r
- if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my))\r
- return true;\r
-\r
- l.hide();\r
- }\r
- }\r
- },\r
-\r
- addCSSClass : function(e, c) {\r
- this.removeCSSClass(e, c);\r
- var a = this.explode(' ', e.className);\r
- a[a.length] = c;\r
- e.className = a.join(' ');\r
- },\r
-\r
- removeCSSClass : function(e, c) {\r
- var a = this.explode(' ', e.className), i;\r
-\r
- for (i=0; i<a.length; i++) {\r
- if (a[i] == c)\r
- a[i] = '';\r
- }\r
-\r
- e.className = a.join(' ');\r
- },\r
-\r
- explode : function(d, s) {\r
- var ar = s.split(d);\r
- var oar = new Array();\r
-\r
- for (var i = 0; i<ar.length; i++) {\r
- if (ar[i] != "")\r
- oar[oar.length] = ar[i];\r
- }\r
-\r
- return oar;\r
- },\r
-\r
- parseInt : function(s) {\r
- if (s == null || s == '')\r
- return 0;\r
-\r
- return parseInt(s);\r
- }\r
-}\r
+/**
+ * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $
+ *
+ * Moxiecode floating layer script.
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+function MCLayer(id) {
+ this.id = id;
+ this.settings = new Array();
+ this.blockerElement = null;
+ this.isMSIE = navigator.appName == "Microsoft Internet Explorer";
+ this.events = false;
+ this.autoHideCallback = null;
+}
+
+MCLayer.prototype = {
+ moveRelativeTo : function(re, p, a) {
+ var rep = this.getAbsPosition(re);
+ var w = parseInt(re.offsetWidth);
+ var h = parseInt(re.offsetHeight);
+ var x, y;
+
+ switch (p) {
+ case "tl":
+ break;
+
+ case "tr":
+ x = rep.absLeft + w;
+ y = rep.absTop;
+ break;
+
+ case "bl":
+ break;
+
+ case "br":
+ break;
+ }
+
+ this.moveTo(x, y);
+ },
+
+ moveBy : function(dx, dy) {
+ var e = this.getElement();
+ var x = parseInt(e.style.left);
+ var y = parseInt(e.style.top);
+
+ e.style.left = (x + dx) + "px";
+ e.style.top = (y + dy) + "px";
+
+ this.updateBlocker();
+ },
+
+ moveTo : function(x, y) {
+ var e = this.getElement();
+
+ e.style.left = x + "px";
+ e.style.top = y + "px";
+
+ this.updateBlocker();
+ },
+
+ show : function() {
+ MCLayer.visibleLayer = this;
+
+ this.getElement().style.display = 'block';
+ this.updateBlocker();
+ },
+
+ hide : function() {
+ this.getElement().style.display = 'none';
+ this.updateBlocker();
+ },
+
+ setAutoHide : function(s, cb) {
+ this.autoHideCallback = cb;
+ this.registerEventHandlers();
+ },
+
+ getElement : function() {
+ return document.getElementById(this.id);
+ },
+
+ updateBlocker : function() {
+ if (!this.isMSIE)
+ return;
+
+ var e = this.getElement();
+ var b = this.getBlocker();
+ var x = this.parseInt(e.style.left);
+ var y = this.parseInt(e.style.top);
+ var w = this.parseInt(e.offsetWidth);
+ var h = this.parseInt(e.offsetHeight);
+
+ b.style.left = x + 'px';
+ b.style.top = y + 'px';
+ b.style.width = w + 'px';
+ b.style.height = h + 'px';
+ b.style.display = e.style.display;
+ },
+
+ getBlocker : function() {
+ if (!this.blockerElement) {
+ var d = document, b = d.createElement("iframe");
+
+ b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';
+ b.src = 'javascript:false;';
+ b.frameBorder = '0';
+ b.scrolling = 'no';
+
+ d.body.appendChild(b);
+ this.blockerElement = b;
+ }
+
+ return this.blockerElement;
+ },
+
+ getAbsPosition : function(n) {
+ var p = {absLeft : 0, absTop : 0};
+
+ while (n) {
+ p.absLeft += n.offsetLeft;
+ p.absTop += n.offsetTop;
+ n = n.offsetParent;
+ }
+
+ return p;
+ },
+
+ registerEventHandlers : function() {
+ if (!this.events) {
+ var d = document;
+
+ this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);
+
+ this.events = true;
+ }
+ },
+
+ addEvent : function(o, n, h) {
+ if (o.attachEvent)
+ o.attachEvent("on" + n, h);
+ else
+ o.addEventListener(n, h, false);
+ },
+
+ onMouseDown : function(e) {
+ e = typeof(e) == "undefined" ? window.event : e;
+ var b = document.body;
+ var l = MCLayer.visibleLayer;
+
+ if (l) {
+ var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;
+ var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;
+ var el = l.getElement();
+ var x = parseInt(el.style.left);
+ var y = parseInt(el.style.top);
+ var w = parseInt(el.offsetWidth);
+ var h = parseInt(el.offsetHeight);
+
+ if (!(mx > x && mx < x + w && my > y && my < y + h)) {
+ MCLayer.visibleLayer = null;
+
+ if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my))
+ return true;
+
+ l.hide();
+ }
+ }
+ },
+
+ addCSSClass : function(e, c) {
+ this.removeCSSClass(e, c);
+ var a = this.explode(' ', e.className);
+ a[a.length] = c;
+ e.className = a.join(' ');
+ },
+
+ removeCSSClass : function(e, c) {
+ var a = this.explode(' ', e.className), i;
+
+ for (i=0; i<a.length; i++) {
+ if (a[i] == c)
+ a[i] = '';
+ }
+
+ e.className = a.join(' ');
+ },
+
+ explode : function(d, s) {
+ var ar = s.split(d);
+ var oar = new Array();
+
+ for (var i = 0; i<ar.length; i++) {
+ if (ar[i] != "")
+ oar[oar.length] = ar[i];
+ }
+
+ return oar;
+ },
+
+ parseInt : function(s) {
+ if (s == null || s == '')
+ return 0;
+
+ return parseInt(s);
+ }
+}
-/**\r
- * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $\r
- *\r
- * Moxiecode DHTML Tabs script.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-function MCTabs() {\r
- this.settings = new Array();\r
-};\r
-\r
-MCTabs.prototype.init = function(settings) {\r
- this.settings = settings;\r
-};\r
-\r
-MCTabs.prototype.getParam = function(name, default_value) {\r
- var value = null;\r
-\r
- value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];\r
-\r
- // Fix bool values\r
- if (value == "true" || value == "false")\r
- return (value == "true");\r
-\r
- return value;\r
-};\r
-\r
-MCTabs.prototype.displayTab = function(tab_id, panel_id) {\r
- var panelElm = document.getElementById(panel_id);\r
- var panelContainerElm = panelElm ? panelElm.parentNode : null;\r
- var tabElm = document.getElementById(tab_id);\r
- var tabContainerElm = tabElm ? tabElm.parentNode : null;\r
- var selectionClass = this.getParam('selection_class', 'current');\r
-\r
- if (tabElm && tabContainerElm) {\r
- var nodes = tabContainerElm.childNodes;\r
-\r
- // Hide all other tabs\r
- for (var i=0; i<nodes.length; i++) {\r
- if (nodes[i].nodeName == "LI")\r
- nodes[i].className = '';\r
- }\r
-\r
- // Show selected tab\r
- tabElm.className = 'current';\r
- }\r
-\r
- if (panelElm && panelContainerElm) {\r
- var nodes = panelContainerElm.childNodes;\r
-\r
- // Hide all other panels\r
- for (var i=0; i<nodes.length; i++) {\r
- if (nodes[i].nodeName == "DIV")\r
- nodes[i].className = 'panel';\r
- }\r
-\r
- // Show selected panel\r
- panelElm.className = 'current';\r
- }\r
-};\r
-\r
-MCTabs.prototype.getAnchor = function() {\r
- var pos, url = document.location.href;\r
-\r
- if ((pos = url.lastIndexOf('#')) != -1)\r
- return url.substring(pos + 1);\r
-\r
- return "";\r
-};\r
-\r
-// Global instance\r
-var mcTabs = new MCTabs();\r
+/**
+ * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $
+ *
+ * Moxiecode DHTML Tabs script.
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+function MCTabs() {
+ this.settings = new Array();
+};
+
+MCTabs.prototype.init = function(settings) {
+ this.settings = settings;
+};
+
+MCTabs.prototype.getParam = function(name, default_value) {
+ var value = null;
+
+ value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
+
+ // Fix bool values
+ if (value == "true" || value == "false")
+ return (value == "true");
+
+ return value;
+};
+
+MCTabs.prototype.displayTab = function(tab_id, panel_id) {
+ var panelElm = document.getElementById(panel_id);
+ var panelContainerElm = panelElm ? panelElm.parentNode : null;
+ var tabElm = document.getElementById(tab_id);
+ var tabContainerElm = tabElm ? tabElm.parentNode : null;
+ var selectionClass = this.getParam('selection_class', 'current');
+
+ if (tabElm && tabContainerElm) {
+ var nodes = tabContainerElm.childNodes;
+
+ // Hide all other tabs
+ for (var i=0; i<nodes.length; i++) {
+ if (nodes[i].nodeName == "LI")
+ nodes[i].className = '';
+ }
+
+ // Show selected tab
+ tabElm.className = 'current';
+ }
+
+ if (panelElm && panelContainerElm) {
+ var nodes = panelContainerElm.childNodes;
+
+ // Hide all other panels
+ for (var i=0; i<nodes.length; i++) {
+ if (nodes[i].nodeName == "DIV")
+ nodes[i].className = 'panel';
+ }
+
+ // Show selected panel
+ panelElm.className = 'current';
+ }
+};
+
+MCTabs.prototype.getAnchor = function() {
+ var pos, url = document.location.href;
+
+ if ((pos = url.lastIndexOf('#')) != -1)
+ return url.substring(pos + 1);
+
+ return "";
+};
+
+// Global instance
+var mcTabs = new MCTabs();
-/**\r
- * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $\r
- *\r
- * Various form validation methods.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-/**\r
- // String validation:\r
-\r
- if (!Validator.isEmail('myemail'))\r
- alert('Invalid email.');\r
-\r
- // Form validation:\r
-\r
- var f = document.forms['myform'];\r
-\r
- if (!Validator.isEmail(f.myemail))\r
- alert('Invalid email.');\r
-*/\r
-\r
-var Validator = {\r
- isEmail : function(s) {\r
- return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');\r
- },\r
-\r
- isAbsUrl : function(s) {\r
- return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');\r
- },\r
-\r
- isSize : function(s) {\r
- return this.test(s, '^[0-9]+(px|%)?$');\r
- },\r
-\r
- isId : function(s) {\r
- return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');\r
- },\r
-\r
- isEmpty : function(s) {\r
- var nl, i;\r
-\r
- if (s.nodeName == 'SELECT' && s.selectedIndex < 1)\r
- return true;\r
-\r
- if (s.type == 'checkbox' && !s.checked)\r
- return true;\r
-\r
- if (s.type == 'radio') {\r
- for (i=0, nl = s.form.elements; i<nl.length; i++) {\r
- if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)\r
- return false;\r
- }\r
-\r
- return true;\r
- }\r
-\r
- return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);\r
- },\r
-\r
- isNumber : function(s, d) {\r
- return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));\r
- },\r
-\r
- test : function(s, p) {\r
- s = s.nodeType == 1 ? s.value : s;\r
-\r
- return s == '' || new RegExp(p).test(s);\r
- }\r
-};\r
-\r
-var AutoValidator = {\r
- settings : {\r
- id_cls : 'id',\r
- int_cls : 'int',\r
- url_cls : 'url',\r
- number_cls : 'number',\r
- email_cls : 'email',\r
- size_cls : 'size',\r
- required_cls : 'required',\r
- invalid_cls : 'invalid',\r
- min_cls : 'min',\r
- max_cls : 'max'\r
- },\r
-\r
- init : function(s) {\r
- var n;\r
-\r
- for (n in s)\r
- this.settings[n] = s[n];\r
- },\r
-\r
- validate : function(f) {\r
- var i, nl, s = this.settings, c = 0;\r
-\r
- nl = this.tags(f, 'label');\r
- for (i=0; i<nl.length; i++)\r
- this.removeClass(nl[i], s.invalid_cls);\r
-\r
- c += this.validateElms(f, 'input');\r
- c += this.validateElms(f, 'select');\r
- c += this.validateElms(f, 'textarea');\r
-\r
- return c == 3;\r
- },\r
-\r
- invalidate : function(n) {\r
- this.mark(n.form, n);\r
- },\r
-\r
- reset : function(e) {\r
- var t = new Array('label', 'input', 'select', 'textarea');\r
- var i, j, nl, s = this.settings;\r
-\r
- if (e == null)\r
- return;\r
-\r
- for (i=0; i<t.length; i++) {\r
- nl = this.tags(e.form ? e.form : e, t[i]);\r
- for (j=0; j<nl.length; j++)\r
- this.removeClass(nl[j], s.invalid_cls);\r
- }\r
- },\r
-\r
- validateElms : function(f, e) {\r
- var nl, i, n, s = this.settings, st = true, va = Validator, v;\r
-\r
- nl = this.tags(f, e);\r
- for (i=0; i<nl.length; i++) {\r
- n = nl[i];\r
-\r
- this.removeClass(n, s.invalid_cls);\r
-\r
- if (this.hasClass(n, s.required_cls) && va.isEmpty(n))\r
- st = this.mark(f, n);\r
-\r
- if (this.hasClass(n, s.number_cls) && !va.isNumber(n))\r
- st = this.mark(f, n);\r
-\r
- if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))\r
- st = this.mark(f, n);\r
-\r
- if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))\r
- st = this.mark(f, n);\r
-\r
- if (this.hasClass(n, s.email_cls) && !va.isEmail(n))\r
- st = this.mark(f, n);\r
-\r
- if (this.hasClass(n, s.size_cls) && !va.isSize(n))\r
- st = this.mark(f, n);\r
-\r
- if (this.hasClass(n, s.id_cls) && !va.isId(n))\r
- st = this.mark(f, n);\r
-\r
- if (this.hasClass(n, s.min_cls, true)) {\r
- v = this.getNum(n, s.min_cls);\r
-\r
- if (isNaN(v) || parseInt(n.value) < parseInt(v))\r
- st = this.mark(f, n);\r
- }\r
-\r
- if (this.hasClass(n, s.max_cls, true)) {\r
- v = this.getNum(n, s.max_cls);\r
-\r
- if (isNaN(v) || parseInt(n.value) > parseInt(v))\r
- st = this.mark(f, n);\r
- }\r
- }\r
-\r
- return st;\r
- },\r
-\r
- hasClass : function(n, c, d) {\r
- return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);\r
- },\r
-\r
- getNum : function(n, c) {\r
- c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];\r
- c = c.replace(/[^0-9]/g, '');\r
-\r
- return c;\r
- },\r
-\r
- addClass : function(n, c, b) {\r
- var o = this.removeClass(n, c);\r
- n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;\r
- },\r
-\r
- removeClass : function(n, c) {\r
- c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');\r
- return n.className = c != ' ' ? c : '';\r
- },\r
-\r
- tags : function(f, s) {\r
- return f.getElementsByTagName(s);\r
- },\r
-\r
- mark : function(f, n) {\r
- var s = this.settings;\r
-\r
- this.addClass(n, s.invalid_cls);\r
- this.markLabels(f, n, s.invalid_cls);\r
-\r
- return false;\r
- },\r
-\r
- markLabels : function(f, n, ic) {\r
- var nl, i;\r
-\r
- nl = this.tags(f, "label");\r
- for (i=0; i<nl.length; i++) {\r
- if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)\r
- this.addClass(nl[i], ic);\r
- }\r
-\r
- return null;\r
- }\r
-};\r
+/**
+ * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $
+ *
+ * Various form validation methods.
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ // String validation:
+
+ if (!Validator.isEmail('myemail'))
+ alert('Invalid email.');
+
+ // Form validation:
+
+ var f = document.forms['myform'];
+
+ if (!Validator.isEmail(f.myemail))
+ alert('Invalid email.');
+*/
+
+var Validator = {
+ isEmail : function(s) {
+ return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
+ },
+
+ isAbsUrl : function(s) {
+ return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
+ },
+
+ isSize : function(s) {
+ return this.test(s, '^[0-9]+(px|%)?$');
+ },
+
+ isId : function(s) {
+ return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
+ },
+
+ isEmpty : function(s) {
+ var nl, i;
+
+ if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
+ return true;
+
+ if (s.type == 'checkbox' && !s.checked)
+ return true;
+
+ if (s.type == 'radio') {
+ for (i=0, nl = s.form.elements; i<nl.length; i++) {
+ if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
+ return false;
+ }
+
+ return true;
+ }
+
+ return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
+ },
+
+ isNumber : function(s, d) {
+ return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
+ },
+
+ test : function(s, p) {
+ s = s.nodeType == 1 ? s.value : s;
+
+ return s == '' || new RegExp(p).test(s);
+ }
+};
+
+var AutoValidator = {
+ settings : {
+ id_cls : 'id',
+ int_cls : 'int',
+ url_cls : 'url',
+ number_cls : 'number',
+ email_cls : 'email',
+ size_cls : 'size',
+ required_cls : 'required',
+ invalid_cls : 'invalid',
+ min_cls : 'min',
+ max_cls : 'max'
+ },
+
+ init : function(s) {
+ var n;
+
+ for (n in s)
+ this.settings[n] = s[n];
+ },
+
+ validate : function(f) {
+ var i, nl, s = this.settings, c = 0;
+
+ nl = this.tags(f, 'label');
+ for (i=0; i<nl.length; i++)
+ this.removeClass(nl[i], s.invalid_cls);
+
+ c += this.validateElms(f, 'input');
+ c += this.validateElms(f, 'select');
+ c += this.validateElms(f, 'textarea');
+
+ return c == 3;
+ },
+
+ invalidate : function(n) {
+ this.mark(n.form, n);
+ },
+
+ reset : function(e) {
+ var t = new Array('label', 'input', 'select', 'textarea');
+ var i, j, nl, s = this.settings;
+
+ if (e == null)
+ return;
+
+ for (i=0; i<t.length; i++) {
+ nl = this.tags(e.form ? e.form : e, t[i]);
+ for (j=0; j<nl.length; j++)
+ this.removeClass(nl[j], s.invalid_cls);
+ }
+ },
+
+ validateElms : function(f, e) {
+ var nl, i, n, s = this.settings, st = true, va = Validator, v;
+
+ nl = this.tags(f, e);
+ for (i=0; i<nl.length; i++) {
+ n = nl[i];
+
+ this.removeClass(n, s.invalid_cls);
+
+ if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.size_cls) && !va.isSize(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.id_cls) && !va.isId(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.min_cls, true)) {
+ v = this.getNum(n, s.min_cls);
+
+ if (isNaN(v) || parseInt(n.value) < parseInt(v))
+ st = this.mark(f, n);
+ }
+
+ if (this.hasClass(n, s.max_cls, true)) {
+ v = this.getNum(n, s.max_cls);
+
+ if (isNaN(v) || parseInt(n.value) > parseInt(v))
+ st = this.mark(f, n);
+ }
+ }
+
+ return st;
+ },
+
+ hasClass : function(n, c, d) {
+ return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
+ },
+
+ getNum : function(n, c) {
+ c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
+ c = c.replace(/[^0-9]/g, '');
+
+ return c;
+ },
+
+ addClass : function(n, c, b) {
+ var o = this.removeClass(n, c);
+ n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
+ },
+
+ removeClass : function(n, c) {
+ c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
+ return n.className = c != ' ' ? c : '';
+ },
+
+ tags : function(f, s) {
+ return f.getElementsByTagName(s);
+ },
+
+ mark : function(f, n) {
+ var s = this.settings;
+
+ this.addClass(n, s.invalid_cls);
+ this.markLabels(f, n, s.invalid_cls);
+
+ return false;
+ },
+
+ markLabels : function(f, n, ic) {
+ var nl, i;
+
+ nl = this.tags(f, "label");
+ for (i=0; i<nl.length; i++) {
+ if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
+ this.addClass(nl[i], ic);
+ }
+
+ return null;
+ }
+};
- Sanity check of $message_set in iil_C_FetchHeaders(), iil_C_FetchHeaderIndex(), iil_C_FetchThreadHeaders()
- Implemented UID FETCH in iil_C_FetchHeaders()
- Abort do-loop on socket errors (fgets returns false)
+ - $ICL_SSL is not boolean anymore but contains the connection schema (ssl or tls)
- Removed some debuggers (echo ...)
********************************************************/
+/**
+ * @todo Possibly clean up more CS.
+ * @todo Try to replace most double-quotes with single-quotes.
+ * @todo Split this file into smaller files.
+ * @todo Refactor code.
+ * @todo Replace echo-debugging (make it adhere to config setting and log)
+ */
// changed path to work within roundcube webmail
-include_once("lib/icl_commons.inc");
+include_once 'lib/icl_commons.inc';
-if (!$IMAP_USE_HEADER_DATE) $IMAP_USE_INTERNAL_DATE = true;
-$IMAP_MONTHS=array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);
-$IMAP_SERVER_TZ = date('Z');
+if (!isset($IMAP_USE_HEADER_DATE) || !$IMAP_USE_HEADER_DATE) {
+ $IMAP_USE_INTERNAL_DATE = true;
+}
+
+/**
+ * @todo Maybe use date() to generate this.
+ */
+$GLOBALS['IMAP_MONTHS'] = array("Jan" => 1, "Feb" => 2, "Mar" => 3, "Apr" => 4,
+ "May" => 5, "Jun" => 6, "Jul" => 7, "Aug" => 8, "Sep" => 9, "Oct" => 10,
+ "Nov" => 11, "Dec" => 12);
+
+$GLOBALS['IMAP_SERVER_TZ'] = date('Z');
$iil_error;
$iil_errornum;
$iil_selected;
-class iilConnection{
+/**
+ * @todo Change class vars to public/private
+ */
+class iilConnection
+{
var $fp;
var $error;
var $errorNum;
var $capability = array();
}
-class iilBasicHeader{
+/**
+ * @todo Change class vars to public/private
+ */
+class iilBasicHeader
+{
var $id;
var $uid;
var $subject;
var $messageID;
var $size;
var $encoding;
+ var $charset;
var $ctype;
var $flags;
var $timestamp;
var $f;
- var $seen;
- var $deleted;
- var $recent;
- var $answered;
- var $junk;
var $internaldate;
- var $is_reply;
-}
-
-
-class iilThreadHeader{
+ var $references;
+ var $priority;
+ var $mdn_to;
+ var $mdn_sent = false;
+ var $is_reply = false;
+ var $seen = false;
+ var $deleted = false;
+ var $recent = false;
+ var $answered = false;
+ var $junk = false;
+}
+
+/**
+ * @todo Change class vars to public/private
+ */
+class iilThreadHeader
+{
var $id;
var $sbj;
var $irt;
}
-function iil_xor($string, $string2){
- $result = "";
+function iil_xor($string, $string2) {
+ $result = '';
$size = strlen($string);
- for ($i=0; $i<$size; $i++) $result .= chr(ord($string[$i]) ^ ord($string2[$i]));
-
+ for ($i=0; $i<$size; $i++) {
+ $result .= chr(ord($string[$i]) ^ ord($string2[$i]));
+ }
return $result;
}
-function iil_ReadLine($fp, $size){
- $line="";
- if ($fp){
- do{
+function iil_ReadLine($fp, $size) {
+ $line = '';
+ if ($fp) {
+ do {
+ // FIXME: hardcode size?
$buffer = fgets($fp, 2048);
- if ($buffer === false)
+ if ($buffer === false) {
break;
- $line.=$buffer;
- }while($buffer[strlen($buffer)-1]!="\n");
+ }
+ $line .= $buffer;
+ } while ($buffer[strlen($buffer)-1]!="\n");
}
return $line;
}
-function iil_MultLine($fp, $line){
+function iil_MultLine($fp, $line) {
$line = chop($line);
- if (ereg('\{[0-9]+\}$', $line)){
- $out = "";
+ if (ereg('\{[0-9]+\}$', $line)) {
+ $out = '';
+
preg_match_all('/(.*)\{([0-9]+)\}$/', $line, $a);
$bytes = $a[2][0];
- while(strlen($out)<$bytes){
- $out.=chop(iil_ReadLine($fp, 1024));
+ while (strlen($out) < $bytes) {
+ $line = iil_ReadLine($fp, 1024);
+ $out .= chop($line);
}
- $line = $a[1][0]."\"$out\"";
+ $line = $a[1][0] . "\"$out\"";
}
return $line;
}
-function iil_ReadBytes($fp, $bytes){
- $data = "";
- $len = 0;
- do{
+function iil_ReadBytes($fp, $bytes) {
+ $data = '';
+ $len = 0;
+ do {
$data.=fread($fp, $bytes-$len);
$len = strlen($data);
- }while($len<$bytes);
+ } while ($len<$bytes);
return $data;
}
-function iil_ReadReply($fp){
- do{
+function iil_ReadReply($fp) {
+ do {
$line = chop(trim(iil_ReadLine($fp, 1024)));
- }while($line[0]=="*");
+ } while ($line[0] == '*');
return $line;
}
-function iil_ParseResult($string){
- $a=explode(" ", $string);
- if (count($a) > 2){
- if (strcasecmp($a[1], "OK")==0) return 0;
- else if (strcasecmp($a[1], "NO")==0) return -1;
- else if (strcasecmp($a[1], "BAD")==0) return -2;
- }else return -3;
+function iil_ParseResult($string) {
+ $a=explode(' ', $string);
+ if (count($a) > 2) {
+ if (strcasecmp($a[1], 'OK') == 0) {
+ return 0;
+ } else if (strcasecmp($a[1], 'NO') == 0) {
+ return -1;
+ } else if (strcasecmp($a[1], 'BAD') == 0) {
+ return -2;
+ }
+ }
+ return -3;
}
// check if $string starts with $match
-function iil_StartsWith($string, $match){
+function iil_StartsWith($string, $match) {
$len = strlen($match);
- if ($len==0) return false;
- if (strncmp($string, $match, $len)==0) return true;
- else return false;
+ if ($len == 0) {
+ return false;
+ }
+ if (strncmp($string, $match, $len) == 0) {
+ return true;
+ }
+ return false;
}
-function iil_StartsWithI($string, $match){
+function iil_StartsWithI($string, $match) {
$len = strlen($match);
- if ($len==0) return false;
- if (strncasecmp($string, $match, $len)==0) return true;
- else return false;
+ if ($len == 0) {
+ return false;
+ }
+ if (strncasecmp($string, $match, $len) == 0) {
+ return true;
+ }
+ return false;
}
-function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge){
+function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge) {
+
+ $ipad = '';
+ $opad = '';
// initialize ipad, opad
- for ($i=0;$i<64;$i++){
- $ipad.=chr(0x36);
- $opad.=chr(0x5C);
+ for ($i=0;$i<64;$i++) {
+ $ipad .= chr(0x36);
+ $opad .= chr(0x5C);
}
// pad $pass so it's 64 bytes
$padLen = 64 - strlen($pass);
- for ($i=0;$i<$padLen;$i++) $pass .= chr(0);
+ for ($i=0;$i<$padLen;$i++) {
+ $pass .= chr(0);
+ }
+
// generate hash
- $hash = md5(iil_xor($pass,$opad).pack("H*",md5(iil_xor($pass, $ipad).base64_decode($encChallenge))));
+ $hash = iil_xor($pass,$opad);
+ $hash .= pack("H*", md5(iil_xor($pass, $ipad) . base64_decode($encChallenge)));
+ $hash = md5($hash);
+
// generate reply
- $reply = base64_encode($user." ".$hash);
+ $reply = base64_encode('"' . $user . '" "' . $hash . '"');
// send result, get reply
- fputs($conn->fp, $reply."\r\n");
+ fputs($conn->fp, $reply . "\r\n");
$line = iil_ReadLine($conn->fp, 1024);
// process result
- if (iil_ParseResult($line)==0){
- $conn->error .= "";
- $conn->errorNum = 0;
+ if (iil_ParseResult($line) == 0) {
+ $conn->error .= '';
+ $conn->errorNum = 0;
return $conn->fp;
- }else{
- $conn->error .= 'Authentication for '.$user.' failed (AUTH): "'.htmlspecialchars($line)."\"";
- $conn->errorNum = -2;
- return false;
}
+ $conn->error .= 'Authentication for ' . $user . ' failed (AUTH): "';
+ $conn->error .= htmlspecialchars($line) . '"';
+ $conn->errorNum = -2;
+ return false;
}
-function iil_C_Login(&$conn, $user, $password){
+function iil_C_Login(&$conn, $user, $password) {
$password = strtr($password, array('"'=>'\\"', '\\' => '\\\\'));
fputs($conn->fp, "a001 LOGIN $user \"$password\"\r\n");
- do{
- $line = iil_ReadReply($conn->fp);
- if ($line === false)
- break;
- }while(!iil_StartsWith($line, "a001 "));
- $a=explode(" ", $line);
- if (strcmp($a[1],"OK")==0){
- $result=$conn->fp;
- $conn->error.="";
- $conn->errorNum = 0;
- }else{
- $result=false;
- fclose($conn->fp);
- $conn->error .= 'Authentication for '.$user.' failed (LOGIN): "'.htmlspecialchars($line)."\"";
- $conn->errorNum = -2;
+ do {
+ $line = iil_ReadReply($conn->fp);
+ if ($line === false) {
+ break;
+ }
+ } while (!iil_StartsWith($line, "a001 "));
+ $a = explode(' ', $line);
+ if (strcmp($a[1], 'OK') == 0) {
+ $result = $conn->fp;
+ $conn->error .= '';
+ $conn->errorNum = 0;
+ return $result;
}
+ $result = false;
+ fclose($conn->fp);
+
+ $conn->error .= 'Authentication for ' . $user . ' failed (LOGIN): "';
+ $conn->error .= htmlspecialchars($line)."\"";
+ $conn->errorNum = -2;
+
return $result;
}
-function iil_ParseNamespace2($str, &$i, $len=0, $l){
- if (!$l) $str = str_replace("NIL", "()", $str);
- if (!$len) $len = strlen($str);
- $data = array();
+function iil_ParseNamespace2($str, &$i, $len=0, $l) {
+ if (!$l) {
+ $str = str_replace('NIL', '()', $str);
+ }
+ if (!$len) {
+ $len = strlen($str);
+ }
+ $data = array();
$in_quotes = false;
- $elem = 0;
- for($i;$i<$len;$i++){
+ $elem = 0;
+ for ($i;$i<$len;$i++) {
$c = (string)$str[$i];
- if ($c=='(' && !$in_quotes){
+ if ($c == '(' && !$in_quotes) {
$i++;
$data[$elem] = iil_ParseNamespace2($str, $i, $len, $l++);
$elem++;
- }else if ($c==')' && !$in_quotes) return $data;
- else if ($c=="\\"){
+ } else if ($c == ')' && !$in_quotes) {
+ return $data;
+ } else if ($c == '\\') {
$i++;
- if ($in_quotes) $data[$elem].=$c.$str[$i];
- }else if ($c=='"'){
+ if ($in_quotes) {
+ $data[$elem] .= $c.$str[$i];
+ }
+ } else if ($c == '"') {
$in_quotes = !$in_quotes;
- if (!$in_quotes) $elem++;
- }else if ($in_quotes){
+ if (!$in_quotes) {
+ $elem++;
+ }
+ } else if ($in_quotes) {
$data[$elem].=$c;
}
}
return $data;
}
-function iil_C_NameSpace(&$conn){
+function iil_C_NameSpace(&$conn) {
global $my_prefs;
- if (!in_array('NAMESPACE', $conn->capability))
- return false;
-
- if ($my_prefs["rootdir"]) return true;
-
+ if (!in_array('NAMESPACE', $conn->capability)) {
+ return false;
+ }
+
+ if ($my_prefs["rootdir"]) {
+ return true;
+ }
+
fputs($conn->fp, "ns1 NAMESPACE\r\n");
- do{
+ do {
$line = iil_ReadLine($conn->fp, 1024);
- if (iil_StartsWith($line, "* NAMESPACE")){
- $i = 0;
+ if (iil_StartsWith($line, '* NAMESPACE')) {
+ $i = 0;
$data = iil_ParseNamespace2(substr($line,11), $i, 0, 0);
}
- }while(!iil_StartsWith($line, "ns1"));
-
- if (!is_array($data)) return false;
+ } while (!iil_StartsWith($line, "ns1"));
+ if (!is_array($data)) {
+ return false;
+ }
+
$user_space_data = $data[0];
- if (!is_array($user_space_data)) return false;
-
+ if (!is_array($user_space_data)) {
+ return false;
+ }
+
$first_userspace = $user_space_data[0];
- if (count($first_userspace)!=2) return false;
-
- $conn->rootdir = $first_userspace[0];
- $conn->delimiter = $first_userspace[1];
+ if (count($first_userspace)!=2) {
+ return false;
+ }
+
+ $conn->rootdir = $first_userspace[0];
+ $conn->delimiter = $first_userspace[1];
$my_prefs["rootdir"] = substr($conn->rootdir, 0, -1);
return true;
}
-function iil_Connect($host, $user, $password){
+function iil_Connect($host, $user, $password) {
global $iil_error, $iil_errornum;
global $ICL_SSL, $ICL_PORT;
global $IMAP_NO_CACHE;
global $my_prefs, $IMAP_USE_INTERNAL_DATE;
- $iil_error = "";
+ $iil_error = '';
$iil_errornum = 0;
//strip slashes
// $password = stripslashes($password);
//set auth method
- $auth_method = "plain";
- if (func_num_args() >= 4){
+ $auth_method = 'plain';
+ if (func_num_args() >= 4) {
$auth_array = func_get_arg(3);
- if (is_array($auth_array)) $auth_method = $auth_array["imap"];
- if (empty($auth_method)) $auth_method = "plain";
+ if (is_array($auth_array)) {
+ $auth_method = $auth_array['imap'];
+ }
+ if (empty($auth_method)) {
+ $auth_method = "plain";
+ }
}
$message = "INITIAL: $auth_method\n";
$result = false;
//initialize connection
- $conn = new iilConnection;
- $conn->error="";
- $conn->errorNum=0;
- $conn->selected="";
- $conn->user = $user;
- $conn->host = $host;
- $conn->cache = array();
- $conn->do_cache = (function_exists("cache_write")&&!$IMAP_NO_CACHE);
+ $conn = new iilConnection;
+ $conn->error = '';
+ $conn->errorNum = 0;
+ $conn->selected = '';
+ $conn->user = $user;
+ $conn->host = $host;
+ $conn->cache = array();
+ $conn->do_cache = (function_exists("cache_write")&&!$IMAP_NO_CACHE);
$conn->cache_dirty = array();
- if ($my_prefs['sort_field']=='INTERNALDATE') $IMAP_USE_INTERNAL_DATE = true;
- else if ($my_prefs['sort_field']=='DATE') $IMAP_USE_INTERNAL_DATE = false;
+ if ($my_prefs['sort_field'] == 'INTERNALDATE') {
+ $IMAP_USE_INTERNAL_DATE = true;
+ } else if ($my_prefs['sort_field'] == 'DATE') {
+ $IMAP_USE_INTERNAL_DATE = false;
+ }
//echo '<!-- conn sort_field: '.$my_prefs['sort_field'].' //-->';
//check input
- if (empty($host)) $iil_error .= "Invalid host\n";
- if (empty($user)) $iil_error .= "Invalid user\n";
- if (empty($password)) $iil_error .= "Invalid password\n";
- if (!empty($iil_error)) return false;
- if (!$ICL_PORT) $ICL_PORT = 143;
-
+ if (empty($host)) {
+ $iil_error .= "Invalid host\n";
+ }
+ if (empty($user)) {
+ $iil_error .= "Invalid user\n";
+ }
+ if (empty($password)) {
+ $iil_error .= "Invalid password\n";
+ }
+ if (!empty($iil_error)) {
+ return false;
+ }
+ if (!$ICL_PORT) {
+ $ICL_PORT = 143;
+ }
+
//check for SSL
- if ($ICL_SSL){
- $host = "ssl://".$host;
+ if ($ICL_SSL) {
+ $host = $ICL_SSL . '://' . $host;
}
//open socket connection
- $conn->fp = @fsockopen($host, $ICL_PORT, $errno, $errstr, 10);
- if (!$conn->fp){
- $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr";
+ $conn->fp = fsockopen($host, $ICL_PORT, $errno, $errstr, 10);
+ if (!$conn->fp) {
+ $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr";
$iil_errornum = -1;
return false;
}
- $iil_error.="Socket connection established\r\n";
- $line=iil_ReadLine($conn->fp, 300);
+ $iil_error .= "Socket connection established\r\n";
+ $line = iil_ReadLine($conn->fp, 300);
- if (strcasecmp($auth_method, "check")==0){
+ if (strcasecmp($auth_method, "check") == 0) {
//check for supported auth methods
//default to plain text auth
- $auth_method = "plain";
+ $auth_method = 'plain';
//check for CRAM-MD5
fputs($conn->fp, "cp01 CAPABILITY\r\n");
- do{
- $line = trim(chop(iil_ReadLine($conn->fp, 100)));
- $conn->message.="$line\n";
- $a = explode(" ", $line);
- if ($line[0]=="*"){
- while ( list($k, $w) = each($a) ){
- if ($w!='*' && $w!='CAPABILITY')
+ do {
+ $line = trim(chop(iil_ReadLine($conn->fp, 100)));
+
+ $conn->message .= "$line\n";
+
+ $a = explode(' ', $line);
+ if ($line[0] == '*') {
+ while (list($k, $w) = each($a)) {
+ if ($w != '*' && $w != 'CAPABILITY') {
$conn->capability[] = $w;
- if ((strcasecmp($w, "AUTH=CRAM_MD5")==0)||
- (strcasecmp($w, "AUTH=CRAM-MD5")==0)){
- $auth_method = "auth";
- }
+ }
+ if ((strcasecmp($w, "AUTH=CRAM_MD5") == 0)||
+ (strcasecmp($w, "AUTH=CRAM-MD5") == 0)) {
+ $auth_method = "auth";
+ }
}
}
- }while($a[0]!="cp01");
+ } while ($a[0] != 'cp01');
}
- if (strcasecmp($auth_method, "auth")==0){
- $conn->message.="Trying CRAM-MD5\n";
+ if (strcasecmp($auth_method, 'auth') == 0) {
+ $conn->message .= "Trying CRAM-MD5\n";
+
//do CRAM-MD5 authentication
fputs($conn->fp, "a000 AUTHENTICATE CRAM-MD5\r\n");
$line = trim(chop(iil_ReadLine($conn->fp, 1024)));
- $conn->message.="$line\n";
- if ($line[0]=="+"){
- $conn->message.='Got challenge: '.htmlspecialchars($line)."\n";
+
+ $conn->message .= "$line\n";
+
+ if ($line[0] == '+') {
+ $conn->message .= 'Got challenge: ' . htmlspecialchars($line) . "\n";
+
//got a challenge string, try CRAM-5
$result = iil_C_Authenticate($conn, $user, $password, substr($line,2));
- $conn->message.= "Tried CRAM-MD5: $result \n";
- }else{
- $conn->message.='No challenge ('.htmlspecialchars($line)."), try plain\n";
- $auth = "plain";
+
+ $conn->message .= "Tried CRAM-MD5: $result \n";
+ } else {
+ $conn->message .='No challenge ('.htmlspecialchars($line)."), try plain\n";
+
+ $auth = 'plain';
}
}
- if ((!$result)||(strcasecmp($auth, "plain")==0)){
+ if ((!$result)||(strcasecmp($auth, "plain") == 0)) {
//do plain text auth
$result = iil_C_Login($conn, $user, $password);
$conn->message.="Tried PLAIN: $result \n";
$conn->message .= $auth;
- if ($result){
+ if ($result) {
iil_C_Namespace($conn);
return $conn;
- }else{
+ } else {
$iil_error = $conn->error;
$iil_errornum = $conn->errorNum;
return false;
}
}
-function iil_Close(&$conn){
+function iil_Close(&$conn) {
iil_C_WriteCache($conn);
- if (@fputs($conn->fp, "I LOGOUT\r\n")){
+ if (fputs($conn->fp, "I LOGOUT\r\n")) {
fgets($conn->fp, 1024);
fclose($conn->fp);
$conn->fp = false;
}
}
-function iil_ClearCache($user, $host){
+function iil_ClearCache($user, $host) {
}
-function iil_C_WriteCache(&$conn){
+function iil_C_WriteCache(&$conn) {
//echo "<!-- doing iil_C_WriteCache //-->\n";
if (!$conn->do_cache) return false;
- if (is_array($conn->cache)){
- while(list($folder,$data)=each($conn->cache)){
- if ($folder && is_array($data) && $conn->cache_dirty[$folder]){
+ if (is_array($conn->cache)) {
+ while (list($folder,$data)=each($conn->cache)) {
+ if ($folder && is_array($data) && $conn->cache_dirty[$folder]) {
$key = $folder.".imap";
$result = cache_write($conn->user, $conn->host, $key, $data, true);
//echo "<!-- writing $key $data: $result //-->\n";
}
}
-function iil_C_EnableCache(&$conn){
+function iil_C_EnableCache(&$conn) {
$conn->do_cache = true;
}
-function iil_C_DisableCache(&$conn){
+function iil_C_DisableCache(&$conn) {
$conn->do_cache = false;
}
-function iil_C_LoadCache(&$conn, $folder){
- if (!$conn->do_cache) return false;
-
- $key = $folder.".imap";
- if (!is_array($conn->cache[$folder])){
- $conn->cache[$folder] = cache_read($conn->user, $conn->host, $key);
+function iil_C_LoadCache(&$conn, $folder) {
+ if (!$conn->do_cache) {
+ return false;
+ }
+
+ $key = $folder.'.imap';
+ if (!is_array($conn->cache[$folder])) {
+ $conn->cache[$folder] = cache_read($conn->user, $conn->host, $key);
$conn->cache_dirty[$folder] = false;
}
}
-function iil_C_ExpireCachedItems(&$conn, $folder, $message_set){
+function iil_C_ExpireCachedItems(&$conn, $folder, $message_set) {
- if (!$conn->do_cache) return; //caching disabled
- if (!is_array($conn->cache[$folder])) return; //cache not initialized|empty
- if (count($conn->cache[$folder])==0) return; //cache not initialized|empty
-
- $uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, "UID");
+ if (!$conn->do_cache) {
+ return; //caching disabled
+ }
+ if (!is_array($conn->cache[$folder])) {
+ return; //cache not initialized|empty
+ }
+ if (count($conn->cache[$folder]) == 0) {
+ return; //cache not initialized|empty
+ }
+
+ $uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, 'UID');
$num_removed = 0;
- if (is_array($uids)){
+ if (is_array($uids)) {
//echo "<!-- unsetting: ".implode(",",$uids)." //-->\n";
- while(list($n,$uid)=each($uids)){
+ while (list($n,$uid)=each($uids)) {
unset($conn->cache[$folder][$uid]);
//$conn->cache[$folder][$uid] = false;
//$num_removed++;
//echo '<!--'."\n";
//print_r($conn->cache);
//echo "\n".'//-->'."\n";
- }else{
+ } else {
echo "<!-- failed to get uids: $message_set //-->\n";
}
/*
- if ($num_removed>0){
+ if ($num_removed>0) {
$new_cache;
reset($conn->cache[$folder]);
- while(list($uid,$item)=each($conn->cache[$folder])){
+ while (list($uid,$item)=each($conn->cache[$folder])) {
if ($item) $new_cache[$uid] = $conn->cache[$folder][$uid];
}
$conn->cache[$folder] = $new_cache;
*/
}
-function iil_ExplodeQuotedString($delimiter, $string){
- $quotes=explode("\"", $string);
- while ( list($key, $val) = each($quotes))
- if (($key % 2) == 1)
+function iil_ExplodeQuotedString($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);
+ }
+ }
+ $string=implode('"', $quotes);
$result=explode($delimiter, $string);
- while ( list($key, $val) = each($result) )
- $result[$key] = str_replace("_!@!_", $delimiter, $result[$key]);
-
+ while ( list($key, $val) = each($result) ) {
+ $result[$key] = str_replace('_!@!_', $delimiter, $result[$key]);
+ }
+
return $result;
}
-function iil_CheckForRecent($host, $user, $password, $mailbox){
- if (empty($mailbox)) $mailbox="INBOX";
-
- $conn=iil_Connect($host, $user, $password, "plain");
- $fp = $conn->fp;
- if ($fp){
+function iil_CheckForRecent($host, $user, $password, $mailbox) {
+ if (empty($mailbox)) {
+ $mailbox = 'INBOX';
+ }
+
+ $conn = iil_Connect($host, $user, $password, 'plain');
+ $fp = $conn->fp;
+ if ($fp) {
fputs($fp, "a002 EXAMINE \"$mailbox\"\r\n");
- do{
+ do {
$line=chop(iil_ReadLine($fp, 300));
- $a=explode(" ", $line);
- if (($a[0]=="*") && (strcasecmp($a[2], "RECENT")==0)) $result=(int)$a[1];
- }while (!iil_StartsWith($a[0],"a002"));
+ $a=explode(' ', $line);
+ if (($a[0] == '*') && (strcasecmp($a[2], 'RECENT') == 0)) {
+ $result = (int) $a[1];
+ }
+ } while (!iil_StartsWith($a[0], 'a002'));
fputs($fp, "a003 LOGOUT\r\n");
fclose($fp);
- }else $result=-2;
-
+ } else {
+ $result = -2;
+ }
+
return $result;
}
-function iil_C_Select(&$conn, $mailbox){
+function iil_C_Select(&$conn, $mailbox) {
$fp = $conn->fp;
- if (empty($mailbox)) return false;
- if (strcmp($conn->selected, $mailbox)==0) return true;
-
+ if (empty($mailbox)) {
+ return false;
+ }
+ if (strcmp($conn->selected, $mailbox) == 0) {
+ return true;
+ }
+
iil_C_LoadCache($conn, $mailbox);
- if (fputs($fp, "sel1 SELECT \"$mailbox\"\r\n")){
- do{
+ if (fputs($fp, "sel1 SELECT \"$mailbox\"\r\n")) {
+ do {
$line=chop(iil_ReadLine($fp, 300));
- $a=explode(" ", $line);
- if (count($a) == 3){
- if (strcasecmp($a[2], "EXISTS")==0) $conn->exists=(int)$a[1];
- if (strcasecmp($a[2], "RECENT")==0) $conn->recent=(int)$a[1];
+ $a=explode(' ', $line);
+ if (count($a) == 3) {
+ if (strcasecmp($a[2], 'EXISTS') == 0) {
+ $conn->exists = (int) $a[1];
+ }
+ if (strcasecmp($a[2], 'RECENT') == 0) {
+ $conn->recent = (int) $a[1];
+ }
}
- }while (!iil_StartsWith($line, "sel1"));
+ } while (!iil_StartsWith($line, 'sel1'));
- $a=explode(" ", $line);
+ $a=explode(' ', $line);
- if (strcasecmp($a[1],"OK")==0){
+ if (strcasecmp($a[1], 'OK') == 0) {
$conn->selected = $mailbox;
return true;
- }else return false;
- }else{
- return false;
+ }
}
+ return false;
}
-function iil_C_CheckForRecent(&$conn, $mailbox){
- if (empty($mailbox)) $mailbox="INBOX";
-
+function iil_C_CheckForRecent(&$conn, $mailbox) {
+ if (empty($mailbox)) {
+ $mailbox = 'INBOX';
+ }
+
iil_C_Select($conn, $mailbox);
- if ($conn->selected==$mailbox) return $conn->recent;
- else return false;
+ if ($conn->selected == $mailbox) {
+ return $conn->recent;
+ }
+ return false;
}
-function iil_C_CountMessages(&$conn, $mailbox, $refresh=false){
- if ($refresh) $conn->selected="";
+function iil_C_CountMessages(&$conn, $mailbox, $refresh = false) {
+ if ($refresh) {
+ $conn->selected= '';
+ }
iil_C_Select($conn, $mailbox);
- if ($conn->selected==$mailbox) return $conn->exists;
- else return false;
+ if ($conn->selected == $mailbox) {
+ return $conn->exists;
+ }
+ return false;
}
-function iil_SplitHeaderLine($string){
- $pos=strpos($string, ":");
- if ($pos>0){
- $res[0]=substr($string, 0, $pos);
- $res[1]=trim(substr($string, $pos+1));
+function iil_SplitHeaderLine($string) {
+ $pos=strpos($string, ':');
+ if ($pos>0) {
+ $res[0] = substr($string, 0, $pos);
+ $res[1] = trim(substr($string, $pos+1));
return $res;
- }else{
- return $string;
}
+ return $string;
}
-function iil_StrToTime($str){
- global $IMAP_MONTHS,$IMAP_SERVER_TZ;
+function iil_StrToTime($str) {
+ $IMAP_MONTHS = $GLOBALS['IMAP_MONTHS'];
+ $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR'];
- if ($str) $time1 = strtotime($str);
- if ($time1 && $time1!=-1) return $time1-$IMAP_SERVER_TZ;
-
+ if ($str) {
+ $time1 = strtotime($str);
+ }
+ if ($time1 && $time1 != -1) {
+ return $time1-$IMAP_SERVER_TZ;
+ }
//echo '<!--'.$str.'//-->';
//replace double spaces with single space
$str = trim($str);
- $str = str_replace(" ", " ", $str);
+ $str = str_replace(' ', ' ', $str);
//strip off day of week
- $pos=strpos($str, " ");
- if (!is_numeric(substr($str, 0, $pos))) $str = substr($str, $pos+1);
-
+ $pos = strpos($str, ' ');
+ if (!is_numeric(substr($str, 0, $pos))) {
+ $str = substr($str, $pos+1);
+ }
//explode, take good parts
- $a=explode(" ",$str);
- //$month_a=array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);
- $month_str=$a[1];
- $month=$IMAP_MONTHS[$month_str];
- $day=(int)$a[0];
- $year=(int)$a[2];
- $time=$a[3];
- $tz_str = $a[4];
- $tz = substr($tz_str, 0, 3);
- $ta = explode(":",$time);
- $hour=(int)$ta[0]-(int)$tz;
- $minute=(int)$ta[1];
- $second=(int)$ta[2];
+ $a = explode(' ', $str);
+
+ $month_str = $a[1];
+ $month = $IMAP_MONTHS[$month_str];
+ $day = (int)$a[0];
+ $year = (int)$a[2];
+ $time = $a[3];
+ $tz_str = $a[4];
+ $tz = substr($tz_str, 0, 3);
+ $ta = explode(':', $time);
+ $hour = (int)$ta[0]-(int)$tz;
+ $minute = (int)$ta[1];
+ $second = (int)$ta[2];
//make UNIX timestamp
$time2 = mktime($hour, $minute, $second, $month, $day, $year);
return $time2;
}
-function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE, $encoding='US-ASCII'){
+function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
+ $encoding = 'US-ASCII') {
/* Do "SELECT" command */
- if (!iil_C_Select($conn, $mailbox)) return false;
-
+ if (!iil_C_Select($conn, $mailbox)) {
+ return false;
+ }
$field = strtoupper($field);
- if ($field=='INTERNALDATE') $field='ARRIVAL';
- $fields = array('ARRIVAL'=>1,'CC'=>1,'DATE'=>1,'FROM'=>1,'SIZE'=>1,'SUBJECT'=>1,'TO'=>1);
-
- if (!$fields[$field])
- return false;
+ if ($field == 'INTERNALDATE') {
+ $field = 'ARRIVAL';
+ }
+ $fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1,
+ 'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1);
+ if (!$fields[$field]) {
+ return false;
+ }
+
$is_uid = $is_uid ? 'UID ' : '';
- if (!empty($add))
- $add = " $add";
+ if (!empty($add)) {
+ $add = " $add";
+ }
- $fp = $conn->fp;
- $command = 's '. $is_uid .'SORT ('.$field.') '.$encoding.' ALL'."$add\r\n";
- $line = $data = '';
+ $fp = $conn->fp;
+ $command = 's ' . $is_uid . 'SORT (' . $field . ') ';
+ $command .= $encoding . ' ALL' . "$add\r\n";
+ $line = $data = '';
- if (!fputs($fp, $command)) return false;
- do{
+ if (!fputs($fp, $command)) {
+ return false;
+ }
+ do {
$line = chop(iil_ReadLine($fp, 1024));
- if (iil_StartsWith($line, '* SORT')) $data.=($data?' ':'').substr($line,7);
- }while($line[0]!='s');
+ if (iil_StartsWith($line, '* SORT')) {
+ $data .= ($data?' ':'') . substr($line, 7);
+ }
+ } while ($line[0]!='s');
- if (empty($data)){
+ if (empty($data)) {
$conn->error = $line;
return false;
}
return $out;
}
-function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field, $normalize=true){
+function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field,
+ $normalize=true) {
global $IMAP_USE_INTERNAL_DATE;
$c=0;
$result=array();
$fp = $conn->fp;
- if (empty($index_field)) $index_field="DATE";
+ if (empty($index_field)) {
+ $index_field = 'DATE';
+ }
$index_field = strtoupper($index_field);
list($from_idx, $to_idx) = explode(':', $message_set);
- if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ if (empty($message_set) || (isset($to_idx)
+ && (int)$from_idx > (int)$to_idx)) {
return false;
+ }
- //$fields_a["DATE"] = ($IMAP_USE_INTERNAL_DATE?6:1);
- $fields_a['DATE'] = 1;
+ //$fields_a['DATE'] = ($IMAP_USE_INTERNAL_DATE?6:1);
+ $fields_a['DATE'] = 1;
$fields_a['INTERNALDATE'] = 6;
- $fields_a['FROM'] = 1;
- $fields_a['REPLY-TO'] = 1;
- $fields_a['SENDER'] = 1;
- $fields_a['TO'] = 1;
- $fields_a['SUBJECT'] = 1;
- $fields_a['UID'] = 2;
- $fields_a['SIZE'] = 2;
- $fields_a['SEEN'] = 3;
- $fields_a['RECENT'] = 4;
- $fields_a['DELETED'] = 5;
+ $fields_a['FROM'] = 1;
+ $fields_a['REPLY-TO'] = 1;
+ $fields_a['SENDER'] = 1;
+ $fields_a['TO'] = 1;
+ $fields_a['SUBJECT'] = 1;
+ $fields_a['UID'] = 2;
+ $fields_a['SIZE'] = 2;
+ $fields_a['SEEN'] = 3;
+ $fields_a['RECENT'] = 4;
+ $fields_a['DELETED'] = 5;
$mode=$fields_a[$index_field];
- if (!($mode > 0)) return false;
-
+ if (!($mode > 0)) {
+ return false;
+ }
+
/* Do "SELECT" command */
- if (!iil_C_Select($conn, $mailbox)) return false;
-
+ if (!iil_C_Select($conn, $mailbox)) {
+ return false;
+ }
+
/* FETCH date,from,subject headers */
- if ($mode==1){
- $key="fhi".($c++);
- $request=$key." FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])\r\n";
- if (!fputs($fp, $request)) return false;
- do{
+ if ($mode == 1) {
+ $key = 'fhi' . ($c++);
+ $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])\r\n";
+ if (!fputs($fp, $request)) {
+ return false;
+ }
+ do {
$line=chop(iil_ReadLine($fp, 200));
- $a=explode(" ", $line);
- if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[strlen($line)-1]!=")")){
+ $a=explode(' ', $line);
+ if (($line[0] == '*') && ($a[2] == 'FETCH')
+ && ($line[strlen($line)-1] != ')')) {
$id=$a[1];
$str=$line=chop(iil_ReadLine($fp, 300));
- while($line[0]!=")"){ //caution, this line works only in this particular case
+ while ($line[0] != ')') { //caution, this line works only in this particular case
$line=chop(iil_ReadLine($fp, 300));
- if ($line[0]!=")"){
- if (ord($line[0]) <= 32){ //continuation from previous header line
- $str.=" ".trim($line);
+ if ($line[0] != ')') {
+ if (ord($line[0]) <= 32) { //continuation from previous header line
+ $str.= ' ' . trim($line);
}
- if ((ord($line[0]) > 32) || (strlen($line[0]) == 0)){
+ if ((ord($line[0]) > 32) || (strlen($line[0]) == 0)) {
list($field, $string) = iil_SplitHeaderLine($str);
- if (strcasecmp($field, "date")==0){
- $result[$id]=iil_StrToTime($string);
- }else{
- $result[$id] = str_replace("\"", "", $string);
- if ($normalize) $result[$id]=strtoupper($result[$id]);
+ if (strcasecmp($field, 'date') == 0) {
+ $result[$id] = iil_StrToTime($string);
+ } else {
+ $result[$id] = str_replace('"', '', $string);
+ if ($normalize) {
+ $result[$id] = strtoupper($result[$id]);
+ }
}
$str=$line;
}
}
/*
$end_pos = strlen($line)-1;
- if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[$end_pos]=="}")){
+ if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[$end_pos]=="}")) {
$id = $a[1];
$pos = strrpos($line, "{")+1;
$bytes = (int)substr($line, $pos, $end_pos-$pos);
$received = 0;
- do{
- $line = iil_ReadLine($fp, 0);
- $received+=strlen($line);
- $line = chop($line);
-
- if ($received>$bytes) break;
- else if (!$line) continue;
+ do {
+ $line = iil_ReadLine($fp, 0);
+ $received += strlen($line);
+ $line = chop($line);
- list($field,$string)=explode(": ", $line);
+ if ($received>$bytes) {
+ break;
+ } else if (!$line) {
+ continue;
+ }
+
+ list($field, $string) = explode(': ', $line);
- if (strcasecmp($field, "date")==0)
+ if (strcasecmp($field, 'date') == 0) {
$result[$id] = iil_StrToTime($string);
- else if ($index_field!="DATE")
- $result[$id]=strtoupper(str_replace("\"", "", $string));
- }while($line[0]!=")");
- }else{
+ } else if ($index_field != 'DATE') {
+ $result[$id]=strtoupper(str_replace('"', '', $string));
+ }
+ } while ($line[0] != ')');
+ } else {
//one line response, not expected so ignore
}
*/
- }while(!iil_StartsWith($line, $key));
- }else if ($mode==6){
- $key="fhi".($c++);
- $request = $key." FETCH $message_set (INTERNALDATE)\r\n";
- if (!fputs($fp, $request)) return false;
- do{
+ } while (!iil_StartsWith($line, $key));
+
+ }else if ($mode == 6) {
+
+ $key = 'fhi' . ($c++);
+ $request = $key . " FETCH $message_set (INTERNALDATE)\r\n";
+ if (!fputs($fp, $request)) {
+ return false;
+ }
+ do {
$line=chop(iil_ReadLine($fp, 200));
- if ($line[0]=="*"){
- //original: "* 10 FETCH (INTERNALDATE "31-Jul-2002 09:18:02 -0500")"
- $paren_pos = strpos($line, "(");
- $foo = substr($line, 0, $paren_pos);
- $a = explode(" ", $foo);
- $id = $a[1];
+ if ($line[0] == '*') {
+ /*
+ * original:
+ * "* 10 FETCH (INTERNALDATE "31-Jul-2002 09:18:02 -0500")"
+ */
+ $paren_pos = strpos($line, '(');
+ $foo = substr($line, 0, $paren_pos);
+ $a = explode(' ', $foo);
+ $id = $a[1];
- $open_pos = strpos($line, "\"") + 1;
- $close_pos = strrpos($line, "\"");
- if ($open_pos && $close_pos){
- $len = $close_pos - $open_pos;
- $time_str = substr($line, $open_pos, $len);
+ $open_pos = strpos($line, '"') + 1;
+ $close_pos = strrpos($line, '"');
+ if ($open_pos && $close_pos) {
+ $len = $close_pos - $open_pos;
+ $time_str = substr($line, $open_pos, $len);
$result[$id] = strtotime($time_str);
}
- }else{
- $a = explode(" ", $line);
+ } else {
+ $a = explode(' ', $line);
}
- }while(!iil_StartsWith($a[0], $key));
- }else{
- if ($mode >= 3) $field_name="FLAGS";
- else if ($index_field=="SIZE") $field_name="RFC822.SIZE";
- else $field_name=$index_field;
-
+ } while (!iil_StartsWith($a[0], $key));
+ } else {
+ if ($mode >= 3) {
+ $field_name = 'FLAGS';
+ } else if ($index_field == 'SIZE') {
+ $field_name = 'RFC822.SIZE';
+ } else {
+ $field_name = $index_field;
+ }
+
/* FETCH uid, size, flags */
- $key="fhi".($c++);
- $request=$key." FETCH $message_set ($field_name)\r\n";
+ $key = 'fhi' .($c++);
+ $request = $key . " FETCH $message_set ($field_name)\r\n";
- if (!fputs($fp, $request)) return false;
- do{
+ if (!fputs($fp, $request)) {
+ return false;
+ }
+ do {
$line=chop(iil_ReadLine($fp, 200));
- $a = explode(" ", $line);
- if (($line[0]=="*") && ($a[2]=="FETCH")){
- $line=str_replace("(", "", $line);
- $line=str_replace(")", "", $line);
- $a=explode(" ", $line);
+ $a = explode(' ', $line);
+ if (($line[0] == '*') && ($a[2] == 'FETCH')) {
+ $line = str_replace('(', '', $line);
+ $line = str_replace(')', '', $line);
+ $a = explode(' ', $line);
- $id=$a[1];
+ $id = $a[1];
- if (isset($result[$id])) continue; //if we already got the data, skip forward
- if ($a[3]!=$field_name) continue; //make sure it's returning what we requested
-
+ if (isset($result[$id])) {
+ continue; //if we already got the data, skip forward
+ }
+ if ($a[3]!=$field_name) {
+ continue; //make sure it's returning what we requested
+ }
+
/* Caution, bad assumptions, next several lines */
- if ($mode==2) $result[$id]=$a[4];
- else{
- $haystack=strtoupper($line);
- $result[$id]=(strpos($haystack, $index_field) > 0 ? "F" : "N");
+ if ($mode == 2) {
+ $result[$id] = $a[4];
+ } else {
+ $haystack = strtoupper($line);
+ $result[$id] = (strpos($haystack, $index_field) > 0 ? "F" : "N");
}
}
- }while(!iil_StartsWith($line, $key));
+ } while (!iil_StartsWith($line, $key));
}
//check number of elements...
- list($start_mid,$end_mid)=explode(':',$message_set);
- if (is_numeric($start_mid) && is_numeric($end_mid)){
+ list($start_mid, $end_mid) = explode(':', $message_set);
+ if (is_numeric($start_mid) && is_numeric($end_mid)) {
//count how many we should have
$should_have = $end_mid - $start_mid +1;
//if we have less, try and fill in the "gaps"
- if (count($result)<$should_have){
- for($i=$start_mid;$i<=$end_mid;$i++) if (!isset($result[$i])) $result[$i] = '';
+ if (count($result) < $should_have) {
+ for ($i=$start_mid; $i<=$end_mid; $i++) {
+ if (!isset($result[$i])) {
+ $result[$i] = '';
+ }
+ }
}
}
-
return $result;
-
}
-function iil_CompressMessageSet($message_set){
+function iil_CompressMessageSet($message_set) {
//given a comma delimited list of independent mid's,
//compresses by grouping sequences together
//if less than 255 bytes long, let's not bother
- if (strlen($message_set)<255) return $message_set;
-
+ if (strlen($message_set)<255) {
+ return $message_set;
+ }
+
//see if it's already been compress
- if (strpos($message_set,':')!==false) return $message_set;
-
+ if (strpos($message_set, ':') !== false) {
+ return $message_set;
+ }
+
//separate, then sort
- $ids = explode(',',$message_set);
+ $ids = explode(',', $message_set);
sort($ids);
$result = array();
- $start = $prev = $ids[0];
- foreach($ids as $id){
+ $start = $prev = $ids[0];
+
+ foreach ($ids as $id) {
$incr = $id - $prev;
- if ($incr>1){ //found a gap
- if ($start==$prev) $result[] = $prev; //push single id
- else $result[] = $start.':'.$prev; //push sequence as start_id:end_id
- $start = $id; //start of new sequence
+ if ($incr > 1) { //found a gap
+ if ($start == $prev) {
+ $result[] = $prev; //push single id
+ } else {
+ $result[] = $start . ':' . $prev; //push sequence as start_id:end_id
+ }
+ $start = $id; //start of new sequence
}
$prev = $id;
}
//handle the last sequence/id
- if ($start==$prev) $result[] = $prev;
- else $result[] = $start.':'.$prev;
-
+ if ($start==$prev) {
+ $result[] = $prev;
+ } else {
+ $result[] = $start.':'.$prev;
+ }
+
//return as comma separated string
- return implode(',',$result);
+ return implode(',', $result);
}
-function iil_C_UIDsToMIDs(&$conn, $mailbox, $uids){
- if (!is_array($uids) || count($uids)==0) return array();
- return iil_C_Search($conn, $mailbox, "UID ".implode(",", $uids));
+function iil_C_UIDsToMIDs(&$conn, $mailbox, $uids) {
+ if (!is_array($uids) || count($uids) == 0) {
+ return array();
+ }
+ return iil_C_Search($conn, $mailbox, 'UID ' . implode(',', $uids));
}
-function iil_C_UIDToMID(&$conn, $mailbox, $uid){
+function iil_C_UIDToMID(&$conn, $mailbox, $uid) {
$result = iil_C_UIDsToMIDs($conn, $mailbox, array($uid));
- if (count($result)==1) return $result[0];
- else return false;
+ if (count($result) == 1) {
+ return $result[0];
+ }
+ return false;
}
-function iil_C_FetchUIDs(&$conn,$mailbox){
+function iil_C_FetchUIDs(&$conn,$mailbox) {
global $clock;
$num = iil_C_CountMessages($conn, $mailbox);
- if ($num==0) return array();
- $message_set = '1'.($num>1?':'.$num:'');
+ if ($num == 0) {
+ return array();
+ }
+ $message_set = '1' . ($num>1?':' . $num:'');
//if cache not enabled, just call iil_C_FetchHeaderIndex on 'UID' field
if (!$conn->do_cache)
return iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, 'UID');
//otherwise, let's check cache first
- $key = $mailbox.'.uids';
+ $key = $mailbox.'.uids';
$cache_good = true;
- if ($conn->uid_cache) $data = $conn->uid_cache;
- else $data = cache_read($conn->user, $conn->host, $key);
-
+ if ($conn->uid_cache) {
+ $data = $conn->uid_cache;
+ } else {
+ $data = cache_read($conn->user, $conn->host, $key);
+ }
+
//was anything cached at all?
- if ($data===false) $cache_good = -1;
-
+ if ($data === false) {
+ $cache_good = -1;
+ }
+
//make sure number of messages were the same
- if ($cache_good>0 && $data['n']!=$num) $cache_good = -2;
-
+ if ($cache_good > 0 && $data['n'] != $num) {
+ $cache_good = -2;
+ }
+
//if everything's okay so far...
- if ($cache_good>0){
+ if ($cache_good > 0) {
//check UIDs of highest mid with current and cached
- $temp = iil_C_Search($conn, $mailbox, 'UID '.$data['d'][$num]);
- if (!$temp || !is_array($temp) || $temp[0]!=$num) $cache_good=-3;
+ $temp = iil_C_Search($conn, $mailbox, 'UID ' . $data['d'][$num]);
+ if (!$temp || !is_array($temp) || $temp[0] != $num) {
+ $cache_good = -3;
+ }
}
//if cached data's good, return it
- if ($cache_good>0){
+ if ($cache_good > 0) {
return $data['d'];
}
//otherwise, we need to fetch it
- $data = array('n'=>$num,'d'=>array());
+ $data = array('n' => $num, 'd' => array());
$data['d'] = iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, 'UID');
+
cache_write($conn->user, $conn->host, $key, $data);
$conn->uid_cache = $data;
return $data['d'];
}
-function iil_SortThreadHeaders($headers, $index_a, $uids){
+function iil_SortThreadHeaders($headers, $index_a, $uids) {
asort($index_a);
$result = array();
- foreach($index_a as $mid=>$foobar){
+ foreach ($index_a as $mid=>$foobar) {
$uid = $uids[$mid];
$result[$uid] = $headers[$uid];
}
return $result;
}
-function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set){
+function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set) {
global $clock;
global $index_a;
list($from_idx, $to_idx) = explode(':', $message_set);
- if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ if (empty($message_set) || (isset($to_idx)
+ && (int)$from_idx > (int)$to_idx)) {
return false;
+ }
$result = array();
- $uids = iil_C_FetchUIDs($conn, $mailbox);
- $debug = false;
+ $uids = iil_C_FetchUIDs($conn, $mailbox);
+ $debug = false;
/* Get cached records where possible */
- if ($conn->do_cache){
+ if ($conn->do_cache) {
$cached = cache_read($conn->user, $conn->host, $mailbox.'.thhd');
- if ($cached && is_array($uids) && count($uids)>0){
- $needed_set = "";
- foreach($uids as $id=>$uid){
- if ($cached[$uid]){
- $result[$uid] = $cached[$uid];
+ if ($cached && is_array($uids) && count($uids)>0) {
+ $needed_set = '';
+ foreach ($uids as $id=>$uid) {
+ if ($cached[$uid]) {
+ $result[$uid] = $cached[$uid];
$result[$uid]->id = $id;
- }else $needed_set.=($needed_set?",":"").$id;
+ } else {
+ $needed_set .= ($needed_set ? ',' : '') . $id;
+ }
}
- if ($needed_set) $message_set = $needed_set;
- else $message_set = '';
+ if ($needed_set) {
+ $message_set = $needed_set;
+ } else {
+ $message_set = '';
+ }
}
}
$message_set = iil_CompressMessageSet($message_set);
- if ($debug) echo "Still need: ".$message_set;
-
+ if ($debug) {
+ echo "Still need: ".$message_set;
+ }
+
/* if we're missing any, get them */
- if ($message_set){
+ if ($message_set) {
/* FETCH date,from,subject headers */
- $key="fh";
- $fp = $conn->fp;
- $request=$key." FETCH $message_set (BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n";
- $mid_to_id = array();
- if (!fputs($fp, $request)) return false;
- do{
+ $key = 'fh';
+ $fp = $conn->fp;
+ $request = $key . " FETCH $message_set ";
+ $request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n";
+ $mid_to_id = array();
+ if (!fputs($fp, $request)) {
+ return false;
+ }
+ do {
$line = chop(iil_ReadLine($fp, 1024));
- if ($debug) echo $line."\n";
- if (ereg('\{[0-9]+\}$', $line)){
- $a = explode(" ", $line);
+ if ($debug) {
+ echo $line . "\n";
+ }
+ if (ereg('\{[0-9]+\}$', $line)) {
+ $a = explode(' ', $line);
$new = array();
$new_thhd = new iilThreadHeader;
$new_thhd->id = $a[1];
- do{
- $line=chop(iil_ReadLine($fp, 1024),"\r\n");
- if (iil_StartsWithI($line,'Message-ID:') || (iil_StartsWithI($line,'In-Reply-To:')) || (iil_StartsWithI($line,'SUBJECT:'))){
- $pos = strpos($line, ":");
+ do {
+ $line = chop(iil_ReadLine($fp, 1024), "\r\n");
+ if (iil_StartsWithI($line, 'Message-ID:')
+ || (iil_StartsWithI($line,'In-Reply-To:'))
+ || (iil_StartsWithI($line,'SUBJECT:'))) {
+
+ $pos = strpos($line, ':');
$field_name = substr($line, 0, $pos);
- $field_val = substr($line, $pos+1);
+ $field_val = substr($line, $pos+1);
+
$new[strtoupper($field_name)] = trim($field_val);
- }else if (ereg('^[[:space:]]', $line)){
- $new[strtoupper($field_name)].= trim($line);
+
+ } else if (ereg('^[[:space:]]', $line)) {
+ $new[strtoupper($field_name)] .= trim($line);
}
- }while($line[0]!=')');
+ } while ($line[0] != ')');
+
$new_thhd->sbj = $new['SUBJECT'];
$new_thhd->mid = substr($new['MESSAGE-ID'], 1, -1);
$new_thhd->irt = substr($new['IN-REPLY-TO'], 1, -1);
$result[$uids[$new_thhd->id]] = $new_thhd;
}
- }while(!iil_StartsWith($line, "fh"));
+ } while (!iil_StartsWith($line, 'fh'));
}
/* sort headers */
- if (is_array($index_a)){
+ if (is_array($index_a)) {
$result = iil_SortThreadHeaders($result, $index_a, $uids);
}
/* write new set to cache */
- if ($conn->do_cache){
- if (count($result)!=count($cached))
- cache_write($conn->user, $conn->host, $mailbox.'.thhd', $result);
+ if ($conn->do_cache) {
+ if (count($result)!=count($cached)) {
+ cache_write($conn->user, $conn->host, $mailbox . '.thhd', $result);
+ }
}
//echo 'iil_FetchThreadHeaders:'."\n";
return $result;
}
-function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock){
+function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock) {
global $index_a;
list($from_idx, $to_idx) = explode(':', $message_set);
- if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ if (empty($message_set) || (isset($to_idx)
+ && (int)$from_idx > (int)$to_idx)) {
return false;
-
- $result=array();
- $roots=array();
+ }
+
+ $result = array();
+ $roots = array();
$root_mids = array();
- $sub_mids = array();
- $strays = array();
- $messages = array();
- $fp = $conn->fp;
- $debug = false;
+ $sub_mids = array();
+ $strays = array();
+ $messages = array();
+ $fp = $conn->fp;
+ $debug = false;
$sbj_filter_pat = '[a-zA-Z]{2,3}(\[[0-9]*\])?:([[:space:]]*)';
/* Do "SELECT" command */
- if (!iil_C_Select($conn, $mailbox)) return false;
-
+ if (!iil_C_Select($conn, $mailbox)) {
+ return false;
+ }
+
/* FETCH date,from,subject headers */
$mid_to_id = array();
- $messages = array();
- $headers = iil_C_FetchThreadHeaders($conn, $mailbox, $message_set);
- if ($clock) $clock->register('fetched headers');
-
- if ($debug) print_r($headers);
-
+ $messages = array();
+ $headers = iil_C_FetchThreadHeaders($conn, $mailbox, $message_set);
+ if ($clock) {
+ $clock->register('fetched headers');
+ }
+
+ if ($debug) {
+ print_r($headers);
+ }
+
/* go through header records */
- foreach($headers as $header){
+ foreach ($headers as $header) {
//$id = $header['i'];
//$new = array('id'=>$id, 'MESSAGE-ID'=>$header['m'],
// 'IN-REPLY-TO'=>$header['r'], 'SUBJECT'=>$header['s']);
- $id = $header->id;
- $new = array('id'=>$id, 'MESSAGE-ID'=>$header->mid,
- 'IN-REPLY-TO'=>$header->irt, 'SUBJECT'=>$header->sbj);
+ $id = $header->id;
+ $new = array('id' => $id, 'MESSAGE-ID' => $header->mid,
+ 'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj);
/* add to message-id -> mid lookup table */
$mid_to_id[$new['MESSAGE-ID']] = $id;
/* if no subject, use message-id */
- if (empty($new['SUBJECT'])) $new['SUBJECT'] = $new['MESSAGE-ID'];
-
+ if (empty($new['SUBJECT'])) {
+ $new['SUBJECT'] = $new['MESSAGE-ID'];
+ }
+
/* if subject contains 'RE:' or has in-reply-to header, it's a reply */
$sbj_pre ='';
$has_re = false;
- if (eregi($sbj_filter_pat, $new['SUBJECT'])) $has_re = true;
- if ($has_re||$new['IN-REPLY-TO']) $sbj_pre = 'RE:';
-
+ if (eregi($sbj_filter_pat, $new['SUBJECT'])) {
+ $has_re = true;
+ }
+ if ($has_re||$new['IN-REPLY-TO']) {
+ $sbj_pre = 'RE:';
+ }
+
/* strip out 're:', 'fw:' etc */
- if ($has_re) $sbj = ereg_replace($sbj_filter_pat,'', $new['SUBJECT']);
- else $sbj = $new['SUBJECT'];
- $new['SUBJECT'] = $sbj_pre.$sbj;
+ if ($has_re) {
+ $sbj = ereg_replace($sbj_filter_pat, '', $new['SUBJECT']);
+ } else {
+ $sbj = $new['SUBJECT'];
+ }
+ $new['SUBJECT'] = $sbj_pre.$sbj;
/* if subject not a known thread-root, add to list */
- if ($debug) echo $id.' '.$new['SUBJECT']."\t".$new['MESSAGE-ID']."\n";
- $root_id = $roots[$sbj];
+ if ($debug) {
+ echo $id . ' ' . $new['SUBJECT'] . "\t" . $new['MESSAGE-ID'] . "\n";
+ }
+ $root_id = $roots[$sbj];
- if ($root_id && ($has_re || !$root_in_root[$root_id])){
- if ($debug) echo "\tfound root: $root_id\n";
- $sub_mids[$new['MESSAGE-ID']] = $root_id;
- $result[$root_id][] = $id;
- }else if (!isset($roots[$sbj])||(!$has_re&&$root_in_root[$root_id])){
+ if ($root_id && ($has_re || !$root_in_root[$root_id])) {
+ if ($debug) {
+ echo "\tfound root: $root_id\n";
+ }
+ $sub_mids[$new['MESSAGE-ID']] = $root_id;
+ $result[$root_id][] = $id;
+ }else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) {
/* try to use In-Reply-To header to find root
unless subject contains 'Re:' */
- if ($has_re&&$new['IN-REPLY-TO']){
- if ($debug) echo "\tlooking: ".$new['IN-REPLY-TO']."\n";
-
+ if ($has_re&&$new['IN-REPLY-TO']) {
+ if ($debug) {
+ echo "\tlooking: ".$new['IN-REPLY-TO']."\n";
+ }
//reply to known message?
$temp = $sub_mids[$new['IN-REPLY-TO']];
- if ($temp){
+ if ($temp) {
//found it, root:=parent's root
- if ($debug) echo "\tfound parent: ".$new['SUBJECT']."\n";
- $result[$temp][] = $id;
+ if ($debug) {
+ echo "\tfound parent: ".$new['SUBJECT']."\n";
+ }
+ $result[$temp][] = $id;
$sub_mids[$new['MESSAGE-ID']] = $temp;
- $sbj = '';
- }else{
+ $sbj = '';
+ } else {
//if we can't find referenced parent, it's a "stray"
$strays[$id] = $new['IN-REPLY-TO'];
}
}
//add subject as root
- if ($sbj){
- if ($debug) echo "\t added to root\n";
- $roots[$sbj] = $id;
- $root_in_root[$id] = !$has_re;
+ if ($sbj) {
+ if ($debug) {
+ echo "\t added to root\n";
+ }
+ $roots[$sbj] = $id;
+ $root_in_root[$id] = !$has_re;
$sub_mids[$new['MESSAGE-ID']] = $id;
- $result[$id] = array($id);
+ $result[$id] = array($id);
}
- if ($debug) echo $new['MESSAGE-ID']."\t".$sbj."\n";
+ if ($debug) {
+ echo $new['MESSAGE-ID'] . "\t" . $sbj . "\n";
+ }
}
}
//now that we've gone through all the messages,
//go back and try and link up the stray threads
- if (count($strays)>0){
- foreach($strays as $id=>$irt){
+ if (count($strays) > 0) {
+ foreach ($strays as $id=>$irt) {
$root_id = $sub_mids[$irt];
- if (!$root_id || $root_id==$id) continue;
- $result[$root_id] = array_merge($result[$root_id],$result[$id]);
+ if (!$root_id || $root_id==$id) {
+ continue;
+ }
+ $result[$root_id] = array_merge($result[$root_id],$result[$id]);
unset($result[$id]);
}
}
- if ($clock) $clock->register('data prepped');
-
- if ($debug) print_r($roots);
- //print_r($result);
+ if ($clock) {
+ $clock->register('data prepped');
+ }
+
+ if ($debug) {
+ print_r($roots);
+ }
+ //print_r($result);
return $result;
}
-function iil_SortThreads(&$tree, $index, $sort_order='ASC'){
- if (!is_array($tree) || !is_array($index)) return false;
-
+function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') {
+ if (!is_array($tree) || !is_array($index)) {
+ return false;
+ }
+
//create an id to position lookup table
$i = 0;
- foreach($index as $id=>$val){
+ foreach ($index as $id=>$val) {
$i++;
$index[$id] = $i;
}
//for each tree, set array key to position
$itree = array();
- foreach($tree as $id=>$node){
- if (count($tree[$id])<=1){
+ foreach ($tree as $id=>$node) {
+ if (count($tree[$id])<=1) {
//for "threads" with only one message, key is position of that message
- $n = $index[$id];
+ $n = $index[$id];
$itree[$n] = array($n=>$id);
- }else{
+ } else {
//for "threads" with multiple messages,
- $min = $max;
+ $min = $max;
$new_a = array();
- foreach($tree[$id] as $mid){
+ foreach ($tree[$id] as $mid) {
$new_a[$index[$mid]] = $mid; //create new sub-array mapping position to id
- $pos = $index[$mid];
- if ($pos&&$pos<$min) $min = $index[$mid]; //find smallest position
+ $pos = $index[$mid];
+ if ($pos&&$pos<$min) {
+ $min = $index[$mid]; //find smallest position
+ }
}
$n = $min; //smallest position of child is thread position
//sort by key, this basically sorts all threads
ksort($itree);
- $i=0;
- $out=array();
- foreach($itree as $k=>$node){
+ $i = 0;
+ $out = array();
+ foreach ($itree as $k=>$node) {
$out[$i] = $itree[$k];
$i++;
}
return $out;
}
-function iil_IndexThreads(&$tree){
+function iil_IndexThreads(&$tree) {
/* creates array mapping mid to thread id */
- if (!is_array($tree)) return false;
-
+ if (!is_array($tree)) {
+ return false;
+ }
+
$t_index = array();
- foreach($tree as $pos=>$kids){
- foreach($kids as $kid) $t_index[$kid] = $pos;
+ foreach ($tree as $pos=>$kids) {
+ foreach ($kids as $kid) $t_index[$kid] = $pos;
}
return $t_index;
}
-function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false){
+function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
+{
global $IMAP_USE_INTERNAL_DATE;
- $c=0;
- $result=array();
- $fp = $conn->fp;
+ $c = 0;
+ $result = array();
+ $fp = $conn->fp;
list($from_idx, $to_idx) = explode(':', $message_set);
- if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ if (empty($message_set) || (isset($to_idx)
+ && (int)$from_idx > (int)$to_idx)) {
return false;
+ }
/* Do "SELECT" command */
- if (!iil_C_Select($conn, $mailbox)){
+ if (!iil_C_Select($conn, $mailbox)) {
$conn->error = "Couldn't select $mailbox";
return false;
}
/* Get cached records where possible */
- if ($conn->do_cache){
+ if ($conn->do_cache) {
$uids = iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, "UID");
- if (is_array($uids) && count($conn->cache[$mailbox]>0)){
- $needed_set = "";
- while(list($id,$uid)=each($uids)){
- if ($conn->cache[$mailbox][$uid]){
- $result[$id] = $conn->cache[$mailbox][$uid];
+ if (is_array($uids) && count($conn->cache[$mailbox]>0)) {
+ $needed_set = '';
+ while (list($id,$uid)=each($uids)) {
+ if ($conn->cache[$mailbox][$uid]) {
+ $result[$id] = $conn->cache[$mailbox][$uid];
$result[$id]->id = $id;
- }else $needed_set.=($needed_set?",":"").$id;
+ } else {
+ $needed_set.=($needed_set ? ',': '') . $id;
+ }
}
//echo "<!-- iil_C_FetchHeader\nMessage Set: $message_set\nNeeded Set:$needed_set\n//-->\n";
- if ($needed_set) $message_set = iil_CompressMessageSet($needed_set);
- else return $result;
+ if ($needed_set) {
+ $message_set = iil_CompressMessageSet($needed_set);
+ } else {
+ return $result;
+ }
}
}
/* FETCH date,from,subject headers */
- $key="fh".($c++);
- $prefix=$uidfetch?" UID":"";
- $request=$key.$prefix." FETCH $message_set (BODY.PEEK[HEADER.FIELDS (DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID REFERENCE)])\r\n";
-
- if (!fputs($fp, $request)) return false;
- do{
- $line=chop(iil_ReadLine($fp, 200));
- $a=explode(" ", $line);
- if (($line[0]=="*") && ($a[2]=="FETCH")){
- $id=$a[1];
- $result[$id]=new iilBasicHeader;
- $result[$id]->id = $id;
- $result[$id]->subject = "";
+ $key = 'fh' . ($c++);
+ $prefix = $uidfetch?' UID':'';
+ $request = $key . $prefix;
+ $request .= " FETCH $message_set (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)])\r\n";
+
+ if (!fputs($fp, $request)) {
+ return false;
+ }
+ do {
+ $line = chop(iil_ReadLine($fp, 200));
+ $a = explode(' ', $line);
+ if (($line[0] == '*') && ($a[2] == 'FETCH')) {
+ $id = $a[1];
+
+ $result[$id] = new iilBasicHeader;
+ $result[$id]->id = $id;
+ $result[$id]->subject = '';
+ $result[$id]->messageID = 'mid:' . $id;
+
/*
Start parsing headers. The problem is, some header "lines" take up multiple lines.
So, we'll read ahead, and if the one we're reading now is a valid header, we'll
process the previous line. Otherwise, we'll keep adding the strings until we come
to the next valid header line.
*/
- $i = 0;
+ $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(chop($line));
- else{
+ do {
+ $line = chop(iil_ReadLine($fp, 300), "\r\n");
+ if (ord($line[0])<=32) {
+ $lines[$i] .= (empty($lines[$i])?'':"\n").trim(chop($line));
+ } else {
$i++;
$lines[$i] = trim(chop($line));
}
- }while($line[0]!=")" && strncmp($line, $key, strlen($key))); // patch from "Maksim Rubis" <siburny@hotmail.com>
-
- if(strncmp($line, $key, strlen($key)))
- {
- //process header, fill iilBasicHeader obj.
- // initialize
- if (is_array($headers)){
- reset($headers);
- while ( list($k, $bar) = each($headers) ) $headers[$k] = "";
- }
-
- // create array with header field:data
- $headers = array();
- while ( list($lines_key, $str) = each($lines) ){
- list($field, $string) = iil_SplitHeaderLine($str);
- $field = strtolower($field);
- $headers[$field] = $string;
- }
- $result[$id]->date = $headers["date"];
- $result[$id]->timestamp = iil_StrToTime($headers["date"]);
- $result[$id]->from = $headers["from"];
- $result[$id]->to = str_replace("\n", " ", $headers["to"]);
- $result[$id]->subject = str_replace("\n", "", $headers["subject"]);
- $result[$id]->replyto = str_replace("\n", " ", $headers["reply-to"]);
- $result[$id]->cc = str_replace("\n", " ", $headers["cc"]);
- $result[$id]->bcc = str_replace("\n", " ", $headers["bcc"]);
- $result[$id]->encoding = str_replace("\n", " ", $headers["content-transfer-encoding"]);
- $result[$id]->ctype = str_replace("\n", " ", $headers["content-type"]);
- $result[$id]->in_reply_to = ereg_replace("[\n<>]",'', $headers['in-reply-to']);
- $result[$id]->reference = $headers["reference"];
+ /*
+ The preg_match below works around communigate imap, which outputs " UID <number>)".
+ 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;
+ }
+ // patch from "Maksim Rubis" <siburny@hotmail.com>
+ } while (trim($line[0]) != ')' && strncmp($line, $key, strlen($key)));
- list($result[$id]->ctype, $ctype_add) = explode(";", $headers["content-type"]);
-
- if (preg_match('/charset="?([a-z0-9\-]+)"?/i', $ctype_add, $regs))
- $result[$id]->charset = $regs[1];
-
- $messageID = $headers["message-id"];
- if (!$messageID) "mid:".$id;
- $result[$id]->messageID = $messageID;
+ if (strncmp($line, $key, strlen($key))) {
+ //process header, fill iilBasicHeader obj.
+ // initialize
+ if (is_array($headers)) {
+ reset($headers);
+ while (list($k, $bar) = each($headers)) {
+ $headers[$k] = '';
+ }
+ }
+
+ // create array with header field:data
+ while ( list($lines_key, $str) = each($lines) ) {
+ list($field, $string) = iil_SplitHeaderLine($str);
+
+ $field = strtolower($field);
+
+ switch ($field) {
+ case 'date';
+ $result[$id]->date = $string;
+ $result[$id]->timestamp = iil_StrToTime($string);
+ break;
+ case 'from':
+ $result[$id]->from = $string;
+ break;
+ case 'to':
+ $result[$id]->to = str_replace("\n", " ", $string);
+ break;
+ case 'subject':
+ $result[$id]->subject = str_replace("\n", '', $string);
+ break;
+ case 'reply-to':
+ $result[$id]->replyto = str_replace("\n", " ", $string);
+ break;
+ case 'cc':
+ $result[$id]->cc = str_replace("\n", " ", $string);
+ break;
+ case 'bcc':
+ $result[$id]->bcc = str_replace("\n", " ", $string);
+ break;
+ case 'content-transfer-encoding':
+ $result[$id]->encoding = str_replace("\n", " ", $string);
+ break;
+ case 'content-type':
+ $ctype_parts = explode(";", $string);
+ $result[$id]->ctype = array_shift($ctype_parts);
+ foreach ($ctype_parts as $ctype_add) {
+ if (preg_match('/charset="?([a-z0-9\-\.\_]+)"?/i',
+ $ctype_add, $regs)) {
+ $result[$id]->charset = $regs[1];
+ }
+ }
+ break;
+ case 'in-reply-to':
+ $result[$id]->in_reply_to = ereg_replace("[\n<>]", '', $string);
+ break;
+ case 'references':
+ $result[$id]->references = $string;
+ break;
+ case 'return-receipt-to':
+ case 'disposition-notification-to':
+ case 'x-confirm-reading-to':
+ $result[$id]->mdn_to = str_replace("\n", " ", $string);
+ break;
+ case 'message-id':
+ $result[$id]->messageID = $string;
+ break;
+ case 'x-priority':
+ if (preg_match('/^(\d+)/', $string, $matches))
+ $result[$id]->priority = intval($matches[1]);
+ break;
+ } // end switch ()
+ } // end while ()
+ } else {
+ $a = explode(' ', $line);
}
- else {
- $a=explode(" ", $line);
- }
-
}
- }while(strcmp($a[0], $key)!=0);
-
+ } while (strcmp($a[0], $key) != 0);
+
/*
FETCH uid, size, flags
Sample reply line: "* 3 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen \Deleted))"
*/
- $command_key="fh".($c++);
- $request= $command_key.$prefix." FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n";
- if (!fputs($fp, $request)) return false;
- do{
- $line=chop(iil_ReadLine($fp, 200));
- //$a = explode(" ", $line);
- //if (($line[0]=="*") && ($a[2]=="FETCH")){
- if ($line[0]=="*"){
+ $command_key = 'fh' . ($c++);
+ $request = $command_key . $prefix;
+ $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n";
+
+ if (!fputs($fp, $request)) {
+ return false;
+ }
+ do {
+ $line = chop(iil_ReadLine($fp, 200));
+ //$a = explode(' ', $line);
+ //if (($line[0]=="*") && ($a[2]=="FETCH")) {
+ if ($line[0] == '*') {
//echo "<!-- $line //-->\n";
//get outter most parens
$open_pos = strpos($line, "(") + 1;
$close_pos = strrpos($line, ")");
- if ($open_pos && $close_pos){
+ if ($open_pos && $close_pos) {
//extract ID from pre-paren
$pre_str = substr($line, 0, $open_pos);
- $pre_a = explode(" ", $line);
+ $pre_a = explode(' ', $line);
$id = $pre_a[1];
//get data
//swap parents with quotes, then explode
$str = eregi_replace("[()]", "\"", $str);
- $a = iil_ExplodeQuotedString(" ", $str);
+ $a = iil_ExplodeQuotedString(' ', $str);
//did we get the right number of replies?
$parts_count = count($a);
- if ($parts_count>=8){
- for ($i=0;$i<$parts_count;$i=$i+2){
- if (strcasecmp($a[$i],"UID")==0) $result[$id]->uid=$a[$i+1];
- else if (strcasecmp($a[$i],"RFC822.SIZE")==0) $result[$id]->size=$a[$i+1];
- else if (strcasecmp($a[$i],"INTERNALDATE")==0) $time_str = $a[$i+1];
- else if (strcasecmp($a[$i],"FLAGS")==0) $flags_str = $a[$i+1];
+ if ($parts_count>=8) {
+ for ($i=0;$i<$parts_count;$i=$i+2) {
+ if (strcasecmp($a[$i],"UID") == 0) $result[$id]->uid=$a[$i+1];
+ else if (strcasecmp($a[$i],"RFC822.SIZE") == 0) $result[$id]->size=$a[$i+1];
+ else if (strcasecmp($a[$i],"INTERNALDATE") == 0) $time_str = $a[$i+1];
+ else if (strcasecmp($a[$i],"FLAGS") == 0) $flags_str = $a[$i+1];
}
// process flags
- $flags_str = eregi_replace('[\\\"]', "", $flags_str);
- $flags_a = explode(" ", $flags_str);
- //echo "<!-- ID: $id FLAGS: ".implode(",", $flags_a)." //-->\n";
+ $flags_str = eregi_replace('[\\\"]', '', $flags_str);
+ $flags_a = explode(' ', $flags_str);
+
+ /*
+ trigger_error("<!-- ID: $id FLAGS: ".implode(",", $flags_a)." //-->\n",
+ E_USER_WARNING);
+ */
- $result[$id]->seen = false;
- $result[$id]->recent = false;
- $result[$id]->deleted = false;
- $result[$id]->answered = false;
- if (is_array($flags_a)){
+ if (is_array($flags_a)) {
reset($flags_a);
- while (list($key,$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;
+ while (list($key,$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, "\$MDNSent") == 0) {
+ $result[$id]->mdn_sent = true;
+ }
}
- $result[$id]->flags=$flags_str;
+ $result[$id]->flags = $flags_a;
}
// if time is gmt...
$time_str = str_replace('GMT','+0000',$time_str);
//get timezone
- $time_str = substr($time_str, 0, -1);
+ $time_str = substr($time_str, 0, -1);
$time_zone_str = substr($time_str, -5); //extract timezone
- $time_str = substr($time_str, 1, -6); //remove quotes
- $time_zone = (float)substr($time_zone_str, 1, 2); //get first two digits
- if ($time_zone_str[3]!='0') $time_zone += 0.5; //handle half hour offset
- if ($time_zone_str[0]=="-") $time_zone = $time_zone * -1.0; //minus?
+ $time_str = substr($time_str, 1, -6); //remove quotes
+ $time_zone = (float)substr($time_zone_str, 1, 2); //get first two digits
+ if ($time_zone_str[3] != '0') {
+ $time_zone += 0.5; //handle half hour offset
+ }
+ if ($time_zone_str[0] == '-') {
+ $time_zone = $time_zone * -1.0; //minus?
+ }
$result[$id]->internaldate = $time_str;
- if ($IMAP_USE_INTERNAL_DATE){
+ if ($IMAP_USE_INTERNAL_DATE || empty($result[$id]->date)) {
//calculate timestamp
- $timestamp = strtotime($time_str); //return's server's time
- $na_timestamp = $timestamp;
- $timestamp -= $time_zone * 3600; //compensate for tz, get GMT
+ $timestamp = strtotime($time_str); //return's server's time
+ $na_timestamp = $timestamp;
+ $timestamp -= $time_zone * 3600; //compensate for tz, get GMT
+
$result[$id]->timestamp = $timestamp;
+ $result[$id]->date = $time_str;
}
- if ($conn->do_cache){
+ if ($conn->do_cache) {
$uid = $result[$id]->uid;
$conn->cache[$mailbox][$uid] = $result[$id];
$conn->cache_dirty[$mailbox] = true;
}
//echo "<!-- ID: $id : $time_str -- local: $na_timestamp (".date("F j, Y, g:i a", $na_timestamp).") tz: $time_zone -- GMT: ".$timestamp." (".date("F j, Y, g:i a", $timestamp).") //-->\n";
- }else{
+ } else {
//echo "<!-- ERROR: $id : $str //-->\n";
}
}
}
- }while(strpos($line, $command_key)===false);
+ } while (strpos($line, $command_key) === false);
return $result;
}
-
-function iil_C_FetchHeader(&$conn, $mailbox, $id, $uidfetch=false){
+function iil_C_FetchHeader(&$conn, $mailbox, $id, $uidfetch=false) {
$fp = $conn->fp;
- $a=iil_C_FetchHeaders($conn, $mailbox, $id, $uidfetch);
- if (is_array($a)) return array_shift($a);
- else return false;
+ $a = iil_C_FetchHeaders($conn, $mailbox, $id, $uidfetch);
+ if (is_array($a)) {
+ return array_shift($a);
+ }
+ return false;
}
-function iil_SortHeaders($a, $field, $flag){
- if (empty($field)) $field="uid";
- $field=strtolower($field);
- if ($field=="date"||$field=='internaldate') $field="timestamp";
- if (empty($flag)) $flag="ASC";
- $flag=strtoupper($flag);
- $stripArr = ($field=='subject') ? array('Re: ','Fwd: ','Fw: ',"\"") : array("\"");
+function iil_SortHeaders($a, $field, $flag) {
+ if (empty($field)) {
+ $field = 'uid';
+ }
+ $field = strtolower($field);
+ if ($field == 'date' || $field == 'internaldate') {
+ $field = 'timestamp';
+ }
+ if (empty($flag)) {
+ $flag = 'ASC';
+ }
+
+ $flag = strtoupper($flag);
+ $stripArr = ($field=='subject') ? array('Re: ','Fwd: ','Fw: ','"') : array('"');
$c=count($a);
- if ($c>0){
+ if ($c > 0) {
/*
Strategy:
First, we'll create an "index" array.
*/
// create "index" array
- $index=array();
+ $index = array();
reset($a);
- while (list($key, $val)=each($a)){
+ while (list($key, $val)=each($a)) {
- if ($field=="timestamp"){
+ if ($field == 'timestamp') {
$data = @strtotime($val->date);
- if ($data == false)
+ if ($data == false) {
$data = $val->timestamp;
- }
- else {
+ }
+ } else {
$data = $val->$field;
- if (is_string($data))
- $data=strtoupper(str_replace($stripArr, "", $data));
- }
-
+ if (is_string($data)) {
+ $data=strtoupper(str_replace($stripArr, '', $data));
+ }
+ }
$index[$key]=$data;
}
// sort index
- $i=0;
- if ($flag=="ASC") asort($index);
- else arsort($index);
-
+ $i = 0;
+ if ($flag == 'ASC') {
+ asort($index);
+ } else {
+ arsort($index);
+ }
+
// form new array based on index
- $result=array();
+ $result = array();
reset($index);
- while (list($key, $val)=each($index)){
+ while (list($key, $val)=each($index)) {
$result[$key]=$a[$key];
$i++;
}
return $result;
}
-function iil_C_Expunge(&$conn, $mailbox){
+function iil_C_Expunge(&$conn, $mailbox) {
$fp = $conn->fp;
- if (iil_C_Select($conn, $mailbox)){
- $c=0;
+ if (iil_C_Select($conn, $mailbox)) {
+ $c = 0;
fputs($fp, "exp1 EXPUNGE\r\n");
- do{
+ do {
$line=chop(iil_ReadLine($fp, 100));
- if ($line[0]=="*") $c++;
- }while (!iil_StartsWith($line, "exp1"));
+ if ($line[0] == '*') {
+ $c++;
+ }
+ } while (!iil_StartsWith($line, 'exp1'));
- if (iil_ParseResult($line) == 0){
- $conn->selected = ""; //state has changed, need to reselect
+ if (iil_ParseResult($line) == 0) {
+ $conn->selected = ''; //state has changed, need to reselect
//$conn->exists-=$c;
return $c;
- }else{
- $conn->error = $line;
- return -1;
}
+ $conn->error = $line;
}
return -1;
}
-function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod){
- if ($mod!="+" && $mod!="-") return -1;
-
- $fp = $conn->fp;
- $flags=array(
- "SEEN"=>"\\Seen",
- "DELETED"=>"\\Deleted",
- "RECENT"=>"\\Recent",
- "ANSWERED"=>"\\Answered",
- "DRAFT"=>"\\Draft",
- "FLAGGED"=>"\\Flagged"
- );
- $flag=strtoupper($flag);
- $flag=$flags[$flag];
- if (iil_C_Select($conn, $mailbox)){
- $c=0;
- fputs($fp, "flg STORE $messages ".$mod."FLAGS (".$flag.")\r\n");
- do{
+function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod) {
+ if ($mod != '+' && $mod != '-') {
+ return -1;
+ }
+
+ $fp = $conn->fp;
+ $flags = array(
+ 'SEEN' => '\\Seen',
+ 'DELETED' => '\\Deleted',
+ 'RECENT' => '\\Recent',
+ 'ANSWERED' => '\\Answered',
+ 'DRAFT' => '\\Draft',
+ 'FLAGGED' => '\\Flagged',
+ 'MDNSENT' => "\$MDNSent");
+
+ $flag = strtoupper($flag);
+ $flag = $flags[$flag];
+
+ if (iil_C_Select($conn, $mailbox)) {
+ $c = 0;
+ fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n");
+ do {
$line=chop(iil_ReadLine($fp, 100));
- if ($line[0]=="*") $c++;
- }while (!iil_StartsWith($line, "flg"));
+ if ($line[0] == '*') {
+ $c++;
+ }
+ } while (!iil_StartsWith($line, 'flg'));
- if (iil_ParseResult($line) == 0){
+ if (iil_ParseResult($line) == 0) {
iil_C_ExpireCachedItems($conn, $mailbox, $messages);
return $c;
- }else{
- $conn->error = $line;
- return -1;
}
- }else{
- $conn->error = "Select failed";
+ $conn->error = $line;
return -1;
}
+ $conn->error = 'Select failed';
+ return -1;
}
-function iil_C_Flag(&$conn, $mailbox, $messages, $flag){
- return iil_C_ModFlag($conn, $mailbox, $messages, $flag, "+");
+function iil_C_Flag(&$conn, $mailbox, $messages, $flag) {
+ return iil_C_ModFlag($conn, $mailbox, $messages, $flag, '+');
}
-function iil_C_Unflag(&$conn, $mailbox, $messages, $flag){
- return iil_C_ModFlag($conn, $mailbox, $messages, $flag, "-");
+function iil_C_Unflag(&$conn, $mailbox, $messages, $flag) {
+ return iil_C_ModFlag($conn, $mailbox, $messages, $flag, '-');
}
-function iil_C_Delete(&$conn, $mailbox, $messages){
- return iil_C_ModFlag($conn, $mailbox, $messages, "DELETED", "+");
+function iil_C_Delete(&$conn, $mailbox, $messages) {
+ return iil_C_ModFlag($conn, $mailbox, $messages, 'DELETED', '+');
}
-function iil_C_Undelete(&$conn, $mailbox, $messages){
- return iil_C_ModFlag($conn, $mailbox, $messages, "DELETED", "-");
+function iil_C_Undelete(&$conn, $mailbox, $messages) {
+ return iil_C_ModFlag($conn, $mailbox, $messages, 'DELETED', '-');
}
-function iil_C_Unseen(&$conn, $mailbox, $messages){
- return iil_C_ModFlag($conn, $mailbox, $messages, "SEEN", "-");
+function iil_C_Unseen(&$conn, $mailbox, $messages) {
+ return iil_C_ModFlag($conn, $mailbox, $messages, 'SEEN', '-');
}
-function iil_C_Copy(&$conn, $messages, $from, $to){
+function iil_C_Copy(&$conn, $messages, $from, $to) {
$fp = $conn->fp;
- if (empty($from) || empty($to)) return -1;
-
- if (iil_C_Select($conn, $from)){
+ if (empty($from) || empty($to)) {
+ return -1;
+ }
+
+ if (iil_C_Select($conn, $from)) {
$c=0;
fputs($fp, "cpy1 COPY $messages \"$to\"\r\n");
$line=iil_ReadReply($fp);
return iil_ParseResult($line);
- }else{
+ } else {
return -1;
}
}
-function iil_FormatSearchDate($month, $day, $year){
- $month = (int)$month;
- $months=array(
- 1=>"Jan", 2=>"Feb", 3=>"Mar", 4=>"Apr",
- 5=>"May", 6=>"Jun", 7=>"Jul", 8=>"Aug",
- 9=>"Sep", 10=>"Oct", 11=>"Nov", 12=>"Dec"
- );
- return $day."-".$months[$month]."-".$year;
+function iil_FormatSearchDate($month, $day, $year) {
+ $month = (int) $month;
+ $months = $GLOBALS['IMAP_MONTHS'];
+ return $day . '-' . $months[$month] . '-' . $year;
}
-function iil_C_CountUnseen(&$conn, $folder){
- $index = iil_C_Search($conn, $folder, "ALL UNSEEN");
- if (is_array($index)){
- $str = implode(",", $index);
- if (empty($str)) return false;
- else return count($index);
- }else return false;
+function iil_C_CountUnseen(&$conn, $folder) {
+ $index = iil_C_Search($conn, $folder, 'ALL UNSEEN');
+ if (is_array($index)) {
+ $str = implode(',', $index);
+ if (empty($str)) {
+ return false;
+ }
+ return count($index);
+ }
+ return false;
}
-function iil_C_UID2ID(&$conn, $folder, $uid){
- if ($uid > 0){
+function iil_C_UID2ID(&$conn, $folder, $uid) {
+ if ($uid > 0) {
$id_a = iil_C_Search($conn, $folder, "UID $uid");
- if (is_array($id_a)){
+ if (is_array($id_a)) {
$count = count($id_a);
- if ($count > 1) return false;
- else return $id_a[0];
+ if ($count > 1) {
+ return false;
+ }
+ return $id_a[0];
}
}
return false;
}
-function iil_C_ID2UID(&$conn, $folder, $id){
+function iil_C_ID2UID(&$conn, $folder, $id) {
$fp = $conn->fp;
- $result=-1;
- if ($id > 0) {
- if (iil_C_Select($conn, $folder)){
- $key = "FUID";
- if (fputs($fp, "$key FETCH $id (UID)\r\n")){
- do{
- $line=chop(iil_ReadLine($fp, 1024));
- if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)){
- $result = $r[1];
- }
- } while (!preg_match("/^$key/", $line));
- }
+ if ($id == 0) {
+ return -1;
+ }
+ $result = -1;
+ if (iil_C_Select($conn, $folder)) {
+ $key = 'FUID';
+ if (fputs($fp, "$key FETCH $id (UID)\r\n")) {
+ do {
+ $line=chop(iil_ReadLine($fp, 1024));
+ if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)) {
+ $result = $r[1];
+ }
+ } while (!preg_match("/^$key/", $line));
}
}
return $result;
}
-function iil_C_Search(&$conn, $folder, $criteria){
+function iil_C_Search(&$conn, $folder, $criteria) {
$fp = $conn->fp;
- if (iil_C_Select($conn, $folder)){
- $c=0;
+ if (iil_C_Select($conn, $folder)) {
+ $c = 0;
- $query = "srch1 SEARCH ".chop($criteria)."\r\n";
+ $query = 'srch1 SEARCH ' . chop($criteria) . "\r\n";
fputs($fp, $query);
- do{
+ do {
$line=trim(chop(iil_ReadLine($fp, 10000)));
- if (eregi("^\* SEARCH", $line)){
+ if (eregi("^\* SEARCH", $line)) {
$str = trim(substr($line, 8));
- $messages = explode(" ", $str);
+ $messages = explode(' ', $str);
}
- }while(!iil_StartsWith($line, "srch1"));
+ } while (!iil_StartsWith($line, 'srch1'));
- $result_code=iil_ParseResult($line);
- if ($result_code==0) return $messages;
- else{
- $conn->error = "iil_C_Search: ".$line."\n";
- return false;
+ $result_code = iil_ParseResult($line);
+ if ($result_code == 0) {
+ return $messages;
}
-
- }else{
- $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n";
+ $conn->error = 'iil_C_Search: ' . $line . "\n";
return false;
+
}
+ $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n";
+ return false;
}
-function iil_C_Move(&$conn, $messages, $from, $to){
+function iil_C_Move(&$conn, $messages, $from, $to) {
$fp = $conn->fp;
- if (!$from || !$to) return -1;
-
- $r=iil_C_Copy($conn, $messages, $from,$to);
- if ($r==0){
+ if (!$from || !$to) {
+ return -1;
+ }
+
+ $r = iil_C_Copy($conn, $messages, $from,$to);
+ if ($r==0) {
return iil_C_Delete($conn, $from, $messages);
- }else{
- return $r;
}
-}
-
-function iil_C_GetHierarchyDelimiter(&$conn){
- if ($conn->delimiter) return $conn->delimiter;
-
- $fp = $conn->fp;
+ return $r;
+}
+
+/**
+ * Gets the delimiter, for example:
+ * INBOX.foo -> .
+ * INBOX/foo -> /
+ * INBOX\foo -> \
+ *
+ * @return mixed A delimiter (string), or false.
+ * @param object $conn The current connection.
+ * @see iil_Connect()
+ */
+function iil_C_GetHierarchyDelimiter(&$conn) {
+ if ($conn->delimiter) {
+ return $conn->delimiter;
+ }
+
+ $fp = $conn->fp;
$delimiter = false;
//try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8)
- if (!fputs($fp, "ghd LIST \"\" \"\"\r\n")) return false;
- do{
+ if (!fputs($fp, 'ghd LIST "" ""' . "\r\n")) {
+ return false;
+ }
+
+ do {
$line=iil_ReadLine($fp, 500);
- if ($line[0]=="*"){
+ if ($line[0] == '*') {
$line = rtrim($line);
- $a=iil_ExplodeQuotedString(" ", $line);
- if ($a[0]=="*") $delimiter = str_replace("\"", "", $a[count($a)-2]);
+ $a=iil_ExplodeQuotedString(' ', $line);
+ if ($a[0] == '*') {
+ $delimiter = str_replace('"', '', $a[count($a)-2]);
+ }
}
- }while (!iil_StartsWith($line, "ghd"));
+ } while (!iil_StartsWith($line, 'ghd'));
- if (strlen($delimiter)>0) return $delimiter;
-
+ if (strlen($delimiter)>0) {
+ return $delimiter;
+ }
+
//if that fails, try namespace extension
//try to fetch namespace data
fputs($conn->fp, "ns1 NAMESPACE\r\n");
- do{
+ do {
$line = iil_ReadLine($conn->fp, 1024);
- if (iil_StartsWith($line, "* NAMESPACE")){
+ if (iil_StartsWith($line, '* NAMESPACE')) {
$i = 0;
$data = iil_ParseNamespace2(substr($line,11), $i, 0, 0);
}
- }while(!iil_StartsWith($line, "ns1"));
+ } while (!iil_StartsWith($line, 'ns1'));
- if (!is_array($data)) return false;
-
+ if (!is_array($data)) {
+ return false;
+ }
+
//extract user space data (opposed to global/shared space)
$user_space_data = $data[0];
- if (!is_array($user_space_data)) return false;
-
+ if (!is_array($user_space_data)) {
+ return false;
+ }
+
//get first element
$first_userspace = $user_space_data[0];
- if (!is_array($first_userspace)) return false;
-
+ if (!is_array($first_userspace)) {
+ return false;
+ }
+
//extract delimiter
$delimiter = $first_userspace[1];
return $delimiter;
}
-function iil_C_ListMailboxes(&$conn, $ref, $mailbox){
+function iil_C_ListMailboxes(&$conn, $ref, $mailbox) {
global $IGNORE_FOLDERS;
$ignore = $IGNORE_FOLDERS[strtolower($conn->host)];
$fp = $conn->fp;
- if (empty($mailbox)) $mailbox="*";
- if (empty($ref) && $conn->rootdir) $ref = $conn->rootdir;
-
+ if (empty($mailbox)) {
+ $mailbox = '*';
+ }
+ if (empty($ref) && $conn->rootdir) {
+ $ref = $conn->rootdir;
+ }
+
// send command
- if (!fputs($fp, "lmb LIST \"".$ref."\" \"$mailbox\"\r\n")) return false;
- $i=0;
+ if (!fputs($fp, "lmb LIST \"".$ref."\" \"$mailbox\"\r\n")) {
+ return false;
+ }
+
+ $i = 0;
// get folder list
- do{
- $line=iil_ReadLine($fp, 500);
- $line=iil_MultLine($fp, $line);
+ do {
+ $line = iil_ReadLine($fp, 500);
+ $line = iil_MultLine($fp, $line);
- $a = explode(" ", $line);
- if (($line[0]=="*") && ($a[1]=="LIST")){
+ $a = explode(' ', $line);
+ if (($line[0] == '*') && ($a[1] == 'LIST')) {
$line = rtrim($line);
// split one line
- $a=iil_ExplodeQuotedString(" ", $line);
+ $a = iil_ExplodeQuotedString(' ', $line);
+
// last string is folder name
- $folder = str_replace("\"", "", $a[count($a)-1]);
- if (empty($ignore) || (!empty($ignore) && !eregi($ignore, $folder))) $folders[$i] = $folder;
+ $folder = str_replace('"', '', $a[count($a)-1]);
+
+ if (empty($ignore) || (!empty($ignore)
+ && !eregi($ignore, $folder))) {
+ $folders[$i] = $folder;
+ }
+
// second from last is delimiter
- $delim = str_replace("\"", "", $a[count($a)-2]);
+ $delim = str_replace('"', '', $a[count($a)-2]);
// is it a container?
$i++;
}
- }while (!iil_StartsWith($line, "lmb"));
+ } while (!iil_StartsWith($line, 'lmb'));
- if (is_array($folders)){
- if (!empty($ref)){
+ if (is_array($folders)) {
+ if (!empty($ref)) {
// if rootdir was specified, make sure it's the first element
// some IMAP servers (i.e. Courier) won't return it
if ($ref[strlen($ref)-1]==$delim) $ref = substr($ref, 0, strlen($ref)-1);
if ($folders[0]!=$ref) array_unshift($folders, $ref);
}
return $folders;
- }else if (iil_ParseResult($line)==0){
+ }else if (iil_ParseResult($line) == 0) {
return array('INBOX');
- }else{
+ } else {
$conn->error = $line;
return false;
}
}
-function iil_C_ListSubscribed(&$conn, $ref, $mailbox){
+function iil_C_ListSubscribed(&$conn, $ref, $mailbox) {
global $IGNORE_FOLDERS;
$ignore = $IGNORE_FOLDERS[strtolower($conn->host)];
$fp = $conn->fp;
- if (empty($mailbox)) $mailbox = "*";
- if (empty($ref) && $conn->rootdir) $ref = $conn->rootdir;
+ if (empty($mailbox)) {
+ $mailbox = '*';
+ }
+ if (empty($ref) && $conn->rootdir) {
+ $ref = $conn->rootdir;
+ }
$folders = array();
// send command
- if (!fputs($fp, "lsb LSUB \"".$ref."\" \"".$mailbox."\"\r\n")){
+ if (!fputs($fp, 'lsb LSUB "' . $ref . '" "' . $mailbox.'"' . "\r\n")) {
$conn->error = "Couldn't send LSUB command\n";
return false;
}
- $i=0;
+
+ $i = 0;
+
// get folder list
- do{
- $line=iil_ReadLine($fp, 500);
- $line=iil_MultLine($fp, $line);
- $a = explode(" ", $line);
- if (($line[0]=="*") && ($a[1]=="LSUB" || $a[1]=="LIST")){
+ do {
+ $line = iil_ReadLine($fp, 500);
+ $line = iil_MultLine($fp, $line);
+ $a = explode(' ', $line);
+
+ if (($line[0] == '*') && ($a[1] == 'LSUB' || $a[1] == 'LIST')) {
$line = rtrim($line);
+
// split one line
- $a=iil_ExplodeQuotedString(" ", $line);
+ $a = iil_ExplodeQuotedString(' ', $line);
+
// last string is folder name
- //$folder = UTF7DecodeString(str_replace("\"", "", $a[count($a)-1]));
- $folder = str_replace("\"", "", $a[count($a)-1]);
- if ((!in_array($folder, $folders)) && (empty($ignore) || (!empty($ignore) && !eregi($ignore, $folder)))) $folders[$i] = $folder;
+ //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1]));
+ $folder = str_replace('"', '', $a[count($a)-1]);
+
+ if ((!in_array($folder, $folders)) && (empty($ignore)
+ || (!empty($ignore) && !eregi($ignore, $folder)))) {
+ $folders[$i] = $folder;
+ }
+
// second from last is delimiter
- $delim = str_replace("\"", "", $a[count($a)-2]);
+ $delim = str_replace('"', '', $a[count($a)-2]);
+
// is it a container?
$i++;
}
- }while (!iil_StartsWith($line, "lsb"));
+ } while (!iil_StartsWith($line, 'lsb'));
- if (is_array($folders)){
- if (!empty($ref)){
+ if (is_array($folders)) {
+ if (!empty($ref)) {
// if rootdir was specified, make sure it's the first element
// some IMAP servers (i.e. Courier) won't return it
- if ($ref[strlen($ref)-1]==$delim) $ref = substr($ref, 0, strlen($ref)-1);
- if ($folders[0]!=$ref) array_unshift($folders, $ref);
+ if ($ref[strlen($ref)-1]==$delim) {
+ $ref = substr($ref, 0, strlen($ref)-1);
+ }
+ if ($folders[0]!=$ref) {
+ array_unshift($folders, $ref);
+ }
}
return $folders;
- }else{
- $conn->error = $line;
- return false;
}
+ $conn->error = $line;
+ return false;
}
-function iil_C_Subscribe(&$conn, $folder){
+function iil_C_Subscribe(&$conn, $folder) {
$fp = $conn->fp;
- $query = "sub1 SUBSCRIBE \"".$folder."\"\r\n";
+ $query = 'sub1 SUBSCRIBE "' . $folder. '"' . "\r\n";
fputs($fp, $query);
- $line=trim(chop(iil_ReadLine($fp, 10000)));
+
+ $line = trim(chop(iil_ReadLine($fp, 10000)));
return iil_ParseResult($line);
}
-function iil_C_UnSubscribe(&$conn, $folder){
+function iil_C_UnSubscribe(&$conn, $folder) {
$fp = $conn->fp;
- $query = "usub1 UNSUBSCRIBE \"".$folder."\"\r\n";
+ $query = 'usub1 UNSUBSCRIBE "' . $folder . '"' . "\r\n";
fputs($fp, $query);
- $line=trim(chop(iil_ReadLine($fp, 10000)));
+
+ $line = trim(chop(iil_ReadLine($fp, 10000)));
return iil_ParseResult($line);
}
-function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part){
- $fp = $conn->fp;
- $result=false;
- if (($part==0)||(empty($part))) $part="HEADER";
- else $part.=".MIME";
-
- if (iil_C_Select($conn, $mailbox)){
- $key="fh".($c++);
- $request=$key." FETCH $id (BODY.PEEK[$part])\r\n";
+function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
+ $fp = $conn->fp;
+ $result = false;
+ if (($part == 0) || (empty($part))) {
+ $part = 'HEADER';
+ } else {
+ $part .= '.MIME';
+ }
+
+ if (iil_C_Select($conn, $mailbox)) {
+ $key = 'fh' . ($c++);
+ $request = $key . " FETCH $id (BODY.PEEK[$part])\r\n";
if (!fputs($fp, $request)) return false;
- do{
- $line=chop(iil_ReadLine($fp, 200));
- $a=explode(" ", $line);
- if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[strlen($line)-1]!=")")){
+ do {
+ $line = chop(iil_ReadLine($fp, 200));
+ $a = explode(' ', $line);
+ if (($line[0] == '*') && ($a[2] == 'FETCH')
+ && ($line[strlen($line)-1] != ')')) {
$line=iil_ReadLine($fp, 300);
- while(chop($line)!=")"){
- $result.=$line;
+ while (chop($line) != ')') {
+ $result .= $line;
$line=iil_ReadLine($fp, 300);
}
}
- }while(strcmp($a[0], $key)!=0);
+ } while (strcmp($a[0], $key) != 0);
}
return $result;
}
-function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode){
+function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
/* modes:
1: return string
2: print
3: base64 and print
*/
- $fp = $conn->fp;
- $result=false;
- if (($part==0)||(empty($part))) $part="TEXT";
-
- if (iil_C_Select($conn, $mailbox)){
- $reply_key="* ".$id;
+ $fp = $conn->fp;
+ $result = false;
+ if (($part == 0) || empty($part)) {
+ $part = 'TEXT';
+ }
+
+ if (iil_C_Select($conn, $mailbox)) {
+ $reply_key = '* ' . $id;
+
// format request
- $key="ftch".($c++)." ";
- $request=$key."FETCH $id (BODY.PEEK[$part])\r\n";
+ $key = 'ftch' . ($c++) . ' ';
+ $request = $key . "FETCH $id (BODY.PEEK[$part])\r\n";
// send request
- if (!fputs($fp, $request)) return false;
+ if (!fputs($fp, $request)) {
+ return false;
+ }
+
// receive reply line
- do{
+ do {
$line = chop(iil_ReadLine($fp, 1000));
- $a = explode(" ", $line);
- }while ($a[2]!="FETCH");
+ $a = explode(' ', $line);
+ } while ($a[2] != 'FETCH');
$len = strlen($line);
- if ($line[$len-1] == ")"){
+ if ($line[$len-1] == ')') {
//one line response, get everything between first and last quotes
- $from = strpos($line, "\"") + 1;
- $to = strrpos($line, "\"");
- $len = $to - $from;
- if ($mode==1) $result = substr($line, $from, $len);
- else if ($mode==2) echo substr($line, $from, $len);
- else if ($mode==3) echo base64_decode(substr($line, $from, $len));
- }else if ($line[$len-1] == "}"){
+ $from = strpos($line, '"') + 1;
+ $to = strrpos($line, '"');
+ $len = $to - $from;
+ if ($mode == 1) {
+ $result = substr($line, $from, $len);
+ } else if ($mode == 2) {
+ echo substr($line, $from, $len);
+ } else if ($mode == 3) {
+ echo base64_decode(substr($line, $from, $len));
+ }
+ }else if ($line[$len-1] == '}') {
//multi-line request, find sizes of content and receive that many bytes
- $from = strpos($line, "{") + 1;
- $to = strrpos($line, "}");
- $len = $to - $from;
- $sizeStr = substr($line, $from, $len);
- $bytes = (int)$sizeStr;
+ $from = strpos($line, '{') + 1;
+ $to = strrpos($line, '}');
+ $len = $to - $from;
+ $sizeStr = substr($line, $from, $len);
+ $bytes = (int)$sizeStr;
$received = 0;
- while ($received < $bytes){
+ while ($received < $bytes) {
$remaining = $bytes - $received;
- $line = iil_ReadLine($fp, 1024);
- $len = strlen($line);
- if ($len > $remaining) $line = substr($line, 0, $remaining);
+ $line = iil_ReadLine($fp, 1024);
+ $len = strlen($line);
+
+ if ($len > $remaining) {
+ $line = substr($line, 0, $remaining);
+ }
$received += strlen($line);
- if ($mode==1) $result .= chop($line)."\n";
- else if ($mode==2){ echo chop($line)."\n"; flush(); }
- else if ($mode==3){ echo base64_decode($line); flush(); }
+ if ($mode == 1) {
+ $result .= chop($line) . "\n";
+ } else if ($mode == 2) {
+ echo chop($line) . "\n"; flush();
+ } else if ($mode == 3) {
+ echo base64_decode($line); flush();
+ }
}
}
// read in anything up until 'til last line
- do{
+ do {
$line = iil_ReadLine($fp, 1024);
- }while(!iil_StartsWith($line, $key));
+ } while (!iil_StartsWith($line, $key));
- if ($result){
+ if ($result) {
$result = chop($result);
return $result; // substr($result, 0, strlen($result)-1);
- }else return false;
- }else{
- echo "Select failed.";
+ }
+ return false;
+ } else {
+ echo 'Select failed.';
}
- if ($mode==1) return $result;
- else return $received;
+ if ($mode==1) {
+ return $result;
+ }
+ return $received;
}
-function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part){
+function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part) {
return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1);
}
-function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part){
+function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) {
iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2);
}
-function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part){
+function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part) {
iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3);
}
-function iil_C_CreateFolder(&$conn, $folder){
+function iil_C_CreateFolder(&$conn, $folder) {
$fp = $conn->fp;
- if (fputs($fp, "c CREATE \"".$folder."\"\r\n")){
- do{
+ if (fputs($fp, 'c CREATE "' . $folder . '"' . "\r\n")) {
+ do {
$line=iil_ReadLine($fp, 300);
- }while($line[0]!="c");
+ } while ($line[0] != 'c');
$conn->error = $line;
- return (iil_ParseResult($line)==0);
- }else{
- return false;
+ return (iil_ParseResult($line) == 0);
}
+ return false;
}
-function iil_C_RenameFolder(&$conn, $from, $to){
+function iil_C_RenameFolder(&$conn, $from, $to) {
$fp = $conn->fp;
- if (fputs($fp, "r RENAME \"".$from."\" \"".$to."\"\r\n")){
- do{
- $line=iil_ReadLine($fp, 300);
- }while($line[0]!="r");
- return (iil_ParseResult($line)==0);
- }else{
- return false;
- }
+ if (fputs($fp, 'r RENAME "' . $from . '" "' . $to . '"' . "\r\n")) {
+ do {
+ $line = iil_ReadLine($fp, 300);
+ } while ($line[0] != 'r');
+ return (iil_ParseResult($line) == 0);
+ }
+ return false;
}
-function iil_C_DeleteFolder(&$conn, $folder){
+function iil_C_DeleteFolder(&$conn, $folder) {
$fp = $conn->fp;
- if (fputs($fp, "d DELETE \"".$folder."\"\r\n")){
- do{
+ if (fputs($fp, 'd DELETE "' . $folder. '"' . "\r\n")) {
+ do {
$line=iil_ReadLine($fp, 300);
- }while($line[0]!="d");
- return (iil_ParseResult($line)==0);
- }else{
- $conn->error = "Couldn't send command\n";
- return false;
+ } while ($line[0] != 'd');
+ return (iil_ParseResult($line) == 0);
}
+ $conn->error = "Couldn't send command\n";
+ return false;
}
-function iil_C_Append(&$conn, $folder, &$message){
- if (!$folder) return false;
+function iil_C_Append(&$conn, $folder, &$message) {
+ if (!$folder) {
+ return false;
+ }
$fp = $conn->fp;
- $message = str_replace("\r", "", $message);
+ $message = str_replace("\r", '', $message);
$message = str_replace("\n", "\r\n", $message);
$len = strlen($message);
- if (!$len) return false;
-
- $request="A APPEND \"".$folder."\" (\\Seen) {".$len."}\r\n";
- if (fputs($fp, $request)){
+ if (!$len) {
+ return false;
+ }
+ $request = 'A APPEND "' . $folder .'" (\\Seen) {' . $len . "}\r\n";
+
+ if (fputs($fp, $request)) {
$line=iil_ReadLine($fp, 100);
$sent = fwrite($fp, $message."\r\n");
flush();
- do{
+ do {
$line=iil_ReadLine($fp, 1000);
- }while($line[0]!="A");
+ } while ($line[0] != 'A');
- $result = (iil_ParseResult($line)==0);
- if (!$result) $conn->error .= $line."\n";
+ $result = (iil_ParseResult($line) == 0);
+ if (!$result) {
+ $conn->error .= $line . "\n";
+ }
return $result;
- }else{
- $conn->error .= "Couldn't send command \"$request\"\n";
- return false;
}
+ $conn->error .= "Couldn't send command \"$request\"\n";
+ return false;
}
-function iil_C_AppendFromFile(&$conn, $folder, $path){
- if (!$folder) return false;
-
+function iil_C_AppendFromFile(&$conn, $folder, $path) {
+ if (!$folder) {
+ return false;
+ }
+
//open message file
$in_fp = false;
- if (file_exists(realpath($path))) $in_fp = fopen($path, "r");
- if (!$in_fp){
+ if (file_exists(realpath($path))) {
+ $in_fp = fopen($path, 'r');
+ }
+ if (!$in_fp) {
$conn->error .= "Couldn't open $path for reading\n";
return false;
}
- $fp = $conn->fp;
+ $fp = $conn->fp;
$len = filesize($path);
- if (!$len) return false;
-
+ if (!$len) {
+ return false;
+ }
+
//send APPEND command
- $request="A APPEND \"".$folder."\" (\\Seen) {".$len."}\r\n";
+ $request = 'A APPEND "' . $folder . '" (\\Seen) {' . $len . "}\r\n";
$bytes_sent = 0;
- if (fputs($fp, $request)){
- $line=iil_ReadLine($fp, 100);
+ if (fputs($fp, $request)) {
+ $line = iil_ReadLine($fp, 100);
//send file
- while(!feof($in_fp)){
- $buffer = fgets($in_fp, 4096);
+ while (!feof($in_fp)) {
+ $buffer = fgets($in_fp, 4096);
$bytes_sent += strlen($buffer);
fputs($fp, $buffer);
}
fputs($fp, "\r\n");
//read response
- do{
- $line=iil_ReadLine($fp, 1000);
- }while($line[0]!="A");
+ do {
+ $line = iil_ReadLine($fp, 1000);
+ } while ($line[0] != 'A');
- $result = (iil_ParseResult($line)==0);
- if (!$result) $conn->error .= $line."\n";
- return $result;
+ $result = (iil_ParseResult($line) == 0);
+ if (!$result) {
+ $conn->error .= $line . "\n";
+ }
+ return $result;
- }else{
- $conn->error .= "Couldn't send command \"$request\"\n";
- return false;
}
+ $conn->error .= "Couldn't send command \"$request\"\n";
+ return false;
}
-function iil_C_FetchStructureString(&$conn, $folder, $id){
- $fp = $conn->fp;
- $result=false;
- if (iil_C_Select($conn, $folder)){
- $key = "F1247";
- if (fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")){
- do{
+function iil_C_FetchStructureString(&$conn, $folder, $id) {
+ $fp = $conn->fp;
+ $result = false;
+ if (iil_C_Select($conn, $folder)) {
+ $key = 'F1247';
+
+ if (fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")) {
+ do {
$line=chop(iil_ReadLine($fp, 5000));
- if ($line[0]=="*"){
- if (ereg("\}$", $line)){
+ if ($line[0] == '*') {
+ if (ereg("\}$", $line)) {
preg_match('/(.+)\{([0-9]+)\}/', $line, $match);
$result = $match[1];
- do{
+ do {
$line = chop(iil_ReadLine($fp, 100));
- if (!preg_match("/^$key/", $line)) $result .= $line;
- else $done = true;
- }while(!$done);
- }else{
+ if (!preg_match("/^$key/", $line)) {
+ $result .= $line;
+ } else {
+ $done = true;
+ }
+ } while (!$done);
+ } else {
$result = $line;
}
- list($pre, $post) = explode("BODYSTRUCTURE ", $result);
- $result = substr($post, 0, strlen($post)-1); //truncate last ')' and return
+ list($pre, $post) = explode('BODYSTRUCTURE ', $result);
+
+ //truncate last ')' and return
+ $result = substr($post, 0, strlen($post)-1);
}
- }while (!preg_match("/^$key/",$line));
+ } while (!preg_match("/^$key/", $line));
}
}
return $result;
}
-function iil_C_PrintSource(&$conn, $folder, $id, $part){
+function iil_C_PrintSource(&$conn, $folder, $id, $part) {
$header = iil_C_FetchPartHeader($conn, $folder, $id, $part);
- //echo str_replace("\r", "", $header);
+ //echo str_replace("\r", '', $header);
echo $header;
echo iil_C_PrintPartBody($conn, $folder, $id, $part);
}
-function iil_C_GetQuota(&$conn){
+function iil_C_GetQuota(&$conn) {
/*
-b GETQUOTAROOT "INBOX"
-* QUOTAROOT INBOX user/rchijiiwa1
-* QUOTA user/rchijiiwa1 (STORAGE 654 9765)
-b OK Completed
-*/
- $fp = $conn->fp;
- $result=false;
- $quota_line = "";
+ * GETQUOTAROOT "INBOX"
+ * QUOTAROOT INBOX user/rchijiiwa1
+ * QUOTA user/rchijiiwa1 (STORAGE 654 9765)
+ b OK Completed
+ */
+ $fp = $conn->fp;
+ $result = false;
+ $quota_line = '';
//get line containing quota info
- if (fputs($fp, "QUOT1 GETQUOTAROOT \"INBOX\"\r\n")){
- do{
+ if (fputs($fp, 'QUOT1 GETQUOTAROOT "INBOX"' . "\r\n")) {
+ do {
$line=chop(iil_ReadLine($fp, 5000));
- if (iil_StartsWith($line, "* QUOTA ")) $quota_line = $line;
- }while(!iil_StartsWith($line, "QUOT1"));
+ if (iil_StartsWith($line, '* QUOTA ')) {
+ $quota_line = $line;
+ }
+ } while (!iil_StartsWith($line, 'QUOT1'));
}
//return false if not found, parse if found
- if (!empty($quota_line)){
- $quota_line = eregi_replace("[()]", "", $quota_line);
- $parts = explode(" ", $quota_line);
- $storage_part = array_search("STORAGE", $parts);
- if ($storage_part>0){
+ if (!empty($quota_line)) {
+ $quota_line = eregi_replace('[()]', '', $quota_line);
+ $parts = explode(' ', $quota_line);
+ $storage_part = array_search('STORAGE', $parts);
+ if ($storage_part > 0) {
$result = array();
- $used = $parts[$storage_part+1];
- $total = $parts[$storage_part+2];
- $result["used"] = $used;
- $result["total"] = (empty($total)?"??":$total);
- $result["percent"] = (empty($total)?"??":round(($used/$total)*100));
- $result["free"] = 100 - $result["percent"];
+ $used = $parts[$storage_part+1];
+ $total = $parts[$storage_part+2];
+
+ $result['used'] = $used;
+ $result['total'] = (empty($total)?"??":$total);
+ $result['percent'] = (empty($total)?"??":round(($used/$total)*100));
+ $result['free'] = 100 - $result['percent'];
}
}
-
return $result;
}
-function iil_C_ClearFolder(&$conn, $folder){
+function iil_C_ClearFolder(&$conn, $folder) {
$num_in_trash = iil_C_CountMessages($conn, $folder);
- if ($num_in_trash > 0) iil_C_Delete($conn, $folder, "1:".$num_in_trash);
+ if ($num_in_trash > 0) {
+ iil_C_Delete($conn, $folder, '1:' . $num_in_trash);
+ }
return (iil_C_Expunge($conn, $folder) >= 0);
}
-
?>
--- /dev/null
+# Magic
+# Magic data for file(1) command.
+# Machine-generated from src/cmd/file/magdir/*; edit there only!
+# Format is described in magic(files), where:
+# files is 5 on V7 and BSD, 4 on SV, and ?? in the SVID.
+
+#------------------------------------------------------------------------------
+# Localstuff: file(1) magic for locally observed files
+#
+# $Id: Localstuff,v 1.4 2003/03/23 04:17:27 christos Exp $
+# Add any locally observed files here. Remember:
+# text if readable, executable if runnable binary, data if unreadable.
+
+#------------------------------------------------------------------------------
+# zyxel: file(1) magic for ZyXEL modems
+#
+# From <rob@pe1chl.ampr.org>
+# These are the /etc/magic entries to decode datafiles as used for the
+# ZyXEL U-1496E DATA/FAX/VOICE modems. (This header conforms to a
+# ZyXEL-defined standard)
+
+0 string ZyXEL\002 ZyXEL voice data
+>10 byte 0 - CELP encoding
+>10 byte&0x0B 1 - ADPCM2 encoding
+>10 byte&0x0B 2 - ADPCM3 encoding
+>10 byte&0x0B 3 - ADPCM4 encoding
+>10 byte&0x0B 8 - New ADPCM3 encoding
+>10 byte&0x04 4 with resync
+
+#------------------------------------------------------------------------------
+# file(1) magic(5) data for xdelta Josh MacDonald <jmacd@CS.Berkeley.EDU>
+#
+0 string %XDELTA% XDelta binary patch file 0.14
+0 string %XDZ000% XDelta binary patch file 0.18
+0 string %XDZ001% XDelta binary patch file 0.20
+0 string %XDZ002% XDelta binary patch file 1.0
+0 string %XDZ003% XDelta binary patch file 1.0.4
+0 string %XDZ004% XDelta binary patch file 1.1
+#------------------------------------------------------------------------
+# sysex: file(1) magic for MIDI sysex files
+#
+#
+0 byte 0xF0 SysEx File -
+
+# North American Group
+>1 byte 0x01 Sequential
+>1 byte 0x02 IDP
+>1 byte 0x03 OctavePlateau
+>1 byte 0x04 Moog
+>1 byte 0x05 Passport
+>1 byte 0x06 Lexicon
+>1 byte 0x07 Kurzweil
+>1 byte 0x08 Fender
+>1 byte 0x09 Gulbransen
+>1 byte 0x0a AKG
+>1 byte 0x0b Voyce
+>1 byte 0x0c Waveframe
+>1 byte 0x0d ADA
+>1 byte 0x0e Garfield
+>1 byte 0x0f Ensoniq
+>1 byte 0x10 Oberheim
+>1 byte 0x11 Apple
+>1 byte 0x12 GreyMatter
+>1 byte 0x14 PalmTree
+>1 byte 0x15 JLCooper
+>1 byte 0x16 Lowrey
+>1 byte 0x17 AdamsSmith
+>1 byte 0x18 E-mu
+>1 byte 0x19 Harmony
+>1 byte 0x1a ART
+>1 byte 0x1b Baldwin
+>1 byte 0x1c Eventide
+>1 byte 0x1d Inventronics
+>1 byte 0x1f Clarity
+
+# European Group
+>1 byte 0x21 SIEL
+>1 byte 0x22 Synthaxe
+>1 byte 0x24 Hohner
+>1 byte 0x25 Twister
+>1 byte 0x26 Solton
+>1 byte 0x27 Jellinghaus
+>1 byte 0x28 Southworth
+>1 byte 0x29 PPG
+>1 byte 0x2a JEN
+>1 byte 0x2b SSL
+>1 byte 0x2c AudioVertrieb
+
+>1 byte 0x2f ELKA
+>>3 byte 0x09 EK-44
+
+>1 byte 0x30 Dynacord
+>1 byte 0x33 Clavia
+>1 byte 0x39 Soundcraft
+
+>1 byte 0x3e Waldorf
+>>3 byte 0x7f Microwave I
+
+# Japanese Group
+>1 byte 0x40 Kawai
+>>3 byte 0x20 K1
+>>3 byte 0x22 K4
+
+>1 byte 0x41 Roland
+>>3 byte 0x14 D-50
+>>3 byte 0x2b U-220
+>>3 byte 0x02 TR-707
+
+>1 byte 0x42 Korg
+>>3 byte 0x19 M1
+
+>1 byte 0x43 Yamaha
+>1 byte 0x44 Casio
+>1 byte 0x46 Kamiya
+>1 byte 0x47 Akai
+>1 byte 0x48 Victor
+>1 byte 0x49 Mesosha
+>1 byte 0x4b Fujitsu
+>1 byte 0x4c Sony
+>1 byte 0x4e Teac
+>1 byte 0x50 Matsushita
+>1 byte 0x51 Fostex
+>1 byte 0x52 Zoom
+>1 byte 0x54 Matsushita
+>1 byte 0x57 Acoustic tech. lab.
+
+>1 belong&0xffffff00 0x00007400 Ta Horng
+>1 belong&0xffffff00 0x00007500 e-Tek
+>1 belong&0xffffff00 0x00007600 E-Voice
+>1 belong&0xffffff00 0x00007700 Midisoft
+>1 belong&0xffffff00 0x00007800 Q-Sound
+>1 belong&0xffffff00 0x00007900 Westrex
+>1 belong&0xffffff00 0x00007a00 Nvidia*
+>1 belong&0xffffff00 0x00007b00 ESS
+>1 belong&0xffffff00 0x00007c00 Mediatrix
+>1 belong&0xffffff00 0x00007d00 Brooktree
+>1 belong&0xffffff00 0x00007e00 Otari
+>1 belong&0xffffff00 0x00007f00 Key Electronics
+>1 belong&0xffffff00 0x00010000 Shure
+>1 belong&0xffffff00 0x00010100 AuraSound
+>1 belong&0xffffff00 0x00010200 Crystal
+>1 belong&0xffffff00 0x00010300 Rockwell
+>1 belong&0xffffff00 0x00010400 Silicon Graphics
+>1 belong&0xffffff00 0x00010500 Midiman
+>1 belong&0xffffff00 0x00010600 PreSonus
+>1 belong&0xffffff00 0x00010800 Topaz
+>1 belong&0xffffff00 0x00010900 Cast Lightning
+>1 belong&0xffffff00 0x00010a00 Microsoft
+>1 belong&0xffffff00 0x00010b00 Sonic Foundry
+>1 belong&0xffffff00 0x00010c00 Line 6
+>1 belong&0xffffff00 0x00010d00 Beatnik Inc.
+>1 belong&0xffffff00 0x00010e00 Van Koerving
+>1 belong&0xffffff00 0x00010f00 Altech Systems
+>1 belong&0xffffff00 0x00011000 S & S Research
+>1 belong&0xffffff00 0x00011100 VLSI Technology
+>1 belong&0xffffff00 0x00011200 Chromatic
+>1 belong&0xffffff00 0x00011300 Sapphire
+>1 belong&0xffffff00 0x00011400 IDRC
+>1 belong&0xffffff00 0x00011500 Justonic Tuning
+>1 belong&0xffffff00 0x00011600 TorComp
+>1 belong&0xffffff00 0x00011700 Newtek Inc.
+>1 belong&0xffffff00 0x00011800 Sound Sculpture
+>1 belong&0xffffff00 0x00011900 Walker Technical
+>1 belong&0xffffff00 0x00011a00 Digital Harmony
+>1 belong&0xffffff00 0x00011b00 InVision
+>1 belong&0xffffff00 0x00011c00 T-Square
+>1 belong&0xffffff00 0x00011d00 Nemesys
+>1 belong&0xffffff00 0x00011e00 DBX
+>1 belong&0xffffff00 0x00011f00 Syndyne
+>1 belong&0xffffff00 0x00012000 Bitheadz
+>1 belong&0xffffff00 0x00012100 Cakewalk
+>1 belong&0xffffff00 0x00012200 Staccato
+>1 belong&0xffffff00 0x00012300 National Semicon.
+>1 belong&0xffffff00 0x00012400 Boom Theory
+>1 belong&0xffffff00 0x00012500 Virtual DSP Corp
+>1 belong&0xffffff00 0x00012600 Antares
+>1 belong&0xffffff00 0x00012700 Angel Software
+>1 belong&0xffffff00 0x00012800 St Louis Music
+>1 belong&0xffffff00 0x00012900 Lyrrus dba G-VOX
+>1 belong&0xffffff00 0x00012a00 Ashley Audio
+>1 belong&0xffffff00 0x00012b00 Vari-Lite
+>1 belong&0xffffff00 0x00012c00 Summit Audio
+>1 belong&0xffffff00 0x00012d00 Aureal Semicon.
+>1 belong&0xffffff00 0x00012e00 SeaSound
+>1 belong&0xffffff00 0x00012f00 U.S. Robotics
+>1 belong&0xffffff00 0x00013000 Aurisis
+>1 belong&0xffffff00 0x00013100 Nearfield Multimedia
+>1 belong&0xffffff00 0x00013200 FM7 Inc.
+>1 belong&0xffffff00 0x00013300 Swivel Systems
+>1 belong&0xffffff00 0x00013400 Hyperactive
+>1 belong&0xffffff00 0x00013500 MidiLite
+>1 belong&0xffffff00 0x00013600 Radical
+>1 belong&0xffffff00 0x00013700 Roger Linn
+>1 belong&0xffffff00 0x00013800 Helicon
+>1 belong&0xffffff00 0x00013900 Event
+>1 belong&0xffffff00 0x00013a00 Sonic Network
+>1 belong&0xffffff00 0x00013b00 Realtime Music
+>1 belong&0xffffff00 0x00013c00 Apogee Digital
+
+>1 belong&0xffffff00 0x00202b00 Medeli Electronics
+>1 belong&0xffffff00 0x00202c00 Charlie Lab
+>1 belong&0xffffff00 0x00202d00 Blue Chip Music
+>1 belong&0xffffff00 0x00202e00 BEE OH Corp
+>1 belong&0xffffff00 0x00202f00 LG Semicon America
+>1 belong&0xffffff00 0x00203000 TESI
+>1 belong&0xffffff00 0x00203100 EMAGIC
+>1 belong&0xffffff00 0x00203200 Behringer
+>1 belong&0xffffff00 0x00203300 Access Music
+>1 belong&0xffffff00 0x00203400 Synoptic
+>1 belong&0xffffff00 0x00203500 Hanmesoft Corp
+>1 belong&0xffffff00 0x00203600 Terratec
+>1 belong&0xffffff00 0x00203700 Proel SpA
+>1 belong&0xffffff00 0x00203800 IBK MIDI
+>1 belong&0xffffff00 0x00203900 IRCAM
+>1 belong&0xffffff00 0x00203a00 Propellerhead Software
+>1 belong&0xffffff00 0x00203b00 Red Sound Systems
+>1 belong&0xffffff00 0x00203c00 Electron ESI AB
+>1 belong&0xffffff00 0x00203d00 Sintefex Audio
+>1 belong&0xffffff00 0x00203e00 Music and More
+>1 belong&0xffffff00 0x00203f00 Amsaro
+>1 belong&0xffffff00 0x00204000 CDS Advanced Technology
+>1 belong&0xffffff00 0x00204100 Touched by Sound
+>1 belong&0xffffff00 0x00204200 DSP Arts
+>1 belong&0xffffff00 0x00204300 Phil Rees Music
+>1 belong&0xffffff00 0x00204400 Stamer Musikanlagen GmbH
+>1 belong&0xffffff00 0x00204500 Soundart
+>1 belong&0xffffff00 0x00204600 C-Mexx Software
+>1 belong&0xffffff00 0x00204700 Klavis Tech.
+>1 belong&0xffffff00 0x00204800 Noteheads AB
+
+0 string T707 Roland TR-707 Data
+
+#------------------------------------------------------------------------------
+# sccs: file(1) magic for SCCS archives
+#
+# SCCS archive structure:
+# \001h01207
+# \001s 00276/00000/00000
+# \001d D 1.1 87/09/23 08:09:20 ian 1 0
+# \001c date and time created 87/09/23 08:09:20 by ian
+# \001e
+# \001u
+# \001U
+# ... etc.
+# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
+# *Sigh*. And these both came from various parts of the USG.
+# Maybe we should just switch everybody from SCCS to RCS!
+# Further, you can't just say '\001h0', because the five-digit number
+# is a checksum that could (presumably) have any leading digit,
+# and we don't have regular expression matching yet.
+# Hence the following official kludge:
+8 string \001s\ SCCS archive data
+#------------------------------------------------------------------------------
+# allegro: file(1) magic for Allegro datafiles
+# Toby Deshane <hac@shoelace.digivill.net>
+#
+0 belong 0x736C6821 Allegro datafile (packed)
+0 belong 0x736C682E Allegro datafile (not packed/autodetect)
+0 belong 0x736C682B Allegro datafile (appended exe data)
+#------------------------------------------------------------------------------
+# file(1) magic for cvs(1) files
+# From Hendrik Scholz <hendrik@scholz.net>
+
+0 string /1\ :pserver: cvs password text file
+
+
+#------------------------------------------------------------------------------
+# vicar: file(1) magic for VICAR files.
+#
+# From: Ossama Othman <othman@astrosun.tn.cornell.edu
+# VICAR is JPL's in-house spacecraft image processing program
+# VICAR image
+0 string LBLSIZE= VICAR image data
+>32 string BYTE \b, 8 bits = VAX byte
+>32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2
+>32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4
+>32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4
+>32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8
+>32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8
+# VICAR label file
+43 string SFDU_LABEL VICAR label file
+
+#------------------------------------------------------------------------------
+# varied.out: file(1) magic for various USG systems
+#
+# Herewith many of the object file formats used by USG systems.
+# Most have been moved to files for a particular processor,
+# and deleted if they duplicate other entries.
+#
+0 short 0610 Perkin-Elmer executable
+# AMD 29K
+0 beshort 0572 amd 29k coff noprebar executable
+0 beshort 01572 amd 29k coff prebar executable
+0 beshort 0160007 amd 29k coff archive
+# Cray
+6 beshort 0407 unicos (cray) executable
+# Ultrix 4.3
+596 string \130\337\377\377 Ultrix core file
+>600 string >\0 from '%s'
+# BeOS and MAcOS PEF executables
+# From: hplus@zilker.net (Jon Watte)
+0 string Joy!peffpwpc header for PowerPC PEF executable
+#
+# ava assembler/linker Uros Platise <uros.platise@ijs.si>
+0 string avaobj AVR assembler object code
+>7 string >\0 version '%s'
+# gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr>
+0 string gmon GNU prof performance data
+>4 long x - version %ld
+# From: Dave Pearson <davep@davep.org>
+# Harbour <URL:http://www.harbour-project.org/> HRB files.
+0 string \xc0HRB Harbour HRB file
+>4 short x version %d
+
+# From: "Stefan A. Haubenthal" <polluks@web.de>
+0 belong 0x000001EB Plan 9 executable
+
+#------------------------------------------------------------------------------
+# c64: file(1) magic for various commodore 64 related files
+#
+# From <doj@cubic.org>
+
+0x16500 belong 0x12014100 D64 Image
+0x16500 belong 0x12014180 D71 Image
+0x61800 belong 0x28034400 D81 Image
+0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image
+0 belong 0x43154164 X64 Image
+
+0 string GCR-1541 GCR Image
+>8 byte x version: $i
+>9 byte x tracks: %i
+
+9 string PSUR ARC archive (c64)
+2 string -LH1- LHA archive (c64)
+
+0 string C64File PC64 Emulator file
+>8 string >\0 "%s"
+0 string C64Image PC64 Freezer Image
+
+0 beshort 0x38CD C64 PCLink Image
+0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot
+
+0 belong 0xFF424CFF WRAptor packer (c64)
+#------------------------------------------------------------------------------
+# games: file(1) for games
+
+# Thomas M. Ott (ThMO)
+1 string =WAD DOOM data,
+>0 string =I main wad
+>0 string =P patch wad
+>0 byte x unknown junk
+
+# Fabio Bonelli <fabiobonelli@libero.it>
+# Quake II - III data files
+0 string IDP2 Quake II 3D Model file,
+>20 long x %lu skin(s),
+>8 long x (%lu x
+>12 long x %lu),
+>40 long x %lu frame(s),
+>16 long x Frame size %lu bytes,
+>24 long x %lu vertices/frame,
+>28 long x %lu texture coordinates,
+>32 long x %lu triangles/frame
+
+0 string IBSP Quake
+>4 long 0x26 II Map file (BSP)
+>4 long 0x2E III Map file (BSP)
+
+0 string IDS2 Quake II SP2 sprite file
+
+#---------------------------------------------------------------------------
+# Doom and Quake
+# submitted by Nicolas Patrois
+
+# DOOM
+
+0 string IWAD DOOM or DOOM ][ world
+0 string PWAD DOOM or DOOM ][ extension world
+
+0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo
+# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01
+
+24 string LxD\ 203 Linuxdoom save
+>0 string x , name=%s
+>44 string x , world=%s
+
+# Quake
+
+0 string PACK Quake I or II world or extension
+
+#0 string -1\x0a Quake I demo
+#>30 string x version %.4s
+#>61 string x level %s
+
+#0 string 5\x0a Quake I save
+
+# The levels
+
+# Quake 1
+
+0 string 5\x0aIntroduction Quake I save: start Introduction
+0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex
+0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned
+0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis
+0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto
+0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret)
+0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep
+0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon
+0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon
+0 string 5\x0athe_Installation Quake I save: e2m1 The installation
+0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel
+0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!)
+0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret)
+0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress
+0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse
+0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette
+0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central
+0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin
+0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror
+0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight
+0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret)
+0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels
+0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment
+0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system
+0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair
+0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine
+0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate
+0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium
+0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret)
+0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze
+0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony
+0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit
+
+# Quake DeathMatch levels
+
+0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths
+0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis
+0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base
+0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place
+0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern
+0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone
+
+# Scourge of Armagon
+
+0 string 5\x0aCommand_HQ Quake I save: start Command HQ
+0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station
+0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility
+0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret)
+0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine
+0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility
+0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms
+0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret)
+0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral
+0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs
+0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt
+0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep
+0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment
+0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium
+0 string 5\x0aLimbo Quake I save: hip3m3 Limbo
+0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret)
+0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet
+0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair
+
+# Malice
+
+0 string 5\x0aThe_Academy Quake I save: start The academy
+0 string 5\x0aThe_Lab Quake I save: d1 The lab
+0 string 5\x0aArea_33 Quake I save: d1b Area 33
+0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions
+0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret)
+0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)
+0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice
+0 string 5\x0aArea44 Quake I save: d1c Area 44
+0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers
+0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life
+0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood
+0 string 5\x0aThe_Flood Quake I save: d5 The flood
+0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant
+0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant
+0 string 5\x0aThe_Foundry Quake I save: d7b The foundry
+0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base
+0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base
+0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories
+0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive
+0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ
+0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown!
+
+# Malice DeathMatch levels
+
+0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct
+0 string 5\x0aSub_Station Quake I save: ddm2 Sub station
+0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights!
+0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa
+0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse
+0 string 5\x0aDOMINO Quake I save: ddm6 Domino
+0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder
+
+
+0 string MComprHD MAME CHD compressed hard disk image,
+>12 belong x version %lu
+#------------------------------------------------------------------------------
+# Mavroyanopoulos Nikos <nmav@hellug.gr>
+# mcrypt: file(1) magic for mcrypt 2.2.x;
+0 string \0m\3 mcrypt 2.5 encrypted data,
+>4 string >\0 algorithm: %s,
+>>&1 leshort >0 keysize: %d bytes,
+>>>&0 string >\0 mode: %s,
+
+0 string \0m\2 mcrypt 2.2 encrypted data,
+>3 byte 0 algorithm: blowfish-448,
+>3 byte 1 algorithm: DES,
+>3 byte 2 algorithm: 3DES,
+>3 byte 3 algorithm: 3-WAY,
+>3 byte 4 algorithm: GOST,
+>3 byte 6 algorithm: SAFER-SK64,
+>3 byte 7 algorithm: SAFER-SK128,
+>3 byte 8 algorithm: CAST-128,
+>3 byte 9 algorithm: xTEA,
+>3 byte 10 algorithm: TWOFISH-128,
+>3 byte 11 algorithm: RC2,
+>3 byte 12 algorithm: TWOFISH-192,
+>3 byte 13 algorithm: TWOFISH-256,
+>3 byte 14 algorithm: blowfish-128,
+>3 byte 15 algorithm: blowfish-192,
+>3 byte 16 algorithm: blowfish-256,
+>3 byte 100 algorithm: RC6,
+>3 byte 101 algorithm: IDEA,
+>4 byte 0 mode: CBC,
+>4 byte 1 mode: ECB,
+>4 byte 2 mode: CFB,
+>4 byte 3 mode: OFB,
+>4 byte 4 mode: nOFB,
+>5 byte 0 keymode: 8bit
+>5 byte 1 keymode: 4bit
+>5 byte 2 keymode: SHA-1 hash
+>5 byte 3 keymode: MD5 hash
+
+#------------------------------------------------------------------------------
+# archive: file(1) magic for archive formats (see also "msdos" for self-
+# extracting compressed archives)
+#
+# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
+# pre-POSIX "tar" archives are handled in the C code.
+
+# POSIX tar archives
+257 string ustar\0 POSIX tar archive
+257 string ustar\040\040\0 GNU tar archive
+
+# cpio archives
+#
+# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
+# The idea is to indicate archives produced on machines with the same
+# byte order as the machine running "file" with "cpio archive", and
+# to indicate archives produced on machines with the opposite byte order
+# from the machine running "file" with "byte-swapped cpio archive".
+#
+# The SVR4 "cpio(4)" hints that there are additional formats, but they
+# are defined as "short"s; I think all the new formats are
+# character-header formats and thus are strings, not numbers.
+0 short 070707 cpio archive
+0 short 0143561 byte-swapped cpio archive
+0 string 070707 ASCII cpio archive (pre-SVR4 or odc)
+0 string 070701 ASCII cpio archive (SVR4 with no CRC)
+0 string 070702 ASCII cpio archive (SVR4 with CRC)
+
+# Debian package (needs to go before regular portable archives)
+#
+0 string !<arch>\ndebian
+>8 string debian-split part of multipart Debian package
+>8 string debian-binary Debian binary package
+>68 string >\0 (format %s)
+>81 string bz2 \b, uses bzip2 compression
+>84 string gz \b, uses gzip compression
+#>136 ledate x created: %s
+
+# other archives
+0 long 0177555 very old archive
+0 short 0177555 very old PDP-11 archive
+0 long 0177545 old archive
+0 short 0177545 old PDP-11 archive
+0 long 0100554 apl workspace
+0 string =<ar> archive
+
+# MIPS archive (needs to go before regular portable archives)
+#
+0 string !<arch>\n__________E MIPS archive
+>20 string U with MIPS Ucode members
+>21 string L with MIPSEL members
+>21 string B with MIPSEB members
+>19 string L and an EL hash table
+>19 string B and an EB hash table
+>22 string X -- out of date
+
+0 string -h- Software Tools format archive text
+
+#
+# XXX - why are there multiple <ar> thingies? Note that 0x213c6172 is
+# "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have:
+#
+# 0 string !<arch> current ar archive
+# 0 long 0x213c6172 archive file
+#
+# and for SVR1 archives, we have:
+#
+# 0 string \<ar> System V Release 1 ar archive
+# 0 string =<ar> archive
+#
+# XXX - did Aegis really store shared libraries, breakpointed modules,
+# and absolute code program modules in the same format as new-style
+# "ar" archives?
+#
+0 string !<arch> current ar archive
+>8 string __.SYMDEF random library
+>0 belong =65538 - pre SR9.5
+>0 belong =65539 - post SR9.5
+>0 beshort 2 - object archive
+>0 beshort 3 - shared library module
+>0 beshort 4 - debug break-pointed module
+>0 beshort 5 - absolute code program module
+0 string \<ar> System V Release 1 ar archive
+0 string =<ar> archive
+#
+# XXX - from "vax", which appears to collect a bunch of byte-swapped
+# thingies, to help you recognize VAX files on big-endian machines;
+# with "leshort", "lelong", and "string", that's no longer necessary....
+#
+0 belong 0x65ff0000 VAX 3.0 archive
+0 belong 0x3c61723e VAX 5.0 archive
+#
+0 long 0x213c6172 archive file
+0 lelong 0177555 very old VAX archive
+0 leshort 0177555 very old PDP-11 archive
+#
+# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus
+# be a random library (it said 0xff65 rather than 0177545).
+#
+0 lelong 0177545 old VAX archive
+>8 string __.SYMDEF random library
+0 leshort 0177545 old PDP-11 archive
+>8 string __.SYMDEF random library
+#
+# From "pdp" (but why a 4-byte quantity?)
+#
+0 lelong 0x39bed PDP-11 old archive
+0 lelong 0x39bee PDP-11 4.0 archive
+
+# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
+#
+# The first byte is the magic (0x1a), byte 2 is the compression type for
+# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
+# filename of the first file (null terminated). Since some types collide
+# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
+# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo.
+0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW
+0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed
+0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed
+0 lelong&0x8080ffff 0x0000031a ARC archive data, packed
+0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed
+0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched
+
+# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)
+# I can't create either SPARK or ArcFS archives so I have not tested this stuff
+# [GRR: the original entries collide with ARC, above; replaced with combined
+# version (not tested)]
+#0 byte 0x1a RISC OS archive
+#>1 string archive (ArcFS format)
+#0 string \032archive RISC OS archive (ArcFS format)
+0 string \032 RISC OS archive (spark format)
+0 string Archive\000 RISC OS archive (ArcFS format)
+
+# ARJ archiver (jason@jarthur.Claremont.EDU)
+0 leshort 0xea60 ARJ archive data
+>5 byte x \b, v%d,
+>8 byte &0x04 multi-volume,
+>8 byte &0x10 slash-switched,
+>8 byte &0x20 backup,
+>34 string x original name: %s,
+>7 byte 0 os: MS-DOS
+>7 byte 1 os: PRIMOS
+>7 byte 2 os: Unix
+>7 byte 3 os: Amiga
+>7 byte 4 os: Macintosh
+>7 byte 5 os: OS/2
+>7 byte 6 os: Apple ][ GS
+>7 byte 7 os: Atari ST
+>7 byte 8 os: NeXT
+>7 byte 9 os: VAX/VMS
+>3 byte >0 %d]
+
+# HA archiver (Greg Roelofs, newt@uchicago.edu)
+# This is a really bad format. A file containing HAWAII will match this...
+#0 string HA HA archive data,
+#>2 leshort =1 1 file,
+#>2 leshort >1 %u files,
+#>4 byte&0x0f =0 first is type CPY
+#>4 byte&0x0f =1 first is type ASC
+#>4 byte&0x0f =2 first is type HSC
+#>4 byte&0x0f =0x0e first is type DIR
+#>4 byte&0x0f =0x0f first is type SPECIAL
+
+# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
+0 string HPAK HPACK archive data
+
+# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
+0 string \351,\001JAM\ JAM archive,
+>7 string >\0 version %.4s
+>0x26 byte =0x27 -
+>>0x2b string >\0 label %.11s,
+>>0x27 lelong x serial %08x,
+>>0x36 string >\0 fstype %.8s
+
+# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
+2 string -lh0- LHarc 1.x archive data [lh0]
+2 string -lh1- LHarc 1.x archive data [lh1]
+2 string -lz4- LHarc 1.x archive data [lz4]
+2 string -lz5- LHarc 1.x archive data [lz5]
+# [never seen any but the last; -lh4- reported in comp.compression:]
+2 string -lzs- LHa 2.x? archive data [lzs]
+2 string -lh\40- LHa 2.x? archive data [lh ]
+2 string -lhd- LHa 2.x? archive data [lhd]
+2 string -lh2- LHa 2.x? archive data [lh2]
+2 string -lh3- LHa 2.x? archive data [lh3]
+2 string -lh4- LHa (2.x) archive data [lh4]
+2 string -lh5- LHa (2.x) archive data [lh5]
+2 string -lh6- LHa (2.x) archive data [lh6]
+2 string -lh7- LHa (2.x) archive data [lh7]
+>20 byte x - header level %d
+
+# RAR archiver (Greg Roelofs, newt@uchicago.edu)
+0 string Rar! RAR archive data,
+>44 byte x v%0x,
+>35 byte 0 os: MS-DOS
+>35 byte 1 os: OS/2
+>35 byte 2 os: Win32
+>35 byte 3 os: Unix
+
+# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)
+0 string SQSH squished archive data (Acorn RISCOS)
+
+# UC2 archiver (Greg Roelofs, newt@uchicago.edu)
+# I can't figure out the self-extracting form of these buggers...
+0 string UC2\x1a UC2 archive data
+
+# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
+0 string PK\003\004 Zip archive data
+>4 byte 0x09 \b, at least v0.9 to extract
+>4 byte 0x0a \b, at least v1.0 to extract
+>4 byte 0x0b \b, at least v1.1 to extract
+>4 byte 0x14 \b, at least v2.0 to extract
+
+# Zoo archiver
+20 lelong 0xfdc4a7dc Zoo archive data
+>4 byte >48 \b, v%c.
+>>6 byte >47 \b%c
+>>>7 byte >47 \b%c
+>32 byte >0 \b, modify: v%d
+>>33 byte x \b.%d+
+>42 lelong 0xfdc4a7dc \b,
+>>70 byte >0 extract: v%d
+>>>71 byte x \b.%d+
+
+# Shell archives
+10 string #\ This\ is\ a\ shell\ archive shell archive text
+
+#
+# LBR. NB: May conflict with the questionable
+# "binary Computer Graphics Metafile" format.
+#
+0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data
+#
+# PMA (CP/M derivative of LHA)
+#
+2 string -pm0- PMarc archive data [pm0]
+2 string -pm1- PMarc archive data [pm1]
+2 string -pm2- PMarc archive data [pm2]
+2 string -pms- PMarc SFX archive (CP/M, DOS)
+5 string -pc1- PopCom compressed executable (CP/M)
+
+# From Rafael Laboissiere <rafael@laboissiere.net>
+# The Project Revision Control System (see
+# http://prcs.sourceforge.net) generates a packaged project
+# file which is recognized by the following entry:
+0 leshort 0xeb81 PRCS packaged project
+
+# Microsoft cabinets
+# by David Necas (Yeti) <yeti@physics.muni.cz>
+#0 string MSCF\0\0\0\0 Microsoft cabinet file data,
+#>25 byte x v%d
+#>24 byte x \b.%d
+# MPi: All CABs have version 1.3, so this is pointless.
+# Better magic in debian-additions.
+
+# GTKtalog catalogs
+# by David Necas (Yeti) <yeti@physics.muni.cz>
+4 string gtktalog\ GTKtalog catalog data,
+>13 string 3 version 3
+>>14 beshort 0x677a (gzipped)
+>>14 beshort !0x677a (not gzipped)
+>13 string >3 version %s
+
+############################################################################
+# Parity archive reconstruction file, the 'par' file format now used on Usenet.
+0 string PAR\0 PARity archive data
+>48 leshort =0 - Index file
+>48 leshort >0 - file number %d
+
+# Felix von Leitner <felix-file@fefe.de>
+0 string d8:announce BitTorrent file
+
+# Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi>
+0 beshort 0x0e0f Atari MSA archive data
+>2 beshort x \b, %d sectors per track
+>4 beshort 0 \b, 1 sided
+>4 beshort 1 \b, 2 sided
+>6 beshort x \b, starting track: %d
+>8 beshort x \b, ending track: %d
+
+# Alternate ZIP string (amc@arwen.cs.berkeley.edu)
+0 string PK00PK\003\004 Zip archive data
+
+# ACE archive (from http://www.wotsit.org/download.asp?f=ace)
+# by Stefan `Sec` Zehl <sec@42.org>
+7 string **ACE** ACE compressed archive
+>15 byte >0 version %d
+>16 byte =0x00 \b, from MS-DOS
+>16 byte =0x01 \b, from OS/2
+>16 byte =0x02 \b, from Win/32
+>16 byte =0x03 \b, from Unix
+>16 byte =0x04 \b, from MacOS
+>16 byte =0x05 \b, from WinNT
+>16 byte =0x06 \b, from Primos
+>16 byte =0x07 \b, from AppleGS
+>16 byte =0x08 \b, from Atari
+>16 byte =0x09 \b, from Vax/VMS
+>16 byte =0x0A \b, from Amiga
+>16 byte =0x0B \b, from Next
+>14 byte x \b, version %d to extract
+>5 leshort &0x0080 \b, multiple volumes,
+>>17 byte x \b (part %d),
+>5 leshort &0x0002 \b, contains comment
+>5 leshort &0x0200 \b, sfx
+>5 leshort &0x0400 \b, small dictionary
+>5 leshort &0x0800 \b, multi-volume
+>5 leshort &0x1000 \b, contains AV-String
+>>30 string\x16*UNREGISTERED\x20VERSION* (unregistered)
+>5 leshort &0x2000 \b, with recovery record
+>5 leshort &0x4000 \b, locked
+>5 leshort &0x8000 \b, solid
+# Date in MS-DOS format (whatever that is)
+#>18 lelong x Created on
+
+# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann
+# <doj@cubic.org>
+0x1A string sfArk sfArk compressed Soundfont
+>0x15 string 2
+>>0x1 string >\0 Version %s
+>>0x2A string >\0 : %s
+
+#------------------------------------------------------------------------------
+# citrus locale declaration
+#
+
+0 string RuneCT Citrus locale declaration for LC_CTYPE
+
+
+#------------------------------------------------------------------------------
+# compress: file(1) magic for pure-compression formats (no archives)
+#
+# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
+#
+# Formats for various forms of compressed data
+# Formats for "compress" proper have been moved into "compress.c",
+# because it tries to uncompress it to figure out what's inside.
+
+# standard unix compress
+0 string \037\235 compress'd data
+>2 byte&0x80 >0 block compressed
+>2 byte&0x1f x %d bits
+
+# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
+# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
+# * Original filename is only at offset 10 if "extra field" absent
+# * Produce shorter output - notably, only report compression methods
+# other than 8 ("deflate", the only method defined in RFC 1952).
+0 string \037\213 gzip compressed data
+>2 byte <8 \b, reserved method
+>2 byte >8 \b, unknown method
+>3 byte &0x01 \b, ASCII
+>3 byte &0x02 \b, continuation
+>3 byte &0x04 \b, extra field
+>3 byte&0xC =0x08
+>>10 string x \b, was "%s"
+>9 byte =0x00 \b, from MS-DOS
+>9 byte =0x01 \b, from Amiga
+>9 byte =0x02 \b, from VMS
+>9 byte =0x03 \b, from Unix
+>9 byte =0x05 \b, from Atari
+>9 byte =0x06 \b, from OS/2
+>9 byte =0x07 \b, from MacOS
+>9 byte =0x0A \b, from Tops/20
+>9 byte =0x0B \b, from Win/32
+>3 byte &0x10 \b, comment
+>3 byte &0x20 \b, encrypted
+### >4 ledate x last modified: %s,
+>8 byte 2 \b, max compression
+>8 byte 4 \b, max speed
+
+# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
+0 string \037\036 packed data
+>2 belong >1 \b, %d characters originally
+>2 belong =1 \b, %d character originally
+#
+# This magic number is byte-order-independent.
+0 short 0x1f1f old packed data
+
+# XXX - why *two* entries for "compacted data", one of which is
+# byte-order independent, and one of which is byte-order dependent?
+#
+0 short 0x1fff compacted data
+# This string is valid for SunOS (BE) and a matching "short" is listed
+# in the Ultrix (LE) magic file.
+0 string \377\037 compacted data
+0 short 0145405 huf output
+
+# bzip2
+0 string BZh bzip2 compressed data
+>3 byte >47 \b, block size = %c00k
+
+# squeeze and crunch
+# Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
+0 beshort 0x76FF squeezed data,
+>4 string x original name %s
+0 beshort 0x76FE crunched data,
+>2 string x original name %s
+0 beshort 0x76FD LZH compressed data,
+>2 string x original name %s
+
+# Freeze
+0 string \037\237 frozen file 2.1
+0 string \037\236 frozen file 1.0 (or gzip 0.5)
+
+# SCO compress -H (LZH)
+0 string \037\240 SCO compress -H (LZH) data
+
+# European GSM 06.10 is a provisional standard for full-rate speech
+# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
+# excitation/long term prediction) coding at 13 kbit/s.
+#
+# There's only a magic nibble (4 bits); that nibble repeats every 33
+# bytes. This isn't suited for use, but maybe we can use it someday.
+#
+# This will cause very short GSM files to be declared as data and
+# mismatches to be declared as data too!
+#0 byte&0xF0 0xd0 data
+#>33 byte&0xF0 0xd0
+#>66 byte&0xF0 0xd0
+#>99 byte&0xF0 0xd0
+#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio
+
+# bzip a block-sorting file compressor
+# by Julian Seward <sewardj@cs.man.ac.uk> and others
+#
+0 string BZ bzip compressed data
+>2 byte x \b, version: %c
+>3 string =1 \b, compression block size 100k
+>3 string =2 \b, compression block size 200k
+>3 string =3 \b, compression block size 300k
+>3 string =4 \b, compression block size 400k
+>3 string =5 \b, compression block size 500k
+>3 string =6 \b, compression block size 600k
+>3 string =7 \b, compression block size 700k
+>3 string =8 \b, compression block size 800k
+>3 string =9 \b, compression block size 900k
+
+# lzop from <markus.oberhumer@jk.uni-linz.ac.at>
+0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data
+>9 beshort <0x0940
+>>9 byte&0xf0 =0x00 - version 0.
+>>9 beshort&0x0fff x \b%03x,
+>>13 byte 1 LZO1X-1,
+>>13 byte 2 LZO1X-1(15),
+>>13 byte 3 LZO1X-999,
+## >>22 bedate >0 last modified: %s,
+>>14 byte =0x00 os: MS-DOS
+>>14 byte =0x01 os: Amiga
+>>14 byte =0x02 os: VMS
+>>14 byte =0x03 os: Unix
+>>14 byte =0x05 os: Atari
+>>14 byte =0x06 os: OS/2
+>>14 byte =0x07 os: MacOS
+>>14 byte =0x0A os: Tops/20
+>>14 byte =0x0B os: WinNT
+>>14 byte =0x0E os: Win32
+>9 beshort >0x0939
+>>9 byte&0xf0 =0x00 - version 0.
+>>9 byte&0xf0 =0x10 - version 1.
+>>9 byte&0xf0 =0x20 - version 2.
+>>9 beshort&0x0fff x \b%03x,
+>>15 byte 1 LZO1X-1,
+>>15 byte 2 LZO1X-1(15),
+>>15 byte 3 LZO1X-999,
+## >>25 bedate >0 last modified: %s,
+>>17 byte =0x00 os: MS-DOS
+>>17 byte =0x01 os: Amiga
+>>17 byte =0x02 os: VMS
+>>17 byte =0x03 os: Unix
+>>17 byte =0x05 os: Atari
+>>17 byte =0x06 os: OS/2
+>>17 byte =0x07 os: MacOS
+>>17 byte =0x0A os: Tops/20
+>>17 byte =0x0B os: WinNT
+>>17 byte =0x0E os: Win32
+
+# 4.3BSD-Quasijarus Strong Compression
+# http://minnie.tuhs.org/Quasijarus/compress.html
+0 string \037\241 Quasijarus strong compressed data
+
+# From: Cory Dikkers <cdikkers@swbell.net>
+0 string XPKF Amiga xpkf.library compressed data
+0 string PP11 Power Packer 1.1 compressed data
+0 string PP20 Power Packer 2.0 compressed data,
+>4 belong 0x09090909 fast compression
+>4 belong 0x090A0A0A mediocre compression
+>4 belong 0x090A0B0B good compression
+>4 belong 0x090A0C0C very good compression
+>4 belong 0x090A0C0D best compression
+
+# 7z archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)
+# http://www.7-zip.org or DOC/7zFormat.txt
+#
+0 string 7z\274\257\047\034 7z archive data,
+>6 byte x version %d
+>7 byte x \b.%d
+
+# AFX compressed files (Wolfram Kleff)
+2 string -afx- AFX compressed file data
+
+#------------------------------------------------------------------------------
+# fsav: file(1) magic for datafellows fsav virus definition files
+# Anthon van der Neut (anthon@mnt.org)
+0 beshort 0x1575 fsav (linux) macro virus
+>8 leshort >0 (%d-
+>11 byte >0 \b%02d-
+>10 byte >0 \b%02d)
+
+# comment this out for now because it regognizes every file where
+# the eighth character is \n
+#8 byte 0x0a
+#>12 byte 0x07
+#>11 leshort >0 fsav (linux) virus (%d-
+#>10 byte 0 \b01-
+#>10 byte 1 \b02-
+#>10 byte 2 \b03-
+#>10 byte 3 \b04-
+#>10 byte 4 \b05-
+#>10 byte 5 \b06-
+#>10 byte 6 \b07-
+#>10 byte 7 \b08-
+#>10 byte 8 \b08-
+#>10 byte 9 \b10-
+#>10 byte 10 \b11-
+#>10 byte 11 \b12-
+#>9 byte >0 \b%02d)
+
+#------------------------------------------------------------------------------
+# GEOS files (Vidar Madsen, vidar@gimp.org)
+# semi-commonly used in embedded and handheld systems.
+0 belong 0xc745c153 GEOS
+>40 byte 1 executable
+>40 byte 2 VMFile
+>40 byte 3 binary
+>40 byte 4 directory label
+>40 byte <1 unknown
+>40 byte >4 unknown
+>4 string >\0 \b, name "%s"
+#>44 short x \b, version %d
+#>46 short x \b.%d
+#>48 short x \b, rev %d
+#>50 short x \b.%d
+#>52 short x \b, proto %d
+#>54 short x \br%d
+#>168 string >\0 \b, copyright "%s"
+#------------------------------------------------------------
+# Java ByteCode
+# From Larry Schwimmer (schwim@cs.stanford.edu)
+0 belong 0xcafebabe compiled Java class data,
+>6 beshort x version %d.
+>4 beshort x \b%d
+#------------------------------------------------------------
+# Java serialization
+# From Martin Pool (m.pool@pharos.com.au)
+0 beshort 0xaced Java serialization data
+>2 beshort >0x0004 \b, version %d
+
+#------------------------------------------------------------------------------
+# mlssa: file(1) magic for MLSSA datafiles
+#
+0 lelong 0xffffabcd MLSSA datafile,
+>4 leshort x algorithm %d,
+>10 lelong x %d samples
+
+#------------------------------------------------------------------------------
+# mmdf: file(1) magic for MMDF mail files
+#
+0 string \001\001\001\001 MMDF mailbox
+
+#------------------------------------------------------------------------------
+# msdos: file(1) magic for MS-DOS files
+#
+
+# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
+0 string/c @echo\ off MS-DOS batch file text
+
+# XXX - according to Microsoft's spec, at an offset of 0x3c in a
+# PE-format executable is the offset in the file of the PE header;
+# unfortunately, that's a little-endian offset, and there's no way
+# to specify an indirect offset with a specified byte order.
+# So, for now, we assume the standard MS-DOS stub, which puts the
+# PE header at 0x80 = 128.
+#
+# Required OS version and subsystem version were 4.0 on some NT 3.51
+# executables built with Visual C++ 4.0, so it's not clear that
+# they're interesting. The user version was 0.0, but there's
+# probably some linker directive to set it. The linker version was
+# 3.0, except for one ".exe" which had it as 4.20 (same damn linker!).
+#
+128 string PE\0\0 MS Windows PE
+>150 leshort&0x0100 >0 32-bit
+>132 leshort 0x0 unknown processor
+>132 leshort 0x14c Intel 80386
+>132 leshort 0x166 MIPS R4000
+>132 leshort 0x184 Alpha
+>132 leshort 0x268 Motorola 68000
+>132 leshort 0x1f0 PowerPC
+>132 leshort 0x290 PA-RISC
+>148 leshort >27
+>>220 leshort 0 unknown subsystem
+>>220 leshort 1 native
+>>220 leshort 2 GUI
+>>220 leshort 3 console
+>>220 leshort 7 POSIX
+>150 leshort&0x2000 =0 executable
+#>>136 ledate x stamp %s,
+>>150 leshort&0x0001 >0 not relocatable
+#>>150 leshort&0x0004 =0 with line numbers,
+#>>150 leshort&0x0008 =0 with local symbols,
+#>>150 leshort&0x0200 =0 with debug symbols,
+>>150 leshort&0x1000 >0 system file
+#>>148 leshort >0
+#>>>154 byte x linker %d
+#>>>155 byte x \b.%d,
+#>>148 leshort >27
+#>>>192 leshort x requires OS %d
+#>>>194 leshort x \b.%d,
+#>>>196 leshort x user version %d
+#>>>198 leshort x \b.%d,
+#>>>200 leshort x subsystem version %d
+#>>>202 leshort x \b.%d,
+>150 leshort&0x2000 >0 DLL
+#>>136 ledate x stamp %s,
+>>150 leshort&0x0001 >0 not relocatable
+#>>150 leshort&0x0004 =0 with line numbers,
+#>>150 leshort&0x0008 =0 with local symbols,
+#>>150 leshort&0x0200 =0 with debug symbols,
+>>150 leshort&0x1000 >0 system file
+#>>148 leshort >0
+#>>>154 byte x linker %d
+#>>>155 byte x \b.%d,
+#>>148 leshort >27
+#>>>192 leshort x requires OS %d
+#>>>194 leshort x \b.%d,
+#>>>196 leshort x user version %d
+#>>>198 leshort x \b.%d,
+#>>>200 leshort x subsystem version %d
+#>>>202 leshort x \b.%d,
+0 leshort 0x14c MS Windows COFF Intel 80386 object file
+#>4 ledate x stamp %s
+0 leshort 0x166 MS Windows COFF MIPS R4000 object file
+#>4 ledate x stamp %s
+0 leshort 0x184 MS Windows COFF Alpha object file
+#>4 ledate x stamp %s
+0 leshort 0x268 MS Windows COFF Motorola 68000 object file
+#>4 ledate x stamp %s
+0 leshort 0x1f0 MS Windows COFF PowerPC object file
+#>4 ledate x stamp %s
+0 leshort 0x290 MS Windows COFF PA-RISC object file
+#>4 ledate x stamp %s
+
+# .EXE formats (Greg Roelofs, newt@uchicago.edu)
+#
+0 string MZ MS-DOS executable (EXE)
+>24 string @ \b, OS/2 or MS Windows
+>>0xe7 string LH/2\ Self-Extract \b, %s
+>>0xe9 string PKSFX2 \b, %s
+>>122 string Windows\ self-extracting\ ZIP \b, %s
+>0x1c string RJSX\xff\xff \b, ARJ SFX
+>0x1c string diet\xf9\x9c \b, diet compressed
+>0x1c string LZ09 \b, LZEXE v0.90 compressed
+>0x1c string LZ91 \b, LZEXE v0.91 compressed
+>0x1e string Copyright\ 1989-1990\ PKWARE\ Inc. \b, PKSFX
+# JM: 0x1e "PKLITE Copr. 1990-92 PKWARE Inc. All Rights Reserved\7\0\0\0"
+>0x1e string PKLITE\ Copr. \b, %.6s compressed
+>0x24 string LHa's\ SFX \b, %.15s
+>0x24 string LHA's\ SFX \b, %.15s
+>1638 string -lh5- \b, LHa SFX archive v2.13S
+>7195 string Rar! \b, RAR self-extracting archive
+#
+# [GRR 950118: file 3.15 has a buffer-size limitation; offsets bigger than
+# 8161 bytes are ignored. To make the following entries work, increase
+# HOWMANY in file.h to 32K at least, and maybe to 70K or more for OS/2,
+# NT/Win32 and VMS.]
+# [GRR: some company sells a self-extractor/displayer for image data(!)]
+#
+>11696 string PK\003\004 \b, PKZIP SFX archive v1.1
+>13297 string PK\003\004 \b, PKZIP SFX archive v1.93a
+>15588 string PK\003\004 \b, PKZIP2 SFX archive v1.09
+>15770 string PK\003\004 \b, PKZIP SFX archive v2.04g
+>28374 string PK\003\004 \b, PKZIP2 SFX archive v1.02
+#
+# Info-ZIP self-extractors
+# these are the DOS versions:
+>25115 string PK\003\004 \b, Info-ZIP SFX archive v5.12
+>26331 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
+# these are the OS/2 versions (OS/2 is flagged above):
+>47031 string PK\003\004 \b, Info-ZIP SFX archive v5.12
+>49845 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
+# this is the NT/Win32 version:
+>69120 string PK\003\004 \b, Info-ZIP NT SFX archive v5.12 w/decryption
+#
+# TELVOX Teleinformatica CODEC self-extractor for OS/2:
+>49801 string \x79\xff\x80\xff\x76\xff \b, CODEC archive v3.21
+>>49824 leshort =1 \b, 1 file
+>>49824 leshort >1 \b, %u files
+
+# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)
+# Uncommenting only the first two lines will cover about 2/3 of COM files,
+# but it isn't feasible to match all COM files since there must be at least
+# two dozen different one-byte "magics".
+#0 byte 0xe9 MS-DOS executable (COM)
+#>6 string SFX\ of\ LHarc (%s)
+#0 byte 0x8c MS-DOS executable (COM)
+# 0xeb conflicts with "sequent" magic
+#0 byte 0xeb MS-DOS executable (COM)
+#0 byte 0xb8 MS-DOS executable (COM)
+
+# miscellaneous formats
+0 string LZ MS-DOS executable (built-in)
+#0 byte 0xf0 MS-DOS program library data
+#
+
+#
+# Windows Registry files.
+#
+0 string regf Windows NT registry file
+0 string CREG Windows 95 registry file
+
+
+# AAF files:
+# <stuartc@rd.bbc.co.uk> Stuart Cunningham
+0 string \320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377 AAF legacy file using MS Structured Storage
+>30 byte 9 (512B sectors)
+>30 byte 12 (4kB sectors)
+0 string \320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001 AAF file using MS Structured Storage
+>30 byte 9 (512B sectors)
+>30 byte 12 (4kB sectors)
+
+# Popular applications
+2080 string Microsoft\ Word\ 6.0\ Document %s
+2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
+# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)
+2112 string MSWordDoc Microsoft Word document data
+#
+0 belong 0x31be0000 Microsoft Word Document
+#
+0 string PO^Q` Microsoft Word 6.0 Document
+#
+0 string \376\067\0\043 Microsoft Office Document
+0 string \320\317\021\340\241\261\032\341 Microsoft Office Document
+0 string \333\245-\0\0\0 Microsoft Office Document
+#
+2080 string Microsoft\ Excel\ 5.0\ Worksheet %s
+2080 string Foglio\ di\ lavoro\ Microsoft\ Exce %s
+#
+# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
+2114 string Biff5 Microsoft Excel 5.0 Worksheet
+# Italian MS-Excel
+2121 string Biff5 Microsoft Excel 5.0 Worksheet
+0 string \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet
+#
+0 belong 0x00001a00 Lotus 1-2-3
+>4 belong 0x00100400 wk3 document data
+>4 belong 0x02100400 wk4 document data
+>4 belong 0x07800100 fm3 or fmb document data
+>4 belong 0x07800000 fm3 or fmb document data
+#
+0 belong 0x00000200 Lotus 1-2-3
+>4 belong 0x06040600 wk1 document data
+>4 belong 0x06800200 fmt document data
+
+# Help files
+0 string ?_\3\0 MS Windows Help Data
+
+# DeIsL1.isu what this is I don't know
+0 string \161\250\000\000\001\002 DeIsL1.isu whatever that is
+
+# Winamp .avs
+#0 string Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
+0 string Nullsoft\ AVS\ Preset\ Winamp plug in
+
+# Hyper terminal:
+0 string HyperTerminal\ hyperterm
+>15 string 1.0\ --\ HyperTerminal\ data\ file MS-windows Hyperterminal
+
+# Windows Metafont .WMF
+0 string \327\315\306\232\000\000\000\000\000\000 ms-windows metafont .wmf
+
+#tz3 files whatever that is (MS Works files)
+0 string \003\001\001\004\070\001\000\000 tz3 ms-works file
+0 string \003\002\001\004\070\001\000\000 tz3 ms-works file
+0 string \003\003\001\004\070\001\000\000 tz3 ms-works file
+
+# PGP sig files .sig
+#0 string \211\000\077\003\005\000\063\237\127 065 to \027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
+
+# windows zips files .dmf
+0 string MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 Ms-windows special zipped file
+
+
+# Windows help file FTG FTS
+0 string \164\146\115\122\012\000\000\000\001\000\000\000 ms-windows help cache
+
+# grp old windows 3.1 group files
+0 string \120\115\103\103 Ms-windows 3.1 group files
+
+
+# lnk files windows symlinks
+0 string \114\000\000\000\001\024\002\000\000\000\000\000\300\000\000\000\000\000\000\106 ms-Windows shortcut
+
+#ico files
+0 string \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for ms-windows
+
+# Windows icons (Ian Springer <ips@fpk.hp.com>)
+0 string \000\000\001\000 ms-windows icon resource
+>4 byte 1 - 1 icon
+>4 byte >1 - %d icons
+>>6 byte >0 \b, %dx
+>>>7 byte >0 \b%d
+>>8 byte 0 \b, 256-colors
+>>8 byte >0 \b, %d-colors
+
+
+# .chr files
+0 string PK\010\010BGI Borland font
+>4 string >\0 %s
+# then there is a copyright notice
+
+
+# .bgi files
+0 string pk\010\010BGI Borland device
+>4 string >\0 %s
+# then there is a copyright notice
+
+
+# recycled/info the windows trash bin index
+9 string \000\000\000\030\001\000\000\000 ms-windows recycled bin info
+
+
+##### put in Either Magic/font or Magic/news
+# Acroread or something files wrongly identified as G3 .pfm
+# these have the form \000 \001 any? \002 \000 \000
+# or \000 \001 any? \022 \000 \000
+#0 string \000\001 pfm?
+#>3 string \022\000\000Copyright\ yes
+#>3 string \002\000\000Copyright\ yes
+#>3 string >\0 oops, not a font file. Cancel that.
+#it clashes with ttf files so put it lower down.
+
+# From Doug Lee via a FreeBSD pr
+9 string GERBILDOC First Choice document
+9 string GERBILDB First Choice database
+9 string GERBILCLIP First Choice database
+0 string GERBIL First Choice device file
+9 string RABBITGRAPH RabbitGraph file
+0 string DCU1 Borland Delphi .DCU file
+0 string !<spell> MKS Spell hash list (old format)
+0 string !<spell2> MKS Spell hash list
+# Too simple - MPi
+#0 string AH Halo(TM) bitmapped font file
+0 lelong 0x08086b70 TurboC BGI file
+0 lelong 0x08084b50 TurboC Font file
+
+# WARNING: below line conflicts with Infocom game data Z-machine 3
+0 byte 0x03 DBase 3 data file
+>0x04 lelong 0 (no records)
+>0x04 lelong >0 (%ld records)
+0 byte 0x83 DBase 3 data file with memo(s)
+>0x04 lelong 0 (no records)
+>0x04 lelong >0 (%ld records)
+0 leshort 0x0006 DBase 3 index file
+0 string PMCC Windows 3.x .GRP file
+1 string RDC-meg MegaDots
+>8 byte >0x2F version %c
+>9 byte >0x2F \b.%c file
+0 lelong 0x4C
+>4 lelong 0x00021401 Windows shortcut file
+
+# DOS EPS Binary File Header
+# From: Ed Sznyter <ews@Black.Market.NET>
+0 belong 0xC5D0D3C6 DOS EPS Binary File
+>4 long >0 Postscript starts at byte %d
+>>8 long >0 length %d
+>>>12 long >0 Metafile starts at byte %d
+>>>>16 long >0 length %d
+>>>20 long >0 TIFF starts at byte %d
+>>>>24 long >0 length %d
+
+# TNEF magic From "Joomy" <joomy@se-ed.net>
+0 leshort 0x223e9f78 TNEF
+
+# HtmlHelp files (.chm)
+0 string ITSF\003\000\000\000\x60\000\000\000\001\000\000\000 MS Windows HtmlHelp Data
+
+# GFA-BASIC (Wolfram Kleff)
+2 string GFA-BASIC3 GFA-BASIC 3 data
+
+# DJGPP compiled files
+# v >2, uses DPMI & small(2k) stub (Robert vd Boon, rjvdboon@europe.com)
+0x200 string go32stub DOS-executable compiled w/DJGPP
+>0x20c string >0 (stub v%.4s)
+>>0x8b2 string djp [compressed w/%s
+>>>&1 string >\0 %.4s]
+>>0x8ad string UPX [compressed w/%s
+>>>&1 string >\0 %.4s]
+>>0x1c string pmodedj stubbed with %s
+
+# QDOS
+4 belong 0x4AFB QDOS executable
+>9 pstring x '%s'
+0 beshort 0xFB01 QDOS object
+>2 pstring x '%s'
+
+#------------------------------------------------------------------------------
+# From Stuart Caie <kyzer@4u.net> (developer of cabextract)
+# Microsoft Cabinet files
+0 string MSCF\0\0\0\0 Microsoft Cabinet file
+>8 lelong x \b, %u bytes
+>28 leshort 1 \b, 1 file
+>28 leshort >1 \b, %u files
+
+# InstallShield Cabinet files
+0 string ISc( InstallShield Cabinet file
+>5 byte&0xf0 =0x60 version 6,
+>5 byte&0xf0 !0x60 version 4/5,
+>(12.l+40) lelong x %u files
+
+# Windows CE package files
+0 string MSCE\0\0\0\0 Microsoft WinCE install header
+>20 lelong 0 \b, architecture-independent
+>20 lelong 103 \b, Hitachi SH3
+>20 lelong 104 \b, Hitachi SH4
+>20 lelong 0xA11 \b, StrongARM
+>20 lelong 4000 \b, MIPS R4000
+>20 lelong 10003 \b, Hitachi SH3
+>20 lelong 10004 \b, Hitachi SH3E
+>20 lelong 10005 \b, Hitachi SH4
+>20 lelong 70001 \b, ARM 7TDMI
+>52 leshort 1 \b, 1 file
+>52 leshort >1 \b, %u files
+>56 leshort 1 \b, 1 registry entry
+>56 leshort >1 \b, %u registry entries
+
+# Outlook Personal Folders
+0 lelong 0x4E444221 Microsoft Outlook binary email folder
+
+# From: Dirk Jagdmann <doj@cubic.org>
+0 lelong 0x00035f3f Windows 3.x help file
+
+# Christophe Monniez
+0 string Client\ UrlCache\ MMF Microsoft Internet Explorer Cache File
+>20 string >\0 Version %s
+0 string \xCF\xAD\x12\xFE Microsoft Outlook Express DBX File
+>4 byte =0xC5 Message database
+>4 byte =0xC6 Folder database
+>4 byte =0xC7 Accounts informations
+>4 byte =0x30 Offline database
+
+
+# Windows Enhanced Metafile (EMF)
+# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
+# for further information. Note that "0 lelong 1" should be true i.e.
+# the first double word in the file should be 1. With the extended
+# syntax available by some file commands you could write:
+# 0 lelong 1
+# &40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data
+40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data
+>44 ulelong x version 0x%x.
+# If the description has a length greater than zero, it exists and is
+# found at offset (*64).
+>64 ulelong >0 Description available at offset 0x%x
+>>60 ulelong >0 (length 0x%x)
+# Note it would be better to print out the description, which is found
+# as below. Unfortunately the following only prints out the first couple
+# of characters instead of all the "description length"
+# number of characters -- indicated by the ulelong at offset 60.
+>>(64.l) lestring16 >0 Description: %15.15s
+#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
+0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable text
+>15 byte 0 Optimized for Intel
+>15 byte 1 Optimized for Non-Intel
+1 string WPC (Corel/WP)
+>8 short 257 WordPerfect macro
+>8 short 258 WordPerfect help file
+>8 short 259 WordPerfect keyboard file
+>8 short 266 WordPerfect document
+>8 short 267 WordPerfect dictionary
+>8 short 268 WordPerfect thesaurus
+>8 short 269 WordPerfect block
+>8 short 270 WordPerfect rectangular block
+>8 short 271 WordPerfect column block
+>8 short 272 WordPerfect printer data
+>8 short 275 WordPerfect printer data
+>8 short 276 WordPerfect driver resource data
+>8 short 279 WordPerfect hyphenation code
+>8 short 280 WordPerfect hyphenation data
+>8 short 281 WordPerfect macro resource data
+>8 short 283 WordPerfect hyphenation lex
+>8 short 285 WordPerfect wordlist
+>8 short 286 WordPerfect equation resource data
+>8 short 289 WordPerfect spell rules
+>8 short 290 WordPerfect dictionary rules
+>8 short 295 WordPerfect spell rules (Microlytics)
+>8 short 299 WordPerfect settings file
+>8 short 301 WordPerfect 4.2 document
+>8 short 325 WordPerfect dialog file
+>8 short 332 WordPerfect button bar
+>8 short 513 Shell macro
+>8 short 522 Shell definition
+>8 short 769 Notebook macro
+>8 short 770 Notebook help file
+>8 short 771 Notebook keyboard file
+>8 short 778 Notebook definition
+>8 short 1026 Calculator help file
+>8 short 1538 Calendar help file
+>8 short 1546 Calendar data file
+>8 short 1793 Editor macro
+>8 short 1794 Editor help file
+>8 short 1795 Editor keyboard file
+>8 short 1817 Editor macro resource file
+>8 short 2049 Macro editor macro
+>8 short 2050 Macro editor help file
+>8 short 2051 Macro editor keyboard file
+>8 short 2305 PlanPerfect macro
+>8 short 2306 PlanPerfect help file
+>8 short 2307 PlanPerfect keyboard file
+>8 short 2314 PlanPerfect worksheet
+>8 short 2319 PlanPerfect printer definition
+>8 short 2322 PlanPerfect graphic definition
+>8 short 2323 PlanPerfect data
+>8 short 2324 PlanPerfect temporary printer
+>8 short 2329 PlanPerfect macro resource data
+>8 byte 11 Mail
+>8 short 2818 help file
+>8 short 2821 distribution list
+>8 short 2826 out box
+>8 short 2827 in box
+>8 short 2836 users archived mailbox
+>8 short 2837 archived message database
+>8 short 2838 archived attachments
+>8 short 3083 Printer temporary file
+>8 short 3330 Scheduler help file
+>8 short 3338 Scheduler in file
+>8 short 3339 Scheduler out file
+>8 short 3594 GroupWise settings file
+>8 short 3601 GroupWise directory services
+>8 short 3627 GroupWise settings file
+>8 short 4362 Terminal resource data
+>8 short 4363 Terminal resource data
+>8 short 4395 Terminal resource data
+>8 short 4619 GUI loadable text
+>8 short 4620 graphics resource data
+>8 short 4621 printer settings file
+>8 short 4622 port definition file
+>8 short 4623 print queue parameters
+>8 short 4624 compressed file
+>8 short 5130 Network service msg file
+>8 short 5131 Network service msg file
+>8 short 5132 Async gateway login msg
+>8 short 5134 GroupWise message file
+>8 short 7956 GroupWise admin domain database
+>8 short 7957 GroupWise admin host database
+>8 short 7959 GroupWise admin remote host database
+>8 short 7960 GroupWise admin ADS deferment data file
+>8 short 8458 IntelliTAG (SGML) compiled DTD
+>8 long 18219264 WordPerfect graphic image (1.0)
+>8 long 18219520 WordPerfect graphic image (2.0)
+#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
+
+#------------------------------------------------------------------------------
+# rtf: file(1) magic for Rich Text Format (RTF)
+#
+# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk
+#
+0 string {\\rtf Rich Text Format data,
+>5 byte x version %c,
+>6 string \\ansi ANSI
+>6 string \\mac Apple Macintosh
+>6 string \\pc IBM PC, code page 437
+>6 string \\pca IBM PS/2, code page 850
+
+#------------------------------------------------------------------------------
+# animation: file(1) magic for animation/movie formats
+#
+# animation formats
+# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
+# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
+
+# MPEG sequences
+# Scans for all common MPEG header start codes
+0 belong&0xFFFFFF00 0x00000100 MPEG sequence
+>3 byte 0xBA
+>>4 byte &0x40 \b, v2, program multiplex
+>>4 byte ^0x40 \b, v1, system multiplex
+>3 byte 0xBB \b, v1/2, multiplex (missing pack header)
+>3 byte 0xB0 \b, v4
+>>5 belong 0x000001B5
+>>>9 byte &0x80
+>>>>10 byte&0xF0 16 \b, video
+>>>>10 byte&0xF0 32 \b, still texture
+>>>>10 byte&0xF0 48 \b, mesh
+>>>>10 byte&0xF0 64 \b, face
+>>>9 byte ^0x80
+>>>>9 byte&0xF8 8 \b, video
+>>>>9 byte&0xF8 16 \b, still texture
+>>>>9 byte&0xF8 24 \b, mesh
+>>>>9 byte&0xF8 32 \b, face
+>>4 byte 1 \b, simple @ L1
+>>4 byte 2 \b, simple @ L2
+>>4 byte 3 \b, simple @ L3
+>>4 byte 4 \b, simple @ L0
+>>4 byte 17 \b, simple scalable @ L1
+>>4 byte 18 \b, simple scalable @ L2
+>>4 byte 33 \b, core @ L1
+>>4 byte 34 \b, core @ L2
+>>4 byte 50 \b, main @ L2
+>>4 byte 51 \b, main @ L3
+>>4 byte 53 \b, main @ L4
+>>4 byte 66 \b, n-bit @ L2
+>>4 byte 81 \b, scalable texture @ L1
+>>4 byte 97 \b, simple face animation @ L1
+>>4 byte 98 \b, simple face animation @ L2
+>>4 byte 99 \b, simple face basic animation @ L1
+>>4 byte 100 \b, simple face basic animation @ L2
+>>4 byte 113 \b, basic animation text @ L1
+>>4 byte 114 \b, basic animation text @ L2
+>>4 byte 129 \b, hybrid @ L1
+>>4 byte 130 \b, hybrid @ L2
+>>4 byte 145 \b, advanced RT simple @ L!
+>>4 byte 146 \b, advanced RT simple @ L2
+>>4 byte 147 \b, advanced RT simple @ L3
+>>4 byte 148 \b, advanced RT simple @ L4
+>>4 byte 161 \b, core scalable @ L1
+>>4 byte 162 \b, core scalable @ L2
+>>4 byte 163 \b, core scalable @ L3
+>>4 byte 177 \b, advanced coding efficiency @ L1
+>>4 byte 178 \b, advanced coding efficiency @ L2
+>>4 byte 179 \b, advanced coding efficiency @ L3
+>>4 byte 180 \b, advanced coding efficiency @ L4
+>>4 byte 193 \b, advanced core @ L1
+>>4 byte 194 \b, advanced core @ L2
+>>4 byte 209 \b, advanced scalable texture @ L1
+>>4 byte 210 \b, advanced scalable texture @ L2
+>>4 byte 211 \b, advanced scalable texture @ L3
+>>4 byte 225 \b, simple studio @ L1
+>>4 byte 226 \b, simple studio @ L2
+>>4 byte 227 \b, simple studio @ L3
+>>4 byte 228 \b, simple studio @ L4
+>>4 byte 229 \b, core studio @ L1
+>>4 byte 230 \b, core studio @ L2
+>>4 byte 231 \b, core studio @ L3
+>>4 byte 232 \b, core studio @ L4
+>>4 byte 240 \b, advanced simple @ L0
+>>4 byte 241 \b, advanced simple @ L1
+>>4 byte 242 \b, advanced simple @ L2
+>>4 byte 243 \b, advanced simple @ L3
+>>4 byte 244 \b, advanced simple @ L4
+>>4 byte 245 \b, advanced simple @ L5
+>>4 byte 247 \b, advanced simple @ L3b
+>>4 byte 248 \b, FGS @ L0
+>>4 byte 249 \b, FGS @ L1
+>>4 byte 250 \b, FGS @ L2
+>>4 byte 251 \b, FGS @ L3
+>>4 byte 252 \b, FGS @ L4
+>>4 byte 253 \b, FGS @ L5
+>3 byte 0xB5 \b, v4
+>>4 byte &0x80
+>>>5 byte&0xF0 16 \b, video (missing profile header)
+>>>5 byte&0xF0 32 \b, still texture (missing profile header)
+>>>5 byte&0xF0 48 \b, mesh (missing profile header)
+>>>5 byte&0xF0 64 \b, face (missing profile header)
+>>4 byte ^0x80
+>>>4 byte&0xF8 8 \b, video (missing profile header)
+>>>4 byte&0xF8 16 \b, still texture (missing profile header)
+>>>4 byte&0xF8 24 \b, mesh (missing profile header)
+>>>4 byte&0xF8 32 \b, face (missing profile header)
+>3 byte 0xB3
+>>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
+>>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
+>>12 belong 0x000001B5 \b, v2,
+>>>16 byte&0x0F 1 \b HP
+>>>16 byte&0x0F 2 \b Spt
+>>>16 byte&0x0F 3 \b SNR
+>>>16 byte&0x0F 4 \b MP
+>>>16 byte&0x0F 5 \b SP
+>>>17 byte&0xF0 64 \b@HL
+>>>17 byte&0xF0 96 \b@H-14
+>>>17 byte&0xF0 128 \b@ML
+>>>17 byte&0xF0 160 \b@LL
+>>>17 byte &0x08 \b progressive
+>>>17 byte ^0x08 \b interlaced
+>>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video
+>>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video
+>>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video
+>>11 byte &0x02
+>>>75 byte &0x01
+>>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>>140 belong 0x000001B5 \b, v2,
+>>>>>144 byte&0x0F 1 \b HP
+>>>>>144 byte&0x0F 2 \b Spt
+>>>>>144 byte&0x0F 3 \b SNR
+>>>>>144 byte&0x0F 4 \b MP
+>>>>>144 byte&0x0F 5 \b SP
+>>>>>145 byte&0xF0 64 \b@HL
+>>>>>145 byte&0xF0 96 \b@H-14
+>>>>>145 byte&0xF0 128 \b@ML
+>>>>>145 byte&0xF0 160 \b@LL
+>>>>>145 byte &0x08 \b progressive
+>>>>>145 byte ^0x08 \b interlaced
+>>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video
+>>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video
+>>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video
+>>>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>76 belong 0x000001B5 \b, v2,
+>>>80 byte&0x0F 1 \b HP
+>>>80 byte&0x0F 2 \b Spt
+>>>80 byte&0x0F 3 \b SNR
+>>>80 byte&0x0F 4 \b MP
+>>>80 byte&0x0F 5 \b SP
+>>>81 byte&0xF0 64 \b@HL
+>>>81 byte&0xF0 96 \b@H-14
+>>>81 byte&0xF0 128 \b@ML
+>>>81 byte&0xF0 160 \b@LL
+>>>81 byte &0x08 \b progressive
+>>>81 byte ^0x08 \b interlaced
+>>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video
+>>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video
+>>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video
+>>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P
+>>>7 byte&0xF0 0x10 \b, 16:9
+>>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I
+>>>7 byte&0xF0 0x10 \b, 16:9
+>>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 beshort&0xFFF0 0x2C00 \b, 4CIF
+>>>5 beshort&0x0FFF 0x01E0 \b NTSC
+>>>5 beshort&0x0FFF 0x0240 \b PAL
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>>7 byte&0xF0 0x80 \b, PAL 4:3
+>>>7 byte&0xF0 0xC0 \b, NTSC 4:3
+>>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 beshort&0xFFF0 0x1600 \b, CIF
+>>>5 beshort&0x0FFF 0x00F0 \b NTSC
+>>>5 beshort&0x0FFF 0x0120 \b PAL
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>>7 byte&0xF0 0x80 \b, PAL 4:3
+>>>7 byte&0xF0 0xC0 \b, NTSC 4:3
+>>>5 beshort&0x0FFF 0x0240 \b PAL 625
+>>>>7 byte&0xF0 0x20 \b, 4:3
+>>>>7 byte&0xF0 0x30 \b, 16:9
+>>>>7 byte&0xF0 0x40 \b, 11:5
+>>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU
+>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
+>>>5 beshort&0x0FFF 0x0240 \b PAL 625
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>4 beshort&0xFFF0 0x1E00 \b, SVCD
+>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
+>>>5 beshort&0x0FFF 0x0240 \b PAL 625
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>7 byte&0x0F 1 \b, 23.976 fps
+>>7 byte&0x0F 2 \b, 24 fps
+>>7 byte&0x0F 3 \b, 25 fps
+>>7 byte&0x0F 4 \b, 29.97 fps
+>>7 byte&0x0F 5 \b, 30 fps
+>>7 byte&0x0F 6 \b, 50 fps
+>>7 byte&0x0F 7 \b, 59.94 fps
+>>7 byte&0x0F 8 \b, 60 fps
+>>11 byte &0x04 \b, Constrained
+
+# MPEG ADTS Audio (*.mpx/mxa/aac)
+# from dreesen@math.fu-berlin.de
+# modified to fully support MPEG ADTS
+
+# MP3, M1A
+0 beshort&0xFFFE 0xFFFA MPEG ADTS, layer III, v1
+# rates
+>2 byte&0xF0 0x10 \b, 32 kBits
+>2 byte&0xF0 0x20 \b, 40 kBits
+>2 byte&0xF0 0x30 \b, 48 kBits
+>2 byte&0xF0 0x40 \b, 56 kBits
+>2 byte&0xF0 0x50 \b, 64 kBits
+>2 byte&0xF0 0x60 \b, 80 kBits
+>2 byte&0xF0 0x70 \b, 96 kBits
+>2 byte&0xF0 0x80 \b, 112 kBits
+>2 byte&0xF0 0x90 \b, 128 kBits
+>2 byte&0xF0 0xA0 \b, 160 kBits
+>2 byte&0xF0 0xB0 \b, 192 kBits
+>2 byte&0xF0 0xC0 \b, 224 kBits
+>2 byte&0xF0 0xD0 \b, 256 kBits
+>2 byte&0xF0 0xE0 \b, 320 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 44.1 kHz
+>2 byte&0x0C 0x04 \b, 48 kHz
+>2 byte&0x0C 0x08 \b, 32 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MP2, M1A
+0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1
+# rates
+>2 byte&0xF0 0x10 \b, 32 kBits
+>2 byte&0xF0 0x20 \b, 48 kBits
+>2 byte&0xF0 0x30 \b, 56 kBits
+>2 byte&0xF0 0x40 \b, 64 kBits
+>2 byte&0xF0 0x50 \b, 80 kBits
+>2 byte&0xF0 0x60 \b, 96 kBits
+>2 byte&0xF0 0x70 \b, 112 kBits
+>2 byte&0xF0 0x80 \b, 128 kBits
+>2 byte&0xF0 0x90 \b, 160 kBits
+>2 byte&0xF0 0xA0 \b, 192 kBits
+>2 byte&0xF0 0xB0 \b, 224 kBits
+>2 byte&0xF0 0xC0 \b, 256 kBits
+>2 byte&0xF0 0xD0 \b, 320 kBits
+>2 byte&0xF0 0xE0 \b, 384 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 44.1 kHz
+>2 byte&0x0C 0x04 \b, 48 kHz
+>2 byte&0x0C 0x08 \b, 32 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MPA, M1A
+0 beshort&0xFFFE 0xFFFE MPEG ADTS, layer I, v1
+# rate
+>2 byte&0xF0 0x10 \b, 32 kBits
+>2 byte&0xF0 0x20 \b, 64 kBits
+>2 byte&0xF0 0x30 \b, 96 kBits
+>2 byte&0xF0 0x40 \b, 128 kBits
+>2 byte&0xF0 0x50 \b, 160 kBits
+>2 byte&0xF0 0x60 \b, 192 kBits
+>2 byte&0xF0 0x70 \b, 224 kBits
+>2 byte&0xF0 0x80 \b, 256 kBits
+>2 byte&0xF0 0x90 \b, 288 kBits
+>2 byte&0xF0 0xA0 \b, 320 kBits
+>2 byte&0xF0 0xB0 \b, 352 kBits
+>2 byte&0xF0 0xC0 \b, 384 kBits
+>2 byte&0xF0 0xD0 \b, 416 kBits
+>2 byte&0xF0 0xE0 \b, 448 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 44.1 kHz
+>2 byte&0x0C 0x04 \b, 48 kHz
+>2 byte&0x0C 0x08 \b, 32 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MP3, M2A
+0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2
+# rate
+>2 byte&0xF0 0x10 \b, 8 kBits
+>2 byte&0xF0 0x20 \b, 16 kBits
+>2 byte&0xF0 0x30 \b, 24 kBits
+>2 byte&0xF0 0x40 \b, 32 kBits
+>2 byte&0xF0 0x50 \b, 40 kBits
+>2 byte&0xF0 0x60 \b, 48 kBits
+>2 byte&0xF0 0x70 \b, 56 kBits
+>2 byte&0xF0 0x80 \b, 64 kBits
+>2 byte&0xF0 0x90 \b, 80 kBits
+>2 byte&0xF0 0xA0 \b, 96 kBits
+>2 byte&0xF0 0xB0 \b, 112 kBits
+>2 byte&0xF0 0xC0 \b, 128 kBits
+>2 byte&0xF0 0xD0 \b, 144 kBits
+>2 byte&0xF0 0xE0 \b, 160 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 22.05 kHz
+>2 byte&0x0C 0x04 \b, 24 kHz
+>2 byte&0x0C 0x08 \b, 16 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MP2, M2A
+0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2
+# rate
+>2 byte&0xF0 0x10 \b, 8 kBits
+>2 byte&0xF0 0x20 \b, 16 kBits
+>2 byte&0xF0 0x30 \b, 24 kBits
+>2 byte&0xF0 0x40 \b, 32 kBits
+>2 byte&0xF0 0x50 \b, 40 kBits
+>2 byte&0xF0 0x60 \b, 48 kBits
+>2 byte&0xF0 0x70 \b, 56 kBits
+>2 byte&0xF0 0x80 \b, 64 kBits
+>2 byte&0xF0 0x90 \b, 80 kBits
+>2 byte&0xF0 0xA0 \b, 96 kBits
+>2 byte&0xF0 0xB0 \b, 112 kBits
+>2 byte&0xF0 0xC0 \b, 128 kBits
+>2 byte&0xF0 0xD0 \b, 144 kBits
+>2 byte&0xF0 0xE0 \b, 160 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 22.05 kHz
+>2 byte&0x0C 0x04 \b, 24 kHz
+>2 byte&0x0C 0x08 \b, 16 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MPA, M2A
+0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2
+# rate
+>2 byte&0xF0 0x10 \b, 32 kBits
+>2 byte&0xF0 0x20 \b, 48 kBits
+>2 byte&0xF0 0x30 \b, 56 kBits
+>2 byte&0xF0 0x40 \b, 64 kBits
+>2 byte&0xF0 0x50 \b, 80 kBits
+>2 byte&0xF0 0x60 \b, 96 kBits
+>2 byte&0xF0 0x70 \b, 112 kBits
+>2 byte&0xF0 0x80 \b, 128 kBits
+>2 byte&0xF0 0x90 \b, 144 kBits
+>2 byte&0xF0 0xA0 \b, 160 kBits
+>2 byte&0xF0 0xB0 \b, 176 kBits
+>2 byte&0xF0 0xC0 \b, 192 kBits
+>2 byte&0xF0 0xD0 \b, 224 kBits
+>2 byte&0xF0 0xE0 \b, 256 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 22.05 kHz
+>2 byte&0x0C 0x04 \b, 24 kHz
+>2 byte&0x0C 0x08 \b, 16 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MP3, M25A
+0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5
+# rate
+>2 byte&0xF0 0x10 \b, 8 kBits
+>2 byte&0xF0 0x20 \b, 16 kBits
+>2 byte&0xF0 0x30 \b, 24 kBits
+>2 byte&0xF0 0x40 \b, 32 kBits
+>2 byte&0xF0 0x50 \b, 40 kBits
+>2 byte&0xF0 0x60 \b, 48 kBits
+>2 byte&0xF0 0x70 \b, 56 kBits
+>2 byte&0xF0 0x80 \b, 64 kBits
+>2 byte&0xF0 0x90 \b, 80 kBits
+>2 byte&0xF0 0xA0 \b, 96 kBits
+>2 byte&0xF0 0xB0 \b, 112 kBits
+>2 byte&0xF0 0xC0 \b, 128 kBits
+>2 byte&0xF0 0xD0 \b, 144 kBits
+>2 byte&0xF0 0xE0 \b, 160 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 11.025 kHz
+>2 byte&0x0C 0x04 \b, 12 kHz
+>2 byte&0x0C 0x08 \b, 8 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio
+
+# Stored AAC streams (instead of the MP4 format)
+0 string ADIF MPEG ADIF, AAC
+>4 byte &0x80
+>>13 byte &0x10 \b, VBR
+>>13 byte ^0x10 \b, CBR
+>>16 byte&0x1E 0x02 \b, single stream
+>>16 byte&0x1E 0x04 \b, 2 streams
+>>16 byte&0x1E 0x06 \b, 3 streams
+>>16 byte &0x08 \b, 4 or more streams
+>>16 byte &0x10 \b, 8 or more streams
+>>4 byte &0x80 \b, Copyrighted
+>>13 byte &0x40 \b, Original Source
+>>13 byte &0x20 \b, Home Flag
+>4 byte ^0x80
+>>4 byte &0x10 \b, VBR
+>>4 byte ^0x10 \b, CBR
+>>7 byte&0x1E 0x02 \b, single stream
+>>7 byte&0x1E 0x04 \b, 2 streams
+>>7 byte&0x1E 0x06 \b, 3 streams
+>>7 byte &0x08 \b, 4 or more streams
+>>7 byte &0x10 \b, 8 or more streams
+>>4 byte &0x40 \b, Original Stream(s)
+>>4 byte &0x20 \b, Home Source
+
+# Live or stored single AAC stream (used with MPEG-2 systems)
+0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC
+>1 byte ^0x08 \b, v2
+>1 byte &0x08 \b, v4
+# profile
+>>2 byte &0xC0 \b LTP
+>2 byte&0xc0 0x00 \b, Main
+>2 byte&0xc0 0x40 \b, LC
+>2 byte&0xc0 0x80 \b, SSR
+# timing
+>2 byte&0x3c 0x00 \b, 96 kHz
+>2 byte&0x3c 0x04 \b, 88.2 kHz
+>2 byte&0x3c 0x08 \b, 64 kHz
+>2 byte&0x3c 0x0c \b, 48 kHz
+>2 byte&0x3c 0x10 \b, 44.1 kHz
+>2 byte&0x3c 0x14 \b, 32 kHz
+>2 byte&0x3c 0x18 \b, 24 kHz
+>2 byte&0x3c 0x1c \b, 22.05 kHz
+>2 byte&0x3c 0x20 \b, 16 kHz
+>2 byte&0x3c 0x24 \b, 12 kHz
+>2 byte&0x3c 0x28 \b, 11.025 kHz
+>2 byte&0x3c 0x2c \b, 8 kHz
+# channels/options
+>2 beshort&0x01c0 0x0040 \b, monaural
+>2 beshort&0x01c0 0x0080 \b, stereo
+>2 beshort&0x01c0 0x00c0 \b, stereo + center
+>2 beshort&0x01c0 0x0100 \b, stereo+center+LFE
+>2 beshort&0x01c0 0x0140 \b, surround
+>2 beshort&0x01c0 0x0180 \b, surround + LFE
+>2 beshort &0x01C0 \b, surround + side
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Custom Flag
+#>3 byte &0x20 \b, Original Stream
+#>3 byte &0x10 \b, Home Source
+#>3 byte &0x08 \b, Copyrighted
+
+# Live MPEG-4 audio streams (instead of RTP FlexMux)
+0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS
+#>1 beshort&0x1FFF x \b, %u byte packet
+>3 byte&0xE0 0x40
+>>4 byte&0x3C 0x04 \b, single stream
+>>4 byte&0x3C 0x08 \b, 2 streams
+>>4 byte&0x3C 0x0C \b, 3 streams
+>>4 byte &0x08 \b, 4 or more streams
+>>4 byte &0x20 \b, 8 or more streams
+>3 byte&0xC0 0
+>>4 byte&0x78 0x08 \b, single stream
+>>4 byte&0x78 0x10 \b, 2 streams
+>>4 byte&0x78 0x18 \b, 3 streams
+>>4 byte &0x20 \b, 4 or more streams
+>>4 byte &0x40 \b, 8 or more streams
+0 beshort 0x4DE1 MPEG-4 LO-EP audio stream
+
+# FLI animation format
+4 leshort 0xAF11 FLI file
+>6 leshort x - %d frames,
+>8 leshort x width=%d pixels,
+>10 leshort x height=%d pixels,
+>12 leshort x depth=%d,
+>16 leshort x ticks/frame=%d
+# FLC animation format
+4 leshort 0xAF12 FLC file
+>6 leshort x - %d frames
+>8 leshort x width=%d pixels,
+>10 leshort x height=%d pixels,
+>12 leshort x depth=%d,
+>16 leshort x ticks/frame=%d
+
+# DL animation format
+# XXX - collision with most `mips' magic
+#
+# I couldn't find a real magic number for these, however, this
+# -appears- to work. Note that it might catch other files, too, so be
+# careful!
+#
+# Note that title and author appear in the two 20-byte chunks
+# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
+# 255 (hex FF)! The DL format is really bad.
+#
+#0 byte 1 DL version 1, medium format (160x100, 4 images/screen)
+#>42 byte x - %d screens,
+#>43 byte x %d commands
+#0 byte 2 DL version 2
+#>1 byte 1 - large format (320x200,1 image/screen),
+#>1 byte 2 - medium format (160x100,4 images/screen),
+#>1 byte >2 - unknown format,
+#>42 byte x %d screens,
+#>43 byte x %d commands
+# Based on empirical evidence, DL version 3 have several nulls following the
+# \003. Most of them start with non-null values at hex offset 0x34 or so.
+#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3
+
+# SGI formats
+0 string MOVI Silicon Graphics movie file
+
+# Apple Quicktime and ISO types
+4 string moov Apple QuickTime
+>12 string mvhd \b movie (fast start)
+>12 string mdra \b URL
+>12 string cmov \b movie (fast start, compressed header)
+>12 string rmra \b multiple URLs
+4 string mdat Apple QuickTime movie (unoptimized)
+4 string wide Apple QuickTime movie (unoptimized)
+4 string skip Apple QuickTime movie (modified)
+4 string free Apple QuickTime movie (modified)
+4 string idsc Apple QuickTime image (fast start)
+4 string idat Apple QuickTime image (unoptimized)
+4 string pckg Apple QuickTime compressed archive
+4 string/B jP JPEG 2000 image
+4 string ftyp ISO Media
+>8 string isom \b, MPEG v4 system
+>8 string mp41 \b, MPEG v4 system, version 1
+>8 string mp42 \b, MPEG v4 system, version 2
+>8 string/B jp2 \b, JPEG 2000 image
+>8 string 3gp \b, MPEG v4 system, 3GPP (H.263/AMR)
+>8 string mmp4 \b, MPEG v4 system, Mobile
+>8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC
+>8 string/B M4P \b, MPEG v4 system, ISMA encrypted AAC-LC
+>8 string/B M4B \b, MPEG v4 system, iTunes AAC-LC/AMR
+>8 string/B qt \b, Apple QuickTime movie
+
+# iso 13818 transport stream
+#
+# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1)
+# (the following is a little bit restrictive and works fine for a stream
+# that starts with PAT properly. it won't work for stream data, that is
+# cut from an input device data right in the middle, but this shouldn't
+# disturb)
+# syncbyte 8 bit 0x47
+# error_ind 1 bit -
+# payload_start 1 bit 1
+# priority 1 bit -
+# PID 13 bit 0x0000
+# scrambling 2 bit -
+# adaptfld_ctrl 2 bit 1 or 3
+# conti_count 4 bit 0
+0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data
+>188 byte !0x47 CORRUPTED
+
+# DIF digital video file format <mpruett@sgi.com>
+0 belong&0xffffff00 0x1f070000 DIF
+>4 byte &0x01 (DVCPRO) movie file
+>4 byte ^0x01 (DV) movie file
+>3 byte &0x80 (PAL)
+>3 byte ^0x80 (NTSC)
+
+# Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com>
+0 belong 0x3026b275 Microsoft ASF
+
+# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
+0 string \x8aMNG MNG video data,
+>4 belong !0x0d0a1a0a CORRUPTED,
+>4 belong 0x0d0a1a0a
+>>16 belong x %ld x
+>>20 belong x %ld
+
+# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
+0 string \x8bJNG JNG video data,
+>4 belong !0x0d0a1a0a CORRUPTED,
+>4 belong 0x0d0a1a0a
+>>16 belong x %ld x
+>>20 belong x %ld
+
+# Vivo video (Wolfram Kleff)
+3 string \x0D\x0AVersion:Vivo Vivo video data
+
+# VRML (Virtual Reality Modelling Language)
+0 string/b #VRML\ V1.0\ ascii VRML 1 file
+0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file
+
+#---------------------------------------------------------------------------
+# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
+# From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03
+#
+0 string HVQM4 %s
+>6 string >\0 v%s
+>0 byte x GameCube movie,
+>0x34 ubeshort x %d x
+>0x36 ubeshort x %d,
+>0x26 ubeshort x %dµs,
+>0x42 ubeshort 0 no audio
+>0x42 ubeshort >0 %dHz audio
+
+#------------------------------------------------------------------------------
+# chi: file(1) magic for ChiWriter files
+#
+0 string \\1cw\ ChiWriter file
+>5 string >\0 version %s
+0 string \\1cw ChiWriter file
+
+#------------------------------------------------------------------------------
+# claris: file(1) magic for claris
+# "H. Nanosecond" <aldomel@ix.netcom.com>
+# Claris Works a word processor, etc.
+# Version 3.0
+
+# .pct claris works clip art files
+#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
+#*
+#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000
+#null to byte 1000 octal
+514 string \377\377\377\377\000 Claris clip art?
+>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes.
+514 string \377\377\377\377\001 Claris clip art?
+>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes.
+
+# Claris works files
+# .cwk
+0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document
+# .plt
+0 string \020\341\000\000\010\010 Claris Works pallete files .plt
+
+# .msp a dictionary file I am not sure about this I have only one .msp file
+0 string \002\271\262\000\040\002\000\164 Claris works dictionary
+
+# .usp are user dictionary bits
+# I am not sure about a magic header:
+#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151
+# soh S p f 8 U D sp ^ S cr nl p o d i
+#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043
+# a t r i s t sp ^ S cr nl d i v sp #
+
+# .mth Thesaurus
+# starts with \0 but no magic header
+
+# .chy Hyphenation file
+# I am not sure: 000 210 034 000 000
+
+# other claris files
+#./windows/claris/useng.ndx: data
+#./windows/claris/xtndtran.l32: data
+#./windows/claris/xtndtran.lst: data
+#./windows/claris/clworks.lbl: data
+#./windows/claris/clworks.prf: data
+#./windows/claris/userd.spl: data
+
+#------------------------------------------------------------------------------
+# fonts: file(1) magic for font data
+#
+0 string FONT ASCII vfont text
+0 short 0436 Berkeley vfont data
+0 short 017001 byte-swapped Berkeley vfont data
+
+# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com
+0 string %!PS-AdobeFont-1. PostScript Type 1 font text
+>20 string >\0 (%s)
+6 string %!PS-AdobeFont-1. PostScript Type 1 font program data
+
+# X11 font files in SNF (Server Natural Format) format
+0 belong 00000004 X11 SNF font data, MSB first
+0 lelong 00000004 X11 SNF font data, LSB first
+
+# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string STARTFONT\040 X11 BDF font text
+
+# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)
+# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
+0 string \001fcp X11 Portable Compiled Font data
+>12 byte 0x02 \b, LSB first
+>12 byte 0x0a \b, MSB first
+0 string D1.0\015 X11 Speedo font data
+
+#------------------------------------------------------------------------------
+# FIGlet fonts and controlfiles
+# From figmagic supplied with Figlet version 2.2
+# "David E. O'Brien" <obrien@FreeBSD.ORG>
+0 string flf FIGlet font
+>3 string >2a version %-2.2s
+0 string flc FIGlet controlfile
+>3 string >2a version %-2.2s
+
+# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu)
+# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++
+0 belong 0x14025919 libGrx font data,
+>8 leshort x %dx
+>10 leshort x \b%d
+>40 string x %s
+# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu)
+0 belong 0xff464f4e DOS code page font data collection
+7 belong 0x00454741 DOS code page font data
+7 belong 0x00564944 DOS code page font data (from Linux?)
+4098 string DOSFONT DOSFONT2 encrypted font data
+
+# downloadable fonts for browser (prints type) anthon@mnt.org
+0 string PFR1 PFR1 font
+>102 string >0 \b: %s
+
+# True Type fonts
+0 string \000\001\000\000\000 TrueType font data
+
+0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
+0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
+
+# Opentype font data from Avi Bercovich
+0 string OTTO OpenType font data
+
+
+#------------------------------------------------------------------------------
+# macintosh description
+#
+# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
+# Daniel Quinlan, quinlan@yggdrasil.com
+11 string must\ be\ converted\ with\ BinHex BinHex binary text
+>41 string x \b, version %.3s
+
+# Stuffit archives are the de facto standard of compression for Macintosh
+# files obtained from most archives. (franklsm@tuns.ca)
+0 string SIT! StuffIt Archive (data)
+>2 string x : %s
+0 string SITD StuffIt Deluxe (data)
+>2 string x : %s
+0 string Seg StuffIt Deluxe Segment (data)
+>2 string x : %s
+
+# Newer StuffIt archives (grant@netbsd.org)
+0 string StuffIt StuffIt Archive
+>162 string >0 : %s
+
+# Macintosh Applications and Installation binaries (franklsm@tuns.ca)
+0 string APPL Macintosh Application (data)
+>2 string x \b: %s
+
+# Macintosh System files (franklsm@tuns.ca)
+0 string zsys Macintosh System File (data)
+0 string FNDR Macintosh Finder (data)
+0 string libr Macintosh Library (data)
+>2 string x : %s
+0 string shlb Macintosh Shared Library (data)
+>2 string x : %s
+0 string cdev Macintosh Control Panel (data)
+>2 string x : %s
+0 string INIT Macintosh Extension (data)
+>2 string x : %s
+0 string FFIL Macintosh Truetype Font (data)
+>2 string x : %s
+0 string LWFN Macintosh Postscript Font (data)
+>2 string x : %s
+
+# Additional Macintosh Files (franklsm@tuns.ca)
+0 string PACT Macintosh Compact Pro Archive (data)
+>2 string x : %s
+0 string ttro Macintosh TeachText File (data)
+>2 string x : %s
+0 string TEXT Macintosh TeachText File (data)
+>2 string x : %s
+0 string PDF Macintosh PDF File (data)
+>2 string x : %s
+
+# MacBinary format (Eric Fischer, enf@pobox.com)
+#
+# Unfortunately MacBinary doesn't really have a magic number prior
+# to the MacBinary III format. The checksum is really the way to
+# do it, but the magic file format isn't up to the challenge.
+#
+# 0 byte 0
+# 1 byte # filename length
+# 2 string # filename
+# 65 string # file type
+# 69 string # file creator
+# 73 byte # Finder flags
+# 74 byte 0
+# 75 beshort # vertical posn in window
+# 77 beshort # horiz posn in window
+# 79 beshort # window or folder ID
+# 81 byte # protected?
+# 82 byte 0
+# 83 belong # length of data segment
+# 87 belong # length of resource segment
+# 91 belong # file creation date
+# 95 belong # file modification date
+# 99 beshort # length of comment after resource
+# 101 byte # new Finder flags
+# 102 string mBIN # (only in MacBinary III)
+# 106 byte # char. code of file name
+# 107 byte # still more Finder flags
+# 116 belong # total file length
+# 120 beshort # length of add'l header
+# 122 byte 129 # for MacBinary II
+# 122 byte 130 # for MacBinary III
+# 123 byte 129 # minimum version that can read fmt
+# 124 beshort # checksum
+#
+# This attempts to use the version numbers as a magic number, requiring
+# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second
+# be 0x81. This works for the files I have, but maybe not for everyone's.
+
+# Unfortunately, this magic is quite weak - MPi
+#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data
+
+# MacBinary I doesn't have the version number field at all, but MacBinary II
+# has been in use since 1987 so I hope there aren't many really old files
+# floating around that this will miss. The original spec calls for using
+# the nulls in 0, 74, and 82 as the magic number.
+#
+# Another possibility, that would also work for MacBinary I, is to use
+# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will
+# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,
+# and that 74 will be 0. So something like
+#
+# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data
+#
+# >73 byte&0x01 0x01 \b, inited
+# >73 byte&0x02 0x02 \b, changed
+# >73 byte&0x04 0x04 \b, busy
+# >73 byte&0x08 0x08 \b, bozo
+# >73 byte&0x10 0x10 \b, system
+# >73 byte&0x10 0x20 \b, bundle
+# >73 byte&0x10 0x40 \b, invisible
+# >73 byte&0x10 0x80 \b, locked
+
+#>65 string x \b, type "%4.4s"
+
+#>65 string 8BIM (PhotoShop)
+#>65 string ALB3 (PageMaker 3)
+#>65 string ALB4 (PageMaker 4)
+#>65 string ALT3 (PageMaker 3)
+#>65 string APPL (application)
+#>65 string AWWP (AppleWorks word processor)
+#>65 string CIRC (simulated circuit)
+#>65 string DRWG (MacDraw)
+#>65 string EPSF (Encapsulated PostScript)
+#>65 string FFIL (font suitcase)
+#>65 string FKEY (function key)
+#>65 string FNDR (Macintosh Finder)
+#>65 string GIFf (GIF image)
+#>65 string Gzip (GNU gzip)
+#>65 string INIT (system extension)
+#>65 string LIB\ (library)
+#>65 string LWFN (PostScript font)
+#>65 string MSBC (Microsoft BASIC)
+#>65 string PACT (Compact Pro archive)
+#>65 string PDF\ (Portable Document Format)
+#>65 string PICT (picture)
+#>65 string PNTG (MacPaint picture)
+#>65 string PREF (preferences)
+#>65 string PROJ (Think C project)
+#>65 string QPRJ (Think Pascal project)
+#>65 string SCFL (Defender scores)
+#>65 string SCRN (startup screen)
+#>65 string SITD (StuffIt Deluxe)
+#>65 string SPn3 (SuperPaint)
+#>65 string STAK (HyperCard stack)
+#>65 string Seg\ (StuffIt segment)
+#>65 string TARF (Unix tar archive)
+#>65 string TEXT (ASCII)
+#>65 string TIFF (TIFF image)
+#>65 string TOVF (Eudora table of contents)
+#>65 string WDBN (Microsoft Word word processor)
+#>65 string WORD (MacWrite word processor)
+#>65 string XLS\ (Microsoft Excel)
+#>65 string ZIVM (compress (.Z))
+#>65 string ZSYS (Pre-System 7 system file)
+#>65 string acf3 (Aldus FreeHand)
+#>65 string cdev (control panel)
+#>65 string dfil (Desk Acessory suitcase)
+#>65 string libr (library)
+#>65 string nX^d (WriteNow word processor)
+#>65 string nX^w (WriteNow dictionary)
+#>65 string rsrc (resource)
+#>65 string scbk (Scrapbook)
+#>65 string shlb (shared library)
+#>65 string ttro (SimpleText read-only)
+#>65 string zsys (system file)
+
+#>69 string x \b, creator "%4.4s"
+
+# Somewhere, Apple has a repository of registered Creator IDs. These are
+# just the ones that I happened to have files from and was able to identify.
+
+#>69 string 8BIM (Adobe Photoshop)
+#>69 string ALD3 (PageMaker 3)
+#>69 string ALD4 (PageMaker 4)
+#>69 string ALFA (Alpha editor)
+#>69 string APLS (Apple Scanner)
+#>69 string APSC (Apple Scanner)
+#>69 string BRKL (Brickles)
+#>69 string BTFT (BitFont)
+#>69 string CCL2 (Common Lisp 2)
+#>69 string CCL\ (Common Lisp)
+#>69 string CDmo (The Talking Moose)
+#>69 string CPCT (Compact Pro)
+#>69 string CSOm (Eudora)
+#>69 string DMOV (Font/DA Mover)
+#>69 string DSIM (DigSim)
+#>69 string EDIT (Macintosh Edit)
+#>69 string ERIK (Macintosh Finder)
+#>69 string EXTR (self-extracting archive)
+#>69 string Gzip (GNU gzip)
+#>69 string KAHL (Think C)
+#>69 string LWFU (LaserWriter Utility)
+#>69 string LZIV (compress)
+#>69 string MACA (MacWrite)
+#>69 string MACS (Macintosh operating system)
+#>69 string MAcK (MacKnowledge terminal emulator)
+#>69 string MLND (Defender)
+#>69 string MPNT (MacPaint)
+#>69 string MSBB (Microsoft BASIC (binary))
+#>69 string MSWD (Microsoft Word)
+#>69 string NCSA (NCSA Telnet)
+#>69 string PJMM (Think Pascal)
+#>69 string PSAL (Hunt the Wumpus)
+#>69 string PSI2 (Apple File Exchange)
+#>69 string R*ch (BBEdit)
+#>69 string RMKR (Resource Maker)
+#>69 string RSED (Resource Editor)
+#>69 string Rich (BBEdit)
+#>69 string SIT! (StuffIt)
+#>69 string SPNT (SuperPaint)
+#>69 string Unix (NeXT Mac filesystem)
+#>69 string VIM! (Vim editor)
+#>69 string WILD (HyperCard)
+#>69 string XCEL (Microsoft Excel)
+#>69 string aCa2 (Fontographer)
+#>69 string aca3 (Aldus FreeHand)
+#>69 string dosa (Macintosh MS-DOS file system)
+#>69 string movr (Font/DA Mover)
+#>69 string nX^n (WriteNow)
+#>69 string pdos (Apple ProDOS file system)
+#>69 string scbk (Scrapbook)
+#>69 string ttxt (SimpleText)
+#>69 string ufox (Foreign File Access)
+
+# Just in case...
+
+102 string mBIN MacBinary III data with surprising version number
+
+# sas magic from Bruce Foster (bef@nwu.edu)
+#
+#0 string SAS SAS
+#>8 string x %s
+0 string SAS SAS
+>24 string DATA data file
+>24 string CATALOG catalog
+>24 string INDEX data file index
+>24 string VIEW data view
+# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com)
+#
+0x54 string SAS SAS 7+
+>0x9C string DATA data file
+>0x9C string CATALOG catalog
+>0x9C string INDEX data file index
+>0x9C string VIEW data view
+
+# spss magic for SPSS system and portable files,
+# from Bruce Foster (bef@nwu.edu).
+
+0 long 0xc1e2c3c9 SPSS Portable File
+>40 string x %s
+
+0 string $FL2 SPSS System File
+>24 string x %s
+
+# Macintosh filesystem data
+# From "Tom N Harris" <telliamed@mac.com>
+# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net>
+# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these
+# entries depend on the data arithmetic added after v.35
+# There's also some Pascal strings in here, ditto...
+
+# The boot block signature, according to IM:Files, is
+# "for HFS volumes, this field always contains the value 0x4C4B."
+# But if this is true for MFS or HFS+ volumes, I don't know.
+# Alternatively, the boot block is supposed to be zeroed if it's
+# unused, so a simply >0 should suffice.
+
+0x400 beshort 0xD2D7 Macintosh MFS data
+>0 beshort 0x4C4B (bootable)
+>0x40a beshort &0x8000 (locked)
+>0x402 beldate-0x7C25B080 x created: %s,
+>0x406 beldate-0x7C25B080 >0 last backup: %s,
+>0x414 belong x block size: %d,
+>0x412 beshort x number of blocks: %d,
+>0x424 pstring x volume name: %s
+
+# "BD" is has many false positives
+#0x400 beshort 0x4244 Macintosh HFS data
+#>0 beshort 0x4C4B (bootable)
+#>0x40a beshort &0x8000 (locked)
+#>0x40a beshort ^0x0100 (mounted)
+#>0x40a beshort &0x0200 (spared blocks)
+#>0x40a beshort &0x0800 (unclean)
+#>0x47C beshort 0x482B (Embedded HFS+ Volume)
+#>0x402 beldate-0x7C25B080 x created: %s,
+#>0x406 beldate-0x7C25B080 x last modified: %s,
+#>0x440 beldate-0x7C25B080 >0 last backup: %s,
+#>0x414 belong x block size: %d,
+#>0x412 beshort x number of blocks: %d,
+#>0x424 pstring x volume name: %s
+
+0x400 beshort 0x482B Macintosh HFS Extended
+>&0 beshort x version %d data
+>0 beshort 0x4C4B (bootable)
+>0x404 belong ^0x00000100 (mounted)
+>&2 belong &0x00000200 (spared blocks)
+>&2 belong &0x00000800 (unclean)
+>&2 belong &0x00008000 (locked)
+>&6 string x last mounted by: '%.4s',
+# really, that should be treated as a belong and we print a string
+# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1"
+>&14 beldate-0x7C25B080 x created: %s,
+# only the creation date is local time, all other timestamps in HFS+ are UTC.
+>&18 bedate-0x7C25B080 x last modified: %s,
+>&22 bedate-0x7C25B080 >0 last backup: %s,
+>&26 bedate-0x7C25B080 >0 last checked: %s,
+>&38 belong x block size: %d,
+>&42 belong x number of blocks: %d,
+>&46 belong x free blocks: %d
+
+# I don't think this is really necessary since it doesn't do much and
+# anything with a valid driver descriptor will also have a valid
+# partition map
+#0 beshort 0x4552 Apple Device Driver data
+#>&24 beshort =1 \b, MacOS
+
+# Is that the partition type a cstring or a pstring? Well, IM says "strings
+# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a
+# cstring. Of course, partitions can contain more than four entries, but
+# what're you gonna do?
+0x200 beshort 0x504D Apple Partition data
+>0x2 beshort x block size: %d,
+>0x230 string x first type: %s,
+>0x210 string x name: %s,
+>0x254 belong x number of blocks: %d,
+>0x400 beshort 0x504D
+>>0x430 string x second type: %s,
+>>0x410 string x name: %s,
+>>0x454 belong x number of blocks: %d,
+>>0x800 beshort 0x504D
+>>>0x830 string x third type: %s,
+>>>0x810 string x name: %s,
+>>>0x854 belong x number of blocks: %d,
+>>>0xa00 beshort 0x504D
+>>>>0xa30 string x fourth type: %s,
+>>>>0xa10 string x name: %s,
+>>>>0xa54 belong x number of blocks: %d
+# AFAIK, only the signature is different
+0x200 beshort 0x5453 Apple Old Partition data
+>0x2 beshort x block size: %d,
+>0x230 string x first type: %s,
+>0x210 string x name: %s,
+>0x254 belong x number of blocks: %d,
+>0x400 beshort 0x504D
+>>0x430 string x second type: %s,
+>>0x410 string x name: %s,
+>>0x454 belong x number of blocks: %d,
+>>0x800 beshort 0x504D
+>>>0x830 string x third type: %s,
+>>>0x810 string x name: %s,
+>>>0x854 belong x number of blocks: %d,
+>>>0xa00 beshort 0x504D
+>>>>0xa30 string x fourth type: %s,
+>>>>0xa10 string x name: %s,
+>>>>0xa54 belong x number of blocks: %d
+
+# From: Remi Mommsen <mommsen@slac.stanford.edu>
+0 string BOMStore Mac OS X bill of materials (BOM) fil
+
+#------------------------------------------------------------------------------
+# mathematica: file(1) magic for mathematica files
+# "H. Nanosecond" <aldomel@ix.netcom.com>
+# Mathematica a multi-purpose math program
+# versions 2.2 and 3.0
+
+#mathematica .mb
+0 string \064\024\012\000\035\000\000\000 Mathematica version 2 notebook
+0 string \064\024\011\000\035\000\000\000 Mathematica version 2 notebook
+
+# .ma
+# multiple possibilites:
+
+0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook
+#>41 string >\0 %s
+
+#0 string (*^\n\n::[\011palette Mathematica notebook version 2.x
+
+#0 string (*^\n\n::[\011Information Mathematica notebook version 2.x
+#>675 string >\0 %s #doesn't work well
+
+# there may be 'cr' instread of 'nl' in some does this matter?
+
+# generic:
+0 string (*^\r\r::[\011 Mathematica notebook version 2.x
+0 string \(\*\^\r\n\r\n\:\:\[\011 Mathematica notebook version 2.x
+0 string (*^\015 Mathematica notebook version 2.x
+0 string (*^\n\r\n\r::[\011 Mathematica notebook version 2.x
+0 string (*^\r::[\011 Mathematica notebook version 2.x
+0 string (*^\r\n::[\011 Mathematica notebook version 2.x
+0 string (*^\n\n::[\011 Mathematica notebook version 2.x
+0 string (*^\n::[\011 Mathematica notebook version 2.x
+
+
+# Mathematica .mx files
+
+#0 string (*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*) Mathematica binary file
+0 string (*This\ is\ a\ Mathematica\ binary\ Mathematica binary file
+#>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
+# >71... is optional
+>88 string >\0 from %s
+
+
+# Mathematica files PBF:
+# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000
+0 string MMAPBF\000\001\000\000\000\203\000\001\000 Mathematica PBF (fonts I think)
+
+# .ml files These are menu resources I think
+# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
+# how to put that into a magic rule?
+4 string \ A~ MAthematica .ml file
+
+# .nb files
+#too long 0 string (***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook Mathematica 3.0 notebook
+0 string (*********************** Mathematica 3.0 notebook
+
+# other (* matches it is a comment start in these langs
+0 string (* Mathematica, or Pascal, Modula-2 or 3 code text
+
+#########################
+# MatLab v5
+0 string MATLAB Matlab v5 mat-file
+>126 short 0x494d (big endian)
+>>124 beshort x version 0x%04x
+>126 short 0x4d49 (little endian)
+>>124 leshort x version 0x%04x
+
+#------------------------------------------------------------------------------
+# teapot: file(1) magic for "teapot" spreadsheet
+#
+0 string #!teapot\012xdr teapot work sheet (XDR format)
+
+#------------------------------------------------------------------------------
+# psion: file(1) magic for Psion handhelds data
+# from: Peter Breitenlohner <peb@mppmu.mpg.de>
+#
+0 lelong 0x10000037 Psion Series 5
+>4 lelong 0x10000039 font file
+>4 lelong 0x1000003A printer driver
+>4 lelong 0x1000003B clipboard
+>4 lelong 0x10000042 multi-bitmap image
+>4 lelong 0x1000006A application infomation file
+>4 lelong 0x1000006D
+>>8 lelong 0x1000007D sketch image
+>>8 lelong 0x1000007E voice note
+>>8 lelong 0x1000007F word file
+>>8 lelong 0x10000085 OPL program
+>>8 lelong 0x10000088 sheet file
+>>8 lelong 0x100001C4 EasyFax initialisation file
+>4 lelong 0x10000073 OPO module
+>4 lelong 0x10000074 OPL application
+>4 lelong 0x1000008A exported multi-bitmap image
+
+0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image
+
+0 lelong 0x10000050 Psion Series 5
+>4 lelong 0x1000006D database
+>4 lelong 0x100000E4 ini file
+
+0 lelong 0x10000079 Psion Series 5 binary:
+>4 lelong 0x00000000 DLL
+>4 lelong 0x10000049 comms hardware library
+>4 lelong 0x1000004A comms protocol library
+>4 lelong 0x1000005D OPX
+>4 lelong 0x1000006C application
+>4 lelong 0x1000008D DLL
+>4 lelong 0x100000AC logical device driver
+>4 lelong 0x100000AD physical device driver
+>4 lelong 0x100000E5 file transfer protocol
+>4 lelong 0x100000E5 file transfer protocol
+>4 lelong 0x10000140 printer defintion
+>4 lelong 0x10000141 printer defintion
+
+0 lelong 0x1000007A Psion Series 5 executable
+
+#------------------------------------------------------------------------------
+# diff: file(1) magic for diff(1) output
+#
+0 string diff\ 'diff' output text
+0 string ***\ 'diff' output text
+0 string Only\ in\ 'diff' output text
+0 string Common\ subdirectories:\ 'diff' output text
+
+#------------------------------------------------------------------------------
+# ESRI Shapefile format (.shp .shx .dbf=DBaseIII)
+# Based on info from
+# <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>
+0 belong 9994 ESRI Shapefile
+>4 belong =0
+>8 belong =0
+>12 belong =0
+>16 belong =0
+>20 belong =0
+>28 lelong x version %d
+>24 belong x length %d
+>32 lelong =0 type Null Shape
+>32 lelong =1 type Point
+>32 lelong =3 type PolyLine
+>32 lelong =5 type Polygon
+>32 lelong =8 type MultiPoint
+>32 lelong =11 type PointZ
+>32 lelong =13 type PolyLineZ
+>32 lelong =15 type PolygonZ
+>32 lelong =18 type MultiPointZ
+>32 lelong =21 type PointM
+>32 lelong =23 type PolyLineM
+>32 lelong =25 type PolygonM
+>32 lelong =28 type MultiPointM
+>32 lelong =31 type MultiPatch
+#------------------------------------------------------------------------------
+# GIMP Gradient: file(1) magic for the GIMP's gradient data files
+# by Federico Mena <federico@nuclecu.unam.mx>
+
+0 string GIMP\ Gradient GIMP gradient data
+
+#------------------------------------------------------------------------------
+# XCF: file(1) magic for the XCF image format used in the GIMP developed
+# by Spencer Kimball and Peter Mattis
+# ('Bucky' LaDieu, nega@vt.edu)
+
+0 string gimp\ xcf GIMP XCF image data,
+>9 string file version 0,
+>9 string v version
+>>10 string >\0 %s,
+>14 belong x %lu x
+>18 belong x %lu,
+>22 belong 0 RGB Color
+>22 belong 1 Greyscale
+>22 belong 2 Indexed Color
+>22 belong >2 Unknown Image Type.
+
+#------------------------------------------------------------------------------
+# XCF: file(1) magic for the patterns used in the GIMP, developed
+# by Spencer Kimball and Peter Mattis
+# ('Bucky' LaDieu, nega@vt.edu)
+
+20 string GPAT GIMP pattern data,
+>24 string x %s
+
+#------------------------------------------------------------------------------
+# XCF: file(1) magic for the brushes used in the GIMP, developed
+# by Spencer Kimball and Peter Mattis
+# ('Bucky' LaDieu, nega@vt.edu)
+
+20 string GIMP GIMP brush data
+
+#------------------------------------------------------------------------------
+# adi: file(1) magic for ADi's objects
+# From Gregory McGarry <g.mcgarry@ieee.org>
+#
+0 leshort 0x521c COFF DSP21k
+>18 lelong &02 executable,
+>18 lelong ^02
+>>18 lelong &01 static object,
+>>18 lelong ^01 relocatable object,
+>18 lelong &010 stripped
+>18 lelong ^010 not stripped
+
+#------------------------------------------------------------------------------
+# autocad: file(1) magic for cad files
+#
+
+# AutoCAD DWG versions R13/R14 (www.autodesk.com)
+# Written December 01, 2003 by Lester Hightower
+# Based on the DWG File Format Specifications at http://www.opendwg.org/
+0 string \101\103\061\060\061 AutoCAD
+>5 string \062\000\000\000\000 DWG ver. R13
+>5 string \064\000\000\000\000 DWG ver. R14
+
+# Microstation DGN/CIT Files (www.bentley.com)
+# Written October 30, 2003 by Lester Hightower
+# DGN is the default file extension of Microstation/Intergraph CAD files.
+# CIT is the proprietary raster format (similar to TIFF) used to attach
+# raster underlays to Microstation DGN (vector) drawings.
+#
+# http://www.wotsit.org/search.asp
+# http://filext.com/detaillist.php?extdetail=DGN
+# http://filext.com/detaillist.php?extdetail=CIT
+#
+# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2
+# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928
+# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682
+# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F
+0 string \010\011\376 Microstation
+>3 string \002
+>>30 string \372\104 DGN File
+>>30 string \172\104 DGN File
+>>30 string \026\105 DGN File
+>4 string \030\000\000 CIT File
+
+# AutoCad, from Nahuel Greco
+0 string AC1012 AutoCad (release 12)
+0 string AC1014 AutoCad (release 14)
+
+#------------------------------------------------------------------------------
+# T602 editor documents
+# by David Necas <yeti@physics.muni.cz>
+0 string @CT\ T602 document data,
+>4 string 0 Kamenicky
+>4 string 1 CP 852
+>4 string 2 KOI8-CS
+>4 string >2 unknown encoding
+
+# Vi IMproved Encrypted file
+# by David Necas <yeti@physics.muni.cz>
+0 string VimCrypt~ Vim encrypted file data
+
+#------------------------------------------------------------------------------
+# tex: file(1) magic for TeX files
+#
+# From <conklin@talisman.kaleida.com>
+
+# Although we may know the offset of certain text fields in TeX DVI
+# and font files, we can't use them reliably because they are not
+# zero terminated. [but we do anyway, christos]
+0 string \367\002 TeX DVI file
+>16 string >\0 (%s)
+0 string \367\203 TeX generic font data
+0 string \367\131 TeX packed font data
+>3 string >\0 (%s)
+0 string \367\312 TeX virtual font data
+0 string This\ is\ TeX, TeX transcript text
+0 string This\ is\ METAFONT, METAFONT transcript text
+
+# There is no way to detect TeX Font Metric (*.tfm) files without
+# breaking them apart and reading the data. The following patterns
+# match most *.tfm files generated by METAFONT or afm2tfm.
+2 string \000\021 TeX font metric data
+>33 string >\0 (%s)
+2 string \000\022 TeX font metric data
+>33 string >\0 (%s)
+
+# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \\input\ texinfo Texinfo source text
+0 string This\ is\ Info\ file GNU Info text
+
+# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \\input TeX document text
+0 string \\section LaTeX document text
+0 string \\setlength LaTeX document text
+0 string \\documentstyle LaTeX document text
+0 string \\chapter LaTeX document text
+0 string \\documentclass LaTeX 2e document text
+0 string \\relax LaTeX auxiliary file
+0 string \\contentsline LaTeX table of contents
+0 string %\ -*-latex-*- LaTeX document text
+
+# Tex document, from Hendrik Scholz <hendrik@scholz.net>
+0 string \\ifx TeX document text
+
+# Index and glossary files
+0 string \\indexentry LaTeX raw index file
+0 string \\begin{theindex} LaTeX sorted index
+0 string \\glossaryentry LaTeX raw glossary
+0 string \\begin{theglossary} LaTeX sorted glossary
+0 string This\ is\ makeindex Makeindex log file
+
+# End of TeX
+
+#------------------------------------------------------------------------------
+# file(1) magic for BibTex text files
+# From Hendrik Scholz <hendrik@scholz.net>
+
+0 string/c @article{ BibTeX text file
+0 string/c @book{ BibTeX text file
+0 string/c @inbook{ BibTeX text file
+0 string/c @incollection{ BibTeX text file
+0 string/c @inproceedings{ BibTeX text file
+0 string/c @manual{ BibTeX text file
+0 string/c @misc{ BibTeX text file
+0 string/c @preamble{ BibTeX text file
+0 string/c @phdthesis{ BibTeX text file
+0 string/c @techreport{ BibTeX text file
+0 string/c @unpublished{ BibTeX text file
+
+73 string %%%\ \ BibTeX-file{ BibTex text file (with full header)
+
+73 string %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header)
+
+0 string %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file
+
+0 string %\ BibTeX\ ` BibTeX custom bibliography style text file
+
+0 string @c\ @mapfile{ TeX font aliases text file
+
+
+#------------------------------------------------------------------------------
+# psdbms: file(1) magic for psdatabase
+#
+0 belong&0xff00ffff 0x56000000 ps database
+>1 string >\0 version %s
+>4 string >\0 from kernel %s
+#------------------------------------------------------------------------------
+# convex: file(1) magic for Convex boxes
+#
+# Convexes are big-endian.
+#
+# /*\
+# * Below are the magic numbers and tests added for Convex.
+# * Added at beginning, because they are expected to be used most.
+# \*/
+0 belong 0507 Convex old-style object
+>16 belong >0 not stripped
+0 belong 0513 Convex old-style demand paged executable
+>16 belong >0 not stripped
+0 belong 0515 Convex old-style pre-paged executable
+>16 belong >0 not stripped
+0 belong 0517 Convex old-style pre-paged, non-swapped executable
+>16 belong >0 not stripped
+0 belong 0x011257 Core file
+#
+# The following are a series of dump format magic numbers. Each one
+# corresponds to a drastically different dump format. The first on is
+# the original dump format on a 4.1 BSD or earlier file system. The
+# second marks the change between the 4.1 file system and the 4.2 file
+# system. The Third marks the changing of the block size from 1K
+# to 2K to be compatible with an IDC file system. The fourth indicates
+# a dump that is dependent on Convex Storage Manager, because data in
+# secondary storage is not physically contained within the dump.
+# The restore program uses these number to determine how the data is
+# to be extracted.
+#
+24 belong =60011 dump format, 4.1 BSD or earlier
+24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC
+24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible)
+24 belong =60014 dump format, Convex Storage Manager by-reference dump
+#
+# what follows is a bunch of bit-mask checks on the flags field of the opthdr.
+# If there is no `=' sign, assume just checking for whether the bit is set?
+#
+0 belong 0601 Convex SOFF
+>88 belong&0x000f0000 =0x00000000 c1
+>88 belong &0x00010000 c2
+>88 belong &0x00020000 c2mp
+>88 belong &0x00040000 parallel
+>88 belong &0x00080000 intrinsic
+>88 belong &0x00000001 demand paged
+>88 belong &0x00000002 pre-paged
+>88 belong &0x00000004 non-swapped
+>88 belong &0x00000008 POSIX
+#
+>84 belong &0x80000000 executable
+>84 belong &0x40000000 object
+>84 belong&0x20000000 =0 not stripped
+>84 belong&0x18000000 =0x00000000 native fpmode
+>84 belong&0x18000000 =0x10000000 ieee fpmode
+>84 belong&0x18000000 =0x18000000 undefined fpmode
+#
+0 belong 0605 Convex SOFF core
+#
+0 belong 0607 Convex SOFF checkpoint
+>88 belong&0x000f0000 =0x00000000 c1
+>88 belong &0x00010000 c2
+>88 belong &0x00020000 c2mp
+>88 belong &0x00040000 parallel
+>88 belong &0x00080000 intrinsic
+>88 belong &0x00000008 POSIX
+#
+>84 belong&0x18000000 =0x00000000 native fpmode
+>84 belong&0x18000000 =0x10000000 ieee fpmode
+>84 belong&0x18000000 =0x18000000 undefined fpmode
+
+#------------------------------------------------------------------------------
+# freebsd: file(1) magic for FreeBSD objects
+#
+# All new-style FreeBSD magic numbers are in host byte order (i.e.,
+# little-endian on x86).
+#
+# XXX - this comes from the file "freebsd" in a recent FreeBSD version of
+# "file"; it, and the NetBSD stuff in "netbsd", appear to use different
+# schemes for distinguishing between executable images, shared libraries,
+# and object files.
+#
+# FreeBSD says:
+#
+# Regardless of whether it's pure, demand-paged, or none of the
+# above:
+#
+# if the entry point is < 4096, then it's a shared library if
+# the "has run-time loader information" bit is set, and is
+# position-independent if the "is position-independent" bit
+# is set;
+#
+# if the entry point is >= 4096 (or >4095, same thing), then it's
+# an executable, and is dynamically-linked if the "has run-time
+# loader information" bit is set.
+#
+# On x86, NetBSD says:
+#
+# If it's neither pure nor demand-paged:
+#
+# if it has the "has run-time loader information" bit set, it's
+# a dynamically-linked executable;
+#
+# if it doesn't have that bit set, then:
+#
+# if it has the "is position-independent" bit set, it's
+# position-independent;
+#
+# if the entry point is non-zero, it's an executable, otherwise
+# it's an object file.
+#
+# If it's pure:
+#
+# if it has the "has run-time loader information" bit set, it's
+# a dynamically-linked executable, otherwise it's just an
+# executable.
+#
+# If it's demand-paged:
+#
+# if it has the "has run-time loader information" bit set,
+# then:
+#
+# if the entry point is < 4096, it's a shared library;
+#
+# if the entry point is = 4096 or > 4096 (i.e., >= 4096),
+# it's a dynamically-linked executable);
+#
+# if it doesn't have the "has run-time loader information" bit
+# set, then it's just an executable.
+#
+# (On non-x86, NetBSD does much the same thing, except that it uses
+# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K
+# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's
+# had 8K pages; dunno about MIPS.)
+#
+# I suspect the two will differ only in perverse and uninteresting cases
+# ("shared" libraries that aren't demand-paged and whose pages probably
+# won't actually be shared, executables with entry points <4096).
+#
+# I leave it to those more familiar with FreeBSD and NetBSD to figure out
+# what the right answer is (although using ">4095", FreeBSD-style, is
+# probably better than separately checking for "=4096" and ">4096",
+# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged
+# executables using the NetBSD technique.)
+#
+0 lelong&0377777777 041400407 FreeBSD/i386
+>20 lelong <4096
+>>3 byte&0xC0 &0x80 shared library
+>>3 byte&0xC0 0x40 PIC object
+>>3 byte&0xC0 0x00 object
+>20 lelong >4095
+>>3 byte&0x80 0x80 dynamically linked executable
+>>3 byte&0x80 0x00 executable
+>16 lelong >0 not stripped
+
+0 lelong&0377777777 041400410 FreeBSD/i386 pure
+>20 lelong <4096
+>>3 byte&0xC0 &0x80 shared library
+>>3 byte&0xC0 0x40 PIC object
+>>3 byte&0xC0 0x00 object
+>20 lelong >4095
+>>3 byte&0x80 0x80 dynamically linked executable
+>>3 byte&0x80 0x00 executable
+>16 lelong >0 not stripped
+
+0 lelong&0377777777 041400413 FreeBSD/i386 demand paged
+>20 lelong <4096
+>>3 byte&0xC0 &0x80 shared library
+>>3 byte&0xC0 0x40 PIC object
+>>3 byte&0xC0 0x00 object
+>20 lelong >4095
+>>3 byte&0x80 0x80 dynamically linked executable
+>>3 byte&0x80 0x00 executable
+>16 lelong >0 not stripped
+
+0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged
+>20 lelong <4096
+>>3 byte&0xC0 &0x80 shared library
+>>3 byte&0xC0 0x40 PIC object
+>>3 byte&0xC0 0x00 object
+>20 lelong >4095
+>>3 byte&0x80 0x80 dynamically linked executable
+>>3 byte&0x80 0x00 executable
+>16 lelong >0 not stripped
+
+# XXX gross hack to identify core files
+# cores start with a struct tss; we take advantage of the following:
+# byte 7: highest byte of the kernel stack pointer, always 0xfe
+# 8/9: kernel (ring 0) ss value, always 0x0010
+# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0
+# 28: low order byte of the current PTD entry, always 0 since the
+# PTD is page-aligned
+#
+7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file
+>1039 string >\0 from '%s'
+
+# /var/run/ld.so.hints
+# What are you laughing about?
+0 lelong 011421044151 ld.so hints file (Little Endian
+>4 lelong >0 \b, version %d)
+>4 belong <=0 \b)
+0 belong 011421044151 ld.so hints file (Big Endian
+>4 belong >0 \b, version %d)
+>4 belong <=0 \b)
+
+#
+# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities
+#
+0 string SCRSHOT_ scrshot(1) screenshot,
+>8 byte x version %d,
+>9 byte 2 %d bytes in header,
+>>10 byte x %d chars wide by
+>>11 byte x %d chars high
+
+#------------------------------------------------------------------------------
+# gcc: file(1) magic for GCC special files
+#
+0 string gpch GCC precompiled header
+
+# The version field is annoying. It's 3 characters, not zero-terminated.
+>5 byte x (version %c
+>6 byte x \b%c
+>7 byte x \b%c)
+
+# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'
+>4 byte 67 for C
+>4 byte 111 for Objective C
+>4 byte 43 for C++
+>4 byte 79 for Objective C++
+
+#-----------------------------------------------------------------------------
+# natinst: file(1) magic for National Instruments Code Files
+
+#
+# From <egamez@fcfm.buap.mx> Enrique Gámez-Flores
+# version 1
+# Many formats still missing, we use, for the moment LabVIEW
+# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing
+#
+0 string RSRC National Instruments,
+# Check if it's a LabVIEW File
+>8 string LV LabVIEW File,
+# Check wich kind of file is
+>>10 string SB Code Resource File, data
+>>10 string IN Virtual Instrument Program, data
+>>10 string AR VI Library, data
+# This is for Menu Libraries
+>8 string LMNULBVW Portable File Names, data
+# This is for General Resources
+>8 string rsc Resources File, data
+# This is for VXI Package
+0 string VMAP National Instruments, VXI File, data
+#------------------------------------------------------------------------------
+# nitpicker: file(1) magic for Flowfiles.
+# From: Christian Jachmann <C.Jachmann@gmx.net> http://www.nitpicker.de
+0 string NPFF NItpicker Flow File
+>4 byte x V%d.
+>5 byte x %d
+>6 bedate x started: %s
+>10 bedate x stopped: %s
+>14 belong x Bytes: %u
+>18 belong x Bytes1: %u
+>22 belong x Flows: %u
+>26 belong x Pkts: %u
+
+#------------------------------------------------------------------------------
+# typeset: file(1) magic for other typesetting
+#
+0 string Interpress/Xerox Xerox InterPress data
+>16 string / (version
+>>17 string >\0 %s)
+
+#------------------------------------------------------------------------------
+# commands: file(1) magic for various shells and interpreters
+#
+0 string : shell archive or script for antique kernel text
+0 string/b #!\ /bin/sh Bourne shell script text executable
+0 string/b #!\ /bin/csh C shell script text executable
+# korn shell magic, sent by George Wu, gwu@clyde.att.com
+0 string/b #!\ /bin/ksh Korn shell script text executable
+0 string/b #!\ /bin/tcsh Tenex C shell script text executable
+0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable
+0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable
+
+#
+# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
+0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable
+0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable
+0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable
+0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable
+0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable
+0 string/b #!\ /bin/nawk new awk script text executable
+0 string/b #!\ /usr/bin/nawk new awk script text executable
+0 string/b #!\ /usr/local/bin/nawk new awk script text executable
+0 string/b #!\ /bin/gawk GNU awk script text executable
+0 string/b #!\ /usr/bin/gawk GNU awk script text executable
+0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable
+#
+0 string/b #!\ /bin/awk awk script text executable
+0 string/b #!\ /usr/bin/awk awk script text executable
+0 string BEGIN awk script text
+
+# AT&T Bell Labs' Plan 9 shell
+0 string/b #!\ /bin/rc Plan 9 rc shell script text executable
+
+# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
+0 string/b #!\ /bin/bash Bourne-Again shell script text executable
+0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable
+
+# using env
+0 string #!/usr/bin/env a
+>15 string >\0 %s script text executable
+0 string #!\ /usr/bin/env a
+>16 string >\0 %s script text executable
+
+# PHP scripts
+# Ulf Harnhammar <ulfh@update.uu.se>
+0 string/c =<?php PHP script text
+0 string =<?\n PHP script text
+0 string =<?\r PHP script text
+0 string/b #!\ /usr/local/bin/php PHP script text executable
+0 string/b #!\ /usr/bin/php PHP script text executable
+
+0 string Zend\x00 PHP script Zend Optimizer data
+
+#------------------------------------------------------------------------------
+# encore: file(1) magic for Encore machines
+#
+# XXX - needs to have the byte order specified (NS32K was little-endian,
+# dunno whether they run the 88K in little-endian mode or not).
+#
+0 short 0x154 Encore
+>20 short 0x107 executable
+>20 short 0x108 pure executable
+>20 short 0x10b demand-paged executable
+>20 short 0x10f unsupported executable
+>12 long >0 not stripped
+>22 short >0 - version %ld
+>22 short 0 -
+#>4 date x stamp %s
+0 short 0x155 Encore unsupported executable
+>12 long >0 not stripped
+>22 short >0 - version %ld
+>22 short 0 -
+#>4 date x stamp %s
+
+#------------------------------------------------------------------------------
+# filesystems: file(1) magic for different filesystems
+#
+0 string \366\366\366\366 PC formatted floppy with no filesystem
+# Sun disk labels
+# From /usr/include/sun/dklabel.h:
+0774 beshort 0xdabe Sun disk label
+>0 string x '%s
+>>31 string >\0 \b%s
+>>>63 string >\0 \b%s
+>>>>95 string >\0 \b%s
+>0 string x \b'
+>0734 short >0 %d rpm,
+>0736 short >0 %d phys cys,
+>0740 short >0 %d alts/cyl,
+>0746 short >0 %d interleave,
+>0750 short >0 %d data cyls,
+>0752 short >0 %d alt cyls,
+>0754 short >0 %d heads/partition,
+>0756 short >0 %d sectors/track,
+>0764 long >0 start cyl %ld,
+>0770 long x %ld blocks
+# Is there a boot block written 1 sector in?
+>512 belong&077777777 0600407 \b, boot block present
+0x1FE leshort 0xAA55 x86 boot sector
+>2 string OSBS \b, OS/BS MBR
+# J\xf6rg Jenderek <joerg.jenderek@gmx.net>
+>0x8C string Invalid\ partition\ table \b, MS-DOS MBR
+>0x9D string Invalid\ partition\ table \b, DR-DOS MBR, version 7.01 to 7.03
+>0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222
+>0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950
+>0x145 string Default:\ F \b, FREE-DOS MBR
+>0 string \0\0\0\0 \b, extended partition table
+# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90
+# older drives may use E9 xx xx
+>0 lelong&0x009000EB 0x009000EB
+>0 lelong&0x000000E9 0x000000E9
+>>1 ubyte >37 \b, code offset 0x%x
+# mtools-3.9.8/msdos.h
+# usual values are marked with comments to get only informations of strange FAT systems
+# valid sectorsize are from 32 to 2048
+>>>11 uleshort <2049
+>>>>11 uleshort >31
+>>>>>3 string >\0 \b, OEM-ID "%8.8s"
+>>>>>11 uleshort >512 \b, Bytes/sector %u
+#>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual)
+>>>>>11 uleshort <512 \b, Bytes/sector %u
+>>>>>13 ubyte >1 \b, sectors/cluster %u
+#>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies)
+>>>>>14 uleshort >32 \b, reserved sectors %u
+#>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32)
+#>>>>>14 uleshort >1 \b, reserved sectors %u
+#>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16)
+>>>>>14 uleshort <1 \b, reserved sectors %u
+>>>>>16 ubyte >2 \b, FATs %u
+#>>>>>16 ubyte =2 \b, FATs %u (usual)
+>>>>>16 ubyte =1 \b, FAT %u
+>>>>>16 ubyte >0
+>>>>>17 uleshort >0 \b, root entries %u
+#>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32)
+>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB)
+#>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32)
+>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x
+#>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy)
+>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x
+>>>>>22 uleshort >0 \b, sectors/FAT %u
+#>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32)
+>>>>>26 ubyte >2 \b, heads %u
+#>>>>>26 ubyte =2 \b, heads %u (usual floppy)
+>>>>>26 ubyte =1 \b, heads %u
+>>>>>28 ulelong >0 \b, hidden sectors %u
+#>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy)
+>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB)
+#>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB)
+# FAT<32 specific
+# NOT le FAT3=NOT 3TAF=0xCCABBEB9
+>>>>>82 ulelong&0xCCABBEB9 >0
+>>>>>>36 ubyte >0x80 \b, physical drive 0x%x
+#>>>>>>36 ubyte =0x80 \b, physical drive 0x%x=0x80 (usual harddisk)
+>>>>>>36 ubyte&0x7F >0 \b, physical drive 0x%x
+#>>>>>>36 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
+>>>>>>37 ubyte >0 \b, reserved 0x%x
+#>>>>>>37 ubyte =0 \b, reserved 0x%x
+>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x)
+>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x)
+>>>>>>38 ubyte =0x29
+>>>>>>>39 ulelong x \b, serial number 0x%x
+>>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
+>>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
+>>>>>>>43 string =NO\ NAME \b, unlabeled
+>>>>>>54 string FAT1 \b, FAT
+>>>>>>>54 string FAT12 \b (12 bit)
+>>>>>>>54 string FAT16 \b (16 bit)
+# FAT32 specific
+>>>>>82 string FAT32 \b, FAT (32 bit)
+>>>>>>36 ulelong x \b, sectors/FAT %u
+>>>>>>40 uleshort >0 \b, extension flags %u
+#>>>>>>40 uleshort =0 \b, extension flags %u
+>>>>>>42 uleshort >0 \b, fsVersion %u
+#>>>>>>42 uleshort =0 \b, fsVersion %u (usual)
+>>>>>>44 ulelong >2 \b, rootdir cluster %u
+#>>>>>>44 ulelong =2 \b, rootdir cluster %u
+#>>>>>>44 ulelong =1 \b, rootdir cluster %u
+>>>>>>48 uleshort >1 \b, infoSector %u
+#>>>>>>48 uleshort =1 \b, infoSector %u (usual)
+>>>>>>48 uleshort <1 \b, infoSector %u
+>>>>>>50 uleshort >6 \b, Backup boot sector %u
+#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual)
+>>>>>>50 uleshort <6 \b, Backup boot sector %u
+>>>>>>54 ulelong >0 \b, reserved1 0x%x
+>>>>>>58 ulelong >0 \b, reserved2 0x%x
+>>>>>>62 ulelong >0 \b, reserved3 0x%x
+# same structure as FAT1X
+>>>>>>64 ubyte >0x80 \b, physical drive 0x%x
+#>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk)
+>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x
+#>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
+>>>>>>65 ubyte >0 \b, reserved 0x%x
+>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x)
+>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x)
+>>>>>>66 ubyte =0x29
+>>>>>>>67 ulelong x \b, serial number 0x%x
+>>>>>>>71 string <NO\ NAME \b, label: "%11.11s"
+>>>>>>71 string >NO\ NAME \b, label: "%11.11s"
+>>>>>>71 string =NO\ NAME \b, unlabeled
+### FATs end
+>0x200 lelong 0x82564557 \b, BSD disklabel
+# FATX
+0 string FATX FATX filesystem data
+
+
+# Minix filesystems - Juan Cespedes <cespedes@debian.org>
+0x410 leshort 0x137f Minix filesystem
+0x410 beshort 0x137f Minix filesystem (big endian),
+>0x402 beshort !0 \b, %d zones
+>0x1e string minix \b, bootable
+0x410 leshort 0x138f Minix filesystem, 30 char names
+0x410 leshort 0x2468 Minix filesystem, version 2
+0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names
+
+# romfs filesystems - Juan Cespedes <cespedes@debian.org>
+0 string -rom1fs-\0 romfs filesystem, version 1
+>8 belong x %d bytes,
+>16 string x named %s.
+
+# netboot image - Juan Cespedes <cespedes@debian.org>
+0 lelong 0x1b031336L Netboot image,
+>4 lelong&0xFFFFFF00 0
+>>4 lelong&0x100 0x000 mode 2
+>>4 lelong&0x100 0x100 mode 3
+>4 lelong&0xFFFFFF00 !0 unknown mode
+
+0x18b string OS/2 OS/2 Boot Manager
+
+9564 lelong 0x00011954 Unix Fast File system (little-endian),
+>8404 string x last mounted on %s,
+#>9504 ledate x last checked at %s,
+>8224 ledate x last written at %s,
+>8401 byte x clean flag %d,
+>8228 lelong x number of blocks %d,
+>8232 lelong x number of data blocks %d,
+>8236 lelong x number of cylinder groups %d,
+>8240 lelong x block size %d,
+>8244 lelong x fragment size %d,
+>8252 lelong x minimum percentage of free blocks %d,
+>8256 lelong x rotational delay %dms,
+>8260 lelong x disk rotational speed %drps,
+>8320 lelong 0 TIME optimization
+>8320 lelong 1 SPACE optimization
+
+9564 belong 0x00011954 Unix Fast File system (big-endian),
+>7168 long 0x4c41424c Apple UFS Volume
+>>7186 string x named %s,
+>>7176 belong x volume label version %d,
+>>7180 bedate x created on %s,
+>8404 string x last mounted on %s,
+#>9504 bedate x last checked at %s,
+>8224 bedate x last written at %s,
+>8401 byte x clean flag %d,
+>8228 belong x number of blocks %d,
+>8232 belong x number of data blocks %d,
+>8236 belong x number of cylinder groups %d,
+>8240 belong x block size %d,
+>8244 belong x fragment size %d,
+>8252 belong x minimum percentage of free blocks %d,
+>8256 belong x rotational delay %dms,
+>8260 belong x disk rotational speed %drps,
+>8320 belong 0 TIME optimization
+>8320 belong 1 SPACE optimization
+
+# ext2/ext3 filesystems - Andreas Dilger <adilger@turbolabs.com>
+0x438 leshort 0xEF53 Linux
+>0x44c lelong x rev %d
+>0x43e leshort x \b.%d
+>0x45c lelong ^0x0000004 ext2 filesystem data
+>>0x43a leshort ^0x0000001 (mounted or unclean)
+>0x45c lelong &0x0000004 ext3 filesystem data
+>>0x460 lelong &0x0000004 (needs journal recovery)
+>0x43a leshort &0x0000002 (errors)
+>0x460 lelong &0x0000001 (compressed)
+#>0x460 lelong &0x0000002 (filetype)
+#>0x464 lelong &0x0000001 (sparse_super)
+>0x464 lelong &0x0000002 (large files)
+
+# SGI disk labels - Nathan Scott <nathans@debian.org>
+0 belong 0x0BE5A941 SGI disk label (volume header)
+
+# SGI XFS filesystem - Nathan Scott <nathans@debian.org>
+0 belong 0x58465342 SGI XFS filesystem data
+>0x4 belong x (blksz %d,
+>0x68 beshort x inosz %d,
+>0x64 beshort ^0x2004 v1 dirs)
+>0x64 beshort &0x2004 v2 dirs)
+
+############################################################################
+# Minix-ST kernel floppy
+0x800 belong 0x46fc2700 Atari-ST Minix kernel image
+>19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy
+>19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy
+
+############################################################################
+# Hmmm, is this a better way of detecting _standard_ floppy images ?
+19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k
+>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
+19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k
+>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
+19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k
+>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
+
+19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM
+>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
+19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs
+>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
+
+19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k
+19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k
+
+# Valid media descriptor bytes for MS-DOS:
+#
+# Byte Capacity Media Size and Type
+# -------------------------------------------------
+#
+# F0 2.88 MB 3.5-inch, 2-sided, 36-sector
+# F0 1.44 MB 3.5-inch, 2-sided, 18-sector
+# F9 720K 3.5-inch, 2-sided, 9-sector
+# F9 1.2 MB 5.25-inch, 2-sided, 15-sector
+# FD 360K 5.25-inch, 2-sided, 9-sector
+# FF 320K 5.25-inch, 2-sided, 8-sector
+# FC 180K 5.25-inch, 1-sided, 9-sector
+# FE 160K 5.25-inch, 1-sided, 8-sector
+# FE 250K 8-inch, 1-sided, single-density
+# FD 500K 8-inch, 2-sided, single-density
+# FE 1.2 MB 8-inch, 2-sided, double-density
+# F8 ----- Fixed disk
+#
+# FC xxxK Apricot 70x1x9 boot disk.
+#
+# Originally a bitmap:
+# xxxxxxx0 Not two sided
+# xxxxxxx1 Double sided
+# xxxxxx0x Not 8 SPT
+# xxxxxx1x 8 SPT
+# xxxxx0xx Not Removable drive
+# xxxxx1xx Removable drive
+# 11111xxx Must be one.
+#
+# But now it's rather random:
+# 111111xx Low density disk
+# 00 SS, Not 8 SPT
+# 01 DS, Not 8 SPT
+# 10 SS, 8 SPT
+# 11 DS, 8 SPT
+#
+# 11111001 Double density 3½ floppy disk, high density 5¼
+# 11110000 High density 3½ floppy disk
+# 11111000 Hard disk any format
+#
+
+# CDROM Filesystems
+32769 string CD001 ISO 9660 CD-ROM filesystem data
+# "application id" which appears to be used as a volume label
+>32808 string >\0 '%s'
+>34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable)
+37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
+32776 string CDROM High Sierra CD-ROM filesystem data
+
+# cramfs filesystem - russell@coker.com.au
+0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian
+>4 lelong x size %d
+>8 lelong &1 version #2
+>8 lelong &2 sorted_dirs
+>8 lelong &4 hole_support
+>32 lelong x CRC 0x%x,
+>36 lelong x edition %d,
+>40 lelong x %d blocks,
+>44 lelong x %d files
+
+0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian
+>4 belong x size %d
+>8 belong &1 version #2
+>8 belong &2 sorted_dirs
+>8 belong &4 hole_support
+>32 belong x CRC 0x%x,
+>36 belong x edition %d,
+>40 belong x %d blocks,
+>44 belong x %d files
+
+# reiserfs - russell@coker.com.au
+0x10034 string ReIsErFs ReiserFS V3.5
+0x10034 string ReIsEr2Fs ReiserFS V3.6
+>0x1002c leshort x block size %d
+>0x10032 leshort &2 (mounted or unclean)
+>0x10000 lelong x num blocks %d
+>0x10040 lelong 1 tea hash
+>0x10040 lelong 2 yura hash
+>0x10040 lelong 3 r5 hash
+
+# JFFS - russell@coker.com.au
+0 lelong 0x34383931 Linux Journalled Flash File system, little endian
+0 belong 0x34383931 Linux Journalled Flash File system, big endian
+
+# EST flat binary format (which isn't, but anyway)
+# From: Mark Brown <broonie@sirena.org.uk>
+0 string ESTFBINR EST flat binary
+
+# Aculab VoIP firmware
+# From: Mark Brown <broonie@sirena.org.uk>
+0 string VoIP\ Startup\ and Aculab VoIP firmware
+>35 string x format %s
+
+# PPCBoot image file
+# From: Mark Brown <broonie@sirena.org.uk>
+0 belong 0x27051956 PPCBoot image
+>4 string PPCBoot
+>>12 string x version %s
+
+# JFFS2 file system
+0 leshort 0x1984 Linux old jffs2 filesystem data little endian
+0 lelong 0xe0011985 Linux jffs2 filesystem data little endian
+
+#------------------------------------------------------------------------------
+# hp: file(1) magic for Hewlett Packard machines (see also "printer")
+#
+# XXX - somebody should figure out whether any byte order needs to be
+# applied to the "TML" stuff; I'm assuming the Apollo stuff is
+# big-endian as it was mostly 68K-based.
+#
+# I think the 500 series was the old stack-based machines, running a
+# UNIX environment atop the "SUN kernel"; dunno whether it was
+# big-endian or little-endian.
+#
+# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;
+# hp300 are 68020+68881 based; hp400 are also 68k. The following basic
+# HP magic is useful for reference, but using "long" magic is a better
+# practice in order to avoid collisions.
+#
+# Guy Harris (guy@netapp.com): some additions to this list came from
+# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1,
+# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0
+# "/etc/magic", though, except for the "archive file relocatable library"
+# stuff, and the 68030 and 68040 stuff isn't there at all - are they not
+# used in executables, or have they just not yet updated "/etc/magic"
+# completely?
+#
+# 0 beshort 200 hp200 (68010) BSD binary
+# 0 beshort 300 hp300 (68020+68881) BSD binary
+# 0 beshort 0x20c hp200/300 HP-UX binary
+# 0 beshort 0x20d hp400 (68030) HP-UX binary
+# 0 beshort 0x20e hp400 (68040?) HP-UX binary
+# 0 beshort 0x20b PA-RISC1.0 HP-UX binary
+# 0 beshort 0x210 PA-RISC1.1 HP-UX binary
+# 0 beshort 0x211 PA-RISC1.2 HP-UX binary
+# 0 beshort 0x214 PA-RISC2.0 HP-UX binary
+
+#
+# The "misc" stuff needs a byte order; the archives look suspiciously
+# like the old 177545 archives (0xff65 = 0177545).
+#
+#### Old Apollo stuff
+0 beshort 0627 Apollo m68k COFF executable
+>18 beshort ^040000 not stripped
+>22 beshort >0 - version %ld
+0 beshort 0624 apollo a88k COFF executable
+>18 beshort ^040000 not stripped
+>22 beshort >0 - version %ld
+0 long 01203604016 TML 0123 byte-order format
+0 long 01702407010 TML 1032 byte-order format
+0 long 01003405017 TML 2301 byte-order format
+0 long 01602007412 TML 3210 byte-order format
+#### PA-RISC 1.1
+0 belong 0x02100106 PA-RISC1.1 relocatable object
+0 belong 0x02100107 PA-RISC1.1 executable
+>168 belong &0x00000004 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x02100108 PA-RISC1.1 shared executable
+>168 belong&0x4 0x4 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x0210010b PA-RISC1.1 demand-load executable
+>168 belong&0x4 0x4 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x0210010e PA-RISC1.1 shared library
+>96 belong >0 - not stripped
+
+0 belong 0x0210010d PA-RISC1.1 dynamic load library
+>96 belong >0 - not stripped
+
+#### PA-RISC 2.0
+0 belong 0x02140106 PA-RISC2.0 relocatable object
+
+0 belong 0x02140107 PA-RISC2.0 executable
+>168 belong &0x00000004 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x02140108 PA-RISC2.0 shared executable
+>168 belong &0x00000004 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x0214010b PA-RISC2.0 demand-load executable
+>168 belong &0x00000004 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x0214010e PA-RISC2.0 shared library
+>96 belong >0 - not stripped
+
+0 belong 0x0214010d PA-RISC2.0 dynamic load library
+>96 belong >0 - not stripped
+
+#### 800
+0 belong 0x020b0106 PA-RISC1.0 relocatable object
+
+0 belong 0x020b0107 PA-RISC1.0 executable
+>168 belong&0x4 0x4 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x020b0108 PA-RISC1.0 shared executable
+>168 belong&0x4 0x4 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x020b010b PA-RISC1.0 demand-load executable
+>168 belong&0x4 0x4 dynamically linked
+>(144) belong 0x054ef630 dynamically linked
+>96 belong >0 - not stripped
+
+0 belong 0x020b010e PA-RISC1.0 shared library
+>96 belong >0 - not stripped
+
+0 belong 0x020b010d PA-RISC1.0 dynamic load library
+>96 belong >0 - not stripped
+
+0 belong 0x213c6172 archive file
+>68 belong 0x020b0619 - PA-RISC1.0 relocatable library
+>68 belong 0x02100619 - PA-RISC1.1 relocatable library
+>68 belong 0x02110619 - PA-RISC1.2 relocatable library
+>68 belong 0x02140619 - PA-RISC2.0 relocatable library
+
+#### 500
+0 long 0x02080106 HP s500 relocatable executable
+>16 long >0 - version %ld
+
+0 long 0x02080107 HP s500 executable
+>16 long >0 - version %ld
+
+0 long 0x02080108 HP s500 pure executable
+>16 long >0 - version %ld
+
+#### 200
+0 belong 0x020c0108 HP s200 pure executable
+>4 beshort >0 - version %ld
+>8 belong &0x80000000 save fp regs
+>8 belong &0x40000000 dynamically linked
+>8 belong &0x20000000 debuggable
+>36 belong >0 not stripped
+
+0 belong 0x020c0107 HP s200 executable
+>4 beshort >0 - version %ld
+>8 belong &0x80000000 save fp regs
+>8 belong &0x40000000 dynamically linked
+>8 belong &0x20000000 debuggable
+>36 belong >0 not stripped
+
+0 belong 0x020c010b HP s200 demand-load executable
+>4 beshort >0 - version %ld
+>8 belong &0x80000000 save fp regs
+>8 belong &0x40000000 dynamically linked
+>8 belong &0x20000000 debuggable
+>36 belong >0 not stripped
+
+0 belong 0x020c0106 HP s200 relocatable executable
+>4 beshort >0 - version %ld
+>6 beshort >0 - highwater %d
+>8 belong &0x80000000 save fp regs
+>8 belong &0x20000000 debuggable
+>8 belong &0x10000000 PIC
+
+0 belong 0x020a0108 HP s200 (2.x release) pure executable
+>4 beshort >0 - version %ld
+>36 belong >0 not stripped
+
+0 belong 0x020a0107 HP s200 (2.x release) executable
+>4 beshort >0 - version %ld
+>36 belong >0 not stripped
+
+0 belong 0x020c010e HP s200 shared library
+>4 beshort >0 - version %ld
+>6 beshort >0 - highwater %d
+>36 belong >0 not stripped
+
+0 belong 0x020c010d HP s200 dynamic load library
+>4 beshort >0 - version %ld
+>6 beshort >0 - highwater %d
+>36 belong >0 not stripped
+
+#### MISC
+0 long 0x0000ff65 HP old archive
+0 long 0x020aff65 HP s200 old archive
+0 long 0x020cff65 HP s200 old archive
+0 long 0x0208ff65 HP s500 old archive
+
+0 long 0x015821a6 HP core file
+
+0 long 0x4da7eee8 HP-WINDOWS font
+>8 byte >0 - version %ld
+0 string Bitmapfile HP Bitmapfile
+
+0 string IMGfile CIS compimg HP Bitmapfile
+# XXX - see "lif"
+#0 short 0x8000 lif file
+0 long 0x020c010c compiled Lisp
+
+0 string msgcat01 HP NLS message catalog,
+>8 long >0 %d messages
+
+# addendum to /etc/magic with HP-48sx file-types by phk@data.fls.dk 1jan92
+0 string HPHP48- HP48 binary
+>7 byte >0 - Rev %c
+>8 beshort 0x1129 (ADR)
+>8 beshort 0x3329 (REAL)
+>8 beshort 0x5529 (LREAL)
+>8 beshort 0x7729 (COMPLX)
+>8 beshort 0x9d29 (LCOMPLX)
+>8 beshort 0xbf29 (CHAR)
+>8 beshort 0xe829 (ARRAY)
+>8 beshort 0x0a2a (LNKARRAY)
+>8 beshort 0x2c2a (STRING)
+>8 beshort 0x4e2a (HXS)
+>8 beshort 0x742a (LIST)
+>8 beshort 0x962a (DIR)
+>8 beshort 0xb82a (ALG)
+>8 beshort 0xda2a (UNIT)
+>8 beshort 0xfc2a (TAGGED)
+>8 beshort 0x1e2b (GROB)
+>8 beshort 0x402b (LIB)
+>8 beshort 0x622b (BACKUP)
+>8 beshort 0x882b (LIBDATA)
+>8 beshort 0x9d2d (PROG)
+>8 beshort 0xcc2d (CODE)
+>8 beshort 0x482e (GNAME)
+>8 beshort 0x6d2e (LNAME)
+>8 beshort 0x922e (XLIB)
+0 string %%HP: HP48 text
+>6 string T(0) - T(0)
+>6 string T(1) - T(1)
+>6 string T(2) - T(2)
+>6 string T(3) - T(3)
+>10 string A(D) A(D)
+>10 string A(R) A(R)
+>10 string A(G) A(G)
+>14 string F(.) F(.);
+>14 string F(,) F(,);
+
+# hpBSD magic numbers
+0 beshort 200 hp200 (68010) BSD
+>2 beshort 0407 impure binary
+>2 beshort 0410 read-only binary
+>2 beshort 0413 demand paged binary
+0 beshort 300 hp300 (68020+68881) BSD
+>2 beshort 0407 impure binary
+>2 beshort 0410 read-only binary
+>2 beshort 0413 demand paged binary
+#
+# From David Gero <dgero@nortelnetworks.com>
+# HP-UX 10.20 core file format from /usr/include/sys/core.h
+# Unfortunately, HP-UX uses corehead blocks without specifying the order
+# There are four we care about:
+# CORE_KERNEL, which starts with the string "HP-UX"
+# CORE_EXEC, which contains the name of the command
+# CORE_PROC, which contains the signal number that caused the core dump
+# CORE_FORMAT, which contains the version of the core file format (== 1)
+# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC
+# but we include all 6 variations of the order of the first 3, and
+# assume that PROC will always be last
+# Order 1: KERNEL, EXEC, FORMAT, PROC
+0x10 string HP-UX
+>0 belong 2
+>>0xC belong 0x3C
+>>>0x4C belong 0x100
+>>>>0x58 belong 0x44
+>>>>>0xA0 belong 1
+>>>>>>0xAC belong 4
+>>>>>>>0xB0 belong 1
+>>>>>>>>0xB4 belong 4 core file
+>>>>>>>>>0x90 string >\0 from '%s'
+>>>>>>>>>0xC4 belong 3 - received SIGQUIT
+>>>>>>>>>0xC4 belong 4 - received SIGILL
+>>>>>>>>>0xC4 belong 5 - received SIGTRAP
+>>>>>>>>>0xC4 belong 6 - received SIGABRT
+>>>>>>>>>0xC4 belong 7 - received SIGEMT
+>>>>>>>>>0xC4 belong 8 - received SIGFPE
+>>>>>>>>>0xC4 belong 10 - received SIGBUS
+>>>>>>>>>0xC4 belong 11 - received SIGSEGV
+>>>>>>>>>0xC4 belong 12 - received SIGSYS
+>>>>>>>>>0xC4 belong 33 - received SIGXCPU
+>>>>>>>>>0xC4 belong 34 - received SIGXFSZ
+# Order 2: KERNEL, FORMAT, EXEC, PROC
+>>>0x4C belong 1
+>>>>0x58 belong 4
+>>>>>0x5C belong 1
+>>>>>>0x60 belong 0x100
+>>>>>>>0x6C belong 0x44
+>>>>>>>>0xB4 belong 4 core file
+>>>>>>>>>0xA4 string >\0 from '%s'
+>>>>>>>>>0xC4 belong 3 - received SIGQUIT
+>>>>>>>>>0xC4 belong 4 - received SIGILL
+>>>>>>>>>0xC4 belong 5 - received SIGTRAP
+>>>>>>>>>0xC4 belong 6 - received SIGABRT
+>>>>>>>>>0xC4 belong 7 - received SIGEMT
+>>>>>>>>>0xC4 belong 8 - received SIGFPE
+>>>>>>>>>0xC4 belong 10 - received SIGBUS
+>>>>>>>>>0xC4 belong 11 - received SIGSEGV
+>>>>>>>>>0xC4 belong 12 - received SIGSYS
+>>>>>>>>>0xC4 belong 33 - received SIGXCPU
+>>>>>>>>>0xC4 belong 34 - received SIGXFSZ
+# Order 3: FORMAT, KERNEL, EXEC, PROC
+0x24 string HP-UX
+>0 belong 1
+>>0xC belong 4
+>>>0x10 belong 1
+>>>>0x14 belong 2
+>>>>>0x20 belong 0x3C
+>>>>>>0x60 belong 0x100
+>>>>>>>0x6C belong 0x44
+>>>>>>>>0xB4 belong 4 core file
+>>>>>>>>>0xA4 string >\0 from '%s'
+>>>>>>>>>0xC4 belong 3 - received SIGQUIT
+>>>>>>>>>0xC4 belong 4 - received SIGILL
+>>>>>>>>>0xC4 belong 5 - received SIGTRAP
+>>>>>>>>>0xC4 belong 6 - received SIGABRT
+>>>>>>>>>0xC4 belong 7 - received SIGEMT
+>>>>>>>>>0xC4 belong 8 - received SIGFPE
+>>>>>>>>>0xC4 belong 10 - received SIGBUS
+>>>>>>>>>0xC4 belong 11 - received SIGSEGV
+>>>>>>>>>0xC4 belong 12 - received SIGSYS
+>>>>>>>>>0xC4 belong 33 - received SIGXCPU
+>>>>>>>>>0xC4 belong 34 - received SIGXFSZ
+# Order 4: EXEC, KERNEL, FORMAT, PROC
+0x64 string HP-UX
+>0 belong 0x100
+>>0xC belong 0x44
+>>>0x54 belong 2
+>>>>0x60 belong 0x3C
+>>>>>0xA0 belong 1
+>>>>>>0xAC belong 4
+>>>>>>>0xB0 belong 1
+>>>>>>>>0xB4 belong 4 core file
+>>>>>>>>>0x44 string >\0 from '%s'
+>>>>>>>>>0xC4 belong 3 - received SIGQUIT
+>>>>>>>>>0xC4 belong 4 - received SIGILL
+>>>>>>>>>0xC4 belong 5 - received SIGTRAP
+>>>>>>>>>0xC4 belong 6 - received SIGABRT
+>>>>>>>>>0xC4 belong 7 - received SIGEMT
+>>>>>>>>>0xC4 belong 8 - received SIGFPE
+>>>>>>>>>0xC4 belong 10 - received SIGBUS
+>>>>>>>>>0xC4 belong 11 - received SIGSEGV
+>>>>>>>>>0xC4 belong 12 - received SIGSYS
+>>>>>>>>>0xC4 belong 33 - received SIGXCPU
+>>>>>>>>>0xC4 belong 34 - received SIGXFSZ
+# Order 5: FORMAT, EXEC, KERNEL, PROC
+0x78 string HP-UX
+>0 belong 1
+>>0xC belong 4
+>>>0x10 belong 1
+>>>>0x14 belong 0x100
+>>>>>0x20 belong 0x44
+>>>>>>0x68 belong 2
+>>>>>>>0x74 belong 0x3C
+>>>>>>>>0xB4 belong 4 core file
+>>>>>>>>>0x58 string >\0 from '%s'
+>>>>>>>>>0xC4 belong 3 - received SIGQUIT
+>>>>>>>>>0xC4 belong 4 - received SIGILL
+>>>>>>>>>0xC4 belong 5 - received SIGTRAP
+>>>>>>>>>0xC4 belong 6 - received SIGABRT
+>>>>>>>>>0xC4 belong 7 - received SIGEMT
+>>>>>>>>>0xC4 belong 8 - received SIGFPE
+>>>>>>>>>0xC4 belong 10 - received SIGBUS
+>>>>>>>>>0xC4 belong 11 - received SIGSEGV
+>>>>>>>>>0xC4 belong 12 - received SIGSYS
+>>>>>>>>>0xC4 belong 33 - received SIGXCPU
+>>>>>>>>>0xC4 belong 34 - received SIGXFSZ
+# Order 6: EXEC, FORMAT, KERNEL, PROC
+>0 belong 0x100
+>>0xC belong 0x44
+>>>0x54 belong 1
+>>>>0x60 belong 4
+>>>>>0x64 belong 1
+>>>>>>0x68 belong 2
+>>>>>>>0x74 belong 0x2C
+>>>>>>>>0xB4 belong 4 core file
+>>>>>>>>>0x44 string >\0 from '%s'
+>>>>>>>>>0xC4 belong 3 - received SIGQUIT
+>>>>>>>>>0xC4 belong 4 - received SIGILL
+>>>>>>>>>0xC4 belong 5 - received SIGTRAP
+>>>>>>>>>0xC4 belong 6 - received SIGABRT
+>>>>>>>>>0xC4 belong 7 - received SIGEMT
+>>>>>>>>>0xC4 belong 8 - received SIGFPE
+>>>>>>>>>0xC4 belong 10 - received SIGBUS
+>>>>>>>>>0xC4 belong 11 - received SIGSEGV
+>>>>>>>>>0xC4 belong 12 - received SIGSYS
+>>>>>>>>>0xC4 belong 33 - received SIGXCPU
+>>>>>>>>>0xC4 belong 34 - received SIGXFSZ
+
+# From: AMAKAWA Shuhei <sa264@cam.ac.uk>
+0 string HPHP49- HP49 binary
+
+
+#------------------------------------------------------------------------------
+# JPEG images
+# SunOS 5.5.1 had
+#
+# 0 string \377\330\377\340 JPEG file
+# 0 string \377\330\377\356 JPG file
+#
+# both of which turn into "JPEG image data" here.
+#
+0 beshort 0xffd8 JPEG image data
+>6 string JFIF \b, JFIF standard
+# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
+# in a vain attempt to add image size reporting for JFIF. Note that these
+# tests are not fool-proof since some perfectly valid JPEGs are currently
+# impossible to specify in magic(4) format.
+# First, a little JFIF version info:
+>>11 byte x \b %d.
+>>12 byte x \b%02d
+# Next, the resolution or aspect ratio of the image:
+#>>13 byte 0 \b, aspect ratio
+#>>13 byte 1 \b, resolution (DPI)
+#>>13 byte 2 \b, resolution (DPCM)
+#>>4 beshort x \b, segment length %d
+# Next, show thumbnail info, if it exists:
+>>18 byte !0 \b, thumbnail %dx
+>>>19 byte x \b%d
+
+# EXIF moved down here to avoid reporting a bogus version number,
+# and EXIF version number printing added.
+# - Patrik R=E5dman <patrik+file-magic@iki.fi>
+>6 string Exif \b, EXIF standard
+# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.
+# All possible combinations of entries have to be enumerated, since no looping
+# is possible. And both endians are possible...
+# The combinations included below are from real-world JPEGs.
+# Little-endian
+>>12 string II
+# IFD 0 Entry #5:
+>>>70 leshort 0x8769
+# EXIF IFD Entry #1:
+>>>>(78.l+14) leshort 0x9000
+>>>>>(78.l+23) byte x %c
+>>>>>(78.l+24) byte x \b.%c
+>>>>>(78.l+25) byte !0x30 \b%c
+# IFD 0 Entry #9:
+>>>118 leshort 0x8769
+# EXIF IFD Entry #3:
+>>>>(126.l+38) leshort 0x9000
+>>>>>(126.l+47) byte x %c
+>>>>>(126.l+48) byte x \b.%c
+>>>>>(126.l+49) byte !0x30 \b%c
+# IFD 0 Entry #10
+>>>130 leshort 0x8769
+# EXIF IFD Entry #3:
+>>>>(138.l+38) leshort 0x9000
+>>>>>(138.l+47) byte x %c
+>>>>>(138.l+48) byte x \b.%c
+>>>>>(138.l+49) byte !0x30 \b%c
+# EXIF IFD Entry #4:
+>>>>(138.l+50) leshort 0x9000
+>>>>>(138.l+59) byte x %c
+>>>>>(138.l+60) byte x \b.%c
+>>>>>(138.l+61) byte !0x30 \b%c
+# EXIF IFD Entry #5:
+>>>>(138.l+62) leshort 0x9000
+>>>>>(138.l+71) byte x %c
+>>>>>(138.l+72) byte x \b.%c
+>>>>>(138.l+73) byte !0x30 \b%c
+# IFD 0 Entry #11
+>>>142 leshort 0x8769
+# EXIF IFD Entry #3:
+>>>>(150.l+38) leshort 0x9000
+>>>>>(150.l+47) byte x %c
+>>>>>(150.l+48) byte x \b.%c
+>>>>>(150.l+49) byte !0x30 \b%c
+# EXIF IFD Entry #4:
+>>>>(150.l+50) leshort 0x9000
+>>>>>(150.l+59) byte x %c
+>>>>>(150.l+60) byte x \b.%c
+>>>>>(150.l+61) byte !0x30 \b%c
+# EXIF IFD Entry #5:
+>>>>(150.l+62) leshort 0x9000
+>>>>>(150.l+71) byte x %c
+>>>>>(150.l+72) byte x \b.%c
+>>>>>(150.l+73) byte !0x30 \b%c
+# Big-endian
+>>12 string MM
+# IFD 0 Entry #9:
+>>>118 beshort 0x8769
+# EXIF IFD Entry #1:
+>>>>(126.L+14) beshort 0x9000
+>>>>>(126.L+23) byte x %c
+>>>>>(126.L+24) byte x \b.%c
+>>>>>(126.L+25) byte !0x30 \b%c
+# EXIF IFD Entry #3:
+>>>>(126.L+38) beshort 0x9000
+>>>>>(126.L+47) byte x %c
+>>>>>(126.L+48) byte x \b.%c
+>>>>>(126.L+49) byte !0x30 \b%c
+# IFD 0 Entry #10
+>>>130 beshort 0x8769
+# EXIF IFD Entry #3:
+>>>>(138.L+38) beshort 0x9000
+>>>>>(138.L+47) byte x %c
+>>>>>(138.L+48) byte x \b.%c
+>>>>>(138.L+49) byte !0x30 \b%c
+# EXIF IFD Entry #5:
+>>>>(138.L+62) beshort 0x9000
+>>>>>(138.L+71) byte x %c
+>>>>>(138.L+72) byte x \b.%c
+>>>>>(138.L+73) byte !0x30 \b%c
+# IFD 0 Entry #11
+>>>142 beshort 0x8769
+# EXIF IFD Entry #4:
+>>>>(150.L+50) beshort 0x9000
+>>>>>(150.L+59) byte x %c
+>>>>>(150.L+60) byte x \b.%c
+>>>>>(150.L+61) byte !0x30 \b%c
+# Here things get sticky. We can do ONE MORE marker segment with
+# indirect addressing, and that's all. It would be great if we could
+# do pointer arithemetic like in an assembler language. Christos?
+# And if there was some sort of looping construct to do searches, plus a few
+# named accumulators, it would be even more effective...
+# At least we can show a comment if no other segments got inserted before:
+>(4.S+5) byte 0xFE
+>>(4.S+8) string >\0 \b, comment: "%s"
+#>(4.S+5) byte 0xFE \b, comment
+#>>(4.S+6) beshort x \b length=%d
+#>>(4.S+8) string >\0 \b, "%s"
+# Or, we can show the encoding type (I've included only the three most common)
+# and image dimensions if we are lucky and the SOFn (image segment) is here:
+>(4.S+5) byte 0xC0 \b, baseline
+>>(4.S+6) byte x \b, precision %d
+>>(4.S+7) beshort x \b, %dx
+>>(4.S+9) beshort x \b%d
+>(4.S+5) byte 0xC1 \b, extended sequential
+>>(4.S+6) byte x \b, precision %d
+>>(4.S+7) beshort x \b, %dx
+>>(4.S+9) beshort x \b%d
+>(4.S+5) byte 0xC2 \b, progressive
+>>(4.S+6) byte x \b, precision %d
+>>(4.S+7) beshort x \b, %dx
+>>(4.S+9) beshort x \b%d
+# I've commented-out quantisation table reporting. I doubt anyone cares yet.
+#>(4.S+5) byte 0xDB \b, quantisation table
+#>>(4.S+6) beshort x \b length=%d
+#>14 beshort x \b, %d x
+#>16 beshort x \b %d
+
+# HSI is Handmade Software's proprietary JPEG encoding scheme
+0 string hsi1 JPEG image data, HSI proprietary
+
+# From: David Santinoli <david@santinoli.com>
+0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data
+
+#------------------------------------------------------------------------------
+# sinclair: file(1) sinclair QL
+
+# additions to /etc/magic by Thomas M. Ott (ThMO)
+
+# Sinclair QL floppy disk formats (ThMO)
+0 string =QL5 QL disk dump data,
+>3 string =A 720 KB,
+>3 string =B 1.44 MB,
+>3 string =C 3.2 MB,
+>4 string >\0 label:%.10s
+
+# Sinclair QL OS dump (ThMO)
+# (NOTE: if `file' would be able to use indirect references in a endian format
+# differing from the natural host format, this could be written more
+# reliably and faster...)
+#
+# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more
+# than the first 8K of a file... #-(
+#
+#0 belong =0x30000
+#>49124 belong <47104
+#>>49128 belong <47104
+#>>>49132 belong <47104
+#>>>>49136 belong <47104 QL OS dump data,
+#>>>>>49148 string >\0 type %.3s,
+#>>>>>49142 string >\0 version %.4s
+
+# Sinclair QL firmware executables (ThMO)
+0 string NqNqNq`\004 QL firmware executable (BCPL)
+
+# Sinclair QL libraries (was ThMO)
+0 beshort 0xFB01 QDOS object
+>2 pstring x '%s'
+
+# Sinclair QL executables (was ThMO)
+4 belong 0x4AFB QDOS executable
+>9 pstring x '%s'
+
+# Sinclair QL ROM (ThMO)
+0 belong =0x4AFB0001 QL plugin-ROM data,
+>9 pstring =\0 un-named
+>9 pstring >\0 named: %s
+#------------------------------------------------------------------------------
+# acorn: file(1) magic for files found on Acorn systems
+#
+
+# RISC OS Chunk File Format
+# From RISC OS Programmer's Reference Manual, Appendix D
+# We guess the file type from the type of the first chunk.
+0 lelong 0xc3cbc6c5 RISC OS Chunk data
+>12 string OBJ_ \b, AOF object
+>12 string LIB_ \b, ALF library
+
+# RISC OS AIF, contains "SWI OS_Exit" at offset 16.
+16 lelong 0xef000011 RISC OS AIF executable
+
+# RISC OS Draw files
+# From RISC OS Programmer's Reference Manual, Appendix E
+0 string Draw RISC OS Draw file data
+
+# RISC OS new format font files
+# From RISC OS Programmer's Reference Manual, Appendix E
+0 string FONT\0 RISC OS outline font data,
+>5 byte x version %d
+0 string FONT\1 RISC OS 1bpp font data,
+>5 byte x version %d
+0 string FONT\4 RISC OS 4bpp font data
+>5 byte x version %d
+
+# RISC OS Music files
+# From RISC OS Programmer's Reference Manual, Appendix E
+0 string Maestro\r RISC OS music file
+>8 byte x version %d
+
+
+#------------------------------------------------------------------------------
+# iff: file(1) magic for Interchange File Format (see also "audio" & "images")
+#
+# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
+# Arts for file interchange. It has also been used by Apple, SGI, and
+# especially Commodore-Amiga.
+#
+# IFF files begin with an 8 byte FORM header, followed by a 4 character
+# FORM type, which is followed by the first chunk in the FORM.
+
+0 string FORM IFF data
+#>4 belong x \b, FORM is %d bytes long
+# audio formats
+>8 string AIFF \b, AIFF audio
+>8 string AIFC \b, AIFF-C compressed audio
+>8 string 8SVX \b, 8SVX 8-bit sampled sound voice
+>8 string SAMP \b, SAMP sampled audio
+>8 string DTYP \b, DTYP datatype description
+>8 string PTCH \b, PTCH binary patch
+# image formats
+>8 string ILBMBMHD \b, ILBM interleaved image
+>>20 beshort x \b, %d x
+>>22 beshort x %d
+>8 string RGBN \b, RGBN 12-bit RGB image
+>8 string RGB8 \b, RGB8 24-bit RGB image
+>8 string DR2D \b, DR2D 2-D object
+>8 string TDDD \b, TDDD 3-D rendering
+# other formats
+>8 string FTXT \b, FTXT formatted text
+>8 string CTLG \b, CTLG message catalog
+>8 string PREF \b, PREF preferences
+
+#------------------------------------------------------------------------------
+# lif: file(1) magic for lif
+#
+# (Daniel Quinlan <quinlan@yggdrasil.com>)
+#
+0 beshort 0x8000 lif file
+
+#------------------------------------------------------------------------------
+# mirage: file(1) magic for Mirage executables
+#
+# XXX - byte order?
+#
+0 long 31415 Mirage Assembler m.out executable
+
+#------------------------------------------------------------------------------
+# netscape: file(1) magic for Netscape files
+# "H. Nanosecond" <aldomel@ix.netcom.com>
+# version 3 and 4 I think
+#
+
+# Netscape Address book .nab
+0 string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book
+
+# Netscape Communicator address book
+0 string \000\017\102\111 Netscape Communicator address book
+
+# .snm Caches
+0 string #\ Netscape\ folder\ cache Netscape folder cache
+0 string \000\036\204\220\000 Netscape folder cache
+# .n2p
+# Net 2 Phone
+#0 string 123\130\071\066\061\071\071\071\060\070\061\060\061\063\060
+0 string SX961999 Net2phone
+
+#
+#This is files ending in .art, FIXME add more rules
+0 string JG\004\016\0\0\0\0 ART
+
+#------------------------------------------------------------------------------
+# olf: file(1) magic for OLF executables
+#
+# We have to check the byte order flag to see what byte order all the
+# other stuff in the header is in.
+#
+# MIPS R3000 may also be for MIPS R2000.
+# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
+#
+# Created by Erik Theisen <etheisen@openbsd.org>
+# Based on elf from Daniel Quinlan <quinlan@yggdrasil.com>
+0 string \177OLF OLF
+>4 byte 0 invalid class
+>4 byte 1 32-bit
+>4 byte 2 64-bit
+>7 byte 0 invalid os
+>7 byte 1 OpenBSD
+>7 byte 2 NetBSD
+>7 byte 3 FreeBSD
+>7 byte 4 4.4BSD
+>7 byte 5 Linux
+>7 byte 6 SVR4
+>7 byte 7 esix
+>7 byte 8 Solaris
+>7 byte 9 Irix
+>7 byte 10 SCO
+>7 byte 11 Dell
+>7 byte 12 NCR
+>5 byte 0 invalid byte order
+>5 byte 1 LSB
+>>16 leshort 0 no file type,
+>>16 leshort 1 relocatable,
+>>16 leshort 2 executable,
+>>16 leshort 3 shared object,
+# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
+# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
+>>16 leshort 4 core file
+>>>(0x38+0xcc) string >\0 of '%s'
+>>>(0x38+0x10) lelong >0 (signal %d),
+>>16 leshort &0xff00 processor-specific,
+>>18 leshort 0 no machine,
+>>18 leshort 1 AT&T WE32100 - invalid byte order,
+>>18 leshort 2 SPARC - invalid byte order,
+>>18 leshort 3 Intel 80386,
+>>18 leshort 4 Motorola 68000 - invalid byte order,
+>>18 leshort 5 Motorola 88000 - invalid byte order,
+>>18 leshort 6 Intel 80486,
+>>18 leshort 7 Intel 80860,
+>>18 leshort 8 MIPS R3000_BE - invalid byte order,
+>>18 leshort 9 Amdahl - invalid byte order,
+>>18 leshort 10 MIPS R3000_LE,
+>>18 leshort 11 RS6000 - invalid byte order,
+>>18 leshort 15 PA-RISC - invalid byte order,
+>>18 leshort 16 nCUBE,
+>>18 leshort 17 VPP500,
+>>18 leshort 18 SPARC32PLUS,
+>>18 leshort 20 PowerPC,
+>>18 leshort 0x9026 Alpha,
+>>20 lelong 0 invalid version
+>>20 lelong 1 version 1
+>>36 lelong 1 MathCoPro/FPU/MAU Required
+>8 string >\0 (%s)
+>5 byte 2 MSB
+>>16 beshort 0 no file type,
+>>16 beshort 1 relocatable,
+>>16 beshort 2 executable,
+>>16 beshort 3 shared object,
+>>16 beshort 4 core file,
+>>>(0x38+0xcc) string >\0 of '%s'
+>>>(0x38+0x10) belong >0 (signal %d),
+>>16 beshort &0xff00 processor-specific,
+>>18 beshort 0 no machine,
+>>18 beshort 1 AT&T WE32100,
+>>18 beshort 2 SPARC,
+>>18 beshort 3 Intel 80386 - invalid byte order,
+>>18 beshort 4 Motorola 68000,
+>>18 beshort 5 Motorola 88000,
+>>18 beshort 6 Intel 80486 - invalid byte order,
+>>18 beshort 7 Intel 80860,
+>>18 beshort 8 MIPS R3000_BE,
+>>18 beshort 9 Amdahl,
+>>18 beshort 10 MIPS R3000_LE - invalid byte order,
+>>18 beshort 11 RS6000,
+>>18 beshort 15 PA-RISC,
+>>18 beshort 16 nCUBE,
+>>18 beshort 17 VPP500,
+>>18 beshort 18 SPARC32PLUS,
+>>18 beshort 20 PowerPC or cisco 4500,
+>>18 beshort 21 cisco 7500,
+>>18 beshort 24 cisco SVIP,
+>>18 beshort 25 cisco 7200,
+>>18 beshort 36 cisco 12000,
+>>18 beshort 0x9026 Alpha,
+>>20 belong 0 invalid version
+>>20 belong 1 version 1
+>>36 belong 1 MathCoPro/FPU/MAU Required
+
+#------------------------------------------------------------------------------
+# VXL: file(1) magic for VXL binary IO data files
+#
+# from Ian Scott <scottim@sf.net>
+#
+# VXL is a collection of C++ libraries for Computer Vision.
+# See the vsl chapter in the VXL Book for more info
+# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html
+# http:/vxl.sf.net
+
+2 lelong 0x472b2c4e VXL data file,
+>0 leshort >0 schema version no %d
+
+#------------------------------------------------------------------------------
+# unknown: file(1) magic for unknown machines
+#
+# XXX - this probably should be pruned, as it'll match PDP-11 and
+# VAX image formats.
+#
+# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,
+# respectively).
+#
+# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't
+# have the "version %ld", which may be a bogus COFFism (I don't think
+# there ever was COFF for the PDP-11).
+#
+# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
+# long, as it would be on a VAX.
+#
+# 0x10C is 0414 and 0x10E is 416; those *are* unknown.
+#
+0 short 0x107 unknown machine executable
+>8 short >0 not stripped
+>15 byte >0 - version %ld
+0 short 0x108 unknown pure executable
+>8 short >0 not stripped
+>15 byte >0 - version %ld
+0 short 0x109 PDP-11 separate I&D
+>8 short >0 not stripped
+>15 byte >0 - version %ld
+0 short 0x10b unknown pure executable
+>8 short >0 not stripped
+>15 byte >0 - version %ld
+0 long 0x10c unknown demand paged pure executable
+>16 long >0 not stripped
+0 long 0x10e unknown readable demand paged pure executable
+
+#------------------------------------------------------------------------------
+# Hierarchical Data Format, used to facilitate scientific data exchange
+# specifications at http://hdf.ncsa.uiuc.edu/
+
+0 belong 0x0e031301 Hierarchical Data Format (version 4) data
+0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data
+
+#------------------------------------------------------------------------------
+# mail.news: file(1) magic for mail and news
+#
+# Unfortunately, saved netnews also has From line added in some news software.
+#0 string From mail text
+# There are tests to ascmagic.c to cope with mail and news.
+0 string Relay-Version: old news text
+0 string #!\ rnews batched news text
+0 string N#!\ rnews mailed, batched news text
+0 string Forward\ to mail forwarding text
+0 string Pipe\ to mail piping text
+0 string Return-Path: smtp mail text
+0 string Path: news text
+0 string Xref: news text
+0 string From: news or mail text
+0 string Article saved news text
+0 string BABYL Emacs RMAIL text
+0 string Received: RFC 822 mail text
+0 string MIME-Version: MIME entity text
+#0 string Content- MIME entity text
+
+# TNEF files...
+0 lelong 0x223E9F78 Transport Neutral Encapsulation Format
+
+# From: Kevin Sullivan <ksulliva@psc.edu>
+0 string *mbx* MBX mail folder
+
+# From: Simon Matter <simon.matter@invoca.ch>
+0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB
+
+# JAM(mbp) Fidonet message area databases
+# JHR file
+0 string JAM\0 JAM message area header file
+>12 leshort >0 (%d messages)
+
+# Squish Fidonet message area databases
+# SQD file (requires at least one message in the area)
+256 leshort 0xAFAE4453 Squish message area data file
+>4 leshort >0 (%d messages)
+#------------------------------------------------------------------------------
+# modem: file(1) magic for modem programs
+#
+# From: Florian La Roche <florian@knorke.saar.de>
+4 string Research, Digifax-G3-File
+>29 byte 1 , fine resolution
+>29 byte 0 , normal resolution
+
+0 short 0x0100 raw G3 data, byte-padded
+0 short 0x1400 raw G3 data
+#
+# Magic data for vgetty voice formats
+# (Martin Seine & Marc Eberhard)
+
+#
+# raw modem data version 1
+#
+0 string RMD1 raw modem data
+>4 string >\0 (%s /
+>20 short >0 compression type 0x%04x)
+
+#
+# portable voice format 1
+#
+0 string PVF1\n portable voice format
+>5 string >\0 (binary %s)
+
+#
+# portable voice format 2
+#
+0 string PVF2\n portable voice format
+>5 string >\0 (ascii %s)
+
+
+#------------------------------------------------------------------------------
+# xwindows: file(1) magic for various X/Window system file formats.
+
+# Compiled X Keymap
+# XKM (compiled X keymap) files (including version and byte ordering)
+1 string mkx Compiled XKB Keymap: lsb,
+>0 byte >0 version %d
+>0 byte =0 obsolete
+0 string xkm Compiled XKB Keymap: msb,
+>3 byte >0 version %d
+>0 byte =0 obsolete
+
+# xfsdump archive
+0 string xFSdump0 xfsdump archive
+>8 long x (version %d)
+
+# Jaleo XFS files
+0 long 395726 Jaleo XFS file
+>4 long x - version %ld
+>8 long x - [%ld -
+>20 long x \b%ldx
+>24 long x \b%ldx
+>28 long 1008 \bYUV422]
+>28 long 1000 \bRGB24]
+
+#------------------------------------------------------------------------------
+# wordprocessors: file(1) magic fo word processors.
+#
+####### PWP file format used on Smith Corona Personal Word Processors:
+2 string \040\040\040\040\040\040\040\040\040\040\040ML4D\040\'92 Smith Corona PWP
+>24 byte 2 \b, single spaced
+>24 byte 3 \b, 1.5 spaced
+>24 byte 4 \b, double spaced
+>25 byte 0x42 \b, letter
+>25 byte 0x54 \b, legal
+>26 byte 0x46 \b, A4
+
+#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
+0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable text
+>15 byte 0 Optimized for Intel
+>15 byte 1 Optimized for Non-Intel
+1 string WPC (Corel/WP)
+>8 short 257 WordPerfect macro
+>8 short 258 WordPerfect help file
+>8 short 259 WordPerfect keyboard file
+>8 short 266 WordPerfect document
+>8 short 267 WordPerfect dictionary
+>8 short 268 WordPerfect thesaurus
+>8 short 269 WordPerfect block
+>8 short 270 WordPerfect rectangular block
+>8 short 271 WordPerfect column block
+>8 short 272 WordPerfect printer data
+>8 short 275 WordPerfect printer data
+>8 short 276 WordPerfect driver resource data
+>8 short 279 WordPerfect hyphenation code
+>8 short 280 WordPerfect hyphenation data
+>8 short 281 WordPerfect macro resource data
+>8 short 283 WordPerfect hyphenation lex
+>8 short 285 WordPerfect wordlist
+>8 short 286 WordPerfect equation resource data
+>8 short 289 WordPerfect spell rules
+>8 short 290 WordPerfect dictionary rules
+>8 short 295 WordPerfect spell rules (Microlytics)
+>8 short 299 WordPerfect settings file
+>8 short 301 WordPerfect 4.2 document
+>8 short 325 WordPerfect dialog file
+>8 short 332 WordPerfect button bar
+>8 short 513 Shell macro
+>8 short 522 Shell definition
+>8 short 769 Notebook macro
+>8 short 770 Notebook help file
+>8 short 771 Notebook keyboard file
+>8 short 778 Notebook definition
+>8 short 1026 Calculator help file
+>8 short 1538 Calendar help file
+>8 short 1546 Calendar data file
+>8 short 1793 Editor macro
+>8 short 1794 Editor help file
+>8 short 1795 Editor keyboard file
+>8 short 1817 Editor macro resource file
+>8 short 2049 Macro editor macro
+>8 short 2050 Macro editor help file
+>8 short 2051 Macro editor keyboard file
+>8 short 2305 PlanPerfect macro
+>8 short 2306 PlanPerfect help file
+>8 short 2307 PlanPerfect keyboard file
+>8 short 2314 PlanPerfect worksheet
+>8 short 2319 PlanPerfect printer definition
+>8 short 2322 PlanPerfect graphic definition
+>8 short 2323 PlanPerfect data
+>8 short 2324 PlanPerfect temporary printer
+>8 short 2329 PlanPerfect macro resource data
+>8 byte 11 Mail
+>8 short 2818 help file
+>8 short 2821 distribution list
+>8 short 2826 out box
+>8 short 2827 in box
+>8 short 2836 users archived mailbox
+>8 short 2837 archived message database
+>8 short 2838 archived attachments
+>8 short 3083 Printer temporary file
+>8 short 3330 Scheduler help file
+>8 short 3338 Scheduler in file
+>8 short 3339 Scheduler out file
+>8 short 3594 GroupWise settings file
+>8 short 3601 GroupWise directory services
+>8 short 3627 GroupWise settings file
+>8 short 4362 Terminal resource data
+>8 short 4363 Terminal resource data
+>8 short 4395 Terminal resource data
+>8 short 4619 GUI loadable text
+>8 short 4620 graphics resource data
+>8 short 4621 printer settings file
+>8 short 4622 port definition file
+>8 short 4623 print queue parameters
+>8 short 4624 compressed file
+>8 short 5130 Network service msg file
+>8 short 5131 Network service msg file
+>8 short 5132 Async gateway login msg
+>8 short 5134 GroupWise message file
+>8 short 7956 GroupWise admin domain database
+>8 short 7957 GroupWise admin host database
+>8 short 7959 GroupWise admin remote host database
+>8 short 7960 GroupWise admin ADS deferment data file
+>8 short 8458 IntelliTAG (SGML) compiled DTD
+>8 long 18219264 WordPerfect graphic image (1.0)
+>8 long 18219520 WordPerfect graphic image (2.0)
+#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
+
+# Hangul (Korean) Word Processor File
+0 string HWP\ Document\ File Hangul (Korean) Word Processor File
+
+# CosmicBook, from Benoît Rouits
+0 string CSBK Ted Neslson's CosmicBook hypertext file
+
+
+#------------------------------------------------------------------------------
+# sun: file(1) magic for Sun machines
+#
+# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
+# releases. (5.x uses ELF.)
+#
+0 belong&077777777 0600413 sparc demand paged
+>0 byte &0x80
+>>20 belong <4096 shared library
+>>20 belong =4096 dynamically linked executable
+>>20 belong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&077777777 0600410 sparc pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&077777777 0600407 sparc
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+
+0 belong&077777777 0400413 mc68020 demand paged
+>0 byte &0x80
+>>20 belong <4096 shared library
+>>20 belong =4096 dynamically linked executable
+>>20 belong >4096 dynamically linked executable
+>16 belong >0 not stripped
+0 belong&077777777 0400410 mc68020 pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&077777777 0400407 mc68020
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+
+0 belong&077777777 0200413 mc68010 demand paged
+>0 byte &0x80
+>>20 belong <4096 shared library
+>>20 belong =4096 dynamically linked executable
+>>20 belong >4096 dynamically linked executable
+>16 belong >0 not stripped
+0 belong&077777777 0200410 mc68010 pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&077777777 0200407 mc68010
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+
+# reworked these to avoid anything beginning with zero becoming "old sun-2"
+0 belong 0407 old sun-2 executable
+>16 belong >0 not stripped
+0 belong 0410 old sun-2 pure executable
+>16 belong >0 not stripped
+0 belong 0413 old sun-2 demand paged executable
+>16 belong >0 not stripped
+
+#
+# Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
+# binary executed in compatibility mode under SunOS 5.x".
+#
+0 belong 0x080456 SunOS core file
+>4 belong 432 (SPARC)
+>>132 string >\0 from '%s'
+>>116 belong =3 (quit)
+>>116 belong =4 (illegal instruction)
+>>116 belong =5 (trace trap)
+>>116 belong =6 (abort)
+>>116 belong =7 (emulator trap)
+>>116 belong =8 (arithmetic exception)
+>>116 belong =9 (kill)
+>>116 belong =10 (bus error)
+>>116 belong =11 (segmentation violation)
+>>116 belong =12 (bad argument to system call)
+>>116 belong =29 (resource lost)
+>>120 belong x (T=%dK,
+>>124 belong x D=%dK,
+>>128 belong x S=%dK)
+>4 belong 826 (68K)
+>>128 string >\0 from '%s'
+>4 belong 456 (SPARC 4.x BCP)
+>>152 string >\0 from '%s'
+# Sun SunPC
+0 long 0xfa33c08e SunPC 4.0 Hard Disk
+0 string #SUNPC_CONFIG SunPC 4.0 Properties Values
+# Sun snoop (see RFC 1761, which describes the capture file format).
+#
+0 string snoop Snoop capture file
+>8 belong >0 - version %ld
+>12 belong 0 (IEEE 802.3)
+>12 belong 1 (IEEE 802.4)
+>12 belong 2 (IEEE 802.5)
+>12 belong 3 (IEEE 802.6)
+>12 belong 4 (Ethernet)
+>12 belong 5 (HDLC)
+>12 belong 6 (Character synchronous)
+>12 belong 7 (IBM channel-to-channel adapter)
+>12 belong 8 (FDDI)
+>12 belong 9 (Unknown)
+
+# Microsoft ICM color profile
+36 string acspMSFT Microsoft ICM Color Profile
+# Sun KCMS
+36 string acsp Kodak Color Management System, ICC Profile
+
+#---------------------------------------------------------------------------
+# The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
+# lead Sun/Cobalt developer) who agrees that they are good and worthy of
+# inclusion.
+
+# Boot ROM images for Sun/Cobalt Linux server appliances
+0 string Cobalt\ Networks\ Inc.\nFirmware\ v Paged COBALT boot rom
+>38 string x V%.4s
+
+# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
+# at the very end where file(1) can't get it.
+0 string CRfs COBALT boot rom data (Flat boot rom or file system)
+
+
+
+#------------------------------------------------------------------------------
+# Sketch Drawings: http://sketch.sourceforge.net/
+# From: Edwin Mons <e@ik.nu>
+0 string ##Sketch Sketch document text
+#------------------------------------------------------------------------------
+# bFLT: file(1) magic for BFLT uclinux binary files
+#
+# From Philippe De Muyter <phdm@macqel.be>
+#
+0 string bFLT BFLT executable
+>4 belong x - version %ld
+>4 belong 4
+>>36 belong&0x1 0x1 ram
+>>36 belong&0x2 0x2 gotpic
+>>36 belong&0x4 0x4 gzip
+>>36 belong&0x8 0x8 gzdata
+#
+# i80960 b.out objects and archives
+#
+0 long 0x10d i960 b.out relocatable object
+>16 long >0 not stripped
+#
+# b.out archive (hp-rt on i960)
+0 string !<bout> b.out archive
+>8 string __.SYMDEF random library
+
+#------------------------------------------------------------------------------
+# hitach-sh: file(1) magic for Hitachi Super-H
+#
+# Super-H COFF
+#
+0 beshort 0x0500 Hitachi SH big-endian COFF
+>18 beshort&0x0002 =0x0000 object
+>18 beshort&0x0002 =0x0002 executable
+>18 beshort&0x0008 =0x0008 \b, stripped
+>18 beshort&0x0008 =0x0000 \b, not stripped
+#
+0 leshort 0x0550 Hitachi SH little-endian COFF
+>18 leshort&0x0002 =0x0000 object
+>18 leshort&0x0002 =0x0002 executable
+>18 leshort&0x0008 =0x0008 \b, stripped
+>18 leshort&0x0008 =0x0000 \b, not stripped
+
+
+#------------------------------------------------------------------------------
+# matroska: file(1) magic for Matroska files
+#
+# See http://www.matroska.org/
+#
+
+# EBML id:
+0 belong 0x1a45dfa3
+# DocType id:
+>5 beshort 0x4282
+# DocType contents:
+>>8 string matroska Matroska data
+
+
+#------------------------------------------------------------------------------
+# ocaml: file(1) magic for Objective Caml files.
+0 string Caml1999 Objective caml
+>8 string X exec file
+>8 string I interface file (.cmi)
+>8 string O object file (.cmo)
+>8 string A library file (.cma)
+>8 string Y native object file (.cmx)
+>8 string Z native library file (.cmxa)
+>8 string M abstract syntax tree implementation file
+>8 string N abstract syntax tree interface file
+>9 string >\0 (Version %3.3s).
+
+#------------------------------------------------------------------------------
+# vax: file(1) magic for VAX executable/object and APL workspace
+#
+0 lelong 0101557 VAX single precision APL workspace
+0 lelong 0101556 VAX double precision APL workspace
+
+#
+# VAX a.out (32V, BSD)
+#
+0 lelong 0407 VAX executable
+>16 lelong >0 not stripped
+
+0 lelong 0410 VAX pure executable
+>16 lelong >0 not stripped
+
+0 lelong 0413 VAX demand paged pure executable
+>16 lelong >0 not stripped
+
+0 lelong 0420 VAX demand paged (first page unmapped) pure executable
+>16 lelong >0 not stripped
+
+#
+# VAX COFF
+#
+# The `versions' should be un-commented if they work for you.
+# (Was the problem just one of endianness?)
+#
+0 leshort 0570 VAX COFF executable
+>12 lelong >0 not stripped
+>22 leshort >0 - version %ld
+0 leshort 0575 VAX COFF pure executable
+>12 lelong >0 not stripped
+>22 leshort >0 - version %ld
+
+#------------------------------------------------------------------------------
+# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper.
+#
+# XXX - what byte order does the Clipper use?
+#
+# XXX - what's the "!" stuff:
+#
+# >18 short !074000,000000 C1 R1
+# >18 short !074000,004000 C2 R1
+# >18 short !074000,010000 C3 R1
+# >18 short !074000,074000 TEST
+#
+# I shall assume it's ANDing the field with the first value and
+# comparing it with the second, and rewrite it as:
+#
+# >18 short&074000 000000 C1 R1
+# >18 short&074000 004000 C2 R1
+# >18 short&074000 010000 C3 R1
+# >18 short&074000 074000 TEST
+#
+# as SVR3.1's "file" doesn't support anything of the "!074000,000000"
+# sort, nor does SunOS 4.x, so either it's something Intergraph added
+# in CLIX, or something AT&T added in SVR3.2 or later, or something
+# somebody else thought was a good idea; it's not documented in the
+# man page for this version of "magic", nor does it appear to be
+# implemented (at least not after I blew off the bogus code to turn
+# old-style "&"s into new-style "&"s, which just didn't work at all).
+#
+0 short 0575 CLIPPER COFF executable (VAX #)
+>20 short 0407 (impure)
+>20 short 0410 (5.2 compatible)
+>20 short 0411 (pure)
+>20 short 0413 (demand paged)
+>20 short 0443 (target shared library)
+>12 long >0 not stripped
+>22 short >0 - version %ld
+0 short 0577 CLIPPER COFF executable
+>18 short&074000 000000 C1 R1
+>18 short&074000 004000 C2 R1
+>18 short&074000 010000 C3 R1
+>18 short&074000 074000 TEST
+>20 short 0407 (impure)
+>20 short 0410 (pure)
+>20 short 0411 (separate I&D)
+>20 short 0413 (paged)
+>20 short 0443 (target shared library)
+>12 long >0 not stripped
+>22 short >0 - version %ld
+>48 long&01 01 alignment trap enabled
+>52 byte 1 -Ctnc
+>52 byte 2 -Ctsw
+>52 byte 3 -Ctpw
+>52 byte 4 -Ctcb
+>53 byte 1 -Cdnc
+>53 byte 2 -Cdsw
+>53 byte 3 -Cdpw
+>53 byte 4 -Cdcb
+>54 byte 1 -Csnc
+>54 byte 2 -Cssw
+>54 byte 3 -Cspw
+>54 byte 4 -Cscb
+4 string pipe CLIPPER instruction trace
+4 string prof CLIPPER instruction profile
+
+#------------------------------------------------------------------------------
+# frame: file(1) magic for FrameMaker files
+#
+# This stuff came on a FrameMaker demo tape, most of which is
+# copyright, but this file is "published" as witness the following:
+#
+0 string \<MakerFile FrameMaker document
+>11 string 5.5 (5.5
+>11 string 5.0 (5.0
+>11 string 4.0 (4.0
+>11 string 3.0 (3.0
+>11 string 2.0 (2.0
+>11 string 1.0 (1.0
+>14 byte x %c)
+0 string \<MIFFile FrameMaker MIF (ASCII) file
+>9 string 4.0 (4.0)
+>9 string 3.0 (3.0)
+>9 string 2.0 (2.0)
+>9 string 1.0 (1.x)
+0 string \<MakerDictionary FrameMaker Dictionary text
+>17 string 3.0 (3.0)
+>17 string 2.0 (2.0)
+>17 string 1.0 (1.x)
+0 string \<MakerScreenFont FrameMaker Font file
+>17 string 1.01 (%s)
+0 string \<MML FrameMaker MML file
+0 string \<BookFile FrameMaker Book file
+>10 string 3.0 (3.0
+>10 string 2.0 (2.0
+>10 string 1.0 (1.0
+>13 byte x %c)
+# XXX - this book entry should be verified, if you find one, uncomment this
+#0 string \<Book\ FrameMaker Book (ASCII) file
+#>6 string 3.0 (3.0)
+#>6 string 2.0 (2.0)
+#>6 string 1.0 (1.0)
+0 string \<Maker Intermediate Print File FrameMaker IPL file
+
+#------------------------------------------------------------------------------
+# magic: file(1) magic for magic files
+#
+0 string #\ Magic magic text file for file(1) cmd
+0 lelong 0xF11E041C magic binary file for file(1) cmd
+>4 lelong x (version %d) (little endian)
+0 belong 0xF11E041C magic binary file for file(1) cmd
+>4 belong x (version %d) (big endian)
+
+#------------------------------------------------------------------------------
+# sql: file(1) magic for SQL files
+#
+# From: "Marty Leisner" <mleisner@eng.mc.xerox.com>
+# Recognize some MySQL files.
+#
+0 beshort 0xfe01 MySQL table definition file
+>2 byte x Version %d
+0 belong&0xffffff00 0xfefe0300 MySQL MISAM index file
+>3 byte x Version %d
+0 belong&0xffffff00 0xfefe0700 MySQL MISAM compressed data file
+>3 byte x Version %d
+0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file
+>3 byte x Version %d
+0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file
+>3 byte x Version %d
+0 string \376bin MySQL replication log
+
+#------------------------------------------------------------------------------
+# dact: file(1) magic for DACT compressed files
+#
+0 long 0x444354C3 DACT compressed data
+>4 byte >-1 (version %i.
+>5 byte >-1 $BS%i.
+>6 byte >-1 $BS%i)
+>7 long >0 $BS, original size: %i bytes
+>15 long >30 $BS, block size: %i bytes
+#
+# GNU nlsutils message catalog file format
+#
+0 string \336\22\4\225 GNU message catalog (little endian),
+>4 lelong x revision %d,
+>8 lelong x %d messages
+0 string \225\4\22\336 GNU message catalog (big endian),
+>4 belong x revision %d,
+>8 belong x %d messages
+# message catalogs, from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
+0 string *nazgul* Nazgul style compiled message catalog
+>8 lelong >0 \b, version %ld
+# GnuPG
+# The format is very similar to pgp
+0 string \001gpg GPG key trust database
+>4 byte x version %d
+0 beshort 0x9901 GPG key public ring
+# This magic is not particularly good, as the keyrings don't have true
+# magic. Nevertheless, it covers many keyrings.
+
+# Gnumeric spreadsheet
+# This entry is only semi-helpful, as Gnumeric compresses its files, so
+# they will ordinarily reported as "compressed", but at least -z helps
+39 string =<gmr:Workbook Gnumeric spreadsheet
+
+#------------------------------------------------------------------------------
+# ibm6000: file(1) magic for RS/6000 and the RT PC.
+#
+0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
+>12 belong >0 not stripped
+# Breaks sun4 statically linked execs.
+#0 beshort 0x0103 executable (RT Version 2) or obj module
+#>2 byte 0x50 pure
+#>28 belong >0 not stripped
+#>6 beshort >0 - version %ld
+0 beshort 0x0104 shared library
+0 beshort 0x0105 ctab data
+0 beshort 0xfe04 structured file
+0 string 0xabcdef AIX message catalog
+0 belong 0x000001f9 AIX compiled message catalog
+0 string \<aiaff> archive
+0 string \<bigaf> archive (big format)
+
+
+#------------------------------------------------------------------------------
+# os2: file(1) magic for OS/2 files
+#
+
+# Provided 1998/08/22 by
+# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
+1 string InternetShortcut MS Windows 95 Internet shortcut text
+>24 string >\ (URL=<%s>)
+
+# OS/2 URL objects
+# Provided 1998/08/22 by
+# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
+#0 string http: OS/2 URL object text
+#>5 string >\ (WWW) <http:%s>
+#0 string mailto: OS/2 URL object text
+#>7 string >\ (email) <%s>
+#0 string news: OS/2 URL object text
+#>5 string >\ (Usenet) <%s>
+#0 string ftp: OS/2 URL object text
+#>4 string >\ (FTP) <ftp:%s>
+#0 string file: OS/2 URL object text
+#>5 string >\ (Local file) <%s>
+
+# >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett@netcom.com)
+# Carl Hauser (chauser.parc@xerox.com) and
+# Marcus Groeber (marcusg@ph-cip.uni-koeln.de)
+# list the following header format in inf02a.doc:
+#
+# int16 ID; // ID magic word (5348h = "HS")
+# int8 unknown1; // unknown purpose, could be third letter of ID
+# int8 flags; // probably a flag word...
+# // bit 0: set if INF style file
+# // bit 4: set if HLP style file
+# // patching this byte allows reading HLP files
+# // using the VIEW command, while help files
+# // seem to work with INF settings here as well.
+# int16 hdrsize; // total size of header
+# int16 unknown2; // unknown purpose
+#
+0 string HSP\x01\x9b\x00 OS/2 INF
+>107 string >0 (%s)
+0 string HSP\x10\x9b\x00 OS/2 HLP
+>107 string >0 (%s)
+
+# OS/2 INI (this is a guess)
+0 string \xff\xff\xff\xff\x14\0\0\0 OS/2 INI
+#------------------------------------------------------------------------------
+#
+# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com)
+#
+0 beshort 0xedab
+>2 beshort 0xeedb RPM
+>>4 byte x v%d
+>>6 beshort 0 bin
+>>6 beshort 1 src
+>>8 beshort 1 i386
+>>8 beshort 2 Alpha
+>>8 beshort 3 Sparc
+>>8 beshort 4 MIPS
+>>8 beshort 5 PowerPC
+>>8 beshort 6 68000
+>>8 beshort 7 SGI
+>>8 beshort 8 RS6000
+>>8 beshort 9 IA64
+>>8 beshort 10 Sparc64
+>>8 beshort 11 MIPSel
+>>8 beshort 12 ARM
+>>10 string x %s
+#-----------------------------------------------------------------------------
+# misctools: file(1) magic for miscelanous UNIX tools.
+#
+0 string %%!! X-Post-It-Note text
+0 string BEGIN:VCALENDAR vCalendar calendar file
+
+#------------------------------------------------------------------------------
+# motorola: file(1) magic for Motorola 68K and 88K binaries
+#
+# 68K
+#
+0 beshort 0520 mc68k COFF
+>18 beshort ^00000020 object
+>18 beshort &00000020 executable
+>12 belong >0 not stripped
+>168 string .lowmem Apple toolbox
+>20 beshort 0407 (impure)
+>20 beshort 0410 (pure)
+>20 beshort 0413 (demand paged)
+>20 beshort 0421 (standalone)
+0 beshort 0521 mc68k executable (shared)
+>12 belong >0 not stripped
+0 beshort 0522 mc68k executable (shared demand paged)
+>12 belong >0 not stripped
+#
+# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
+#
+0 beshort 0554 68K BCS executable
+#
+# 88K
+#
+# Motorola/88Open BCS
+#
+0 beshort 0555 88K BCS executable
+#
+# Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
+0 string S0 Motorola S-Record; binary data in text format
+
+# ATARI ST relocatable PRG
+#
+# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001
+# (according to Roland Waldi, Oct 21, 1987)
+# besides the magic 0x601a, the text segment size is checked to be
+# not larger than 1 MB (which is a lot on ST).
+# The additional 0x601b distinction I took from Doug Lee's magic.
+0 belong&0xFFFFFFF0 0x601A0000 Atari ST M68K contiguous executable
+>2 belong x (txt=%ld,
+>6 belong x dat=%ld,
+>10 belong x bss=%ld,
+>14 belong x sym=%ld)
+0 belong&0xFFFFFFF0 0x601B0000 Atari ST M68K non-contig executable
+>2 belong x (txt=%ld,
+>6 belong x dat=%ld,
+>10 belong x bss=%ld,
+>14 belong x sym=%ld)
+
+# Atari ST/TT... program format (sent by Wolfram Kleff <kleff@cs.uni-bonn.de>)
+0 beshort 0x601A Atari 68xxx executable,
+>2 belong x text len %lu,
+>6 belong x data len %lu,
+>10 belong x BSS len %lu,
+>14 belong x symboltab len %lu,
+>18 belong 0
+>22 belong &0x01 fastload flag,
+>22 belong &0x02 may be loaded to alternate RAM,
+>22 belong &0x04 malloc may be from alternate RAM,
+>22 belong x flags: 0x%lX,
+>26 beshort 0 no relocation tab
+>26 beshort !0 + relocation tab
+>30 string SFX [Self-Extracting LZH SFX archive]
+>38 string SFX [Self-Extracting LZH SFX archive]
+>44 string ZIP! [Self-Extracting ZIP SFX archive]
+
+0 beshort 0x0064 Atari 68xxx CPX file
+>8 beshort x (version %04lx)
+#
+# Mach magic number info
+#
+0 long 0xefbe OSF/Rose object
+# I386 magic number info
+#
+0 short 0565 i386 COFF object
+
+#------------------------------------------------------------------------------
+# perl: file(1) magic for Larry Wall's perl language.
+#
+# The ``eval'' line recognizes an outrageously clever hack for USG systems.
+# Keith Waclena <keith@cerberus.uchicago.edu>
+# Send additions to <perl5-porters@perl.org>
+0 string/b #!\ /bin/perl perl script text executable
+0 string eval\ "exec\ /bin/perl perl script text
+0 string/b #!\ /usr/bin/perl perl script text executable
+0 string eval\ "exec\ /usr/bin/perl perl script text
+0 string/b #!\ /usr/local/bin/perl perl script text
+0 string eval\ "exec\ /usr/local/bin/perl perl script text executable
+0 string eval\ '(exit\ $?0)'\ &&\ eval\ 'exec perl script text
+
+# a couple more, by me
+# XXX: christos matches
+#0 regex package Perl5 module source text (via regex)
+0 string package Perl5 module source text
+
+# Perl Storable data files.
+0 string perl-store perl Storable(v0.6) data
+>4 byte >0 (net-order %d)
+>>4 byte &01 (network-ordered)
+>>4 byte =3 (major 1)
+>>4 byte =2 (major 1)
+
+0 string pst0 perl Storable(v0.7) data
+>4 byte >0
+>>4 byte &01 (network-ordered)
+>>4 byte =5 (major 2)
+>>4 byte =4 (major 2)
+>>5 byte >0 (minor %d)
+
+#------------------------------------------------------------------------------
+# xenix: file(1) magic for Microsoft Xenix
+#
+# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
+# model" lifted from "magic.xenix", with comment "derived empirically;
+# treat as folklore until proven"
+#
+# "small model", "large model", "huge model" stuff lifted from XXX
+#
+# XXX - "x.out" collides with PDP-11 archives
+#
+0 string core core file (Xenix)
+0 byte 0x80 8086 relocatable (Microsoft)
+0 leshort 0xff65 x.out
+>2 string __.SYMDEF randomized
+>0 byte x archive
+0 leshort 0x206 Microsoft a.out
+>8 leshort 1 Middle model
+>0x1e leshort &0x10 overlay
+>0x1e leshort &0x2 separate
+>0x1e leshort &0x4 pure
+>0x1e leshort &0x800 segmented
+>0x1e leshort &0x400 standalone
+>0x1e leshort &0x8 fixed-stack
+>0x1c byte &0x80 byte-swapped
+>0x1c byte &0x40 word-swapped
+>0x10 lelong >0 not-stripped
+>0x1e leshort ^0xc000 pre-SysV
+>0x1e leshort &0x4000 V2.3
+>0x1e leshort &0x8000 V3.0
+>0x1c byte &0x4 86
+>0x1c byte &0xb 186
+>0x1c byte &0x9 286
+>0x1c byte &0xa 386
+>0x1f byte <0x040 small model
+>0x1f byte =0x048 large model
+>0x1f byte =0x049 huge model
+>0x1e leshort &0x1 executable
+>0x1e leshort ^0x1 object file
+>0x1e leshort &0x40 Large Text
+>0x1e leshort &0x20 Large Data
+>0x1e leshort &0x120 Huge Objects Enabled
+>0x10 lelong >0 not stripped
+
+0 leshort 0x140 old Microsoft 8086 x.out
+>0x3 byte &0x4 separate
+>0x3 byte &0x2 pure
+>0 byte &0x1 executable
+>0 byte ^0x1 relocatable
+>0x14 lelong >0 not stripped
+
+0 lelong 0x206 b.out
+>0x1e leshort &0x10 overlay
+>0x1e leshort &0x2 separate
+>0x1e leshort &0x4 pure
+>0x1e leshort &0x800 segmented
+>0x1e leshort &0x400 standalone
+>0x1e leshort &0x1 executable
+>0x1e leshort ^0x1 object file
+>0x1e leshort &0x4000 V2.3
+>0x1e leshort &0x8000 V3.0
+>0x1c byte &0x4 86
+>0x1c byte &0xb 186
+>0x1c byte &0x9 286
+>0x1c byte &0x29 286
+>0x1c byte &0xa 386
+>0x1e leshort &0x4 Large Text
+>0x1e leshort &0x2 Large Data
+>0x1e leshort &0x102 Huge Objects Enabled
+
+0 leshort 0x580 XENIX 8086 relocatable or 80286 small model
+#------------------------------------------------------------------------------
+# file(1) magic for tgif(1) files
+# From Hendrik Scholz <hendrik@scholz.net>
+
+0 string %TGIF\ 4 tgif version 4 object file
+
+
+#------------------------------------------------------------------------------
+# sc: file(1) magic for "sc" spreadsheet
+#
+38 string Spreadsheet sc spreadsheet file
+
+#------------------------------------------------------------------------------
+# pyramid: file(1) magic for Pyramids
+#
+# XXX - byte order?
+#
+0 long 0x50900107 Pyramid 90x family executable
+0 long 0x50900108 Pyramid 90x family pure executable
+>16 long >0 not stripped
+0 long 0x5090010b Pyramid 90x family demand paged pure executable
+>16 long >0 not stripped
+
+#------------------------------------------------------------------------------
+# adventure: file(1) magic for Adventure game files
+#
+# from Allen Garvin <earendil@faeryland.tamu-commerce.edu>
+# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998
+# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
+#
+# ALAN
+# I assume there are other, lower versions, but these are the only ones I
+# saw in the archive.
+0 beshort 0x0206 ALAN game data
+>2 byte <10 version 2.6%d
+
+# Conflicts with too much other stuff!
+# Infocom
+# (Note: to avoid false matches Z-machine version 1 and 2 are not
+# recognized since only the oldest Zork I and II used them. Similarly
+# there are 4 Infocom games that use version 4 that are not recognized.)
+#0 byte 3 Infocom game data (Z-machine 3,
+#>2 beshort <0x7fff Release %3d,
+#>26 beshort >0 Size %d*2
+#>18 string >\0 Serial %.6s)
+#0 byte 5 Infocom game data (Z-machine 5,
+#>2 beshort <0x7fff Release %3d,
+#>26 beshort >0 Size %d*4
+#>18 string >\0 Serial %.6s)
+#0 byte 6 Infocom game data (Z-machine 6,
+#>2 beshort <0x7fff Release %3d,
+#>26 beshort >0 Size %d*8
+#>18 string >\0 Serial %.6s)
+#0 byte 8 Infocom game data (Z-machine 8,
+#>2 beshort <0x7fff Release %3d,
+#>26 beshort >0 Size %d*8
+#>18 string >\0 Serial %.6s)
+
+# TADS (Text Adventure Development System)
+# All files are machine-independent (games compile to byte-code) and are tagged
+# with a version string of the form "V2.<digit>.<digit>\0" (but TADS 3 is
+# on the way).
+# Game files start with "TADS2 bin\n\r\032\0" then the compiler version.
+0 string TADS2\ bin TADS
+>9 belong !0x0A0D1A00 game data, CORRUPTED
+>9 belong 0x0A0D1A00
+>>13 string >\0 %s game data
+# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
+0 string TADS2\ rsc TADS
+>9 belong !0x0A0D1A00 resource data, CORRUPTED
+>9 belong 0x0A0D1A00
+>>13 string >\0 %s resource data
+# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
+# 2-byte length N, the N-char name of the game file *without* a NUL (darn!),
+# "TADS2 save\n\r\032\0" and the interpreter version.
+0 string TADS2\ save/g TADS
+>12 belong !0x0A0D1A00 saved game data, CORRUPTED
+>12 belong 0x0A0D1A00
+>>(16.s+32) string >\0 %s saved game data
+# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
+# version.
+0 string TADS2\ save TADS
+>10 belong !0x0A0D1A00 saved game data, CORRUPTED
+>10 belong 0x0A0D1A00
+>>14 string >\0 %s saved game data
+
+#------------------------------------------------------------------------------
+# att3b: file(1) magic for AT&T 3B machines
+#
+# The `versions' should be un-commented if they work for you.
+# (Was the problem just one of endianness?)
+#
+# 3B20
+#
+# The 3B20 conflicts with SCCS.
+#0 beshort 0550 3b20 COFF executable
+#>12 belong >0 not stripped
+#>22 beshort >0 - version %ld
+#0 beshort 0551 3b20 COFF executable (TV)
+#>12 belong >0 not stripped
+#>22 beshort >0 - version %ld
+#
+# WE32K
+#
+0 beshort 0560 WE32000 COFF
+>18 beshort ^00000020 object
+>18 beshort &00000020 executable
+>12 belong >0 not stripped
+>18 beshort ^00010000 N/A on 3b2/300 w/paging
+>18 beshort &00020000 32100 required
+>18 beshort &00040000 and MAU hardware required
+>20 beshort 0407 (impure)
+>20 beshort 0410 (pure)
+>20 beshort 0413 (demand paged)
+>20 beshort 0443 (target shared library)
+>22 beshort >0 - version %ld
+0 beshort 0561 WE32000 COFF executable (TV)
+>12 belong >0 not stripped
+#>18 beshort &00020000 - 32100 required
+#>18 beshort &00040000 and MAU hardware required
+#>22 beshort >0 - version %ld
+#
+# core file for 3b2
+0 string \000\004\036\212\200 3b2 core file
+>364 string >\0 of '%s'
+
+#------------------------------------------------------------------------------
+# flash: file(1) magic for Macromedia Flash file format
+#
+# See
+#
+# http://www.macromedia.com/software/flash/open/
+#
+0 string FWS Macromedia Flash data,
+>3 byte x version %d
+0 string CWS Macromedia Flash data (compressed),
+>3 byte x version %d
+#
+# From Dave Wilson
+0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document
+
+#------------------------------------------------------------------------------
+# karma: file(1) magic for Karma data files
+#
+# From <rgooch@atnf.csiro.au>
+
+0 string KarmaRHD Version Karma Data Structure Version
+>16 belong x %lu
+#------------------------------------------------------------------------------
+# octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org>
+0 string Octave-1-L Octave binary data (little endian)
+0 string Octave-1-B Octave binary data (big endian)
+
+#------------------------------------------------------------------------------
+#
+# Parix COFF executables
+# From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de>
+#
+0 beshort&0xfff 0xACE PARIX
+>0 byte&0xf0 0x80 T800
+>0 byte&0xf0 0x90 T9000
+>19 byte&0x02 0x02 executable
+>19 byte&0x02 0x00 object
+>19 byte&0x0c 0x00 not stripped
+
+#------------------------------------------------------------------------------
+# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables
+# From: "Stefan A. Haubenthal" <polluks@web.de>
+#
+0 belong 0x00000107 Plan 9 executable, Motorola 68k
+0 belong 0x000001EB Plan 9 executable, Intel 386
+0 belong 0x00000247 Plan 9 executable, Intel 960
+0 belong 0x000002AB Plan 9 executable, SPARC
+0 belong 0x00000407 Plan 9 executable, MIPS R3000
+0 belong 0x0000048B Plan 9 executable, AT&T DSP 3210
+0 belong 0x00000517 Plan 9 executable, MIPS R4000 BE
+0 belong 0x000005AB Plan 9 executable, AMD 29000
+0 belong 0x00000647 Plan 9 executable, ARM 7-something
+0 belong 0x000006EB Plan 9 executable, PowerPC
+0 belong 0x00000797 Plan 9 executable, MIPS R4000 LE
+0 belong 0x0000084B Plan 9 executable, DEC Alpha
+
+#------------------------------------------------------------------------------
+# troff: file(1) magic for *roff
+#
+# updated by Daniel Quinlan (quinlan@yggdrasil.com)
+
+# troff input
+0 string .\\" troff or preprocessor input text
+0 string '\\" troff or preprocessor input text
+0 string '.\\" troff or preprocessor input text
+0 string \\" troff or preprocessor input text
+0 string ''' troff or preprocessor input text
+
+# ditroff intermediate output text
+0 string x\ T ditroff output text
+>4 string cat for the C/A/T phototypesetter
+>4 string ps for PostScript
+>4 string dvi for DVI
+>4 string ascii for ASCII
+>4 string lj4 for LaserJet 4
+>4 string latin1 for ISO 8859-1 (Latin 1)
+>4 string X75 for xditview at 75dpi
+>>7 string -12 (12pt)
+>4 string X100 for xditview at 100dpi
+>>8 string -12 (12pt)
+
+# output data formats
+0 string \100\357 very old (C/A/T) troff output data
+
+#------------------------------------------------------------------------------
+# spectrum: file(1) magic for Spectrum emulator files.
+#
+# John Elliott <jce@seasip.demon.co.uk>
+
+#
+# Spectrum +3DOS header
+#
+0 string PLUS3DOS\032 Spectrum +3 data
+>15 byte 0 - BASIC program
+>15 byte 1 - number array
+>15 byte 2 - character array
+>15 byte 3 - memory block
+>>16 belong 0x001B0040 (screen)
+>15 byte 4 - Tasword document
+>15 string TAPEFILE - ZXT tapefile
+#
+# Tape file. This assumes the .TAP starts with a Spectrum-format header,
+# which nearly all will.
+#
+0 string \023\000\000 Spectrum .TAP data
+>4 string x "%-10.10s"
+>3 byte 0 - BASIC program
+>3 byte 1 - number array
+>3 byte 2 - character array
+>3 byte 3 - memory block
+>>14 belong 0x001B0040 (screen)
+
+# The following three blocks are from pak21-spectrum@srcf.ucam.org
+# TZX tape images
+0 string ZXTape!\x1a Spectrum .TZX data
+>8 byte x version %d
+>9 byte x .%d
+
+# RZX input recording files
+0 string RZX! Spectrum .RZX data
+>4 byte x version %d
+>5 byte x .%d
+
+# And three sorts of disk image
+0 string MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data
+0 string MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data
+0 string EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data
+
+#------------------------------------------------------------------------------
+# softquad: file(1) magic for SoftQuad Publishing Software
+#
+# Author/Editor and RulesBuilder
+#
+# XXX - byte order?
+#
+0 string \<!SQ\ DTD> Compiled SGML rules file
+>9 string >\0 Type %s
+0 string \<!SQ\ A/E> A/E SGML Document binary
+>9 string >\0 Type %s
+0 string \<!SQ\ STS> A/E SGML binary styles file
+>9 string >\0 Type %s
+0 short 0xc0de Compiled PSI (v1) data
+0 short 0xc0da Compiled PSI (v2) data
+>3 string >\0 (%s)
+# Binary sqtroff font/desc files...
+0 short 0125252 SoftQuad DESC or font file binary
+>2 short >0 - version %d
+# Bitmaps...
+0 string SQ\ BITMAP1 SoftQuad Raster Format text
+#0 string SQ\ BITMAP2 SoftQuad Raster Format data
+# sqtroff intermediate language (replacement for ditroff int. lang.)
+0 string X\ SoftQuad troff Context intermediate
+>2 string 495 for AT&T 495 laser printer
+>2 string hp for Hewlett-Packard LaserJet
+>2 string impr for IMAGEN imPRESS
+>2 string ps for PostScript
+
+#------------------------------------------------------------------------------
+# Dyadic: file(1) magic for Dyalog APL.
+#
+0 byte 0xaa
+>1 byte <4 Dyalog APL
+>>1 byte 0x00 incomplete workspace
+>>1 byte 0x01 component file
+>>1 byte 0x02 external variable
+>>1 byte 0x03 workspace
+>>2 byte x version %d
+>>3 byte x .%d
+
+#------------------------------------------------------------------------------
+# palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
+#
+# Brian Lalor <blalor@hcirisc.cs.binghamton.edu>
+
+# appl
+60 belong 0x6170706c PalmOS application
+>0 string >\0 "%s"
+# TEXt
+60 belong 0x54455874 AportisDoc file
+>0 string >\0 "%s"
+# HACK
+60 belong 0x4841434b HackMaster hack
+>0 string >\0 "%s"
+
+# Variety of PalmOS document types
+# Michael-John Turner <mj@debian.org>
+# Thanks to Hasan Umit Ezerce <humit@tr-net.net.tr> for his DocType
+60 string BVokBDIC BDicty PalmOS document
+>0 string >\0 "%s"
+60 string DB99DBOS DB PalmOS document
+>0 string >\0 "%s"
+60 string vIMGView FireViewer/ImageViewer PalmOS document
+>0 string >\0 "%s"
+60 string PmDBPmDB HanDBase PalmOS document
+>0 string >\0 "%s"
+60 string InfoINDB InfoView PalmOS document
+>0 string >\0 "%s"
+60 string ToGoToGo iSilo PalmOS document
+>0 string >\0 "%s"
+60 string JfDbJBas JFile PalmOS document
+>0 string >\0 "%s"
+60 string JfDbJFil JFile Pro PalmOS document
+>0 string >\0 "%s"
+60 string DATALSdb List PalmOS document
+>0 string >\0 "%s"
+60 string Mdb1Mdb1 MobileDB PalmOS document
+>0 string >\0 "%s"
+60 string PNRdPPrs PeanutPress PalmOS document
+>0 string >\0 "%s"
+60 string DataPlkr Plucker PalmOS document
+>0 string >\0 "%s"
+60 string DataSprd QuickSheet PalmOS document
+>0 string >\0 "%s"
+60 string SM01SMem SuperMemo PalmOS document
+>0 string >\0 "%s"
+60 string DataTlPt TealDoc PalmOS document
+>0 string >\0 "%s"
+60 string InfoTlIf TealInfo PalmOS document
+>0 string >\0 "%s"
+60 string DataTlMl TealMeal PalmOS document
+>0 string >\0 "%s"
+60 string DataTlPt TealPaint PalmOS document
+>0 string >\0 "%s"
+60 string dataTDBP ThinkDB PalmOS document
+>0 string >\0 "%s"
+60 string TdatTide Tides PalmOS document
+>0 string >\0 "%s"
+60 string ToRaTRPW TomeRaider PalmOS document
+>0 string >\0 "%s"
+
+# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)
+# For version 1.xx zTXTs, outputs version and numbers of bookmarks and
+# annotations.
+# For other versions, just outputs version.
+#
+60 string zTXT A GutenPalm zTXT e-book
+>0 string >\0 "%s"
+>(0x4E.L) byte 0
+>>(0x4E.L+1) byte x (v0.%02d)
+>(0x4E.L) byte 1
+>>(0x4E.L+1) byte x (v1.%02d)
+>>>(0x4E.L+10) beshort >0
+>>>>(0x4E.L+10) beshort <2 - 1 bookmark
+>>>>(0x4E.L+10) beshort >1 - %d bookmarks
+>>>(0x4E.L+14) beshort >0
+>>>>(0x4E.L+14) beshort <2 - 1 annotation
+>>>>(0x4E.L+14) beshort >1 - %d annotations
+>(0x4E.L) byte >1 (v%d.
+>>(0x4E.L+1) byte x %02d)
+
+# Palm OS .prc file types
+60 string libr Palm OS dynamic library data
+>0 string >\0 "%s"
+60 string ptch Palm OS operating system patch data
+>0 string >\0 "%s"
+
+# Mobipocket (www.mobipocket.com), donated by Carl Witty
+60 string BOOKMOBI Mobipocket E-book
+>0 string >\0 "%s"
+#------------------------------------------------------------------------------
+# pdf: file(1) magic for Portable Document Format
+#
+
+0 string %PDF- PDF document
+>5 byte x \b, version %c
+>7 byte x \b.%c
+
+#------------------------------------------------------------------------------
+# vorbis: file(1) magic for Ogg/Vorbis files
+#
+# From Felix von Leitner <leitner@fefe.de>
+# Extended by Beni Cherniavsky <cben@crosswinds.net>
+# Further extended by Greg Wooledge <greg@wooledge.org>
+#
+# Most (everything but the number of channels and bitrate) is commented
+# out with `##' as it's not interesting to the average user. The most
+# probable things advanced users would want to uncomment are probably
+# the number of comments and the encoder version.
+#
+# --- Ogg Framing ---
+0 string OggS Ogg data
+>4 byte !0 UNKNOWN REVISION %u
+##>4 byte 0 revision 0
+>4 byte 0
+##>>14 lelong x (Serial %lX)
+# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
+>>28 string fLaC \b, FLAC audio
+# non-Vorbis content: Theora
+>>28 string \x80theora \b, Theora video
+# non-Vorbis content: Speex
+>>28 string Speex\ \ \ \b, Speex audio
+# non-Vorbis content: OGM
+>>28 string \x01video\0\0\0 \b, OGM video
+>>>37 string/c div3 (DivX 3)
+>>>37 string/c divx (DivX 4)
+>>>37 string/c dx50 (DivX 5)
+>>>37 string/c xvid (XviD)
+# --- First vorbis packet - general header ---
+>>28 string \x01vorbis \b, Vorbis audio,
+>>>35 lelong !0 UNKNOWN VERSION %lu,
+##>>>35 lelong 0 version 0,
+>>>35 lelong 0
+>>>>39 ubyte 1 mono,
+>>>>39 ubyte 2 stereo,
+>>>>39 ubyte >2 %u channels,
+>>>>40 lelong x %lu Hz
+# Minimal, nominal and maximal bitrates specified when encoding
+>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b,
+# The above tests if at least one of these is specified:
+>>>>>52 lelong !-1
+# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
+# instead of -1.
+# Vorbis 1.0 uses 0 instead of -1.
+>>>>>>52 lelong !0
+>>>>>>>52 lelong !-1000
+>>>>>>>>52 lelong x <%lu
+>>>>>48 lelong !-1
+>>>>>>48 lelong x ~%lu
+>>>>>44 lelong !-1
+>>>>>>44 lelong !-1000
+>>>>>>>44 lelong !0
+>>>>>>>>44 lelong x >%lu
+>>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps
+# -- Second vorbis header packet - the comments
+# A kludge to read the vendor string. It's a counted string, not a
+# zero-terminated one, so file(1) can't read it in a generic way.
+# libVorbis is the only one existing currently, so I detect specifically
+# it. The interesting value is the cvs date (8 digits decimal).
+# Post-RC1 Ogg files have the second header packet (and thus the version)
+# in a different place, so we must use an indirect offset.
+>>>(84.b+85) string \x03vorbis
+>>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
+>>>>>(84.b+120) string >00000000
+# Map to beta version numbers:
+>>>>>>(84.b+120) string <20000508 (<beta1, prepublic)
+>>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2)
+>>>>>>(84.b+120) string >20000508
+>>>>>>>(84.b+120) string <20001031 (beta2-3)
+>>>>>>(84.b+120) string 20001031 (1.0 beta 3)
+>>>>>>(84.b+120) string >20001031
+>>>>>>>(84.b+120) string <20010225 (beta3-4)
+>>>>>>(84.b+120) string 20010225 (1.0 beta 4)
+>>>>>>(84.b+120) string >20010225
+>>>>>>>(84.b+120) string <20010615 (beta4-RC1)
+>>>>>>(84.b+120) string 20010615 (1.0 RC1)
+>>>>>>(84.b+120) string 20010813 (1.0 RC2)
+>>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1)
+>>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2)
+>>>>>>(84.b+120) string 20011217 (1.0 RC3)
+>>>>>>(84.b+120) string 20011231 (1.0 RC3)
+# Some pre-1.0 CVS snapshots still had "Xiphphorus"...
+>>>>>>(84.b+120) string >20011231 (pre-1.0 CVS)
+# For the 1.0 release, Xiphophorus is replaced by Xiph.Org
+>>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I
+>>>>>(84.b+117) string >00000000
+>>>>>>(84.b+117) string <20020717 (pre-1.0 CVS)
+>>>>>>(84.b+117) string 20020717 (1.0)
+>>>>>>(84.b+117) string 20030909 (1.0.1)
+>>>>>>(84.b+117) string 20040629 (1.1.0 RC1)
+
+#-----------------------------------------------
+# GNU Smalltalk image, starting at version 1.6.2
+# From: catull_us@yahoo.com
+#
+0 string GSTIm\0\0 GNU SmallTalk
+# little-endian
+>7 byte&1 =0 LE image version
+>>10 byte x %d.
+>>9 byte x \b%d.
+>>8 byte x \b%d
+#>>12 lelong x , data: %ld
+#>>16 lelong x , table: %ld
+#>>20 lelong x , memory: %ld
+# big-endian
+>7 byte&1 =1 BE image version
+>>8 byte x %d.
+>>9 byte x \b%d.
+>>10 byte x \b%d
+#>>12 belong x , data: %ld
+#>>16 belong x , table: %ld
+#>>20 belong x , memory: %ld
+
+
+
+#------------------------------------------------------------------------------
+# sgml: file(1) magic for Standard Generalized Markup Language
+# HyperText Markup Language (HTML) is an SGML document type,
+# from Daniel Quinlan (quinlan@yggdrasil.com)
+# adapted to string extenstions by Anthon van der Neut <anthon@mnt.org)
+0 string/cB \<!DOCTYPE\ html HTML document text
+0 string/cb \<head HTML document text
+0 string/cb \<title HTML document text
+0 string/cb \<html HTML document text
+
+# Extensible markup language (XML), a subset of SGML
+# from Marc Prud'hommeaux (marc@apocalypse.org)
+0 string/cb \<?xml XML document text
+0 string \<?xml\ version " XML
+0 string \<?xml\ version=" XML
+>15 string >\0 %.3s document text
+>>23 string \<xsl:stylesheet (XSL stylesheet)
+>>24 string \<xsl:stylesheet (XSL stylesheet)
+0 string/b \<?xml XML document text
+0 string/cb \<?xml broken XML document text
+
+
+# SGML, mostly from rph@sq
+0 string/cb \<!doctype exported SGML document text
+0 string/cb \<!subdoc exported SGML subdocument text
+0 string/cb \<!-- exported SGML document text
+
+# Web browser cookie files
+# (Mozilla, Galeon, Netscape 4, Konqueror..)
+# Ulf Harnhammar <ulfh@update.uu.se>
+0 string #\ HTTP\ Cookie\ File Web browser cookie text
+0 string #\ Netscape\ HTTP\ Cookie\ File Netscape cookie text
+0 string #\ KDE\ Cookie\ File Konqueror cookie text
+
+#------------------------------------------------------------------------------
+# msvc: file(1) magic for msvc
+# "H. Nanosecond" <aldomel@ix.netcom.com>
+# Microsoft visual C
+#
+# I have version 1.0
+
+# .aps
+0 string HWB\000\377\001\000\000\000 Microsoft Visual C .APS file
+
+# .ide
+#too long 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316 MSVC .ide
+0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157 MSVC .ide
+
+# .res
+0 string \000\000\000\000\040\000\000\000\377 MSVC .res
+0 string \377\003\000\377\001\000\020\020\350 MSVC .res
+0 string \377\003\000\377\001\000\060\020\350 MSVC .res
+
+#.lib
+0 string \360\015\000\000 Microsoft Visual C library
+0 string \360\075\000\000 Microsoft Visual C library
+0 string \360\175\000\000 Microsoft Visual C library
+
+#.pch
+0 string DTJPCH0\000\022\103\006\200 Microsoft Visual C .pch
+
+# .pdb
+# too long 0 string Microsoft\ C/C++\ program\ database\
+0 string Microsoft\ C/C++\ MSVC program database
+>18 string program\ database\
+>33 string >\0 ver %s
+
+#.sbr
+0 string \000\002\000\007\000 MSVC .sbr
+>5 string >\0 %s
+
+#.bsc
+0 string \002\000\002\001 MSVC .bsc
+
+#.wsp
+0 string 1.00\ .0000.0000\000\003 MSVC .wsp version 1.0000.0000
+# these seem to start with the version and contain menus
+
+#------------------------------------------------------------------------------
+# news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
+#
+0 string StartFontMetrics ASCII font metrics
+0 string StartFont ASCII font bits
+0 belong 0x137A2944 NeWS bitmap font
+0 belong 0x137A2947 NeWS font family
+0 belong 0x137A2950 scalable OpenFont binary
+0 belong 0x137A2951 encrypted scalable OpenFont binary
+8 belong 0x137A2B45 X11/NeWS bitmap font
+8 belong 0x137A2B48 X11/NeWS font family
+
+# -----------------------------------------------------------
+# VMware specific files (deducted from version 1.1 and log file entries)
+# Anthon van der Neut (anthon@mnt.org)
+0 belong 0x4d52564e VMware nvram
+0 belong 0x434f5744 VMware
+>4 byte 3 virtual disk
+>>32 lelong x (%d/
+>>36 lelong x \b%d/
+>>40 lelong x \b%d)
+>4 byte 2 undoable disk
+>>32 string >\0 (%s)
+
+#------------------------------------------------------------------------------
+# diamond: file(1) magic for Diamond system
+#
+# ... diamond is a multi-media mail and electronic conferencing system....
+#
+# XXX - I think it was either renamed Slate, or replaced by Slate....
+#
+# The full deal is too long...
+#0 string <list>\n<protocol\ bbn-multimedia-format> Diamond Multimedia Document
+0 string =<list>\n<protocol\ bbn-m Diamond Multimedia Document
+
+#------------------------------------------------------------------------------
+# dump: file(1) magic for dump file format--for new and old dump filesystems
+#
+# We specify both byte orders in order to recognize byte-swapped dumps.
+#
+24 belong 60012 new-fs dump file (big endian),
+>4 bedate x Previous dump %s,
+>8 bedate x This dump %s,
+>12 belong >0 Volume %ld,
+>692 belong 0 Level zero, type:
+>692 belong >0 Level %d, type:
+>0 belong 1 tape header,
+>0 belong 2 beginning of file record,
+>0 belong 3 map of inodes on tape,
+>0 belong 4 continuation of file record,
+>0 belong 5 end of volume,
+>0 belong 6 map of inodes deleted,
+>0 belong 7 end of medium (for floppy),
+>676 string >\0 Label %s,
+>696 string >\0 Filesystem %s,
+>760 string >\0 Device %s,
+>824 string >\0 Host %s,
+>888 belong >0 Flags %x
+
+24 belong 60011 old-fs dump file (big endian),
+#>4 bedate x Previous dump %s,
+#>8 bedate x This dump %s,
+>12 belong >0 Volume %ld,
+>692 belong 0 Level zero, type:
+>692 belong >0 Level %d, type:
+>0 belong 1 tape header,
+>0 belong 2 beginning of file record,
+>0 belong 3 map of inodes on tape,
+>0 belong 4 continuation of file record,
+>0 belong 5 end of volume,
+>0 belong 6 map of inodes deleted,
+>0 belong 7 end of medium (for floppy),
+>676 string >\0 Label %s,
+>696 string >\0 Filesystem %s,
+>760 string >\0 Device %s,
+>824 string >\0 Host %s,
+>888 belong >0 Flags %x
+
+24 lelong 60012 new-fs dump file (little endian),
+>4 ledate x This dump %s,
+>8 ledate x Previous dump %s,
+>12 lelong >0 Volume %ld,
+>692 lelong 0 Level zero, type:
+>692 lelong >0 Level %d, type:
+>0 lelong 1 tape header,
+>0 lelong 2 beginning of file record,
+>0 lelong 3 map of inodes on tape,
+>0 lelong 4 continuation of file record,
+>0 lelong 5 end of volume,
+>0 lelong 6 map of inodes deleted,
+>0 lelong 7 end of medium (for floppy),
+>676 string >\0 Label %s,
+>696 string >\0 Filesystem %s,
+>760 string >\0 Device %s,
+>824 string >\0 Host %s,
+>888 lelong >0 Flags %x
+
+24 lelong 60011 old-fs dump file (little endian),
+#>4 ledate x Previous dump %s,
+#>8 ledate x This dump %s,
+>12 lelong >0 Volume %ld,
+>692 lelong 0 Level zero, type:
+>692 lelong >0 Level %d, type:
+>0 lelong 1 tape header,
+>0 lelong 2 beginning of file record,
+>0 lelong 3 map of inodes on tape,
+>0 lelong 4 continuation of file record,
+>0 lelong 5 end of volume,
+>0 lelong 6 map of inodes deleted,
+>0 lelong 7 end of medium (for floppy),
+>676 string >\0 Label %s,
+>696 string >\0 Filesystem %s,
+>760 string >\0 Device %s,
+>824 string >\0 Host %s,
+>888 lelong >0 Flags %x
+
+#------------------------------------------------------------------------------
+# linux: file(1) magic for Linux files
+#
+# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
+# The following basic Linux magic is useful for reference, but using
+# "long" magic is a better practice in order to avoid collisions.
+#
+# 2 leshort 100 Linux/i386
+# >0 leshort 0407 impure executable (OMAGIC)
+# >0 leshort 0410 pure executable (NMAGIC)
+# >0 leshort 0413 demand-paged executable (ZMAGIC)
+# >0 leshort 0314 demand-paged executable (QMAGIC)
+#
+0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC)
+>16 lelong 0 \b, stripped
+0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC)
+>16 lelong 0 \b, stripped
+0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC)
+>16 lelong 0 \b, stripped
+0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC)
+>16 lelong 0 \b, stripped
+#
+0 string \007\001\000 Linux/i386 object file
+>20 lelong >0x1020 \b, DLL library
+# Linux-8086 stuff:
+0 string \01\03\020\04 Linux-8086 impure executable
+>28 long !0 not stripped
+0 string \01\03\040\04 Linux-8086 executable
+>28 long !0 not stripped
+#
+0 string \243\206\001\0 Linux-8086 object file
+#
+0 string \01\03\020\20 Minix-386 impure executable
+>28 long !0 not stripped
+0 string \01\03\040\20 Minix-386 executable
+>28 long !0 not stripped
+# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>
+216 lelong 0421 Linux/i386 core file
+>220 string >\0 of '%s'
+>200 lelong >0 (signal %d)
+#
+# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>
+# this can be overridden by the DOS executable (COM) entry
+2 string LILO Linux/i386 LILO boot/chain loader
+#
+# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>
+0 leshort 0x0436 Linux/i386 PC Screen Font data,
+>2 byte 0 256 characters, no directory,
+>2 byte 1 512 characters, no directory,
+>2 byte 2 256 characters, Unicode directory,
+>2 byte 3 512 characters, Unicode directory,
+>3 byte >0 8x%d
+# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>
+4086 string SWAP-SPACE Linux/i386 swap file
+# according to man page of mkswap (8) March 1999
+4086 string SWAPSPACE2 Linux/i386 swap file (new style)
+>0x400 long x %d (4K pages)
+>0x404 long x size %d pages
+# ECOFF magic for OSF/1 and Linux (only tested under Linux though)
+#
+# from Erik Troan (ewt@redhat.com) examining od dumps, so this
+# could be wrong
+# updated by David Mosberger (davidm@azstarnet.com) based on
+# GNU BFD and MIPS info found below.
+#
+0 leshort 0x0183 ECOFF alpha
+>24 leshort 0407 executable
+>24 leshort 0410 pure
+>24 leshort 0413 demand paged
+>8 long >0 not stripped
+>8 long 0 stripped
+>23 leshort >0 - version %ld.
+#
+# Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu>
+# and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>
+# and Nicolás Lichtmaier <nick@debian.org>
+# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
+# Linux kernel boot images (i386 arch) (Wolfram Kleff)
+514 string HdrS Linux kernel
+>510 leshort 0xAA55 x86 boot executable
+>>518 leshort >=3D0x200
+>>529 byte 0 zImage,
+>>>529 byte 1 bzImage,
+>>>(526.s+0x200) string >\0 version %s,
+>>498 leshort 1 RO-rootFS,
+>>498 leshort 0 RW-rootFS,
+>>508 leshort >0 root_dev 0x%X,
+>>502 leshort >0 swap_dev 0x%X,
+>>504 leshort >0 RAMdisksize %u KB,
+>>506 leshort 0xFFFF Normal VGA
+>>506 leshort 0xFFFE Extended VGA
+>>506 leshort 0xFFFD Prompt for Videomode
+>>506 leshort >0 Video mode %d
+# This also matches new kernels, which were caught above by "HdrS".
+0 belong 0xb8c0078e Linux kernel
+>0x1e3 string Loading version 1.3.79 or older
+>0x1e9 string Loading from prehistoric times
+
+# System.map files - Nicolás Lichtmaier <nick@debian.org>
+8 string \ A\ _text Linux kernel symbol map text
+
+# LSM entries - Nicolás Lichtmaier <nick@debian.org>
+0 string Begin3 Linux Software Map entry text
+0 string Begin4 Linux Software Map entry text (new format)
+
+# From Matt Zimmerman
+0 belong 0x4f4f4f4d User-mode Linux COW file
+>4 belong x \b, version %d
+>8 string >\0 \b, backing file %s
+
+############################################################################
+# Linux kernel versions
+
+0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux
+>497 leshort 0 x86 boot sector
+>>514 belong 0x8e of a kernel from the dawn of time!
+>>514 belong 0x908ed8b4 version 0.99-1.1.42
+>>514 belong 0x908ed8b8 for memtest86
+
+>497 leshort !0 x86 kernel
+>>504 leshort >0 RAMdisksize=%u KB
+>>502 leshort >0 swap=0x%X
+>>508 leshort >0 root=0x%X
+>>>498 leshort 1 \b-ro
+>>>498 leshort 0 \b-rw
+>>506 leshort 0xFFFF vga=normal
+>>506 leshort 0xFFFE vga=extended
+>>506 leshort 0xFFFD vga=ask
+>>506 leshort >0 vga=%d
+>>514 belong 0x908ed881 version 1.1.43-1.1.45
+>>514 belong 0x15b281cd
+>>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0
+>>>0xa99 belong 0x55AA5a5a version 1.3.1,2
+>>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30
+>>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41
+>>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45
+>>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72
+>>514 string HdrS
+>>>518 leshort >0x1FF
+>>>>529 byte 0 \b, zImage
+>>>>529 byte 1 \b, bzImage
+>>>>(526.s+0x200) string >\0 \b, version %s
+
+# Linux boot sector thefts.
+0 belong 0xb8c0078e Linux
+>0x1e6 belong 0x454c4b53 ELKS Kernel
+>0x1e6 belong !0x454c4b53 style boot sector
+
+############################################################################
+# Linux 8086 executable
+0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless
+>5 string .
+>>4 string >\0 \b, libc version %s
+
+0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable
+>2 byte&0x01 !0 \b, unmapped zero page
+>2 byte&0x20 0 \b, impure
+>2 byte&0x20 !0
+>>2 byte&0x10 !0 \b, A_EXEC
+>2 byte&0x02 !0 \b, A_PAL
+>2 byte&0x04 !0 \b, A_NSYM
+>2 byte&0x08 !0 \b, A_STAND
+>2 byte&0x40 !0 \b, A_PURE
+>2 byte&0x80 !0 \b, A_TOVLY
+>28 long !0 \b, not stripped
+>37 string .
+>>36 string >\0 \b, libc version %s
+
+# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable
+# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable
+# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable
+# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable
+
+# SYSLINUX boot logo files (from 'ppmtolss16' sources)
+# http://syslinux.zytor.com/
+#
+0 lelong =0x1413f33d SYSLINUX' LSS16 image data
+>4 leshort x \b, width %d
+>6 leshort x \b, height %d
+#------------------------------------------------------------------------------
+# mime: file(1) magic for MIME encoded files
+#
+0 string Content-Type:\
+>14 string >\0 %s
+0 string Content-Type:
+>13 string >\0 %s
+
+#------------------------------------------------------------------------------
+# zilog: file(1) magic for Zilog Z8000.
+#
+# Was it big-endian or little-endian? My Product Specification doesn't
+# say.
+#
+0 long 0xe807 object file (z8000 a.out)
+0 long 0xe808 pure object file (z8000 a.out)
+0 long 0xe809 separate object file (z8000 a.out)
+0 long 0xe805 overlay object file (z8000 a.out)
+
+#------------------------------------------------------------------------------
+# sgi: file(1) magic for Silicon Graphics applications
+
+#
+#
+# Performance Co-Pilot file types
+0 string PmNs PCP compiled namespace (V.0)
+0 string PmN PCP compiled namespace
+>3 string >\0 (V.%1.1s)
+3 lelong 0x84500526 PCP archive
+>7 byte x (V.%d)
+>20 lelong -2 temporal index
+>20 lelong -1 metadata
+>20 lelong 0 log volume #0
+>20 lelong >0 log volume #%ld
+>24 string >\0 host: %s
+0 string PCPFolio PCP
+>9 string Version: Archive Folio
+>18 string >\0 (V.%s)
+0 string #pmchart PCP pmchart view
+>9 string Version
+>17 string >\0 (V%-3.3s)
+0 string pmview PCP pmview config
+>7 string Version
+>15 string >\0 (V%-3.3s)
+0 string #pmlogger PCP pmlogger config
+>10 string Version
+>18 string >\0 (V%1.1s)
+0 string PcPh PCP Help
+>4 string 1 Index
+>4 string 2 Text
+>5 string >\0 (V.%1.1s)
+0 string #pmieconf-rules PCP pmieconf rules
+>16 string >\0 (V.%1.1s)
+3 string pmieconf-pmie PCP pmie config
+>17 string >\0 (V.%1.1s)
+
+# SpeedShop data files
+0 lelong 0x13130303 SpeedShop data file
+
+# mdbm files
+0 lelong 0x01023962 mdbm file, version 0 (obsolete)
+0 string mdbm mdbm file,
+>5 byte x version %d,
+>6 byte x 2^%d pages,
+>7 byte x pagesize 2^%d,
+>17 byte x hash %d,
+>11 byte x dataformat %d
+
+# Alias|Wavefront Maya files
+0 string //Maya ASCII Alias|Wavefront Maya Ascii File,
+>13 string >\0 version %s
+8 string MAYAFOR4 Alias|Wavefront Maya Binary File,
+>32 string >\0 version %s scene
+8 string MayaFOR4 Alias|Wavefront Maya Binary File,
+>32 string >\0 version %s scene
+8 string CIMG Alias|Wavefront Maya Image File
+8 string DEEP Alias|Wavefront Maya Image File
+
+#------------------------------------------------------------------------------
+# sequent: file(1) magic for Sequent machines
+#
+# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
+# For Sequent's multiprocessor systems (incomplete).
+0 lelong 0x00ea BALANCE NS32000 .o
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+0 lelong 0x10ea BALANCE NS32000 executable (0 @ 0)
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+0 lelong 0x20ea BALANCE NS32000 executable (invalid @ 0)
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+0 lelong 0x30ea BALANCE NS32000 standalone executable
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+#
+# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.
+# Symmetry magic nums will not be reached if DOS COM comes before them;
+# byte 0xeb is matched before these get a chance.
+0 leshort 0x12eb SYMMETRY i386 .o
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+0 leshort 0x22eb SYMMETRY i386 executable (0 @ 0)
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0)
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+0 leshort 0x42eb SYMMETRY i386 standalone executable
+>16 lelong >0 not stripped
+>124 lelong >0 version %ld
+
+#------------------------------------------------------------------------------
+# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine
+#
+# Note that this 0407 conflicts with several other a.out formats...
+#
+# XXX - should this be redone with "be" and "le", so that it works on
+# little-endian machines as well? If so, what's the deal with
+# "VAX-order" and "VAX-order2"?
+#
+#0 long 0407 68K Blit (standalone) executable
+#0 short 0407 VAX-order2 68K Blit (standalone) executable
+0 short 03401 VAX-order 68K Blit (standalone) executable
+0 long 0406 68k Blit mpx/mux executable
+0 short 0406 VAX-order2 68k Blit mpx/mux executable
+0 short 03001 VAX-order 68k Blit mpx/mux executable
+# Need more values for WE32 DMD executables.
+# Note that 0520 is the same as COFF
+#0 short 0520 tty630 layers executable
+#------------------------------------------------------------------------------
+# impulse tracker: file(1) magic for Impulse Tracker data files
+#
+# From <collver1@attbi.com>
+# These are the /etc/magic entries to decode modules, instruments, and
+# samples in Impulse Tracker's native format.
+
+0 string IMPS Impulse Tracker Sample
+>18 byte &2 16 bit
+>18 byte ^2 8 bit
+>18 byte &4 stereo
+>18 byte ^4 mono
+0 string IMPI Impulse Tracker Instrument
+>28 leshort !0 ITv%x
+>30 byte !0 %d samples
+0 string IMPM Impulse Tracker Module
+>40 leshort !0 compatible w/ITv%x
+>42 leshort !0 created w/ITv%x
+
+#------------------------------------------------------------------------------
+# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1
+# "/etc/magic":
+# From: guy@netapp.com (Guy Harris)
+#
+4 string pgscriptver IslandWrite document
+13 string DrawFile IslandDraw document
+
+
+#------------------------------------------------------------------------------
+# maple: file(1) magic for maple files
+# "H. Nanosecond" <aldomel@ix.netcom.com>
+# Maple V release 4, a multi-purpose math program
+#
+
+# maple library .lib
+0 string \000MVR4\nI MapleVr4 library
+
+# .ind
+# no magic for these :-(
+# they are compiled indexes for maple files
+
+# .hdb
+0 string \000\004\000\000 Maple help database
+
+# .mhp
+# this has the form <PACKAGE=name>
+0 string \<PACKAGE= Maple help file
+0 string \<HELP\ NAME= Maple help file
+0 string \n\<HELP\ NAME= Maple help file with extra carriage return at start (yuck)
+#0 string #\ Newton Maple help file, old style
+0 string #\ daub Maple help file, old style
+#0 string #=========== Maple help file, old style
+
+# .mws
+0 string \000\000\001\044\000\221 Maple worksheet
+#this is anomalous
+0 string WriteNow\000\002\000\001\000\000\000\000\100\000\000\000\000\000 Maple worksheet, but weird
+# this has the form {VERSION 2 3 "IBM INTEL NT" "2.3" }\n
+# that is {VERSION major_version miunor_version computer_type version_string}
+0 string {VERSION\ Maple worksheet
+>9 string >\0 version %.1s.
+>>10 string
+>>>11 string >\0 %.1s
+
+# .mps
+0 string \0\0\001$ Maple something
+# from byte 4 it is either 'nul E' or 'soh R'
+# I think 'nul E' means a file that was saved as a different name
+# a sort of revision marking
+# 'soh R' means new
+>4 string \000\105 An old revision
+>4 string \001\122 The latest save
+
+# .mpl
+# some of these are the same as .mps above
+#0000000 000 000 001 044 000 105 same as .mps
+#0000000 000 000 001 044 001 122 same as .mps
+
+0 string #\n##\ <SHAREFILE= Maple something
+0 string \n#\n##\ <SHAREFILE= Maple something
+0 string ##\ <SHAREFILE= Maple something
+0 string #\r##\ <SHAREFILE= Maple something
+0 string \r#\r##\ <SHAREFILE= Maple something
+0 string #\ \r##\ <DESCRIBE> Maple something anomalous.
+#
+# Copyright (c) 1996 Ignatios Souvatzis. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by Ignatios Souvatzis for
+# the NetBSD project.
+# 4. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+#
+#
+# OS9/6809 module descriptions:
+#
+0 beshort 0x87CD OS9/6809 module:
+#
+>6 byte&0x0f 0x00 non-executable
+>6 byte&0x0f 0x01 machine language
+>6 byte&0x0f 0x02 BASIC I-code
+>6 byte&0x0f 0x03 Pascal P-code
+>6 byte&0x0f 0x04 C I-code
+>6 byte&0x0f 0x05 COBOL I-code
+>6 byte&0x0f 0x06 Fortran I-code
+#
+>6 byte&0xf0 0x10 program executable
+>6 byte&0xf0 0x20 subroutine
+>6 byte&0xf0 0x30 multi-module
+>6 byte&0xf0 0x40 data module
+#
+>6 byte&0xf0 0xC0 system module
+>6 byte&0xf0 0xD0 file manager
+>6 byte&0xf0 0xE0 device driver
+>6 byte&0xf0 0xF0 device descriptor
+#
+# OS9/m68k stuff (to be continued)
+#
+0 beshort 0x4AFC OS9/68K module:
+#
+# attr
+>0x14 byte&0x80 0x80 re-entrant
+>0x14 byte&0x40 0x40 ghost
+>0x14 byte&0x20 0x20 system-state
+#
+# lang:
+#
+>0x13 byte 1 machine language
+>0x13 byte 2 BASIC I-code
+>0x13 byte 3 Pascal P-code
+>0x13 byte 4 C I-code
+>0x13 byte 5 COBOL I-code
+>0x13 byte 6 Fortran I-code
+#
+#
+# type:
+#
+>0x12 byte 1 program executable
+>0x12 byte 2 subroutine
+>0x12 byte 3 multi-module
+>0x12 byte 4 data module
+>0x12 byte 11 trap library
+>0x12 byte 12 system module
+>0x12 byte 13 file manager
+>0x12 byte 14 device driver
+>0x12 byte 15 device descriptor
+
+#------------------------------------------------------------------------------
+# pkgadd: file(1) magic for SysV R4 PKG Datastreams
+#
+0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4)
+
+#------------------------------------------------------------------------------
+# xo65 object files
+# From: "Ullrich von Bassewitz" <uz@cc65.org>
+#
+0 string \x55\x7A\x6E\x61 xo65 object,
+>4 leshort x version %d,
+>6 leshort&0x0001 =0x0001 with debug info
+>6 leshort&0x0001 =0x0000 no debug info
+
+# xo65 library files
+0 string \x6E\x61\x55\x7A xo65 library,
+>4 leshort x version %d
+
+# o65 object files
+0 string \x01\x00\x6F\x36\x35 o65
+>6 leshort&0x1000 =0x0000 executable,
+>6 leshort&0x1000 =0x1000 object,
+>5 byte x version %d,
+>6 leshort&0x8000 =0x8000 65816,
+>6 leshort&0x8000 =0x0000 6502,
+>6 leshort&0x2000 =0x2000 32 bit,
+>6 leshort&0x2000 =0x0000 16 bit,
+>6 leshort&0x4000 =0x4000 page reloc,
+>6 leshort&0x4000 =0x0000 byte reloc,
+>6 leshort&0x0003 =0x0000 alignment 1
+>6 leshort&0x0003 =0x0001 alignment 2
+>6 leshort&0x0003 =0x0002 alignment 4
+>6 leshort&0x0003 =0x0003 alignment 256
+#------------------------------------------------------------------------------
+# Virtutech Compressed Random Access File Format
+#
+# From <gustav@virtutech.com>
+0 string \211\277\036\203 Virtutech CRAFF
+>4 belong x v%d
+>20 belong 0 uncompressed
+>20 belong 1 bzipp2ed
+>20 belong 2 gzipped
+>24 belong 0 not clean
+
+#------------------------------------------------------------------------------
+# uuencode: file(1) magic for ASCII-encoded files
+#
+
+# GRR: the first line of xxencoded files is identical to that in uuencoded
+# files, but the first character in most subsequent lines is 'h' instead of
+# 'M'. (xxencoding uses lowercase letters in place of most of uuencode's
+# punctuation and survives BITNET gateways better.) If regular expressions
+# were supported, this entry could possibly be split into two with
+# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs).
+0 string begin\040 uuencoded or xxencoded text
+
+# btoa(1) is an alternative to uuencode that requires less space.
+0 string xbtoa\ Begin btoa'd text
+
+# ship(1) is another, much cooler alternative to uuencode.
+# Greg Roelofs, newt@uchicago.edu
+0 string $\012ship ship'd binary text
+
+# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
+# Greg Roelofs, newt@uchicago.edu
+0 string Decode\ the\ following\ with\ bdeco bencoded News text
+
+# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
+# Daniel Quinlan, quinlan@yggdrasil.com
+11 string must\ be\ converted\ with\ BinHex BinHex binary text
+>41 string x \b, version %.3s
+
+# GRR: is MIME BASE64 encoding handled somewhere?
+#------------------------------------------------------------------------------
+# amanda: file(1) magic for amanda file format
+#
+0 string AMANDA:\ AMANDA
+>8 string TAPESTART\ DATE tape header file,
+>>23 string X
+>>>25 string >\ Unused %s
+>>23 string >\ DATE %s
+>8 string FILE\ dump file,
+>>13 string >\ DATE %s
+
+#------------------------------------------------------------------------------
+# audio: file(1) magic for sound formats (see also "iff")
+#
+# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
+# and others
+#
+
+# Sun/NeXT audio data
+0 string .snd Sun/NeXT audio data:
+>12 belong 1 8-bit ISDN mu-law,
+>12 belong 2 8-bit linear PCM [REF-PCM],
+>12 belong 3 16-bit linear PCM,
+>12 belong 4 24-bit linear PCM,
+>12 belong 5 32-bit linear PCM,
+>12 belong 6 32-bit IEEE floating point,
+>12 belong 7 64-bit IEEE floating point,
+>12 belong 8 Fragmented sample data,
+>12 belong 10 DSP program,
+>12 belong 11 8-bit fixed point,
+>12 belong 12 16-bit fixed point,
+>12 belong 13 24-bit fixed point,
+>12 belong 14 32-bit fixed point,
+>12 belong 18 16-bit linear with emphasis,
+>12 belong 19 16-bit linear compressed,
+>12 belong 20 16-bit linear with emphasis and compression,
+>12 belong 21 Music kit DSP commands,
+>12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice data encoding),
+>12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
+>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
+>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
+>12 belong 27 8-bit A-law (CCITT G.711),
+>20 belong 1 mono,
+>20 belong 2 stereo,
+>20 belong 4 quad,
+>16 belong >0 %d Hz
+
+# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
+# that uses little-endian encoding and has a different magic number
+0 lelong 0x0064732E DEC audio data:
+>12 lelong 1 8-bit ISDN mu-law,
+>12 lelong 2 8-bit linear PCM [REF-PCM],
+>12 lelong 3 16-bit linear PCM,
+>12 lelong 4 24-bit linear PCM,
+>12 lelong 5 32-bit linear PCM,
+>12 lelong 6 32-bit IEEE floating point,
+>12 lelong 7 64-bit IEEE floating point,
+>12 belong 8 Fragmented sample data,
+>12 belong 10 DSP program,
+>12 belong 11 8-bit fixed point,
+>12 belong 12 16-bit fixed point,
+>12 belong 13 24-bit fixed point,
+>12 belong 14 32-bit fixed point,
+>12 belong 18 16-bit linear with emphasis,
+>12 belong 19 16-bit linear compressed,
+>12 belong 20 16-bit linear with emphasis and compression,
+>12 belong 21 Music kit DSP commands,
+>12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice data encoding),
+>12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
+>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
+>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
+>12 belong 27 8-bit A-law (CCITT G.711),
+>20 lelong 1 mono,
+>20 lelong 2 stereo,
+>20 lelong 4 quad,
+>16 lelong >0 %d Hz
+
+# Creative Labs AUDIO stuff
+0 string MThd Standard MIDI data
+>8 beshort x (format %d)
+>10 beshort x using %d track
+>10 beshort >1 \bs
+>12 beshort&0x7fff x at 1/%d
+>12 beshort&0x8000 >0 SMPTE
+
+0 string CTMF Creative Music (CMF) data
+0 string SBI SoundBlaster instrument data
+0 string Creative\ Voice\ File Creative Labs voice data
+# is this next line right? it came this way...
+>19 byte 0x1A
+>23 byte >0 - version %d
+>22 byte >0 \b.%d
+
+# first entry is also the string "NTRK"
+0 belong 0x4e54524b MultiTrack sound data
+>4 belong x - version %ld
+
+# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED
+# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi]
+0 string EMOD Extended MOD sound data,
+>4 byte&0xf0 x version %d
+>4 byte&0x0f x \b.%d,
+>45 byte x %d instruments
+>83 byte 0 (module)
+>83 byte 1 (song)
+
+# Real Audio (Magic .ra\0375)
+0 belong 0x2e7261fd RealAudio sound file
+0 string .RMF RealMedia file
+
+# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]
+# Oct 31, 1995
+# fixed by <doj@cubic.org> 2003-06-24
+# Too short...
+#0 string MTM MultiTracker Module sound file
+#0 string if Composer 669 Module sound data
+#0 string JN Composer 669 Module sound data (extended format)
+0 string MAS_U ULT(imate) Module sound data
+
+#0 string FAR Module sound data
+#>4 string >\15 Title: "%s"
+
+0x2c string SCRM ScreamTracker III Module sound data
+>0 string >\0 Title: "%s"
+
+# Gravis UltraSound patches
+# From <ache@nagual.ru>
+
+0 string GF1PATCH110\0ID#000002\0 GUS patch
+0 string GF1PATCH100\0ID#000002\0 Old GUS patch
+
+#
+# Taken from loader code from mikmod version 2.14
+# by Steve McIntyre (stevem@chiark.greenend.org.uk)
+# <doj@cubic.org> added title printing on 2003-06-24
+0 string MAS_UTrack_V00
+>14 string >/0 ultratracker V1.%.1s module sound data
+
+0 string UN05 MikMod UNI format module sound data
+
+0 string Extended\ Module: Fasttracker II module sound data
+>17 string >\0 Title: "%s"
+
+21 string/c !SCREAM! Screamtracker 2 module sound data
+21 string BMOD2STM Screamtracker 2 module sound data
+1080 string M.K. 4-channel Protracker module sound data
+>0 string >\0 Title: "%s"
+1080 string M!K! 4-channel Protracker module sound data
+>0 string >\0 Title: "%s"
+1080 string FLT4 4-channel Startracker module sound data
+>0 string >\0 Title: "%s"
+1080 string FLT8 8-channel Startracker module sound data
+>0 string >\0 Title: "%s"
+1080 string 4CHN 4-channel Fasttracker module sound data
+>0 string >\0 Title: "%s"
+1080 string 6CHN 6-channel Fasttracker module sound data
+>0 string >\0 Title: "%s"
+1080 string 8CHN 8-channel Fasttracker module sound data
+>0 string >\0 Title: "%s"
+1080 string CD81 8-channel Octalyser module sound data
+>0 string >\0 Title: "%s"
+1080 string OKTA 8-channel Oktalyzer module sound data
+>0 string >\0 Title: "%s"
+# Not good enough.
+#1082 string CH
+#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data
+1080 string 16CN 16-channel Taketracker module sound data
+>0 string >\0 Title: "%s"
+1080 string 32CN 32-channel Taketracker module sound data
+>0 string >\0 Title: "%s"
+
+# TOC sound files -Trevor Johnson <trevor@jpj.net>
+#
+0 string TOC TOC sound file
+
+# sidfiles <pooka@iki.fi>
+# added name,author,(c) and new RSID type by <doj@cubic.org> 2003-06-24
+0 string SIDPLAY\ INFOFILE Sidplay info file
+
+0 string PSID PlaySID v2.2+ (AMIGA) sidtune
+>4 beshort >0 w/ header v%d,
+>14 beshort =1 single song,
+>14 beshort >1 %d songs,
+>16 beshort >0 default song: %d
+>0x16 string >\0 name: "%s"
+>0x36 string >\0 author: "%s"
+>0x56 string >\0 copyright: "%s"
+
+0 string RSID RSID sidtune PlaySID compatible
+>4 beshort >0 w/ header v%d,
+>14 beshort =1 single song,
+>14 beshort >1 %d songs,
+>16 beshort >0 default song: %d
+>0x16 string >\0 name: "%s"
+>0x36 string >\0 author: "%s"
+>0x56 string >\0 copyright: "%s"
+
+# IRCAM <mpruett@sgi.com>
+# VAX and MIPS files are little-endian; Sun and NeXT are big-endian
+0 belong 0x64a30100 IRCAM file (VAX)
+0 belong 0x64a30200 IRCAM file (Sun)
+0 belong 0x64a30300 IRCAM file (MIPS little-endian)
+0 belong 0x64a30400 IRCAM file (NeXT)
+
+# NIST SPHERE <mpruett@sgi.com>
+0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file
+
+# Sample Vision <mpruett@sgi.com>
+0 string SOUND\ SAMPLE\ DATA\ Sample Vision file
+
+# Audio Visual Research <tonigonenstein@users.sourceforge.net>
+0 string 2BIT Audio Visual Research file,
+>12 beshort =0 mono,
+>12 beshort =-1 stereo,
+>14 beshort x %d bits
+>16 beshort =0 unsigned,
+>16 beshort =-1 signed,
+>22 belong&0x00ffffff x %d Hz,
+>18 beshort =0 no loop,
+>18 beshort =-1 loop,
+>21 ubyte <=127 note %d,
+>22 byte =0 replay 5.485 KHz
+>22 byte =1 replay 8.084 KHz
+>22 byte =2 replay 10.971 Khz
+>22 byte =3 replay 16.168 Khz
+>22 byte =4 replay 21.942 KHz
+>22 byte =5 replay 32.336 KHz
+>22 byte =6 replay 43.885 KHz
+>22 byte =7 replay 47.261 KHz
+
+# SGI SoundTrack <mpruett@sgi.com>
+0 string _SGI_SoundTrack SGI SoundTrack project file
+# ID3 version 2 tags <waschk@informatik.uni-rostock.de>
+0 string ID3 MP3 file with ID3 version 2.
+>3 ubyte <0xff \b%d.
+>4 ubyte <0xff \b%d tag
+
+# NSF (NES sound file) magic
+0 string NESM\x1a NES Sound File
+>14 string >\0 ("%s" by
+>46 string >\0 %s, copyright
+>78 string >\0 %s),
+>5 byte x version %d,
+>6 byte x %d tracks,
+>122 byte&0x2 =1 dual PAL/NTSC
+>122 byte&0x1 =1 PAL
+>122 byte&0x1 =0 NTSC
+
+# Impuse tracker module (audio/x-it)
+0 string IMPM Impulse Tracker module sound data -
+>4 string >\0 "%s"
+>40 leshort !0 compatible w/ITv%x
+>42 leshort !0 created w/ITv%x
+
+# Imago Orpheus module (audio/x-imf)
+60 string IM10 Imago Orpheus module sound data -
+>0 string >\0 "%s"
+
+# From <collver1@attbi.com>
+# These are the /etc/magic entries to decode modules, instruments, and
+# samples in Impulse Tracker's native format.
+
+0 string IMPS Impulse Tracker Sample
+>18 byte &2 16 bit
+>18 byte ^2 8 bit
+>18 byte &4 stereo
+>18 byte ^4 mono
+0 string IMPI Impulse Tracker Instrument
+>28 leshort !0 ITv%x
+>30 byte !0 %d samples
+
+# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files
+# From <collver1@attbi.com>
+0 string LM8953 Yamaha TX Wave
+>22 byte 0x49 looped
+>22 byte 0xC9 non-looped
+>23 byte 1 33kHz
+>23 byte 2 50kHz
+>23 byte 3 16kHz
+
+# scream tracker: file(1) magic for Scream Tracker sample files
+#
+# From <collver1@attbi.com>
+76 string SCRS Scream Tracker Sample
+>0 byte 1 sample
+>0 byte 2 adlib melody
+>0 byte >2 adlib drum
+>31 byte &2 stereo
+>31 byte ^2 mono
+>31 byte &4 16bit little endian
+>31 byte ^4 8bit
+>30 byte 0 unpacked
+>30 byte 1 packed
+
+# audio
+# From: Cory Dikkers <cdikkers@swbell.net>
+0 string MMD0 MED music file, version 0
+0 string MMD1 OctaMED Pro music file, version 1
+0 string MMD3 OctaMED Soundstudio music file, version 3
+0 string OctaMEDCmpr OctaMED Soundstudio compressed file
+0 string MED MED_Song
+0 string SymM Symphonie SymMOD music file
+#
+0 string THX AHX version
+>3 byte =0 1 module data
+>3 byte =1 2 module data
+#
+0 string OKTASONG Oktalyzer module data
+#
+0 string DIGI\ Booster\ module\0 %s
+>20 byte >0 %c
+>>21 byte >0 \b%c
+>>>22 byte >0 \b%c
+>>>>23 byte >0 \b%c
+>610 string >\0 \b, "%s"
+#
+0 string DBM0 DIGI Booster Pro Module
+>4 byte >0 V%X.
+>>5 byte x \b%02X
+>16 string >\0 \b, "%s"
+#
+0 string FTMN FaceTheMusic module
+>16 string >\0d \b, "%s"
+
+# From: <doj@cubic.org> 2003-06-24
+0 string AMShdr\32 Velvet Studio AMS Module v2.2
+0 string Extreme Extreme Tracker AMS Module v1.3
+0 string DDMF Xtracker DMF Module
+>4 byte x v%i
+>0xD string >\0 Title: "%s"
+>0x2B string >\0 Composer: "%s"
+0 string DSM\32 Dynamic Studio Module DSM
+0 string SONG DigiTrekker DTM Module
+0 string DMDL DigiTrakker MDL Module
+0 string PSM\32 Protracker Studio PSM Module
+44 string PTMF Poly Tracker PTM Module
+>0 string >\32 Title: "%s"
+0 string MT20 MadTracker 2.0 Module MT2
+0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD
+0 string RTMM RTM Module
+0x426 string MaDoKaN96 XMS Adlib Module
+>0 string >\0 Composer: "%s"
+0 string AMF AMF Module
+>4 string >\0 Title: "%s"
+0 string MODINFO1 Open Cubic Player Module Inforation MDZ
+0 string Extended\40Instrument: Fast Tracker II Instrument
+
+# From: Takeshi Hamasaki <hma@syd.odn.ne.jp>
+# NOA Nancy Codec file
+0 string \210NOA\015\012\032 NOA Nancy Codec Movie file
+# Yamaha SMAF format
+0 string MMMD Yamaha SMAF file
+# Sharp Jisaku Melody format for PDC
+0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody
+>20 string Ver01.00 Ver. 1.00
+>>32 byte x , %d tracks
+
+# Free lossless audio codec <http://flac.sourceforge.net>
+# From: Przemyslaw Augustyniak <silvathraec@rpg.pl>
+0 string fLaC FLAC audio bitstream data
+>4 byte&0x7f >0 \b, unknown version
+>4 byte&0x7f 0 \b
+# some common bits/sample values
+>>20 beshort&0x1f0 0x030 \b, 4 bit
+>>20 beshort&0x1f0 0x050 \b, 6 bit
+>>20 beshort&0x1f0 0x070 \b, 8 bit
+>>20 beshort&0x1f0 0x0b0 \b, 12 bit
+>>20 beshort&0x1f0 0x0f0 \b, 16 bit
+>>20 beshort&0x1f0 0x170 \b, 24 bit
+>>20 byte&0xe 0x0 \b, mono
+>>20 byte&0xe 0x2 \b, stereo
+>>20 byte&0xe 0x4 \b, 3 channels
+>>20 byte&0xe 0x6 \b, 4 channels
+>>20 byte&0xe 0x8 \b, 5 channels
+>>20 byte&0xe 0xa \b, 6 channels
+>>20 byte&0xe 0xc \b, 7 channels
+>>20 byte&0xe 0xe \b, 8 channels
+# some common sample rates
+>>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz
+>>17 belong&0xfffff0 0x0bb800 \b, 48 kHz
+>>17 belong&0xfffff0 0x07d000 \b, 32 kHz
+>>17 belong&0xfffff0 0x056220 \b, 22.05 kHz
+>>17 belong&0xfffff0 0x05dc00 \b, 24 kHz
+>>17 belong&0xfffff0 0x03e800 \b, 16 kHz
+>>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz
+>>17 belong&0xfffff0 0x02ee00 \b, 12 kHz
+>>17 belong&0xfffff0 0x01f400 \b, 8 kHz
+>>17 belong&0xfffff0 0x177000 \b, 96 kHz
+>>17 belong&0xfffff0 0x0fa000 \b, 64 kHz
+>>21 byte&0xf >0 \b, >4G samples
+>>21 byte&0xf 0 \b
+>>>22 belong >0 \b, %u samples
+>>>22 belong 0 \b, length unknown
+
+# (ISDN) VBOX voice message file (Wolfram Kleff)
+0 string VBOX VBOX voice message data
+
+# ReBorn Song Files (.rbs)
+# David J. Singer <doc@deadvirgins.org.uk>
+8 string RB40 RBS Song file
+>29 string ReBorn created by ReBorn
+>37 string Propellerhead created by ReBirth
+
+# Synthesizer Generator and Kimwitu share their file format
+0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data
+# Kimwitu++ uses a slightly different magic
+0 string A#S#C#S#S#L#HUB Kimwitu++ data
+
+# From "Simon Hosie
+0 string TFMX-SONG TFMX module sound data
+
+# From danny.milo@gmx.net (Danny Milosavljevic)
+# monkeysaudio for magic.mime
+0 string MAC\ X/Monkey audio,
+>4 leshort >0 version %d,
+>6 leshort >0 compression level %d,
+>8 leshort >0 flags %x,
+>10 leshort >0 channels %d,
+>12 lelong >0 samplerate %d,
+>24 lelong >0 frames %d
+
+#------------------------------------------------------------------------------
+# bsdi: file(1) magic for BSD/OS (from BSDI) objects
+#
+
+0 lelong 0314 386 compact demand paged pure executable
+>16 lelong >0 not stripped
+>32 byte 0x6a (uses shared libs)
+
+0 lelong 0407 386 executable
+>16 lelong >0 not stripped
+>32 byte 0x6a (uses shared libs)
+
+0 lelong 0410 386 pure executable
+>16 lelong >0 not stripped
+>32 byte 0x6a (uses shared libs)
+
+0 lelong 0413 386 demand paged pure executable
+>16 lelong >0 not stripped
+>32 byte 0x6a (uses shared libs)
+
+# same as in SunOS 4.x, except for static shared libraries
+0 belong&077777777 0600413 sparc demand paged
+>0 byte &0x80
+>>20 belong <4096 shared library
+>>20 belong =4096 dynamically linked executable
+>>20 belong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+>36 belong 0xb4100001 (uses shared libs)
+
+0 belong&077777777 0600410 sparc pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+>36 belong 0xb4100001 (uses shared libs)
+
+0 belong&077777777 0600407 sparc
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+>36 belong 0xb4100001 (uses shared libs)
+
+#------------------------------------------------------------------------------
+# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files
+# From Roger Leigh <roger@whinlatter.uklinux.net>
+0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0
+0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0
+0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0
+
+
+#------------------------------------------------------------------------------
+# intel: file(1) magic for x86 Unix
+#
+# Various flavors of x86 UNIX executable/object (other than Xenix, which
+# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do
+# Windows as well.
+#
+# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
+# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere
+# as well, if, as, and when IBM makes it portable.
+#
+# The `versions' should be un-commented if they work for you.
+# (Was the problem just one of endianness?)
+#
+0 leshort 0502 basic-16 executable
+>12 lelong >0 not stripped
+#>22 leshort >0 - version %ld
+0 leshort 0503 basic-16 executable (TV)
+>12 lelong >0 not stripped
+#>22 leshort >0 - version %ld
+0 leshort 0510 x86 executable
+>12 lelong >0 not stripped
+0 leshort 0511 x86 executable (TV)
+>12 lelong >0 not stripped
+0 leshort =0512 iAPX 286 executable small model (COFF)
+>12 lelong >0 not stripped
+#>22 leshort >0 - version %ld
+0 leshort =0522 iAPX 286 executable large model (COFF)
+>12 lelong >0 not stripped
+#>22 leshort >0 - version %ld
+# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
+0 leshort =0514 80386 COFF executable
+>12 lelong >0 not stripped
+>22 leshort >0 - version %ld
+
+# rom: file(1) magic for BIOS ROM Extensions found in intel machines
+# mapped into memory between 0xC0000 and 0xFFFFF
+# From Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu
+0 beshort 0x55AA BIOS (ia32) ROM Ext.
+>5 string USB USB
+>7 string LDR UNDI image
+>30 string IBM IBM comp. Video
+>26 string Adaptec Adaptec
+>28 string Adaptec Adaptec
+>42 string PROMISE Promise
+>2 byte x (%d*512)
+
+#------------------------------------------------------------------------------
+# netbsd: file(1) magic for NetBSD objects
+#
+# All new-style magic numbers are in network byte order.
+#
+
+0 lelong 000000407 a.out NetBSD little-endian object file
+>16 lelong >0 not stripped
+0 belong 000000407 a.out NetBSD big-endian object file
+>16 belong >0 not stripped
+
+0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 041400410 a.out NetBSD/i386 pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 041400407 a.out NetBSD/i386
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+0 belong&0377777777 041400507 a.out NetBSD/i386 core
+>12 string >\0 from '%s'
+>32 lelong !0 (signal %d)
+
+0 belong&0377777777 041600413 a.out NetBSD/m68k demand paged
+>0 byte &0x80
+>>20 belong <8192 shared library
+>>20 belong =8192 dynamically linked executable
+>>20 belong >8192 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 041600410 a.out NetBSD/m68k pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 041600407 a.out NetBSD/m68k
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 belong !0 executable
+>>20 belong =0 object file
+>16 belong >0 not stripped
+0 belong&0377777777 041600507 a.out NetBSD/m68k core
+>12 string >\0 from '%s'
+>32 belong !0 (signal %d)
+
+0 belong&0377777777 042000413 a.out NetBSD/m68k4k demand paged
+>0 byte &0x80
+>>20 belong <4096 shared library
+>>20 belong =4096 dynamically linked executable
+>>20 belong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 042000410 a.out NetBSD/m68k4k pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 042000407 a.out NetBSD/m68k4k
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 belong !0 executable
+>>20 belong =0 object file
+>16 belong >0 not stripped
+0 belong&0377777777 042000507 a.out NetBSD/m68k4k core
+>12 string >\0 from '%s'
+>32 belong !0 (signal %d)
+
+0 belong&0377777777 042200413 a.out NetBSD/ns32532 demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 042200410 a.out NetBSD/ns32532 pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 042200407 a.out NetBSD/ns32532
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+0 belong&0377777777 042200507 a.out NetBSD/ns32532 core
+>12 string >\0 from '%s'
+>32 lelong !0 (signal %d)
+
+0 belong&0377777777 045200507 a.out NetBSD/powerpc core
+>12 string >\0 from '%s'
+
+0 belong&0377777777 042400413 a.out NetBSD/sparc demand paged
+>0 byte &0x80
+>>20 belong <8192 shared library
+>>20 belong =8192 dynamically linked executable
+>>20 belong >8192 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 042400410 a.out NetBSD/sparc pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 042400407 a.out NetBSD/sparc
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 belong !0 executable
+>>20 belong =0 object file
+>16 belong >0 not stripped
+0 belong&0377777777 042400507 a.out NetBSD/sparc core
+>12 string >\0 from '%s'
+>32 belong !0 (signal %d)
+
+0 belong&0377777777 042600413 a.out NetBSD/pmax demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 042600410 a.out NetBSD/pmax pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 042600407 a.out NetBSD/pmax
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+0 belong&0377777777 042600507 a.out NetBSD/pmax core
+>12 string >\0 from '%s'
+>32 lelong !0 (signal %d)
+
+0 belong&0377777777 043000413 a.out NetBSD/vax 1k demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 043000410 a.out NetBSD/vax 1k pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 043000407 a.out NetBSD/vax 1k
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+0 belong&0377777777 043000507 a.out NetBSD/vax 1k core
+>12 string >\0 from '%s'
+>32 lelong !0 (signal %d)
+
+0 belong&0377777777 045400413 a.out NetBSD/vax 4k demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 045400410 a.out NetBSD/vax 4k pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 045400407 a.out NetBSD/vax 4k
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+0 belong&0377777777 045400507 a.out NetBSD/vax 4k core
+>12 string >\0 from '%s'
+>32 lelong !0 (signal %d)
+
+# NetBSD/alpha does not support (and has never supported) a.out objects,
+# so no rules are provided for them. NetBSD/alpha ELF objects are
+# dealt with in "elf".
+0 lelong 0x00070185 ECOFF NetBSD/alpha binary
+>10 leshort 0x0001 not stripped
+>10 leshort 0x0000 stripped
+0 belong&0377777777 043200507 a.out NetBSD/alpha core
+>12 string >\0 from '%s'
+>32 lelong !0 (signal %d)
+
+0 belong&0377777777 043400413 a.out NetBSD/mips demand paged
+>0 byte &0x80
+>>20 belong <8192 shared library
+>>20 belong =8192 dynamically linked executable
+>>20 belong >8192 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 043400410 a.out NetBSD/mips pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 043400407 a.out NetBSD/mips
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 belong !0 executable
+>>20 belong =0 object file
+>16 belong >0 not stripped
+0 belong&0377777777 043400507 a.out NetBSD/mips core
+>12 string >\0 from '%s'
+>32 belong !0 (signal %d)
+
+0 belong&0377777777 043600413 a.out NetBSD/arm32 demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 043600410 a.out NetBSD/arm32 pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 043600407 a.out NetBSD/arm32
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+# NetBSD/arm26 has always used ELF objects, but it shares a core file
+# format with NetBSD/arm32.
+0 belong&0377777777 043600507 a.out NetBSD/arm core
+>12 string >\0 from '%s'
+>32 lelong !0 (signal %d)
+
+#------------------------------------------------------------------------------
+# riff: file(1) magic for RIFF format
+# See
+#
+# http://www.seanet.com/users/matts/riffmci/riffmci.htm
+#
+# AVI section extended by Patrik Rådman <patrik+file-magic@iki.fi>
+#
+0 string RIFF RIFF (little-endian) data
+# RIFF Palette format
+>8 string PAL \b, palette
+>>16 leshort x \b, version %d
+>>18 leshort x \b, %d entries
+# RIFF Device Independent Bitmap format
+>8 string RDIB \b, device-independent bitmap
+>>16 string BM
+>>>30 leshort 12 \b, OS/2 1.x format
+>>>>34 leshort x \b, %d x
+>>>>36 leshort x %d
+>>>30 leshort 64 \b, OS/2 2.x format
+>>>>34 leshort x \b, %d x
+>>>>36 leshort x %d
+>>>30 leshort 40 \b, Windows 3.x format
+>>>>34 lelong x \b, %d x
+>>>>38 lelong x %d x
+>>>>44 leshort x %d
+# RIFF MIDI format
+>8 string RMID \b, MIDI
+# RIFF Multimedia Movie File format
+>8 string RMMP \b, multimedia movie
+# Microsoft WAVE format (*.wav)
+>8 string WAVE \b, WAVE audio
+>>20 leshort 1 \b, Microsoft PCM
+>>>34 leshort >0 \b, %d bit
+>>20 leshort 2 \b, Microsoft ADPCM
+>>20 leshort 6 \b, ITU G.711 A-law
+>>20 leshort 7 \b, ITU G.711 mu-law
+>>20 leshort 17 \b, IMA ADPCM
+>>20 leshort 20 \b, ITU G.723 ADPCM (Yamaha)
+>>20 leshort 49 \b, GSM 6.10
+>>20 leshort 64 \b, ITU G.721 ADPCM
+>>20 leshort 80 \b, MPEG
+>>20 leshort 85 \b, MPEG Layer 3
+>>22 leshort =1 \b, mono
+>>22 leshort =2 \b, stereo
+>>22 leshort >2 \b, %d channels
+>>24 lelong >0 %d Hz
+# Corel Draw Picture
+>8 string CDRA \b, Corel Draw Picture
+# AVI == Audio Video Interleave
+>8 string AVI\040 \b, AVI
+>>12 string LIST
+>>>20 string hdrlavih
+>>>>&36 lelong x \b, %lu x
+>>>>&40 lelong x %lu,
+>>>>&4 lelong >1000000 <1 fps,
+>>>>&4 lelong 1000000 1.00 fps,
+>>>>&4 lelong 500000 2.00 fps,
+>>>>&4 lelong 333333 3.00 fps,
+>>>>&4 lelong 250000 4.00 fps,
+>>>>&4 lelong 200000 5.00 fps,
+>>>>&4 lelong 166667 6.00 fps,
+>>>>&4 lelong 142857 7.00 fps,
+>>>>&4 lelong 125000 8.00 fps,
+>>>>&4 lelong 111111 9.00 fps,
+>>>>&4 lelong 100000 10.00 fps,
+# ]9.9,10.1[
+>>>>&4 lelong <101010
+>>>>>&-4 lelong >99010
+>>>>>>&-4 lelong !100000 ~10 fps,
+>>>>&4 lelong 83333 12.00 fps,
+# ]11.9,12.1[
+>>>>&4 lelong <84034
+>>>>>&-4 lelong >82645
+>>>>>>&-4 lelong !83333 ~12 fps,
+>>>>&4 lelong 66667 15.00 fps,
+# ]14.9,15.1[
+>>>>&4 lelong <67114
+>>>>>&-4 lelong >66225
+>>>>>>&-4 lelong !66667 ~15 fps,
+>>>>&4 lelong 50000 20.00 fps,
+>>>>&4 lelong 41708 23.98 fps,
+>>>>&4 lelong 41667 24.00 fps,
+# ]23.9,24.1[
+>>>>&4 lelong <41841
+>>>>>&-4 lelong >41494
+>>>>>>&-4 lelong !41708
+>>>>>>>&-4 lelong !41667 ~24 fps,
+>>>>&4 lelong 40000 25.00 fps,
+# ]24.9,25.1[
+>>>>&4 lelong <40161
+>>>>>&-4 lelong >39841
+>>>>>>&-4 lelong !40000 ~25 fps,
+>>>>&4 lelong 33367 29.97 fps,
+>>>>&4 lelong 33333 30.00 fps,
+# ]29.9,30.1[
+>>>>&4 lelong <33445
+>>>>>&-4 lelong >33223
+>>>>>>&-4 lelong !33367
+>>>>>>>&-4 lelong !33333 ~30 fps,
+>>>>&4 lelong <32224 >30 fps,
+##>>>>&4 lelong x (%lu)
+##>>>>&20 lelong x %lu frames,
+# Note: The tests below assume that the AVI has 1 or 2 streams,
+# "vids" optionally followed by "auds".
+# (Should cover 99.9% of all AVIs.)
+# assuming avih length = 56
+>>>88 string LIST
+>>>>96 string strlstrh
+>>>>>108 string vids video:
+>>>>>>&0 lelong 0 uncompressed
+# skip past vids strh
+>>>>>>(104.l+108) string strf
+>>>>>>>(104.l+132) lelong 1 RLE 8bpp
+>>>>>>>(104.l+132) string/c cvid Cinepak
+>>>>>>>(104.l+132) string/c i263 Intel I.263
+>>>>>>>(104.l+132) string/c iv32 Indeo 3.2
+>>>>>>>(104.l+132) string/c iv41 Indeo 4.1
+>>>>>>>(104.l+132) string/c iv50 Indeo 5.0
+>>>>>>>(104.l+132) string/c mp42 Microsoft MPEG-4 v2
+>>>>>>>(104.l+132) string/c mp43 Microsoft MPEG-4 v3
+>>>>>>>(104.l+132) string/c mjpg Motion JPEG
+>>>>>>>(104.l+132) string/c div3 DivX 3
+>>>>>>>>112 string/c div3 Low-Motion
+>>>>>>>>112 string/c div4 Fast-Motion
+>>>>>>>(104.l+132) string/c divx DivX 4
+>>>>>>>(104.l+132) string/c dx50 DivX 5
+>>>>>>>(104.l+132) string/c xvid XviD
+>>>>>>>(104.l+132) lelong 0
+##>>>>>>>(104.l+132) string x (%.4s)
+# skip past first (video) LIST
+>>>>(92.l+96) string LIST
+>>>>>(92.l+104) string strlstrh
+>>>>>>(92.l+116) string auds \b, audio:
+# auds strh length = 56:
+>>>>>>>(92.l+172) string strf
+>>>>>>>>(92.l+180) leshort 0x0001 uncompressed PCM
+>>>>>>>>(92.l+180) leshort 0x0002 ADPCM
+>>>>>>>>(92.l+180) leshort 0x0055 MPEG-1 Layer 3
+>>>>>>>>(92.l+180) leshort 0x2000 Dolby AC3
+>>>>>>>>(92.l+180) leshort 0x0161 DivX
+##>>>>>>>>(92.l+180) leshort x (0x%.4x)
+>>>>>>>>(92.l+182) leshort 1 (mono,
+>>>>>>>>(92.l+182) leshort 2 (stereo,
+>>>>>>>>(92.l+182) leshort >2 (%d channels,
+>>>>>>>>(92.l+184) lelong x %d Hz)
+# auds strh length = 64:
+>>>>>>>(92.l+180) string strf
+>>>>>>>>(92.l+188) leshort 0x0001 uncompressed PCM
+>>>>>>>>(92.l+188) leshort 0x0002 ADPCM
+>>>>>>>>(92.l+188) leshort 0x0055 MPEG-1 Layer 3
+>>>>>>>>(92.l+188) leshort 0x2000 Dolby AC3
+>>>>>>>>(92.l+188) leshort 0x0161 DivX
+##>>>>>>>>(92.l+188) leshort x (0x%.4x)
+>>>>>>>>(92.l+190) leshort 1 (mono,
+>>>>>>>>(92.l+190) leshort 2 (stereo,
+>>>>>>>>(92.l+190) leshort >2 (%d channels,
+>>>>>>>>(92.l+192) lelong x %d Hz)
+# Animated Cursor format
+>8 string ACON \b, animated cursor
+# SoundFont 2 <mpruett@sgi.com>
+>8 string sfbk SoundFont/Bank
+# MPEG-1 wrapped in a RIFF, apparently
+>8 string CDXA \b, wrapped MPEG-1 (CDXA)
+>8 string 4XMV \b, 4X Movie file
+
+#
+# XXX - some of the below may only appear in little-endian form.
+#
+# Also "MV93" appears to be for one form of Macromedia Director
+# files, and "GDMF" appears to be another multimedia format.
+#
+0 string RIFX RIFF (big-endian) data
+# RIFF Palette format
+>8 string PAL \b, palette
+>>16 beshort x \b, version %d
+>>18 beshort x \b, %d entries
+# RIFF Device Independent Bitmap format
+>8 string RDIB \b, device-independent bitmap
+>>16 string BM
+>>>30 beshort 12 \b, OS/2 1.x format
+>>>>34 beshort x \b, %d x
+>>>>36 beshort x %d
+>>>30 beshort 64 \b, OS/2 2.x format
+>>>>34 beshort x \b, %d x
+>>>>36 beshort x %d
+>>>30 beshort 40 \b, Windows 3.x format
+>>>>34 belong x \b, %d x
+>>>>38 belong x %d x
+>>>>44 beshort x %d
+# RIFF MIDI format
+>8 string RMID \b, MIDI
+# RIFF Multimedia Movie File format
+>8 string RMMP \b, multimedia movie
+# Microsoft WAVE format (*.wav)
+>8 string WAVE \b, WAVE audio
+>>20 leshort 1 \b, Microsoft PCM
+>>>34 leshort >0 \b, %d bit
+>>22 beshort =1 \b, mono
+>>22 beshort =2 \b, stereo
+>>22 beshort >2 \b, %d channels
+>>24 belong >0 %d Hz
+# Corel Draw Picture
+>8 string CDRA \b, Corel Draw Picture
+# AVI == Audio Video Interleave
+>8 string AVI\040 \b, AVI
+# Animated Cursor format
+>8 string ACON \b, animated cursor
+# Notation Interchange File Format (big-endian only)
+>8 string NIFF \b, Notation Interchange File Format
+# SoundFont 2 <mpruett@sgi.com>
+>8 string sfbk SoundFont/Bank
+#------------------------------------------------------------------------------
+# Console game magic
+# Toby Deshane <hac@shoelace.digivill.net>
+# ines: file(1) magic for Marat's iNES Nintendo Entertainment System
+# ROM dump format
+
+0 string NES\032 iNES ROM dump,
+>4 byte x %dx16k PRG
+>5 byte x \b, %dx8k CHR
+>6 byte&0x01 =0x1 \b, [Vert.]
+>6 byte&0x01 =0x0 \b, [Horiz.]
+>6 byte&0x02 =0x2 \b, [SRAM]
+>6 byte&0x04 =0x4 \b, [Trainer]
+>6 byte&0x04 =0x8 \b, [4-Scr]
+
+#------------------------------------------------------------------------------
+# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format
+#
+0x104 belong 0xCEED6666 Gameboy ROM:
+>0x134 string >\0 "%.16s"
+>0x146 byte 0x03 \b,[SGB]
+>0x147 byte 0x00 \b, [ROM ONLY]
+>0x147 byte 0x01 \b, [ROM+MBC1]
+>0x147 byte 0x02 \b, [ROM+MBC1+RAM]
+>0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT]
+>0x147 byte 0x05 \b, [ROM+MBC2]
+>0x147 byte 0x06 \b, [ROM+MBC2+BATTERY]
+>0x147 byte 0x08 \b, [ROM+RAM]
+>0x147 byte 0x09 \b, [ROM+RAM+BATTERY]
+>0x147 byte 0x0B \b, [ROM+MMM01]
+>0x147 byte 0x0C \b, [ROM+MMM01+SRAM]
+>0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT]
+>0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT]
+>0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT]
+>0x147 byte 0x11 \b, [ROM+MBC3]
+>0x147 byte 0x12 \b, [ROM+MBC3+RAM]
+>0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT]
+>0x147 byte 0x19 \b, [ROM+MBC5]
+>0x147 byte 0x1A \b, [ROM+MBC5+RAM]
+>0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT]
+>0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE]
+>0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM]
+>0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT]
+>0x147 byte 0x1F \b, [Pocket Camera]
+>0x147 byte 0xFD \b, [Bandai TAMA5]
+>0x147 byte 0xFE \b, [Hudson HuC-3]
+>0x147 byte 0xFF \b, [Hudson HuC-1]
+
+>0x148 byte 0 \b, ROM: 256Kbit
+>0x148 byte 1 \b, ROM: 512Kbit
+>0x148 byte 2 \b, ROM: 1Mbit
+>0x148 byte 3 \b, ROM: 2Mbit
+>0x148 byte 4 \b, ROM: 4Mbit
+>0x148 byte 5 \b, ROM: 8Mbit
+>0x148 byte 6 \b, ROM: 16Mbit
+>0x148 byte 0x52 \b, ROM: 9Mbit
+>0x148 byte 0x53 \b, ROM: 10Mbit
+>0x148 byte 0x54 \b, ROM: 12Mbit
+
+>0x149 byte 1 \b, RAM: 16Kbit
+>0x149 byte 2 \b, RAM: 64Kbit
+>0x149 byte 3 \b, RAM: 128Kbit
+>0x149 byte 4 \b, RAM: 1Mbit
+
+#>0x14e long x \b, CRC: %x
+
+#------------------------------------------------------------------------------
+# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format
+#
+0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump
+>0x120 string >\0 Name: "%.16s"
+>0x110 string >\0 %.16s
+>0x1B0 string RA with SRAM
+
+#------------------------------------------------------------------------------
+# genesis: file(1) magic for the Super MegaDrive ROM dump format
+#
+0x280 string EAGN Super MagicDrive ROM dump
+>0 byte x %dx16k blocks
+>2 byte 0 \b, last in series or standalone
+>2 byte >0 \b, split ROM
+>8 byte 0xAA
+>9 byte 0xBB
+
+#------------------------------------------------------------------------------
+# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format
+#
+0x280 string EAMG Super MagicDrive ROM dump
+>0 byte x %dx16k blocks
+>2 byte x \b, last in series or standalone
+>8 byte 0xAA
+>9 byte 0xBB
+
+#------------------------------------------------------------------------------
+# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps
+#
+# Does not detect all images. Very preliminary guesswork. Need more data
+# on format.
+#
+# FIXME: need a little more info...;P
+#
+#0 byte 0xF3
+#>1 byte 0xED Sega Master System/Game Gear ROM dump
+#>1 byte 0x31 Sega Master System/Game Gear ROM dump
+#>1 byte 0xDB Sega Master System/Game Gear ROM dump
+#>1 byte 0xAF Sega Master System/Game Gear ROM dump
+#>1 byte 0xC3 Sega Master System/Game Gear ROM dump
+
+#------------------------------------------------------------------------------
+# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format
+#
+0 belong 0x21068028 Sega Dreamcast VMU game image
+0 string LCDi Dream Animator file
+
+#------------------------------------------------------------------------------
+# v64: file(1) uncertain magic for the V64 format N64 ROM dumps
+#
+0 belong 0x37804012 V64 Nintendo 64 ROM dump
+
+#------------------------------------------------------------------------------
+# msx: file(1) magic for MSX game cartridge dumps
+# Too simple - MPi
+#0 beshort 0x4142 MSX game cartridge dump
+
+#------------------------------------------------------------------------------
+# Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :
+0 string PS-X\ EXE Sony Playstation executable
+# Area:
+>113 string x (%s)
+
+#------------------------------------------------------------------------------
+# Microsoft Xbox executables .xbe (Esa Hyytiä <ehyytia@cc.hut.fi>)
+0 string XBEH XBE, Microsoft Xbox executable
+# probabilistic checks whether signed or not
+>0x0004 ulelong =0x0
+>>&2 ulelong =0x0
+>>>&2 ulelong =0x0 \b, not signed
+>0x0004 ulelong >0
+>>&2 ulelong >0
+>>>&2 ulelong >0 \b, signed
+# expect base address of 0x10000
+>0x0104 ulelong =0x10000
+>>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions
+>>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007
+>>>(0x0118-0x0FF60) ulelong >0 (regions:
+>>>>(0x0118-0x0FF60) ulelong &0x00000001 NA
+>>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan
+>>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World
+>>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer
+>>>(0x0118-0x0FF60) ulelong >0 \b)
+
+# --------------------------------
+# Microsoft Xbox data file formats
+0 string XIP0 XIP, Microsoft Xbox data
+0 string XTF0 XTF, Microsoft Xbox data
+
+# Atari Lynx cartridge dump (EXE/BLL header)
+# From: "Stefan A. Haubenthal" <polluks@web.de>
+
+0 beshort 0x8008 Lynx cartridge,
+>2 beshort x RAM start $%04x
+>6 string BS93
+
+#------------------------------------------------------------------------------
+# Z-machine: file(1) magic for Z-machine binaries.
+#
+# This will match ${TEX_BASE}/texmf/omega/ocp/char2uni/inbig5.ocp which
+# appears to be a version-0 Z-machine binary.
+#
+# The (false match) message is to correct that behavior. Perhaps it is
+# not needed.
+#
+>16 belong&0xfe00f0f0 0x3030 Infocom game data
+>0 ubyte 0 (false match)
+>0 ubyte >0 (Z-machine %d,
+>>2 ubeshort x Release %d /
+>>18 string >\0 Serial %.6s)
+
+#------------------------------------------------------------------------------
+# Glulx: file(1) magic for Glulx binaries.
+#
+# I haven't checked for false matches yet.
+#
+0 string Glul Glulx game data
+
+
+
+# These go at the end of the iff rules
+#
+# I don't see why these might collide with anything else.
+#
+# Interactive Fiction related formats
+#
+>8 string IFRS \b, Blorb Interactive Fiction
+>>24 string Exec with executable chunk
+>8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal)
+
+#------------------------------------------------------------------------------
+# DEC SRC Virtual Paper: Lectern files
+# Karl M. Hegbloom <karlheg@inetarena.com>
+0 string lect DEC SRC Virtual Paper Lectern file
+
+#------------------------------------------------------------------------------
+# visx: file(1) magic for Visx format files
+#
+0 short 0x5555 VISX image file
+>2 byte 0 (zero)
+>2 byte 1 (unsigned char)
+>2 byte 2 (short integer)
+>2 byte 3 (float 32)
+>2 byte 4 (float 64)
+>2 byte 5 (signed char)
+>2 byte 6 (bit-plane)
+>2 byte 7 (classes)
+>2 byte 8 (statistics)
+>2 byte 10 (ascii text)
+>2 byte 15 (image segments)
+>2 byte 100 (image set)
+>2 byte 101 (unsigned char vector)
+>2 byte 102 (short integer vector)
+>2 byte 103 (float 32 vector)
+>2 byte 104 (float 64 vector)
+>2 byte 105 (signed char vector)
+>2 byte 106 (bit plane vector)
+>2 byte 121 (feature vector)
+>2 byte 122 (feature vector library)
+>2 byte 124 (chain code)
+>2 byte 126 (bit vector)
+>2 byte 130 (graph)
+>2 byte 131 (adjacency graph)
+>2 byte 132 (adjacency graph library)
+>2 string .VISIX (ascii text)
+#------------------------------------------------------------------------------
+# varied.script: file(1) magic for various interpreter scripts
+
+0 string #!\ / a
+>3 string >\0 %s script text executable
+0 string #!\ / a
+>3 string >\0 %s script text executable
+0 string #!/ a
+>2 string >\0 %s script text executable
+0 string #!\ script text executable
+>3 string >\0 for %s
+
+# ------------------------------------------------------------------------
+# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.
+#
+# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us).
+#
+# Update: Romain Lievin (roms@lpg.ticalc.org).
+#
+# NOTE: This list is not complete.
+# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the
+# program/group magic numbers in here because I cannot find any.
+0 string **TI80** TI-80 Graphing Calculator File.
+0 string **TI81** TI-81 Graphing Calculator File.
+#
+# Magic Numbers for the TI-73
+#
+0 string **TI73** TI-73 Graphing Calculator
+>0x00003B byte 0x00 (real number)
+>0x00003B byte 0x01 (list)
+>0x00003B byte 0x02 (matrix)
+>0x00003B byte 0x03 (equation)
+>0x00003B byte 0x04 (string)
+>0x00003B byte 0x05 (program)
+>0x00003B byte 0x06 (assembly program)
+>0x00003B byte 0x07 (picture)
+>0x00003B byte 0x08 (gdb)
+>0x00003B byte 0x0C (complex number)
+>0x00003B byte 0x0F (window settings)
+>0x00003B byte 0x10 (zoom)
+>0x00003B byte 0x11 (table setup)
+>0x00003B byte 0x13 (backup)
+
+# Magic Numbers for the TI-82
+#
+0 string **TI82** TI-82 Graphing Calculator
+>0x00003B byte 0x00 (real)
+>0x00003B byte 0x01 (list)
+>0x00003B byte 0x02 (matrix)
+>0x00003B byte 0x03 (Y-variable)
+>0x00003B byte 0x05 (program)
+>0x00003B byte 0x06 (protected prgm)
+>0x00003B byte 0x07 (picture)
+>0x00003B byte 0x08 (gdb)
+>0x00003B byte 0x0B (window settings)
+>0x00003B byte 0x0C (window settings)
+>0x00003B byte 0x0D (table setup)
+>0x00003B byte 0x0E (screenshot)
+>0x00003B byte 0x0F (backup)
+#
+# Magic Numbers for the TI-83
+#
+0 string **TI83** TI-83 Graphing Calculator
+>0x00003B byte 0x00 (real)
+>0x00003B byte 0x01 (list)
+>0x00003B byte 0x02 (matrix)
+>0x00003B byte 0x03 (Y-variable)
+>0x00003B byte 0x04 (string)
+>0x00003B byte 0x05 (program)
+>0x00003B byte 0x06 (protected prgm)
+>0x00003B byte 0x07 (picture)
+>0x00003B byte 0x08 (gdb)
+>0x00003B byte 0x0B (window settings)
+>0x00003B byte 0x0C (window settings)
+>0x00003B byte 0x0D (table setup)
+>0x00003B byte 0x0E (screenshot)
+>0x00003B byte 0x13 (backup)
+#
+# Magic Numbers for the TI-83+
+#
+0 string **TI83F* TI-83+ Graphing Calculator
+>0x00003B byte 0x00 (real number)
+>0x00003B byte 0x01 (list)
+>0x00003B byte 0x02 (matrix)
+>0x00003B byte 0x03 (equation)
+>0x00003B byte 0x04 (string)
+>0x00003B byte 0x05 (program)
+>0x00003B byte 0x06 (assembly program)
+>0x00003B byte 0x07 (picture)
+>0x00003B byte 0x08 (gdb)
+>0x00003B byte 0x0C (complex number)
+>0x00003B byte 0x0F (window settings)
+>0x00003B byte 0x10 (zoom)
+>0x00003B byte 0x11 (table setup)
+>0x00003B byte 0x13 (backup)
+>0x00003B byte 0x15 (application variable)
+>0x00003B byte 0x17 (group of variable)
+
+#
+# Magic Numbers for the TI-85
+#
+0 string **TI85** TI-85 Graphing Calculator
+>0x00003B byte 0x00 (real number)
+>0x00003B byte 0x01 (complex number)
+>0x00003B byte 0x02 (real vector)
+>0x00003B byte 0x03 (complex vector)
+>0x00003B byte 0x04 (real list)
+>0x00003B byte 0x05 (complex list)
+>0x00003B byte 0x06 (real matrix)
+>0x00003B byte 0x07 (complex matrix)
+>0x00003B byte 0x08 (real constant)
+>0x00003B byte 0x09 (complex constant)
+>0x00003B byte 0x0A (equation)
+>0x00003B byte 0x0C (string)
+>0x00003B byte 0x0D (function GDB)
+>0x00003B byte 0x0E (polar GDB)
+>0x00003B byte 0x0F (parametric GDB)
+>0x00003B byte 0x10 (diffeq GDB)
+>0x00003B byte 0x11 (picture)
+>0x00003B byte 0x12 (program)
+>0x00003B byte 0x13 (range)
+>0x00003B byte 0x17 (window settings)
+>0x00003B byte 0x18 (window settings)
+>0x00003B byte 0x19 (window settings)
+>0x00003B byte 0x1A (window settings)
+>0x00003B byte 0x1B (zoom)
+>0x00003B byte 0x1D (backup)
+>0x00003B byte 0x1E (unknown)
+>0x00003B byte 0x2A (equation)
+>0x000032 string ZS4 - ZShell Version 4 File.
+>0x000032 string ZS3 - ZShell Version 3 File.
+#
+# Magic Numbers for the TI-86
+#
+0 string **TI86** TI-86 Graphing Calculator
+>0x00003B byte 0x00 (real number)
+>0x00003B byte 0x01 (complex number)
+>0x00003B byte 0x02 (real vector)
+>0x00003B byte 0x03 (complex vector)
+>0x00003B byte 0x04 (real list)
+>0x00003B byte 0x05 (complex list)
+>0x00003B byte 0x06 (real matrix)
+>0x00003B byte 0x07 (complex matrix)
+>0x00003B byte 0x08 (real constant)
+>0x00003B byte 0x09 (complex constant)
+>0x00003B byte 0x0A (equation)
+>0x00003B byte 0x0C (string)
+>0x00003B byte 0x0D (function GDB)
+>0x00003B byte 0x0E (polar GDB)
+>0x00003B byte 0x0F (parametric GDB)
+>0x00003B byte 0x10 (diffeq GDB)
+>0x00003B byte 0x11 (picture)
+>0x00003B byte 0x12 (program)
+>0x00003B byte 0x13 (range)
+>0x00003B byte 0x17 (window settings)
+>0x00003B byte 0x18 (window settings)
+>0x00003B byte 0x19 (window settings)
+>0x00003B byte 0x1A (window settings)
+>0x00003B byte 0x1B (zoom)
+>0x00003B byte 0x1D (backup)
+>0x00003B byte 0x1E (unknown)
+>0x00003B byte 0x2A (equation)
+#
+# Magic Numbers for the TI-89
+#
+0 string **TI89** TI-89 Graphing Calculator
+>0x000048 byte 0x00 (expression)
+>0x000048 byte 0x04 (list)
+>0x000048 byte 0x06 (matrix)
+>0x000048 byte 0x0A (data)
+>0x000048 byte 0x0B (text)
+>0x000048 byte 0x0C (string)
+>0x000048 byte 0x0D (graphic data base)
+>0x000048 byte 0x0E (figure)
+>0x000048 byte 0x10 (picture)
+>0x000048 byte 0x12 (program)
+>0x000048 byte 0x13 (function)
+>0x000048 byte 0x14 (macro)
+>0x000048 byte 0x1C (zipped)
+>0x000048 byte 0x21 (assembler)
+#
+# Magic Numbers for the TI-92
+#
+0 string **TI92** TI-92 Graphing Calculator
+>0x000048 byte 0x00 (expression)
+>0x000048 byte 0x04 (list)
+>0x000048 byte 0x06 (matrix)
+>0x000048 byte 0x0A (data)
+>0x000048 byte 0x0B (text)
+>0x000048 byte 0x0C (string)
+>0x000048 byte 0x0D (graphic data base)
+>0x000048 byte 0x0E (figure)
+>0x000048 byte 0x10 (picture)
+>0x000048 byte 0x12 (program)
+>0x000048 byte 0x13 (function)
+>0x000048 byte 0x14 (macro)
+>0x000048 byte 0x1D (backup)
+#
+# Magic Numbers for the TI-92+/V200
+#
+0 string **TI92P* TI-92+/V200 Graphing Calculator
+>0x000048 byte 0x00 (expression)
+>0x000048 byte 0x04 (list)
+>0x000048 byte 0x06 (matrix)
+>0x000048 byte 0x0A (data)
+>0x000048 byte 0x0B (text)
+>0x000048 byte 0x0C (string)
+>0x000048 byte 0x0D (graphic data base)
+>0x000048 byte 0x0E (figure)
+>0x000048 byte 0x10 (picture)
+>0x000048 byte 0x12 (program)
+>0x000048 byte 0x13 (function)
+>0x000048 byte 0x14 (macro)
+>0x000048 byte 0x1C (zipped)
+>0x000048 byte 0x21 (assembler)
+#
+# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades
+#
+0x0000016 string Advanced TI-XX Graphing Calculator (FLASH)
+0 string **TIFL** TI-XX Graphing Calculator (FLASH)
+>8 byte >0 - Revision %d
+>>9 byte x \b.%d,
+>12 byte >0 Revision date %02x
+>>13 byte x \b/%02x
+>>14 beshort x \b/%04x,
+>17 string >/0 name: '%s',
+>48 byte 0x74 device: TI-73,
+>48 byte 0x73 device: TI-83+,
+>48 byte 0x98 device: TI-89,
+>48 byte 0x88 device: TI-92+,
+>49 byte 0x23 type: OS upgrade,
+>49 byte 0x24 type: application,
+>49 byte 0x25 type: certificate,
+>49 byte 0x3e type: license,
+>74 lelong >0 size: %ld bytes
+
+# VTi & TiEmu skins (TI Graphing Calculators).
+# From: Romain Lievin (roms@lpg.ticalc.org).
+# Magic Numbers for the VTi skins
+0 string VTI Virtual TI skin
+>3 string v - Version
+>>4 byte >0 \b %c
+>>6 byte x \b.%c
+# Magic Numbers for the TiEmu skins
+0 string TiEmu TiEmu skin
+>6 string v - Version
+>>7 byte >0 \b %c
+>>9 byte x \b.%c
+>>10 byte x \b%c
+
+#------------------------------------------------------------------------------
+# c-lang: file(1) magic for C programs (or REXX)
+#
+
+# XPM icons (Greg Roelofs, newt@uchicago.edu)
+# if you uncomment "/*" for C/REXX below, also uncomment this entry
+#0 string /*\ XPM\ */ X pixmap image data
+
+# this first will upset you if you're a PL/1 shop...
+# in which case rm it; ascmagic will catch real C programs
+#0 string /* C or REXX program text
+#0 string // C++ program text
+
+# From: Mikhail Teterin <mi@aldan.algebra.com>
+0 string cscope cscope reference data
+>7 string x version %.2s
+# We skip the path here, because it is often long (so file will
+# truncate it) and mostly redundant.
+# The inverted index functionality was added some time betwen
+# versions 11 and 15, so look for -q if version is above 14:
+>7 string >14
+>>10 regex .+\ -q\ with inverted index
+>10 regex .+\ -c\ text (non-compressed)
+# Digital UNIX - Info
+#
+0 string !<arch>\n________64E Alpha archive
+>22 string X -- out of date
+#
+# Alpha COFF Based Executables
+# The stripped stuff really needs to be an 8 byte (64 bit) compare,
+# but this works
+0 leshort 0x183 COFF format alpha
+>22 leshort&020000 &010000 sharable library,
+>22 leshort&020000 ^010000 dynamically linked,
+>24 leshort 0410 pure
+>24 leshort 0413 demand paged
+>8 lelong >0 executable or object module, not stripped
+>8 lelong 0
+>>12 lelong 0 executable or object module, stripped
+>>12 lelong >0 executable or object module, not stripped
+>27 byte >0 - version %d.
+>26 byte >0 %d-
+>28 leshort >0 %d
+#
+# The next is incomplete, we could tell more about this format,
+# but its not worth it.
+0 leshort 0x188 Alpha compressed COFF
+0 leshort 0x18f Alpha u-code object
+#
+#
+# Some other interesting Digital formats,
+0 string \377\377\177 ddis/ddif
+0 string \377\377\174 ddis/dots archive
+0 string \377\377\176 ddis/dtif table data
+0 string \033c\033 LN03 output
+0 long 04553207 X image
+#
+0 string !<PDF>!\n profiling data file
+#
+# Locale data tables (MIPS and Alpha).
+#
+0 short 0x0501 locale data table
+>6 short 0x24 for MIPS
+>6 short 0x40 for Alpha
+# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at>
+# from http://www.atsc.org/standards/a_52a.pdf
+# corrections, additions, etc. are always welcome!
+#
+# syncword
+0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream,
+# fscod
+>4 byte&0xc0 0x00 48 kHz,
+>4 byte&0xc0 0x40 44.1 kHz,
+>4 byte&0xc0 0x80 32 kHz,
+# is this one used for 96 kHz?
+>4 byte&0xc0 0xc0 reserved frequency,
+#
+>5 byte&7 = 0 \b, complete main (CM)
+>5 byte&7 = 1 \b, music and effects (ME)
+>5 byte&7 = 2 \b, visually impaired (VI)
+>5 byte&7 = 3 \b, hearing impaired (HI)
+>5 byte&7 = 4 \b, dialogue (D)
+>5 byte&7 = 5 \b, commentary (C)
+>5 byte&7 = 6 \b, emergency (E)
+# acmod
+>6 byte&0xe0 0x00 1+1 front,
+>6 byte&0xe0 0x20 1 front/0 rear,
+>6 byte&0xe0 0x40 2 front/0 rear,
+>6 byte&0xe0 0x60 3 front/0 rear,
+>6 byte&0xe0 0x80 2 front/1 rear,
+>6 byte&0xe0 0xa0 3 front/1 rear,
+>6 byte&0xe0 0xc0 2 front/2 rear,
+>6 byte&0xe0 0xe0 3 front/2 rear,
+# lfeon (these may be incorrect)
+>7 byte&0x40 0x00 LFE off,
+>7 byte&0x40 0x40 LFE on,
+#
+>4 byte&0x3e = 0x00 \b, 32 kbit/s
+>4 byte&0x3e = 0x02 \b, 40 kbit/s
+>4 byte&0x3e = 0x04 \b, 48 kbit/s
+>4 byte&0x3e = 0x06 \b, 56 kbit/s
+>4 byte&0x3e = 0x08 \b, 64 kbit/s
+>4 byte&0x3e = 0x0a \b, 80 kbit/s
+>4 byte&0x3e = 0x0c \b, 96 kbit/s
+>4 byte&0x3e = 0x0e \b, 112 kbit/s
+>4 byte&0x3e = 0x10 \b, 128 kbit/s
+>4 byte&0x3e = 0x12 \b, 160 kbit/s
+>4 byte&0x3e = 0x14 \b, 192 kbit/s
+>4 byte&0x3e = 0x16 \b, 224 kbit/s
+>4 byte&0x3e = 0x18 \b, 256 kbit/s
+>4 byte&0x3e = 0x1a \b, 320 kbit/s
+>4 byte&0x3e = 0x1c \b, 384 kbit/s
+>4 byte&0x3e = 0x1e \b, 448 kbit/s
+>4 byte&0x3e = 0x20 \b, 512 kbit/s
+>4 byte&0x3e = 0x22 \b, 576 kbit/s
+>4 byte&0x3e = 0x24 \b, 640 kbit/s
+# dsurmod (these may be incorrect)
+>6 beshort&0x0180 0x0000 Dolby Surround not indicated
+>6 beshort&0x0180 0x0080 not Dolby Surround encoded
+>6 beshort&0x0180 0x0100 Dolby Surround encoded
+>6 beshort&0x0180 0x0180 reserved Dolby Surround mode
+
+#------------------------------------------------------------------------------
+# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
+#
+# ACE/gr binary
+0 string \000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003 old ACE/gr binary file
+>39 byte >0 - version %c
+# ACE/gr ascii
+0 string #\ xvgr\ parameter\ file ACE/gr ascii file
+0 string #\ xmgr\ parameter\ file ACE/gr ascii file
+0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file
+# Grace projects
+0 string #\ Grace\ project\ file Grace project file
+>23 string @version\ (version
+>>32 byte >0 %c
+>>33 string >\0 \b.%.2s
+>>35 string >\0 \b.%.2s)
+# ACE/gr fit description files
+0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file
+# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
+
+#------------------------------------------------------------------------------
+# ibm370: file(1) magic for IBM 370 and compatibles.
+#
+# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
+# What the heck *is* "USS/370"?
+# AIX 4.1's "/etc/magic" has
+#
+# 0 short 0535 370 sysV executable
+# >12 long >0 not stripped
+# >22 short >0 - version %d
+# >30 long >0 - 5.2 format
+# 0 short 0530 370 sysV pure executable
+# >12 long >0 not stripped
+# >22 short >0 - version %d
+# >30 long >0 - 5.2 format
+#
+# instead of the "USS/370" versions of the same magic numbers.
+#
+0 beshort 0537 370 XA sysV executable
+>12 belong >0 not stripped
+>22 beshort >0 - version %d
+>30 belong >0 - 5.2 format
+0 beshort 0532 370 XA sysV pure executable
+>12 belong >0 not stripped
+>22 beshort >0 - version %d
+>30 belong >0 - 5.2 format
+0 beshort 054001 370 sysV pure executable
+>12 belong >0 not stripped
+0 beshort 055001 370 XA sysV pure executable
+>12 belong >0 not stripped
+0 beshort 056401 370 sysV executable
+>12 belong >0 not stripped
+0 beshort 057401 370 XA sysV executable
+>12 belong >0 not stripped
+0 beshort 0531 SVR2 executable (Amdahl-UTS)
+>12 belong >0 not stripped
+>24 belong >0 - version %ld
+0 beshort 0534 SVR2 pure executable (Amdahl-UTS)
+>12 belong >0 not stripped
+>24 belong >0 - version %ld
+0 beshort 0530 SVR2 pure executable (USS/370)
+>12 belong >0 not stripped
+>24 belong >0 - version %ld
+0 beshort 0535 SVR2 executable (USS/370)
+>12 belong >0 not stripped
+>24 belong >0 - version %ld
+
+#------------------------------------------------------------------------------
+# images: file(1) magic for image formats (see also "iff")
+#
+# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
+# additions by janl@ifi.uio.no as well as others. Jan also suggested
+# merging several one- and two-line files into here.
+#
+# little magic: PCX (first byte is 0x0a)
+
+# Targa - matches `povray', `ppmtotga' and `xv' outputs
+# by Philippe De Muyter <phdm@macqel.be>
+# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
+# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
+# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
+# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
+# `tgatoppm' recognizes a superset (Index may be anything)
+1 belong&0xfff7ffff 0x01010000 Targa image data - Map
+>2 byte&8 8 - RLE
+>12 leshort >0 %hd x
+>14 leshort >0 %hd
+1 belong&0xfff7ffff 0x00020000 Targa image data - RGB
+>2 byte&8 8 - RLE
+>12 leshort >0 %hd x
+>14 leshort >0 %hd
+1 belong&0xfff7ffff 0x00030000 Targa image data - Mono
+>2 byte&8 8 - RLE
+>12 leshort >0 %hd x
+>14 leshort >0 %hd
+
+# PBMPLUS images
+# The next byte following the magic is always whitespace.
+0 string P1 Netpbm PBM image text
+0 string P2 Netpbm PGM image text
+0 string P3 Netpbm PPM image text
+0 string P4 Netpbm PBM "rawbits" image data
+0 string P5 Netpbm PGM "rawbits" image data
+0 string P6 Netpbm PPM "rawbits" image data
+0 string P7 Netpbm PAM image file
+
+# From: bryanh@giraffe-data.com (Bryan Henderson)
+0 string \117\072 Solitaire Image Recorder format
+>4 string \013 MGI Type 11
+>4 string \021 MGI Type 17
+0 string .MDA MicroDesign data
+>21 byte 48 version 2
+>21 byte 51 version 3
+0 string .MDP MicroDesign page data
+>21 byte 48 version 2
+>21 byte 51 version 3
+
+# NIFF (Navy Interchange File Format, a modification of TIFF) images
+0 string IIN1 NIFF image data
+
+# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
+# The second word of TIFF files is the TIFF version number, 42, which has
+# never changed. The TIFF specification recommends testing for it.
+0 string MM\x00\x2a TIFF image data, big-endian
+0 string II\x2a\x00 TIFF image data, little-endian
+
+# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
+# (Greg Roelofs, newt@uchicago.edu)
+# (Albert Cahalan, acahalan@cs.uml.edu)
+#
+# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
+#
+0 string \x89PNG PNG image data,
+>4 belong !0x0d0a1a0a CORRUPTED,
+>4 belong 0x0d0a1a0a
+>>16 belong x %ld x
+>>20 belong x %ld,
+>>24 byte x %d-bit
+>>25 byte 0 grayscale,
+>>25 byte 2 \b/color RGB,
+>>25 byte 3 colormap,
+>>25 byte 4 gray+alpha,
+>>25 byte 6 \b/color RGBA,
+#>>26 byte 0 deflate/32K,
+>>28 byte 0 non-interlaced
+>>28 byte 1 interlaced
+1 string PNG PNG image data, CORRUPTED
+
+# GIF
+0 string GIF8 GIF image data
+>4 string 7a \b, version 8%s,
+>4 string 9a \b, version 8%s,
+>6 leshort >0 %hd x
+>8 leshort >0 %hd
+#>10 byte &0x80 color mapped,
+#>10 byte&0x07 =0x00 2 colors
+#>10 byte&0x07 =0x01 4 colors
+#>10 byte&0x07 =0x02 8 colors
+#>10 byte&0x07 =0x03 16 colors
+#>10 byte&0x07 =0x04 32 colors
+#>10 byte&0x07 =0x05 64 colors
+#>10 byte&0x07 =0x06 128 colors
+#>10 byte&0x07 =0x07 256 colors
+
+# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster,
+# 1 plane, no encoding.
+0 string \361\0\100\273 CMU window manager raster image data
+>4 lelong >0 %d x
+>8 lelong >0 %d,
+>12 lelong >0 %d-bit
+
+# Magick Image File Format
+0 string id=ImageMagick MIFF image data
+
+# Artisan
+0 long 1123028772 Artisan image data
+>4 long 1 \b, rectangular 24-bit
+>4 long 2 \b, rectangular 8-bit with colormap
+>4 long 3 \b, rectangular 32-bit (24-bit with matte)
+
+# FIG (Facility for Interactive Generation of figures), an object-based format
+0 string #FIG FIG image text
+>5 string x \b, version %.3s
+
+# PHIGS
+0 string ARF_BEGARF PHIGS clear text archive
+0 string @(#)SunPHIGS SunPHIGS
+# version number follows, in the form m.n
+>40 string SunBin binary
+>32 string archive archive
+
+# GKS (Graphics Kernel System)
+0 string GKSM GKS Metafile
+>24 string SunGKS \b, SunGKS
+
+# CGM image files
+0 string BEGMF clear text Computer Graphics Metafile
+# XXX - questionable magic
+0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile
+0 beshort 0x3020 character Computer Graphics Metafile
+
+# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
+0 string yz MGR bitmap, modern format, 8-bit aligned
+0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned
+0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned
+0 string yx MGR bitmap, modern format, squeezed
+
+# Fuzzy Bitmap (FBM) images
+0 string %bitmap\0 FBM image data
+>30 long 0x31 \b, mono
+>30 long 0x33 \b, color
+
+# facsimile data
+1 string PC\ Research,\ Inc group 3 fax data
+>29 byte 0 \b, normal resolution (204x98 DPI)
+>29 byte 1 \b, fine resolution (204x196 DPI)
+# From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at>
+0 string Sfff structured fax file
+
+
+# PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu)
+0 string BM PC bitmap data
+>14 leshort 12 \b, OS/2 1.x format
+>>18 leshort x \b, %d x
+>>20 leshort x %d
+>14 leshort 64 \b, OS/2 2.x format
+>>18 leshort x \b, %d x
+>>20 leshort x %d
+>14 leshort 40 \b, Windows 3.x format
+>>18 lelong x \b, %d x
+>>22 lelong x %d x
+>>28 leshort x %d
+# Too simple - MPi
+#0 string IC PC icon data
+#0 string PI PC pointer image data
+#0 string CI PC color icon data
+#0 string CP PC color pointer image data
+# Conflicts with other entries [BABYL]
+#0 string BA PC bitmap array data
+
+# XPM icons (Greg Roelofs, newt@uchicago.edu)
+# note possible collision with C/REXX entry in c-lang; currently commented out
+0 string /*\ XPM\ */ X pixmap image text
+
+# Utah Raster Toolkit RLE images (janl@ifi.uio.no)
+0 leshort 0xcc52 RLE image data,
+>6 leshort x %d x
+>8 leshort x %d
+>2 leshort >0 \b, lower left corner: %d
+>4 leshort >0 \b, lower right corner: %d
+>10 byte&0x1 =0x1 \b, clear first
+>10 byte&0x2 =0x2 \b, no background
+>10 byte&0x4 =0x4 \b, alpha channel
+>10 byte&0x8 =0x8 \b, comment
+>11 byte >0 \b, %d color channels
+>12 byte >0 \b, %d bits per pixel
+>13 byte >0 \b, %d color map channels
+
+# image file format (Robert Potter, potter@cs.rochester.edu)
+0 string Imagefile\ version- iff image data
+# this adds the whole header (inc. version number), informative but longish
+>10 string >\0 %s
+
+# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 belong 0x59a66a95 Sun raster image data
+>4 belong >0 \b, %d x
+>8 belong >0 %d,
+>12 belong >0 %d-bit,
+#>16 belong >0 %d bytes long,
+>20 belong 0 old format,
+#>20 belong 1 standard,
+>20 belong 2 compressed,
+>20 belong 3 RGB,
+>20 belong 4 TIFF,
+>20 belong 5 IFF,
+>20 belong 0xffff reserved for testing,
+>24 belong 0 no colormap
+>24 belong 1 RGB colormap
+>24 belong 2 raw colormap
+#>28 belong >0 colormap is %d bytes long
+
+# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)
+#
+# See
+# http://reality.sgi.com/grafica/sgiimage.html
+#
+0 beshort 474 SGI image data
+#>2 byte 0 \b, verbatim
+>2 byte 1 \b, RLE
+#>3 byte 1 \b, normal precision
+>3 byte 2 \b, high precision
+>4 beshort x \b, %d-D
+>6 beshort x \b, %d x
+>8 beshort x %d
+>10 beshort x \b, %d channel
+>10 beshort !1 \bs
+>80 string >0 \b, "%s"
+
+0 string IT01 FIT image data
+>4 belong x \b, %d x
+>8 belong x %d x
+>12 belong x %d
+#
+0 string IT02 FIT image data
+>4 belong x \b, %d x
+>8 belong x %d x
+>12 belong x %d
+#
+2048 string PCD_IPI Kodak Photo CD image pack file
+>0xe02 byte&0x03 0x00 , landscape mode
+>0xe02 byte&0x03 0x01 , portrait mode
+>0xe02 byte&0x03 0x02 , landscape mode
+>0xe02 byte&0x03 0x03 , portrait mode
+0 string PCD_OPA Kodak Photo CD overview pack file
+
+# FITS format. Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>
+# FITS is the Flexible Image Transport System, the de facto standard for
+# data and image transfer, storage, etc., for the astronomical community.
+# (FITS floating point formats are big-endian.)
+0 string SIMPLE\ \ = FITS image data
+>109 string 8 \b, 8-bit, character or unsigned binary integer
+>108 string 16 \b, 16-bit, two's complement binary integer
+>107 string \ 32 \b, 32-bit, two's complement binary integer
+>107 string -32 \b, 32-bit, floating point, single precision
+>107 string -64 \b, 64-bit, floating point, double precision
+
+# other images
+0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file
+0 string !! Bennet Yee's "face" format
+
+# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
+# stuff.
+#
+0 beshort 0x1010 PEX Binary Archive
+
+# Visio drawings
+03000 string Visio\ (TM)\ Drawing %s
+
+# Tgif files
+0 string \%TGIF\ x Tgif file version %s
+
+# DICOM medical imaging data
+128 string DICM DICOM medical imaging data
+
+# XWD - X Window Dump file.
+# As described in /usr/X11R6/include/X11/XWDFile.h
+# used by the xwd program.
+# Bradford Castalia, idaeim, 1/01
+4 belong 7 XWD X Window Dump image data
+>100 string >\0 \b, "%s"
+>16 belong x \b, %dx
+>20 belong x \b%dx
+>12 belong x \b%d
+
+# PDS - Planetary Data System
+# These files use Parameter Value Language in the header section.
+# Unfortunately, there is no certain magic, but the following
+# strings have been found to be most likely.
+0 string NJPL1I00 PDS (JPL) image data
+2 string NJPL1I PDS (JPL) image data
+0 string CCSD3ZF PDS (CCSD) image data
+2 string CCSD3Z PDS (CCSD) image data
+0 string PDS_ PDS image data
+0 string LBLSIZE= PDS (VICAR) image data
+
+# pM8x: ATARI STAD compressed bitmap format
+#
+# from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001
+# p M 8 5/6 xx yy zz data...
+# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.
+# bytes either run horizontally (pM85) or vertically (pM86). yy is the
+# most frequent byte, xx and zz are runlength escape codes, where xx is
+# used for runs of yy.
+#
+0 string pM85 Atari ST STAD bitmap image data (hor)
+>5 byte 0x00 (white background)
+>5 byte 0xFF (black background)
+0 string pM86 Atari ST STAD bitmap image data (vert)
+>5 byte 0x00 (white background)
+>5 byte 0xFF (black background)
+
+# XXX:
+# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
+# magic.
+# SGI RICE image file <mpruett@sgi.com>
+#0 beshort 0x5249 RICE image
+#>2 beshort x v%d
+#>4 beshort x (%d x
+#>6 beshort x %d)
+#>8 beshort 0 8 bit
+#>8 beshort 1 10 bit
+#>8 beshort 2 12 bit
+#>8 beshort 3 13 bit
+#>10 beshort 0 4:2:2
+#>10 beshort 1 4:2:2:4
+#>10 beshort 2 4:4:4
+#>10 beshort 3 4:4:4:4
+#>12 beshort 1 RGB
+#>12 beshort 2 CCIR601
+#>12 beshort 3 RP175
+#>12 beshort 4 YUV
+
+#------------------------------------------------------------------------------
+#
+# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format
+# for the EPOC operating system, which is used with PDAs like those from Psion
+#
+# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description
+# of various EPOC file formats
+
+0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file
+
+# PCX image files
+# From: Dan Fandrich <dan@coneharvesters.com>
+0 beshort 0x0a00 PCX ver. 2.5 image data
+0 beshort 0x0a02 PCX ver. 2.8 image data, with palette
+0 beshort 0x0a03 PCX ver. 2.8 image data, without palette
+0 beshort 0x0a04 PCX for Windows image data
+0 beshort 0x0a05 PCX ver. 3.0 image data
+>4 leshort x bounding box [%hd,
+>6 leshort x %hd] -
+>8 leshort x [%hd,
+>10 leshort x %hd],
+>65 byte >1 %d planes each of
+>3 byte x %hhd-bit
+>68 byte 0 image,
+>68 byte 1 colour,
+>68 byte 2 grayscale,
+>68 byte >2 image,
+>68 byte <0 image,
+>12 leshort >0 %hd x
+>>14 leshort x %hd dpi,
+>2 byte 0 uncompressed
+>2 byte 1 RLE compressed
+
+# Adobe Photoshop
+0 string 8BPS Adobe Photoshop Image
+
+# XV thumbnail indicator (ThMO)
+0 string P7\ 332 XV thumbnail image data
+
+# NITF is defined by United States MIL-STD-2500A
+0 string NITF National Imagery Transmission Format
+>25 string >\0 dated %.14s
+
+# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
+0 belong 0x00010008 GEM Image data
+>12 beshort x %d x
+>14 beshort x %d,
+>4 beshort x %d planes,
+>8 beshort x %d x
+>10 beshort x %d pixelsize
+
+# GEM Metafile (Wolfram Kleff)
+0 lelong 0x0018FFFF GEM Metafile data
+>4 leshort x version %d
+
+#
+# SMJPEG. A custom Motion JPEG format used by Loki Entertainment
+# Software Torbjorn Andersson <d91tan@Update.UU.SE>.
+#
+0 string \0\nSMJPEG SMJPEG
+>8 belong x %d.x data
+# According to the specification you could find any number of _TXT
+# headers here, but I can't think of any way of handling that. None of
+# the SMJPEG files I tried it on used this feature. Even if such a
+# file is encountered the output should still be reasonable.
+>16 string _SND \b,
+>>24 beshort >0 %d Hz
+>>26 byte 8 8-bit
+>>26 byte 16 16-bit
+>>28 string NONE uncompressed
+# >>28 string APCM ADPCM compressed
+>>27 byte 1 mono
+>>28 byte 2 stereo
+# Help! Isn't there any way to avoid writing this part twice?
+>>32 string _VID \b,
+# >>>48 string JFIF JPEG
+>>>40 belong >0 %d frames
+>>>44 beshort >0 (%d x
+>>>46 beshort >0 %d)
+>16 string _VID \b,
+# >>32 string JFIF JPEG
+>>24 belong >0 %d frames
+>>28 beshort >0 (%d x
+>>30 beshort >0 %d)
+
+0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File
+
+# "thumbnail file" (icon)
+# descended from "xv", but in use by other applications as well (Wolfram Kleff)
+0 string P7\ 332 XV "thumbnail file" (icon) data
+
+# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)
+0 string KiSS KISS/GS
+>4 byte 16 color
+>>5 byte x %d bit
+>>8 leshort x %d colors
+>>10 leshort x %d groups
+>4 byte 32 cell
+>>5 byte x %d bit
+>>8 leshort x %d x
+>>10 leshort x %d
+>>12 leshort x +%d
+>>14 leshort x +%d
+
+# Webshots (www.webshots.com), by John Harrison
+0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file
+
+# Hercules DASD image files
+# From Jan Jaeger <jj@septa.nl>
+0 string CKD_P370 Hercules CKD DASD image file
+>8 long x \b, %d heads per cylinder
+>12 long x \b, track size %d bytes
+>16 byte x \b, device type 33%2.2X
+
+0 string CKD_C370 Hercules compressed CKD DASD image file
+>8 long x \b, %d heads per cylinder
+>12 long x \b, track size %d bytes
+>16 byte x \b, device type 33%2.2X
+
+0 string CKD_S370 Hercules CKD DASD shadow file
+>8 long x \b, %d heads per cylinder
+>12 long x \b, track size %d bytes
+>16 byte x \b, device type 33%2.2X
+
+# Squeak images and - etoffi@softhome.net
+0 string \146\031\0\0 Squeak image data
+0 string 'From\040Squeak Squeak program text
+
+# partimage: file(1) magic for PartImage files (experimental, incomplete)
+# Author: Hans-Joachim Baader <hjb@pro-linux.de>
+0 string PaRtImAgE-VoLuMe PartImage
+>0x0020 string 0.6.1 file version %s
+>>0x0060 lelong >-1 volume %ld
+#>>0x0064 8 byte identifier
+#>>0x007c reserved
+>>0x0200 string >\0 type %s
+>>0x1400 string >\0 device %s,
+>>0x1600 string >\0 original filename %s,
+# Some fields omitted
+>>0x2744 lelong 0 not compressed
+>>0x2744 lelong 1 gzip compressed
+>>0x2744 lelong 2 bzip2 compressed
+>>0x2744 lelong >2 compressed with unknown algorithm
+>0x0020 string >0.6.1 file version %s
+>0x0020 string <0.6.1 file version %s
+
+# DCX is multi-page PCX, using a simple header of up to 1024
+# offsets for the respective PCX components.
+# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
+0 lelong 987654321 DCX multi-page PCX image data
+
+# Simon Walton <simonw@matteworld.com>
+# Kodak Cineon format for scanned negatives
+# http://www.kodak.com/US/en/motion/support/dlad/
+0 lelong 0xd75f2a80 Cineon image data
+>200 belong >0 \b, %ld x
+>204 belong >0 %ld
+
+
+# Bio-Rad .PIC is an image format used by microscope control systems
+# and related image processing software used by biologists.
+# From: Vebjorn Ljosa <vebjorn@ljosa.com>
+54 leshort 12345 Bio-Rad .PIC Image File
+>0 leshort >0 %hd x
+>2 leshort >0 %hd,
+>4 leshort =1 1 image in file
+>4 leshort >1 %hd images in file
+
+# From Jan "Yenya" Kasprzak <kas@fi.muni.cz>
+# The description of *.mrw format can be found at
+# http://www.dalibor.cz/minolta/raw_file_format.htm
+0 string \000MRM Minolta Dimage camera raw image data
+
+# From: stephane.loeuillet@tiscali.f
+# http://www.djvuzone.org/
+0 string AT&TFORM DjVu Image file
+
+# From: Jason Bacon <bacon@smithers.neuro.mcw.edu>
+0 beshort 0x3020 character Computer Graphics Metafile
+
+
+
+# From: Tom Hilinski <tom.hilinski@comcast.net>
+# http://www.unidata.ucar.edu/packages/netcdf/
+0 string CDF\001 netcdf file
+#
+#------------------------------------------------------------------------------
+# tuxedo: file(1) magic for BEA TUXEDO data files
+#
+# from Ian Springer <ispringer@hotmail.com>
+#
+0 string \0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0 BEA TUXEDO DES mask data
+
+#------------------------------------------------------------------------------
+# timezone: file(1) magic for timezone data
+#
+# from Daniel Quinlan (quinlan@yggdrasil.com)
+# this should work on Linux, SunOS, and maybe others
+# Added new official magic number for recent versions of the Olson code
+0 string TZif timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 old timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 old timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 old timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 old timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 old timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 old timezone data
+
+#------------------------------------------------------------------------------
+# project: file(1) magic for Project management
+#
+# Magic strings for ftnchek project files. Alexander Mai
+0 string FTNCHEK_\ P project file for ftnchek
+>10 string 1 version 2.7
+>10 string 2 version 2.8 to 2.10
+>10 string 3 version 2.11 or later
+#------------------------------------------------------------------------------
+# cisco: file(1) magic for cisco Systems routers
+#
+# Most cisco file-formats are covered by the generic elf code
+#
+# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
+0 belong&0xffffff00 0x85011400 cisco IOS microcode
+>7 string >\0 for '%s'
+0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode
+>7 string >\0 for '%s'
+#------------------------------------------------------------------------------
+# mach file description
+#
+0 belong 0xcafebabe Mach-O fat file
+>4 belong 1 with 1 architecture
+>4 belong >1
+>>4 belong x with %ld architectures
+#
+0 belong 0xfeedface Mach-O
+>12 belong 1 object
+>12 belong 2 executable
+>12 belong 3 shared library
+>12 belong 4 core
+>12 belong 5 preload executable
+>12 belong 6 dynamically linked shared library
+>12 belong 7 dynamic linker
+>12 belong 8 bundle
+>12 belong >8
+>>12 belong x filetype=%ld
+>4 belong <0
+>>4 belong x architecture=%ld
+>4 belong 1 vax
+>4 belong 2 romp
+>4 belong 3 architecture=3
+>4 belong 4 ns32032
+>4 belong 5 ns32332
+>4 belong 6 for m68k architecture
+# from NeXTstep 3.0 <mach/machine.h>
+# i.e. mc680x0_all, ignore
+# >>8 belong 1 (mc68030)
+>>8 belong 2 (mc68040)
+>>8 belong 3 (mc68030 only)
+>4 belong 7 i386
+>4 belong 8 mips
+>4 belong 9 ns32532
+>4 belong 10 architecture=10
+>4 belong 11 hp pa-risc
+>4 belong 12 acorn
+>4 belong 13 m88k
+>4 belong 14 sparc
+>4 belong 15 i860-big
+>4 belong 16 i860
+>4 belong 17 rs6000
+>4 belong 18 ppc
+>4 belong >18
+>>4 belong x architecture=%ld
+
+#------------------------------------------------------------------------------
+# mkid: file(1) magic for mkid(1) databases
+#
+# ID is the binary tags database produced by mkid(1).
+#
+# XXX - byte order?
+#
+0 string \311\304 ID tags data
+>2 short >0 version %d
+
+#------------------------------------------------------------------------------
+# pgp: file(1) magic for Pretty Good Privacy
+#
+0 beshort 0x9900 PGP key public ring
+0 beshort 0x9501 PGP key security ring
+0 beshort 0x9500 PGP key security ring
+0 beshort 0xa600 PGP encrypted data
+0 string -----BEGIN\040PGP PGP armored data
+>15 string PUBLIC\040KEY\040BLOCK- public key block
+>15 string MESSAGE- message
+>15 string SIGNED\040MESSAGE- signed message
+>15 string PGP\040SIGNATURE- signature
+
+#------------------------------------------------------------------------------
+# terminfo: file(1) magic for terminfo
+#
+# XXX - byte order for screen images?
+#
+0 string \032\001 Compiled terminfo entry
+0 short 0433 Curses screen image
+0 short 0434 Curses screen image
+
+#------------------------------------------------------------------------------
+# printer: file(1) magic for printer-formatted files
+#
+
+# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)
+0 string %! PostScript document text
+>2 string PS-Adobe- conforming
+>>11 string >\0 at level %.3s
+>>>15 string EPS - type %s
+>>>15 string Query - type %s
+>>>15 string ExitServer - type %s
+# Some PCs have the annoying habit of adding a ^D as a document separator
+0 string \004%! PostScript document text
+>3 string PS-Adobe- conforming
+>>12 string >\0 at level %.3s
+>>>16 string EPS - type %s
+>>>16 string Query - type %s
+>>>16 string ExitServer - type %s
+0 string \033%-12345X%!PS PostScript document
+
+
+# DOS EPS Binary File Header
+# From: Ed Sznyter <ews@Black.Market.NET>
+0 belong 0xC5D0D3C6 DOS EPS Binary File
+>4 long >0 Postscript starts at byte %d
+>>8 long >0 length %d
+>>>12 long >0 Metafile starts at byte %d
+>>>>16 long >0 length %d
+>>>20 long >0 TIFF starts at byte %d
+>>>>24 long >0 length %d
+
+# Adobe's PostScript Printer Description (PPD) files
+# Yves Arrouye <arrouye@marin.fdn.fr>
+#
+0 string *PPD-Adobe: PPD file
+>13 string x \b, ve
+
+# HP Printer Job Language
+0 string \033%-12345X@PJL HP Printer Job Language data
+# HP Printer Job Language
+# The header found on Win95 HP plot files is the "Silliest Thing possible"
+# (TM)
+# Every driver puts the language at some random position, with random case
+# (LANGUAGE and Language)
+# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
+# From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
+#
+0 string \033%-12345X@PJL HP Printer Job Language data
+>&0 string >\0 %s
+>>&0 string >\0 %s
+>>>&0 string >\0 %s
+>>>>&0 string >\0 %s
+#>15 string \ ENTER\ LANGUAGE\ =
+#>31 string PostScript PostScript
+
+# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \033E\033 HP PCL printer data
+>3 string \&l0A - default page size
+>3 string \&l1A - US executive page size
+>3 string \&l2A - US letter page size
+>3 string \&l3A - US legal page size
+>3 string \&l26A - A4 page size
+>3 string \&l80A - Monarch envelope size
+>3 string \&l81A - No. 10 envelope size
+>3 string \&l90A - Intl. DL envelope size
+>3 string \&l91A - Intl. C5 envelope size
+>3 string \&l100A - Intl. B5 envelope size
+>3 string \&l-81A - No. 10 envelope size (landscape)
+>3 string \&l-90A - Intl. DL envelope size (landscape)
+
+# IMAGEN printer-ready files:
+0 string @document( Imagen printer
+# this only works if "language xxx" is first item in Imagen header.
+>10 string language\ impress (imPRESS data)
+>10 string language\ daisy (daisywheel text)
+>10 string language\ diablo (daisywheel text)
+>10 string language\ printer (line printer emulation)
+>10 string language\ tektronix (Tektronix 4014 emulation)
+# Add any other languages that your Imagen uses - remember
+# to keep the word `text' if the file is human-readable.
+# [GRR 950115: missing "postscript" or "ultrascript" (whatever it was called)]
+#
+# Now magic for IMAGEN font files...
+0 string Rast RST-format raster font data
+>45 string >0 face %s
+# From Jukka Ukkonen
+0 string \033[K\002\0\0\017\033(a\001\0\001\033(g Canon Bubble Jet BJC formatted data
+
+# From <mike@flyn.org>
+# These are the /etc/magic entries to decode data sent to an Epson printer.
+0 string \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P Epson Stylus Color 460 data
+
+
+#------------------------------------------------------------------------------
+# zenographics: file(1) magic for Zenographics ZjStream printer data
+# Rick Richardson rickr@mn.rr.com
+0 string JZJZ
+>0x12 string ZZ Zenographics ZjStream printer data (big-endian)
+0 string ZJZJ
+>0x12 string ZZ Zenographics ZjStream printer data (little-endian)
+
+
+#------------------------------------------------------------------------------
+# Oak Technologies printer stream
+# Rick Richardson <rickr@mn.rr.com>
+0 string OAK
+>0x07 byte 0
+>0x0b byte 0 Oak Technologies printer stream
+
+# This would otherwise be recognized as PostScript - nick@debian.org
+0 string %!VMF SunClock's Vector Map Format data
+
+#------------------------------------------------------------------------------
+# HP LaserJet 1000 series downloadable firmware file
+0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware
+
+#------------------------------------------------------------------------------
+# apple: file(1) magic for Apple file formats
+#
+0 string FiLeStArTfIlEsTaRt binscii (apple ][) text
+0 string \x0aGL Binary II (apple ][) data
+0 string \x76\xff Squeezed (apple ][) data
+0 string NuFile NuFile archive (apple ][) data
+0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data
+0 belong 0x00051600 AppleSingle encoded Macintosh file
+0 belong 0x00051607 AppleDouble encoded Macintosh file
+
+# magic for Newton PDA package formats
+# from Ruda Moura <ruda@helllabs.org>
+0 string package0 Newton package, NOS 1.x,
+>12 belong &0x80000000 AutoRemove,
+>12 belong &0x40000000 CopyProtect,
+>12 belong &0x10000000 NoCompression,
+>12 belong &0x04000000 Relocation,
+>12 belong &0x02000000 UseFasterCompression,
+>16 belong x version %d
+
+0 string package1 Newton package, NOS 2.x,
+>12 belong &0x80000000 AutoRemove,
+>12 belong &0x40000000 CopyProtect,
+>12 belong &0x10000000 NoCompression,
+>12 belong &0x04000000 Relocation,
+>12 belong &0x02000000 UseFasterCompression,
+>16 belong x version %d
+
+0 string package4 Newton package,
+>8 byte 8 NOS 1.x,
+>8 byte 9 NOS 2.x,
+>12 belong &0x80000000 AutoRemove,
+>12 belong &0x40000000 CopyProtect,
+>12 belong &0x10000000 NoCompression,
+
+# The following entries for the Apple II are for files that have
+# been transferred as raw binary data from an Apple, without having
+# been encapsulated by any of the above archivers.
+#
+# In general, Apple II formats are hard to identify because Apple DOS
+# and especially Apple ProDOS have strong typing in the file system and
+# therefore programmers never felt much need to include type information
+# in the files themselves.
+#
+# Eric Fischer <enf@pobox.com>
+
+# AppleWorks word processor:
+#
+# This matches the standard tab stops for an AppleWorks file, but if
+# a file has a tab stop set in the first four columns this will fail.
+#
+# The "O" is really the magic number, but that's so common that it's
+# necessary to check the tab stops that follow it to avoid false positives.
+
+4 string O==== AppleWorks word processor data
+>85 byte&0x01 >0 \b, zoomed
+>90 byte&0x01 >0 \b, paginated
+>92 byte&0x01 >0 \b, with mail merge
+#>91 byte x \b, left margin %d
+
+# AppleWorks database:
+#
+# This isn't really a magic number, but it's the closest thing to one
+# that I could find. The 1 and 2 really mean "order in which you defined
+# categories" and "left to right, top to bottom," respectively; the D and R
+# mean that the cursor should move either down or right when you press Return.
+
+#30 string \x01D AppleWorks database data
+#30 string \x02D AppleWorks database data
+#30 string \x01R AppleWorks database data
+#30 string \x02R AppleWorks database data
+
+# AppleWorks spreadsheet:
+#
+# Likewise, this isn't really meant as a magic number. The R or C means
+# row- or column-order recalculation; the A or M means automatic or manual
+# recalculation.
+
+#131 string RA AppleWorks spreadsheet data
+#131 string RM AppleWorks spreadsheet data
+#131 string CA AppleWorks spreadsheet data
+#131 string CM AppleWorks spreadsheet data
+
+# Applesoft BASIC:
+#
+# This is incredibly sloppy, but will be true if the program was
+# written at its usual memory location of 2048 and its first line
+# number is less than 256. Yuck.
+
+0 belong&0xff00ff 0x80000 Applesoft BASIC program data
+#>2 leshort x \b, first line number %d
+
+# ORCA/EZ assembler:
+#
+# This will not identify ORCA/M source files, since those have
+# some sort of date code instead of the two zero bytes at 6 and 7
+# XXX Conflicts with ELF
+#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data
+#>5 byte x \b, build number %d
+
+# Broderbund Fantavision
+#
+# I don't know what these values really mean, but they seem to recur.
+# Will they cause too many conflicts?
+
+# Probably :-)
+#2 belong&0xFF00FF 0x040008 Fantavision movie data
+
+# Some attempts at images.
+#
+# These are actually just bit-for-bit dumps of the frame buffer, so
+# there's really no reasonably way to distinguish them except for their
+# address (if preserved) -- 8192 or 16384 -- and their length -- 8192
+# or, occasionally, 8184.
+#
+# Nevertheless this will manage to catch a lot of images that happen
+# to have a solid-colored line at the bottom of the screen.
+
+8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background
+8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background
+8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background
+8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background
+8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background
+
+# Beagle Bros. Apple Mechanic fonts
+
+0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font
+
+# Apple Universal Disk Image Format (UDIF) - dmg files.
+# From Johan Gade.
+# These entries are disabled for now until we fix the following issues.
+#
+# Note there might be some problems with the "VAX COFF executable"
+# entry. Note this entry should be placed before the mac filesystem section,
+# particularly the "Apple Partition data" entry.
+#
+# The intended meaning of these tests is, that the file is only of the
+# specified type if both of the lines are correct - i.e. if the first
+# line matches and the second doesn't then it is not of that type.
+#
+#0 long 0x7801730d
+#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO)
+#
+# Note that this entry is recognized correctly by the "Apple Partition
+# data" entry - however since this entry is more specific - this
+# information seems to be more useful.
+#0 long 0x45520200
+#>0x410 string disk\ image UDIF read/write image (UDRW)
+
+#------------------------------------------------------------------------------
+# applix: file(1) magic for Applixware
+# From: Peter Soos <sp@osb.hu>
+#
+0 string *BEGIN Applixware
+>7 string WORDS Words Document
+>7 string GRAPHICS Graphic
+>7 string RASTER Bitmap
+>7 string SPREADSHEETS Spreadsheet
+>7 string MACRO Macro
+>7 string BUILDER Builder Object
+
+#------------------------------------------------------------------------------
+# interleaf: file(1) magic for InterLeaf TPS:
+#
+0 string =\210OPS Interleaf saved data
+0 string =<!OPS Interleaf document text
+>5 string ,\ Version\ = \b, version
+>>17 string >\0 %.3s
+
+#------------------------------------------------------------------------------
+# lisp: file(1) magic for lisp programs
+#
+# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
+
+# This is a guess, but a good one.
+0 string ;; Lisp/Scheme program text
+
+# Emacs 18 - this is always correct, but not very magical.
+0 string \012( Emacs v18 byte-compiled Lisp data
+# Emacs 19+ - ver. recognition added by Ian Springer
+# Also applies to XEmacs 19+ .elc files; could tell them apart if we had regexp
+# support or similar - Chris Chittleborough <cchittleborough@yahoo.com.au>
+0 string ;ELC
+>4 byte >19
+>4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data
+
+# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>
+0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program text
+0 long 0x70768BD2 CLISP memory image data
+0 long 0xD28B7670 CLISP memory image data, other endian
+
+# Files produced by GNU gettext
+0 long 0xDE120495 GNU-format message catalog data
+0 long 0x950412DE GNU-format message catalog data
+
+#.com and .bin for MIT scheme
+0 string \372\372\372\372 MIT scheme (library?)
+
+# From: David Allouche <david@allouche.net>
+0 string \<TeXmacs| TeXmacs document text
+
+#------------------------------------------------------------------------------
+# spec: file(1) magic for SPEC raw results (*.raw, *.rsf)
+#
+# Cloyce D. Spradling <cloyce@headgear.org>
+
+0 string spec SPEC
+>4 string .cpu CPU
+>>8 string <: \b%.4s
+>>12 string . raw result text
+
+17 string version=SPECjbb SPECjbb
+>32 string <: \b%.4s
+>>37 string <: v%.4s raw result text
+
+0 string BEGIN\040SPECWEB SPECweb
+>13 string <: \b%.2s
+>>15 string _SSL \b_SSL
+>>>20 string <: v%.4s raw result text
+>>16 string <: v%.4s raw result text
+
+#------------------------------------------------------------------------------
+# sniffer: file(1) magic for packet capture files
+#
+# From: guy@alum.mit.edu (Guy Harris)
+#
+
+#
+# Microsoft Network Monitor 1.x capture files.
+#
+0 string RTSS NetMon capture file
+>5 byte x - version %d
+>4 byte x \b.%d
+>6 leshort 0 (Unknown)
+>6 leshort 1 (Ethernet)
+>6 leshort 2 (Token Ring)
+>6 leshort 3 (FDDI)
+>6 leshort 4 (ATM)
+
+#
+# Microsoft Network Monitor 2.x capture files.
+#
+0 string GMBU NetMon capture file
+>5 byte x - version %d
+>4 byte x \b.%d
+>6 leshort 0 (Unknown)
+>6 leshort 1 (Ethernet)
+>6 leshort 2 (Token Ring)
+>6 leshort 3 (FDDI)
+>6 leshort 4 (ATM)
+
+#
+# Network General Sniffer capture files.
+# Sorry, make that "Network Associates Sniffer capture files."
+# Sorry, make that "Network General old DOS Sniffer capture files."
+#
+0 string TRSNIFF\ data\ \ \ \ \032 Sniffer capture file
+>33 byte 2 (compressed)
+>23 leshort x - version %d
+>25 leshort x \b.%d
+>32 byte 0 (Token Ring)
+>32 byte 1 (Ethernet)
+>32 byte 2 (ARCNET)
+>32 byte 3 (StarLAN)
+>32 byte 4 (PC Network broadband)
+>32 byte 5 (LocalTalk)
+>32 byte 6 (Znet)
+>32 byte 7 (Internetwork Analyzer)
+>32 byte 9 (FDDI)
+>32 byte 10 (ATM)
+
+#
+# Cinco Networks NetXRay capture files.
+# Sorry, make that "Network General Sniffer Basic capture files."
+# Sorry, make that "Network Associates Sniffer Basic capture files."
+# Sorry, make that "Network Associates Sniffer Basic, and Windows
+# Sniffer Pro", capture files."
+# Sorry, make that "Network General Sniffer capture files."
+#
+0 string XCP\0 NetXRay capture file
+>4 string >\0 - version %s
+>44 leshort 0 (Ethernet)
+>44 leshort 1 (Token Ring)
+>44 leshort 2 (FDDI)
+>44 leshort 3 (WAN)
+>44 leshort 8 (ATM)
+>44 leshort 9 (802.11)
+
+#
+# "libpcap" capture files.
+# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
+# the main program that uses that format, but there are other programs
+# that use "libpcap", or that use the same capture file format.)
+#
+0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian)
+>4 beshort x - version %d
+>6 beshort x \b.%d
+>20 belong 0 (No link-layer encapsulation
+>20 belong 1 (Ethernet
+>20 belong 2 (3Mb Ethernet
+>20 belong 3 (AX.25
+>20 belong 4 (ProNET
+>20 belong 5 (CHAOS
+>20 belong 6 (Token Ring
+>20 belong 7 (BSD ARCNET
+>20 belong 8 (SLIP
+>20 belong 9 (PPP
+>20 belong 10 (FDDI
+>20 belong 11 (RFC 1483 ATM
+>20 belong 12 (raw IP
+>20 belong 13 (BSD/OS SLIP
+>20 belong 14 (BSD/OS PPP
+>20 belong 19 (Linux ATM Classical IP
+>20 belong 50 (PPP or Cisco HDLC
+>20 belong 51 (PPP-over-Ethernet
+>20 belong 99 (Symantec Enterprise Firewall
+>20 belong 100 (RFC 1483 ATM
+>20 belong 101 (raw IP
+>20 belong 102 (BSD/OS SLIP
+>20 belong 103 (BSD/OS PPP
+>20 belong 104 (BSD/OS Cisco HDLC
+>20 belong 105 (802.11
+>20 belong 106 (Linux Classical IP over ATM
+>20 belong 107 (Frame Relay
+>20 belong 108 (OpenBSD loopback
+>20 belong 109 (OpenBSD IPsec encrypted
+>20 belong 112 (Cisco HDLC
+>20 belong 113 (Linux "cooked"
+>20 belong 114 (LocalTalk
+>20 belong 117 (OpenBSD PFLOG
+>20 belong 119 (802.11 with Prism header
+>20 belong 122 (RFC 2625 IP over Fibre Channel
+>20 belong 123 (SunATM
+>20 belong 127 (802.11 with radiotap header
+>20 belong 129 (Linux ARCNET
+>20 belong 138 (Apple IP over IEEE 1394
+>20 belong 140 (MTP2
+>20 belong 141 (MTP3
+>20 belong 143 (DOCSIS
+>20 belong 144 (IrDA
+>20 belong 147 (Private use 0
+>20 belong 148 (Private use 1
+>20 belong 149 (Private use 2
+>20 belong 150 (Private use 3
+>20 belong 151 (Private use 4
+>20 belong 152 (Private use 5
+>20 belong 153 (Private use 6
+>20 belong 154 (Private use 7
+>20 belong 155 (Private use 8
+>20 belong 156 (Private use 9
+>20 belong 157 (Private use 10
+>20 belong 158 (Private use 11
+>20 belong 159 (Private use 12
+>20 belong 160 (Private use 13
+>20 belong 161 (Private use 14
+>20 belong 162 (Private use 15
+>20 belong 163 (802.11 with AVS header
+>16 belong x \b, capture length %d)
+0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian)
+>4 leshort x - version %d
+>6 leshort x \b.%d
+>20 lelong 0 (No link-layer encapsulation
+>20 lelong 1 (Ethernet
+>20 lelong 2 (3Mb Ethernet
+>20 lelong 3 (AX.25
+>20 lelong 4 (ProNET
+>20 lelong 5 (CHAOS
+>20 lelong 6 (Token Ring
+>20 lelong 7 (ARCNET
+>20 lelong 8 (SLIP
+>20 lelong 9 (PPP
+>20 lelong 10 (FDDI
+>20 lelong 11 (RFC 1483 ATM
+>20 lelong 12 (raw IP
+>20 lelong 13 (BSD/OS SLIP
+>20 lelong 14 (BSD/OS PPP
+>20 lelong 19 (Linux ATM Classical IP
+>20 lelong 50 (PPP or Cisco HDLC
+>20 lelong 51 (PPP-over-Ethernet
+>20 lelong 99 (Symantec Enterprise Firewall
+>20 lelong 100 (RFC 1483 ATM
+>20 lelong 101 (raw IP
+>20 lelong 102 (BSD/OS SLIP
+>20 lelong 103 (BSD/OS PPP
+>20 lelong 104 (BSD/OS Cisco HDLC
+>20 lelong 105 (802.11
+>20 lelong 106 (Linux Classical IP over ATM
+>20 lelong 107 (Frame Relay
+>20 lelong 108 (OpenBSD loopback
+>20 lelong 109 (OpenBSD IPsec encrypted
+>20 lelong 112 (Cisco HDLC
+>20 lelong 113 (Linux "cooked"
+>20 lelong 114 (LocalTalk
+>20 lelong 117 (OpenBSD PFLOG
+>20 lelong 119 (802.11 with Prism header
+>20 lelong 122 (RFC 2625 IP over Fibre Channel
+>20 lelong 123 (SunATM
+>20 lelong 127 (802.11 with radiotap header
+>20 lelong 129 (Linux ARCNET
+>20 lelong 138 (Apple IP over IEEE 1394
+>20 lelong 140 (MTP2
+>20 lelong 141 (MTP3
+>20 lelong 143 (DOCSIS
+>20 lelong 144 (IrDA
+>20 lelong 147 (Private use 0
+>20 lelong 148 (Private use 1
+>20 lelong 149 (Private use 2
+>20 lelong 150 (Private use 3
+>20 lelong 151 (Private use 4
+>20 lelong 152 (Private use 5
+>20 lelong 153 (Private use 6
+>20 lelong 154 (Private use 7
+>20 lelong 155 (Private use 8
+>20 lelong 156 (Private use 9
+>20 lelong 157 (Private use 10
+>20 lelong 158 (Private use 11
+>20 lelong 159 (Private use 12
+>20 lelong 160 (Private use 13
+>20 lelong 161 (Private use 14
+>20 lelong 162 (Private use 15
+>20 lelong 163 (802.11 with AVS header
+>16 lelong x \b, capture length %d)
+
+#
+# "libpcap"-with-Alexey-Kuznetsov's-patches capture files.
+# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
+# the main program that uses that format, but there are other programs
+# that use "libpcap", or that use the same capture file format.)
+#
+0 ubelong 0xa1b2cd34 extended tcpdump capture file (big-endian)
+>4 beshort x - version %d
+>6 beshort x \b.%d
+>20 belong 0 (No link-layer encapsulation
+>20 belong 1 (Ethernet
+>20 belong 2 (3Mb Ethernet
+>20 belong 3 (AX.25
+>20 belong 4 (ProNET
+>20 belong 5 (CHAOS
+>20 belong 6 (Token Ring
+>20 belong 7 (ARCNET
+>20 belong 8 (SLIP
+>20 belong 9 (PPP
+>20 belong 10 (FDDI
+>20 belong 11 (RFC 1483 ATM
+>20 belong 12 (raw IP
+>20 belong 13 (BSD/OS SLIP
+>20 belong 14 (BSD/OS PPP
+>16 belong x \b, capture length %d)
+0 ulelong 0xa1b2cd34 extended tcpdump capture file (little-endian)
+>4 leshort x - version %d
+>6 leshort x \b.%d
+>20 lelong 0 (No link-layer encapsulation
+>20 lelong 1 (Ethernet
+>20 lelong 2 (3Mb Ethernet
+>20 lelong 3 (AX.25
+>20 lelong 4 (ProNET
+>20 lelong 5 (CHAOS
+>20 lelong 6 (Token Ring
+>20 lelong 7 (ARCNET
+>20 lelong 8 (SLIP
+>20 lelong 9 (PPP
+>20 lelong 10 (FDDI
+>20 lelong 11 (RFC 1483 ATM
+>20 lelong 12 (raw IP
+>20 lelong 13 (BSD/OS SLIP
+>20 lelong 14 (BSD/OS PPP
+>16 lelong x \b, capture length %d)
+
+#
+# AIX "iptrace" capture files.
+#
+0 string iptrace\ 1.0 "iptrace" capture file
+0 string iptrace\ 2.0 "iptrace" capture file
+
+#
+# Novell LANalyzer capture files.
+#
+0 leshort 0x1001 LANalyzer capture file
+0 leshort 0x1007 LANalyzer capture file
+
+#
+# HP-UX "nettl" capture files.
+#
+0 string \x54\x52\x00\x64\x00 "nettl" capture file
+
+#
+# RADCOM WAN/LAN Analyzer capture files.
+#
+0 string \x42\xd2\x00\x34\x12\x66\x22\x88 RADCOM WAN/LAN Analyzer capture file
+
+#
+# NetStumbler log files. Not really packets, per se, but about as
+# close as you can get. These are log files from NetStumbler, a
+# Windows program, that scans for 802.11b networks.
+#
+0 string NetS NetStumbler log file
+>8 lelong x \b, %d stations found
+
+#
+# EtherPeek/AiroPeek "version 9" capture files.
+#
+0 string \177ver EtherPeek/AiroPeek capture file
+
+#
+# Visual Networks traffic capture files.
+#
+0 string \x05VNF Visual Networks traffic capture file
+
+#
+# Network Instruments Observer capture files.
+#
+0 string ObserverPktBuffe Network Instruments Observer capture file
+
+#
+# Files from Accellent Group's 5View products.
+#
+0 string \xaa\xaa\xaa\xaa 5View capture file
+
+#------------------------------------------------------------------------------
+# file(1) magic for revision control files
+# From Hendrik Scholz <hendrik@scholz.net>
+0 string /1\ :pserver: cvs password text file
+#------------------------------------------------------------------------------
+# amigaos: file(1) magic for AmigaOS binary formats:
+
+#
+# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis)
+#
+0 belong 0x000003fa AmigaOS shared library
+0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary
+0 belong 0x000003e7 AmigaOS object/library data
+#
+0 beshort 0xe310 Amiga Workbench
+>2 beshort 1
+>>48 byte 1 disk icon
+>>48 byte 2 drawer icon
+>>48 byte 3 tool icon
+>>48 byte 4 project icon
+>>48 byte 5 garbage icon
+>>48 byte 6 device icon
+>>48 byte 7 kickstart icon
+>>48 byte 8 workbench application icon
+>2 beshort >1 icon, vers. %d
+#
+# various sound formats from the Amiga
+# G=F6tz Waschk <waschk@informatik.uni-rostock.de>
+#
+0 string FC14 Future Composer 1.4 Module sound file
+0 string SMOD Future Composer 1.3 Module sound file
+0 string AON4artofnoise Art Of Noise Module sound file
+1 string MUGICIAN/SOFTEYES Mugician Module sound file
+58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file
+0 string Synth4.0 Synthesis Module sound file
+0 string ARP. The Holy Noise Module sound file
+0 string BeEp\0 JamCracker Module sound file
+0 string COSO\0 Hippel-COSO Module sound file
+# Too simple (short, pure ASCII, deep), MPi
+#26 string V.3 Brian Postma's Soundmon Module sound file v3
+#26 string BPSM Brian Postma's Soundmon Module sound file v3
+#26 string V.2 Brian Postma's Soundmon Module sound file v2
+
+# The following are from: "Stefan A. Haubenthal" <polluks@web.de>
+0 beshort 0x0f00 AmigaOS bitmap font
+0 beshort 0x0f03 AmigaOS outline font
+0 belong 0x80001001 AmigaOS outline tag
+0 string ##\ version catalog translation
+
+# Amiga disk types
+#
+0 string RDSK Rigid Disk Block
+>160 string x on %.24s
+0 string DOS\0 Amiga DOS disk
+0 string DOS\1 Amiga FFS disk
+0 string DOS\2 Amiga Inter DOS disk
+0 string DOS\3 Amiga Inter FFS disk
+0 string DOS\4 Amiga Fastdir DOS disk
+0 string DOS\5 Amiga Fastdir FFS disk
+0 string KICK Kickstart disk
+
+#------------------------------------------------------------------------------
+# database: file(1) magic for various databases
+#
+# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
+#
+#
+# GDBM magic numbers
+# Will be maintained as part of the GDBM distribution in the future.
+# <downsj@teeny.org>
+0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian
+0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian
+0 string GDBM GNU dbm 2.x database
+#
+# Berkeley DB
+#
+# Ian Darwin's file /etc/magic files: big/little-endian version.
+#
+# Hash 1.85/1.86 databases store metadata in network byte order.
+# Btree 1.85/1.86 databases store the metadata in host byte order.
+# Hash and Btree 2.X and later databases store the metadata in host byte order.
+
+0 long 0x00061561 Berkeley DB
+>8 belong 4321
+>>4 belong >2 1.86
+>>4 belong <3 1.85
+>>4 belong >0 (Hash, version %d, native byte-order)
+>8 belong 1234
+>>4 belong >2 1.86
+>>4 belong <3 1.85
+>>4 belong >0 (Hash, version %d, little-endian)
+
+0 belong 0x00061561 Berkeley DB
+>8 belong 4321
+>>4 belong >2 1.86
+>>4 belong <3 1.85
+>>4 belong >0 (Hash, version %d, big-endian)
+>8 belong 1234
+>>4 belong >2 1.86
+>>4 belong <3 1.85
+>>4 belong >0 (Hash, version %d, native byte-order)
+
+0 long 0x00053162 Berkeley DB 1.85/1.86
+>4 long >0 (Btree, version %d, native byte-order)
+0 belong 0x00053162 Berkeley DB 1.85/1.86
+>4 belong >0 (Btree, version %d, big-endian)
+0 lelong 0x00053162 Berkeley DB 1.85/1.86
+>4 lelong >0 (Btree, version %d, little-endian)
+
+12 long 0x00061561 Berkeley DB
+>16 long >0 (Hash, version %d, native byte-order)
+12 belong 0x00061561 Berkeley DB
+>16 belong >0 (Hash, version %d, big-endian)
+12 lelong 0x00061561 Berkeley DB
+>16 lelong >0 (Hash, version %d, little-endian)
+
+12 long 0x00053162 Berkeley DB
+>16 long >0 (Btree, version %d, native byte-order)
+12 belong 0x00053162 Berkeley DB
+>16 belong >0 (Btree, version %d, big-endian)
+12 lelong 0x00053162 Berkeley DB
+>16 lelong >0 (Btree, version %d, little-endian)
+
+12 long 0x00042253 Berkeley DB
+>16 long >0 (Queue, version %d, native byte-order)
+12 belong 0x00042253 Berkeley DB
+>16 belong >0 (Queue, version %d, big-endian)
+12 lelong 0x00042253 Berkeley DB
+>16 lelong >0 (Queue, version %d, little-endian)
+#
+#
+# Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>
+0 string RRD RRDTool DB
+>4 string x version %s
+#----------------------------------------------------------------------
+# ROOT: file(1) magic for ROOT databases
+#
+0 string root\0 ROOT file
+>4 belong x Version %d
+>33 belong x (Compression: %d)
+
+# XXX: Weak magic.
+# Alex Ott <ott@jet.msk.su>
+## Paradox file formats
+#2 leshort 0x0800 Paradox
+#>0x39 byte 3 v. 3.0
+#>0x39 byte 4 v. 3.5
+#>0x39 byte 9 v. 4.x
+#>0x39 byte 10 v. 5.x
+#>0x39 byte 11 v. 5.x
+#>0x39 byte 12 v. 7.x
+#>>0x04 byte 0 indexed .DB data file
+#>>0x04 byte 1 primary index .PX file
+#>>0x04 byte 2 non-indexed .DB data file
+#>>0x04 byte 3 non-incrementing secondary index .Xnn file
+#>>0x04 byte 4 secondary index .Ynn file
+#>>0x04 byte 5 incrementing secondary index .Xnn file
+#>>0x04 byte 6 non-incrementing secondary index .XGn file
+#>>0x04 byte 7 secondary index .YGn file
+#>>>0x04 byte 8 incrementing secondary index .XGn file
+## XBase database files
+#0 byte 0x02
+#>8 leshort >0
+#>>12 leshort 0 FoxBase
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x03
+#>8 leshort >0
+#>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x04
+#>8 leshort >0
+#>>12 leshort 0 dBASE IV no memo file
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x05
+#>8 leshort >0
+#>>12 leshort 0 dBASE V no memo file
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x30
+#>8 leshort >0
+#>>12 leshort 0 Visual FoxPro
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x43
+#>8 leshort >0
+#>>12 leshort 0 FlagShip with memo var size
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x7b
+#>8 leshort >0
+#>>12 leshort 0 dBASEIV with memo
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x83
+#>8 leshort >0
+#>>12 leshort 0 FoxBase+, dBaseIII+ with memo
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x8b
+#>8 leshort >0
+#>>12 leshort 0 dBaseIV with memo
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0x8e
+#>8 leshort >0
+#>>12 leshort 0 dBaseIV with SQL Table
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0xb3
+#>8 leshort >0
+#>>12 leshort 0 FlagShip with .dbt memo
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 byte 0xf5
+#>8 leshort >0
+#>>12 leshort 0 FoxPro with memo
+#>>>0x04 lelong 0 (no records)
+#>>>0x04 lelong >0 (%ld records)
+#
+#0 leshort 0x0006 DBase 3 index file
+
+# MS Access database
+4 string Standard\ Jet\ DB Microsoft Access Database
+
+# TDB database from Samba et al - Martin Pool <mbp@samba.org>
+0 string TDB\ file TDB database
+>32 lelong 0x2601196D version 6, little-endian
+>>36 lelong x hash size %d bytes
+
+# SE Linux policy database
+0 lelong 0xf97cff8c SE Linux policy
+>16 lelong x v%d
+>20 lelong 1 MLS
+>24 lelong x %d symbols
+>28 lelong x %d ocons
+
+# ICE authority file data (Wolfram Kleff)
+2 string ICE ICE authority data
+
+# X11 Xauthority file (Wolfram Kleff)
+10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
+
+#------------------------------------------------------------------------------
+# gringotts: file(1) magic for Gringotts
+# http://devel.pluto.linux.it/projects/Gringotts/
+# author: Germano Rizzo <mano@pluto.linux.it>
+#GRG3????Y
+0 string GRG Gringotts data file
+#file format 1
+>3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9
+#file format 2
+>3 string 2 v.2, MCRYPT S2K,
+>>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
+>>8 byte&0x70 0x10 SERPENT crypt,
+>>8 byte&0x70 0x20 TWOFISH crypt,
+>>8 byte&0x70 0x30 CAST-256 crypt,
+>>8 byte&0x70 0x40 SAFER+ crypt,
+>>8 byte&0x70 0x50 LOKI97 crypt,
+>>8 byte&0x70 0x60 3DES crypt,
+>>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
+>>8 byte&0x08 0x00 SHA1 hash,
+>>8 byte&0x08 0x08 RIPEMD-160 hash,
+>>8 byte&0x04 0x00 ZLib
+>>8 byte&0x04 0x04 BZip2
+>>8 byte&0x03 0x00 lvl.0
+>>8 byte&0x03 0x01 lvl.3
+>>8 byte&0x03 0x02 lvl.6
+>>8 byte&0x03 0x03 lvl.9
+#file format 3
+>3 string 3 v.3, OpenPGP S2K,
+>>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
+>>8 byte&0x70 0x10 SERPENT crypt,
+>>8 byte&0x70 0x20 TWOFISH crypt,
+>>8 byte&0x70 0x30 CAST-256 crypt,
+>>8 byte&0x70 0x40 SAFER+ crypt,
+>>8 byte&0x70 0x50 LOKI97 crypt,
+>>8 byte&0x70 0x60 3DES crypt,
+>>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
+>>8 byte&0x08 0x00 SHA1 hash,
+>>8 byte&0x08 0x08 RIPEMD-160 hash,
+>>8 byte&0x04 0x00 ZLib
+>>8 byte&0x04 0x04 BZip2
+>>8 byte&0x03 0x00 lvl.0
+>>8 byte&0x03 0x01 lvl.3
+>>8 byte&0x03 0x02 lvl.6
+>>8 byte&0x03 0x03 lvl.9
+#file format >3
+>3 string >3 v.%.1s (unknown details)
+
+#------------------------------------------------------------------------------
+# pbm: file(1) magic for Portable Bitmap files
+#
+# XXX - byte order?
+#
+0 short 0x2a17 "compact bitmap" format (Poskanzer)
+
+#------------------------------------------------------------------------------
+# plus5: file(1) magic for Plus Five's UNIX MUMPS
+#
+# XXX - byte order? Paging Hokey....
+#
+0 short 0x259 mumps avl global
+>2 byte >0 (V%d)
+>6 byte >0 with %d byte name
+>7 byte >0 and %d byte data cells
+0 short 0x25a mumps blt global
+>2 byte >0 (V%d)
+>8 short >0 - %d byte blocks
+>15 byte 0x00 - P/D format
+>15 byte 0x01 - P/K/D format
+>15 byte 0x02 - K/D format
+>15 byte >0x02 - Bad Flags
+
+#------------------------------------------------------------------------------
+# vms: file(1) magic for VMS executables (experimental)
+#
+# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)
+
+# GRR 950122: I'm just guessing on these, based on inspection of the headers
+# of three executables each for Alpha and VAX architectures. The VAX files
+# all had headers similar to this:
+#
+# 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205
+# 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................
+#
+0 string \xb0\0\x30\0 VMS VAX executable
+>44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
+#
+# The AXP files all looked like this, except that the byte at offset 0x22
+# was 06 in some of them and 07 in others:
+#
+# 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................
+# 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h...............
+# 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+# 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
+# 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................
+#
+0 belong 0x03000000 VMS Alpha executable
+>75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
+
+#------------------------------------------------------------------------------
+# python: file(1) magic for python
+#
+# From: David Necas <yeti@physics.muni.cz>
+# often the module starts with a multiline string
+0 string """ a python script text executable
+# MAGIC as specified in Python/import.c (1.5 to 2.3.0a)
+# 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n"
+0 belong 0x994e0d0a python 1.5/1.6 byte-compiled
+0 belong 0x87c60d0a python 2.0 byte-compiled
+0 belong 0x2aeb0d0a python 2.1 byte-compiled
+0 belong 0x2ded0d0a python 2.2 byte-compiled
+0 belong 0x3bf20d0a python 2.3 byte-compiled
+
+#------------------------------------------------------------------------------
+# chord: file(1) magic for Chord music sheet typesetting utility input files
+#
+# From Philippe De Muyter <phdm@macqel.be>
+# File format is actually free, but many distributed files begin with `{title'
+#
+0 string {title Chord text file
+
+
+# ----------------------------------------------------------------------------
+# ctags: file (1) magic for Exuberant Ctags files
+# From: Alexander Mai <mai@migdal.ikp.physik.tu-darmstadt.de>
+0 string !_TAG Exuberant Ctags tag file text
+
+#------------------------------------------------------------------------------
+# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats
+# Magic too short!
+#0 string HU Human68k
+#>68 string LZX LZX compressed
+#>>72 string >\0 (version %s)
+#>(8.L+74) string LZX LZX compressed
+#>>(8.L+78) string >\0 (version %s)
+#>60 belong >0 binded
+#>(8.L+66) string #HUPAIR hupair
+#>0 string HU X executable
+#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1
+#>4 belong >0 - base address 0x%x
+#>28 belong >0 not stripped
+#>32 belong >0 with debug information
+#0 beshort 0x601a Human68k Z executable
+#0 beshort 0x6000 Human68k object file
+#0 belong 0xd1000000 Human68k ar binary archive
+#0 belong 0xd1010000 Human68k ar ascii archive
+#0 beshort 0x0068 Human68k lib archive
+#4 string LZX Human68k LZX compressed
+#>8 string >\0 (version %s)
+#>4 string LZX R executable
+#2 string #HUPAIR Human68k hupair R executable
+
+#------------------------------------------------------------------------------
+# pdp: file(1) magic for PDP-11 executable/object and APL workspace
+#
+0 lelong 0101555 PDP-11 single precision APL workspace
+0 lelong 0101554 PDP-11 double precision APL workspace
+#
+# PDP-11 a.out
+#
+0 leshort 0407 PDP-11 executable
+>8 leshort >0 not stripped
+>15 byte >0 - version %ld
+
+0 leshort 0401 PDP-11 UNIX/RT ldp
+0 leshort 0405 PDP-11 old overlay
+
+0 leshort 0410 PDP-11 pure executable
+>8 leshort >0 not stripped
+>15 byte >0 - version %ld
+
+0 leshort 0411 PDP-11 separate I&D executable
+>8 leshort >0 not stripped
+>15 byte >0 - version %ld
+
+0 leshort 0437 PDP-11 kernel overlay
+
+# These last three are derived from 2.11BSD file(1)
+0 leshort 0413 PDP-11 demand-paged pure executable
+>8 leshort >0 not stripped
+
+0 leshort 0430 PDP-11 overlaid pure executable
+>8 leshort >0 not stripped
+
+0 leshort 0431 PDP-11 overlaid separate executable
+>8 leshort >0 not stripped
+
+#------------------------------------------------------------------------
+# file(1) magic for sharc files
+#
+# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by
+# FutureGroove Music (dsp@futuregroove.de)
+
+#------------------------------------------------------------------------
+0 string Draw RiscOS Drawfile
+0 string PACK RiscOS PackdDir archive
+
+#------------------------------------------------------------------------
+# SHARC DSP stuff (based on the FGM SHARC DSP SDK)
+
+0 string ! Assembler source
+0 string Analog ADi asm listing file
+0 string .SYSTEM SHARC architecture file
+0 string .system SHARC architecture file
+
+0 leshort 0x521C SHARC COFF binary
+>2 leshort >1 , %hd sections
+>>12 lelong >0 , not stripped
+
+#------------------------------------------------------------------------------
+# pulsar: file(1) magic for Pulsar POP3 daemon binary files
+#
+# http://pulsar.sourceforge.net
+# mailto:rok.papez@lugos.si
+#
+
+0 belong 0x1ee7f11e Pulsar POP3 daemon mailbox cache file.
+>4 ubelong x Version: %d.
+>8 ubelong x \b%d
+
+
+#------------------------------------------------------------------------------
+# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL
+# workspaces)
+#
+0 long 0100554 APL workspace (Ken's original?)
+
+#----------------------------------------------------------------------------
+# communication
+
+# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.
+# It is used for conformance testing of communication protocols.
+# Added by W. Borgert <debacle@debian.org>.
+0 string $Suite TTCN Abstract Test Suite
+>&1 string $SuiteId
+>>&1 string >\n %s
+>&2 string $SuiteId
+>>&1 string >\n %s
+>&3 string $SuiteId
+>>&1 string >\n %s
+
+# MSC (message sequence charts) are a formal description technique,
+# described in ITU-T Z.120, mainly used for communication protocols.
+# Added by W. Borgert <debacle@debian.org>.
+0 string mscdocument Message Sequence Chart (document)
+0 string msc Message Sequence Chart (chart)
+0 string submsc Message Sequence Chart (subchart)
+
+#------------------------------------------------------------------------------
+# ncr: file(1) magic for NCR Tower objects
+#
+# contributed by
+# Michael R. Wayne *** TMC & Associates *** INTERNET: wayne@ford-vax.arpa
+# uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne@fmsrl7.UUCP
+#
+0 beshort 000610 Tower/XP rel 2 object
+>12 belong >0 not stripped
+>20 beshort 0407 executable
+>20 beshort 0410 pure executable
+>22 beshort >0 - version %ld
+0 beshort 000615 Tower/XP rel 2 object
+>12 belong >0 not stripped
+>20 beshort 0407 executable
+>20 beshort 0410 pure executable
+>22 beshort >0 - version %ld
+0 beshort 000620 Tower/XP rel 3 object
+>12 belong >0 not stripped
+>20 beshort 0407 executable
+>20 beshort 0410 pure executable
+>22 beshort >0 - version %ld
+0 beshort 000625 Tower/XP rel 3 object
+>12 belong >0 not stripped
+>20 beshort 0407 executable
+>20 beshort 0410 pure executable
+>22 beshort >0 - version %ld
+0 beshort 000630 Tower32/600/400 68020 object
+>12 belong >0 not stripped
+>20 beshort 0407 executable
+>20 beshort 0410 pure executable
+>22 beshort >0 - version %ld
+0 beshort 000640 Tower32/800 68020
+>18 beshort &020000 w/68881 object
+>18 beshort &040000 compatible object
+>18 beshort &~060000 object
+>20 beshort 0407 executable
+>20 beshort 0413 pure executable
+>12 belong >0 not stripped
+>22 beshort >0 - version %ld
+0 beshort 000645 Tower32/800 68010
+>18 beshort &040000 compatible object
+>18 beshort &~060000 object
+>20 beshort 0407 executable
+>20 beshort 0413 pure executable
+>12 belong >0 not stripped
+>22 beshort >0 - version %ld
+#------------------------------------------------------------------------------
+# alpha architecture description
+#
+
+0 leshort 0603 COFF format alpha
+>22 leshort&030000 !020000 executable
+>24 leshort 0410 pure
+>24 leshort 0413 paged
+>22 leshort&020000 !0 dynamically linked
+>16 lelong !0 not stripped
+>16 lelong 0 stripped
+>22 leshort&030000 020000 shared library
+>24 leshort 0407 object
+>27 byte x - version %d
+>26 byte x \b.%d
+>28 byte x \b-%d
+
+# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>
+#
+# The actual magic number is just "Core", followed by a 2-byte version
+# number; however, treating any file that begins with "Core" as a Digital
+# UNIX core dump file may produce too many false hits, so we include one
+# byte of the version number as well; DU 5.0 appears only to be up to
+# version 2.
+#
+0 string Core\001 Alpha COFF format core dump (Digital UNIX)
+>24 string >\0 \b, from '%s'
+0 string Core\002 Alpha COFF format core dump (Digital UNIX)
+>24 string >\0 \b, from '%s'
+
+
+#------------------------------------------------------------------------------
+# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character
+# strings as "long" - we assume they're just strings:
+# From: guy@netapp.com (Guy Harris)
+#
+0 string *STA Aster*x
+>7 string WORD Words Document
+>7 string GRAP Graphic
+>7 string SPRE Spreadsheet
+>7 string MACR Macro
+0 string 2278 Aster*x Version 2
+>29 byte 0x36 Words Document
+>29 byte 0x35 Graphic
+>29 byte 0x32 Spreadsheet
+>29 byte 0x38 Macro
+
+#------------------------------------------------------------------------------
+# blender: file(1) magic for Blender 3D data files
+#
+# Coded by Guillermo S. Romero <gsromero@alumnos.euitt.upm.es> using the
+# data from Ton Roosendaal <ton@blender.nl>. Ton or his company do not
+# support the rule, so mail GSR if problems with it. Rule version: 1.1.
+# You can get latest version with comments and details about the format
+# at http://acd.asoc.euitt.upm.es/~gsromero/3d/blender/magic.blender
+
+0 string =BLENDER Blender3D,
+>7 string =_ saved as 32-bits
+>7 string =- saved as 64-bits
+>8 string =v little endian
+>8 string =V big endian
+>9 byte x with version %c.
+>10 byte x \b%c
+>11 byte x \b%c
+
+#------------------------------------------------------------------------------
+# sendmail: file(1) magic for sendmail config files
+#
+# XXX - byte order?
+#
+0 byte 046 Sendmail frozen configuration
+>16 string >\0 - version %s
+0 short 0x271c Sendmail frozen configuration
+>16 string >\0 - version %s
+
+#------------------------------------------------------------------------------
+# sendmail: file(1) magic for sendmail m4(1) files
+#
+# From Hendrik Scholz <hendrik@scholz.net>
+# i.e. files in /usr/share/sendmail/cf/
+#
+0 string divert(-1)\n sendmail m4 text file
+
+
+#------------------------------------------------------------------------------
+# alliant: file(1) magic for Alliant FX series a.out files
+#
+# If the FX series is the one that had a processor with a 68K-derived
+# instruction set, the "short" should probably become "beshort" and the
+# "long" should probably become "belong".
+# If it's the i860-based one, they should probably become either the
+# big-endian or little-endian versions, depending on the mode they ran
+# the 860 in....
+#
+0 short 0420 0420 Alliant virtual executable
+>2 short &0x0020 common library
+>16 long >0 not stripped
+0 short 0421 0421 Alliant compact executable
+>2 short &0x0020 common library
+>16 long >0 not stripped
+
+#------------------------------------------------------------------------------
+# CDDB: file(1) magic for CDDB(tm) format CD text data files
+#
+# From <steve@gracenote.com>
+#
+# This is the /etc/magic entry to decode datafiles as used by
+# CDDB-enabled CD player applications.
+#
+
+0 string/b #\040xmcd CDDB(tm) format CD text data
+
+#------------------------------------------------------------------------------
+# elf: file(1) magic for ELF executables
+#
+# We have to check the byte order flag to see what byte order all the
+# other stuff in the header is in.
+#
+# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
+#
+# updated by Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \177ELF ELF
+>4 byte 0 invalid class
+>4 byte 1 32-bit
+# only for MIPS - in the future, the ABI field of e_flags should be used.
+>>18 leshort 8
+>>>36 lelong &0x20 N32
+>>18 leshort 10
+>>>36 lelong &0x20 N32
+>>18 beshort 8
+>>>36 belong &0x20 N32
+>>18 beshort 10
+>>>36 belong &0x20 N32
+>4 byte 2 64-bit
+>5 byte 0 invalid byte order
+>5 byte 1 LSB
+# The official e_machine number for MIPS is now #8, regardless of endianness.
+# The second number (#10) will be deprecated later. For now, we still
+# say something if #10 is encountered, but only gory details for #8.
+>>18 leshort 8
+# only for 32-bit
+>>>4 byte 1
+>>>>36 lelong&0xf0000000 0x00000000 MIPS-I
+>>>>36 lelong&0xf0000000 0x10000000 MIPS-II
+>>>>36 lelong&0xf0000000 0x20000000 MIPS-III
+>>>>36 lelong&0xf0000000 0x30000000 MIPS-IV
+>>>>36 lelong&0xf0000000 0x40000000 MIPS-V
+>>>>36 lelong&0xf0000000 0x60000000 MIPS32
+>>>>36 lelong&0xf0000000 0x70000000 MIPS64
+>>>>36 lelong&0xf0000000 0x80000000 MIPS32 rel2
+>>>>36 lelong&0xf0000000 0x90000000 MIPS64 rel2
+# only for 64-bit
+>>>4 byte 2
+>>>>48 lelong&0xf0000000 0x00000000 MIPS-I
+>>>>48 lelong&0xf0000000 0x10000000 MIPS-II
+>>>>48 lelong&0xf0000000 0x20000000 MIPS-III
+>>>>48 lelong&0xf0000000 0x30000000 MIPS-IV
+>>>>48 lelong&0xf0000000 0x40000000 MIPS-V
+>>>>48 lelong&0xf0000000 0x60000000 MIPS32
+>>>>48 lelong&0xf0000000 0x70000000 MIPS64
+>>>>48 lelong&0xf0000000 0x80000000 MIPS32 rel2
+>>>>48 lelong&0xf0000000 0x90000000 MIPS64 rel2
+>>16 leshort 0 no file type,
+>>16 leshort 1 relocatable,
+>>16 leshort 2 executable,
+>>16 leshort 3 shared object,
+# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
+# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
+>>16 leshort 4 core file
+# Core file detection is not reliable.
+#>>>(0x38+0xcc) string >\0 of '%s'
+#>>>(0x38+0x10) lelong >0 (signal %d),
+>>16 leshort &0xff00 processor-specific,
+>>18 leshort 0 no machine,
+>>18 leshort 1 AT&T WE32100 - invalid byte order,
+>>18 leshort 2 SPARC - invalid byte order,
+>>18 leshort 3 Intel 80386,
+>>18 leshort 4 Motorola
+>>>36 lelong &0x01000000 68000 - invalid byte order,
+>>>36 lelong &0x00810000 CPU32 - invalid byte order,
+>>>36 lelong 0 68020 - invalid byte order,
+>>18 leshort 5 Motorola 88000 - invalid byte order,
+>>18 leshort 6 Intel 80486,
+>>18 leshort 7 Intel 80860,
+>>18 leshort 8 MIPS,
+>>18 leshort 9 Amdahl - invalid byte order,
+>>18 leshort 10 MIPS (deprecated),
+>>18 leshort 11 RS6000 - invalid byte order,
+>>18 leshort 15 PA-RISC - invalid byte order,
+>>>50 leshort 0x0214 2.0
+>>>48 leshort &0x0008 (LP64),
+>>18 leshort 16 nCUBE,
+>>18 leshort 17 Fujitsu VPP500,
+>>18 leshort 18 SPARC32PLUS,
+>>18 leshort 20 PowerPC,
+>>18 leshort 22 IBM S/390,
+>>18 leshort 36 NEC V800,
+>>18 leshort 37 Fujitsu FR20,
+>>18 leshort 38 TRW RH-32,
+>>18 leshort 39 Motorola RCE,
+>>18 leshort 40 ARM,
+>>18 leshort 41 Alpha,
+>>18 leshort 0xa390 IBM S/390 (obsolete),
+>>18 leshort 42 Hitachi SH,
+>>18 leshort 43 SPARC V9 - invalid byte order,
+>>18 leshort 44 Siemens Tricore Embedded Processor,
+>>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
+>>18 leshort 46 Hitachi H8/300,
+>>18 leshort 47 Hitachi H8/300H,
+>>18 leshort 48 Hitachi H8S,
+>>18 leshort 49 Hitachi H8/500,
+>>18 leshort 50 IA-64 (Intel 64 bit architecture)
+>>18 leshort 51 Stanford MIPS-X,
+>>18 leshort 52 Motorola Coldfire,
+>>18 leshort 53 Motorola M68HC12,
+>>18 leshort 62 AMD x86-64,
+>>18 leshort 75 Digital VAX,
+>>18 leshort 88 Renesas M32R,
+>>18 leshort 97 NatSemi 32k,
+>>18 leshort 0x9026 Alpha (unofficial),
+>>20 lelong 0 invalid version
+>>20 lelong 1 version 1
+>>36 lelong 1 MathCoPro/FPU/MAU Required
+>5 byte 2 MSB
+# only for MIPS - see comment in little-endian section above.
+>>18 beshort 8
+# only for 32-bit
+>>>4 byte 1
+>>>>36 belong&0xf0000000 0x00000000 MIPS-I
+>>>>36 belong&0xf0000000 0x10000000 MIPS-II
+>>>>36 belong&0xf0000000 0x20000000 MIPS-III
+>>>>36 belong&0xf0000000 0x30000000 MIPS-IV
+>>>>36 belong&0xf0000000 0x40000000 MIPS-V
+>>>>36 belong&0xf0000000 0x60000000 MIPS32
+>>>>36 belong&0xf0000000 0x70000000 MIPS64
+>>>>36 belong&0xf0000000 0x80000000 MIPS32 rel2
+>>>>36 belong&0xf0000000 0x90000000 MIPS64 rel2
+# only for 64-bit
+>>>4 byte 2
+>>>>48 belong&0xf0000000 0x00000000 MIPS-I
+>>>>48 belong&0xf0000000 0x10000000 MIPS-II
+>>>>48 belong&0xf0000000 0x20000000 MIPS-III
+>>>>48 belong&0xf0000000 0x30000000 MIPS-IV
+>>>>48 belong&0xf0000000 0x40000000 MIPS-V
+>>>>48 belong&0xf0000000 0x60000000 MIPS32
+>>>>48 belong&0xf0000000 0x70000000 MIPS64
+>>>>48 belong&0xf0000000 0x80000000 MIPS32 rel2
+>>>>48 belong&0xf0000000 0x90000000 MIPS64 rel2
+>>16 beshort 0 no file type,
+>>16 beshort 1 relocatable,
+>>16 beshort 2 executable,
+>>16 beshort 3 shared object,
+>>16 beshort 4 core file,
+#>>>(0x38+0xcc) string >\0 of '%s'
+#>>>(0x38+0x10) belong >0 (signal %d),
+>>16 beshort &0xff00 processor-specific,
+>>18 beshort 0 no machine,
+>>18 beshort 1 AT&T WE32100,
+>>18 beshort 2 SPARC,
+>>18 beshort 3 Intel 80386 - invalid byte order,
+>>18 beshort 4 Motorola
+>>>36 belong &0x01000000 68000,
+>>>36 belong &0x00810000 CPU32,
+>>>36 belong 0 68020,
+>>18 beshort 5 Motorola 88000,
+>>18 beshort 6 Intel 80486 - invalid byte order,
+>>18 beshort 7 Intel 80860,
+>>18 beshort 8 MIPS,
+>>18 beshort 9 Amdahl,
+>>18 beshort 10 MIPS (deprecated),
+>>18 beshort 11 RS6000,
+>>18 beshort 15 PA-RISC
+>>>50 beshort 0x0214 2.0
+>>>48 beshort &0x0008 (LP64)
+>>18 beshort 16 nCUBE,
+>>18 beshort 17 Fujitsu VPP500,
+>>18 beshort 18 SPARC32PLUS,
+>>>36 belong&0xffff00 &0x000100 V8+ Required,
+>>>36 belong&0xffff00 &0x000200 Sun UltraSPARC1 Extensions Required,
+>>>36 belong&0xffff00 &0x000400 HaL R1 Extensions Required,
+>>>36 belong&0xffff00 &0x000800 Sun UltraSPARC3 Extensions Required,
+>>18 beshort 20 PowerPC or cisco 4500,
+>>18 beshort 21 cisco 7500,
+>>18 beshort 22 IBM S/390,
+>>18 beshort 24 cisco SVIP,
+>>18 beshort 25 cisco 7200,
+>>18 beshort 36 NEC V800 or cisco 12000,
+>>18 beshort 37 Fujitsu FR20,
+>>18 beshort 38 TRW RH-32,
+>>18 beshort 39 Motorola RCE,
+>>18 beshort 40 ARM,
+>>18 beshort 41 Alpha,
+>>18 beshort 42 Hitachi SH,
+>>18 beshort 43 SPARC V9,
+>>18 beshort 44 Siemens Tricore Embedded Processor,
+>>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
+>>18 beshort 46 Hitachi H8/300,
+>>18 beshort 47 Hitachi H8/300H,
+>>18 beshort 48 Hitachi H8S,
+>>18 beshort 49 Hitachi H8/500,
+>>18 beshort 50 Intel Merced Processor,
+>>18 beshort 51 Stanford MIPS-X,
+>>18 beshort 52 Motorola Coldfire,
+>>18 beshort 53 Motorola M68HC12,
+>>18 beshort 73 Cray NV1,
+>>18 beshort 75 Digital VAX,
+>>18 beshort 88 Renesas M32R,
+>>18 beshort 97 NatSemi 32k,
+>>18 beshort 0x9026 Alpha (unofficial),
+>>18 beshort 0xa390 IBM S/390 (obsolete),
+>>20 belong 0 invalid version
+>>20 belong 1 version 1
+>>36 belong 1 MathCoPro/FPU/MAU Required
+# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
+# like proper ELF, but extracting the string had bad results.
+>4 byte <0x80
+>>8 string >\0 (%s)
+>8 string \0
+>>7 byte 0 (SYSV)
+>>7 byte 1 (HP-UX)
+>>7 byte 2 (NetBSD)
+>>7 byte 3 (GNU/Linux)
+>>7 byte 4 (GNU/Hurd)
+>>7 byte 5 (86Open)
+>>7 byte 6 (Solaris)
+>>7 byte 7 (Monterey)
+>>7 byte 8 (IRIX)
+>>7 byte 9 (FreeBSD)
+>>7 byte 10 (Tru64)
+>>7 byte 11 (Novell Modesto)
+>>7 byte 12 (OpenBSD)
+>>7 byte 97 (ARM)
+>>7 byte 255 (embedded)
+
+#------------------------------------------------------------------------------
+# Epoc 32 : file(1) magic for Epoc Documents [psion/osaris
+# Stefan Praszalowicz (hpicollo@worldnet.fr)
+#0 lelong 0x10000037 Epoc32
+>4 lelong 0x1000006D
+>>8 lelong 0x1000007F Word
+>>8 lelong 0x10000088 Sheet
+>>8 lelong 0x1000007D Sketch
+>>8 lelong 0x10000085 TextEd
+
+#------------------------------------------------------------------------------
+# ispell: file(1) magic for ispell
+#
+# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic
+# will match 0x9600 through 0x9603 in *both* little endian and big endian.
+# (No other current magic entries collide.)
+#
+# Updated by Daniel Quinlan (quinlan@yggdrasil.com)
+#
+0 leshort&0xFFFC 0x9600 little endian ispell
+>0 byte 0 hash file (?),
+>0 byte 1 3.0 hash file,
+>0 byte 2 3.1 hash file,
+>0 byte 3 hash file (?),
+>2 leshort 0x00 8-bit, no capitalization, 26 flags
+>2 leshort 0x01 7-bit, no capitalization, 26 flags
+>2 leshort 0x02 8-bit, capitalization, 26 flags
+>2 leshort 0x03 7-bit, capitalization, 26 flags
+>2 leshort 0x04 8-bit, no capitalization, 52 flags
+>2 leshort 0x05 7-bit, no capitalization, 52 flags
+>2 leshort 0x06 8-bit, capitalization, 52 flags
+>2 leshort 0x07 7-bit, capitalization, 52 flags
+>2 leshort 0x08 8-bit, no capitalization, 128 flags
+>2 leshort 0x09 7-bit, no capitalization, 128 flags
+>2 leshort 0x0A 8-bit, capitalization, 128 flags
+>2 leshort 0x0B 7-bit, capitalization, 128 flags
+>2 leshort 0x0C 8-bit, no capitalization, 256 flags
+>2 leshort 0x0D 7-bit, no capitalization, 256 flags
+>2 leshort 0x0E 8-bit, capitalization, 256 flags
+>2 leshort 0x0F 7-bit, capitalization, 256 flags
+>4 leshort >0 and %d string characters
+0 beshort&0xFFFC 0x9600 big endian ispell
+>1 byte 0 hash file (?),
+>1 byte 1 3.0 hash file,
+>1 byte 2 3.1 hash file,
+>1 byte 3 hash file (?),
+>2 beshort 0x00 8-bit, no capitalization, 26 flags
+>2 beshort 0x01 7-bit, no capitalization, 26 flags
+>2 beshort 0x02 8-bit, capitalization, 26 flags
+>2 beshort 0x03 7-bit, capitalization, 26 flags
+>2 beshort 0x04 8-bit, no capitalization, 52 flags
+>2 beshort 0x05 7-bit, no capitalization, 52 flags
+>2 beshort 0x06 8-bit, capitalization, 52 flags
+>2 beshort 0x07 7-bit, capitalization, 52 flags
+>2 beshort 0x08 8-bit, no capitalization, 128 flags
+>2 beshort 0x09 7-bit, no capitalization, 128 flags
+>2 beshort 0x0A 8-bit, capitalization, 128 flags
+>2 beshort 0x0B 7-bit, capitalization, 128 flags
+>2 beshort 0x0C 8-bit, no capitalization, 256 flags
+>2 beshort 0x0D 7-bit, no capitalization, 256 flags
+>2 beshort 0x0E 8-bit, capitalization, 256 flags
+>2 beshort 0x0F 7-bit, capitalization, 256 flags
+>4 beshort >0 and %d string characters
+# ispell 4.0 hash files kromJx <kromJx@crosswinds.net>
+# Ispell 4.0
+0 string ISPL ispell
+>4 long x hash file version %d,
+>8 long x lexletters %d,
+>12 long x lexsize %d,
+>16 long x hashsize %d,
+>20 long x stblsize %d
+
+#------------------------------------------------------------------------------
+# lex: file(1) magic for lex
+#
+# derived empirically, your offsets may vary!
+53 string yyprevious C program text (from lex)
+>3 string >\0 for %s
+# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>
+21 string generated\ by\ flex C program text (from flex)
+# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>
+0 string %{ lex description text
+
+#------------------------------------------------------------------------------
+# mips: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)
+# Dec Ultrix (MIPS)
+# all of SGI's *current* machines and OSes run in big-endian mode on the
+# MIPS machines, as far as I know.
+#
+# XXX - what is the blank "-" line?
+#
+# kbd file definitions
+0 string kbd!map kbd map file
+>8 byte >0 Ver %d:
+>10 short >0 with %d table(s)
+0 belong 0407 old SGI 68020 executable
+0 belong 0410 old SGI 68020 pure executable
+0 beshort 0x8765 disk quotas file
+0 beshort 0x0506 IRIS Showcase file
+>2 byte 0x49 -
+>3 byte x - version %ld
+0 beshort 0x0226 IRIS Showcase template
+>2 byte 0x63 -
+>3 byte x - version %ld
+0 belong 0x5343464d IRIS Showcase file
+>4 byte x - version %ld
+0 belong 0x5443464d IRIS Showcase template
+>4 byte x - version %ld
+0 belong 0xdeadbabe IRIX Parallel Arena
+>8 belong >0 - version %ld
+#
+0 beshort 0x0160 MIPSEB ECOFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x \b.%ld
+#
+0 beshort 0x0162 MIPSEL-BE ECOFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %d
+>22 byte x \b.%ld
+#
+0 beshort 0x6001 MIPSEB-LE ECOFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %d
+>22 byte x \b.%ld
+#
+0 beshort 0x6201 MIPSEL ECOFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>22 byte x \b.%ld
+#
+# MIPS 2 additions
+#
+0 beshort 0x0163 MIPSEB MIPS-II ECOFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x \b.%ld
+#
+0 beshort 0x0166 MIPSEL-BE MIPS-II ECOFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x \b.%ld
+#
+0 beshort 0x6301 MIPSEB-LE MIPS-II ECOFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>22 byte x \b.%ld
+#
+0 beshort 0x6601 MIPSEL MIPS-II ECOFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>22 byte x \b.%ld
+#
+# MIPS 3 additions
+#
+0 beshort 0x0140 MIPSEB MIPS-III ECOFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x \b.%ld
+#
+0 beshort 0x0142 MIPSEL-BE MIPS-III ECOFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x \b.%ld
+#
+0 beshort 0x4001 MIPSEB-LE MIPS-III ECOFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>22 byte x \b.%ld
+#
+0 beshort 0x4201 MIPSEL MIPS-III ECOFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>22 byte x \b.%ld
+#
+0 beshort 0x180 MIPSEB Ucode
+0 beshort 0x182 MIPSEL-BE Ucode
+# 32bit core file
+0 belong 0xdeadadb0 IRIX core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# 64bit core file
+0 belong 0xdeadad40 IRIX 64-bit core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# N32bit core file
+0 belong 0xbabec0bb IRIX N32 core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# New style crash dump file
+0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of
+>36 string >\0 '%s'
+# Trusted IRIX info
+0 string SGIAUDIT SGI Audit file
+>8 byte x - version %d
+>9 byte x \b.%ld
+#
+0 string WNGZWZSC Wingz compiled script
+0 string WNGZWZSS Wingz spreadsheet
+0 string WNGZWZHP Wingz help file
+#
+0 string \#Inventor V IRIS Inventor 1.0 file
+0 string \#Inventor V2 Open Inventor 2.0 file
+# GLF is OpenGL stream encoding
+0 string glfHeadMagic(); GLF_TEXT
+4 belong 0x7d000000 GLF_BINARY_LSB_FIRST
+4 belong 0x0000007d GLF_BINARY_MSB_FIRST
+# GLS is OpenGL stream encoding; GLS is the successor of GLF
+0 string glsBeginGLS( GLS_TEXT
+4 belong 0x10000000 GLS_BINARY_LSB_FIRST
+4 belong 0x00000010 GLS_BINARY_MSB_FIRST
class rc_mail_mime extends Mail_mime
{
+ /**
+ * Set build parameters
+ */
+ function setParam($param)
+ {
+ if (is_array($param))
+ $this->_build_params = array_merge($this->_build_params, $param);
+ }
/**
* Adds an image to the list of embedded images.
return true;
}
-
+
/**
* returns the HTML body portion of the message
}
+ /**
+ * Creates a new mimePart object, using multipart/mixed as
+ * the initial content-type and returns it during the
+ * build process.
+ *
+ * @return object The multipart/mixed mimePart object
+ * @access private
+ */
+ function &_addMixedPart()
+ {
+ $params['content_type'] = $this->_headers['Content-Type'] ? $this->_headers['Content-Type'] : 'multipart/mixed';
+ $ret = new Mail_mimePart('', $params);
+ return $ret;
+ }
+
+
/**
* Encodes a header as per RFC2047
*
// add chunk to output string by regarding the header maxlen
$len = strlen($value);
- if ($line_len + $len < $maxlen)
+ if ($i == 0 || $line_len + $len < $maxlen)
{
$hdr_value .= ($i>0?', ':'') . $value;
$line_len += $len + ($i>0?2:0);
| language/am/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Vahan Yerkanian <vahan@arminco.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 584 2007-05-24 03:49:19Z estadtherr $
+ @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
*/
$labels['replytoallmessage'] = 'Պատասխանել բոլորին';
$labels['forwardmessage'] = 'Փոխանցել նամակը';
$labels['deletemessage'] = 'Ջնջել նամակը';
+$labels['movemessagetotrash'] = 'Գցել աղբարկղը';
$labels['printmessage'] = 'Տպել';
$labels['previousmessage'] = 'Ցուցադրել նախորդ նամակը';
$labels['previousmessages'] = 'Ցուցադրել նախորդ նամակները';
$labels['lastmessages'] = 'Ցուցադրել վերջին էջը';
$labels['backtolist'] = 'Վերադառնալ նամակների ցուցակ';
$labels['viewsource'] = 'Ցուցադրել նամակի կոդը';
+$labels['markmessages'] = 'Նշել նամակները';
+$labels['markread'] = 'որպես կարդացած';
+$labels['markunread'] = 'որպես չկարդացած';
$labels['select'] = 'Նշել';
$labels['all'] = 'Բոլորը';
$labels['none'] = 'Չնշել';
$labels['quicksearch'] = 'Արագ որոնում';
$labels['resetsearch'] = 'Վերսկսել որոնումը';
$labels['compose'] = 'Գրել նամակ';
-$labels['sendmessage'] = 'Ուղարկել';
$labels['savemessage'] = 'Հիշել որպես սևագիր';
+$labels['sendmessage'] = 'Ուղարկել';
$labels['addattachment'] = 'Կցել ֆայլ';
$labels['charset'] = 'Տառաշար';
$labels['editortype'] = 'Խմբագրի տիպը';
$labels['showimages'] = 'Ցուցադրել նկարները';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Պարզ տեքստ';
+$labels['addcc'] = 'Ավելացնել Cc';
+$labels['addbcc'] = 'Ավելացնել Bcc';
+$labels['addreplyto'] = 'Ավելացնել Reply-To';
+$labels['mdnrequest'] = 'Նամակի հեղինակը խնդրել է նամակը կարդալուն պես տեղեկացնել իրեն։ Ցանկանում էք Տեղեկացնե՞լ։';
+$labels['receiptread'] = 'Նամակի ընթերցման ծանուցագիր';
+$labels['yourmessage'] = 'Սա Ձեր նամակի ընթերցման ծանուցագիրն է';
+$labels['receiptnote'] = 'Նշում՝ Այս ծանուցագիրը ընդամենը տեղեկացնում է, որ նամակը ցուցադրվել է հասցեատիրոջ համակարչով։ Չկա որևիցե երաշխիք, որ հասցեատերը իսկապես կարդացել է նամակը։';
$labels['name'] = 'Մականուն';
$labels['firstname'] = 'Անուն';
$labels['surname'] = 'Ազգանուն';
$labels['folders'] = 'Դարակներ';
$labels['foldername'] = 'Դարակի անուն';
$labels['subscribed'] = 'Բաժանորդագրված';
+$labels['messagecount'] = 'Նամակներ';
$labels['create'] = 'Ստեղծել';
$labels['createfolder'] = 'Բացել նոր դարակ';
$labels['rename'] = 'Վերանվանել';
| language/am/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Vahan Yerkanian <vahan@arminco.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 584 2007-05-24 03:49:19Z estadtherr $
+ @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
*/
$messages['copyerror'] = 'Հասցեների կրկնօրինակումը ձախողվեց';
$messages['sourceisreadonly'] = 'Այս հասցեն պաշտպանված է';
$messages['errorsavingcontact'] = 'Հասցեի գրանցումն ձախողվեց';
+$messages['movingmessage'] = 'Նամակը տեղափոխվում է…';
+$messages['receiptsent'] = 'Նամակի ընթերցման ծանուցագիրն ուղարկված է';
+$messages['errorsendingreceipt'] = 'Ծանուցագրի ուղարկումը ձախողվեց';
+$messages['nodeletelastidentity'] = 'Անհնար է ջնջել վերջին տարբերակը';
+$messages['addsubfolderhint'] = 'Այս դարակը կստեղծվի որպես նշվածի ենթադարակ';
?>
\ No newline at end of file
| language/ar/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Ossama Khayat <okhayat@yahoo.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$labels['replytoallmessage'] = 'الرد على المرسل وجميع مستقبلي الرسالة';
$labels['forwardmessage'] = 'تمرير الرسالة';
$labels['deletemessage'] = 'حذف الرسالة إلى المهملات';
+$labels['movemessagetotrash'] = 'انقل الرسالة إلى سلة المهملات';
$labels['printmessage'] = 'طباعة هذه الرسالة';
$labels['previousmessage'] = 'عرض الرسالة السابقة';
$labels['previousmessages'] = 'عرض المجموعة السابقة من الرسائل';
$labels['lastmessages'] = 'عرض مجموعة الرسائل الأخيرة';
$labels['backtolist'] = 'العودة إلى لائحة الرسائل';
$labels['viewsource'] = 'إظهار المصدر';
+$labels['markmessages'] = 'وسم الرسالة';
+$labels['markread'] = 'كمقروءة';
+$labels['markunread'] = 'كغير مقروءة';
$labels['select'] = 'تحديد';
$labels['all'] = 'الكل';
$labels['none'] = 'لا شيء';
$labels['quicksearch'] = 'البحث السريع';
$labels['resetsearch'] = 'استعادة البحث للافتراضي';
$labels['compose'] = 'إنشاء رسالة';
-$labels['sendmessage'] = 'إرسال الرسالة الآن';
$labels['savemessage'] = 'حفظ هذه المسودة';
+$labels['sendmessage'] = 'إرسال الرسالة الآن';
$labels['addattachment'] = 'إرفاق ملف';
$labels['charset'] = 'مجموعة المحارف';
$labels['editortype'] = 'نوع المُحرّر';
$labels['showimages'] = 'إظهار الصور';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'نص مجرد';
+$labels['addcc'] = 'أضف CC';
+$labels['addbcc'] = 'أضف BCC';
+$labels['addreplyto'] = 'أضيف Reply-To';
+$labels['mdnrequest'] = 'طلب المرسل إعلامه عند قراءتك لرسالته. هل تود إعلام المرسل؟';
+$labels['receiptread'] = 'إيصال الاستلام )بالقراءة)';
+$labels['yourmessage'] = 'هذا إيصال بقراءة رسالتك';
+$labels['receiptnote'] = 'ملاحظة: يُعلمك هذا الإيصال بأن رسالتك قد ظهرت على جهاز المستقبِل. ليست هناك أية ضمانات أن المستقبل قد قرأ أو فهم محتويات الرسالة.';
$labels['name'] = 'اسم العرض';
$labels['firstname'] = 'الإسم الأول';
$labels['surname'] = 'الإسم الأخير';
$labels['folders'] = 'مجلدات';
$labels['foldername'] = 'اسم المجلد';
$labels['subscribed'] = 'مشترك';
+$labels['messagecount'] = 'الرسائل';
$labels['create'] = 'إنشاء';
$labels['createfolder'] = 'إنشاء مجلد جديد';
$labels['rename'] = 'إعادة التسمية';
| language/ar/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Ossama Khayat <okhayat@yahoo.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$messages['copyerror'] = 'لم يمكن نسخ أية عناوين';
$messages['sourceisreadonly'] = 'لا يمكن تعديل مصدر العنوان هذا';
$messages['errorsavingcontact'] = 'تعذر حفظ عنوان المراسل';
+$messages['movingmessage'] = 'جاري نقل الرسالة...';
+$messages['receiptsent'] = 'أرسل إيصال الاستلام بنجاح';
+$messages['errorsendingreceipt'] = 'تعذر إرسال إيصال الاستلام';
+$messages['nodeletelastidentity'] = 'لا يمكن حذف هذا السجل حيث أنه الوحيد المتبقي.';
+$messages['addsubfolderhint'] = 'سيتم إنشاء هذا المجلد كمجلد فرعي للمحدد.';
?>
\ No newline at end of file
-<?php\r
-\r
-/*\r
-\r
- +-----------------------------------------------------------------------+\r
- | language/bg/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2007 RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Todor Dragnev <todor.dragnev@gmail.com> |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$labels = array();\r
-$labels['welcome'] = 'Добре дошли в $product';\r
-$labels['username'] = 'Потребител';\r
-$labels['password'] = 'Парола';\r
-$labels['server'] = 'Сървър';\r
-$labels['login'] = 'Вход';\r
-$labels['logout'] = 'Изход';\r
-$labels['mail'] = 'Кутия';\r
-$labels['settings'] = 'Настройки';\r
-$labels['addressbook'] = 'Адреси';\r
-$labels['inbox'] = 'Входящи';\r
-$labels['drafts'] = 'Чернови';\r
-$labels['sent'] = 'Изпратени';\r
-$labels['trash'] = 'Кошче';\r
-$labels['junk'] = 'Спам';\r
-$labels['subject'] = 'Заглавие';\r
-$labels['from'] = 'От';\r
-$labels['to'] = 'Получател';\r
-$labels['cc'] = 'Копие до';\r
-$labels['bcc'] = 'Скрито копие до';\r
-$labels['replyto'] = 'Отговор на';\r
-$labels['date'] = 'Дата';\r
-$labels['size'] = 'Размер';\r
-$labels['priority'] = 'Приоритет';\r
-$labels['organization'] = 'Организация';\r
-$labels['reply-to'] = 'Отговор на';\r
-$labels['mailboxlist'] = 'Папки';\r
-$labels['messagesfromto'] = 'Съобщения $from до $to от $count';\r
-$labels['messagenrof'] = 'Съобщение $nr от $count';\r
-$labels['moveto'] = 'премести в...';\r
-$labels['download'] = 'изтегли';\r
-$labels['filename'] = 'Име на файла';\r
-$labels['filesize'] = 'Размер на файла';\r
-$labels['preferhtml'] = 'Показвай първо HTML версия';\r
-$labels['htmlmessage'] = 'HTML съобщение';\r
-$labels['prettydate'] = 'Кратки дати';\r
-$labels['addtoaddressbook'] = 'Добави в адресната книга';\r
-$labels['sun'] = 'Нед';\r
-$labels['mon'] = 'Пон';\r
-$labels['tue'] = 'Вто';\r
-$labels['wed'] = 'Сря';\r
-$labels['thu'] = 'Чет';\r
-$labels['fri'] = 'Пет';\r
-$labels['sat'] = 'Съб';\r
-$labels['sunday'] = 'Неделя';\r
-$labels['monday'] = 'Понеделник';\r
-$labels['tuesday'] = 'Вторник';\r
-$labels['wednesday'] = 'Сряда';\r
-$labels['thursday'] = 'Четвъртък';\r
-$labels['friday'] = 'Петък';\r
-$labels['saturday'] = 'Събота';\r
-$labels['today'] = 'Днес';\r
-$labels['checkmail'] = 'Провери за нови писма';\r
-$labels['writenewmessage'] = 'Създай ново писмо';\r
-$labels['replytomessage'] = 'Отговори на писмото';\r
-$labels['replytoallmessage'] = 'Отговори до всички получатели';\r
-$labels['forwardmessage'] = 'Препрати писмото';\r
-$labels['deletemessage'] = 'Премести писмото в кошчето';\r
-$labels['printmessage'] = 'Разпечатай писмото';\r
-$labels['previousmessage'] = 'Предно писмо';\r
-$labels['previousmessages'] = 'Предна страница';\r
-$labels['firstmessage'] = 'Първо писмо';\r
-$labels['firstmessages'] = 'Първа страница';\r
-$labels['nextmessage'] = 'Следващо писмо';\r
-$labels['nextmessages'] = 'Следваща страница';\r
-$labels['lastmessage'] = 'Последно писмо';\r
-$labels['lastmessages'] = 'Последна страница';\r
-$labels['backtolist'] = 'Обратно към списъка';\r
-$labels['viewsource'] = 'Виж кода';\r
-$labels['select'] = 'Избери';\r
-$labels['all'] = 'Всички';\r
-$labels['none'] = 'Нищо';\r
-$labels['unread'] = 'Нови';\r
-$labels['compact'] = 'Свий';\r
-$labels['empty'] = 'Изпразни';\r
-$labels['purge'] = 'Изчисти';\r
-$labels['quota'] = 'Използвано място';\r
-$labels['unknown'] = 'няма информация';\r
-$labels['unlimited'] = 'няма ограничение';\r
-$labels['quicksearch'] = 'Бързо търсене';\r
-$labels['resetsearch'] = 'Изчисти търсенето и покажи всички писма';\r
-$labels['compose'] = 'Ново писмо';\r
-$labels['sendmessage'] = 'Изпрати писмото';\r
-$labels['savemessage'] = 'Запиши в Чернови';\r
-$labels['addattachment'] = 'Прикачи файл';\r
-$labels['charset'] = 'Charset';\r
-$labels['editortype'] = 'Вид редактор';\r
-$labels['returnreceipt'] = 'Обратна разписка';\r
-$labels['checkspelling'] = 'Проверка на правописа';\r
-$labels['resumeediting'] = 'Продължи черновата';\r
-$labels['revertto'] = 'Върни се към';\r
-$labels['attachments'] = 'Прикачени файлове';\r
-$labels['upload'] = 'Качи';\r
-$labels['close'] = 'Затвори';\r
-$labels['low'] = '**';\r
-$labels['lowest'] = '*';\r
-$labels['normal'] = '***';\r
-$labels['high'] = '****';\r
-$labels['highest'] = '*****';\r
-$labels['nosubject'] = '(няма заглавие)';\r
-$labels['showimages'] = 'Виж изображенията';\r
-$labels['htmltoggle'] = 'HTML';\r
-$labels['plaintoggle'] = 'тесктов';\r
-$labels['name'] = 'Прякор';\r
-$labels['firstname'] = 'Име';\r
-$labels['surname'] = 'Фамилия';\r
-$labels['email'] = 'E-Mail';\r
-$labels['addcontact'] = 'Добави';\r
-$labels['editcontact'] = 'Редактирай';\r
-$labels['edit'] = 'Редактирай';\r
-$labels['cancel'] = 'Отказ';\r
-$labels['save'] = 'Запиши';\r
-$labels['delete'] = 'Изтрии';\r
-$labels['newcontact'] = 'Нов контакт';\r
-$labels['deletecontact'] = 'Изтрии маркираните контакти';\r
-$labels['composeto'] = 'Напиши писмо до';\r
-$labels['contactsfromto'] = 'Контакти $from до $to от $count';\r
-$labels['print'] = 'Разпечатай';\r
-$labels['export'] = 'Експорт';\r
-$labels['previouspage'] = 'Предна страница';\r
-$labels['firstpage'] = 'Първа страница';\r
-$labels['nextpage'] = 'Следваща страница';\r
-$labels['lastpage'] = 'Последна страница';\r
-$labels['groups'] = 'Групи';\r
-$labels['personaladrbook'] = 'Лични адреси';\r
-$labels['settingsfor'] = 'Настройки за';\r
-$labels['preferences'] = 'Настройки';\r
-$labels['userpreferences'] = 'Потребителски настройки';\r
-$labels['editpreferences'] = 'Редактирай потребителските настройки';\r
-$labels['identities'] = 'Самоличност';\r
-$labels['manageidentities'] = 'Промяна на самоличностите за този акаунт';\r
-$labels['newidentity'] = 'Нова самоличност';\r
-$labels['newitem'] = 'Нова самоличност';\r
-$labels['edititem'] = 'Редактиране на самоличност';\r
-$labels['setdefault'] = 'По подразбиране';\r
-$labels['language'] = 'Език';\r
-$labels['timezone'] = 'Часова зона';\r
-$labels['pagesize'] = 'Редове на страница';\r
-$labels['signature'] = 'Подпис';\r
-$labels['dstactive'] = 'Маркирай при лятно време';\r
-$labels['htmleditor'] = 'Писане на HTML съобщения';\r
-$labels['htmlsignature'] = 'HTML подпис';\r
-$labels['previewpane'] = 'Панел за преглед';\r
-$labels['autosavedraft'] = 'Автоматично записвай чернова';\r
-$labels['everynminutes'] = 'всеки $n минути';\r
-$labels['never'] = 'никога';\r
-$labels['folder'] = 'Папка';\r
-$labels['folders'] = 'Папки';\r
-$labels['foldername'] = 'Име на папката';\r
-$labels['subscribed'] = 'Използвай';\r
-$labels['create'] = 'Създай';\r
-$labels['createfolder'] = 'Направи нова папка';\r
-$labels['rename'] = 'Преименувай';\r
-$labels['renamefolder'] = 'Преименувай папката';\r
-$labels['deletefolder'] = 'Изтрий';\r
-$labels['managefolders'] = 'Настройки на папките';\r
-$labels['sortby'] = 'Сортирай по';\r
-$labels['sortasc'] = 'Сортирай възходящо';\r
-$labels['sortdesc'] = 'Сортирай низходящо';\r
-\r
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/bg/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Todor Dragnev <todor.dragnev@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Добре дошли в $product';
+$labels['username'] = 'Потребител';
+$labels['password'] = 'Парола';
+$labels['server'] = 'Сървър';
+$labels['login'] = 'Вход';
+$labels['logout'] = 'Изход';
+$labels['mail'] = 'Кутия';
+$labels['settings'] = 'Настройки';
+$labels['addressbook'] = 'Адреси';
+$labels['inbox'] = 'Входящи';
+$labels['drafts'] = 'Чернови';
+$labels['sent'] = 'Изпратени';
+$labels['trash'] = 'Кошче';
+$labels['junk'] = 'Спам';
+$labels['subject'] = 'Заглавие';
+$labels['from'] = 'От';
+$labels['to'] = 'Получател';
+$labels['cc'] = 'Копие до';
+$labels['bcc'] = 'Скрито копие до';
+$labels['replyto'] = 'Отговор на';
+$labels['date'] = 'Дата';
+$labels['size'] = 'Размер';
+$labels['priority'] = 'Приоритет';
+$labels['organization'] = 'Организация';
+$labels['reply-to'] = 'Отговор на';
+$labels['mailboxlist'] = 'Папки';
+$labels['messagesfromto'] = 'Съобщения $from до $to от $count';
+$labels['messagenrof'] = 'Съобщение $nr от $count';
+$labels['moveto'] = 'премести в...';
+$labels['download'] = 'изтегли';
+$labels['filename'] = 'Име на файла';
+$labels['filesize'] = 'Размер на файла';
+$labels['preferhtml'] = 'Показвай първо HTML версия';
+$labels['htmlmessage'] = 'HTML съобщение';
+$labels['prettydate'] = 'Кратки дати';
+$labels['addtoaddressbook'] = 'Добави в адресната книга';
+$labels['sun'] = 'Нед';
+$labels['mon'] = 'Пон';
+$labels['tue'] = 'Вто';
+$labels['wed'] = 'Сря';
+$labels['thu'] = 'Чет';
+$labels['fri'] = 'Пет';
+$labels['sat'] = 'Съб';
+$labels['sunday'] = 'Неделя';
+$labels['monday'] = 'Понеделник';
+$labels['tuesday'] = 'Вторник';
+$labels['wednesday'] = 'Сряда';
+$labels['thursday'] = 'Четвъртък';
+$labels['friday'] = 'Петък';
+$labels['saturday'] = 'Събота';
+$labels['today'] = 'Днес';
+$labels['checkmail'] = 'Провери за нови писма';
+$labels['writenewmessage'] = 'Създай ново писмо';
+$labels['replytomessage'] = 'Отговори на писмото';
+$labels['replytoallmessage'] = 'Отговори до всички получатели';
+$labels['forwardmessage'] = 'Препрати писмото';
+$labels['deletemessage'] = 'Изтрий писмото';
+$labels['movemessagetotrash'] = 'Премести писмото в кошчето';
+$labels['printmessage'] = 'Разпечатай писмото';
+$labels['previousmessage'] = 'Предно писмо';
+$labels['previousmessages'] = 'Предна страница';
+$labels['firstmessage'] = 'Първо писмо';
+$labels['firstmessages'] = 'Първа страница';
+$labels['nextmessage'] = 'Следващо писмо';
+$labels['nextmessages'] = 'Следваща страница';
+$labels['lastmessage'] = 'Последно писмо';
+$labels['lastmessages'] = 'Последна страница';
+$labels['backtolist'] = 'Обратно към списъка';
+$labels['viewsource'] = 'Виж кода';
+$labels['markmessages'] = 'Маркирай писмата';
+$labels['markread'] = 'Като прочетени';
+$labels['markunread'] = 'Като нови';
+$labels['select'] = 'Избери';
+$labels['all'] = 'Всички';
+$labels['none'] = 'Нищо';
+$labels['unread'] = 'Нови';
+$labels['compact'] = 'Свий';
+$labels['empty'] = 'Изпразни';
+$labels['purge'] = 'Изчисти';
+$labels['quota'] = 'Използвано място';
+$labels['unknown'] = 'няма информация';
+$labels['unlimited'] = 'няма ограничение';
+$labels['quicksearch'] = 'Бързо търсене';
+$labels['resetsearch'] = 'Изчисти търсенето и покажи всички писма';
+$labels['compose'] = 'Ново писмо';
+$labels['savemessage'] = 'Запиши в Чернови';
+$labels['sendmessage'] = 'Изпрати писмото';
+$labels['addattachment'] = 'Прикачи файл';
+$labels['charset'] = 'Кодировка';
+$labels['editortype'] = 'Вид редактор';
+$labels['returnreceipt'] = 'Обратна разписка';
+$labels['checkspelling'] = 'Провери правописа';
+$labels['resumeediting'] = 'Продължи черновата';
+$labels['revertto'] = 'Върни се към';
+$labels['attachments'] = 'Прикачени файлове';
+$labels['upload'] = 'Качи';
+$labels['close'] = 'Затвори';
+$labels['low'] = '**';
+$labels['lowest'] = '*';
+$labels['normal'] = '***';
+$labels['high'] = '****';
+$labels['highest'] = '*****';
+$labels['nosubject'] = '(няма заглавие)';
+$labels['showimages'] = 'Виж изображенията';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'текстов';
+$labels['addcc'] = 'Копие до';
+$labels['addbcc'] = 'Скрито копие до';
+$labels['addreplyto'] = 'Отговор на';
+$labels['mdnrequest'] = 'Подателят на писмото е пожелал да бъде уведомен, че сте го прочели. Желаете ли да изпратите обратна разписка?';
+$labels['receiptread'] = 'Обратна разписка (прочетено)';
+$labels['yourmessage'] = 'Това е обратна разписка за писмото Ви';
+$labels['receiptnote'] = 'Забележка: Тази разписка потвърждава само, че писмото е било показано на компютъра на получателят. Няма никаква гаранция, че получателят е прочел и/или разбрал съдържанието на писмото.';
+$labels['name'] = 'Кратко име';
+$labels['firstname'] = 'Име';
+$labels['surname'] = 'Фамилия';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Добави';
+$labels['editcontact'] = 'Редактирай';
+$labels['edit'] = 'Редактирай';
+$labels['cancel'] = 'Отказ';
+$labels['save'] = 'Запиши';
+$labels['delete'] = 'Изтрий';
+$labels['newcontact'] = 'Нов контакт';
+$labels['deletecontact'] = 'Изтрий маркираните контакти';
+$labels['composeto'] = 'Напиши писмо до';
+$labels['contactsfromto'] = 'Контакти $from до $to от $count';
+$labels['print'] = 'Разпечатай';
+$labels['export'] = 'Експортиране';
+$labels['previouspage'] = 'Предна страница';
+$labels['firstpage'] = 'Първа страница';
+$labels['nextpage'] = 'Следваща страница';
+$labels['lastpage'] = 'Последна страница';
+$labels['groups'] = 'Групи';
+$labels['personaladrbook'] = 'Лични адреси';
+$labels['settingsfor'] = 'Настройки за';
+$labels['preferences'] = 'Настройки';
+$labels['userpreferences'] = 'Потребителски настройки';
+$labels['editpreferences'] = 'Редактирай потребителските настройки';
+$labels['identities'] = 'Самоличност';
+$labels['manageidentities'] = 'Промяна на самоличностите за този акаунт';
+$labels['newidentity'] = 'Нова самоличност';
+$labels['newitem'] = 'Нова самоличност';
+$labels['edititem'] = 'Редактиране на самоличност';
+$labels['setdefault'] = 'По подразбиране';
+$labels['language'] = 'Език';
+$labels['timezone'] = 'Часова зона';
+$labels['pagesize'] = 'Редове на страница';
+$labels['signature'] = 'Подпис';
+$labels['dstactive'] = 'Маркирай при лятно време';
+$labels['htmleditor'] = 'Писане на HTML съобщения';
+$labels['htmlsignature'] = 'HTML подпис';
+$labels['previewpane'] = 'Панел за преглед';
+$labels['autosavedraft'] = 'Автоматично записвай чернова';
+$labels['everynminutes'] = 'всеки $n минути';
+$labels['never'] = 'никога';
+$labels['folder'] = 'Папка';
+$labels['folders'] = 'Папки';
+$labels['foldername'] = 'Име на папката';
+$labels['subscribed'] = 'Използвай';
+$labels['messagecount'] = 'Писма';
+$labels['create'] = 'Създай';
+$labels['createfolder'] = 'Направи нова папка';
+$labels['rename'] = 'Преименувай';
+$labels['renamefolder'] = 'Преименувай папката';
+$labels['deletefolder'] = 'Изтрий';
+$labels['managefolders'] = 'Настройки на папките';
+$labels['sortby'] = 'Сортирай по';
+$labels['sortasc'] = 'Сортирай възходящо';
+$labels['sortdesc'] = 'Сортирай низходящо';
+
?>
\ No newline at end of file
-<?php\r
-\r
-/*\r
-\r
- +-----------------------------------------------------------------------+\r
- | language/bg/messages.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2007 RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Todor Dragnev <todor.dragnev@gmail.com> |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$messages = array();\r
-$messages['loginfailed'] = 'Вход неуспешен';\r
-$messages['cookiesdisabled'] = 'Вашия браузър не приема cookies';\r
-$messages['sessionerror'] = 'Невалидна или изтекла сесия';\r
-$messages['imaperror'] = 'Свързване към IMAP сървъра е неуспешно';\r
-$messages['nomessagesfound'] = 'Няма съобщения';\r
-$messages['loggedout'] = 'Довиждане!';\r
-$messages['mailboxempty'] = 'Папката е празна';\r
-$messages['loading'] = 'Зареждане...';\r
-$messages['loadingdata'] = 'Зареждане на данни...';\r
-$messages['checkingmail'] = 'Проверка за нови писма...';\r
-$messages['sendingmessage'] = 'Изпращане на писмото...';\r
-$messages['messagesent'] = 'Писмото е изпратено успешно';\r
-$messages['savingmessage'] = 'Записване на писмото...';\r
-$messages['messagesaved'] = 'Писмото е записано в Чернови';\r
-$messages['successfullysaved'] = 'Записано';\r
-$messages['addedsuccessfully'] = 'Контакта е добавен в адресната книга';\r
-$messages['contactexists'] = 'Контакт с този e-mail адрес вече същестува';\r
-$messages['blockedimages'] = 'С оглед на Вашата сигурност, изображенията в това писмо са блокирани .';\r
-$messages['encryptedmessage'] = 'Това е кодирано писмо и не може да бъде показано. Съжаляваме!';\r
-$messages['nocontactsfound'] = 'Няма контакти';\r
-$messages['contactnotfound'] = 'Исканият контакт не е намерен';\r
-$messages['sendingfailed'] = 'Изпращането неуспешно';\r
-$messages['errorsaving'] = 'Възникна грешка при записването';\r
-$messages['errormoving'] = 'Писмото не може да бъде преместено';\r
-$messages['errordeleting'] = 'Писмото не може да бъде изтрито';\r
-$messages['deletecontactconfirm'] = 'Искате ли да изтриете маркираните контакти?';\r
-$messages['deletemessagesconfirm'] = 'Искате ли да изтриете маркираните съобщения?';\r
-$messages['deletefolderconfirm'] = 'Искате ли да изтриете тази папка?';\r
-$messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?';\r
-$messages['formincomplete'] = 'Не сте попълнили всички полета';\r
-$messages['noemailwarning'] = 'Моля въведете валиден e-mail адрес';\r
-$messages['nonamewarning'] = 'Моля въведете име';\r
-$messages['nopagesizewarning'] = 'Въведете брой редове на страница';\r
-$messages['norecipientwarning'] = 'Въведете поне един получател';\r
-$messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Искате ли да въведете ново заглавие?';\r
-$messages['nobodywarning'] = 'Изпрати това писмо без текст?';\r
-$messages['notsentwarning'] = 'Писмото не е изпратено. Искате ли да бъде унищожено?';\r
-$messages['noldapserver'] = 'Изберете LDAP сървър за търсене';\r
-$messages['nocontactsreturned'] = 'Не са намерени контакти';\r
-$messages['nosearchname'] = 'Моля въведете Име на контакта или e-mail адрес';\r
-$messages['searchsuccessful'] = '$nr намерени писма';\r
-$messages['searchnomatch'] = 'Търсенето не откри съвпадения';\r
-$messages['searching'] = 'Търсене...';\r
-$messages['checking'] = 'Проверка...';\r
-$messages['nospellerrors'] = 'Не са открити правописни грешки';\r
-$messages['folderdeleted'] = 'Папката е изтрита';\r
-$messages['deletedsuccessfully'] = 'Изтриването е успешно';\r
-$messages['converting'] = 'Премахване форматирането на писмото...';\r
-$messages['messageopenerror'] = 'Писмото не може да бъде заредено от сървъра';\r
-$messages['fileuploaderror'] = 'Грешка при прикачването на файла';\r
-$messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size';\r
-$messages['copysuccess'] = 'Успешно копирани $nr адреса';\r
-$messages['copyerror'] = 'Грешка при копирането на адресите';\r
-$messages['sourceisreadonly'] = 'Този източник на адреси е само за четене';\r
-$messages['errorsavingcontact'] = 'Грешка при записването на адреса';\r
-\r
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/bg/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Todor Dragnev <todor.dragnev@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Вход неуспешен';
+$messages['cookiesdisabled'] = 'Вашият браузър не приема cookies';
+$messages['sessionerror'] = 'Невалидна или изтекла сесия';
+$messages['imaperror'] = 'Неуспешно свързване към IMAP сървъра';
+$messages['nomessagesfound'] = 'Няма съобщения';
+$messages['loggedout'] = 'Довиждане!';
+$messages['mailboxempty'] = 'Папката е празна';
+$messages['loading'] = 'Зареждане...';
+$messages['loadingdata'] = 'Зареждане на данни...';
+$messages['checkingmail'] = 'Проверка за нови писма...';
+$messages['sendingmessage'] = 'Изпращане на писмото...';
+$messages['messagesent'] = 'Писмото е изпратено успешно';
+$messages['savingmessage'] = 'Записване на писмото...';
+$messages['messagesaved'] = 'Писмото е записано в Чернови';
+$messages['successfullysaved'] = 'Записано';
+$messages['addedsuccessfully'] = 'Контакта е добавен в адресната книга';
+$messages['contactexists'] = 'Контакт с този e-mail адрес вече същестува';
+$messages['blockedimages'] = 'С оглед на Вашата сигурност, изображенията в това писмо са блокирани.';
+$messages['encryptedmessage'] = 'Това е кодирано писмо и не може да бъде показано. Съжаляваме!';
+$messages['nocontactsfound'] = 'Няма контакти';
+$messages['contactnotfound'] = 'Исканият контакт не е намерен';
+$messages['sendingfailed'] = 'Изпращането неуспешно';
+$messages['errorsaving'] = 'Възникна грешка при записването';
+$messages['errormoving'] = 'Писмото не може да бъде преместено';
+$messages['errordeleting'] = 'Писмото не може да бъде изтрито';
+$messages['deletecontactconfirm'] = 'Искате ли да изтриете маркираните контакти?';
+$messages['deletemessagesconfirm'] = 'Искате ли да изтриете маркираните съобщения?';
+$messages['deletefolderconfirm'] = 'Искате ли да изтриете тази папка?';
+$messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?';
+$messages['formincomplete'] = 'Не сте попълнили всички полета';
+$messages['noemailwarning'] = 'Моля, въведете валиден e-mail адрес';
+$messages['nonamewarning'] = 'Моля, въведете име';
+$messages['nopagesizewarning'] = 'Въведете брой редове на страница';
+$messages['norecipientwarning'] = 'Въведете поне един получател';
+$messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Искате ли да въведете заглавие?';
+$messages['nobodywarning'] = 'Изпрати това писмо без текст?';
+$messages['notsentwarning'] = 'Писмото не е изпратено. Искате ли да бъде унищожено?';
+$messages['noldapserver'] = 'Изберете LDAP сървър за търсене';
+$messages['nocontactsreturned'] = 'Не са намерени контакти';
+$messages['nosearchname'] = 'Моля, въведете Име на контакта или e-mail адрес';
+$messages['searchsuccessful'] = '$nr намерени писма';
+$messages['searchnomatch'] = 'Търсенето не откри съвпадения';
+$messages['searching'] = 'Търсене...';
+$messages['checking'] = 'Проверка...';
+$messages['nospellerrors'] = 'Не са открити правописни грешки';
+$messages['folderdeleted'] = 'Папката е изтрита';
+$messages['deletedsuccessfully'] = 'Изтриването е успешно';
+$messages['converting'] = 'Премахване форматирането на писмото...';
+$messages['messageopenerror'] = 'Писмото не може да бъде заредено от сървъра';
+$messages['fileuploaderror'] = 'Грешка при прикачването на файла';
+$messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size';
+$messages['copysuccess'] = 'Успешно копирани $nr адреса';
+$messages['copyerror'] = 'Грешка при копирането на адресите';
+$messages['sourceisreadonly'] = 'Този източник на адреси е само за четене';
+$messages['errorsavingcontact'] = 'Грешка при записването на адреса';
+$messages['movingmessage'] = 'Преместване на писмото...';
+$messages['receiptsent'] = 'Обратната разписка е изпратена.';
+$messages['errorsendingreceipt'] = 'Грешка при изпращането на обратна разписка.';
+$messages['nodeletelastidentity'] = 'Не можете да изтриете тази самоличност, трябва да имате поне една.';
+$messages['addsubfolderhint'] = 'Тази папка ще бъде създадена като подпапка на текущо избраната';
+
?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/bs_BA/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Begzudin Omerovic <Begzudin.Omerovic@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = 'Dobrodošli na $product';
+$labels['username'] = 'Korisničko ime';
+$labels['password'] = 'Lozinka';
+$labels['server'] = 'Server';
+$labels['login'] = 'Prijava';
+
+// taskbar
+$labels['logout'] = 'Odjava';
+$labels['mail'] = 'Sanduče';
+$labels['settings'] = 'Podešavanja';
+$labels['addressbook'] = 'Imenik';
+
+// mailbox names
+$labels['inbox'] = 'Inbox';
+$labels['drafts'] = 'Drafts';
+$labels['sent'] = 'Poslano';
+$labels['trash'] = 'Trash';
+$labels['junk'] = 'Junk';
+
+// message listing
+$labels['subject'] = 'Naslov';
+$labels['from'] = 'Od';
+$labels['to'] = 'Za';
+$labels['cc'] = 'Cc';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Reply-To';
+$labels['date'] = 'Datum';
+$labels['size'] = 'Veličina';
+$labels['priority'] = 'Prioritet';
+$labels['organization'] = 'Organizacija';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'Fascikle';
+$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count';
+$labels['messagenrof'] = 'Poruka broj $nr od $count';
+
+$labels['moveto'] = 'prebaci u...';
+$labels['download'] = 'preuzmi (download)';
+
+$labels['filename'] = 'Ime datoteke';
+$labels['filesize'] = 'Veličina datoteke';
+
+$labels['preferhtml'] = 'HTML format u prednosti';
+$labels['htmlmessage'] = 'HTML format poruke';
+$labels['prettydate'] = 'Formatiran datum';
+
+$labels['addtoaddressbook'] = 'Dodaj u imenik';
+
+// weekdays short
+$labels['sun'] = 'Ned';
+$labels['mon'] = 'Pon';
+$labels['tue'] = 'Uto';
+$labels['wed'] = 'Sri';
+$labels['thu'] = 'Čet';
+$labels['fri'] = 'Pet';
+$labels['sat'] = 'Sub';
+
+// weekdays long
+$labels['sunday'] = 'Nedjelja';
+$labels['monday'] = 'Ponedjeljak';
+$labels['tuesday'] = 'Utorak';
+$labels['wednesday'] = 'Srijeda';
+$labels['thursday'] = 'Četvrtak';
+$labels['friday'] = 'Petak';
+$labels['saturday'] = 'Subota';
+
+$labels['today'] = 'danas';
+
+// toolbar buttons
+$labels['checkmail'] = 'Provjera novih poruka';
+$labels['writenewmessage'] = 'Nova poruka';
+$labels['replytomessage'] = 'Odgovori na poruku';
+$labels['replytoallmessage'] = 'Odgovori pošiljaocu i svim primaocima';
+$labels['forwardmessage'] = 'Proslijedi poruku';
+$labels['deletemessage'] = 'Prebaci poruku u korpu (Trash)';
+$labels['printmessage'] = 'Odštampaj poruku';
+$labels['previousmessage'] = 'Prikaži prethodnu poruku';
+$labels['previousmessages'] = 'Prikaži prethodni skup poruka';
+$labels['nextmessages'] = 'Prikaži sljedeći skup poruka';
+$labels['lastmessage'] = 'Prikaži zadnju poruku';
+$labels['lastmessages'] = 'Prikaži zadnji skup poruka';
+$labels['backtolist'] = 'Povratak na listu poruka';
+$labels['viewsource'] = 'Prikaži poruku u izvornom obliku';
+
+$labels['select'] = 'Obilježi';
+$labels['all'] = 'Sve';
+$labels['none'] = 'Nijednu';
+$labels['unread'] = 'Nepročitane';
+
+$labels['compact'] = 'Skraćeno';
+$labels['empty'] = 'Izprazni';
+$labels['purge'] = 'Očisti';
+
+$labels['quota'] = 'Kvota';
+$labels['unknown'] = 'nepoznato';
+$labels['unlimited'] = 'beskonačna';
+
+$labels['quicksearch'] = 'Brza pretraga';
+$labels['resetsearch'] = 'Prikaži sve poruke';
+
+
+// message compose
+$labels['compose'] = 'Nova poruka';
+$labels['savemessage'] = 'Sačuvaj u \'Drafts\'';
+$labels['sendmessage'] = 'Pošalji poruku';
+$labels['addattachment'] = 'Priloži datoteku';
+$labels['charset'] = 'Skup znakova';
+$labels['editortype'] = 'Vrsta editora';
+$labels['returnreceipt'] = 'Potvrda o prispijeću poruke';
+
+$labels['checkspelling'] = 'Provjera pravopisa';
+$labels['resumeediting'] = 'Povratak u režim pisanja';
+$labels['revertto'] = 'Vrati na';
+
+$labels['attachments'] = 'Dodatci (Attachments)';
+$labels['upload'] = 'Dodaj';
+$labels['close'] = 'Zatvori';
+
+$labels['low'] = 'Nizak';
+$labels['lowest'] = 'Najniži';
+$labels['normal'] = 'Srednji';
+$labels['high'] = 'Visok';
+$labels['highest'] = 'Najviši';
+
+$labels['nosubject'] = '(bez naslova)';
+$labels['showimages'] = 'Prikaži slike';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Običan tekst';
+
+// address boook
+$labels['name'] = 'Puno ime';
+$labels['firstname'] = 'Ime';
+$labels['surname'] = 'Prezime';
+$labels['email'] = 'E-Mail';
+
+$labels['addcontact'] = 'Dodaj novi kontakt';
+$labels['editcontact'] = 'Izmijeni kontakt';
+
+$labels['edit'] = 'Izmijeni';
+$labels['cancel'] = 'Otkaži';
+$labels['save'] = 'Sačuvaj';
+$labels['delete'] = 'Obriši';
+
+$labels['newcontact'] = 'Dodaj novi kontakt';
+$labels['deletecontact'] = 'Obriši odabrane kontakte';
+$labels['composeto'] = 'Napiši mail...';
+$labels['contactsfromto'] = 'Kontakti od $from do $to od ukupno $count';
+$labels['print'] = 'Štampaj';
+$labels['export'] = 'Izvezi';
+
+$labels['previouspage'] = 'Prikaži predhodnu stranicu';
+$labels['firstpage'] = 'Prikaži prvi skup';
+$labels['nextpage'] = 'Prikaži sljedeću stranicu';
+$labels['lastpage'] = 'Prikaži zadnji skup';
+
+// LDAP search
+$labels['ldapsearch'] = 'Pretraga LDAP imenika';
+
+$labels['ldappublicsearchname'] = 'Ime kontakta';
+$labels['ldappublicsearchtype'] = 'Potpuna fraza?';
+$labels['ldappublicserverselect'] = 'Odaberi servere';
+$labels['ldappublicsearchfield'] = 'Pretraži na';
+$labels['ldappublicsearchform'] = 'Pretraži kontakte';
+$labels['ldappublicsearch'] = 'Pretraga';
+
+
+// settings
+$labels['settingsfor'] = 'Podešavanja za';
+
+$labels['preferences'] = 'Podešavanja';
+$labels['userpreferences'] = 'Opšta podešavanja';
+$labels['editpreferences'] = 'Izmjena opštih podešavanja';
+
+$labels['identities'] = 'Identiteti';
+$labels['manageidentities'] = 'Podesi identitete za ovaj nalog';
+$labels['newidentity'] = 'Dodaj identitet';
+
+$labels['newitem'] = 'New item';
+$labels['edititem'] = 'Edit item';
+
+$labels['setdefault'] = 'Postavi glavnim';
+$labels['language'] = 'Jezik';
+$labels['timezone'] = 'Vremenska zona';
+$labels['pagesize'] = 'Redova po stranici';
+$labels['signature'] = 'Potpis';
+$labels['dstactive'] = 'Ljetno pomjeranje vremena';
+
+$labels['htmleditor']= 'Pisi HTML poruke';
+$labels['htmlsignature'] ='HTML potpis';
+$labels['previewpane'] ='Pokaži prethodu poruku';
+$labels['autosavedraft'] ='Automatski spasi predlozak';
+$labels['everynminutes'] ='svakih $n minuta';
+$labels['never'] ='nikada';
+
+$labels['folder'] = 'Fascikla';
+$labels['folders'] = 'Fascikle';
+$labels['foldername'] = 'Ime fascikle';
+$labels['subscribed'] = 'Pretplaćen';
+$labels['create'] = 'Napravi';
+$labels['createfolder'] = 'Napravi novu fasciklu';
+$labels['rename'] = 'Preimenuj';
+$labels['renamefolder'] = 'Preimenuj fasciklu';
+$labels['deletefolder'] = 'Obriši fasciklu';
+$labels['managefolders'] = 'Podesi fasciklu';
+
+$labels['sortby'] = 'Sortiraj po';
+$labels['sortasc'] = 'Sortiraj rastućim nizom';
+$labels['sortdesc'] = 'Sortiraj opadajućim nizom';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/bs_BA/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Begzudin Omerovic <Begzudin.Omerovic@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Prijava neuspješna';
+$messages['cookiesdisabled'] = 'Vaš pretraživač ne podržava kolačiće (cookies)';
+$messages['sessionerror'] = 'Sesija nije validna ili je istekla';
+$messages['imaperror'] = 'Neuspješna konekcija na IMAP server';
+$messages['nomessagesfound'] = 'Nema poruka u sandučetu';
+$messages['loggedout'] = 'Uspješno ste se odjavili.';
+$messages['mailboxempty'] = 'Sanduče je prazno';
+$messages['loading'] = 'Učitavanje...';
+$messages['loadingdata'] = 'Učitavanje podataka...';
+$messages['checkingmail'] = 'Provjera novih poruka u toku...';
+$messages['sendingmessage'] = 'Poruka se šalje...';
+$messages['messagesent'] = 'Poruka je uspješno poslana';
+$messages['savingmessage'] = 'Poruka se snima...';
+$messages['messagesaved'] = 'Poruka uspješno sačuvana u \'Drafts\'';
+$messages['successfullysaved'] = 'Snimanje uspješno obavljeno';
+$messages['addedsuccessfully'] = 'Kontakt uspješno dodat u imenik';
+$messages['contactexists'] = 'Kontakt sa ovom e-mail adresom već postoji u imeniku';
+$messages['blockedimages'] = 'Zbog zaštite privatnosti, slike sa drugih servera su blokirane.';
+$messages['encryptedmessage'] = 'Ova poruka je šifrovana pa se ne može prikazati';
+$messages['nocontactsfound'] = 'Imenik je prazan';
+$messages['sendingfailed'] = 'Greška pri slanju poruke';
+$messages['errorsaving'] = 'Greška pri snimanju';
+$messages['errormoving'] = 'Greška pri premještanju poruke';
+$messages['errordeleting'] = 'Greška pri brisanju poruke';
+$messages['deletecontactconfirm'] = 'Da li želite da obrišete izabrane kontakte?';
+$messages['deletemessagesconfirm'] = 'Da li stvarno želite izbrisati poruku(e)?';
+$messages['deletefolderconfirm'] = 'Da li zaista želite da obrišete ovu fasciklu?';
+$messages['purgefolderconfirm'] = 'Da li zaista želite da obrišete sve poruke u fascikli?';
+$messages['formincomplete'] = 'Forma nije u cijelosti popunjena';
+$messages['noemailwarning'] = 'Unesite ispravnu e-mail adresu';
+$messages['nonamewarning'] = 'Unesite ime';
+$messages['nopagesizewarning'] = 'Unesite veličinu stranice';
+$messages['norecipientwarning'] = 'Unesite primaoca / primaoce (ZA)';
+$messages['nosubjectwarning'] = 'Polje \'Naslov\' je prazno. Želite li da unesete naslov poruke?';
+$messages['nobodywarning'] = 'Da li želite da pošaljete poruku bez teksta?';
+$messages['notsentwarning'] = 'Poruka nije poslana. Da li želite da odbacite ovu poruku?';
+$messages['noldapserver'] = 'Unesite LDAP server za pretragu';
+$messages['nocontactsreturned'] = 'Nije pronađen ni jedan kontakt';
+$messages['nosearchname'] = 'Unesite ime ili e-mail adresu';
+$messages['searchsuccessful'] = 'Broj pronađenih poruka: $nr';
+$messages['searchnomatch'] = 'Tražena fraza nije pronađena ni u jednoj poruci';
+$messages['searching'] = 'Pretraga u toku...';
+$messages['checking'] = 'Provjera u toku...';
+$messages['nospellerrors'] = 'Nije pronađena ni jedna pravopisna greška';
+$messages['folderdeleted'] = 'Fascikla uspješno obrisana';
+$messages['deletedsuccessfully'] = 'Uspješno izbrisano';
+$messages['converting'] = 'Vračeno formatiranje iz poruke ...';
+$messages['messageopenerror'] = 'Nije učitana poruka sa servera';
+
+?>
\ No newline at end of file
| language/ca/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Simo <sim6@graciasensefils.net> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 872 2007-10-16 09:27:16Z yllar $
+ @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$labels['lastmessages'] = 'Mostrar els últims missatges';
$labels['backtolist'] = 'Tornar a la llista de missatges';
$labels['viewsource'] = 'Visualitza el codi font';
+$labels['markmessages'] = 'Marca missatges';
+$labels['markread'] = 'Com a llegits';
+$labels['markunread'] = 'Com a no llegits';
$labels['select'] = 'Seleccionar';
$labels['all'] = 'Tots';
$labels['none'] = 'Cap';
$labels['addcc'] = 'Afegir Cc';
$labels['addbcc'] = 'Afegir Bcc';
$labels['addreplyto'] = 'Afegir Reply-To';
+$labels['mdnrequest'] = 'El remitent d\'aquest missatge ha demanat ser notificat quan llegeixis aquest missatge. Vols notificar al remitent?';
+$labels['receiptread'] = 'Confirmació de recepció';
+$labels['yourmessage'] = 'Aquesta és una confirmació de recepció per al teu missatge';
+$labels['receiptnote'] = 'Nota: Aquesta confirmació solament indica que el missatge ha estat mostrat en l\'ordinador del destinatari. No hi ha garantia que el destinatari hagi llegit o entès el contingut del missatge.';
$labels['name'] = 'Nom a mostrar';
$labels['firstname'] = 'Nom';
$labels['surname'] = 'Cognom';
$labels['folders'] = 'Carpetes';
$labels['foldername'] = 'Nom de carpeta';
$labels['subscribed'] = 'Subscriure\'s';
+$labels['messagecount'] = 'Missatges';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear nova carpeta';
$labels['rename'] = 'Canvia el nom';
| language/ca/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Simo <sim6@graciasensefils.net> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 872 2007-10-16 09:27:16Z yllar $
+ @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$messages['sourceisreadonly'] = 'Aquesta adreça és només de lectura.';
$messages['errorsavingcontact'] = 'No s\'ha pogut guardar l\'adreça de contacte';
$messages['movingmessage'] = 'Movent el missatge...';
+$messages['receiptsent'] = 'Confirmació de lectura enviada satisfactòriament';
+$messages['errorsendingreceipt'] = 'No es pot enviar la confirmació';
+$messages['nodeletelastidentity'] = 'No pots eliminar aquesta identitat, és l\'última.';
+$messages['addsubfolderhint'] = 'Aquesta carpeta serà creada com a subcarpeta de la seleccionada actualment';
?>
\ No newline at end of file
| language/cz/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | All rights reserved. |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Martin Mrajca <martin@moonlake.cz> |
| joe <joe@humlak.cz> |
+ | Jiri Kaderavek <jiri.kaderavek@webstep.net> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 869 2007-10-15 13:27:08Z yllar $
+ @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$labels['lastmessages'] = 'Zobrazit poslední zprávy';
$labels['backtolist'] = 'Zpět do seznamu zpráv';
$labels['viewsource'] = 'Zobrazit zdroj';
+$labels['markmessages'] = 'Označ zprávy';
+$labels['markread'] = 'Jako přečtené';
+$labels['markunread'] = 'Jako nepřečtené';
$labels['select'] = 'Vybrat';
$labels['all'] = 'Vše';
$labels['none'] = 'Nic';
$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';
+$labels['receiptnote'] = 'Poznámka: Toto potvrzení negarantuje, že zpráva byla příjemce přečtena a že porozuměl jejímu obsahu.';
$labels['name'] = 'Zobrazit jméno';
$labels['firstname'] = 'Jméno';
$labels['surname'] = 'Příjmení';
$labels['folders'] = 'Složky';
$labels['foldername'] = 'Jméno složky';
$labels['subscribed'] = 'Vybráno';
+$labels['messagecount'] = 'Počet zpráv';
$labels['create'] = 'Vytvořit';
$labels['createfolder'] = 'Vytvořit novou složku';
$labels['rename'] = 'Přejmenovat';
| language/cz/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | All rights reserved. |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Martin Mrajca <martin@moonlake.cz> |
| joe <joe@humlak.cz> |
+ | Jiri Kaderavek <jiri.kaderavek@webstep.net> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 869 2007-10-15 13:27:08Z yllar $
+ @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$messages['sourceisreadonly'] = 'Tento zdroj adres je pouze pro čtení';
$messages['errorsavingcontact'] = 'Nemohu uložit adresu kontaktu';
$messages['movingmessage'] = 'Přesouvám zprávu...';
+$messages['receiptsent'] = 'Potvrzení o přřijetí zprávy odesláno';
+$messages['errorsendingreceipt'] = 'Potvrzení o přijetí zprávy nebylo možné odeslat';
+$messages['nodeletelastidentity'] = 'Alespoň jedna identita musí být ponechána. Identitu nelze odstranit.';
+$messages['addsubfolderhint'] = 'Tato složka bude vytvořena jako podsložka aktuálně zvolené složky';
?>
\ No newline at end of file
| language/da/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | All rights reserved. |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Martin Moeller <martin@liga.dk> |
| Søren Aggeboe <soren@aggeboe.dk> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 886 2007-10-19 07:24:53Z yllar $
+ @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
*/
$labels['server'] = 'Server';
$labels['login'] = 'Log på';
$labels['logout'] = 'Log af';
-$labels['mail'] = 'Email';
+$labels['mail'] = 'E-mail';
$labels['settings'] = 'Personlige indstillinger';
$labels['addressbook'] = 'Adressebog';
$labels['inbox'] = 'Indbakke';
$labels['lastmessages'] = 'Vis sidste sæt beskeder';
$labels['backtolist'] = 'Tilbage til beskedlisten';
$labels['viewsource'] = 'Vis rå besked';
+$labels['markmessages'] = 'Markér beskeder';
+$labels['markread'] = 'Som læst';
+$labels['markunread'] = 'Som ulæst';
$labels['select'] = 'Vælg';
$labels['all'] = 'Alle';
$labels['none'] = 'Ingen';
$labels['addcc'] = 'Tilføj Cc';
$labels['addbcc'] = 'Tilføj Bcc';
$labels['addreplyto'] = 'Tilføj Svar-Til adresse';
+$labels['mdnrequest'] = 'Afsenderen af denne besked har bedt om at modtage en bekræftelse når du læser beskeden. Vil du sende kvittering for læsning?';
+$labels['receiptread'] = 'Send kvittering for læsning';
+$labels['yourmessage'] = 'Dette er en kvittering for at din besked er blevet vist';
+$labels['receiptnote'] = 'Bemærk: Denne kvittering bekræfter udelukkende at beskeden blev vist på modtagerens computer. Der er ingen garanti for at modtageren har læst eller forstået beskedens indhold.';
$labels['name'] = 'Vist navn';
$labels['firstname'] = 'Fornavn';
$labels['surname'] = 'Efternavn';
-$labels['email'] = 'Email';
+$labels['email'] = 'E-mail';
$labels['addcontact'] = 'Tilføj en ny kontakt';
$labels['editcontact'] = 'Redigér kontakt';
$labels['edit'] = 'Redigér';
$labels['autosavedraft'] = 'Gem kladde automatisk';
$labels['everynminutes'] = 'hver $n. minut';
$labels['never'] = 'aldrig';
-$labels['folder'] = 'Mapper';
+$labels['folder'] = 'Mappe';
$labels['folders'] = 'Mapper';
$labels['foldername'] = 'Mappenavn';
$labels['subscribed'] = 'Abonneret';
+$labels['messagecount'] = 'Beskeder';
$labels['create'] = 'Opret';
$labels['createfolder'] = 'Opret ny mappe';
$labels['rename'] = 'Omdøb';
$labels['sortasc'] = 'Ældste først';
$labels['sortdesc'] = 'Nyeste først';
-?>
\ No newline at end of file
+?>
| language/da/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | All rights reserved. |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author : Martin Moeller <martin@liga.dk> |
| Søren Aggeboe <soren@aggeboe.dk> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 886 2007-10-19 07:24:53Z yllar $
+ @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
*/
$messages['messagesaved'] = 'Beskeden er gemt i kladdemappen';
$messages['successfullysaved'] = 'Det lykkedes at gemme';
$messages['addedsuccessfully'] = 'Kontakten blev tilføjet adressebogen';
-$messages['contactexists'] = 'Der er allerede en kontakt med denne email adresse';
+$messages['contactexists'] = 'Der er allerede en kontakt med denne e-mail adresse';
$messages['blockedimages'] = 'For at beskytte dit privatliv er billeder fra internetservere blokeret i denne besked.';
$messages['encryptedmessage'] = 'Beskeden er krypteret og kan ikke vises. Beklager!';
$messages['nocontactsfound'] = 'Ingen kontakter blev fundet';
$messages['contactnotfound'] = 'Den søgte kontakt blev ikke fundet';
-$messages['sendingfailed'] = 'Kunne ikke sende beskeden';
+$messages['sendingfailed'] = 'Beskeden kunne ikke sendes';
$messages['errorsaving'] = 'Der opstod en fejl ved lagring af data';
-$messages['errormoving'] = 'Kunne ikke flytte beskeden';
-$messages['errordeleting'] = 'Kunne ikke slette beskeden';
+$messages['errormoving'] = 'Beskeden kunne ikke flyttes';
+$messages['errordeleting'] = 'Beskeden kunne ikke slettes';
$messages['deletecontactconfirm'] = 'Vil du virkelig slette den/de valgte kontakt(er)?';
$messages['deletemessagesconfirm'] = 'Vil du virkelig slette den/de valgte besked(er)?';
-$messages['deletefolderconfirm'] = 'Vil du virkelig slette den vagte mappe';
+$messages['deletefolderconfirm'] = 'Vil du virkelig slette den valgte mappe';
$messages['purgefolderconfirm'] = 'Vil du virkelig slette alle beskeder i denne mappe?';
$messages['formincomplete'] = 'Formularen var ikke fuldstændig fyldt ud';
-$messages['noemailwarning'] = 'Indtast venligst en gyldig email adresse';
+$messages['noemailwarning'] = 'Indtast venligst en gyldig e-mail adresse';
$messages['nonamewarning'] = 'Angiv venligst et navn';
$messages['nopagesizewarning'] = 'Angiv sidestørrelsen';
$messages['norecipientwarning'] = 'Indtast mindst én modtager';
$messages['notsentwarning'] = 'Beskeden er ikke blevet sendt. Vil du kassere din besked?';
$messages['noldapserver'] = 'Vælg venligst hvilken LDAP-server der skal søges i';
$messages['nocontactsreturned'] = 'Ingen kontakter blev fundet';
-$messages['nosearchname'] = 'Indtast venligst en kontakts navn eller email adresse';
+$messages['nosearchname'] = 'Indtast venligst en kontakts navn eller e-mail adresse';
$messages['searchsuccessful'] = 'Fandt $nr beskeder';
$messages['searchnomatch'] = 'Søgningen fandt ingen beskeder';
$messages['searching'] = 'Søger...';
$messages['checking'] = 'Tjekker...';
$messages['nospellerrors'] = 'Ingen stavefejl fundet';
-$messages['folderdeleted'] = 'Mappen blev slettet korrekt';
-$messages['deletedsuccessfully'] = 'Slettet korrekt';
+$messages['folderdeleted'] = 'Mappen er slettet';
+$messages['deletedsuccessfully'] = 'Slettet';
$messages['converting'] = 'Fjerner formatering fra besked...';
$messages['messageopenerror'] = 'Beskeden kunne ikke hentes fra serveren';
$messages['fileuploaderror'] = 'Den indsatte fil fejlede';
$messages['sourceisreadonly'] = 'Denne adressekilde er kun til læsning';
$messages['errorsavingcontact'] = 'Kunne ikke gemme kontakt adressen';
$messages['movingmessage'] = 'Flytter besked...';
+$messages['receiptsent'] = 'Kvittering for læsning er sendt';
+$messages['errorsendingreceipt'] = 'Kvitteringen kunne ikke sendes';
+$messages['nodeletelastidentity'] = 'Du kan ikke slette denne identitet, da det er den eneste der er tilbage.';
+$messages['addsubfolderhint'] = 'Denne mappe vil blive oprettet som en undermappe af den der er valgt i øjeblikket.';
-?>
\ No newline at end of file
+?>
| language/de_CH/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Corrections: Alexander Stiebing <ja.stiebing[NOSPAM]@web.de> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 816 2007-09-26 08:13:21Z thomasb $
+ @version $Id: labels.inc 1075 2008-02-13 23:43:04Z thomasb $
*/
$labels['lastmessages'] = 'Die letzten Nachrichten anzeigen';
$labels['backtolist'] = 'Zurück zur Liste';
$labels['viewsource'] = 'Quelltext anzeigen';
+$labels['markmessages'] = 'Nachrichten markieren';
+$labels['markread'] = 'Als gelesen';
+$labels['markunread'] = 'Als ungelesen';
$labels['select'] = 'Auswählen';
$labels['all'] = 'Alle';
$labels['addbcc'] = 'Bcc hinzufügen';
$labels['addreplyto'] = 'Antwortadresse hinzufügen';
+// mdn
+$labels['mdnrequest'] = 'Der Sender dieser Nachricht hat eine Empfangsbestätigung angefordert. Möchten Sie diese jetzt senden?';
+$labels['receiptread'] = 'Empfangsbestätigung (gelesen)';
+$labels['yourmessage'] = 'Dieses ist eine Empfangsbestätigung für Ihre Nachricht';
+$labels['receiptnote'] = 'Hinweis: Der Empfänger hat den Empfang der Nachricht bestätigt. Dieses ist keine Garantie, dass die Nachricht gelesen und verstanden wurde.';
// address book // Adressbuch
$labels['name'] = 'Anzeigename';
$labels['folders'] = 'Ordner';
$labels['foldername'] = 'Ordnername';
$labels['subscribed'] = 'Abonniert';
+$labels['messagecount'] = 'Nachrichten';
$labels['create'] = 'Erstellen';
$labels['createfolder'] = 'Neuen Ordner erstellen';
$labels['rename'] = 'Umbenennen';
| language/de_CH/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 549 2007-05-01 18:53:56Z thomasb $
+ @version $Id: messages.inc 1075 2008-02-13 23:43:04Z thomasb $
*/
$messages['sourceisreadonly'] = 'Das Adressverzeichnis kann nicht verändert werden';
$messages['errorsavingcontact'] = 'Die Änderungen konnten nicht gespeichert werden';
+$messages['movingmessage'] = 'Die E-Mail wird verschoben...';
+$messages['receiptsent'] = 'Bestätigung erfolgreich gesendet';
+$messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden';
+
+$messages['nodeletelastidentity'] = 'Sie können diesen Absender nicht löschen';
+$messages['addsubfolderhint'] = 'Wird als Unterdornder des aktuell selektieren Ordners erstellt';
+
?>
\ No newline at end of file
| language/de_DE/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Stephan Diehl <info@sd-edv.de> |
+ | Author: Marcel Schlesinger <info@marcel-schlesinger.de> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 858 2007-10-04 10:14:19Z Stiwi $
+ @version $Id: labels.inc 1107 2008-02-17 18:32:46Z thomasb $
*/
$labels['lastmessages'] = 'Die letzten Nachrichten anzeigen';
$labels['backtolist'] = 'Zurück zur Liste';
$labels['viewsource'] = 'Quelltext anzeigen';
+$labels['markmessages'] = 'Nachrichten markieren';
+$labels['markread'] = 'Als gelesen';
+$labels['markunread'] = 'Als ungelesen';
$labels['select'] = 'Auswählen';
$labels['all'] = 'Alle';
$labels['none'] = 'Keine';
$labels['addcc'] = 'Cc hinzufügen';
$labels['addbcc'] = 'Bcc hinzufügen';
$labels['addreplyto'] = 'Antwortadresse hinzufügen';
-$labels['name'] = 'Anzeigename';
+$labels['mdnrequest'] = 'Der Sender dieser Nachricht möchte gerne eine Lesebestätigung. Wollen Sie dieses bestätigen?';
+$labels['receiptread'] = 'Empfangsbestätigung (gelesen)';
+$labels['yourmessage'] = 'Dies ist eine Empfangsbestätigung für Ihre Nachricht';
+$labels['receiptnote'] = 'Hinweis: Der Empfänger hat den Empfang der Nachricht bestätigt. Dies ist keine Garantie, dass die Nachricht gelesen und verstanden wurde.';
+$labels['name'] = 'Angezeigter Name';
$labels['firstname'] = 'Vorname';
$labels['surname'] = 'Nachname';
$labels['email'] = 'E-Mail';
$labels['preferences'] = 'Einstellungen';
$labels['userpreferences'] = 'Benutzereinstellungen';
$labels['editpreferences'] = 'Benutzereinstellungen bearbeiten';
-$labels['identities'] = 'Absender';
+$labels['identities'] = 'Identitäten';
$labels['manageidentities'] = 'Absender für dieses Konto verwalten';
$labels['newidentity'] = 'Neuer Absender';
$labels['newitem'] = 'Neuer Eintrag';
$labels['folders'] = 'Ordner';
$labels['foldername'] = 'Ordnername';
$labels['subscribed'] = 'Abonniert';
+$labels['messagecount'] = 'Nachrichten';
$labels['create'] = 'Erstellen';
$labels['createfolder'] = 'Neuen Ordner erstellen';
$labels['rename'] = 'Umbenennen';
$labels['sortasc'] = 'Aufsteigend sortieren';
$labels['sortdesc'] = 'Absteigend sortieren';
-?>
+?>
\ No newline at end of file
| language/de_DE/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Stephan Diehl <info@sd-edv.de> |
+ | Author: Marcel Schlesinger <info@marcel-schlesinger.de> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 1107 2008-02-17 18:32:46Z thomasb $
*/
$messages = array();
-$messages['loginfailed'] = 'Anmelden fehlgeschlagen';
+$messages['loginfailed'] = 'Anmeldung fehlgeschlagen';
$messages['cookiesdisabled'] = 'Ihr Browser akzeptiert keine Cookies';
$messages['sessionerror'] = 'Ihre Session ist ungültig oder abgelaufen';
$messages['imaperror'] = 'Keine Verbindung zum IMAP-Server';
$messages['nocontactsreturned'] = 'Es wurden keine Kontakte gefunden';
$messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein';
$messages['searchsuccessful'] = '$nr Nachrichten gefunden';
-$messages['searchnomatch'] = 'Keine Treffer';
+$messages['searchnomatch'] = 'Die Suche lieferte keine Treffer';
$messages['searching'] = 'Suche...';
$messages['checking'] = 'Prüfe...';
$messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden';
$messages['folderdeleted'] = 'Ordner erfolgreich gelöscht';
$messages['deletedsuccessfully'] = 'Erfolgreich gelöscht';
-$messages['converting'] = 'Entferne Formatierung der Nachricht...';
+$messages['converting'] = 'Entferne Formatierungen der Nachricht...';
$messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen werden';
$messages['fileuploaderror'] = 'Hochladen der Datei fehlgeschlagen';
$messages['filesizeerror'] = 'Die hochzuladende Datei überschreitet die Maximalgröße von $size';
$messages['sourceisreadonly'] = 'Das Adressverzeichnis kann nicht verändert werden';
$messages['errorsavingcontact'] = 'Die Änderungen konnten nicht gespeichert werden';
$messages['movingmessage'] = 'Die E-Mail wird verschoben...';
+$messages['receiptsent'] = 'Lesebestätigung erfolgreich gesendet';
+$messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden';
+$messages['nodeletelastidentity'] = 'Diese Identität kann nicht gelöscht werden, da dies die letzte ist.';
+$messages['addsubfolderhint'] = 'Wird als Unterordner des aktuell selektieren Ordners erstellt';
?>
\ No newline at end of file
| language/el/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Jim Deves <jim@cobaltblue.gr> |
- | John Economou <hsoc@irc.gr> |
+ | John Economou <hsoc@irc.gr> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 612 2007-06-12 18:17:21Z thomasb $
+ @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
*/
$labels['replytomessage'] = 'Απάντηση';
$labels['replytoallmessage'] = 'Απάντηση στον αποστολέα και όλους τους παραλήπτες';
$labels['forwardmessage'] = 'Προώθηση μηνύματος';
-$labels['deletemessage'] = 'Μετακίνηση στον Κάδο';
+$labels['deletemessage'] = 'Διαγραφή μηνύματος';
+$labels['movemessagetotrash'] = 'Μετακίνηση μηνύματος στον Κάδο';
$labels['printmessage'] = 'Εκτύπωση';
$labels['previousmessage'] = 'Εμφάνιση προηγούμενου μηνύματος';
$labels['previousmessages'] = 'Εμφάνιση προηγούμενης ομάδας μηνυμάτων';
$labels['lastmessages'] = 'Εμφάνιση τελευταίας ομάδας μηνυμάτων';
$labels['backtolist'] = 'Επιστροφή στη λίστα μηνυμάτων';
$labels['viewsource'] = 'Προβολή πηγαίου κώδικα';
+$labels['markmessages'] = 'Σήμανση μηνυμάτων';
+$labels['markread'] = 'ως αναγνωσμένα';
+$labels['markunread'] = 'ως μη-αναγνωσμένα';
$labels['select'] = 'Επιλογή';
$labels['all'] = 'Όλα';
$labels['none'] = 'Κανένα';
$labels['quicksearch'] = 'Γρήγορη Εύρεση';
$labels['resetsearch'] = 'Επαναφορά Εύρεσης';
$labels['compose'] = 'Συγγραφή μηνύματος';
-$labels['sendmessage'] = 'Αποστολή μηνύματος τώρα';
$labels['savemessage'] = 'Αποθήκευση ως πρόχειρου';
+$labels['sendmessage'] = 'Αποστολή μηνύματος τώρα';
$labels['addattachment'] = 'Επισύναψη αρχείου';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'Είδος επεξεργαστή κειμένου';
$labels['showimages'] = 'Εμφάνιση εικόνων';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Απλό κείμενο';
+$labels['addcc'] = 'Προσθήκη Cc';
+$labels['addbcc'] = 'Προσθήκη Bcc';
+$labels['addreplyto'] = 'Προσθήκη Απάντηση-Σε';
+$labels['mdnrequest'] = 'Ο αποστολέας του μηνύματος έχει ζητήσει να ενημερωθεί όταν διαβάσετε αυτό το μήνυμα. Επιθυμείτε να ενημερώστε τον αποστολέα;';
+$labels['receiptread'] = 'Αναφορά (ανάγνωσης)';
+$labels['yourmessage'] = 'Αυτό είναι μια Αναφορά για το μήνυμά σας';
+$labels['receiptnote'] = 'Σημείωση: Αυτή η αναφορά επιβεβαιώνει μόνο ότι το μήνυμα εμφανίστηκε μόνο στον υπολογιστή του παραλήπτη. Δεν επιβεβαιώνει ότι ο παραλήπτης έχει διαβάσει ή έχει κατανοήσει το περιεχόμενο του μηνύματος.';
$labels['name'] = 'Εμφανιζόμενο όνομα';
$labels['firstname'] = 'Όνομα';
$labels['surname'] = 'Επώνυμο';
$labels['folders'] = 'Φάκελοι';
$labels['foldername'] = 'Όνομα φακέλου';
$labels['subscribed'] = 'Εγγραφή';
+$labels['messagecount'] = 'Μηνύματα';
$labels['create'] = 'Δημιουργία';
$labels['createfolder'] = 'Δημιουργία νέου φακέλου';
$labels['rename'] = 'Μετονομασία';
| language/el/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Jim Deves <jim@cobaltblue.gr> |
- | John Economou <hsoc@irc.gr> |
+ | John Economou <hsoc@irc.gr> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 612 2007-06-12 18:17:21Z thomasb $
+ @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
*/
$messages['copyerror'] = 'Αποτυχία αντιγραφής διευθύνσεων';
$messages['sourceisreadonly'] = 'Η διεύθυνση έχει μόνο δικαίωμα ανάγνωσης';
$messages['errorsavingcontact'] = 'Σώσιμο επαφής απέτυχε';
+$messages['movingmessage'] = 'Μετακίνηση μηνύματος...';
+$messages['receiptsent'] = 'Επιτυχής αποστολή αναφοράς ανάγνωσης';
+$messages['errorsendingreceipt'] = 'Αποστολή αναφοράς απέτυχε';
+$messages['nodeletelastidentity'] = 'Δε μπορείτε να διαγράψετε αυτήν την ταυτότητα, είναι η τελευταία.';
+$messages['addsubfolderhint'] = 'Αυτός ο φάκελος θα δημιουργηθεί ως υποφάκελος του επιλεγμένου';
?>
\ No newline at end of file
| language/en_GB/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Weiran Zhang (weiran@weiran.co.uk) |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: labels.inc 1091 2008-02-15 15:13:38Z tomekp $
*/
$labels = array();
-
-// login page
-$labels['welcome'] = 'Welcome to $product';
-$labels['username'] = 'Username';
-$labels['password'] = 'Password';
-$labels['server'] = 'Server';
-$labels['login'] = 'Login';
-
-// taskbar
-$labels['logout'] = 'Logout';
-$labels['mail'] = 'E-Mail';
+$labels['welcome'] = 'Welcome to $product';
+$labels['username'] = 'Username';
+$labels['password'] = 'Password';
+$labels['server'] = 'Server';
+$labels['login'] = 'Login';
+$labels['logout'] = 'Logout';
+$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Personal Settings';
$labels['addressbook'] = 'Address Book';
-
-// mailbox names
-$labels['inbox'] = 'Inbox';
+$labels['inbox'] = 'Inbox';
$labels['drafts'] = 'Drafts';
-$labels['sent'] = 'Sent';
-$labels['trash'] = 'Deleted Items';
-$labels['junk'] = 'Junk';
-
-// message listing
+$labels['sent'] = 'Sent';
+$labels['trash'] = 'Deleted Items';
+$labels['junk'] = 'Junk';
$labels['subject'] = 'Subject';
-$labels['from'] = 'Sender';
-$labels['to'] = 'Recipient';
-$labels['cc'] = 'Copy';
-$labels['bcc'] = 'Bcc';
+$labels['from'] = 'Sender';
+$labels['to'] = 'Recipient';
+$labels['cc'] = 'Copy';
+$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Reply-To';
-$labels['date'] = 'Date';
-$labels['size'] = 'Size';
+$labels['date'] = 'Date';
+$labels['size'] = 'Size';
$labels['priority'] = 'Priority';
$labels['organization'] = 'Organisation';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
+$labels['reply-to'] = 'Reply-To';
$labels['mailboxlist'] = 'Folders';
$labels['messagesfromto'] = 'Messages $from to $to of $count';
$labels['messagenrof'] = 'Message $nr of $count';
-
-$labels['moveto'] = 'move to...';
+$labels['moveto'] = 'move to...';
$labels['download'] = 'download';
-
$labels['filename'] = 'File name';
$labels['filesize'] = 'File size';
-
$labels['preferhtml'] = 'Display HTML';
$labels['htmlmessage'] = 'HTML Message';
$labels['prettydate'] = 'Pretty dates';
-
$labels['addtoaddressbook'] = 'Add to address book';
-
-// weekdays short
$labels['sun'] = 'Sun';
$labels['mon'] = 'Mon';
$labels['tue'] = 'Tue';
$labels['thu'] = 'Thu';
$labels['fri'] = 'Fri';
$labels['sat'] = 'Sat';
-
-// weekdays long
-$labels['sunday'] = 'Sunday';
-$labels['monday'] = 'Monday';
-$labels['tuesday'] = 'Tuesday';
+$labels['sunday'] = 'Sunday';
+$labels['monday'] = 'Monday';
+$labels['tuesday'] = 'Tuesday';
$labels['wednesday'] = 'Wednesday';
-$labels['thursday'] = 'Thursday';
-$labels['friday'] = 'Friday';
-$labels['saturday'] = 'Saturday';
-
+$labels['thursday'] = 'Thursday';
+$labels['friday'] = 'Friday';
+$labels['saturday'] = 'Saturday';
$labels['today'] = 'Today';
-
-// toolbar buttons
-$labels['checkmail'] = 'Check for new messages';
-$labels['writenewmessage'] = 'Create a new message';
-$labels['replytomessage'] = 'Reply to the message';
+$labels['checkmail'] = 'Check for new messages';
+$labels['writenewmessage'] = 'Create a new message';
+$labels['replytomessage'] = 'Reply to the message';
$labels['replytoallmessage'] = 'Reply to sender and all recipients';
-$labels['forwardmessage'] = 'Forward the message';
-$labels['deletemessage'] = 'Delete message';
+$labels['forwardmessage'] = 'Forward the message';
+$labels['deletemessage'] = 'Delete message';
$labels['movemessagetotrash'] = 'Move message to "Deleted Items"';
-$labels['printmessage'] = 'Print this message';
-$labels['previousmessage'] = 'Show the previous message';
+$labels['printmessage'] = 'Print this message';
+$labels['previousmessage'] = 'Show the previous message';
$labels['previousmessages'] = 'Show previous set of messages';
-$labels['firstmessage'] = 'Show the first message';
-$labels['firstmessages'] = 'Show first set of messages';
-$labels['nextmessage'] = 'Show the next message';
-$labels['nextmessages'] = 'Show next set of messages';
-$labels['lastmessage'] = 'Show the last message';
-$labels['lastmessages'] = 'Show last set of messages';
-$labels['backtolist'] = 'Back to message list';
-$labels['viewsource'] = 'Show source';
-
+$labels['firstmessage'] = 'Show the first message';
+$labels['firstmessages'] = 'Show first set of messages';
+$labels['nextmessage'] = 'Show the next message';
+$labels['nextmessages'] = 'Show next set of messages';
+$labels['lastmessage'] = 'Show the last message';
+$labels['lastmessages'] = 'Show last set of messages';
+$labels['backtolist'] = 'Back to message list';
+$labels['viewsource'] = 'Show source';
+$labels['markmessages'] = 'Mark messages';
+$labels['markread'] = 'As read';
+$labels['markunread'] = 'As unread';
$labels['select'] = 'Select';
$labels['all'] = 'All';
$labels['none'] = 'None';
$labels['unread'] = 'Unread';
-
$labels['compact'] = 'Compact';
$labels['empty'] = 'Empty';
$labels['purge'] = 'Purge';
-
$labels['quota'] = 'Disk usage';
-$labels['unknown'] = 'unknown';
-$labels['unlimited'] = 'unlimited';
-
-$labels['quicksearch'] = 'Quick search';
-$labels['resetsearch'] = 'Reset search';
-
-
-// message compose
-$labels['compose'] = 'Compose a message';
-$labels['savemessage'] = 'Save this draft';
-$labels['sendmessage'] = 'Send the message now';
-$labels['addattachment'] = 'Attach a file';
-$labels['charset'] = 'Charset';
-$labels['editortype'] = 'Editor type';
-$labels['returnreceipt'] = 'Return receipt';
-
+$labels['unknown'] = 'unknown';
+$labels['unlimited'] = 'unlimited';
+$labels['quicksearch'] = 'Quick search';
+$labels['resetsearch'] = 'Reset search';
+$labels['compose'] = 'Compose a message';
+$labels['savemessage'] = 'Save this draft';
+$labels['sendmessage'] = 'Send the message now';
+$labels['addattachment'] = 'Attach a file';
+$labels['charset'] = 'Charset';
+$labels['editortype'] = 'Editor type';
+$labels['returnreceipt'] = 'Return receipt';
$labels['checkspelling'] = 'Check spelling';
$labels['resumeediting'] = 'Resume editing';
-$labels['revertto'] = 'Revert to';
-
+$labels['revertto'] = 'Revert to';
$labels['attachments'] = 'Attachments';
$labels['upload'] = 'Upload';
-$labels['close'] = 'Close';
-
-$labels['low'] = 'Low';
-$labels['lowest'] = 'Lowest';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'High';
+$labels['close'] = 'Close';
+$labels['low'] = 'Low';
+$labels['lowest'] = 'Lowest';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'High';
$labels['highest'] = 'Highest';
-
-$labels['nosubject'] = '(no subject)';
+$labels['nosubject'] = '(no subject)';
$labels['showimages'] = 'Display images';
-
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plain text';
-
-
-// address boook
-$labels['name'] = 'Display name';
+$labels['addcc'] = 'Add Cc';
+$labels['addbcc'] = 'Add Bcc';
+$labels['addreplyto'] = 'Add Reply-To';
+$labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?';
+$labels['receiptread'] = 'Return Receipt (read)';
+$labels['yourmessage'] = 'This is a Return Receipt for your message';
+$labels['receiptnote'] = 'Note: This receipt only acknowledges that the message was displayed on the recipient\'s computer. There is no guarantee that the recipient has read or understood the message contents.';
+$labels['name'] = 'Display name';
$labels['firstname'] = 'First name';
-$labels['surname'] = 'Last name';
-$labels['email'] = 'E-Mail';
-
+$labels['surname'] = 'Last name';
+$labels['email'] = 'E-Mail';
$labels['addcontact'] = 'Add new contact';
$labels['editcontact'] = 'Edit contact';
-
-$labels['edit'] = 'Edit';
+$labels['edit'] = 'Edit';
$labels['cancel'] = 'Cancel';
-$labels['save'] = 'Save';
+$labels['save'] = 'Save';
$labels['delete'] = 'Delete';
-
-$labels['newcontact'] = 'Create new contact card';
-$labels['deletecontact'] = 'Delete selected contacts';
-$labels['composeto'] = 'Compose mail to';
+$labels['newcontact'] = 'Create new contact card';
+$labels['deletecontact'] = 'Delete selected contacts';
+$labels['composeto'] = 'Compose mail to';
$labels['contactsfromto'] = 'Contacts $from to $to of $count';
-$labels['print'] = 'Print';
-$labels['export'] = 'Export';
-
-$labels['previouspage'] = 'Show previous set';
-$labels['firstpage'] = 'Show first set';
-$labels['nextpage'] = 'Show next set';
-$labels['lastpage'] = 'Show last set';
-
+$labels['print'] = 'Print';
+$labels['export'] = 'Export';
+$labels['previouspage'] = 'Show previous set';
+$labels['firstpage'] = 'Show first set';
+$labels['nextpage'] = 'Show next set';
+$labels['lastpage'] = 'Show last set';
$labels['groups'] = 'Groups';
$labels['personaladrbook'] = 'Personal Addresses';
-
-
-// settings
-$labels['settingsfor'] = 'Settings for';
-
-$labels['preferences'] = 'Preferences';
-$labels['userpreferences'] = 'User preferences';
-$labels['editpreferences'] = 'Edit user preferences';
-
-$labels['identities'] = 'Identities';
-$labels['manageidentities'] = 'Manage identities for this account';
-$labels['newidentity'] = 'New identity';
-
-$labels['newitem'] = 'New item';
-$labels['edititem'] = 'Edit item';
-
-$labels['setdefault'] = 'Set default';
-$labels['language'] = 'Language';
-$labels['timezone'] = 'Time zone';
-$labels['pagesize'] = 'Rows per page';
+$labels['settingsfor'] = 'Settings for';
+$labels['preferences'] = 'Preferences';
+$labels['userpreferences'] = 'User preferences';
+$labels['editpreferences'] = 'Edit user preferences';
+$labels['identities'] = 'Identities';
+$labels['manageidentities'] = 'Manage identities for this account';
+$labels['newidentity'] = 'New identity';
+$labels['newitem'] = 'New item';
+$labels['edititem'] = 'Edit item';
+$labels['setdefault'] = 'Set default';
+$labels['language'] = 'Language';
+$labels['timezone'] = 'Time zone';
+$labels['pagesize'] = 'Rows per page';
$labels['signature'] = 'Signature';
-$labels['dstactive'] = 'Daylight savings';
+$labels['dstactive'] = 'Daylight savings';
$labels['htmleditor'] = 'Compose HTML messages';
$labels['htmlsignature'] = 'HTML signature';
$labels['previewpane'] = 'Show preview pane';
-
-$labels['autosavedraft'] = 'Automatically save draft';
-$labels['everynminutes'] = 'every $n minutes';
-$labels['never'] = 'never';
-
-$labels['folder'] = 'Folder';
-$labels['folders'] = 'Folders';
-$labels['foldername'] = 'Folder name';
-$labels['subscribed'] = 'Subscribed';
-$labels['create'] = 'Create';
-$labels['createfolder'] = 'Create new folder';
+$labels['autosavedraft'] = 'Automatically save draft';
+$labels['everynminutes'] = 'every $n minutes';
+$labels['never'] = 'never';
+$labels['folder'] = 'Folder';
+$labels['folders'] = 'Folders';
+$labels['foldername'] = 'Folder name';
+$labels['subscribed'] = 'Subscribed';
+$labels['messagecount'] = 'Messages';
+$labels['create'] = 'Create';
+$labels['createfolder'] = 'Create new folder';
$labels['rename'] = 'Rename';
$labels['renamefolder'] = 'Rename folder';
-$labels['deletefolder'] = 'Delete folder';
-$labels['managefolders'] = 'Manage folders';
-
+$labels['deletefolder'] = 'Delete folder';
+$labels['managefolders'] = 'Manage folders';
$labels['sortby'] = 'Sort by';
-$labels['sortasc'] = 'Sort ascending';
+$labels['sortasc'] = 'Sort ascending';
$labels['sortdesc'] = 'Sort descending';
?>
\ No newline at end of file
| language/en_GB/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Weiran Zhang (weiran@weiran.co.uk) |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 1091 2008-02-15 15:13:38Z tomekp $
*/
$messages = array();
-$messages['loginfailed'] = 'Login failed';
+$messages['loginfailed'] = 'Login failed';
$messages['cookiesdisabled'] = 'Your browser does not accept cookies';
$messages['sessionerror'] = 'Your session is invalid or has expired';
$messages['imaperror'] = 'Connection to IMAP server failed';
$messages['errorsaving'] = 'An error occured while saving';
$messages['errormoving'] = 'Could not move the message';
$messages['errordeleting'] = 'Could not delete the message';
-$messages['deletecontactconfirm'] = 'Do you really want to delete the selected contact(s)?';
+$messages['deletecontactconfirm'] = 'Do you really want to delete the selected contact(s)?';
$messages['deletemessagesconfirm'] = 'Do you really want to delete the selected message(s)?';
-$messages['deletefolderconfirm'] = 'Do you really want to delete this folder?';
-$messages['purgefolderconfirm'] = 'Do you really want to delete all messages in this folder?';
+$messages['deletefolderconfirm'] = 'Do you really want to delete this folder?';
+$messages['purgefolderconfirm'] = 'Do you really want to delete all messages in this folder?';
$messages['formincomplete'] = 'The form was not completely filled out';
$messages['noemailwarning'] = 'Please enter a valid email address';
-$messages['nonamewarning'] = 'Please enter a name';
+$messages['nonamewarning'] = 'Please enter a name';
$messages['nopagesizewarning'] = 'Please enter a page size';
$messages['norecipientwarning'] = 'Please enter at least one recipient';
-$messages['nosubjectwarning'] = 'The "Subject" field is empty. Would you like to enter one now?';
+$messages['nosubjectwarning'] = 'The "Subject" field is empty. Would you like to enter one now?';
$messages['nobodywarning'] = 'Send this message without any text?';
$messages['notsentwarning'] = 'Your message has not been sent. Do you want to discard it?';
$messages['noldapserver'] = 'Please select an LDAP server to search';
$messages['checking'] = 'Checking...';
$messages['nospellerrors'] = 'No spelling errors found';
$messages['folderdeleted'] = 'Folder successfully deleted';
-$messages['deletedsuccessfully'] = "Successfully deleted";
+$messages['deletedsuccessfully'] = 'Successfully deleted';
$messages['converting'] = 'Removing formatting from message...';
$messages['messageopenerror'] = 'Could not load message from server';
$messages['fileuploaderror'] = 'File upload failed';
$messages['sourceisreadonly'] = 'This address source is read-only';
$messages['errorsavingcontact'] = 'Could not save the contact address';
$messages['movingmessage'] = 'Moving message...';
+$messages['receiptsent'] = 'Successfully sent a read receipt';
+$messages['errorsendingreceipt'] = 'Could not send the receipt';
+$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
+$messages['addsubfolderhint'] = 'This folder will be created as subfolder of the currently selected one';
?>
\ No newline at end of file
| language/en_US/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: labels.inc 1052 2008-02-12 18:41:53Z thomasb $
*/
$labels['lastmessages'] = 'Show last set of messages';
$labels['backtolist'] = 'Back to message list';
$labels['viewsource'] = 'Show source';
+$labels['markmessages'] = 'Mark messages';
+$labels['markread'] = 'As read';
+$labels['markunread'] = 'As unread';
$labels['select'] = 'Select';
$labels['all'] = 'All';
$labels['addbcc'] = 'Add Bcc';
$labels['addreplyto'] = 'Add Reply-To';
+// mdn
+$labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?';
+$labels['receiptread'] = 'Return Receipt (read)';
+$labels['yourmessage'] = 'This is a Return Receipt for your message';
+$labels['receiptnote'] = 'Note: This receipt only acknowledges that the message was displayed on the recipient\'s computer. There is no guarantee that the recipient has read or understood the message contents.';
// address boook
$labels['name'] = 'Display name';
$labels['folders'] = 'Folders';
$labels['foldername'] = 'Folder name';
$labels['subscribed'] = 'Subscribed';
+$labels['messagecount'] = 'Messages';
$labels['create'] = 'Create';
$labels['createfolder'] = 'Create new folder';
$labels['rename'] = 'Rename';
| language/en_US/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 1052 2008-02-12 18:41:53Z thomasb $
*/
$messages['sourceisreadonly'] = 'This address source is read only';
$messages['errorsavingcontact'] = 'Could not save the contact address';
$messages['movingmessage'] = 'Moving message...';
+$messages['receiptsent'] = 'Successfully sent a read receipt';
+$messages['errorsendingreceipt'] = 'Could not send the receipt';
+$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
+$messages['addsubfolderhint'] = 'This folder will be created as subfolder of the currently selected one';
?>
\ No newline at end of file
| language/eo/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Andreas van Cranenburgh <andreas@unstable.nl> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 858 2007-10-04 10:14:19Z Stiwi $
-
*/
-
$labels = array();
-
-// login page
-$labels['welcome'] = 'Bonvenon al $product';
-$labels['username'] = 'Uzanta-nomo';
-$labels['password'] = 'Pasvorto';
-$labels['server'] = 'Servilo';
-$labels['login'] = 'Ensalutu';
-
-// taskbar
-$labels['logout'] = 'Elsalutu';
-$labels['mail'] = 'Retpoŝto';
+$labels['welcome'] = 'Bonvenon al $product';
+$labels['username'] = 'Uzantnomo';
+$labels['password'] = 'Pasvorto';
+$labels['server'] = 'Servilo';
+$labels['login'] = 'Ensalutu';
+$labels['logout'] = 'Elsalutu';
+$labels['mail'] = 'Retpoŝto';
$labels['settings'] = 'Preferoj';
$labels['addressbook'] = 'Adresaro';
-
-// mailbox names
-$labels['inbox'] = 'Ricevitujo';
+$labels['inbox'] = 'Ricevitujo';
$labels['drafts'] = 'Malnetujo';
-$labels['sent'] = 'Senditujo';
-$labels['trash'] = 'Rubujo';
-$labels['junk'] = 'Spamujo'; #FIXME. eble fatrasujo.
-
-// message listing
-$labels['subject'] = 'Subjekto'; #temo?
-$labels['from'] = 'Sendanto';
-$labels['to'] = 'Ricevanto';
-$labels['cc'] = 'Kopio';
-$labels['bcc'] = 'Blindkopio';
+$labels['sent'] = 'Senditujo';
+$labels['trash'] = 'Rubujo';
+$labels['junk'] = 'Spamujo';
+$labels['subject'] = 'Temo';
+$labels['from'] = 'Sendanto';
+$labels['to'] = 'Ricevanto';
+$labels['cc'] = 'Kopio';
+$labels['bcc'] = 'Blindkopio';
$labels['replyto'] = 'Respondu-Al';
-$labels['date'] = 'Dato';
-$labels['size'] = 'Grando';
+$labels['date'] = 'Dato';
+$labels['size'] = 'Grando';
$labels['priority'] = 'Prioritato';
$labels['organization'] = 'Organizo';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
+$labels['reply-to'] = 'Respondu-Al';
$labels['mailboxlist'] = 'Dosierujoj';
$labels['messagesfromto'] = 'Mesaĝoj ekde $from ĝis $to de $count';
$labels['messagenrof'] = 'Mesaĝo $nr-a de $count';
-
-$labels['moveto'] = 'transloku al...';
+$labels['moveto'] = 'transloku al...';
$labels['download'] = 'elŝutu';
-
$labels['filename'] = 'Dosiernomo';
$labels['filesize'] = 'Dosiergrando';
-
$labels['preferhtml'] = 'Montru HTML';
$labels['htmlmessage'] = 'HTML Mesaĝo';
$labels['prettydate'] = 'Agrablaj Datoj';
-
$labels['addtoaddressbook'] = 'Aldonu al adresaro';
-
-// weekdays short
$labels['sun'] = 'Dim';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['thu'] = 'Ĵaŭ';
$labels['fri'] = 'Ven';
$labels['sat'] = 'Sab';
-
-// weekdays long
-$labels['sunday'] = 'Dimanĉo';
-$labels['monday'] = 'Luno';
-$labels['tuesday'] = 'Mardo';
+$labels['sunday'] = 'Dimanĉo';
+$labels['monday'] = 'Luno';
+$labels['tuesday'] = 'Mardo';
$labels['wednesday'] = 'Merkredo';
-$labels['thursday'] = 'Ĵaŭdo';
-$labels['friday'] = 'Vendredo';
-$labels['saturday'] = 'Sabato';
-
+$labels['thursday'] = 'Ĵaŭdo';
+$labels['friday'] = 'Vendredo';
+$labels['saturday'] = 'Sabato';
$labels['today'] = 'Hodiaŭ';
-
-// toolbar buttons
-$labels['checkmail'] = 'Kontrolu por novaj mesaĝoj';
-$labels['writenewmessage'] = 'Verku novan mesaĝon';
-$labels['replytomessage'] = 'Respondu al mesaĝo';
-$labels['replytoallmessage'] = 'Respondu al sendanto kaj ĉiu ricevanto';
-$labels['forwardmessage'] = 'Plusendu mesaĝon';
-$labels['deletemessage'] = 'Transloku mesaĝon al rubujo';
-$labels['printmessage'] = 'Printu ĉi tiun mesaĝon';
-$labels['previousmessage'] = 'Montru antaŭan mesaĝon';
+$labels['checkmail'] = 'Kontrolu, ĉu novaj mesaĝoj';
+$labels['writenewmessage'] = 'Verku novan mesaĝon';
+$labels['replytomessage'] = 'Respondu al mesaĝo';
+$labels['replytoallmessage'] = 'Respondu al sendinto kaj ĉiu ricevinto';
+$labels['forwardmessage'] = 'Plusendu mesaĝon';
+$labels['deletemessage'] = 'Forigu mesaĝon';
+$labels['movemessagetotrash'] = 'Transloku mesaĝon al rubujo';
+$labels['printmessage'] = 'Printu ĉi tiun mesaĝon';
+$labels['previousmessage'] = 'Montru antaŭan mesaĝon';
$labels['previousmessages'] = 'Montru antaŭan aron de mesaĝoj';
-$labels['firstmessage'] = 'Montru unuan mesaĝon';
-$labels['firstmessages'] = 'Montru unuan aron de mesaĝoj';
-$labels['nextmessage'] = 'Montru sekvan mesaĝon';
-$labels['nextmessages'] = 'Montru sekvan aron de mesaĝoj';
-$labels['lastmessage'] = 'Montru lastan mesaĝon';
-$labels['lastmessages'] = 'Montru lastan aron de mesaĝoj';
-$labels['backtolist'] = 'Reen al mesaĝo-listo';
-$labels['viewsource'] = 'Montru fonton';
-
+$labels['firstmessage'] = 'Montru unuan mesaĝon';
+$labels['firstmessages'] = 'Montru unuan aron de mesaĝoj';
+$labels['nextmessage'] = 'Montru sekvan mesaĝon';
+$labels['nextmessages'] = 'Montru sekvan aron de mesaĝoj';
+$labels['lastmessage'] = 'Montru lastan mesaĝon';
+$labels['lastmessages'] = 'Montru lastan aron de mesaĝoj';
+$labels['backtolist'] = 'Reen al mesaĝo-listo';
+$labels['viewsource'] = 'Montru fonton';
+$labels['markmessages'] = 'Marku mesaĝojn';
+$labels['markread'] = 'Kiel legita';
+$labels['markunread'] = 'Kiel nelegita';
$labels['select'] = 'Elektu';
$labels['all'] = 'Ĉion';
$labels['none'] = 'Nenion';
-$labels['unread'] = 'Nelegatan';
-
+$labels['unread'] = 'Nelegitan';
$labels['compact'] = 'Kompakta';
$labels['empty'] = 'Malplena';
$labels['purge'] = 'Senrubigu';
-
$labels['quota'] = 'Diskuzo';
-$labels['unknown'] = 'nekonata';
-$labels['unlimited'] = 'senlimo';
-
-$labels['quicksearch'] = 'Rapida serĉo';
-$labels['resetsearch'] = 'Vakigu serĉon';
-
-
-// message compose
-$labels['compose'] = 'Verku mesaĝon';
-$labels['sendmessage'] = 'Sendu mesaĝon nun';
-$labels['savemessage'] = 'Savu ĉi tiun malneton';
-$labels['addattachment'] = 'Alfiksu dosieron';
-$labels['charset'] = 'Karakteraro';
-$labels['editortype'] = 'Speco de redaktilo'; #???
-$labels['returnreceipt'] = 'Return receipt';
-
-$labels['checkspelling'] = 'Kontrolu grafismon';
-$labels['resumeediting'] = 'Rekomencu redakti';
-$labels['revertto'] = 'Reiru al';
-
+$labels['unknown'] = 'nekonata';
+$labels['unlimited'] = 'senlima';
+$labels['quicksearch'] = 'Rapida serĉo';
+$labels['resetsearch'] = 'Vakigu serĉon';
+$labels['compose'] = 'Verku mesaĝon';
+$labels['savemessage'] = 'Savu ĉi tiun malneton';
+$labels['sendmessage'] = 'Sendu mesaĝon';
+$labels['addattachment'] = 'Alfiksu dosieron';
+$labels['charset'] = 'Karaktraro';
+$labels['editortype'] = 'Speco de redaktilo';
+$labels['returnreceipt'] = 'Return receipt';
+$labels['checkspelling'] = 'Kontrolu literumadon';
+$labels['resumeediting'] = 'Rekomencu redaktadon';
+$labels['revertto'] = 'Reiru al';
$labels['attachments'] = 'Alfiksaĵoj';
$labels['upload'] = 'Alŝutu';
-$labels['close'] = 'Fermu';
-
-$labels['low'] = 'Malalta';
-$labels['lowest'] = 'Plej malalta';
-$labels['normal'] = 'Normala';
-$labels['high'] = 'Alta';
+$labels['close'] = 'Fermu';
+$labels['low'] = 'Malalta';
+$labels['lowest'] = 'Plej malalta';
+$labels['normal'] = 'Normala';
+$labels['high'] = 'Alta';
$labels['highest'] = 'Plej alta';
-
-$labels['nosubject'] = '(sensubjekto)';
+$labels['nosubject'] = '(sen temo)';
$labels['showimages'] = 'Montru bildojn';
-
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plata teksto';
-
-
-// address boook
-$labels['name'] = 'Nomo';
-$labels['firstname'] = 'Antaŭa nomo';
-$labels['surname'] = 'Familia nomo';
-$labels['email'] = 'Retpoŝto';
-
+$labels['addcc'] = 'Aldonu kopi-ricevanton';
+$labels['addbcc'] = 'Aldonu blindan kopi-ricevanton';
+$labels['addreplyto'] = 'Aldonu Respondu-Al';
+$labels['mdnrequest'] = 'La sendinto de ĉi tiu mesaĝo petis sciigon de kiam vi legas ĝin. Ĉu volas sciigi la sendinton?';
+$labels['receiptread'] = 'Legokonfirmo';
+$labels['yourmessage'] = 'Jen estas legokonfirmo de via mesaĝo';
+$labels['receiptnote'] = 'Notu: Ĉi tiu konfirmo nur asertas ke la mesaĝo estis malfermita je la komputilo de la ricevinto. Ne estas garantio ke la ricevinto legis aŭ komprenis la enhavon.';
+$labels['name'] = 'Nomo';
+$labels['firstname'] = 'Antaŭnomo';
+$labels['surname'] = 'Familia nomo';
+$labels['email'] = 'Retpoŝto';
$labels['addcontact'] = 'Aldonu kontakton';
$labels['editcontact'] = 'Redaktu kontakton';
-
-$labels['edit'] = 'Redaktu';
+$labels['edit'] = 'Redaktu';
$labels['cancel'] = 'Rezignu';
-$labels['save'] = 'Savu';
+$labels['save'] = 'Savu';
$labels['delete'] = 'Forigu';
-
-$labels['newcontact'] = 'Kreu novan kontaktaĵon';
-$labels['deletecontact'] = 'Forigu elektatajn kontaktojn';
-$labels['composeto'] = 'Verku mesaĝon al';
+$labels['newcontact'] = 'Kreu novan kontakton';
+$labels['deletecontact'] = 'Forigu elektatajn kontaktojn';
+$labels['composeto'] = 'Verku mesaĝon al';
$labels['contactsfromto'] = 'Kontaktoj ekde $from ĝis $to de $count';
-$labels['print'] = 'Printu';
-$labels['export'] = 'Eksportu';
-
-$labels['previouspage'] = 'Montru auntaŭan aron';
-$labels['firstpage'] = 'Montru unuan aron';
-$labels['nextpage'] = 'Montru sekvan aron';
-$labels['lastpage'] = 'Montru lastan aron';
-
+$labels['print'] = 'Printu';
+$labels['export'] = 'Eksportu';
+$labels['previouspage'] = 'Montru auntaŭan';
+$labels['firstpage'] = 'Montru unuan';
+$labels['nextpage'] = 'Montru sekvan';
+$labels['lastpage'] = 'Montru lastan';
$labels['groups'] = 'Grupoj';
$labels['personaladrbook'] = 'Persona Adresoj';
-
-
-// settings
-$labels['settingsfor'] = 'Preferoj de';
-
-$labels['preferences'] = 'Preferoj';
-$labels['userpreferences'] = 'Uzant-preferoj';
-$labels['editpreferences'] = 'Redajtu uzant-preferojn';
-
-$labels['identities'] = 'Identoj';
-$labels['manageidentities'] = 'Administru identoj de ĉi tiu konto';
-$labels['newidentity'] = 'Nova idento';
-
-$labels['newitem'] = 'Nova ero';
-$labels['edititem'] = 'Redaktu eron';
-
-$labels['setdefault'] = 'Agordu kiel defaŭlta';
-$labels['language'] = 'Lingvo';
-$labels['timezone'] = 'Tempzono';
-$labels['pagesize'] = 'Mesaĝoj po paĝo';
+$labels['settingsfor'] = 'Preferoj de';
+$labels['preferences'] = 'Preferoj';
+$labels['userpreferences'] = 'Uzant-preferoj';
+$labels['editpreferences'] = 'Redaktu uzant-preferojn';
+$labels['identities'] = 'Identoj';
+$labels['manageidentities'] = 'Administru identojn de ĉi tiu konto';
+$labels['newidentity'] = 'Nova idento';
+$labels['newitem'] = 'Nova ero';
+$labels['edititem'] = 'Redaktu eron';
+$labels['setdefault'] = 'Agordu kiel norma';
+$labels['language'] = 'Lingvo';
+$labels['timezone'] = 'Tempzono';
+$labels['pagesize'] = 'Mesaĝoj po paĝo';
$labels['signature'] = 'Subskribo';
-$labels['dstactive'] = 'Taglumsavado';
-$labels['htmleditor'] = 'Verku HTML mesaĝojn';
+$labels['dstactive'] = 'Taglumsavado';
+$labels['htmleditor'] = 'Uzado de HTML-redaktilo';
$labels['htmlsignature'] = 'HTML subskribo';
$labels['previewpane'] = 'Montru antaŭrigardejon';
-
-$labels['autosavedraft'] = 'Aŭtomate savu malneton';
-$labels['everynminutes'] = 'ĉiu $n minutoj';
-$labels['never'] = 'neniam';
-
-$labels['folder'] = 'Dosierujo';
-$labels['folders'] = 'Dosierujoj';
-$labels['foldername'] = 'Dosierujo-nomo';
-$labels['subscribed'] = 'Abonata';
-$labels['create'] = 'Kreu';
-$labels['createfolder'] = 'Kreu novan dosierujon';
+$labels['autosavedraft'] = 'Aŭtomate savu malneton';
+$labels['everynminutes'] = 'ĉiujn $n minutojn';
+$labels['never'] = 'neniam';
+$labels['folder'] = 'Dosierujo';
+$labels['folders'] = 'Dosierujoj';
+$labels['foldername'] = 'Dosierujo-nomo';
+$labels['subscribed'] = 'Abonata';
+$labels['messagecount'] = 'Mesaĝoj';
+$labels['create'] = 'Kreu';
+$labels['createfolder'] = 'Kreu novan dosierujon';
$labels['rename'] = 'Renomu';
$labels['renamefolder'] = 'Renomu dosierujon';
-$labels['deletefolder'] = 'Forigu dosierujon';
-$labels['managefolders'] = 'Administru dosierujon';
-
+$labels['deletefolder'] = 'Forigu dosierujon';
+$labels['managefolders'] = 'Administru dosierujon';
$labels['sortby'] = 'Ordigu per';
-$labels['sortasc'] = 'Ordigu kreskante';
+$labels['sortasc'] = 'Ordigu kreskante';
$labels['sortdesc'] = 'Ordigu malkreskante';
-?>
\ No newline at end of file
+?>
| language/eo/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Andreas van Cranenburgh <andreas@unstable.nl |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
-
*/
$messages = array();
-$messages['loginfailed'] = 'Malsukcesis ensaluti';
+$messages['loginfailed'] = 'Malsukcesis ensaluti';
$messages['cookiesdisabled'] = 'Via foliumilo ne akceptas kuketojn';
-$messages['sessionerror'] = 'Via seanco estas nevalida aŭ finiĝita';
+$messages['sessionerror'] = 'Via seanco estas nevalida aŭ finita';
$messages['imaperror'] = 'Konekto kun IMAP-servilo malsukcesis';
$messages['nomessagesfound'] = 'Neniu mesaĝo en ĉi tiu dosierujo';
-$messages['loggedout'] = 'Vi sukcese finiĝis la seanco. Ĝis!';
+$messages['loggedout'] = 'Vi sukcese finis la seancon. Ĝis!';
$messages['mailboxempty'] = 'Dosierujo estas malplena';
-$messages['loading'] = 'Ŝarĝante...';
-$messages['loadingdata'] = 'Ŝarĝante datumo...';
-$messages['checkingmail'] = 'Kontrolu por novaj mesaĝoj...';
-$messages['sendingmessage'] = 'Sedante mesaĝo...';
+$messages['loading'] = 'Ŝarganta...';
+$messages['loadingdata'] = 'Ŝarganta datumojn...';
+$messages['checkingmail'] = 'Kontrolanta, ĉu novaj mesaĝoj...';
+$messages['sendingmessage'] = 'Sedanta mesaĝon...';
$messages['messagesent'] = 'Mesaĝo estas sendita sukcese';
-$messages['savingmessage'] = 'Savante mesaĝo...';
+$messages['savingmessage'] = 'Savanta mesaĝon...';
$messages['messagesaved'] = 'Mesaĝo savita en Malnetujo';
$messages['successfullysaved'] = 'Sukcese savis';
$messages['addedsuccessfully'] = 'Sukcese aldonis kontakton al adresaro';
$messages['contactexists'] = 'Kontakto kun ĉi tiu adreso jam ekzistas';
-$messages['blockedimages'] = 'Por protekti vian privatecon, foraj bildoj ne estas montrata en ĉi tiu mesaĝo.';
-$messages['encryptedmessage'] = 'Ĉi tiu mesaĝo estas ĉifrata kaj ne eblas montri. Pardonu!'; #sorry -> pardonu?
+$messages['blockedimages'] = 'Por protekti vian privatecon, foraj bildoj estas blokitaj en ĉi tiu mesaĝo.';
+$messages['encryptedmessage'] = 'Ĉi tiu mesaĝo estas ĉifrata kaj ne estas montrebla. Pardonu!';
$messages['nocontactsfound'] = 'Trovis neniun kontakton';
-$messages['contactnotfound'] = 'La petitan kontakton ne trovis';
-
-$messages['sendingfailed'] = 'Nesukcesis sendi mesaĝon';
-$messages['errorsaving'] = 'Eraro dum savo de mesaĝo';
+$messages['contactnotfound'] = 'La petita kontakto ne trovis';
+$messages['sendingfailed'] = 'Ne sukcesis sendi mesaĝon';
+$messages['errorsaving'] = 'Okazis eraro dum savo de mesaĝo';
$messages['errormoving'] = 'Ne povis transloki mesaĝon';
$messages['errordeleting'] = 'Ne povis forigi mesaĝon';
-$messages['deletecontactconfirm'] = 'Ĉu vi vere volas forigi la elektata(j)n kontakto(j)n?';
+$messages['deletecontactconfirm'] = 'Ĉu vi vere volas forigi la elektata(j)n kontakto(j)n?';
$messages['deletemessagesconfirm'] = 'Ĉu vi vere volas forigi la elektata(j)n mesaĝo(j)n?';
-$messages['deletefolderconfirm'] = 'Ĉu vi vere volas forigi la elektatan dosierujon?';
-$messages['purgefolderconfirm'] = 'Ĉu vi vere volas forigi ĉiun mesaĝon en ĉi tiu dosierujo?';
-$messages['formincomplete'] = 'La formularo ne estis kompletiĝita';
-$messages['noemailwarning'] = 'Bonvolu skribu validan retpoŝt-adreson';
-$messages['nonamewarning'] = 'Bonvulu skribu nomon';
-$messages['nopagesizewarning'] = 'Bonvolu skribu paĝ-grando';
-$messages['norecipientwarning'] = 'Bonvolu skribu minumume unu ricevonto';
-$messages['nosubjectwarning'] = 'La "Subjekto" kampo estas malplena. Ĉu vi volas skribi subjekton nun?';
-$messages['nobodywarning'] = 'Ĉu sendu ĉi tiun mesaĝon sen teksto?';
+$messages['deletefolderconfirm'] = 'Ĉu vi vere volas forigi la elektatan dosierujon?';
+$messages['purgefolderconfirm'] = 'Ĉu vi vere volas forigi ĉiun mesaĝon el ĉi tiu dosierujo?';
+$messages['formincomplete'] = 'La formularo ne estis kompletigita';
+$messages['noemailwarning'] = 'Bonvolu enmeti validan retpoŝt-adreson';
+$messages['nonamewarning'] = 'Bonvulu enmeti nomon';
+$messages['nopagesizewarning'] = 'Bonvolu enmeti paĝ-grando';
+$messages['norecipientwarning'] = 'Bonvolu enmeti minumume unu ricevonto';
+$messages['nosubjectwarning'] = 'La temkampo estas malplena. Ĉu vi volas skribi temon nun?';
+$messages['nobodywarning'] = 'Ĉu sendi ĉi tiun mesaĝon sen teksto?';
$messages['notsentwarning'] = 'Mesaĝo ne estas sendita. Ĉu vi volas forigi vian mesaĝon?';
-$messages['noldapserver'] = 'Bonvolu elekti ldap-servilo por serĉi';
-$messages['nocontactsreturned'] = 'Trovis nenion kontakton';
-$messages['nosearchname'] = 'Bonvolu skribi kontakt-nomo aŭ retpoŝt-adreson.';
+$messages['noldapserver'] = 'Bonvolu elekti ldap-servilon por serĉado';
+$messages['nocontactsreturned'] = 'Trovis neniun kontakton';
+$messages['nosearchname'] = 'Bonvolu enmeti kontakt-nomon aŭ retpoŝt-adreson.';
$messages['searchsuccessful'] = 'trovis $nr mesaĝojn';
$messages['searchnomatch'] = 'Serĉo donis nenion';
-$messages['searching'] = 'Serĉante...';
-$messages['checking'] = 'Kontrolante...';
-$messages['nospellerrors'] = 'Neniujn grafismaj erarojn trovis';
+$messages['searching'] = 'Serĉanta...';
+$messages['checking'] = 'Kontrolanta...';
+$messages['nospellerrors'] = 'Neniujn literumada eraro trovita';
$messages['folderdeleted'] = 'Forigis dosierujon sukcese';
-$messages['deletedsuccessfully'] = "Sukcese forigis";
-$messages['converting'] = 'Forigante formata de mesaĝo...';
-$messages['messageopenerror'] = 'Ne povis ŝarĝi mesaĝon de servilo';
+$messages['deletedsuccessfully'] = 'Sukcese forigis';
+$messages['converting'] = 'Foriganta formatan de mesaĝo...';
+$messages['messageopenerror'] = 'Ne povis ŝargi mesaĝon de servilo';
$messages['fileuploaderror'] = 'Malsukcesis alŝuti dosieron';
-$messages['filesizeerror'] = 'La dosiero superas la maksimuma grando de $size';
-
+$messages['filesizeerror'] = 'La alŝutita dosiero superas la maksimuman grandon de $size';
$messages['copysuccess'] = 'Sukcese kopiis $nr adresojn';
-$messages['copyerror'] = 'Ne povis kopii ajn adresojn';
+$messages['copyerror'] = 'Ne povis kopii ajn adreson';
$messages['sourceisreadonly'] = 'Ĉi tiu adres-fonto estas nurlegebla';
$messages['errorsavingcontact'] = 'Ne povis savi la kontakt-adreson';
+$messages['movingmessage'] = 'Translokanta mesaĝon...';
+$messages['receiptsent'] = 'Sukcese sendis konfirmon';
+$messages['errorsendingreceipt'] = 'Ne povis sendi konfirmon';
+$messages['nodeletelastidentity'] = 'Vi ne povas forigi ĉi tiun identon, ĉar ĝi estas la lasta';
+$messages['addsubfolderhint'] = 'Ĉi tiu dosierujo estos farita kiel subdosierujo de la nune elektita dosierujo';
-
-?>
\ No newline at end of file
+?>
| language/es/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| http://david.grajal.net |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 873 2007-10-16 19:06:34Z yllar $
+ @version $Id: labels.inc 1079 2008-02-14 07:47:11Z tomekp $
*/
$labels['organization'] = 'Organización';
$labels['reply-to'] = 'Respuesta a';
$labels['mailboxlist'] = 'Bandejas';
-$labels['messagesfromto'] = 'Mensajes desde $from a $to de $count';
+$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
$labels['messagenrof'] = 'Mensaje $nr de $count';
$labels['moveto'] = 'mover a...';
$labels['download'] = 'descargar';
$labels['sun'] = 'Dom';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
-$labels['wed'] = 'Mie';
+$labels['wed'] = 'Mié';
$labels['thu'] = 'Jue';
$labels['fri'] = 'Vie';
$labels['sat'] = 'Sáb';
$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['select'] = 'Elija';
$labels['all'] = 'Todos';
$labels['none'] = 'Ninguno';
$labels['addcc'] = 'Añadir Cc';
$labels['addbcc'] = 'Añadir Bcc';
$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['folders'] = 'Bandejas';
$labels['foldername'] = 'Nombre de bandeja';
$labels['subscribed'] = 'Suscrita';
+$labels['messagecount'] = 'Mensajes';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear nueva bandeja';
$labels['rename'] = 'Renombrar';
$labels['sortasc'] = 'Orden ascendente';
$labels['sortdesc'] = 'Orden descendente';
-?>
+?>
\ No newline at end of file
| language/es/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Lito Jornero <jornero@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 873 2007-10-16 19:06:34Z yllar $
+ @version $Id: messages.inc 1079 2008-02-14 07:47:11Z tomekp $
*/
$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';
-?>
+?>
\ No newline at end of file
| language/et_EE/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
$labels['lastmessages'] = 'Näita viimast kirjade komplekti';
$labels['backtolist'] = 'Tagasi kirjade nimekirja';
$labels['viewsource'] = 'Näita lähtekoodi';
+$labels['markmessages'] = 'Märgi kirjad';
+$labels['markread'] = 'Loetuks';
+$labels['markunread'] = 'Mitte loetuks';
$labels['select'] = 'Vali';
$labels['all'] = 'kõik';
$labels['none'] = 'mitte midagi';
$labels['addcc'] = 'Lisa koopia';
$labels['addbcc'] = 'Lisa pimekoopia';
$labels['addreplyto'] = 'Lisa vastus aadressile';
+$labels['mdnrequest'] = 'Selle kirja saatja soovib saada kinnitust kirja lugemise kohta. Soovid kinnituse saata ?';
+$labels['receiptread'] = 'Kättesaamiskinnitus (leotud)';
+$labels['yourmessage'] = 'See on sinu saadetud kirja kättesaamiskinnitus';
+$labels['receiptnote'] = 'Märkus: Kättesaamiskinnituse saamine tähendab ainult seda, et saaja on kirja avanud. Pole mingit garantiid, et ta kirja tegelikult luges ja selle sisust aru sai.';
$labels['name'] = 'Näidatav nimi';
$labels['firstname'] = 'Eesnimi';
$labels['surname'] = 'Perekonnanimi';
$labels['folders'] = 'Kaustad';
$labels['foldername'] = 'Kausta nimi';
$labels['subscribed'] = 'Näitan';
+$labels['messagecount'] = 'Kirju';
$labels['create'] = 'Loo';
$labels['createfolder'] = 'Uue kausta loomine';
$labels['rename'] = 'Nimeta ümber';
$labels['sortasc'] = 'Järjesta kasvavalt';
$labels['sortdesc'] = 'Järjesta kahanevalt';
-?>
\ No newline at end of file
+?>
| language/et_EE/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
$messages['sourceisreadonly'] = 'Aadressi asukohas puuduvad kirjutusõigused';
$messages['errorsavingcontact'] = 'Kontakti aadressi salvestamine ebaõnnestus';
$messages['movingmessage'] = 'Kirja liigutamine...';
-
-?>
\ No newline at end of file
+$messages['receiptsent'] = 'Kättesaamiskinnitus saadetud';
+$messages['errorsendingreceipt'] = 'Ei õnnestunud kättesaamiskinnitust saata';
+$messages['nodeletelastidentity'] = 'See identiteet on viimane ja seda ei saa kustutada.';
+$messages['addsubfolderhint'] = 'See kataloog luuakse valitud kausta alamkataloogina.';
+?>
| language/eu/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Bicyus <bicyus@tenkanet.com> |
+-----------------------------------------------------------------------+
- $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
*/
| language/eu/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: pi <pi@beobide.net> |
+-----------------------------------------------------------------------+
- $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
*/
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | language/fa/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Translators: |
- | Anoosh <anoosher2003@yahoo.com> |\r
- | Mohammad Ebrahim Mohammadi Panah <mebrahim@gmail.com> |\r
- +-----------------------------------------------------------------------+\r
-\r
-*/\r
-\r
-$labels = array();\r
-$labels['welcome'] = 'به $product خوش آمدید';\r
-$labels['username'] = 'نام کاربری';\r
-$labels['password'] = 'گذرواژه';\r
-$labels['server'] = 'خادم';\r
-$labels['login'] = 'ورود';\r
-$labels['logout'] = 'خروج';\r
-$labels['mail'] = 'رایانامه';\r
-$labels['settings'] = 'تنظیمات شخصی';\r
-$labels['addressbook'] = 'دفتر نشانیها';\r
-$labels['inbox'] = 'صندوق';\r
-$labels['drafts'] = 'پیشنویسها';\r
-$labels['sent'] = 'فرستادهشدهها';\r
-$labels['trash'] = 'زبالهدان';\r
-$labels['junk'] = 'بنجل';\r
-$labels['subject'] = 'موضوع';\r
-$labels['from'] = 'فرستنده';\r
-$labels['to'] = 'گیرنده';\r
-$labels['cc'] = 'رونوشت';\r
-$labels['bcc'] = 'رونوشت مخفی';\r
-$labels['replyto'] = 'پاسخ-به';\r
-$labels['date'] = 'تاریخ';\r
-$labels['size'] = 'حجم';\r
-$labels['priority'] = 'اولویت';\r
-$labels['organization'] = 'سازماندهی';\r
-$labels['reply-to'] = 'پاسخ-به';\r
-$labels['mailboxlist'] = 'پوشهها';\r
-$labels['messagesfromto'] = 'پیغامهای $from تا $to از $count تا';\r
-$labels['messagenrof'] = 'پیغام $nr از $count تا';\r
-$labels['moveto'] = '...انتقال به';\r
-$labels['download'] = 'پایینگذاری';\r
-$labels['filename'] = 'نام پرونده';\r
-$labels['filesize'] = 'اندازهی پرونده';\r
-$labels['preferhtml'] = 'نمایش HTML';\r
-$labels['htmlmessage'] = 'پیغام HTML';\r
-$labels['prettydate'] = 'تاریخهای زیبا';\r
-$labels['addtoaddressbook'] = 'افزودن به دفتر نشانیها';\r
-$labels['sun'] = 'یکشنبه';\r
-$labels['mon'] = 'دوشنبه';\r
-$labels['tue'] = 'سهشنبه';\r
-$labels['wed'] = 'چهارشنبه';\r
-$labels['thu'] = 'پنجشنبه';\r
-$labels['fri'] = 'جمعه';\r
-$labels['sat'] = 'شنبه';\r
-$labels['sunday'] = 'یکشنبه';\r
-$labels['monday'] = 'دوشنبه';\r
-$labels['tuesday'] = 'سهشنبه';\r
-$labels['wednesday'] = 'چهارشنبه';\r
-$labels['thursday'] = 'پنجشنبه';\r
-$labels['friday'] = 'جمعه';\r
-$labels['saturday'] = 'شنبه';\r
-$labels['today'] = 'امروز';\r
-$labels['checkmail'] = 'بررسی برای پیغامهای جدید';\r
-$labels['writenewmessage'] = 'ایجاد پیغام جدید';\r
-$labels['replytomessage'] = 'پاسخ به پیغام';\r
-$labels['replytoallmessage'] = 'پاسخ به فرستنده وتمام گیرندهها';\r
-$labels['forwardmessage'] = 'ارجاع پیغام';\r
-$labels['deletemessage'] = 'حذف پیغام';\r
-$labels['movemessagetotrash'] = 'انتقال پیغام به زبالهدان';\r
-$labels['printmessage'] = 'چاپ این پیغام';\r
-$labels['previousmessage'] = 'نمایش پیغام قبلی';\r
-$labels['previousmessages'] = 'نمایش دستهی قبلی پیغامها';\r
-$labels['firstmessage'] = 'نمایش اولین پیغام';\r
-$labels['firstmessages'] = 'نمایش اولین دستهی پیغامها';\r
-$labels['nextmessage'] = 'نمایش پیغام بعدی';\r
-$labels['nextmessages'] = 'نمایش دستهی بعدی پیغامها';\r
-$labels['lastmessage'] = 'نمایش آخرین پیغام';\r
-$labels['lastmessages'] = 'نمایش آخرین دستهی پیغامها';\r
-$labels['backtolist'] = 'بازگشت به فهرست پیغامها';\r
-$labels['viewsource'] = 'نمایش منبع';\r
-$labels['select'] = 'انتخاب';\r
-$labels['all'] = 'همه';\r
-$labels['none'] = 'هیچ';\r
-$labels['unread'] = 'ناخوانده';\r
-$labels['compact'] = 'فشرده';\r
-$labels['empty'] = 'خالی';\r
-$labels['purge'] = 'خرد کردن';\r
-$labels['quota'] = 'فضای استفاده شده';\r
-$labels['unknown'] = 'ناشناخته';\r
-$labels['unlimited'] = 'نامحدود';\r
-$labels['quicksearch'] = 'جستجوی سریع';\r
-$labels['resetsearch'] = 'شروع مجدد جستجو';\r
-$labels['compose'] = 'نوشتن پیغام';\r
-$labels['savemessage'] = 'ذخیرهی این پیشنویس';\r
-$labels['sendmessage'] = 'ارسال پیغام';\r
-$labels['addattachment'] = 'پیوست کردن یک پرونده';\r
-$labels['charset'] = 'مجموعهنمایه';\r
-$labels['editortype'] = 'نوع ویرایشگر';\r
-$labels['returnreceipt'] = 'گیرندهی پیغام بازگشت';\r
-$labels['checkspelling'] = 'بررسی املایی';\r
-$labels['resumeediting'] = 'ادامهی ویرایش';\r
-$labels['revertto'] = 'برگرداندن به';\r
-$labels['attachments'] = 'پیوستها';\r
-$labels['upload'] = 'بالاگذاری';\r
-$labels['close'] = 'بستن';\r
-$labels['low'] = 'کم';\r
-$labels['lowest'] = 'کمترین';\r
-$labels['normal'] = 'معمولی';\r
-$labels['high'] = 'زیاد';\r
-$labels['highest'] = 'بیشترین';\r
-$labels['nosubject'] = '(بدون موضوع)';\r
-$labels['showimages'] = 'نمایش عکسها';\r
-$labels['htmltoggle'] = 'HTML';\r
-$labels['plaintoggle'] = 'متن ساده';\r
-$labels['addcc'] = 'افزودن رونوشت';\r
-$labels['addbcc'] = 'افزودن رونوشت مخفی';\r
-$labels['addreplyto'] = 'افزودن پاسخ-به';\r
-$labels['name'] = 'نمایش نام';\r
-$labels['firstname'] = 'نام';\r
-$labels['surname'] = 'نام خانوادگی';\r
-$labels['email'] = 'رایانامه';\r
-$labels['addcontact'] = 'افزودن تماس جدید';\r
-$labels['editcontact'] = 'ویرایش تماس';\r
-$labels['edit'] = 'ویرایش';\r
-$labels['cancel'] = 'لغو';\r
-$labels['save'] = 'ذخیره';\r
-$labels['delete'] = 'حذف';\r
-$labels['newcontact'] = 'ایجاد کارت تماس جدید';\r
-$labels['deletecontact'] = 'حذف تماسهای انتخاب شده';\r
-$labels['composeto'] = 'نوشتن نامه به';\r
-$labels['contactsfromto'] = 'تماسهای $from تا $to از $count تا';\r
-$labels['print'] = 'چاپ';\r
-$labels['export'] = 'صدور';\r
-$labels['previouspage'] = 'نمایش دستهی قبلی';\r
-$labels['firstpage'] = 'نمایش دستهی اول';\r
-$labels['nextpage'] = 'نمایش دستهی بعدی';\r
-$labels['lastpage'] = 'نمایش دستهی آخر';\r
-$labels['groups'] = 'گروهها';\r
-$labels['personaladrbook'] = 'نشانیهای شخصی';\r
-$labels['settingsfor'] = 'تنظیمات';\r
-$labels['preferences'] = 'ترجیحات';\r
-$labels['userpreferences'] = 'ترجیحات کاربر';\r
-$labels['editpreferences'] = 'ویرایش ترجیحات کاربر';\r
-$labels['identities'] = 'شناسهها';\r
-$labels['manageidentities'] = 'مدیریت شناسهها برای این حساب';\r
-$labels['newidentity'] = 'شناسه جدید';\r
-$labels['newitem'] = 'مورد جدید';\r
-$labels['edititem'] = 'ویرایش مورد';\r
-$labels['setdefault'] = 'پیشفرض کن';\r
-$labels['language'] = 'زبان';\r
-$labels['timezone'] = 'محدودهی زمانی';\r
-$labels['pagesize'] = 'سطر در صفحه';\r
-$labels['signature'] = 'امضا';\r
-$labels['dstactive'] = 'ساعت تابستانی';\r
-$labels['htmleditor'] = 'HTML نوشتن پیغامهای';\r
-$labels['htmlsignature'] = 'HTML امضای';\r
-$labels['previewpane'] = 'نمایش قاب پیشنمایش';\r
-$labels['autosavedraft'] = 'ذخیرهی خودکار پیشنویس';\r
-$labels['everynminutes'] = 'هر $n دقیقه';\r
-$labels['never'] = 'هرگز';\r
-$labels['folder'] = 'پوشه';\r
-$labels['folders'] = 'پوشهها';\r
-$labels['foldername'] = 'نام پوشه';\r
-$labels['subscribed'] = 'مورد اشتراک';\r
-$labels['create'] = 'ایجاد';\r
-$labels['createfolder'] = 'ایجاد پوشهی جدید';\r
-$labels['rename'] = 'تغییر نام';\r
-$labels['renamefolder'] = 'تغییر نام پوشه';\r
-$labels['deletefolder'] = 'حذف پوشه';\r
-$labels['managefolders'] = 'مدیریت پوشهها';\r
-$labels['sortby'] = 'مرتبسازی بر اساس';\r
-$labels['sortasc'] = 'مرتبسازی صعودی';\r
-$labels['sortdesc'] = 'مرتبسازی نزولی';\r
-\r
-?>
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | language/fa/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Mohammad Ebrahim Mohammadi Panah <mebrahim@gmail.com> |
+ | Anoosh <anoosher2003@yahoo.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'به $product خوش آمدید';
+$labels['username'] = 'نام کاربری';
+$labels['password'] = 'گذرواژه';
+$labels['server'] = 'خادم';
+$labels['login'] = 'ورود';
+$labels['logout'] = 'خروج';
+$labels['mail'] = 'رایانامه';
+$labels['settings'] = 'تنظیمات شخصی';
+$labels['addressbook'] = 'دفتر نشانیها';
+$labels['inbox'] = 'صندوق';
+$labels['drafts'] = 'پیشنویسها';
+$labels['sent'] = 'فرستادهشدهها';
+$labels['trash'] = 'زبالهدان';
+$labels['junk'] = 'بنجل';
+$labels['subject'] = 'موضوع';
+$labels['from'] = 'فرستنده';
+$labels['to'] = 'گیرنده';
+$labels['cc'] = 'رونوشت';
+$labels['bcc'] = 'رونوشت مخفی';
+$labels['replyto'] = 'پاسخ-به';
+$labels['date'] = 'تاریخ';
+$labels['size'] = 'حجم';
+$labels['priority'] = 'اولویت';
+$labels['organization'] = 'سازماندهی';
+$labels['reply-to'] = 'پاسخ-به';
+$labels['mailboxlist'] = 'پوشهها';
+$labels['messagesfromto'] = 'پیغامهای $from تا $to از $count تا';
+$labels['messagenrof'] = 'پیغام $nr از $count تا';
+$labels['moveto'] = '...انتقال به';
+$labels['download'] = 'پایینگذاری';
+$labels['filename'] = 'نام پرونده';
+$labels['filesize'] = 'اندازهی پرونده';
+$labels['preferhtml'] = 'نمایش HTML';
+$labels['htmlmessage'] = 'پیغام HTML';
+$labels['prettydate'] = 'تاریخهای زیبا';
+$labels['addtoaddressbook'] = 'افزودن به دفتر نشانیها';
+$labels['sun'] = 'یکشنبه';
+$labels['mon'] = 'دوشنبه';
+$labels['tue'] = 'سهشنبه';
+$labels['wed'] = 'چهارشنبه';
+$labels['thu'] = 'پنجشنبه';
+$labels['fri'] = 'جمعه';
+$labels['sat'] = 'شنبه';
+$labels['sunday'] = 'یکشنبه';
+$labels['monday'] = 'دوشنبه';
+$labels['tuesday'] = 'سهشنبه';
+$labels['wednesday'] = 'چهارشنبه';
+$labels['thursday'] = 'پنجشنبه';
+$labels['friday'] = 'جمعه';
+$labels['saturday'] = 'شنبه';
+$labels['today'] = 'امروز';
+$labels['checkmail'] = 'بررسی برای پیغامهای جدید';
+$labels['writenewmessage'] = 'ایجاد پیغام جدید';
+$labels['replytomessage'] = 'پاسخ به پیغام';
+$labels['replytoallmessage'] = 'پاسخ به فرستنده وتمام گیرندهها';
+$labels['forwardmessage'] = 'ارجاع پیغام';
+$labels['deletemessage'] = 'حذف پیغام';
+$labels['movemessagetotrash'] = 'انتقال پیغام به زبالهدان';
+$labels['printmessage'] = 'چاپ این پیغام';
+$labels['previousmessage'] = 'نمایش پیغام قبلی';
+$labels['previousmessages'] = 'نمایش دستهی قبلی پیغامها';
+$labels['firstmessage'] = 'نمایش اولین پیغام';
+$labels['firstmessages'] = 'نمایش اولین دستهی پیغامها';
+$labels['nextmessage'] = 'نمایش پیغام بعدی';
+$labels['nextmessages'] = 'نمایش دستهی بعدی پیغامها';
+$labels['lastmessage'] = 'نمایش آخرین پیغام';
+$labels['lastmessages'] = 'نمایش آخرین دستهی پیغامها';
+$labels['backtolist'] = 'بازگشت به فهرست پیغامها';
+$labels['viewsource'] = 'نمایش منبع';
+$labels['markmessages'] = 'علامتگذاری پیغامها';
+$labels['markread'] = 'به عنوان خواندهشده';
+$labels['markunread'] = 'به عنوان خواندهنشده';
+$labels['select'] = 'انتخاب';
+$labels['all'] = 'همه';
+$labels['none'] = 'هیچ';
+$labels['unread'] = 'ناخوانده';
+$labels['compact'] = 'فشرده';
+$labels['empty'] = 'خالی';
+$labels['purge'] = 'خرد کردن';
+$labels['quota'] = 'فضای استفاده شده';
+$labels['unknown'] = 'ناشناخته';
+$labels['unlimited'] = 'نامحدود';
+$labels['quicksearch'] = 'جستجوی سریع';
+$labels['resetsearch'] = 'شروع مجدد جستجو';
+$labels['compose'] = 'نوشتن پیغام';
+$labels['savemessage'] = 'ذخیرهی این پیشنویس';
+$labels['sendmessage'] = 'ارسال پیغام';
+$labels['addattachment'] = 'پیوست کردن یک پرونده';
+$labels['charset'] = 'مجموعهنمایه';
+$labels['editortype'] = 'نوع ویرایشگر';
+$labels['returnreceipt'] = 'رسید دریافت';
+$labels['checkspelling'] = 'بررسی املایی';
+$labels['resumeediting'] = 'ادامهی ویرایش';
+$labels['revertto'] = 'برگرداندن به';
+$labels['attachments'] = 'پیوستها';
+$labels['upload'] = 'بالاگذاری';
+$labels['close'] = 'بستن';
+$labels['low'] = 'کم';
+$labels['lowest'] = 'کمترین';
+$labels['normal'] = 'معمولی';
+$labels['high'] = 'زیاد';
+$labels['highest'] = 'بیشترین';
+$labels['nosubject'] = '(بدون موضوع)';
+$labels['showimages'] = 'نمایش عکسها';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'متن ساده';
+$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'] = 'تماسهای $from تا $to از $count تا';
+$labels['print'] = 'چاپ';
+$labels['export'] = 'صدور';
+$labels['previouspage'] = 'نمایش دستهی قبلی';
+$labels['firstpage'] = 'نمایش دستهی اول';
+$labels['nextpage'] = 'نمایش دستهی بعدی';
+$labels['lastpage'] = 'نمایش دستهی آخر';
+$labels['groups'] = 'گروهها';
+$labels['personaladrbook'] = 'نشانیهای شخصی';
+$labels['settingsfor'] = 'تنظیمات';
+$labels['preferences'] = 'ترجیحات';
+$labels['userpreferences'] = 'ترجیحات کاربر';
+$labels['editpreferences'] = 'ویرایش ترجیحات کاربر';
+$labels['identities'] = 'شناسهها';
+$labels['manageidentities'] = 'مدیریت شناسهها برای این حساب';
+$labels['newidentity'] = 'شناسه جدید';
+$labels['newitem'] = 'مورد جدید';
+$labels['edititem'] = 'ویرایش مورد';
+$labels['setdefault'] = 'پیشفرض کن';
+$labels['language'] = 'زبان';
+$labels['timezone'] = 'محدودهی زمانی';
+$labels['pagesize'] = 'سطر در صفحه';
+$labels['signature'] = 'امضا';
+$labels['dstactive'] = 'ساعت تابستانی';
+$labels['htmleditor'] = 'HTML نوشتن پیغامهای';
+$labels['htmlsignature'] = 'HTML امضای';
+$labels['previewpane'] = 'نمایش قاب پیشنمایش';
+$labels['autosavedraft'] = 'ذخیرهی خودکار پیشنویس';
+$labels['everynminutes'] = 'هر $n دقیقه';
+$labels['never'] = 'هرگز';
+$labels['folder'] = 'پوشه';
+$labels['folders'] = 'پوشهها';
+$labels['foldername'] = 'نام پوشه';
+$labels['subscribed'] = 'مورد اشتراک';
+$labels['messagecount'] = 'پیغامها';
+$labels['create'] = 'ایجاد';
+$labels['createfolder'] = 'ایجاد پوشهی جدید';
+$labels['rename'] = 'تغییر نام';
+$labels['renamefolder'] = 'تغییر نام پوشه';
+$labels['deletefolder'] = 'حذف پوشه';
+$labels['managefolders'] = 'مدیریت پوشهها';
+$labels['sortby'] = 'مرتبسازی بر اساس';
+$labels['sortasc'] = 'مرتبسازی صعودی';
+$labels['sortdesc'] = 'مرتبسازی نزولی';
+
+?>
\ No newline at end of file
| language/fa/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2006, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Translators: |
- | Anoosh <anoosher2003@yahoo.com> |\r
- | Mohammad Ebrahim Mohammadi Panah <mebrahim@gmail.com> |\r
+ | Author: Mohammad Ebrahim Mohammadi Panah <mebrahim@gmail.com> |
+ | Anoosh <anoosher2003@yahoo.com> |
+-----------------------------------------------------------------------+
+ @version $Id$
+
*/
$messages = array();
$messages['sourceisreadonly'] = 'این منبع نشانی فقطخواندنی است';
$messages['errorsavingcontact'] = 'ذخیرهی نشانی تماس ناموفق بود';
$messages['movingmessage'] = 'در حال انتقال پیغام ...';
+$messages['receiptsent'] = 'رسید خواندن با موفقیت ارسال شد';
+$messages['errorsendingreceipt'] = 'ناتوان از ارسال رسید';
+$messages['nodeletelastidentity'] = 'نمیتوانید این هویت را حذف کنید، زیرا آخرین هویت شماست.';
+$messages['addsubfolderhint'] = 'پوشه به عنوان زیرپوشه ای ساخته خواهد شد که هم اکنون انتخاب شده است';
-?>
+?>
\ No newline at end of file
| language/fi/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Veljo Velling <veve@utu.fi> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 612 2007-06-12 18:17:21Z thomasb $
+ @version $Id: labels.inc 1151 2008-02-28 19:56:47Z thomasb $
*/
$labels['replytomessage'] = 'Vastaa viestiin';
$labels['replytoallmessage'] = 'Vastaa kaikille';
$labels['forwardmessage'] = 'Välitä viesti';
-$labels['deletemessage'] = 'Siirrä viesti roskakoriin';
+$labels['deletemessage'] = 'Poista viesti';
+$labels['movemessagetotrash'] = 'Siirrä viesti roskakoriin';
$labels['printmessage'] = 'Tulosta viesti';
$labels['previousmessage'] = 'Näytä edellinen viesti';
$labels['previousmessages'] = 'Näytä edelliset viestit';
$labels['lastmessages'] = 'Näytä viimeinen viestiluettelo';
$labels['backtolist'] = 'Takaisin viesteihin';
$labels['viewsource'] = 'Näytä lähdekoodi';
+$labels['markmessages'] = 'Merkitse viestit';
+$labels['markread'] = 'luetuiksi';
+$labels['markunread'] = 'ei-luetuiksi';
$labels['select'] = 'Valitse';
$labels['all'] = 'Kaikki';
$labels['none'] = 'Ei mitään';
$labels['quicksearch'] = 'Pikahaku';
$labels['resetsearch'] = 'Nollaa haku';
$labels['compose'] = 'Viestin kirjoitus';
-$labels['sendmessage'] = 'Lähetä viesti';
$labels['savemessage'] = 'Tallenna tämä luonnos';
+$labels['sendmessage'] = 'Lähetä viesti';
$labels['addattachment'] = 'Liitetiedosto';
$labels['charset'] = 'Merkistö';
$labels['editortype'] = 'Editorin tyyppi';
$labels['showimages'] = 'Näytä kuvat';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Tavallinen teksti';
+$labels['addcc'] = 'Lisää kopio';
+$labels['addbcc'] = 'Lisää piilokopio';
+$labels['addreplyto'] = 'Lisää vastausosoite';
+$labels['mdnrequest'] = 'Viestin lähettäjä on pyytänyt kuittauksen siitä että olet lukenut viestin. Haluatko lähettää kuittauksen?';
+$labels['receiptread'] = 'Lukukuittaus';
+$labels['yourmessage'] = 'Tämä viesti on kuittaus lähettämällesi viestille';
+$labels['receiptnote'] = 'Huom! Kuittaus kertoo vain siitä, että viesti on avattu vastaanottajan tietokoneella. Se ei tarkoita että vastaanottaja on myös lukenut tai ymmärtänyt viestin.';
$labels['name'] = 'Näkyvä nimi';
$labels['firstname'] = 'Etunimi';
$labels['surname'] = 'Sukunimi';
$labels['folders'] = 'Kansiot';
$labels['foldername'] = 'Kansion nimi';
$labels['subscribed'] = 'Näytetään';
+$labels['messagecount'] = 'Viestejä';
$labels['create'] = 'Luo uusi';
$labels['createfolder'] = 'Luo uusi kansio';
$labels['rename'] = 'Nimeä uudelleen';
| language/fi/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Veljo Velling <veve@utu.fi> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 612 2007-06-12 18:17:21Z thomasb $
+ @version $Id: messages.inc 1151 2008-02-28 19:56:47Z thomasb $
*/
$messages['norecipientwarning'] = 'Anna ainakin yksi vastaanottaja';
$messages['nosubjectwarning'] = '"Otsikko" -kenttä on tyhjä. Haluaisitko kirjoittaa viestillesi otsikon?';
$messages['nobodywarning'] = 'Lähetetäänkö viesti ilman tekstiä?';
-$messages['notsentwarning'] = 'Viestiä ei lähetetty. Haluatko poistaa viestin?';
+$messages['notsentwarning'] = 'Viestiä ei lähethttp://translator.roundcube.net/index.phpetty. Haluatko poistaa viestin?';
$messages['noldapserver'] = 'Valitse LDAP -palvelin';
$messages['nocontactsreturned'] = 'Yhtään kontaktia ei löytynyt';
$messages['nosearchname'] = 'Anna kontaktin nimi tai sähköpostiosoite';
$messages['copyerror'] = 'Yhtään osoitetta ei voitu kopioida';
$messages['sourceisreadonly'] = 'Tämän osoitteen lähde on kirjoitussuojattu';
$messages['errorsavingcontact'] = 'Yhteystietoa ei voitu tallentaa';
+$messages['movingmessage'] = 'Siirretään viestiä...';
+$messages['receiptsent'] = 'Lukukuittaus lähetetty onnistuneesti';
+$messages['errorsendingreceipt'] = 'Lukukuittausta ei voitu lähettää';
+$messages['nodeletelastidentity'] = 'Et voi poistaa tätä identiteettiä, koska se on ainoa jäljelläoleva';
+$messages['addsubfolderhint'] = 'Uusi kansio luodaan valitun kansion alikansiona';
?>
\ No newline at end of file
| language/fr/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
$labels['replytoallmessage'] = 'Répondre à tous';
$labels['forwardmessage'] = 'Transmettre le message';
$labels['deletemessage'] = 'Déplacer le message dans la corbeille';
+$labels['movemessagetotrash'] = 'Déplacer le message dans la corbeille';
$labels['printmessage'] = 'Imprimer ce message';
$labels['previousmessage'] = 'Voir le message précédent';
$labels['previousmessages'] = 'Voir les messages précédents';
$labels['lastmessages'] = 'Voir la dernière page de messages';
$labels['backtolist'] = 'Retourner à la liste des messages';
$labels['viewsource'] = 'Voir le source';
+$labels['markmessages'] = 'Marquer les messages';
+$labels['markread'] = 'Comme lus';
+$labels['markunread'] = 'Comme non lus';
$labels['select'] = 'Sélectionner';
$labels['all'] = 'Tous';
$labels['none'] = 'Aucun';
$labels['quicksearch'] = 'Recherche rapide';
$labels['resetsearch'] = 'Réinitialiser la recherche';
$labels['compose'] = 'Composer un nouveau message';
-$labels['sendmessage'] = 'Envoyer le message maintenant';
$labels['savemessage'] = 'Sauvegarder ce brouillon';
+$labels['sendmessage'] = 'Envoyer le message maintenant';
$labels['addattachment'] = 'Joindre un fichier';
$labels['charset'] = 'Encodage';
$labels['editortype'] = 'Type d\'éditeur';
$labels['showimages'] = 'Afficher les images';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'texte brut';
+$labels['addcc'] = 'Ajouter Cc';
+$labels['addbcc'] = 'Ajouter Cci';
+$labels['addreplyto'] = 'Ajouter Répondre à';
+$labels['mdnrequest'] = 'L\'expéditeur de ce message a demandé d\'être prévenu quand vous lirez ce message. Souhaitez-vous prévenir l\'expéditeur ?';
+$labels['receiptread'] = 'Accusé de réception (lire)';
+$labels['yourmessage'] = 'Ceci est un accusé de réception pour votre message';
+$labels['receiptnote'] = 'Note : Cet accusé de réception indique seulement que le message a été affiché sur l\'ordinateur du destinataire. Il n\'y a aucune garantie que le destinataire a lu ou compris le contenu du message.';
$labels['name'] = 'Nom à afficher';
$labels['firstname'] = 'Prénom';
$labels['surname'] = 'Nom';
$labels['nextpage'] = 'Montrer page suivante';
$labels['lastpage'] = 'Voir la dernière page';
$labels['groups'] = 'Groupes';
-$labels['personaladrbook'] = 'Adresses personnelle';
+$labels['personaladrbook'] = 'Adresses personnelles';
$labels['settingsfor'] = 'Paramètres pour';
$labels['preferences'] = 'Préférences';
$labels['userpreferences'] = 'Préférences utilisateur';
$labels['folders'] = 'Dossiers';
$labels['foldername'] = 'Nom du dossier';
$labels['subscribed'] = 'Abonné';
+$labels['messagecount'] = 'Messages';
$labels['create'] = 'Créer';
$labels['createfolder'] = 'Créer un nouveau dossier';
$labels['rename'] = 'Renommer';
$labels['sortasc'] = 'Tri ascendant';
$labels['sortdesc'] = 'Tri descendant';
-?>
\ No newline at end of file
+?>
| language/fr/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
$messages['copyerror'] = 'Ne peut pas copier les adresses';
$messages['sourceisreadonly'] = 'Cette source d\'adresse est en lecture seule';
$messages['errorsavingcontact'] = 'Ne peut pas enregistrer l\'adresse du contact';
+$messages['movingmessage'] = 'Déplacement du message...';
+$messages['receiptsent'] = 'L\'accusé de réception a bien été envoyé';
+$messages['errorsendingreceipt'] = 'L\'accusé de réception n\'a pas pu être envoyé';
+$messages['nodeletelastidentity'] = 'Vous ne pouvez pas effacer votre seule identité.';
+$messages['addsubfolderhint'] = 'Ce dossier sera créé comme sous-dossier de celui sélectionné.';
?>
\ No newline at end of file
| language/ga/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Noel Bourke (cros13) |
+-----------------------------------------------------------------------+
+ @version $Id$
+
*/
$labels = array();
| language/ga/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Noel Bourke (cros13) |
+-----------------------------------------------------------------------+
+ @version $Id$
+
*/
$messages = array();
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ge/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Zaza Zviadadze <zviadadze@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza$
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = 'მოგესალმებათ $product';
+$labels['username'] = 'მომხმარებელი';
+$labels['password'] = 'პაროლი';
+$labels['server'] = 'სერვერი';
+$labels['login'] = 'შესვლა';
+
+// taskbar
+$labels['logout'] = 'გამოსვლა';
+$labels['mail'] = 'ელ–ფოსტა';
+$labels['settings'] = 'პარამეტრები';
+$labels['addressbook'] = 'მისამართები';
+
+// mailbox names
+$labels['inbox'] = 'მიღებული';
+$labels['drafts'] = 'დროებითი';
+$labels['sent'] = 'გაგზავნილები';
+$labels['trash'] = 'წაშლილები';
+$labels['junk'] = 'სპამი';
+
+// message listing
+$labels['subject'] = 'სათაური';
+$labels['from'] = 'გამგზავნი';
+$labels['to'] = 'მიმღები';
+$labels['cc'] = 'კოპია';
+$labels['bcc'] = 'ფარული';
+$labels['replyto'] = 'დაბრუნება';
+$labels['date'] = 'თარიღი';
+$labels['size'] = 'ზომა';
+$labels['priority'] = 'პრიორიტეტი';
+$labels['organization'] = 'ორგანიზაცია';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'საქაღალდეები';
+$labels['messagesfromto'] = 'შეტყობინება $from $to დან $count';
+$labels['messagenrof'] = 'შეტყობინება $nr დან $count';
+
+$labels['moveto'] = 'გადატანა...';
+$labels['download'] = 'გადმოწერა';
+
+$labels['filename'] = 'ფაილის სახელი';
+$labels['filesize'] = 'ფაილის ზომა';
+
+$labels['preferhtml'] = 'როგორც HTML';
+$labels['htmlmessage'] = 'HTML შეტყობინება';
+$labels['prettydate'] = 'კარგი თარიღები';
+
+$labels['addtoaddressbook'] = 'მისამართებში დამატება';
+
+// weekdays short
+$labels['sun'] = 'კვ';
+$labels['mon'] = 'ორ';
+$labels['tue'] = 'სამ';
+$labels['wed'] = 'ოთხ';
+$labels['thu'] = 'ხუთ';
+$labels['fri'] = 'პარ';
+$labels['sat'] = 'შაბ';
+
+// weekdays long
+$labels['sunday'] = 'კვირა';
+$labels['monday'] = 'ორშაბათი';
+$labels['tuesday'] = 'სამშაბათი';
+$labels['wednesday'] = 'ოთხშაბათი';
+$labels['thursday'] = 'ხუთშაბათი';
+$labels['friday'] = 'პარასკევი';
+$labels['saturday'] = 'შაბათი';
+
+$labels['today'] = 'დღეს';
+
+// toolbar buttons
+$labels['checkmail'] = 'შემოწმება ახალ შეტყობინებაზე';
+$labels['writenewmessage'] = 'ახალი შეტყობინება';
+$labels['replytomessage'] = 'პასუხი';
+$labels['replytoallmessage'] = 'პასუხი ყველას';
+$labels['forwardmessage'] = 'გადაგზავნა';
+$labels['deletemessage'] = 'წაშლა';
+$labels['movemessagetotrash'] = 'შეტყობინების წაშლილებში გადატანა';
+$labels['printmessage'] = 'შეტყობინების ამობეჭვდა';
+$labels['previousmessage'] = 'წინა შეტყობინების ნახვა';
+$labels['previousmessages'] = 'წინა შეტყობინებების ნახვა';
+$labels['firstmessage'] = 'პირველი შეტყობინების ნახვა';
+$labels['firstmessages'] = 'პრველი შეტყობინებები';
+$labels['nextmessage'] = 'შემდეგი შეტყობინების ნახვა';
+$labels['nextmessages'] = 'შემდეგი შეტყობინებების ნახვა';
+$labels['lastmessage'] = 'ბოლო შეტყობინების ნახვა';
+$labels['lastmessages'] = 'ბოლო შეტყობინებების ნახვა';
+$labels['backtolist'] = 'უკან ჩამონათვალში';
+$labels['viewsource'] = 'შიგთავსი';
+
+$labels['select'] = 'მონიშვნა';
+$labels['all'] = 'ყველა';
+$labels['none'] = 'არცერთი';
+$labels['unread'] = 'წაუკითხავი';
+
+$labels['compact'] = 'შეკუმშვა';
+$labels['empty'] = 'გაცარიელება';
+$labels['purge'] = 'გასუფთავება';
+
+$labels['quota'] = 'შეზღუდვა';
+$labels['unknown'] = 'უცნობი';
+$labels['unlimited'] = 'შეუზღუდავი';
+
+$labels['quicksearch'] = 'სწრაფი ძიება';
+$labels['resetsearch'] = 'ძიების გასუფთავება';
+
+
+// message compose
+$labels['compose'] = 'შეტყობინების დაწერა';
+$labels['sendmessage'] = 'შეტყობინების გაგზავნა';
+$labels['savemessage'] = 'დროებით შენახვა';
+$labels['addattachment'] = 'ფაილის ატვირთვა';
+$labels['charset'] = 'კოდირება';
+$labels['editortype'] = 'რედაქტორი';
+$labels['returnreceipt'] = 'პასუხის მოთხოვნა';
+
+$labels['checkspelling'] = 'ორთოგრაფიული შემოწმება';
+$labels['resumeediting'] = 'რედაქტირების გაგრძელება';
+$labels['revertto'] = 'გაუქმება';
+
+$labels['attachments'] = 'გზავნილები';
+$labels['upload'] = 'ატვირთვა';
+$labels['close'] = 'დახურვა';
+
+$labels['low'] = 'დაბალი';
+$labels['lowest'] = 'უდაბლესი';
+$labels['normal'] = 'საშუალო';
+$labels['high'] = 'მაღალი';
+$labels['highest'] = 'უმაღლესი';
+
+$labels['nosubject'] = '(უსათაურო)';
+$labels['showimages'] = 'გამოსახულების ჩვენება';
+
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'ტექსტური';
+
+$labels['addcc'] = 'დაამატე კოპიო';
+$labels['addbcc'] = 'დაამატე ფარული კოპიო';
+$labels['addreplyto'] = 'დაამატე გამომგზავნი';
+
+
+// address boook
+$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'] = 'კონტაქტები $from დან $to ში $count';
+$labels['print'] = 'დაბეჭვდა';
+$labels['export'] = 'ექსპორტი';
+
+$labels['previouspage'] = 'წინას ჩვენება';
+$labels['firstpage'] = 'პირველის ჩვენება';
+$labels['nextpage'] = 'შემდეგის ჩვენება';
+$labels['lastpage'] = 'ბოლოს ჩვენება';
+
+$labels['groups'] = 'ჯგუფები';
+$labels['personaladrbook'] = 'პერსონალური მისამართები';
+
+
+// settings
+$labels['settingsfor'] = 'პარამეტრები';
+
+$labels['preferences'] = 'პარამეტრები';
+$labels['userpreferences'] = 'მომხმარებლის პარამეტრები';
+$labels['editpreferences'] = 'მომხმარებლის პარამეტრების რედაქტირება';
+
+$labels['identities'] = 'პროფილები';
+$labels['manageidentities'] = 'პროფილების მართვა';
+$labels['newidentity'] = 'ახალი პროფილი';
+
+$labels['newitem'] = 'ახალი';
+$labels['edititem'] = 'რედაქტირება';
+
+$labels['setdefault'] = 'როგორც ზოგაგად';
+$labels['language'] = 'ენა';
+$labels['timezone'] = 'დროითი ზონა';
+$labels['pagesize'] = 'სტრიქონი გვერდზე';
+$labels['signature'] = 'ხელმოწერა';
+$labels['dstactive'] = 'დროის გადაყვანა';
+$labels['htmleditor'] = 'შეტყობინების შექმნა HTML –ში';
+$labels['htmlsignature'] = 'HTML ხელმოწერა';
+$labels['previewpane'] = 'ჩვენება';
+
+$labels['autosavedraft'] = 'ავტომატური შენახვა';
+$labels['everynminutes'] = 'ყოველ $n წუთში';
+$labels['never'] = 'არასდროს';
+
+$labels['folder'] = 'საქაღალდე';
+$labels['folders'] = 'საქაღალდეები';
+$labels['foldername'] = 'საქაღალდის დასახელება';
+$labels['subscribed'] = 'გამოცერილია';
+$labels['create'] = 'შექმნა';
+$labels['createfolder'] = 'საქაღალდის შექმნა';
+$labels['rename'] = 'სახელის გადარქმევა';
+$labels['renamefolder'] = 'სახელის გადარქმევა საქაღალდისთვის';
+$labels['deletefolder'] = 'საქაღალდის წაშლა';
+$labels['managefolders'] = 'საქაღალდეების მართვა';
+
+$labels['sortby'] = 'დალაგება';
+$labels['sortasc'] = 'დალაგება ზრდადობით';
+$labels['sortdesc'] = 'დალაგება კლებადობით';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ge/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Zaza Zviadadze <zviadadze@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'შესვლა შეუძლებელია';
+$messages['cookiesdisabled'] = 'თქვენი ბროუზერი კუკიებს არ პასუხობს';
+$messages['sessionerror'] = 'თქვენი სესია არის მცდარი ან ვადაგასული';
+$messages['imaperror'] = 'IMAP სერვერთან დაკავშირება შეუძლებელია';
+$messages['nomessagesfound'] = 'არ არის ახალი შეტყობინება';
+$messages['loggedout'] = 'წარმატებით დაიხურა თქვენი სესია';
+$messages['mailboxempty'] = 'საფოსტო ყუთი ცარიელია';
+$messages['loading'] = 'იტვირთება...';
+$messages['loadingdata'] = 'მონაცემების ჩატვირთვა...';
+$messages['checkingmail'] = 'ახალი შეტყობინების ნახვა';
+$messages['sendingmessage'] = 'შეტყობინების გაგზავნა';
+$messages['messagesent'] = 'შეტყობინება გაიგზავნა წარმატებით';
+$messages['savingmessage'] = 'შეტყობინების შენახვა...';
+$messages['messagesaved'] = 'შეტყობინების დროებით შენახვა';
+$messages['successfullysaved'] = 'წარმატებით შეინახა';
+$messages['addedsuccessfully'] = 'კონტაქტი წარმატებით დაემატა მისამართებში';
+$messages['contactexists'] = 'კონტაქტი ამ მისამართზე უკვე არსებობს';
+$messages['blockedimages'] = 'უსაფრთხოების მიზნით სურათების ჩვენება შეზღუდულია';
+$messages['encryptedmessage'] = 'შეტყობინება დაშიფრულია და სამწუხაროდ ჩვენება შეუძლებელია';
+$messages['nocontactsfound'] = 'კონტაქტი ვერ მოიძებნა';
+$messages['contactnotfound'] = 'მოთხოვნილი კონტაქტი ვერ მოიძებნა';
+$messages['sendingfailed'] = 'შეტყობინება ვერ გაიგზავნა';
+$messages['errorsaving'] = 'შენახვის დროს მოხდა შეცდომა';
+$messages['errormoving'] = 'შეტყობინების გადატანა შეუძლებელია';
+$messages['errordeleting'] = 'შეტყობინების წაშლა შეუძლებელია';
+$messages['deletecontactconfirm'] = 'ნამდვილად გსურთ მონიშნული კონტაქტების წაშლა?';
+$messages['deletemessagesconfirm'] = 'ნამდვილად გსურთ მონიშნული შეტყობინებების წაშლა?';
+$messages['deletefolderconfirm'] = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?';
+$messages['purgefolderconfirm'] = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?';
+$messages['formincomplete'] = 'ყველა ველი არ არის შევსებული';
+$messages['noemailwarning'] = 'მიუთითეთ სწორი ელ–ფოსტის მისამართი';
+$messages['nonamewarning'] = 'მიუთითეთ სახელი';
+$messages['nopagesizewarning'] = 'მიუთითეთ ფურცლის ზომა';
+$messages['norecipientwarning'] = 'მიუთითეთ მიმღები';
+$messages['nosubjectwarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?';
+$messages['nobodywarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უტექსტოდ?';
+$messages['notsentwarning'] = 'შეტყობინება ვერ იქნა გაგზავნილი. გსურთ თუ არა გზავნილის გაუქმება?';
+$messages['noldapserver'] = 'მიუთითეთ LDAP სერვერი ძიებისთვის';
+$messages['nocontactsreturned'] = 'კონტაქტები ვერ მოძებნა';
+$messages['nosearchname'] = 'მიუთითეთ სახელი ან ელ–ფოსტის მისამართი';
+$messages['searchsuccessful'] = '$nr შეტყობინეა მოიძებნა';
+$messages['searchnomatch'] = 'შეტყობინება ვერ მოიძებნა';
+$messages['searching'] = 'ძიება...';
+$messages['checking'] = 'შემოწმება...';
+$messages['nospellerrors'] = 'ორთოგრაფიული შეცდომა არ არის';
+$messages['folderdeleted'] = 'საქაღალდე წარმატებით წაიშალა';
+$messages['deletedsuccessfully'] = 'წარმატებით წაიშალა';
+$messages['converting'] = 'შეტყობინების ფორმატირების გაუქმება...';
+$messages['messageopenerror'] = 'შეტყობინება ვერ ჩაიტვირთა სერვერიდან';
+$messages['fileuploaderror'] = 'ფაილი ვერ აიტვირთა';
+$messages['filesizeerror'] = 'ატვირთული ფაილის ზომა მეტია დასაშვებ ფაილის მაქსიმალურ ზომაზე ($size)';
+$messages['copysuccess'] = 'წარმატებით დაკოპირდა $nr მისამართი';
+$messages['copyerror'] = 'ვერცერთი მისამართი ვერ დაკოპირდა';
+$messages['sourceisreadonly'] = 'აღნიშნული მისამართის მხოლოდ წაკითხვაა შესაძლებელი';
+$messages['errorsavingcontact'] = 'საკონტაქტო მისამართის შენახვა შეუძლებელია';
+$messages['movingmessage'] = 'შეტყობინების გადატანა...';
+
+?>
| language/gl/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2006, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: David Garabana Barro <david_garabana-com> |
+ | Author: David Garabana Barro <david garabana com> |
+-----------------------------------------------------------------------+
*/
$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['select'] = 'Seleccionar';
$labels['all'] = 'Todas';
$labels['none'] = 'Ningunha';
$labels['addcc'] = 'Engadir Copia (CC)';
$labels['addbcc'] = 'Engadir Copia Oculta (BCC)';
$labels['addreplyto'] = 'Engadir Respostar a (Reply-To)';
+$labels['mdnrequest'] = 'O remitente desta mensaxe pediu ser notificado cando vostede lea esta mensaxe. Quere notificar ao remitente?';
+$labels['receiptread'] = 'Notificación da disposición da mensaxe (lectura)';
+$labels['yourmessage'] = 'Esta é unha notificación de disposición para a súa mensaxe';
+$labels['receiptnote'] = 'Nota: Esta notificación só confirma que a mensaxe se abriu no computador do destinatario. Non asegura que o destinatario o lera ou entendera o seu contido.';
$labels['name'] = 'Nome completo';
$labels['firstname'] = 'Nome';
$labels['surname'] = 'Apelidos';
$labels['folders'] = 'Cartafoles';
$labels['foldername'] = 'Nome do cartafol';
$labels['subscribed'] = 'Subscrito';
+$labels['messagecount'] = 'Mensaxes';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear novo cartafol';
$labels['rename'] = 'Renomear';
| language/gl/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2006, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
$messages['sessionerror'] = 'A súa sesión non é válida ou expirou';
$messages['imaperror'] = 'Fallou a conexión co servidor IMAP';
$messages['nomessagesfound'] = 'Non se atoparon mensaxes nesta caixa de correo';
-$messages['loggedout'] = 'Rematou correctamente a súa sesión. ¡Ata logo!';
+$messages['loggedout'] = 'Rematou correctamente a súa sesión. Ata logo!';
$messages['mailboxempty'] = 'A caixa de correo está vacía';
$messages['loading'] = 'Cargando...';
$messages['loadingdata'] = 'Cargando datos...';
$messages['addedsuccessfully'] = 'O contacto engadiuse correctamente ao caderno de enderezos';
$messages['contactexists'] = 'Xa existe un contacto con este enderezo de correo electrónico';
$messages['blockedimages'] = 'Estanse a bloquear as imaxes remotas para protexer a súa privacidade';
-$messages['encryptedmessage'] = '¡Síntoo!. Non se pode amosar a mensaxe porque está cifrada';
+$messages['encryptedmessage'] = 'Síntoo!. Non se pode amosar a mensaxe porque está cifrada';
$messages['nocontactsfound'] = 'Non se atoparon contactos';
$messages['contactnotfound'] = 'Non se atopou o contacto solicitado';
$messages['sendingfailed'] = 'Fallou o envío da mensaxe';
$messages['errorsaving'] = 'Ocurriu un erro mentres se gardaba';
$messages['errormoving'] = 'Non puiden mover a mensaxe';
$messages['errordeleting'] = 'Non puiden borrar a mensaxe';
-$messages['deletecontactconfirm'] = '¿Quere borrar o(s) contacto(s) seleccionados?';
-$messages['deletemessagesconfirm'] = '¿Quere borrar a(s) mensaxe(s) seleccionadas?';
-$messages['deletefolderconfirm'] = '¿Quere borrar este cartafol?';
-$messages['purgefolderconfirm'] = '¿Quere borrar tódalas mensaxes neste cartafol?';
+$messages['deletecontactconfirm'] = 'Quere borrar o(s) contacto(s) seleccionados?';
+$messages['deletemessagesconfirm'] = 'Quere borrar a(s) mensaxe(s) seleccionadas?';
+$messages['deletefolderconfirm'] = 'Quere borrar este cartafol?';
+$messages['purgefolderconfirm'] = 'Quere borrar tódalas mensaxes neste cartafol?';
$messages['formincomplete'] = 'Non se cumprimentou completamente o formulario';
$messages['noemailwarning'] = 'Por favor, introduza un enderezo de correo electrónico válida';
$messages['nonamewarning'] = 'Por favor, introduza un nome';
$messages['nopagesizewarning'] = 'Por favor, introduza un tamaño de páxina';
$messages['norecipientwarning'] = 'Por favor, introduza polo menos un destinatario';
-$messages['nosubjectwarning'] = 'O campo "tema" está baleiro. ¿Quere introducir un?';
-$messages['nobodywarning'] = '¿Quere enviar esta mensaxe sen texto?';
-$messages['notsentwarning'] = 'A mensaxe non se enviou. ¿Quere descartala?';
+$messages['nosubjectwarning'] = 'O campo "tema" está baleiro. Quere introducir un?';
+$messages['nobodywarning'] = 'Quere enviar esta mensaxe sen texto?';
+$messages['notsentwarning'] = 'A mensaxe non se enviou. Quere descartala?';
$messages['noldapserver'] = 'Por favor, elixa un servidor LDAP para buscar';
$messages['nocontactsreturned'] = 'Non se atoparon contactos';
$messages['nosearchname'] = 'Por favor, introduza un contacto ou un enderezo de correo electrónico';
$messages['sourceisreadonly'] = 'A orixe é de só lectura';
$messages['errorsavingcontact'] = 'Non puiden gardar o contacto';
$messages['movingmessage'] = 'Movendo mensaxe...';
+$messages['receiptsent'] = 'A notificación de disposición enviouse correctamente';
+$messages['errorsendingreceipt'] = 'Non se puido enviar a notificación';
+$messages['nodeletelastidentity'] = 'Non pode borrar esta identidade, é a última';
+$messages['addsubfolderhint'] = 'Este cartafol vaise crear coma un subcartafol do seleccionado';
-?>
\ No newline at end of file
+?>
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/he/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Moshe Leibovitch <moish@mln.co.il> |\r
+ +-----------------------------------------------------------------------+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = 'ברוך בואך אל $product';\r
+$labels['username'] = 'שם';\r
+$labels['password'] = 'סיסמה';\r
+$labels['server'] = 'שרת';\r
+$labels['login'] = 'כניסה';\r
+$labels['logout'] = 'יציאה';\r
+$labels['mail'] = 'תיבת דואר';\r
+$labels['settings'] = 'הגדרות אישיות';\r
+$labels['addressbook'] = 'פנקס כתובות';\r
+$labels['inbox'] = 'נכנס';\r
+$labels['drafts'] = 'טיוטות';\r
+$labels['sent'] = 'נשלח';\r
+$labels['trash'] = 'אשפה';\r
+$labels['junk'] = 'זבל';\r
+$labels['subject'] = 'נושא';\r
+$labels['from'] = 'מאת';\r
+$labels['to'] = 'אל';\r
+$labels['cc'] = 'לידיעה';\r
+$labels['bcc'] = 'מכותב מוסתר';\r
+$labels['replyto'] = 'מענה לשולח';\r
+$labels['date'] = 'תאריך';\r
+$labels['size'] = 'גודל';\r
+$labels['priority'] = 'עדיפות';\r
+$labels['organization'] = 'ארגון';\r
+$labels['reply-to'] = 'מענה לשולח';\r
+$labels['mailboxlist'] = 'תיקים';\r
+$labels['messagesfromto'] = 'הודעות $from עד $to מתוך $count';\r
+$labels['messagenrof'] = 'הודעה $nr מתוך $count';\r
+$labels['moveto'] = 'תיוק ב..';\r
+$labels['download'] = 'הורדה';\r
+$labels['filename'] = 'שם קובץ';\r
+$labels['filesize'] = 'גודל קובץ';\r
+$labels['preferhtml'] = 'הצגת HTML';\r
+$labels['htmlmessage'] = 'תוכן HTML';\r
+$labels['prettydate'] = 'תאריכים מעוצבים';\r
+$labels['addtoaddressbook'] = 'הוספה לפנקס כתובות';\r
+$labels['sun'] = 'יום א';\r
+$labels['mon'] = 'יום ב';\r
+$labels['tue'] = 'יום ג';\r
+$labels['wed'] = 'יום ד';\r
+$labels['thu'] = 'יום ה';\r
+$labels['fri'] = 'יום ו';\r
+$labels['sat'] = 'יום ש';\r
+$labels['sunday'] = 'ראשון';\r
+$labels['monday'] = 'שני';\r
+$labels['tuesday'] = 'שלישי';\r
+$labels['wednesday'] = 'רביעי';\r
+$labels['thursday'] = 'חמישי';\r
+$labels['friday'] = 'ששי';\r
+$labels['saturday'] = 'שבת';\r
+$labels['today'] = 'היום';\r
+$labels['checkmail'] = 'בדיקת תיבה';\r
+$labels['writenewmessage'] = 'מכתב חדש';\r
+$labels['replytomessage'] = 'מענה למכתב';\r
+$labels['replytoallmessage'] = 'מענה לשולח ולכל הנמענים';\r
+$labels['forwardmessage'] = 'העברת מכתב';\r
+$labels['deletemessage'] = 'מחיקה';\r
+$labels['movemessagetotrash'] = 'השלכה לאשפה';\r
+$labels['printmessage'] = 'הדפסה';\r
+$labels['previousmessage'] = 'הצגת מכתב קודם';\r
+$labels['previousmessages'] = 'הצגת רשימה קודמת';\r
+$labels['firstmessage'] = 'הצגת המכתב הראשון';\r
+$labels['firstmessages'] = 'הצגה של קבוצת המכתבים הראשונה';\r
+$labels['nextmessage'] = 'הצגת המכתב הבא';\r
+$labels['nextmessages'] = 'הצגה של קבוצת המכתבים הבאה';\r
+$labels['lastmessage'] = 'הצגת המכתב האחרון';\r
+$labels['lastmessages'] = 'הצגה של קבוצת המכתבים האחרונה';\r
+$labels['backtolist'] = 'חזרה אל רשימת המכתבים';\r
+$labels['viewsource'] = 'הצגת קוד מקור';\r
+$labels['markmessages'] = 'סימון הודעות';\r
+$labels['markread'] = 'כנקראו';\r
+$labels['markunread'] = 'כלא נקראו';\r
+$labels['select'] = 'בחירה';\r
+$labels['all'] = 'הכל';\r
+$labels['none'] = 'כלום';\r
+$labels['unread'] = 'לא נקראו';\r
+$labels['compact'] = 'פינוי שטח לא מנוצל';\r
+$labels['empty'] = 'ריקון';\r
+$labels['purge'] = 'מחיקה';\r
+$labels['quota'] = 'ניצול קיבולת';\r
+$labels['unknown'] = 'לא ידוע';\r
+$labels['unlimited'] = 'ללא הגבלה';\r
+$labels['quicksearch'] = 'חיפוש מהיר';\r
+$labels['resetsearch'] = 'ניקוי תיבת החיפוש';\r
+$labels['compose'] = 'מכתב חדש';\r
+$labels['savemessage'] = 'שמירת טיוטה';\r
+$labels['sendmessage'] = 'משלוח מיידי';\r
+$labels['addattachment'] = 'צירוף קובץ';\r
+$labels['charset'] = 'קידוד';\r
+$labels['editortype'] = 'סוג עורך';\r
+$labels['returnreceipt'] = 'אישור קבלה';\r
+$labels['checkspelling'] = 'בדיקת איות';\r
+$labels['resumeediting'] = 'המשך עריכה';\r
+$labels['revertto'] = 'חזור למצב קודם';\r
+$labels['attachments'] = 'קבצים מצורפים';\r
+$labels['upload'] = 'העלאה';\r
+$labels['close'] = 'סגירה';\r
+$labels['low'] = 'נמוך';\r
+$labels['lowest'] = 'נמוך ביותר';\r
+$labels['normal'] = 'רגיל';\r
+$labels['high'] = 'גבוה';\r
+$labels['highest'] = 'גבוה ביותר';\r
+$labels['nosubject'] = '(ללא נושא)';\r
+$labels['showimages'] = 'הצגת תמונות';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'ללא עיצוב';\r
+$labels['addcc'] = 'הוספת מכותב לידיעה';\r
+$labels['addbcc'] = 'הוספת מכותב נסתר';\r
+$labels['addreplyto'] = 'הוספת כתובת למענה';\r
+$labels['mdnrequest'] = 'השולח ביקש לדעת אם המכתב נקרא. האם להודיע לשולח?';\r
+$labels['receiptread'] = '(אישור קבלה (נקרא';\r
+$labels['yourmessage'] = 'זה אישור קבלה למכתבך';\r
+$labels['receiptnote'] = 'זה אישור על כך שהמכתב הוצג אבל אינו מבטיח שהתוכן נקרא או הובן';\r
+$labels['name'] = 'שם להצגה';\r
+$labels['firstname'] = 'שם פרטי';\r
+$labels['surname'] = 'שם משפחה';\r
+$labels['email'] = 'כתובת דוא"ל';\r
+$labels['addcontact'] = 'הוספת איש קשר';\r
+$labels['editcontact'] = 'עריכת איש קשר';\r
+$labels['edit'] = 'עריכה';\r
+$labels['cancel'] = 'ביטול';\r
+$labels['save'] = 'שמירה';\r
+$labels['delete'] = 'מחיקה';\r
+$labels['newcontact'] = 'איש קשר חדש';\r
+$labels['deletecontact'] = 'מחיקת אנשי קשר מסומנים';\r
+$labels['composeto'] = 'משלוח מכתב אל';\r
+$labels['contactsfromto'] = 'אנשי קשר $from עד $to מתוך $count';\r
+$labels['print'] = 'הדפסה';\r
+$labels['export'] = 'ייצוא';\r
+$labels['previouspage'] = 'הצגת הקבוצה הקודמת';\r
+$labels['firstpage'] = 'הצגת הקבוצה הראשונה';\r
+$labels['nextpage'] = 'הצגת הקבוצה הבאה';\r
+$labels['lastpage'] = 'הצגת הקבוצה האחרונה';\r
+$labels['groups'] = 'קבוצות';\r
+$labels['personaladrbook'] = 'כתובות פרטיות';\r
+$labels['settingsfor'] = 'הגדרות עבור';\r
+$labels['preferences'] = 'העדפות';\r
+$labels['userpreferences'] = 'העדפות משתמש';\r
+$labels['editpreferences'] = 'עריכה של העדפות משתמש';\r
+$labels['identities'] = 'זהויות';\r
+$labels['manageidentities'] = 'ניהול זהויות לחשבון זה';\r
+$labels['newidentity'] = 'זהות חדשה';\r
+$labels['newitem'] = 'פריט חדש';\r
+$labels['edititem'] = 'עריכת פריט';\r
+$labels['setdefault'] = 'קביעה של ברירת מחדל';\r
+$labels['language'] = 'שפה';\r
+$labels['timezone'] = 'איזור זמן';\r
+$labels['pagesize'] = 'מספר שורות בדף';\r
+$labels['signature'] = 'חתימה';\r
+$labels['dstactive'] = 'שעון קיץ';\r
+$labels['htmleditor'] = 'יצירת הודעה מעוצבת';\r
+$labels['htmlsignature'] = 'חתימה מעוצבת';\r
+$labels['previewpane'] = 'הצג הצצה מוקדמת';\r
+$labels['autosavedraft'] = 'שמירה אוטומטית של טיוטה';\r
+$labels['everynminutes'] = 'כל $n דקות';\r
+$labels['never'] = 'אף פעם';\r
+$labels['folder'] = 'תיק';\r
+$labels['folders'] = 'תיקים';\r
+$labels['foldername'] = 'שם תיק';\r
+$labels['subscribed'] = 'מנוי';\r
+$labels['messagecount'] = 'הודעות';\r
+$labels['create'] = 'יצירה';\r
+$labels['createfolder'] = 'יצירת תיק חדש';\r
+$labels['rename'] = 'שינוי שם';\r
+$labels['renamefolder'] = 'שינוי שם תיק';\r
+$labels['deletefolder'] = 'מחיקת תיק';\r
+$labels['managefolders'] = 'ניהול תיקים';\r
+$labels['sortby'] = 'מיון לפי';\r
+$labels['sortasc'] = 'מיון בסדר עולה';\r
+$labels['sortdesc'] = 'מיון בסדר יורד';\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/he/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Moshe Leibovitch <moish@mln.co.il> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'הכניסה נכשלה';\r
+$messages['cookiesdisabled'] = 'הדפדפן אינו מקבל עוגיות';\r
+$messages['sessionerror'] = 'הקשר שלך אינו חוקי או שפג תוקפו';\r
+$messages['imaperror'] = 'הקשר לשרת נכשל';\r
+$messages['nomessagesfound'] = 'לא נמצאו מכתבים בתיבה זו';\r
+$messages['loggedout'] = 'הקשר הסתיים. להתראות!';\r
+$messages['mailboxempty'] = 'התיבה ריקה';\r
+$messages['loading'] = 'טעינה...';\r
+$messages['loadingdata'] = 'טעינת מידע..';\r
+$messages['checkingmail'] = 'בדיקת קיום מכתבים חדשים...';\r
+$messages['sendingmessage'] = 'משלוח מכתבים';\r
+$messages['messagesent'] = 'מכתב נשלח בהצלחה';\r
+$messages['savingmessage'] = 'שמירת מכתב...';\r
+$messages['messagesaved'] = 'המכתב נשמר כטיוטה';\r
+$messages['successfullysaved'] = 'נשמר בהצלחה';\r
+$messages['addedsuccessfully'] = 'איש הקשר נוסף לפנקס בהצלחה';\r
+$messages['contactexists'] = 'קיים כבר איש קשר עם כתובת דוא"ל זו';\r
+$messages['blockedimages'] = 'תמונות משרת אחר נחסמו כדי לשמור על הפרטיות';\r
+$messages['encryptedmessage'] = 'זו הודעת מוצפנת ולכן לא ניתן להציגה';\r
+$messages['nocontactsfound'] = 'לא נמצאו אנשי קשר';\r
+$messages['contactnotfound'] = 'איש הקשר המבוקש לא נמצא';\r
+$messages['sendingfailed'] = 'שליחת המכתב נכשלה';\r
+$messages['errorsaving'] = 'נגרמה שגיאה במהלך השמירה';\r
+$messages['errormoving'] = 'לא ניתן לתייק את המכתב';\r
+$messages['errordeleting'] = 'לא ניתן למחוק את המכתב';\r
+$messages['deletecontactconfirm'] = 'האם למחוק את איש הקשר?';\r
+$messages['deletemessagesconfirm'] = 'האם למחוק את המכתבים נמסומנים?';\r
+$messages['deletefolderconfirm'] = 'האם למחוק תיק זה?';\r
+$messages['purgefolderconfirm'] = 'האם למחוק את כל ההודעות בתיק זה?';\r
+$messages['formincomplete'] = 'לא הושלמו כל הפרטים בטופס זה';\r
+$messages['noemailwarning'] = 'נא להוסיף כתובת דוא"ל חוקית';\r
+$messages['nonamewarning'] = 'נא להוסיף שם';\r
+$messages['nopagesizewarning'] = 'נא להוסיף גודל דף';\r
+$messages['norecipientwarning'] = 'נא להוסיף לפחות נמען אחד';\r
+$messages['nosubjectwarning'] = 'שורת הנושא ריקה. האם ברצונך להוסיף נושא כעת?';\r
+$messages['nobodywarning'] = 'האם לשלוח מכתב ללא תוכן?';\r
+$messages['notsentwarning'] = 'המכתב לא נשלח. האם לבטלו?';\r
+$messages['noldapserver'] = 'נא לבחור שרת כתובות לחיפוש';\r
+$messages['nocontactsreturned'] = 'לא נמצאו אנשי קשר';\r
+$messages['nosearchname'] = 'נא להוסיף איש קשר או כתובת דוא"ל';\r
+$messages['searchsuccessful'] = 'נמצאו $nr מכתבים';\r
+$messages['searchnomatch'] = 'החיפוש לא מצא דבר';\r
+$messages['searching'] = 'חיפוש...';\r
+$messages['checking'] = 'בדיקה...';\r
+$messages['nospellerrors'] = 'לא נמצאו שגיאות כתיב';\r
+$messages['folderdeleted'] = 'התיק נמחק בהצלחה';\r
+$messages['deletedsuccessfully'] = 'המחיקה הסתימה בהצלחה';\r
+$messages['converting'] = 'הסרת העיצוב מהמכתב';\r
+$messages['messageopenerror'] = 'לא ניתן לטעון המכתב מהשרת';\r
+$messages['fileuploaderror'] = 'העלאת הקובץ נכשלה';\r
+$messages['filesizeerror'] = 'הקובץ לטעינה גדול מהגודל המקסימלי שהוא $size';\r
+$messages['copysuccess'] = '$nr כתובות הועתקו בהצלחה';\r
+$messages['copyerror'] = 'לא ניתן היה להעתיק כתובת כלשהי';\r
+$messages['sourceisreadonly'] = 'המקור לכתובת הוא לקריאה בלבד';\r
+$messages['errorsavingcontact'] = 'לא ניתן לשמור את כתובת איש הקשר';\r
+$messages['movingmessage'] = 'תיוק המכתב..';\r
+$messages['receiptsent'] = 'אישור הקבלה נשלח בהצלחה';\r
+$messages['errorsendingreceipt'] = 'לא ניתן לשלוח אישור קבלה';\r
+$messages['nodeletelastidentity'] = 'זו הזהות האחרונה ולכן לא ניתן לבטלה';\r
+$messages['addsubfolderhint'] = 'תיקיה זו תוקם תחת התיקיה שנבחרה';\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | localization/hi/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Aniruddha "Karim" Shankar <karim@sarai.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = '$product में स्वागत है';
+$labels['username'] = 'यूसरनाम';
+$labels['password'] = 'पासवर्ड';
+$labels['server'] = 'सर्वर';
+$labels['login'] = 'लॉगिन';
+
+// taskbar
+$labels['logout'] = 'लॉगआऊट';
+$labels['mail'] = 'ई-मेल';
+$labels['settings'] = 'निजी सैटिंग';
+$labels['addressbook'] = 'पता खाता';
+
+// mailbox names
+$labels['inbox'] = 'इनबॉक्स';
+$labels['drafts'] = 'ड्राफ़ट';
+$labels['sent'] = 'भेजा गया';
+$labels['trash'] = 'रद्दी';
+$labels['junk'] = 'स्पैम';
+
+// message listing
+$labels['subject'] = 'विशय';
+$labels['from'] = 'भेजने वाला';
+$labels['to'] = 'पाने वाला';
+$labels['cc'] = 'कार्बन';
+$labels['bcc'] = 'अंधा कार्बन';
+$labels['replyto'] = 'जवाब यहाँ';
+$labels['date'] = 'तारीख';
+$labels['size'] = 'माप';
+$labels['priority'] = 'मेल की महत्वपूर्णता';
+$labels['organization'] = 'संस्था';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'फ़ोलडर';
+$labels['messagesfromto'] = '$from से ले कर $to, $count मेल में से';
+$labels['messagenrof'] = '$nr नम्बर मेल, $count में से';
+
+$labels['moveto'] = 'खीस्काऐं...';
+$labels['download'] = 'डाऊनलोड';
+
+$labels['filename'] = 'फ़ाईल नाम';
+$labels['filesize'] = 'फ़ाईल माप';
+
+$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) दिखाऐं';
+$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूप मेल करें';
+$labels['prettydate'] = 'सुनदर तारीखें';
+
+$labels['addtoaddressbook'] = 'पता खाते में जोडें';
+
+// weekdays short
+$labels['sun'] = 'रवि';
+$labels['mon'] = 'सोम';
+$labels['tue'] = 'मंग';
+$labels['wed'] = 'बुध';
+$labels['thu'] = 'गुरु';
+$labels['fri'] = 'शुक्र';
+$labels['sat'] = 'शनि';
+
+// weekdays long
+$labels['sunday'] = 'रविवार';
+$labels['monday'] = 'सोमवार';
+$labels['tuesday'] = 'मंगलवार';
+$labels['wednesday'] = 'बुधवार';
+$labels['thursday'] = 'गुरुवार';
+$labels['friday'] = 'शुक्रवार';
+$labels['saturday'] = 'शनिवार';
+
+$labels['today'] = 'आज';
+
+// toolbar buttons
+$labels['checkmail'] = 'नये मेल लाऐं';
+$labels['writenewmessage'] = 'मेल लिखें';
+$labels['replytomessage'] = 'मेल का जवाब दें';
+$labels['replytoallmessage'] = 'सभी को जवाब लिखें';
+$labels['forwardmessage'] = 'आगे भेजें';
+$labels['deletemessage'] = 'रद्द करें';
+$labels['printmessage'] = 'मेल छापें';
+$labels['previousmessage'] = 'पीछे के मेल दिखाऐं';
+$labels['previousmessages'] = 'पीछे के मेल का बन्डल दिखाऐं';
+$labels['firstmessage'] = 'पहला मेल दिखाऐं';
+$labels['firstmessages'] = 'पहला मेल का बन्डल दिखाऐं';
+$labels['nextmessage'] = 'अगला मेल दिखाऐं';
+$labels['nextmessages'] = 'अगले मेल का बन्डल दिखाऐं';
+$labels['lastmessage'] = 'आखीरी मेल दिखाऐं';
+$labels['lastmessages'] = 'आखिरी मेल का बन्डल दिखाऐं';
+$labels['backtolist'] = 'मेल सूची देखें';
+$labels['viewsource'] = 'सोर्स दिखाऐं';
+
+$labels['select'] = 'चुनें';
+$labels['all'] = 'सभी';
+$labels['none'] = 'कोई नहीं';
+$labels['unread'] = 'अनदेखी';
+
+$labels['compact'] = 'छोटा करें';
+$labels['empty'] = 'मेल रद्दी में डालें';
+$labels['purge'] = 'मिटाऐं';
+
+$labels['quota'] = 'डिस्क उपयोग';
+$labels['unknown'] = 'अज्ञात';
+$labels['unlimited'] = 'असीम';
+
+$labels['quicksearch'] = 'तेज़ खोज';
+$labels['resetsearch'] = 'खोज खाली करें';
+
+
+// message compose
+$labels['compose'] = 'मेल लिखें';
+$labels['sendmessage'] = 'मेल भेजें';
+$labels['savemessage'] = 'ड्राफ़ट सहेजें';
+$labels['addattachment'] = 'फ़ाईल जोडें';
+$labels['charset'] = 'कैरेक्टर सैट';
+$labels['editortype'] = 'सम्पादक प्राकार';
+$labels['returnreceipt'] = 'मेल रसीद';
+
+$labels['checkspelling'] = 'स्पैलिंग जाँचें';
+$labels['resumeediting'] = 'सम्पादन फिर शुरू करें';
+$labels['revertto'] = 'पहले की स्थिती पर जाऐं';
+
+$labels['attachments'] = 'जुडे फाईल';
+$labels['upload'] = 'अपलोड';
+$labels['close'] = 'बंद';
+
+$labels['low'] = 'कम';
+$labels['lowest'] = 'सबसे कम';
+$labels['normal'] = 'साधारण';
+$labels['high'] = 'उच्च';
+$labels['highest'] = 'उच्चतम';
+
+$labels['nosubject'] = '(कोई विशय नहीं)';
+$labels['showimages'] = 'चित्र दिखाऐं';
+
+$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';
+$labels['plaintoggle'] = 'सादा पाठ';
+
+
+// address boook
+$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'] = '$from से ले कर $to, $count पते में से';
+$labels['print'] = 'छापें';
+$labels['export'] = 'ऐक्स्पोर्ट';
+
+$labels['previouspage'] = 'इससे पहले के बन्डल को दिखाऐं';
+$labels['firstpage'] = 'पहला बन्डल दिखाऐं';
+$labels['nextpage'] = 'अगला बन्डल दिखाऐं';
+$labels['lastpage'] = 'आखिरी बन्डल दिखाऐं';
+
+
+// LDAP search
+$labels['ldapsearch'] = 'ऐलडैप (LDAP) डाईरेक्टरी खोजें';
+
+$labels['ldappublicsearchname'] = 'पता का नाम';
+$labels['ldappublicsearchtype'] = 'सख़त मैच?';
+$labels['ldappublicserverselect'] = 'सर्वर चुनें';
+$labels['ldappublicsearchfield'] = 'यहाँ खोजें';
+$labels['ldappublicsearchform'] = 'पता के लिये खोजें';
+$labels['ldappublicsearch'] = 'खोज';
+
+
+// settings
+$labels['settingsfor'] = 'इनके विन्यास:';
+
+$labels['preferences'] = 'पसंद';
+$labels['userpreferences'] = 'यूसर पसंद';
+$labels['editpreferences'] = 'यूसर पसंद सम्पादें';
+
+$labels['identities'] = 'पहचान';
+$labels['manageidentities'] = 'इस खाते के पहचान व्यवस्थित करें';
+$labels['newidentity'] = 'नया पहचान';
+
+$labels['newitem'] = 'नया चीज़';
+$labels['edititem'] = 'चीज़ सम्पादें';
+
+$labels['setdefault'] = 'तयशुदा चुनें';
+$labels['language'] = 'भाषा';
+$labels['timezone'] = 'समय क्षेत्र';
+$labels['pagesize'] = 'हर पन्ने पर इतने';
+$labels['signature'] = 'दस्तखत';
+$labels['dstactive'] = 'रौशनी बचाव';
+$labels['htmleditor'] = 'मेल ऐच-टी-ऐम-एल (HTML) मे लिखें';
+$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) दस्तखत';
+$labels['previewpane'] = 'झलक पट्टी दिखाऐं';
+
+$labels['autosavedraft'] = 'ड्राफ़ट अपने आप सहेजते जाऐं';
+$labels['everynminutes'] = 'हर $n मिनट';
+$labels['never'] = 'कभी नहाीं';
+
+$labels['folder'] = 'फ़ोल्डर';
+$labels['folders'] = 'फ़ोल्डर';
+$labels['foldername'] = 'फ़ोल्डर नाम';
+$labels['subscribed'] = 'सबस्क्राईब किया गया';
+$labels['create'] = 'बनाऐं';
+$labels['createfolder'] = 'फ़ोलडर बनाऐं';
+$labels['rename'] = 'नाम बदलें';
+$labels['renamefolder'] = 'फ़ोलडर का नाम बदलें';
+$labels['deletefolder'] = 'फ़ोलडर मिटाऐं';
+$labels['managefolders'] = 'फ़ोलडर को व्यवस्थित करें';
+
+$labels['sortby'] = 'ऐसे तय करें';
+$labels['sortasc'] = 'पहले से आखीरी तय करें';
+$labels['sortdesc'] = 'आखीरी से पहले तय करें';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | localization/hi/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Aniruddha "Karim" Shankar <karim@sarai.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+
+$messages['loginfailed'] = 'लॉगिन नहीं हो पाया';
+$messages['cookiesdisabled'] = 'आपका ब्राऊसर कुकी स्वीकार नहीं कर रहा है';
+$messages['sessionerror'] = 'सत्र समाप्त या अवैद्य';
+$messages['imaperror'] = 'आईमैप (IMAP) सर्वर से सम्पर्क नहीं हो पाया';
+$messages['nomessagesfound'] = 'इस मेलबॉक्स में कोई मेल नहीं है';
+$messages['loggedout'] = 'सत्र समाप्त. टा टा!';
+$messages['mailboxempty'] = 'मेलबॉक्स खाली है';
+$messages['loading'] = 'लोड हो रहा है';
+$messages['loadingdata'] = 'डाटा लोड हो रहा है...';
+$messages['checkingmail'] = 'क्या नया मेल है?...';
+$messages['sendingmessage'] = 'मेल भेजा जा रहा है...';
+$messages['messagesent'] = 'मेल भेजा गया है';
+$messages['savingmessage'] = 'मेल सहेजा जा रहा है...';
+$messages['messagesaved'] = 'मेल ड्राफ़्ट फोल्डर में जमा हो रहा है';
+$messages['successfullysaved'] = 'सहेजा गया है';
+$messages['addedsuccessfully'] = 'पता खाते में पता जोडा गया है';
+$messages['contactexists'] = 'इस ई-मेल पता से एक पता पेहले से है';
+$messages['blockedimages'] = 'आप के प्राईवेसी के लिये और स्पैम से बचने के लिये इस मेल में सदूर चित्र नहीं दिखाये गये हैं।';
+$messages['encryptedmessage'] = 'माफ़ कीजिये, यह मेल कूट रूप में है, इस कारण दिखाया नहीं जा सकता।';
+$messages['nocontactsfound'] = 'कोई पता नहीं मिला';
+$messages['sendingfailed'] = 'मेल नहीं भिज पाया';
+$messages['errorsaving'] = 'सहेजते-सहेजते गडबड हो गया';
+$messages['errormoving'] = 'मेल खिस्का नहीं';
+$messages['errordeleting'] = 'मेल मिटा नहीं';
+$messages['deletecontactconfirm'] = 'चुने गये पते को सचमुच मिटाना है ?';
+$messages['deletemessagesconfirm'] = 'चुने गये मेल को सचमुच मिटाना है ?';
+$messages['deletefolderconfirm'] = 'फ़ोल्डर को सचमुच मिटाऐं ?';
+$messages['purgefolderconfirm'] = 'फ़ोल्डर में पडे सारे मेल को सचमुच मिटाना है?';
+$messages['formincomplete'] = 'फ़ॉर्म पूरी तरह से भरा नहीं';
+$messages['noemailwarning'] = 'वैद्य मेल पता भरें';
+$messages['nonamewarning'] = 'नाम भरें';
+$messages['nopagesizewarning'] = 'पन्ना माप भरें';
+$messages['norecipientwarning'] = 'कम-से-कम एक पाने वाले का पता भरें';
+$messages['nosubjectwarning'] = 'मेल का कोई विशय नहीं बताया गया है। क्या आप विशय डालना चाहते हैं ?';
+$messages['nobodywarning'] = 'बिना कुछ लिखे मेल भेजें?';
+$messages['notsentwarning'] = 'मेल भिजा नहीं. मेल रद्द करें ?';
+$messages['noldapserver'] = 'खोज के लिये एक ऐलडैप सर्वर चुनें';
+$messages['nocontactsreturned'] = 'कोई पते नहीं मिले';
+$messages['nosearchname'] = 'पता या पते का नाम भरें';
+$messages['searchsuccessful'] = '$nr मेल मिले';
+$messages['searchnomatch'] = 'खोज असफ़ल';
+$messages['searching'] = 'खोजा रहे हैं...';
+$messages['checking'] = 'चाँचा चा रहा है...';
+$messages['nospellerrors'] = 'कोई स्पैलिंग गलती नहीं मिली';
+$messages['folderdeleted'] = 'फ़ोल्डर मिट गया';
+$messages['deletedsuccessfully'] = "मिट गया";
+$messages['converting'] = 'मेल से फ़ॉर्मैटिंग निकाला जा रहा है...';
+$messages['messageopenerror'] = 'सर्वर से मेल लोड नहीं हो पाया';
+$messages['fileuploaderror'] = 'फ़ाईल अपलोड नहीं हो पाया';
+$messages['filesizeerror'] = 'अपलोड के लिये फ़ाईल हद $size से बड़ा है';
+
+?>
\ No newline at end of file
| language/hr/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Edi Budimilic <edifreak@gmail.com> |
+ | Author: Edi Budimilic <edi@gemstudio.hr> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 627 2007-06-27 07:07:02Z tomekp $
+ @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$labels['to'] = 'Za';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Reply-To';
+$labels['replyto'] = 'Odgovor-na';
$labels['date'] = 'Datum';
$labels['size'] = 'Veličina';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organizacija';
-$labels['reply-to'] = 'Reply-To';
-$labels['mailboxlist'] = 'Folderi';
+$labels['reply-to'] = 'Odgovor-na';
+$labels['mailboxlist'] = 'Mape';
$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count';
$labels['messagenrof'] = 'Poruka broj $nr od $count';
$labels['moveto'] = 'prebaci u...';
$labels['replytomessage'] = 'Odgovori na poruku';
$labels['replytoallmessage'] = 'Odgovori pošiljaocu i svim primateljima';
$labels['forwardmessage'] = 'Prosljedi poruku';
-$labels['deletemessage'] = 'Prebaci poruku u folder (Smeće)';
-$labels['printmessage'] = 'Isprintajte poruku';
+$labels['deletemessage'] = 'Prebaci poruku u mapu smeće';
+$labels['movemessagetotrash'] = 'Preseli poruke u smeće';
+$labels['printmessage'] = 'Print poruke';
$labels['previousmessage'] = 'Prikaži prethodnu poruku';
$labels['previousmessages'] = 'Prijašnje poruke';
$labels['firstmessage'] = 'Prikaži prvu poruku';
$labels['lastmessages'] = 'Prikaži zadnju skupinu poruka';
$labels['backtolist'] = 'Povratak na listu poruka';
$labels['viewsource'] = 'Prikaži poruku u izvornom obliku';
+$labels['markmessages'] = 'Označi poruke';
+$labels['markread'] = 'Kao pročitano';
+$labels['markunread'] = 'Kao nepročitano';
$labels['select'] = 'Oznaći';
$labels['all'] = 'Sve';
$labels['none'] = 'Nijednu';
$labels['quicksearch'] = 'Brza pretraga';
$labels['resetsearch'] = 'Prikaži sve poruke';
$labels['compose'] = 'Nova poruka';
-$labels['sendmessage'] = 'Pošalji poruku';
$labels['savemessage'] = 'Spremi u \'Predlošci\'';
+$labels['sendmessage'] = 'Pošalji poruku';
$labels['addattachment'] = 'Priloži datoteku';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'Tip editora';
$labels['returnreceipt'] = 'Potvrda o primitku poruke';
$labels['checkspelling'] = 'Provjera pravopisa';
$labels['resumeediting'] = 'Povratak u pisanje';
-$labels['revertto'] = 'Revert to';
+$labels['revertto'] = 'Vrati na';
$labels['attachments'] = 'Privitci (Attachments)';
$labels['upload'] = 'Dodaj';
$labels['close'] = 'Zatvori';
$labels['showimages'] = 'Prikaži slike';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Samo teks';
+$labels['addcc'] = 'Dodaj Cc';
+$labels['addbcc'] = 'Dodaj Bcc';
+$labels['addreplyto'] = 'Dodaj Odgovori-na';
+$labels['mdnrequest'] = 'Pošiljaoc ove poruke je tražio da bude obaviješten po primitku ove poruke. Želite li obavijestiti pošiljaoca?';
+$labels['receiptread'] = 'Vrati potvrdu (pročitano)';
+$labels['yourmessage'] = 'Ovo je vraćena potvrda vaše poruke';
+$labels['receiptnote'] = 'Info: Ova potvrda samo potvrđuje da se poruka prikazala na računalu primaoca. Nema garancije da je primaoc pročitao ili razumio sadržaj poruke.';
$labels['name'] = 'Puno ime';
$labels['firstname'] = 'Ime';
$labels['surname'] = 'Prezime';
$labels['personaladrbook'] = 'Privatna adresa';
$labels['settingsfor'] = 'Postavke za';
$labels['preferences'] = 'Postavke';
-$labels['userpreferences'] = 'KorisniÄ\87ke postavke';
+$labels['userpreferences'] = 'KorisniÄ\8dke postavke';
$labels['editpreferences'] = 'Izmjena postavki';
$labels['identities'] = 'Identiteti';
$labels['manageidentities'] = 'Podesi identitete za ovaj nalog';
$labels['folders'] = 'Folderi';
$labels['foldername'] = 'Ime foldera';
$labels['subscribed'] = 'Pretplata';
+$labels['messagecount'] = 'Poruke';
$labels['create'] = 'Napravi';
$labels['createfolder'] = 'Napravi novi folder';
$labels['rename'] = 'Preimenuj';
| language/hr/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Edi Budimilic <edifreak@gmail.com> |
+ | Author: Edi Budimilic <edi@gemstudio.hr> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 627 2007-06-27 07:07:02Z tomekp $
+ @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$messages['sessionerror'] = 'Morate se ponovno ulogirati';
$messages['imaperror'] = 'Neuspješna konekcija na IMAP server';
$messages['nomessagesfound'] = 'Nema poruka u sandučiću';
-$messages['loggedout'] = 'Uspješno ste se odjavili.';
+$messages['loggedout'] = 'Uspješna odjava.';
$messages['mailboxempty'] = 'Sandučuć je prazan';
$messages['loading'] = 'Učitavanje...';
$messages['loadingdata'] = 'Učitavanje podataka...';
$messages['checkingmail'] = 'Provjera novih poruka u tijeku...';
$messages['sendingmessage'] = 'Poruka se šalje...';
$messages['messagesent'] = 'Poruka je uspješno poslana';
-$messages['savingmessage'] = 'Poruka se snima...';
+$messages['savingmessage'] = 'Poruka se sprema...';
$messages['messagesaved'] = 'Poruka uspješno spremljena u \'Predlošci\'';
$messages['successfullysaved'] = 'Spremanje uspješno obavljeno';
$messages['addedsuccessfully'] = 'Kontakt uspješno dodan u imenik';
$messages['blockedimages'] = 'Zbog zaštite privatnosti, slike sa udaljenih servera su blokirane.';
$messages['encryptedmessage'] = 'Ova poruka je zaštićena pa se ne može prikazati';
$messages['nocontactsfound'] = 'Imenik je prazan';
-$messages['contactnotfound'] = 'Traženi kontak nije pronađen';
+$messages['contactnotfound'] = 'Traženi kontakt nije pronađen';
$messages['sendingfailed'] = 'Greška pri slanju poruke';
$messages['errorsaving'] = 'Greška pri spremanju';
$messages['errormoving'] = 'Greška pri premještanju poruke';
$messages['errordeleting'] = 'Greška pri brisanju poruke';
$messages['deletecontactconfirm'] = 'Želite li obrisati izabrane kontakte?';
$messages['deletemessagesconfirm'] = 'Sigurno želite obrisati odabrane poruke?';
-$messages['deletefolderconfirm'] = 'Želite li obrisati ovaj folder?';
-$messages['purgefolderconfirm'] = 'Želite li obrisati sve poruke u folderu?';
+$messages['deletefolderconfirm'] = 'Želite li obrisati ovu mapu?';
+$messages['purgefolderconfirm'] = 'Želite li obrisati sve poruke u mapi?';
$messages['formincomplete'] = 'Forma nije u cjelosti popunjena';
$messages['noemailwarning'] = 'Unesite valjanu e-mail adresu';
$messages['nonamewarning'] = 'Unesite ime';
$messages['searching'] = 'Pretraga u tijeku...';
$messages['checking'] = 'Provjera u tijeku...';
$messages['nospellerrors'] = 'Nije pronađena niti jedna pravopisna greška';
-$messages['folderdeleted'] = 'Folder uspješno obrisan';
+$messages['folderdeleted'] = 'Mapa uspješno obrisana';
$messages['deletedsuccessfully'] = 'Uspješno obrisano';
-$messages['converting'] = 'Mičem formatiranje poruke';
+$messages['converting'] = 'Formatiranje poruke';
$messages['messageopenerror'] = 'Nije moguće ';
$messages['fileuploaderror'] = 'Prijenos datoteke nije uspio';
-$messages['filesizeerror'] = 'Datoteka je prevelika. Dopuštena maksimalna je $size';
+$messages['filesizeerror'] = 'Datoteka je prevelika. Maksimalna veličina je $size';
$messages['copysuccess'] = 'Uspješno kopirano $n adresa';
$messages['copyerror'] = 'Nije uspjelo kopiranje adresa';
$messages['sourceisreadonly'] = 'Ovaj resurs adresa je samo za čitanje';
$messages['errorsavingcontact'] = 'Nije uspjelo spremanje adrese kontakta';
+$messages['movingmessage'] = 'Premještanje poruke...';
+$messages['receiptsent'] = 'Uspješno poslana potvrda (pročitano)';
+$messages['errorsendingreceipt'] = 'Ne može poslati potvrdu';
+$messages['nodeletelastidentity'] = 'Ne možete izbrisati zadnji identitet.';
+$messages['addsubfolderhint'] = 'Ova mapa će biti stvorena kao podmapa na trenutno označenoj';
?>
\ No newline at end of file
| language/hu/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Ervin Hegedüs <airween@damson.hu> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 890 2007-10-20 18:01:01Z thomasb $
+ @version $Id: labels.inc 1069 2008-02-13 19:33:10Z yllar $
*/
$labels['replytoallmessage'] = 'Válasz a feladónak és az összes címzettnek';
$labels['forwardmessage'] = 'Továbbítás';
$labels['deletemessage'] = 'Törlés';
+$labels['movemessagetotrash'] = 'Üzenet törlése';
$labels['printmessage'] = 'Nyomtatás';
$labels['previousmessage'] = 'Előző levél mutatása';
$labels['previousmessages'] = 'Előző rész mutatása';
$labels['lastmessages'] = 'Utolsó rész mutatása';
$labels['backtolist'] = 'Vissza az üzenetekhez';
$labels['viewsource'] = 'Forrás megtekintése';
+$labels['markmessages'] = 'Üzenetek megjelölése';
+$labels['markread'] = 'Olvasottként';
+$labels['markunread'] = 'Olvasatlanként';
$labels['select'] = 'Kijelölés';
$labels['all'] = 'Összes';
$labels['none'] = 'Nincs';
$labels['quicksearch'] = 'Gyorskeresés';
$labels['resetsearch'] = 'Alapállapot';
$labels['compose'] = 'Üzenet létrehozása';
-$labels['sendmessage'] = 'Üzenet azonnali küldése';
$labels['savemessage'] = 'Vázlat mentése';
+$labels['sendmessage'] = 'Üzenet azonnali küldése';
$labels['addattachment'] = 'File csatolása';
$labels['charset'] = 'Karakterkészlet';
$labels['editortype'] = 'Szerkesztő típusa';
$labels['showimages'] = 'Képek megjelenítése';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Egyszerű szöveg';
+$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';
+$labels['mdnrequest'] = 'Az üzenet küldője értesítést kér arról hogy elolvastad a levelet. Elküdjük az Olvasási Értesítést?';
+$labels['receiptread'] = 'Olvasási Értesítés (olvasott)';
+$labels['yourmessage'] = 'Ez az üzeneted Olvasási Értesítése';
+$labels['receiptnote'] = 'Megjegyzés: Ez az Olvasási Értesítés csak azt igazolja, hogy az üzenet megjelenítésre került a címzett számítógépén. Nincs rá garancia, hogy a címzett elolvasta volna az üzenetet illetve megértette volna annak tartalmát.';
$labels['name'] = 'Megjelenített név';
$labels['firstname'] = 'Keresztnév';
$labels['surname'] = 'Vezetéknév';
$labels['folders'] = 'Mappák';
$labels['foldername'] = 'Mappa neve';
$labels['subscribed'] = 'Feliratkozás';
+$labels['messagecount'] = 'Üzenet';
$labels['create'] = 'Létrehozás';
$labels['createfolder'] = 'Új mappa létrehozása';
$labels['rename'] = 'Átnevezés';
| language/hu/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Levente Farkas <lfarkas at lfarkas dot org> |
- | Ervin Hegedüs <airween@damson.hu> |
+ | Author: Levente Farkas <lfarkas at lfarkas dot org> |
+ | Ervin Hegedüs <airween@damson.hu> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 890 2007-10-20 18:01:01Z thomasb $
+ @version $Id: messages.inc 1069 2008-02-13 19:33:10Z yllar $
*/
$messages = array();
-$messages['loginfailed'] = 'Sikertelen belépés';
-$messages['cookiesdisabled'] = 'A böngésző nem támogatja a sütik használatát';
-$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet';
-$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez';
-$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket';
-$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!';
-$messages['mailboxempty'] = 'A fiók üres';
-$messages['loading'] = 'Betöltés...';
-$messages['loadingdata'] = 'Az adatok betöltése...';
-$messages['checkingmail'] = 'Új üzenetek keresése...';
-$messages['sendingmessage'] = 'Az üzenet küldése...';
-$messages['messagesent'] = 'Az üzenet elküldve';
-$messages['savingmessage'] = 'Az üzenet mentése...';
-$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz';
-$messages['successfullysaved'] = 'A mentés sikerült';
-$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént';
-$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel';
-$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.';
-$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.';
+$messages['loginfailed'] = 'Sikertelen belépés';
+$messages['cookiesdisabled'] = 'A böngészõ nem támogatja a sütik használatát';
+$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet';
+$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez';
+$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket';
+$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!';
+$messages['mailboxempty'] = 'A fiók üres';
+$messages['loading'] = 'Betöltés...';
+$messages['loadingdata'] = 'Az adatok betöltése...';
+$messages['checkingmail'] = 'Új üzenetek keresése...';
+$messages['sendingmessage'] = 'Az üzenet küldése...';
+$messages['messagesent'] = 'Az üzenet elküldve';
+$messages['savingmessage'] = 'Az üzenet mentése...';
+$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz';
+$messages['successfullysaved'] = 'A mentés sikerült';
+$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént';
+$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel';
+$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.';
+$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.';
$messages['nocontactsfound'] = 'Nincs kapcsolat';
-$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található';
-$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült';
-$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';
-$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?';
-$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['formincomplete'] = 'Az űrlap hiányosan lett kitöltve';
-$messages['noemailwarning'] = 'Adj meg egy valós e-mail címet';
+$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található';
+$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült';
+$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';
+$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?';
+$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['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['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?';
-$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?';
-$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez';
-$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot';
-$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét';
-$messages['searchsuccessful'] = '$nr üzenetet találtam';
-$messages['searchnomatch'] = 'Nincs találat';
-$messages['searching'] = 'Keresés...';
-$messages['checking'] = 'Ellenőrzés...';
-$messages['nospellerrors'] = 'Nem találtam helyesírási hibát';
-$messages['folderdeleted'] = 'A mappa sikeresen törölve';
-$messages['deletedsuccessfully'] = 'Törölve';
-$messages['converting'] = 'Formázás eltávolítása az üzenetből...';
-$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverről';
-$messages['fileuploaderror'] = 'Feltöltés sikertelen';
-$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size';
-$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet';
-$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem';
-$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható';
-$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét';
+$messages['nopagesizewarning'] = 'Add meg a papír méreté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?';
+$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?';
+$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez';
+$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot';
+$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét';
+$messages['searchsuccessful'] = '$nr üzenetet találtam';
+$messages['searchnomatch'] = 'Nincs találat';
+$messages['searching'] = 'Keresés...';
+$messages['checking'] = 'Ellenõrzés...';
+$messages['nospellerrors'] = 'Nem találtam helyesírási hibát';
+$messages['folderdeleted'] = 'A mappa sikeresen törölve';
+$messages['deletedsuccessfully'] = 'Törölve';
+$messages['converting'] = 'Formázás eltávolítása az üzenetbõl...';
+$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverrõl';
+$messages['fileuploaderror'] = 'Feltöltés sikertelen';
+$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size';
+$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet';
+$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem';
+$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható';
+$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét';
+$messages['movingmessage'] = 'Üzenet mozgatása...';
+$messages['receiptsent'] = 'Az Olvasási Értesítést elküldtük';
+$messages['errorsendingreceipt'] = 'Az Olvasási Értesítést nem sikerült elküldeni';
+$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';
?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/id_ID/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Putu Arya Sabda Wijaya <klunxer@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = 'Selamat datang di $product';\r
+$labels['username'] = 'Username';\r
+$labels['password'] = 'Password';\r
+$labels['server'] = 'Server';\r
+$labels['login'] = 'Masuk';\r
+$labels['logout'] = 'Keluar';\r
+$labels['mail'] = 'E-Mail';\r
+$labels['settings'] = 'Pengaturan Pribadi';\r
+$labels['addressbook'] = 'Buku Alamat';\r
+$labels['inbox'] = 'Kotak Masuk';\r
+$labels['drafts'] = 'Daftar tunggu';\r
+$labels['sent'] = 'Terkirim';\r
+$labels['trash'] = 'Item-itenm tergapus';\r
+$labels['junk'] = 'Sampah';\r
+$labels['subject'] = 'Judul';\r
+$labels['from'] = 'Pengirim';\r
+$labels['to'] = 'Penerima';\r
+$labels['cc'] = 'Lampiran';\r
+$labels['bcc'] = 'Lampiran tersembunyi';\r
+$labels['replyto'] = 'Balas kepada';\r
+$labels['date'] = 'Tangal';\r
+$labels['size'] = 'Ukuran';\r
+$labels['priority'] = 'Prioritas';\r
+$labels['organization'] = 'Organisasi';\r
+$labels['reply-to'] = 'Balas kepada';\r
+$labels['mailboxlist'] = 'Map-map';\r
+$labels['messagesfromto'] = 'Pesan $from kepada $to sebanyak $count';\r
+$labels['messagenrof'] = 'Pesan $nr sebanyak $count';\r
+$labels['moveto'] = 'dipindahkan...';\r
+$labels['download'] = 'unduh';\r
+$labels['filename'] = 'Nama berkas';\r
+$labels['filesize'] = 'Ukuran berkas';\r
+$labels['preferhtml'] = 'Lebih suka HTML';\r
+$labels['htmlmessage'] = 'Pesan HTML';\r
+$labels['prettydate'] = 'Tanggal cantik';\r
+$labels['addtoaddressbook'] = 'Tambahkan ke buku tamu';\r
+$labels['sun'] = 'Min';\r
+$labels['mon'] = 'Sen';\r
+$labels['tue'] = 'Sel';\r
+$labels['wed'] = 'Rab';\r
+$labels['thu'] = 'Kam';\r
+$labels['fri'] = 'Jum';\r
+$labels['sat'] = 'Sab';\r
+$labels['sunday'] = 'Minggu';\r
+$labels['monday'] = 'Senin';\r
+$labels['tuesday'] = 'Selasa';\r
+$labels['wednesday'] = 'Rabu';\r
+$labels['thursday'] = 'Kamis';\r
+$labels['friday'] = 'Jumat';\r
+$labels['saturday'] = 'Sabtu';\r
+$labels['today'] = 'Hari ini';\r
+$labels['checkmail'] = 'Periksa pesan baru';\r
+$labels['writenewmessage'] = 'Buat pesan baru';\r
+$labels['replytomessage'] = 'Balas pesan';\r
+$labels['replytoallmessage'] = 'balas ke pengirim dan semua penerima';\r
+$labels['forwardmessage'] = 'Teruskan pesan';\r
+$labels['deletemessage'] = 'Pindahkan pesan ke tong sampah';\r
+$labels['movemessagetotrash'] = 'Pindahkan pesan ke tong sampah';\r
+$labels['printmessage'] = 'cetak pesan ini';\r
+$labels['previousmessage'] = 'Perlihatkan pesan sebelumnya';\r
+$labels['previousmessages'] = 'Perlihatkan kumpulan pesan-pesan sebelumnya';\r
+$labels['firstmessage'] = 'Perlihatkan pesan pertama';\r
+$labels['firstmessages'] = 'Perlihatkan kumpulan pesan pertama';\r
+$labels['nextmessage'] = 'Perlihatkan pesan berikutnya';\r
+$labels['nextmessages'] = 'Perlihatkan kumpulan pesan-pesan berikutnya';\r
+$labels['lastmessage'] = 'Perlihatkan pesan terakhir';\r
+$labels['lastmessages'] = 'Perlihatkan kumpulan pesan terkahir';\r
+$labels['backtolist'] = 'Kembali ke daftar pesan';\r
+$labels['viewsource'] = 'Perlihatkan kode sumber';\r
+$labels['markmessages'] = 'Tandai Pesan';\r
+$labels['markread'] = 'Terbaca';\r
+$labels['markunread'] = 'Belum Terbaca';\r
+$labels['select'] = 'Pilih';\r
+$labels['all'] = 'Semua';\r
+$labels['none'] = 'Tidak satupun';\r
+$labels['unread'] = 'Belum terbaca';\r
+$labels['compact'] = 'Ramping';\r
+$labels['empty'] = 'Kosong';\r
+$labels['purge'] = 'Kosongkan';\r
+$labels['quota'] = 'Penggunaan kandar';\r
+$labels['unknown'] = 'Tidak dikenal';\r
+$labels['unlimited'] = 'Tidak terbatas';\r
+$labels['quicksearch'] = 'Pencarian cepat';\r
+$labels['resetsearch'] = 'Atur ulang pencarian';\r
+$labels['compose'] = 'Tulis sebuah pesan';\r
+$labels['savemessage'] = 'Simpan daftar tunggu ini';\r
+$labels['sendmessage'] = 'Kirim pesan sekarang';\r
+$labels['addattachment'] = 'Sisipkan sebuah berkas';\r
+$labels['charset'] = 'set karakter';\r
+$labels['editortype'] = 'Tipe editor';\r
+$labels['returnreceipt'] = 'Kembalikan penerima';\r
+$labels['checkspelling'] = 'Pemeriksaan ejaan';\r
+$labels['resumeediting'] = 'Lanjutkan mengedit';\r
+$labels['revertto'] = 'Balik ke';\r
+$labels['attachments'] = 'Sisispan';\r
+$labels['upload'] = 'unggah';\r
+$labels['close'] = 'Tutup';\r
+$labels['low'] = 'Rendah';\r
+$labels['lowest'] = 'Terrendah';\r
+$labels['normal'] = 'Normal';\r
+$labels['high'] = 'Tinggi';\r
+$labels['highest'] = 'tertinggi';\r
+$labels['nosubject'] = '(tanpa judul)';\r
+$labels['showimages'] = 'Tampilkan gambar';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'Text murni';\r
+$labels['addcc'] = 'Tambah Cc';\r
+$labels['addbcc'] = 'Tambah Bcc';\r
+$labels['addreplyto'] = 'Tambah Balas Ke';\r
+$labels['mdnrequest'] = 'Pengirim pesan ini telah meminta untuk diberitahu ketika Anda membaca pesan ini. Apakah anda ingin memberitahu pengirim?';\r
+$labels['receiptread'] = 'Tanda Terima (baca)';\r
+$labels['yourmessage'] = 'Ini adalah Tanda Terima untuk pesan Anda';\r
+$labels['receiptnote'] = 'Catatan: Tanda Terima ini hanya mengesahkan bahwa pesan telah diperlihatkan pada komputer penerima. Tidak ada jaminan bahwa penerima telah membaca atau mengerti isi pesan.';\r
+$labels['name'] = 'Tampilkan nama';\r
+$labels['firstname'] = 'Nama depan';\r
+$labels['surname'] = 'Nama belakang';\r
+$labels['email'] = 'E-Mail';\r
+$labels['addcontact'] = 'Tambah kontak baru';\r
+$labels['editcontact'] = 'Ubah kontak';\r
+$labels['edit'] = 'Ubah';\r
+$labels['cancel'] = 'Batal';\r
+$labels['save'] = 'Simpan';\r
+$labels['delete'] = 'Hapus';\r
+$labels['newcontact'] = 'Buat kartu kontak baru';\r
+$labels['deletecontact'] = 'Hapus kontak terpilih';\r
+$labels['composeto'] = 'Tulis surat kepada';\r
+$labels['contactsfromto'] = 'Kontak $from kepada $to sebanyak $count';\r
+$labels['print'] = 'Cetak';\r
+$labels['export'] = 'Ekspor';\r
+$labels['previouspage'] = 'Perlihatkan kumpulan sebelumnya';\r
+$labels['firstpage'] = 'Perlihatkan kumpulan pertama';\r
+$labels['nextpage'] = 'Perlihatkan kumpulan selanjutnya';\r
+$labels['lastpage'] = 'Perlihatkan kumpulan terakhir';\r
+$labels['groups'] = 'Kelompok';\r
+$labels['personaladrbook'] = 'Alamat personal';\r
+$labels['settingsfor'] = 'Pengaturan untuk';\r
+$labels['preferences'] = 'Pilihan';\r
+$labels['userpreferences'] = 'Pilihan pengguna';\r
+$labels['editpreferences'] = 'Ubah pilihan pengguna';\r
+$labels['identities'] = 'Identitas';\r
+$labels['manageidentities'] = 'Atur identitas untuk akun ini';\r
+$labels['newidentity'] = 'Identitas baru';\r
+$labels['newitem'] = 'Item baru';\r
+$labels['edititem'] = 'Ubah item';\r
+$labels['setdefault'] = 'Pengaturan Awal';\r
+$labels['language'] = 'Bahasa';\r
+$labels['timezone'] = 'Daerah Waktu';\r
+$labels['pagesize'] = 'Baris per halaman';\r
+$labels['signature'] = 'Tanda tangan';\r
+$labels['dstactive'] = 'Waktu Musim Panas';\r
+$labels['htmleditor'] = 'Tulis pesan HTML';\r
+$labels['htmlsignature'] = 'Tandatangan HTML';\r
+$labels['previewpane'] = 'Perlihatkan tempat melihat';\r
+$labels['autosavedraft'] = 'Otomatis menyimpan pesan tertunda';\r
+$labels['everynminutes'] = 'setiap $n menit';\r
+$labels['never'] = 'tidak pernah';\r
+$labels['folder'] = 'Map';\r
+$labels['folders'] = 'Map-map';\r
+$labels['foldername'] = 'Nama map';\r
+$labels['subscribed'] = 'Subscribed';\r
+$labels['messagecount'] = 'Pesan-pesan';\r
+$labels['create'] = 'Buat';\r
+$labels['createfolder'] = 'Buat map baru';\r
+$labels['rename'] = 'Namai ulang';\r
+$labels['renamefolder'] = 'Namai ulang map';\r
+$labels['deletefolder'] = 'Hapus map';\r
+$labels['managefolders'] = 'Atur map';\r
+$labels['sortby'] = 'Urut berdasarkan';\r
+$labels['sortasc'] = 'Urut menaik';\r
+$labels['sortdesc'] = 'Urut menurun';\r
+\r
+?>\r
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/id_ID/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Putu Arya Sabda Wijaya <klunxer@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'Gagal masuk';\r
+$messages['cookiesdisabled'] = 'Browser Anda tidak menerima cookies';\r
+$messages['sessionerror'] = 'Session Anda invalid atau kadaluwarsa';\r
+$messages['imaperror'] = 'Koneksi ke IMAP server gagal';\r
+$messages['nomessagesfound'] = 'Surat tidak ditemukan di kotak masuk ini';\r
+$messages['loggedout'] = 'Anda berhasil mengakhiri session. Selamat Tinggal!';\r
+$messages['mailboxempty'] = 'Kotak masuk kosong';\r
+$messages['loading'] = 'Loading...';\r
+$messages['loadingdata'] = 'Loading data...';\r
+$messages['checkingmail'] = 'Memeriksa pesan baru...';\r
+$messages['sendingmessage'] = 'Mengirim pesan...';\r
+$messages['messagesent'] = 'Pesan terkirim';\r
+$messages['savingmessage'] = 'Menyimpan pesan...';\r
+$messages['messagesaved'] = 'MMenyimpan pesan ke daftar tunggu';\r
+$messages['successfullysaved'] = 'Berhasil disimpan';\r
+$messages['addedsuccessfully'] = 'Kontak berhasil ditambahkan ke buku alamat';\r
+$messages['contactexists'] = 'Konatk dengan alamat e-mail ini sudah ada';\r
+$messages['blockedimages'] = 'Untuk melindungi privasi Anda, gambar-gambar diluar server diblok pada pesan ini.';\r
+$messages['encryptedmessage'] = 'Pesan ini terenkripsi dan tidak bisa ditampilkan. Maaf!';\r
+$messages['nocontactsfound'] = 'Kontak tidak ditemukan';\r
+$messages['contactnotfound'] = 'Kontak yang diminta tidak ditemukan';\r
+$messages['sendingfailed'] = 'Pengiriman pesan gagal';\r
+$messages['errorsaving'] = 'Error ketika menyimpan';\r
+$messages['errormoving'] = 'Pesan tidak bisa dipindahkan';\r
+$messages['errordeleting'] = 'Pesan tidak bisa dihapus';\r
+$messages['deletecontactconfirm'] = 'Apakah anda yakin untuk menghapus kontak terpilih?';\r
+$messages['deletemessagesconfirm'] = 'Yakin menghapus pesan terpilih?';\r
+$messages['deletefolderconfirm'] = 'Apakah anda benar-benar ingin menghapus map ini?';\r
+$messages['purgefolderconfirm'] = 'Yakin menghapus semua pesan pada map ini?';\r
+$messages['formincomplete'] = 'Blangko tidak terisi semua';\r
+$messages['noemailwarning'] = 'Tolong masukkan alamat email yang valid';\r
+$messages['nonamewarning'] = 'Tolong masukkan nama';\r
+$messages['nopagesizewarning'] = 'Tolong masukkan ukuran halaman';\r
+$messages['norecipientwarning'] = 'Tolong masukkan sedikitnya satu penerima';\r
+$messages['nosubjectwarning'] = '\\"Judul\\" kosong. Isi judul sekarang?';\r
+$messages['nobodywarning'] = 'Kirim pesan ini tanpa teks?';\r
+$messages['notsentwarning'] = 'Pesan belum terkirim. Buang pesan Anda?';\r
+$messages['noldapserver'] = 'Tolong pilih server LDAP untuk pencarian';\r
+$messages['nocontactsreturned'] = 'Kontak kosong';\r
+$messages['nosearchname'] = 'Tolong masukkan nama kontak atau alamat email';\r
+$messages['searchsuccessful'] = '$nr pesan ditemukan';\r
+$messages['searchnomatch'] = 'Pencarian kosong';\r
+$messages['searching'] = 'Mencari...';\r
+$messages['checking'] = 'Memeriksa...';\r
+$messages['nospellerrors'] = 'Tidak ditemkan kesalahan ejaan';\r
+$messages['folderdeleted'] = 'Map berhasil dihapus';\r
+$messages['deletedsuccessfully'] = 'Berhasil dihapus';\r
+$messages['converting'] = 'Mengembalikan pesan ke format awal...';\r
+$messages['messageopenerror'] = 'Tidak dapat mengambil pesan dari server';\r
+$messages['fileuploaderror'] = 'Gagal mengunggah berkas';\r
+$messages['filesizeerror'] = 'Berkas terunggah mencapai ukuran maksimal dari $size';\r
+$messages['copysuccess'] = 'Berhasil menyalin $nr alamat';\r
+$messages['copyerror'] = 'Tidak bisa menyalin alamat manapun';\r
+$messages['sourceisreadonly'] = 'Sumber dari alamat ini hanya dapat dibaca';\r
+$messages['errorsavingcontact'] = 'Tidak bisa menyimpan alamat kontak';\r
+$messages['movingmessage'] = 'Memindahkan pesan...';\r
+$messages['receiptsent'] = 'Berhasil mengirim pemberitahuan tanda terima telah terbaca';\r
+$messages['errorsendingreceipt'] = 'Tidak dapat mengirim tanda terima';\r
+$messages['nodeletelastidentity'] = 'Anda tidak bida mengapus identitas ini, ini identitas yang terakhir';\r
+$messages['addsubfolderhint'] = 'Folder ini akan dibuat sebagai subfolder pada folder yang terpilih';\r
+\r
+?>\r
| program/localization/index.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: index.inc 886 2007-10-19 07:24:53Z yllar $
-
- */
+ $Id: index.inc 1160 2008-03-01 15:32:44Z yllar $
+
+*/
$rcube_languages = array(
- 'en_US' => 'English (US)',
- 'en_GB' => 'English (GB)',
- 'ar' => 'Arabic',
- 'am' => 'Armenian',
- 'bg' => 'Bulgarian',
- 'bs_BA' => 'Bosnian (Bosanski)',
- 'zh_TW' => 'Chinese (Traditional)',
- 'zh_CN' => 'Chinese (Simplified)',
- 'ca' => 'Català',
- 'cz' => 'Czech',
- 'da' => 'Dansk',
- 'de_DE' => 'Deutsch (Deutsch)',
- 'de_CH' => 'Deutsch (Schweiz)',
- 'eo' => 'Esperanto',
- 'es' => 'Español',
- 'et_EE' => 'Estonian',
- 'eu' => 'Euskara',
- 'fr' => 'Français',
- 'gl' => 'Galego',
- 'ga_IE' => 'Irish',
- 'el' => 'Greek',
- 'hi' => 'Hindi',
- 'hr' => 'Hrvatski',
- 'hu' => 'Hungarian',
- 'id_ID' => 'Indonesian',
- 'it' => 'Italiano',
- 'ja' => 'Japanese (日本語)',
- 'kr' => 'Korean',
- 'kur_KU' => 'Kurdish (Kurmancî)',
- 'lv' => 'Latvian',
- 'lt' => 'Lithuanian',
- 'mk' => 'Macedonian (Slavic FYROM)',
- 'ms_MY' => 'Malay',
- 'nl_NL' => 'Nederlands',
- 'nl_BE' => 'Flemish',
- 'nb_NO' => 'Norsk (bokmål)',
- 'nn_NO' => 'Norsk (nynorsk)',
- 'fa' => 'Persian',
- 'pl' => 'Polski',
- 'pt_PT' => 'Portuguese (Standard)',
- 'pt_BR' => 'Portuguese (Brazilian)',
- 'ro' => 'Romanian',
- 'ru' => 'Russian',
- 'fi' => 'Suomi',
- 'se' => 'Svenska',
- 'si' => 'Sinhala',
- 'sl' => 'Slovenian',
- 'sk' => 'Slovak',
- 'sr_latin' => 'Serbian Latin',
- 'sr_cyrillic' => 'Serbian Cyrillic',
- 'tr' => 'Turkish',
- 'th_TH' => 'Thai',
- 'uk' => 'Ukrainian',
- 'vn' => 'Vietnamese'
+ 'sq_AL' => 'Albanian',
+ 'ar' => 'Arabic',
+ 'am' => 'Armenian',
+ 'bs_BA' => 'Bosnian (Bosanski)',
+ 'bg' => 'Bulgarian',
+ 'ca' => 'Català',
+ 'zh_CN' => 'Chinese (Simplified)',
+ 'zh_TW' => 'Chinese (Traditional)',
+ 'hr' => 'Croatian (Hrvatski)',
+ 'cz' => 'Czech',
+ 'da' => 'Dansk',
+ 'de_DE' => 'Deutsch (Deutsch)',
+ 'de_CH' => 'Deutsch (Schweiz)',
+ 'en_GB' => 'English (GB)',
+ 'en_US' => 'English (US)',
+ 'es' => 'Español',
+ 'eo' => 'Esperanto',
+ 'et_EE' => 'Estonian',
+ 'eu' => 'Euskara',
+ 'nl_BE' => 'Flemish',
+ 'fr' => 'Français',
+ 'gl' => 'Galego',
+ 'ge' => 'Georgian',
+ 'el' => 'Greek',
+ 'he' => 'Hebrew',
+ 'hi' => 'Hindi',
+ 'hu' => 'Hungarian',
+ 'is' => 'Icelandic',
+ 'id_ID' => 'Indonesian',
+ 'ga_IE' => 'Irish',
+ 'it' => 'Italiano',
+ 'ja' => 'Japanese (日本語)',
+ 'kr' => 'Korean',
+ 'lv' => 'Latvian',
+ 'lt' => 'Lithuanian',
+ 'mk' => 'Macedonian',
+ 'ms_MY' => 'Malay',
+ 'nl_NL' => 'Nederlands',
+ 'ne' => 'Nepali',
+ 'nb_NO' => 'Norsk (bokmål)',
+ 'nn_NO' => 'Norsk (nynorsk)',
+ 'fa' => 'Persian',
+ 'pl' => 'Polski',
+ 'pt_BR' => 'Portuguese (Brazilian)',
+ 'pt_PT' => 'Portuguese (Standard)',
+ 'ro' => 'Romanian',
+ 'ru' => 'Russian',
+ 'sr_cyrillic' => 'Serbian Cyrillic',
+ 'sr_latin' => 'Serbian Latin',
+ 'si' => 'Sinhala',
+ 'sk' => 'Slovak',
+ 'sl' => 'Slovenian',
+ 'fi' => 'Suomi',
+ 'se' => 'Svenska',
+ 'th_TH' => 'Thai',
+ 'tr' => 'Turkish',
+ 'uk' => 'Ukrainian',
+ 'vn' => 'Vietnamese'
);
$rcube_language_aliases = array(
- 'ee' => 'et_EE',
- 'bs' => 'bs_BA',
- 'cn' => 'zh_CN',
- 'de' => 'de_DE',
- 'en' => 'en_US',
- 'ga' => 'ga_IE',
- 'nl' => 'nl_NL',
- 'no' => 'nn_NO',
- 'pt' => 'pt_PT',
- 'th' => 'th_TH',
- 'tw' => 'zh_TW'
+ 'ee' => 'et_EE',
+ 'bs' => 'bs_BA',
+ 'cn' => 'zh_CN',
+ 'de' => 'de_DE',
+ 'en' => 'en_US',
+ 'ga' => 'ga_IE',
+ 'nl' => 'nl_NL',
+ 'no' => 'nn_NO',
+ 'pt' => 'pt_PT',
+ 'th' => 'th_TH',
+ 'tw' => 'zh_TW'
);
$rcube_charsets = array();
-
?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | 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 $
+
+*/
+
+$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['settings'] = 'Stillingar';
+$labels['addressbook'] = 'Netfangaskrá';
+
+// mailbox names
+$labels['inbox'] = 'Innhólf';
+$labels['drafts'] = 'Drög';
+$labels['sent'] = 'Sent';
+$labels['trash'] = 'Eyddir hlutir';
+$labels['junk'] = 'Ruslpóstur';
+
+// message listing
+$labels['subject'] = 'Efni';
+$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['priority'] = 'Forgangur';
+$labels['organization'] = 'Stofnun';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'Möppur';
+$labels['messagesfromto'] = 'Skeyti $from til $to af $count';
+$labels['messagenrof'] = 'Skeyti $nr af $count';
+
+$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';
+$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['wednesday'] = 'miðvikudagur';
+$labels['thursday'] = 'fimmtudagur';
+$labels['friday'] = 'föstudagur';
+$labels['saturday'] = 'laugardagur';
+
+$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['replytoallmessage'] = 'Svara sendanda og öllum viðtakendum';
+$labels['forwardmessage'] = 'Framsenda skeyti';
+$labels['deletemessage'] = 'Færa skeyti í rusl';
+$labels['printmessage'] = 'Prenta 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['select'] = 'Velja';
+$labels['all'] = 'Allt';
+$labels['none'] = 'Ekkert';
+$labels['unread'] = 'Ólesið';
+
+$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['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['highest'] = 'Hæst';
+
+$labels['nosubject'] = '(ekkert efni)';
+$labels['showimages'] = 'Birta myndir';
+
+$labels['editortype'] = 'Gerð ritils';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Einfaldur';
+
+$labels['checkspelling'] = 'Villuleita';
+$labels['resumeediting'] = 'Aftur í ritham';
+$labels['revertto'] = 'Hverfa til';
+
+$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['firstname'] = 'Fornafn';
+$labels['surname'] = 'Eftirnafn';
+$labels['email'] = 'Netfang';
+$labels['mobile'] = 'Farsími';
+
+$labels['addcontact'] = 'Bæta við nýju';
+$labels['editcontact'] = 'Lagfæra';
+
+$labels['edit'] = 'Laga';
+$labels['cancel'] = 'Hætta við';
+$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['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['signature'] = 'Undirskrift';
+$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['renamefolder'] = 'Breyta nafni möppu';
+
+
+
+$labels['sortby'] = 'Raða eftir';
+$labels['sortasc'] = 'Raða vaxandi';
+$labels['sortdesc'] = 'Raða minnkandi';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/en_GB/messages.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: messages.inc 466 2007-02-06 09:17:01Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Innskráning mistókst';
+$messages['cookiesdisabled'] = 'Vafrinn þinn vill ekki taka við kökum (cookies)';
+$messages['sessionerror'] = 'Innskráningin þín ógild eða útrunnin';
+$messages['imaperror'] = 'Tengin við IMAP-miðlara mistókst';
+$messages['nomessagesfound'] = 'Engin skeyti eru í þessu pósthólfi';
+$messages['loggedout'] = 'Þú hefur útskráðst. Bless!';
+$messages['mailboxempty'] = 'Pósthólfið er tómt';
+$messages['loading'] = 'Hleð...';
+$messages['loadingdata'] = 'Hleð gögn...';
+$messages['checkingmail'] = 'Gái að nýjum skeytum...';
+$messages['messagesent'] = 'Skeyti var sent';
+$messages['savingmessage'] = 'Vista skeyti...';
+$messages['messagesaved'] = 'Skeytið vistað í Drög';
+$messages['successfullysaved'] = 'Vistun heppnaðist!';
+$messages['addedsuccessfully'] = 'Netfangi var bætt í netfangaskrá';
+$messages['contactexists'] = 'Þetta netfang er þegar skráð í netfangaskrána';
+$messages['blockedimages'] = 'Til verndar hafa allar myndir í þessu skeyti verið blokkaðar.';
+$messages['encryptedmessage'] = 'Þetta er dulkóðað skeyti og því miður er ekki hægt að birta það';
+$messages['nocontactsfound'] = 'Engin netföng';
+$messages['sendingfailed'] = 'Sending misheppnaðist';
+$messages['errorsaving'] = 'Villa kom upp þegar var verið að vista';
+$messages['errormoving'] = 'Gat ekki fært skeytið';
+$messages['errordeleting'] = 'Gat ekki eytt skeytinu';
+$messages['deletecontactconfirm'] = 'Ertu viss um að þú viljir eyða völdum netföngum?';
+$messages['deletefolderconfirm'] = 'Ertu viss um að vilja eyða þessari möppu?';
+$messages['formincomplete'] = 'Formið var ekki fyllt út að fullu';
+$messages['noemailwarning'] = 'Sláðu inn gildt netfang';
+$messages['nonamewarning'] = 'Sláðu inn nafn';
+$messages['nopagesizewarning'] = 'Sláðu inn síðustærð';
+$messages['norecipientwarning'] = 'Í það minnsta einn viðtakandi verður að vera';
+$messages['nosubjectwarning'] = 'Efnislínan er tóm. Viltu slá eitthvað inn í hana?';
+$messages['nobodywarning'] = 'Viltu senda tómt skeyti?';
+$messages['notsentwarning'] = 'Skeytið hefur ekki verið send. Viltu henda skeytinu?';
+$messages['noldapserver'] = 'Please select an ldap server to search';
+$messages['nocontactsreturned'] = 'Engin netföng fundust';
+$messages['nosearchname'] = 'Sláðu inn nafn eða netfang';
+$messages['searchsuccessful'] = '$nr skeyti fundust';
+$messages['searchnomatch'] = 'Leit skilaði engu';
+$messages['searching'] = 'Leita...';
+$messages['checking'] = 'Gái...';
+$messages['nospellerrors'] = 'Engar innsláttarvillur fundust';
+$messages['folderdeleted'] = 'Möppu var eytt';
+
+?>
\ No newline at end of file
| language/it/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Yusef Maali <contact@yusefmaali.net> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 869 2007-10-15 13:27:08Z yllar $
+ @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$labels['lastmessages'] = 'Visualizza l\'ultimo set di messaggi';
$labels['backtolist'] = 'Torna alla lista messaggi';
$labels['viewsource'] = 'Visualizza sorgente messaggio';
+$labels['markmessages'] = 'Marca i messaggi';
+$labels['markread'] = 'Letti';
+$labels['markunread'] = 'Non letti';
$labels['select'] = 'Seleziona';
$labels['all'] = 'Tutti';
$labels['none'] = 'Nessuno';
$labels['addcc'] = 'Aggiungi Cc';
$labels['addbcc'] = 'Aggiungi Bcc';
$labels['addreplyto'] = 'Aggiungi Rispondi a';
+$labels['mdnrequest'] = 'Il mittente richiede di ricevere una notifica dell\'avvenuta lettura del messaggio. Si desidera inviare tale notifica?';
+$labels['receiptread'] = 'Ricevuta di ritorno (letto)';
+$labels['yourmessage'] = 'Questa è la ricevuta di ritorno del mesaggio inviato';
+$labels['receiptnote'] = 'Nota: questa Ricevuta di ritorno attesta solamente che il messaggio è stato visualizzato nel computer del destinatario. Non c\'è pertanto alcuna garanzia che il destinatario abbia letto o compreso il suo contenuto.';
$labels['name'] = 'Nome visualizzato';
$labels['firstname'] = 'Nome';
$labels['surname'] = 'Cognome';
$labels['folders'] = 'Cartelle';
$labels['foldername'] = 'Nome cartella';
$labels['subscribed'] = 'Sottoscritta';
+$labels['messagecount'] = 'Messaggi';
$labels['create'] = 'Crea';
$labels['createfolder'] = 'Crea nuova cartella';
$labels['rename'] = 'Rinomina';
| language/it/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Yusef Maali <contact@yusefmaali.net> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 869 2007-10-15 13:27:08Z yllar $
+ @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$messages['sourceisreadonly'] = 'La rubrica è in sola lettura';
$messages['errorsavingcontact'] = 'Impossibile salvare il contatto';
$messages['movingmessage'] = 'Sposto il messaggio...';
+$messages['receiptsent'] = 'Ricevuta di ritorno inviata con successo';
+$messages['errorsendingreceipt'] = 'Impossibile spedire la ricevuta di ritorno';
+$messages['nodeletelastidentity'] = 'Impossibile eliminare l\'unica identità disponibile';
+$messages['addsubfolderhint'] = 'La cartella verrà creata come sotto cartella della cartella corrente';
?>
\ No newline at end of file
| language/ja/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Takashi Takamatsu <taka717@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: labels.inc 1154 2008-02-28 20:05:47Z thomasb $
*/
$labels['replytomessage'] = '返信';
$labels['replytoallmessage'] = '送信者とすべての受信者に返信';
$labels['forwardmessage'] = '転送';
-$labels['deletemessage'] = 'ごみ箱に移動';
+$labels['deletemessage'] = '削除';
+$labels['movemessagetotrash'] = 'ごみ箱に移動';
$labels['printmessage'] = '印刷';
$labels['previousmessage'] = '前のメッセージへ';
$labels['previousmessages'] = '前の一覧へ';
$labels['lastmessages'] = '最後の一覧へ';
$labels['backtolist'] = '一覧に戻る';
$labels['viewsource'] = 'ソースの表示';
+$labels['markmessages'] = 'マークを付ける';
+$labels['markread'] = '既読にする';
+$labels['markunread'] = '未読にする';
$labels['select'] = '選択';
$labels['all'] = 'すべて';
$labels['none'] = 'なし';
$labels['quicksearch'] = 'Quick search';
$labels['resetsearch'] = 'Reset search';
$labels['compose'] = 'メッセージの作成';
-$labels['sendmessage'] = '今すぐ送信';
$labels['savemessage'] = '草稿に保存';
+$labels['sendmessage'] = '今すぐ送信';
$labels['addattachment'] = 'ファイルの添付';
$labels['charset'] = '文字エンコード';
$labels['editortype'] = 'エディターの種類';
$labels['showimages'] = '画像の表示';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'テキスト';
+$labels['addcc'] = 'Cc 追加';
+$labels['addbcc'] = 'Bcc 追加';
+$labels['addreplyto'] = 'Reply-To 追加';
+$labels['mdnrequest'] = 'メッセージの送信者は開封確認の送付を求めています。開封確認のメッセージを送付しますか?';
+$labels['receiptread'] = '開封確認 (表示済)';
+$labels['yourmessage'] = 'これはあなたが送信したメッセージに対する開封確認です。';
+$labels['receiptnote'] = '注意: この開封確認はメッセージが受信者に表示されたことの通知です。受信者がメッセージを読んだこと、内容を理解したことを保証するものではありません。';
$labels['name'] = '表示名';
$labels['firstname'] = '名前';
$labels['surname'] = '名字';
$labels['folders'] = 'フォルダ一覧';
$labels['foldername'] = 'フォルダ名';
$labels['subscribed'] = '購読済';
+$labels['messagecount'] = 'メッセージ';
$labels['create'] = '作成';
$labels['createfolder'] = 'フォルダの新規作成';
$labels['rename'] = '名前の変更';
$labels['sortasc'] = '昇順で整列';
$labels['sortdesc'] = '降順で整列';
-?>
\ No newline at end of file
+?>
| language/ja/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Takashi Takamatsu <taka717@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 1154 2008-02-28 20:05:47Z thomasb $
*/
$messages = array();
$messages['loginfailed'] = 'ログインに失敗しました。';
-$messages['cookiesdisabled'] = 'ã\83\96ã\83©ã\82¦ã\82¶ã\83¼ã\81§ Cookie ã\81\8cç\84¡å\8a¹ã\81«è¨å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82';
+$messages['cookiesdisabled'] = 'ブラウザで Cookie が無効に設定されています。';
$messages['sessionerror'] = 'セッションが正しくないか期限切れです。';
-$messages['imaperror'] = 'IMAP ã\82µã\83¼ã\83\90ã\83¼ã\81¸ã\81®æ\8e¥ç¶\9aã\81«å¤±æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82';
+$messages['imaperror'] = 'IMAP サーバへの接続に失敗しました。';
$messages['nomessagesfound'] = 'メールはありません。';
$messages['loggedout'] = 'ログアウトしました。';
$messages['mailboxempty'] = 'メールボックスは空です。';
$messages['errordeleting'] = 'メールを削除できません。';
$messages['deletecontactconfirm'] = '選択した連絡先を本当に削除しますか?';
$messages['deletemessagesconfirm'] = '選択したメールを本当に削除しますか?';
-$messages['deletefolderconfirm'] = 'ã\81\93ã\81®ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\82\92æ\9c¬å½\93ã\81«å\89\8aé\99¤ã\81\97ã\81¾ã\81\99ã\81\8bï¼\9f';
+$messages['deletefolderconfirm'] = 'このフォルダを本当に削除しますか?';
$messages['purgefolderconfirm'] = 'このフォルダの全てのメールを本当に削除しますか?';
$messages['formincomplete'] = 'フォームの項目が完全に入力されていません。';
$messages['noemailwarning'] = '有効なメールアドレスを入力して下さい。';
$messages['searching'] = '検索中です...';
$messages['checking'] = '確認中です...';
$messages['nospellerrors'] = 'スペルミスは見つかりませんでした。';
-$messages['folderdeleted'] = 'ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\82\92å\89\8aé\99¤ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82';
+$messages['folderdeleted'] = 'フォルダを削除しました。';
$messages['deletedsuccessfully'] = '削除しました。';
$messages['converting'] = 'メールから書式を削除中です...';
$messages['messageopenerror'] = 'サーバからメールを取得できません。';
$messages['sourceisreadonly'] = 'このアドレス情報は読み取り専用です。';
$messages['errorsavingcontact'] = '連絡先のアドレスを保存できません。';
$messages['movingmessage'] = '移動中です...';
+$messages['receiptsent'] = '開封確認を送信しました。';
+$messages['errorsendingreceipt'] = '開封確認を送信できません。';
+$messages['nodeletelastidentity'] = '削除できません。少なくとも1つの個人情報が必要です。';
+$messages['addsubfolderhint'] = '現在選択しているフォルダのサブフォルダとして作成されます。';
-?>
\ No newline at end of file
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | 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 <lordmiss@lordmiss.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
+
+*/
+
+$labels['welcome'] = '$product에 오신 것을 환영합니다';
+$labels['welcome'] = '$product에 오신 것을 환영합니다';
+$labels['username'] = '사용자명';
+$labels['password'] = '비밀번호';
+$labels['server'] = '서버';
+$labels['login'] = '로그인';
+$labels['logout'] = '로그아웃';
+$labels['mail'] = '이메일';
+$labels['settings'] = '개인 설정';
+$labels['addressbook'] = '주소록';
+$labels['inbox'] = '받은편지함';
+$labels['drafts'] = '임시저장';
+$labels['sent'] = '보낸편지함';
+$labels['trash'] = '휴지통';
+$labels['junk'] = '정크메일';
+$labels['subject'] = '제목';
+$labels['from'] = '보내는 사람';
+$labels['to'] = '받는 사람';
+$labels['cc'] = '참조';
+$labels['bcc'] = '숨은 참조';
+$labels['replyto'] = '회신 주소';
+$labels['date'] = '날짜';
+$labels['size'] = '크기';
+$labels['priority'] = '우선순위';
+$labels['organization'] = '기관';
+$labels['reply-to'] = '회신 주소';
+$labels['mailboxlist'] = '폴더';
+$labels['messagesfromto'] = '$from 이 $to에게 보낸 메시지 $count 개';
+$labels['messagenrof'] = '메시지 $count 개 중 $nr 개';
+$labels['moveto'] = '이동...';
+$labels['download'] = '다운로드';
+$labels['filename'] = '파일 이름';
+$labels['filesize'] = '파일 크기';
+$labels['preferhtml'] = 'HTML 보이기';
+$labels['htmlmessage'] = 'HTML 메시지';
+$labels['prettydate'] = '날짜 형식';
+$labels['addtoaddressbook'] = '주소록에 추가';
+$labels['sun'] = '일';
+$labels['mon'] = '월';
+$labels['tue'] = '화';
+$labels['wed'] = '수';
+$labels['thu'] = '목';
+$labels['fri'] = '금';
+$labels['sat'] = '토';
+$labels['sunday'] = '일요일';
+$labels['monday'] = '월요일';
+$labels['tuesday'] = '화요일';
+$labels['wednesday'] = '수요일';
+$labels['thursday'] = '목요일';
+$labels['friday'] = '금요일';
+$labels['saturday'] = '토요일';
+$labels['today'] = '오늘';
+$labels['checkmail'] = '새 메일 확인';
+$labels['writenewmessage'] = '새 메일 작성';
+$labels['replytomessage'] = '회신 작성';
+$labels['replytoallmessage'] = '보낸이와 모든 수신자에게 회신';
+$labels['forwardmessage'] = '메일 전달';
+$labels['deletemessage'] = '메일 삭제';
+$labels['movemessagetotrash'] = '메일 휴지통으로 이동';
+$labels['printmessage'] = '메일 인쇄';
+$labels['previousmessage'] = '이전 메일 보기';
+$labels['previousmessages'] = '이전 메일 세트 보기';
+$labels['firstmessage'] = '처음 메일 보기';
+$labels['firstmessages'] = '처음 메일 세트 보기';
+$labels['nextmessage'] = '다음 메일 보기';
+$labels['nextmessages'] = '다음 메일 세트 보기';
+$labels['lastmessage'] = '마지막 메일 보기';
+$labels['lastmessages'] = '마지막 메일 세트 보기';
+$labels['backtolist'] = '메일 목록으로';
+$labels['viewsource'] = '소스 보기';
+$labels['markmessages'] = '메시지 표시';
+$labels['markread'] = '읽은 것으로';
+$labels['markunread'] = '읽지 않은 것으로';
+$labels['select'] = '선택';
+$labels['all'] = '모두';
+$labels['none'] = '없음';
+$labels['unread'] = '읽지 않음';
+$labels['compact'] = '간단하게';
+$labels['empty'] = '비우기';
+$labels['purge'] = '삭제';
+$labels['quota'] = '디스크 사용';
+$labels['unknown'] = '알수 없음';
+$labels['unlimited'] = '제한 없음';
+$labels['quicksearch'] = '빨리 찾기';
+$labels['resetsearch'] = '찾기 리셋';
+$labels['compose'] = '메일 쓰기';
+$labels['savemessage'] = '드래프트 저장';
+$labels['sendmessage'] = '메일 지금 보냄';
+$labels['addattachment'] = '파일 첨부';
+$labels['charset'] = '문자셋';
+$labels['editortype'] = '편집기 형태';
+$labels['returnreceipt'] = '수신 확인';
+$labels['checkspelling'] = '스펠링 체크';
+$labels['resumeediting'] = '편집 계속';
+$labels['revertto'] = '돌아감';
+$labels['attachments'] = '첨부 파일';
+$labels['upload'] = '업로드';
+$labels['close'] = '닫기';
+$labels['low'] = '낮음';
+$labels['lowest'] = '가장 낮음';
+$labels['normal'] = '보통';
+$labels['high'] = '높음';
+$labels['highest'] = '가장 높음';
+$labels['nosubject'] = '(제목 없음)';
+$labels['showimages'] = '이미지 표시';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = '일반 텍스트';
+$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'] = '$from 에서 $to 로의 연락처 $count 개';
+$labels['print'] = '인쇄';
+$labels['export'] = '내보내기';
+$labels['previouspage'] = '이전 세트 보기';
+$labels['firstpage'] = '처음 세트 보기';
+$labels['nextpage'] = '다음 세트 보기';
+$labels['lastpage'] = '마지막 세트 보기';
+$labels['groups'] = '그룹';
+$labels['personaladrbook'] = '개인 주소';
+$labels['settingsfor'] = '설정';
+$labels['preferences'] = '환경 설정';
+$labels['userpreferences'] = '사용자 환경';
+$labels['editpreferences'] = '사용자 환경 편집';
+$labels['identities'] = '신원';
+$labels['manageidentities'] = '이 계정의 신원 관리';
+$labels['newidentity'] = '새 신원';
+$labels['newitem'] = '새 아이템';
+$labels['edititem'] = '아이템 편집';
+$labels['setdefault'] = '기본으로 설정';
+$labels['language'] = '언어';
+$labels['timezone'] = '시간대';
+$labels['pagesize'] = '페이지당 줄 수';
+$labels['signature'] = '서명';
+$labels['dstactive'] = '서머타임';
+$labels['htmleditor'] = 'HTML 메일 쓰기';
+$labels['htmlsignature'] = 'HTML 서명';
+$labels['previewpane'] = '이전 구역 보기';
+$labels['autosavedraft'] = '드래프트 자동 저장';
+$labels['everynminutes'] = '$n 분마다';
+$labels['never'] = '하지 않음';
+$labels['folder'] = '폴더';
+$labels['folders'] = '폴더';
+$labels['foldername'] = '폴더 이름';
+$labels['subscribed'] = '가입됨';
+$labels['messagecount'] = '메시지';
+$labels['create'] = '만들기';
+$labels['createfolder'] = '새 폴더 만들기';
+$labels['rename'] = '이름 바꾸기';
+$labels['renamefolder'] = '폴더 이름 바꾸기';
+$labels['deletefolder'] = '폴더 지우기';
+$labels['managefolders'] = '폴더 관리';
+$labels['sortby'] = '정렬';
+$labels['sortasc'] = '오름차순으로 정렬';
+$labels['sortdesc'] = '내림차순으로 정렬';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | 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 <lordmiss@lordmiss.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
+
+*/
+
+$messages['loginfailed'] = '로그인 실패';
+$messages['loginfailed'] = '로그인 실패';
+$messages['cookiesdisabled'] = '브라우저가 쿠키를 지원하지 않습니다';
+$messages['sessionerror'] = '세션이 유효하지 않거나 종료되었습니다';
+$messages['imaperror'] = 'IMAP 서버 연결 실패';
+$messages['nomessagesfound'] = '이 메일함에 메일이 없습니다';
+$messages['loggedout'] = '세션을 성공적으로 종료하였습니다. 안녕히 가십시오!';
+$messages['mailboxempty'] = '메일함이 비어있습니다';
+$messages['loading'] = '불러오는 중...';
+$messages['loadingdata'] = '데이터 불러오는 중...';
+$messages['checkingmail'] = '새 메일 확인 중...';
+$messages['sendingmessage'] = '메일 보내는 중...';
+$messages['messagesent'] = '메일을 성공적으로 보냈습니다';
+$messages['savingmessage'] = '메일 저장 중...';
+$messages['messagesaved'] = '메일이 드래프트 폴더에 저장되었습니다';
+$messages['successfullysaved'] = '성공적으로 저장';
+$messages['addedsuccessfully'] = '연락처가 주소록에 성공적으로 추가되었습니다';
+$messages['contactexists'] = '이 메일로 지정된 연락처가 이미 있습니다';
+$messages['blockedimages'] = '보안 유지를 위해, 이 메일의 외부 이미지를 차단하였습니다';
+$messages['encryptedmessage'] = '이 메일은 암호화되어 볼 수 없습니다. 죄송합니다!';
+$messages['nocontactsfound'] = '연락처 없음';
+$messages['contactnotfound'] = '요청한 연락처가 없습니다';
+$messages['sendingfailed'] = '메일을 보내지 못했습니다';
+$messages['errorsaving'] = '저장 중 에러가 발생했습니다';
+$messages['errormoving'] = '메일을 옮길 수 없습니다';
+$messages['errordeleting'] = '메일을 지울 수 없습니다';
+$messages['deletecontactconfirm'] = '정말 선택한 연락처들을 삭제하시겠습니까?';
+$messages['deletemessagesconfirm'] = '정말 선택한 메일들을 삭제하시겠습니까?';
+$messages['deletefolderconfirm'] = '정말 이 폴더를 삭제하시겠습니까?';
+$messages['purgefolderconfirm'] = '정말 이 폴더의 모든 메일을 삭제하시겠습니까?';
+$messages['formincomplete'] = '양식을 완전히 채우지 않았습니다';
+$messages['noemailwarning'] = '유효한 이메일 주소를 넣어주십시오';
+$messages['nonamewarning'] = '이름을 넣어주십시오';
+$messages['nopagesizewarning'] = '페이지 크기를 넣어주십시오';
+$messages['norecipientwarning'] = '적어도 한 개 이상의 수신 주소를 넣어주십시오';
+$messages['nosubjectwarning'] = '"제목"이 없습니다. 제목을 넣으시겠습니까?';
+$messages['nobodywarning'] = '텍스트 없이 메일을 보낼까요?';
+$messages['notsentwarning'] = '메일을 보내지 않았습니다. 메일을 버리시겠습니까?';
+$messages['noldapserver'] = '검색할 LDAP 서버를 선택하세요';
+$messages['nocontactsreturned'] = '연락처가 없습니다';
+$messages['nosearchname'] = '연락처 이름이나 메일 주소를 넣으세요';
+$messages['searchsuccessful'] = '$nr개의 메일 발견';
+$messages['searchnomatch'] = '검색 결과가 없습니다';
+$messages['searching'] = '검색 중...';
+$messages['checking'] = '체크 중...';
+$messages['nospellerrors'] = '스펠링 에러가 없습니다';
+$messages['folderdeleted'] = '폴더를 성공적으로 삭제하였습니다';
+$messages['deletedsuccessfully'] = '성공적으로 삭제하였습니다';
+$messages['converting'] = '메일의 포맷을 지우는 중...';
+$messages['messageopenerror'] = '서버에서 메일을 가져올 수 없습니다';
+$messages['fileuploaderror'] = '파일 업로드 실패';
+$messages['filesizeerror'] = '올린 파일이 $size의 최대 크기를 초과했습니다';
+$messages['copysuccess'] = '$nr개의 주소를 성공적으로 복사했습니다';
+$messages['copyerror'] = '주소를 복사할 수 없습니다';
+$messages['sourceisreadonly'] = '이 주소 소스는 읽기 전용입니다';
+$messages['errorsavingcontact'] = '연락처 주소를 저장할 수 없습니다';
+$messages['movingmessage'] = '메시지 이동 중...';
+$messages['receiptsent'] = '메일 읽음 확인을 보냈습니다';
+$messages['errorsendingreceipt'] = '읽음 확인을 보낼 수 없습니다';
+$messages['nodeletelastidentity'] = '이 정보는 마지막 남은 것이므로 지울 수 없습니다';
+$messages['addsubfolderhint'] = '이 폴더는 현재 선택된 폴더의 서브 폴더로 만들어질 것입니다';
+
+?>
\ No newline at end of file
| language/lt/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Martynas Bendorius <martynas@e-vaizdas.net> |
+ | Author: Martynas Bendorius <martynas@evanet.lt> |
+-----------------------------------------------------------------------+'
- @version $Id: labels.inc 853 2007-10-03 19:47:40Z yllar $
+ @version $Id: labels.inc 1128 2008-02-21 07:43:23Z yllar $
*/
$labels['lastmessages'] = 'Rodyti paskutinius laiškus';
$labels['backtolist'] = 'Grižti į laiškų sarašą';
$labels['viewsource'] = 'Rodyti šaltinį';
+$labels['markmessages'] = 'Pažymėti laiškus';
+$labels['markread'] = 'Kaip perskaitytus';
+$labels['markunread'] = 'Kaip neperskaitytus';
$labels['select'] = 'Pažymėti';
$labels['all'] = 'Visus';
$labels['none'] = 'Nieko';
$labels['addcc'] = 'Pridėti Cc';
$labels['addbcc'] = 'Pridėti Bcc';
$labels['addreplyto'] = 'Pridėti Reply-To';
+$labels['mdnrequest'] = 'Žinutės siuntėjas paprašė patvirtinti, kad jūs ją perskaitėte. Ar norite išsiųsti patvirtinimą?';
+$labels['receiptread'] = 'Patvirtinimas (skaitymo)';
+$labels['yourmessage'] = 'Jūsų laiško perskaitymo patvirtinimas';
+$labels['receiptnote'] = 'Pastaba: šis laiško perskaitymo patvirtinimas nurodo, jog laiškas buvo atidarytas gavėjo kompiuteryje, tačiau negarantuoja, jog gavėjas perskaitė ir suprato laiško turinį.';
$labels['name'] = 'Rodomas vardas';
$labels['firstname'] = 'Vardas';
$labels['surname'] = 'Pavardė';
$labels['folders'] = 'Aplankai';
$labels['foldername'] = 'Aplanko vardas';
$labels['subscribed'] = 'Užsakytas';
+$labels['messagecount'] = 'Laiškai';
$labels['create'] = 'Sukurti';
$labels['createfolder'] = 'Sukurti naują aplanką';
$labels['rename'] = 'Pervadinti';
| language/lt/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Martynas Bendorius <martynas@e-vaizdas.net> |
+ | Author: Martynas Bendorius <martynas@evanet.lt> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 853 2007-10-03 19:47:40Z yllar $
+ @version $Id: messages.inc 1128 2008-02-21 07:43:23Z yllar $
*/
$messages['sourceisreadonly'] = 'Šis adreso šaltinis yra tik skaitymui';
$messages['errorsavingcontact'] = 'Kontakto adreso išsaugoti negalima';
$messages['movingmessage'] = 'Perkeliamas laiškas...';
+$messages['receiptsent'] = 'Sėkmingai išsiųstas laiško perskaitymo patvirtinimas';
+$messages['errorsendingreceipt'] = 'Nepavyko išsiųsti laiško perskaitymo patvirtinimo';
+$messages['nodeletelastidentity'] = 'Jūs negalite ištrinti šios tapatybės, kadangi ji yra vienintelė likusi.';
+$messages['addsubfolderhint'] = 'Šis aplankas bus sukurtas kaip poaplankis, kurį esate pažymėjęs';
-?>
+?>
| language/lv/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Rudolfs Osins <dev.random@gmail.com> |
- | Updated for 0.1-rc1: Mikelis Zalais <mik@prog.lv> |
+ | Mikelis Zalais <mik@prog.lv> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 557 2007-05-15 06:41:32Z yllar $
+ @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $
*/
$labels['replytomessage'] = 'Atbildēt uz vēstuli';
$labels['replytoallmessage'] = 'Atbildēt sūtītājam un visiem saņēmējiem';
$labels['forwardmessage'] = 'Pārsūtīt vēstuli';
-$labels['deletemessage'] = 'Pārvietot vēstuli uz miskasti';
+$labels['deletemessage'] = 'Dzēst vēstuli';
+$labels['movemessagetotrash'] = 'Pārvietot vēstuli uz miskasti';
$labels['printmessage'] = 'Izdrukāt šo vēstuli';
$labels['previousmessage'] = 'Parādīt iepriekšējo vēstuli';
$labels['previousmessages'] = 'Parādīt iepriekšējo vēstuļu kopu';
$labels['lastmessages'] = 'Parādīt pēdējo vēstuļu kopu';
$labels['backtolist'] = 'Atpakaļ uz vēstuļu sarakstu';
$labels['viewsource'] = 'Rādīt pirmtekstu';
+$labels['markmessages'] = 'Atzīmēt vēstules';
+$labels['markread'] = 'Kā lasītas';
+$labels['markunread'] = 'Kā nelasītas';
$labels['select'] = 'Iezīmēt';
$labels['all'] = 'Visas';
$labels['none'] = 'Nevienu';
$labels['quicksearch'] = 'Ārtā meklēšana';
$labels['resetsearch'] = 'Atstatīt meklēšanu';
$labels['compose'] = 'Rakstīt vēstuli';
-$labels['sendmessage'] = 'Sūtīt vēstuli';
$labels['savemessage'] = 'Saglabāt uzmetumu';
+$labels['sendmessage'] = 'Sūtīt vēstuli';
$labels['addattachment'] = 'Pievienot failu';
$labels['charset'] = 'Rakstzīmju kopa';
$labels['editortype'] = 'Redaktora tips';
$labels['showimages'] = 'Rādīt attēlus';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Vienkāršs teksts';
+$labels['addcc'] = 'Pievienot Cc';
+$labels['addbcc'] = 'Pievienot Bcc';
+$labels['addreplyto'] = 'Pievienot Reply-To';
+$labels['mdnrequest'] = 'Šīs vēstules sūtītājs vēlas redzēt vēstules saņemšanas apstiprinājumu. Vai jūs vēlaties nosūtīt apstiprinājumu?';
+$labels['receiptread'] = 'Saņemšanas apstiprinājums';
+$labels['yourmessage'] = 'Šīs ir jūsu vēstules saņemšanas apstiprinājums';
+$labels['receiptnote'] = 'Piezīme: Šīs apsiprinājums nozīmē tikai to, ka vēstule tika parādīta uz saņēmāja datora. Tas nenozīmē, ka saņēmējs ir izlasījis vai izpratis vēstules saturu.';
$labels['name'] = 'Uzrādītais vārds';
$labels['firstname'] = 'Vārds';
$labels['surname'] = 'Uzvārds';
$labels['folders'] = 'Mapes';
$labels['foldername'] = 'Mapes nosaukums';
$labels['subscribed'] = 'Abonētās';
+$labels['messagecount'] = 'Vēstules';
$labels['create'] = 'Izveidot';
$labels['createfolder'] = 'Izveidot jaunu mapi';
$labels['rename'] = 'Pārsaukt';
| language/lv/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Rudolfs Osins <dev.random@gmail.com> |
- | Updated for 0.1-rc1: Mikelis Zalais <mik@prog.lv> |
+ | Mikelis Zalais <mik@prog.lv> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 557 2007-05-15 06:41:32Z yllar $
+ @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $
*/
$messages['copyerror'] = 'Nevarēja nokopēt nevienu adresi';
$messages['sourceisreadonly'] = 'Adreses avots ir lasīšanas režīmā tikai';
$messages['errorsavingcontact'] = 'Nevarēja saglabāt kontakta adreses';
+$messages['movingmessage'] = 'Pārvietoju vēstules...';
+$messages['receiptsent'] = 'Saņemšanas apstiprinājums nosūtīts';
+$messages['errorsendingreceipt'] = 'Neizdevās nosūtīt apstiprinājumu';
+$messages['nodeletelastidentity'] = 'Šo identitāti nevar izdzēst, tā ir pati pēdējā.';
+$messages['addsubfolderhint'] = 'Šis folderis tiks izveidots kā apakšfolderis tam, kurš patreiz ir izvēlēts';
?>
\ No newline at end of file
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | language/mk/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Ivan Mishev - mishevivan@gmail.com |
- +-----------------------------------------------------------------------+
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Добредојдовте во $product';
-$labels['username'] = 'Корисничко Име';
-$labels['password'] = 'Лозинка';
-$labels['server'] = 'Сервер';
-$labels['login'] = 'Логирај Се';
-$labels['logout'] = 'Одлогирај Се';
-$labels['mail'] = 'Е-Маил';
-$labels['settings'] = 'Подесувања';
-$labels['addressbook'] = 'Именик';
-$labels['inbox'] = 'Пошта';
-$labels['drafts'] = 'Непратени';
-$labels['sent'] = 'Пратени';
-$labels['trash'] = 'Корпа';
-$labels['junk'] = 'Ѓубре';
-$labels['subject'] = 'Наслов';
-$labels['from'] = 'Праќач';
-$labels['to'] = 'Примач';
-$labels['cc'] = 'Копирај';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Препрати на';
-$labels['date'] = 'Дата';
-$labels['size'] = 'Големина';
-$labels['priority'] = 'Приоритет';
-$labels['organization'] = 'Организација';
-$labels['reply-to'] = 'Препрати на';
-$labels['mailboxlist'] = 'Папки';
-$labels['messagesfromto'] = '$count пораки од $from';
-$labels['messagenrof'] = '$nr порака од $count';
-$labels['moveto'] = 'Премести во...';
-$labels['download'] = 'сними';
-$labels['filename'] = 'Име на фајлот';
-$labels['filesize'] = 'Големина на Фајлот';
-$labels['preferhtml'] = 'Прикажи во HTML';
-$labels['htmlmessage'] = 'HTML Порака';
-$labels['prettydate'] = 'Убави дати';
-$labels['addtoaddressbook'] = 'Додади во именик';
-$labels['sun'] = 'Нед';
-$labels['mon'] = 'Пон';
-$labels['tue'] = 'Вто';
-$labels['wed'] = 'Сре';
-$labels['thu'] = 'Чет';
-$labels['fri'] = 'Пет';
-$labels['sat'] = 'Саб';
-$labels['sunday'] = 'Недела';
-$labels['monday'] = 'Понеделник';
-$labels['tuesday'] = 'Вторник';
-$labels['wednesday'] = 'Среда';
-$labels['thursday'] = 'Четврток';
-$labels['friday'] = 'Петок';
-$labels['saturday'] = 'Сабота';
-$labels['today'] = 'Денес';
-$labels['checkmail'] = 'Провери пошта';
-$labels['writenewmessage'] = 'Нова порака';
-$labels['replytomessage'] = 'Одговори на пораката';
-$labels['replytoallmessage'] = 'Одговори на сите';
-$labels['forwardmessage'] = 'Препрати ја пораката';
-$labels['deletemessage'] = 'Премести ја пораката во Корпа';
-$labels['printmessage'] = 'За печатење';
-$labels['previousmessage'] = 'Прикажи ја претходната порака';
-$labels['previousmessages'] = 'Прикажи ги претходните пораки';
-$labels['firstmessage'] = 'Прикажи ја првата порака';
-$labels['firstmessages'] = 'Прикажи ги првите пораки';
-$labels['nextmessage'] = 'Прикажи ја наредната порака';
-$labels['nextmessages'] = 'Прикажи ги следните пораки';
-$labels['lastmessage'] = 'Прикажи ја последната порака';
-$labels['lastmessages'] = 'Прикажи ги последните пораки';
-$labels['backtolist'] = 'Врати се во поштенското сандаче';
-$labels['viewsource'] = 'Покажи го изворот на пракање';
-$labels['select'] = 'Одбележи';
-$labels['all'] = 'Сите';
-$labels['none'] = 'Никоја';
-$labels['unread'] = 'Непрочитани';
-$labels['compact'] = 'Уредно';
-$labels['empty'] = 'Испразни';
-$labels['purge'] = 'Чистење';
-$labels['quota'] = 'Искористен простор';
-$labels['unknown'] = 'непознато';
-$labels['unlimited'] = 'неограничено';
-$labels['quicksearch'] = 'Брзо претражување';
-$labels['resetsearch'] = 'Ново претражување';
-$labels['compose'] = 'Нова порака';
-$labels['sendmessage'] = 'Прати ја пораката';
-$labels['savemessage'] = 'Снимај ја пораката во Непратени';
-$labels['addattachment'] = 'Прикачи фајл';
-$labels['charset'] = 'Charset';
-$labels['editortype'] = 'Тип на едитор';
-$labels['returnreceipt'] = 'Врати ';
-$labels['checkspelling'] = 'Провери спелување';
-$labels['resumeediting'] = 'Продолжи со уредување';
-$labels['revertto'] = 'Обрати се на';
-$labels['attachments'] = 'Прикачено';
-$labels['upload'] = 'Прикачи';
-$labels['close'] = 'Затвори';
-$labels['low'] = 'Низок';
-$labels['lowest'] = 'Најнизок';
-$labels['normal'] = 'Нормален';
-$labels['high'] = 'Висок';
-$labels['highest'] = 'Највисок';
-$labels['nosubject'] = '(нема тема)';
-$labels['showimages'] = 'Прикажи ги сликите';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Обичен текст';
-$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['previouspage'] = 'Прикажи претходна страна';
-$labels['firstpage'] = 'Прикажи ја првата страна';
-$labels['nextpage'] = 'Прикажи ја следната страна';
-$labels['lastpage'] = 'Прикажи ја последната страна';
-$labels['groups'] = 'Групи';
-$labels['personaladrbook'] = 'Адреси';
-$labels['settingsfor'] = 'Подесувања за';
-$labels['preferences'] = 'Подесувања';
-$labels['userpreferences'] = 'Кориснички подесувања';
-$labels['editpreferences'] = 'Промени ги корисничките подесувања';
-$labels['identities'] = 'Идентитети';
-$labels['manageidentities'] = 'Организирај ги идентитетите за овој корисник';
-$labels['newidentity'] = 'Нов идентитет';
-$labels['newitem'] = 'Нов објект';
-$labels['edititem'] = 'Промени објект';
-$labels['setdefault'] = 'Одбери за основно';
-$labels['language'] = 'Јазик';
-$labels['timezone'] = 'Временска зона';
-$labels['pagesize'] = 'Редови прикажани на страна';
-$labels['signature'] = 'Потпис';
-$labels['dstactive'] = 'Промени на времето';
-$labels['htmleditor'] = 'Создади HTML порака';
-$labels['htmlsignature'] = 'HTML потпис';
-$labels['previewpane'] = 'Прикажи го претходниот панел';
-$labels['autosavedraft'] = 'Авоматски снимај во Непратени';
-$labels['everynminutes'] = 'секои $n минути';
-$labels['never'] = 'никогаш';
-$labels['folder'] = 'Папка';
-$labels['folders'] = 'Папки';
-$labels['foldername'] = 'Име на папката';
-$labels['subscribed'] = 'Претплатен';
-$labels['create'] = 'Креирај';
-$labels['createfolder'] = 'Креирај нова папка';
-$labels['rename'] = 'Преименувај';
-$labels['renamefolder'] = 'Преименувај ја папката';
-$labels['deletefolder'] = 'Избриши ја папката';
-$labels['managefolders'] = 'Организирање на папки';
-$labels['sortby'] = 'Уреди по';
-$labels['sortasc'] = 'Уреди по азбучен ред';
-$labels['sortdesc'] = 'Уреди опаѓачки';
-
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/mk/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Ivan Mishev - mishevivan@gmail.com |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = 'Добредојдовте во $product';\r
+$labels['username'] = 'Корисничко Име';\r
+$labels['password'] = 'Лозинка';\r
+$labels['server'] = 'Сервер';\r
+$labels['login'] = 'Логирај Се';\r
+$labels['logout'] = 'Одлогирај Се';\r
+$labels['mail'] = 'Е-Маил';\r
+$labels['settings'] = 'Подесувања';\r
+$labels['addressbook'] = 'Именик';\r
+$labels['inbox'] = 'Пошта';\r
+$labels['drafts'] = 'Непратени';\r
+$labels['sent'] = 'Пратени';\r
+$labels['trash'] = 'Корпа';\r
+$labels['junk'] = 'Ѓубре';\r
+$labels['subject'] = 'Наслов';\r
+$labels['from'] = 'Праќач';\r
+$labels['to'] = 'Примач';\r
+$labels['cc'] = 'Копирај';\r
+$labels['bcc'] = 'Bcc';\r
+$labels['replyto'] = 'Препрати на';\r
+$labels['date'] = 'Дата';\r
+$labels['size'] = 'Големина';\r
+$labels['priority'] = 'Приоритет';\r
+$labels['organization'] = 'Организација';\r
+$labels['reply-to'] = 'Препрати на';\r
+$labels['mailboxlist'] = 'Папки';\r
+$labels['messagesfromto'] = '$count пораки од $from';\r
+$labels['messagenrof'] = '$nr порака од $count';\r
+$labels['moveto'] = 'Премести во...';\r
+$labels['download'] = 'сними';\r
+$labels['filename'] = 'Име на датотеката';\r
+$labels['filesize'] = 'Големина на датотеката';\r
+$labels['preferhtml'] = 'Прикажи во HTML';\r
+$labels['htmlmessage'] = 'HTML Порака';\r
+$labels['prettydate'] = 'Убави дати';\r
+$labels['addtoaddressbook'] = 'Додади во именик';\r
+$labels['sun'] = 'Нед';\r
+$labels['mon'] = 'Пон';\r
+$labels['tue'] = 'Вто';\r
+$labels['wed'] = 'Сре';\r
+$labels['thu'] = 'Чет';\r
+$labels['fri'] = 'Пет';\r
+$labels['sat'] = 'Саб';\r
+$labels['sunday'] = 'Недела';\r
+$labels['monday'] = 'Понеделник';\r
+$labels['tuesday'] = 'Вторник';\r
+$labels['wednesday'] = 'Среда';\r
+$labels['thursday'] = 'Четврток';\r
+$labels['friday'] = 'Петок';\r
+$labels['saturday'] = 'Сабота';\r
+$labels['today'] = 'Денес';\r
+$labels['checkmail'] = 'Провери пошта';\r
+$labels['writenewmessage'] = 'Нова порака';\r
+$labels['replytomessage'] = 'Одговори на пораката';\r
+$labels['replytoallmessage'] = 'Одговори на сите';\r
+$labels['forwardmessage'] = 'Препрати ја пораката';\r
+$labels['deletemessage'] = 'Премести ја пораката во Корпа';\r
+$labels['movemessagetotrash'] = 'Премести ги пораките во Канта';\r
+$labels['printmessage'] = 'За печатење';\r
+$labels['previousmessage'] = 'Прикажи ја претходната порака';\r
+$labels['previousmessages'] = 'Прикажи ги претходните пораки';\r
+$labels['firstmessage'] = 'Прикажи ја првата порака';\r
+$labels['firstmessages'] = 'Прикажи ги првите пораки';\r
+$labels['nextmessage'] = 'Прикажи ја наредната порака';\r
+$labels['nextmessages'] = 'Прикажи ги следните пораки';\r
+$labels['lastmessage'] = 'Прикажи ја последната порака';\r
+$labels['lastmessages'] = 'Прикажи ги последните пораки';\r
+$labels['backtolist'] = 'Врати се во поштенското сандаче';\r
+$labels['viewsource'] = 'Покажи го изворот на пракање';\r
+$labels['markmessages'] = 'Обележи ги пораките';\r
+$labels['markread'] = 'Како прочитани';\r
+$labels['markunread'] = 'Како непрочитани';\r
+$labels['select'] = 'Одбележи';\r
+$labels['all'] = 'Сите';\r
+$labels['none'] = 'Никоја';\r
+$labels['unread'] = 'Непрочитани';\r
+$labels['compact'] = 'Уредно';\r
+$labels['empty'] = 'Испразни';\r
+$labels['purge'] = 'Чистење';\r
+$labels['quota'] = 'Искористен простор';\r
+$labels['unknown'] = 'непознато';\r
+$labels['unlimited'] = 'неограничено';\r
+$labels['quicksearch'] = 'Брзо претражување';\r
+$labels['resetsearch'] = 'Ново претражување';\r
+$labels['compose'] = 'Нова порака';\r
+$labels['savemessage'] = 'Снимај ја пораката во Непратени';\r
+$labels['sendmessage'] = 'Прати ја пораката';\r
+$labels['addattachment'] = 'Прикачи фајл';\r
+$labels['charset'] = 'Charset';\r
+$labels['editortype'] = 'Тип на едитор';\r
+$labels['returnreceipt'] = 'Врати ';\r
+$labels['checkspelling'] = 'Провери спелување';\r
+$labels['resumeediting'] = 'Продолжи со уредување';\r
+$labels['revertto'] = 'Обрати се на';\r
+$labels['attachments'] = 'Прикачено';\r
+$labels['upload'] = 'Прикачи';\r
+$labels['close'] = 'Затвори';\r
+$labels['low'] = 'Низок';\r
+$labels['lowest'] = 'Најнизок';\r
+$labels['normal'] = 'Нормален';\r
+$labels['high'] = 'Висок';\r
+$labels['highest'] = 'Највисок';\r
+$labels['nosubject'] = '(нема тема)';\r
+$labels['showimages'] = 'Прикажи ги сликите';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'Обичен текст';\r
+$labels['addcc'] = 'Додај Cc';\r
+$labels['addbcc'] = 'Додај Bcc';\r
+$labels['addreplyto'] = 'Додај Одговори-На';\r
+$labels['mdnrequest'] = 'Праќачот на оваа порака сака да добие известување кога ќе ја прочитате пораката. Дали сакате да го известите?';\r
+$labels['receiptread'] = 'Извести (читај)';\r
+$labels['yourmessage'] = 'Ова е известување за вашата порака';\r
+$labels['receiptnote'] = 'Забелешка: Ова известување само потврдува дека пораката која сте ја пратиле е отворена. Не е гаранција дека примачот ја прочитал или ја разбрал истата.';\r
+$labels['name'] = 'Прикажано име';\r
+$labels['firstname'] = 'Име';\r
+$labels['surname'] = 'Презиме';\r
+$labels['email'] = 'Е-маил';\r
+$labels['addcontact'] = 'Додади го контактот';\r
+$labels['editcontact'] = 'Промени го контактот';\r
+$labels['edit'] = 'Промени';\r
+$labels['cancel'] = 'Откажи';\r
+$labels['save'] = 'Сними';\r
+$labels['delete'] = 'Избриши';\r
+$labels['newcontact'] = 'Додади ново име';\r
+$labels['deletecontact'] = 'Избриши ги следните имиња';\r
+$labels['composeto'] = 'Напиши порака';\r
+$labels['contactsfromto'] = '$count имиња $from до $to';\r
+$labels['print'] = 'Испечати';\r
+$labels['export'] = 'Извади како';\r
+$labels['previouspage'] = 'Прикажи претходна страна';\r
+$labels['firstpage'] = 'Прикажи ја првата страна';\r
+$labels['nextpage'] = 'Прикажи ја следната страна';\r
+$labels['lastpage'] = 'Прикажи ја последната страна';\r
+$labels['groups'] = 'Групи';\r
+$labels['personaladrbook'] = 'Адреси';\r
+$labels['settingsfor'] = 'Подесувања за';\r
+$labels['preferences'] = 'Подесувања';\r
+$labels['userpreferences'] = 'Кориснички подесувања';\r
+$labels['editpreferences'] = 'Промени ги корисничките подесувања';\r
+$labels['identities'] = 'Идентитети';\r
+$labels['manageidentities'] = 'Организирај ги идентитетите за овој корисник';\r
+$labels['newidentity'] = 'Нов идентитет';\r
+$labels['newitem'] = 'Нов објект';\r
+$labels['edititem'] = 'Промени објект';\r
+$labels['setdefault'] = 'Одбери за основно';\r
+$labels['language'] = 'Јазик';\r
+$labels['timezone'] = 'Временска зона';\r
+$labels['pagesize'] = 'Редови прикажани на страна';\r
+$labels['signature'] = 'Потпис';\r
+$labels['dstactive'] = 'Промени на времето';\r
+$labels['htmleditor'] = 'Создади HTML порака';\r
+$labels['htmlsignature'] = 'HTML потпис';\r
+$labels['previewpane'] = 'Прикажи го претходниот панел';\r
+$labels['autosavedraft'] = 'Авоматски снимај во Непратени';\r
+$labels['everynminutes'] = 'секои $n минути';\r
+$labels['never'] = 'никогаш';\r
+$labels['folder'] = 'Папка';\r
+$labels['folders'] = 'Папки';\r
+$labels['foldername'] = 'Име на папката';\r
+$labels['subscribed'] = 'Претплатен';\r
+$labels['messagecount'] = 'Пораки';\r
+$labels['create'] = 'Креирај';\r
+$labels['createfolder'] = 'Креирај нова папка';\r
+$labels['rename'] = 'Преименувај';\r
+$labels['renamefolder'] = 'Преименувај ја папката';\r
+$labels['deletefolder'] = 'Избриши ја папката';\r
+$labels['managefolders'] = 'Организирање на папки';\r
+$labels['sortby'] = 'Уреди по';\r
+$labels['sortasc'] = 'Уреди по азбучен ред';\r
+$labels['sortdesc'] = 'Уреди опаѓачки';\r
+\r
?>
\ No newline at end of file
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | language/mk/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Ivan Mishev - mishevivan@gmail.com |
- +-----------------------------------------------------------------------+
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Неуспешна најава';
-$messages['cookiesdisabled'] = 'Вашиот прелистувач не прифаќа cookies';
-$messages['sessionerror'] = 'Сесијата е невалидна или е истечена';
-$messages['imaperror'] = 'Конектирањето со IMAP е неуспешно';
-$messages['nomessagesfound'] = 'Немате пораки во вашата пошта';
-$messages['loggedout'] = 'Успешно се одлогиравте. Благодариме!';
-$messages['mailboxempty'] = 'Поштенското сандаче е празно.';
-$messages['loading'] = 'Вчитувам...';
-$messages['loadingdata'] = 'Ги вчитувам податоците...';
-$messages['checkingmail'] = 'Проверување за нови пораки...';
-$messages['sendingmessage'] = 'Праќање на пораката...';
-$messages['messagesent'] = 'Пораката е успешно пратена';
-$messages['savingmessage'] = 'Пораката се снима...';
-$messages['messagesaved'] = 'Пораката е снимена во Непратени';
-$messages['successfullysaved'] = 'Успешно снимено';
-$messages['addedsuccessfully'] = 'Името е успешно додадено ви Именик';
-$messages['contactexists'] = 'Веќе постои име со зададената Е-маил адреса';
-$messages['blockedimages'] = 'За да се заштити вашата приватност, сликите во оваа порака не се прикажани.';
-$messages['encryptedmessage'] = 'Оваа порака е кодирана и неможе да се прикаже. Извинете!';
-$messages['nocontactsfound'] = 'Нема Имиња во Именикот.';
-$messages['contactnotfound'] = 'Бараното име не постои';
-$messages['sendingfailed'] = 'Пораката не е пратена';
-$messages['errorsaving'] = 'Грешка при снимањето';
-$messages['errormoving'] = 'Пораката неможе да се премести';
-$messages['errordeleting'] = 'Пораката неможе да се избрише';
-$messages['deletecontactconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) контакт(и)?';
-$messages['deletemessagesconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) порака(и)?';
-$messages['deletefolderconfirm'] = 'Дали сте сигурни дека сакате да ја избришете оваа папка?';
-$messages['purgefolderconfirm'] = 'Дали сте сигурни дека сакате да ги избршете сите пораки во оваа папка?';
-$messages['formincomplete'] = 'Имате изоставено непополнети информации';
-$messages['noemailwarning'] = 'Внесете валидна емаил адреса';
-$messages['nonamewarning'] = 'Внесете име';
-$messages['nopagesizewarning'] = 'Внесете ја големината на страната';
-$messages['norecipientwarning'] = 'Внесете барем еден примач';
-$messages['nosubjectwarning'] = 'Немате внесено „Наслов“. Дали сакате да внесете?';
-$messages['nobodywarning'] = 'Пораката нема текст во неа. Дали сакате да ја пратите?';
-$messages['notsentwarning'] = 'Пораката не е пратена. Дали сакате да ја откажете?';
-$messages['noldapserver'] = 'Изберете LDAP сервер за пребарување';
-$messages['nocontactsreturned'] = 'Не се најдени имиња';
-$messages['nosearchname'] = 'Внесете име или емаил адреса';
-$messages['searchsuccessful'] = '$nr пораки се најдени';
-$messages['searchnomatch'] = 'Претражувањето нема резлутати';
-$messages['searching'] = 'Пребарувам....';
-$messages['checking'] = 'Проверувам...';
-$messages['nospellerrors'] = 'Нема грешки во спелувањето';
-$messages['folderdeleted'] = 'Папката е успешно избришана';
-$messages['deletedsuccessfully'] = 'Успешно избришано';
-$messages['converting'] = 'Форматирањето на пораката е отстрането...';
-$messages['messageopenerror'] = 'Пораката неможе да се вчита од серверот';
-$messages['fileuploaderror'] = 'Прикачувањето е неуспешно';
-$messages['filesizeerror'] = 'Фајлот што се прикачува го изминува лимитот од $size';
-$messages['copysuccess'] = 'Успешно се копирани $nr имиња';
-$messages['copyerror'] = 'Неможе да се копираат адресите';
-$messages['sourceisreadonly'] = 'Изворот на оваа адреса неможе да се промени';
-$messages['errorsavingcontact'] = 'Името неможе да се сними';
-
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/mk/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Ivan Mishev - mishevivan@gmail.com |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'Неуспешна најава';\r
+$messages['cookiesdisabled'] = 'Вашиот прелистувач не прифаќа cookies';\r
+$messages['sessionerror'] = 'Сесијата е невалидна или е истечена';\r
+$messages['imaperror'] = 'Конектирањето со IMAP е неуспешно';\r
+$messages['nomessagesfound'] = 'Немате пораки во вашата пошта';\r
+$messages['loggedout'] = 'Успешно се одлогиравте. Благодариме!';\r
+$messages['mailboxempty'] = 'Поштенското сандаче е празно.';\r
+$messages['loading'] = 'Вчитувам...';\r
+$messages['loadingdata'] = 'Ги вчитувам податоците...';\r
+$messages['checkingmail'] = 'Проверување за нови пораки...';\r
+$messages['sendingmessage'] = 'Праќање на пораката...';\r
+$messages['messagesent'] = 'Пораката е успешно пратена';\r
+$messages['savingmessage'] = 'Пораката се снима...';\r
+$messages['messagesaved'] = 'Пораката е снимена во Непратени';\r
+$messages['successfullysaved'] = 'Успешно снимено';\r
+$messages['addedsuccessfully'] = 'Името е успешно додадено ви Именик';\r
+$messages['contactexists'] = 'Веќе постои име со зададената Е-маил адреса';\r
+$messages['blockedimages'] = 'За да се заштити вашата приватност, сликите во оваа порака не се прикажани.';\r
+$messages['encryptedmessage'] = 'Оваа порака е кодирана и неможе да се прикаже. Извинете!';\r
+$messages['nocontactsfound'] = 'Нема Имиња во Именикот.';\r
+$messages['contactnotfound'] = 'Бараното име не постои';\r
+$messages['sendingfailed'] = 'Пораката не е пратена';\r
+$messages['errorsaving'] = 'Грешка при снимањето';\r
+$messages['errormoving'] = 'Пораката неможе да се премести';\r
+$messages['errordeleting'] = 'Пораката неможе да се избрише';\r
+$messages['deletecontactconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) контакт(и)?';\r
+$messages['deletemessagesconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) порака(и)?';\r
+$messages['deletefolderconfirm'] = 'Дали сте сигурни дека сакате да ја избришете оваа папка?';\r
+$messages['purgefolderconfirm'] = 'Дали сте сигурни дека сакате да ги избршете сите пораки во оваа папка?';\r
+$messages['formincomplete'] = 'Имате изоставено непополнети информации';\r
+$messages['noemailwarning'] = 'Внесете валидна емаил адреса';\r
+$messages['nonamewarning'] = 'Внесете име';\r
+$messages['nopagesizewarning'] = 'Внесете ја големината на страната';\r
+$messages['norecipientwarning'] = 'Внесете барем еден примач';\r
+$messages['nosubjectwarning'] = 'Немате внесено „Наслов“. Дали сакате да внесете?';\r
+$messages['nobodywarning'] = 'Пораката нема текст во неа. Дали сакате да ја пратите?';\r
+$messages['notsentwarning'] = 'Пораката не е пратена. Дали сакате да ја откажете?';\r
+$messages['noldapserver'] = 'Изберете LDAP сервер за пребарување';\r
+$messages['nocontactsreturned'] = 'Не се најдени имиња';\r
+$messages['nosearchname'] = 'Внесете име или емаил адреса';\r
+$messages['searchsuccessful'] = '$nr пораки се најдени';\r
+$messages['searchnomatch'] = 'Претражувањето нема резлутати';\r
+$messages['searching'] = 'Пребарувам....';\r
+$messages['checking'] = 'Проверувам...';\r
+$messages['nospellerrors'] = 'Нема грешки во спелувањето';\r
+$messages['folderdeleted'] = 'Папката е успешно избришана';\r
+$messages['deletedsuccessfully'] = 'Успешно избришано';\r
+$messages['converting'] = 'Форматирањето на пораката е отстрането...';\r
+$messages['messageopenerror'] = 'Пораката неможе да се вчита од серверот';\r
+$messages['fileuploaderror'] = 'Прикачувањето е неуспешно';\r
+$messages['filesizeerror'] = 'Датотеката што се прикачува го изминува лимитот од $size';\r
+$messages['copysuccess'] = 'Успешно се копирани $nr имиња';\r
+$messages['copyerror'] = 'Неможе да се копираат адресите';\r
+$messages['sourceisreadonly'] = 'Изворот на оваа адреса неможе да се промени';\r
+$messages['errorsavingcontact'] = 'Името неможе да се сними';\r
+$messages['movingmessage'] = 'Пораката се преместува...';\r
+$messages['receiptsent'] = 'Известувањето е успешно пратено';\r
+$messages['errorsendingreceipt'] = 'Известувањето не е пратено';\r
+$messages['nodeletelastidentity'] = 'Овој идентитет неможе да се избрише, тој е последниот.';\r
+$messages['addsubfolderhint'] = 'Оваа папка ќе биде креирана како под-папка на селектираната.';\r
+\r
?>
\ No newline at end of file
| language/ms_MY/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
/*
+-----------------------------------------------------------------------+
- | language/ms_MY/messages.inc |
+ | language/ms_MY/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| language/nb_NO/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | All rights reserved. |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Kjetil Waage - Nextline AS <kjetil@nextline.no> |
+ | Author: Tor Erik Linnerud - JKLM <tel@jklm.no> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 553 2007-05-13 16:31:19Z thomasb $
+ @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $
*/
$labels['addressbook'] = 'Adressebok';
$labels['inbox'] = 'Innboks';
$labels['drafts'] = 'Kladder';
-$labels['sent'] = 'Sendt post';
+$labels['sent'] = 'Sendt';
$labels['trash'] = 'Søppel';
-$labels['junk'] = 'Junk';
+$labels['junk'] = 'Spam';
$labels['subject'] = 'Emne';
$labels['from'] = 'Avsender';
$labels['to'] = 'Mottaker';
$labels['filename'] = 'Filnavn';
$labels['filesize'] = 'Filstørrelse';
$labels['preferhtml'] = 'Foretrekk HTML';
-$labels['htmlmessage'] = 'HTML besked';
+$labels['htmlmessage'] = 'HTML-beskjed';
$labels['prettydate'] = 'Pen datovisning';
$labels['addtoaddressbook'] = 'Tilføy til adresseboken';
$labels['sun'] = 'Søn';
$labels['today'] = 'I dag';
$labels['checkmail'] = 'Sjekk for nye beskjeder';
$labels['writenewmessage'] = 'Opprett en ny e-post';
-$labels['replytomessage'] = 'Svar på denne e-post';
+$labels['replytomessage'] = 'Svar på denne e-posten';
$labels['replytoallmessage'] = 'Svar til alle mottakere';
-$labels['forwardmessage'] = 'Videresend denne e-post';
-$labels['deletemessage'] = 'Flytt e-posten til søppel';
-$labels['printmessage'] = 'Skriv ut denne e-post';
+$labels['forwardmessage'] = 'Videresend denne e-posten';
+$labels['deletemessage'] = 'Slett e-posten';
+$labels['movemessagetotrash'] = 'Flytt e-posten til søppel';
+$labels['printmessage'] = 'Skriv ut denne e-posten';
$labels['previousmessage'] = 'Vis forrige melding';
$labels['previousmessages'] = 'Vis forrige side';
-$labels['firstmessage'] = 'Vis første meldingen';
+$labels['firstmessage'] = 'Vis første melding';
$labels['firstmessages'] = 'Vis første side med meldinger';
$labels['nextmessage'] = 'Vis neste melding';
$labels['nextmessages'] = 'Vis neste side';
$labels['lastmessages'] = 'Vis siste side med meldinger';
$labels['backtolist'] = 'Tilbake til e-postlisten';
$labels['viewsource'] = 'Vis kilde';
+$labels['markmessages'] = 'Merk e-postene';
+$labels['markread'] = 'som lest';
+$labels['markunread'] = 'som ulest';
$labels['select'] = 'Velg';
$labels['all'] = 'Alle';
$labels['none'] = 'Ingen';
$labels['compact'] = 'Rydd opp';
$labels['empty'] = 'Tøm';
$labels['purge'] = 'Tøm';
-$labels['quota'] = 'Disk forbruk';
+$labels['quota'] = 'Plassforbruk';
$labels['unknown'] = 'ukjent';
$labels['unlimited'] = 'ubegrenset';
$labels['quicksearch'] = 'Hurtigsøk';
$labels['resetsearch'] = 'Nullstill søk';
-$labels['compose'] = 'Lag ny e-post';
-$labels['sendmessage'] = 'Send e-posten';
+$labels['compose'] = 'Skriv ny e-post';
$labels['savemessage'] = 'Lagre kladd';
+$labels['sendmessage'] = 'Send e-posten';
$labels['addattachment'] = 'Vedlegg';
$labels['charset'] = 'Tegnsett';
$labels['editortype'] = 'Format';
$labels['normal'] = 'Normal';
$labels['high'] = 'Høy';
$labels['highest'] = 'Høyest';
-$labels['nosubject'] = '(ingen emne)';
+$labels['nosubject'] = '(intet emne)';
$labels['showimages'] = 'Vis bilder';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Ren tekst';
-$labels['name'] = 'Vist navn';
+$labels['addcc'] = 'Legg til Cc';
+$labels['addbcc'] = 'Legg til Bcc';
+$labels['addreplyto'] = 'Legg til Reply-To';
+$labels['mdnrequest'] = 'Senderen av denne meldingen har bedt om å bli gjort oppmerksom på at denne meldingen er lest. Ønsker du å sende denne bekreftelsen?';
+$labels['receiptread'] = 'Kvittering (lest)';
+$labels['yourmessage'] = 'Dette er en kvittering for at din e-post er mottatt';
+$labels['receiptnote'] = 'Merknad: Denne kvitteringen bekrefter bare at e-posten ble vist hos mottakeren. Det er ingen garanti for at mottakeren har lest eller forstått innholdet i e-posten.';
+$labels['name'] = 'Visningsnavn';
$labels['firstname'] = 'Fornavn';
$labels['surname'] = 'Etternavn';
$labels['email'] = 'E-post';
$labels['newidentity'] = 'Ny identitet';
$labels['newitem'] = 'Nytt punkt';
$labels['edititem'] = 'Rediger punkt';
-$labels['setdefault'] = 'Sett standard';
+$labels['setdefault'] = 'Sett som standard';
$labels['language'] = 'Språk';
$labels['timezone'] = 'Tidssone';
$labels['pagesize'] = 'Linjer per side';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommertid';
-$labels['htmleditor'] = 'Bruk HTML editor';
-$labels['htmlsignature'] = 'HTML signatur';
+$labels['htmleditor'] = 'Bruk HTML-editor';
+$labels['htmlsignature'] = 'HTML-signatur';
$labels['previewpane'] = 'Forhåndsvisning';
$labels['autosavedraft'] = 'Autolagring av utkast';
-$labels['everynminutes'] = 'Hver $n minutt';
+$labels['everynminutes'] = 'Hvert $n. minutt';
$labels['never'] = 'Aldri';
$labels['folder'] = 'Mappe';
$labels['folders'] = 'Mapper';
$labels['foldername'] = 'Mappenavn';
$labels['subscribed'] = 'Abonnere';
+$labels['messagecount'] = 'Meldinger';
$labels['create'] = 'Opprett';
$labels['createfolder'] = 'Lag ny mappe';
$labels['rename'] = 'Endre navn';
| language/nb_NO/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | All rights reserved. |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Kjetil Waage - Nextline AS <kjetil@nextline.no> |
+ | Author: Tor Erik Linnerud - JKLM <tel@jklm.no> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 553 2007-05-13 16:31:19Z thomasb $
+ @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $
*/
$messages = array();
-$messages['loginfailed'] = 'Mislykket pålogging';
+$messages['loginfailed'] = 'Pålogging mislyktes';
$messages['cookiesdisabled'] = 'Din nettleser aksepterer ikke cookies';
$messages['sessionerror'] = 'Din session er ugyldig eller utløpt';
$messages['imaperror'] = 'Forbindelsen til IMAP serveren sviktet';
-$messages['nomessagesfound'] = 'Det ble ikke funnet noen beskjeder i denne postkassen';
+$messages['nomessagesfound'] = 'Det ble ikke funnet noen beskjeder i denne innboksen';
$messages['loggedout'] = 'Du er logget av webmail. Ha det bra!';
$messages['mailboxempty'] = 'Postkassen er tom!';
$messages['loading'] = 'Laster...';
$messages['messagesaved'] = 'Beskjed er lagret i "kladder" mappen';
$messages['successfullysaved'] = 'Lagret';
$messages['addedsuccessfully'] = 'Kontakten ble tilføyd i adresseboken';
-$messages['contactexists'] = 'Der er allerede en kontakt med denne e-post adressen';
+$messages['contactexists'] = 'Der er allerede en kontakt med denne e-postadressen';
$messages['blockedimages'] = 'Bilder fra eksterne servere er blokkert i denne e-posten.';
$messages['encryptedmessage'] = 'Dette er en krypteret beskjed og kan ikke vises. Beklager!';
$messages['nocontactsfound'] = 'Ingen kontakter ble funnet';
$messages['errormoving'] = 'Kunne ikke flytte beskjeden';
$messages['errordeleting'] = 'Kunne ikke slette beskjeden';
$messages['deletecontactconfirm'] = 'Vil du virkelig slette valgte kontakt(er)?';
-$messages['deletemessagesconfirm'] = 'Vil du virkelig slette valgte meldingen(e)?';
+$messages['deletemessagesconfirm'] = 'Vil du virkelig slette de valgte meldingen(e)?';
$messages['deletefolderconfirm'] = 'Vil du virkelig slette denne mappen?';
$messages['purgefolderconfirm'] = 'Vil du virkelig slette alle meldingene i denne mappen?';
$messages['formincomplete'] = 'Skjemaet var ikke fullstendig fylt ut';
$messages['notsentwarning'] = 'E-posten ble ikke sendt. Vil du slette meldingen?';
$messages['noldapserver'] = 'Venligst velg hvilken LDAP server det skal søkes i';
$messages['nocontactsreturned'] = 'Ingen kontakter ble funnet';
-$messages['nosearchname'] = 'Venligst skriv inn kontaktens navn eller e-post adresse';
+$messages['nosearchname'] = 'Venligst skriv inn kontaktens navn eller e-postadresse';
$messages['searchsuccessful'] = '$nr meldinger funnet';
$messages['searchnomatch'] = 'Søket ga ingen resultater';
$messages['searching'] = 'Søker...';
$messages['copyerror'] = 'Kunne ikke kopiere';
$messages['sourceisreadonly'] = 'Denne adressekilden er skrivebeskyttet';
$messages['errorsavingcontact'] = 'Kunne ikke lagre adressen';
+$messages['movingmessage'] = 'Flytter e-post...';
+$messages['receiptsent'] = 'Kvittering har blitt sent';
+$messages['errorsendingreceipt'] = 'Kunne ikke sende kvittering';
+$messages['nodeletelastidentity'] = 'Du kan ikke slette denne identiteten, det er din siste.';
+$messages['addsubfolderhint'] = 'Mappen vil bli opprettet som en undermappe av den nåværende valgte mappe';
?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | localization/ne/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2007, RoundQube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Nepali Translation by: |\r
+ | Prasanna Singh <prasanna@bhunet.com>, <prasanna@bhunet.com> |\r
+ | RoundCubeAuthor: Thomas Bruederli <roundcube@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = '$product मा स्वागत छ';\r
+$labels['username'] = 'युसरनेम';\r
+$labels['password'] = 'पासवर्ड';\r
+$labels['server'] = 'सर्भर';\r
+$labels['login'] = 'लगईन';\r
+$labels['logout'] = 'लगआउट';\r
+$labels['mail'] = 'ई-मेल';\r
+$labels['settings'] = 'व्यक्तिगत रोजाईहरु';\r
+$labels['addressbook'] = 'ठेगाना किताब';\r
+$labels['inbox'] = 'इनबक्स';\r
+$labels['drafts'] = 'ड्राफ्ट';\r
+$labels['sent'] = 'पठईएका मेलहरु';\r
+$labels['trash'] = 'रद्दी टोकरी';\r
+$labels['junk'] = 'स्पाम';\r
+$labels['subject'] = 'विषय';\r
+$labels['from'] = 'प्रेषक';\r
+$labels['to'] = 'प्रापक';\r
+$labels['cc'] = 'कार्बन कपि';\r
+$labels['bcc'] = 'अंधो कार्बन कपि';\r
+$labels['replyto'] = 'पुन: जवाब';\r
+$labels['date'] = 'तारिख';\r
+$labels['size'] = 'नाप';\r
+$labels['priority'] = 'मेलको प्राथमिकता';\r
+$labels['organization'] = 'संस्था';\r
+$labels['reply-to'] = 'पुन: जवाब';\r
+$labels['mailboxlist'] = 'फोलडर';\r
+$labels['messagesfromto'] = 'मेलहरु $from बाट $to सम्म, $count मध्यबाट';\r
+$labels['messagenrof'] = '$nr नम्बर मेल, $count मध्यबाट';\r
+$labels['moveto'] = 'सार्नुहोस...';\r
+$labels['download'] = 'डाऊनलोड';\r
+$labels['filename'] = 'फाईलको नाम';\r
+$labels['filesize'] = 'फाईलको नाप';\r
+$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) देखाउनुहोस';\r
+$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूपका मेल';\r
+$labels['prettydate'] = 'सुन्दर तारिख';\r
+$labels['addtoaddressbook'] = 'ठेगाना पुस्तिकामा जोड्नुहोस';\r
+$labels['sun'] = 'आइत';\r
+$labels['mon'] = 'सोम';\r
+$labels['tue'] = 'मंगल';\r
+$labels['wed'] = 'बुध';\r
+$labels['thu'] = 'विहि';\r
+$labels['fri'] = 'शुक';\r
+$labels['sat'] = 'शनि';\r
+$labels['sunday'] = 'आइतवार';\r
+$labels['monday'] = 'सोमवार';\r
+$labels['tuesday'] = 'मंगलवार';\r
+$labels['wednesday'] = 'बुधवार';\r
+$labels['thursday'] = 'विहिवार';\r
+$labels['friday'] = 'शुक्रवार';\r
+$labels['saturday'] = 'शनिवार';\r
+$labels['today'] = 'आज';\r
+$labels['checkmail'] = 'नया मेल खोज्नुहोस';\r
+$labels['writenewmessage'] = 'नया मेल लेखनुहोस';\r
+$labels['replytomessage'] = 'मेलको जवाफ दिनुहोस';\r
+$labels['replytoallmessage'] = 'प्रेषक लगायत सबैलाई जवाफ दिनुहोस';\r
+$labels['forwardmessage'] = 'मेल अगाडि पठाउनुहोस';\r
+$labels['deletemessage'] = 'रद्दी टोकरीमा सार्नुहोस';\r
+$labels['printmessage'] = 'मेल छाप्नुहोस';\r
+$labels['previousmessage'] = 'पछाडिको मेल देखाउनुहोस';\r
+$labels['previousmessages'] = 'पछाडिको मेलका सेटहरु देखाउनुहोस';\r
+$labels['firstmessage'] = 'पहलो मेल देखाउनुहोस';\r
+$labels['firstmessages'] = 'पहलो मेलका सेटहरु देखाउनुहोस';\r
+$labels['nextmessage'] = 'अगाडिको मेल देखाउनुहोस';\r
+$labels['nextmessages'] = 'अगाडिको मेलका सेटहरु देखाउनुहोस';\r
+$labels['lastmessage'] = 'अन्तिम मेल देखाउनुहोस';\r
+$labels['lastmessages'] = 'अन्तिम मेलका सेटहरु देखाउनुहोस';\r
+$labels['backtolist'] = 'मेल सूची देखाउनुहोस';\r
+$labels['viewsource'] = 'श्रोत देखाउनुहोस';\r
+$labels['select'] = 'चुन्नुहोस';\r
+$labels['all'] = 'सबै |';\r
+$labels['none'] = 'हैन';\r
+$labels['unread'] = 'नपढिएका |';\r
+$labels['compact'] = 'छोटो गर्नुहोस';\r
+$labels['empty'] = 'खाली गर्ने';\r
+$labels['purge'] = 'नाम निशाना मेटाउनुहोस';\r
+$labels['quota'] = 'डिस्कको उपभोग';\r
+$labels['unknown'] = 'अज्ञात';\r
+$labels['unlimited'] = 'अनगिन्ति';\r
+$labels['quicksearch'] = 'स्फुर्ति खोज';\r
+$labels['resetsearch'] = 'पन: खोज';\r
+$labels['compose'] = 'मेल लखन गर्नुहोस';\r
+$labels['sendmessage'] = 'तुरुन्तै मेल पठाउनुहोस';\r
+$labels['savemessage'] = 'ड्राफ्ट जोगाउनुहोस';\r
+$labels['addattachment'] = 'फाइल टाँस्नुहोस';\r
+$labels['charset'] = 'क्यारेक्टर सेट';\r
+$labels['editortype'] = 'सम्पादकको प्रकार';\r
+$labels['returnreceipt'] = 'फिर्ति रसीद';\r
+$labels['checkspelling'] = 'हिज्जे जाँच';\r
+$labels['resumeediting'] = 'पुन: सम्पादन गर्नुहोस';\r
+$labels['revertto'] = 'पहिलेको स्थितीमा जानुहोस';\r
+$labels['attachments'] = 'टाँसिएका फाईलहरु';\r
+$labels['upload'] = 'अपलोड';\r
+$labels['close'] = 'बन्द';\r
+$labels['low'] = 'कम';\r
+$labels['lowest'] = 'सबै भन्दा कम';\r
+$labels['normal'] = 'साधारण';\r
+$labels['high'] = 'उच्च';\r
+$labels['highest'] = 'उच्चतम';\r
+$labels['nosubject'] = '(बिना विषयको)';\r
+$labels['showimages'] = 'चित्र देखाउनुहोस';\r
+$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';\r
+$labels['plaintoggle'] = 'सादा अक्षर';\r
+$labels['name'] = 'देखाउने नाम';\r
+$labels['firstname'] = 'पहिलो नाम';\r
+$labels['surname'] = 'थर';\r
+$labels['email'] = 'ई-मेल';\r
+$labels['addcontact'] = 'नया सम्पर्क जोड्नुहोस';\r
+$labels['editcontact'] = 'सम्पर्क सच्याउनुहोस';\r
+$labels['edit'] = 'सच्याउनुहोस';\r
+$labels['cancel'] = 'खारेज गर्नुहोस';\r
+$labels['save'] = 'जोगाउनुहोस';\r
+$labels['delete'] = 'मेटाउनुहोस';\r
+$labels['newcontact'] = 'नया सम्पर्क कार्ड बनाउनुहोस';\r
+$labels['deletecontact'] = 'छानिएका सम्पर्कहरु मेटाउनुहोस';\r
+$labels['composeto'] = 'मेल लेखी पठाउनुहोस';\r
+$labels['contactsfromto'] = 'सम्पर्कहरु $from बाट $to सम्म, $count मध्यबाट';\r
+$labels['print'] = 'छाप्नुहोस';\r
+$labels['export'] = 'ऐक्स्पोर्ट गर्नुहोस';\r
+$labels['previouspage'] = 'पहिलेको सेट देखाउनुहोस';\r
+$labels['firstpage'] = 'पहिलो सेट देखाउनुहोस';\r
+$labels['nextpage'] = 'अर्को सेट देखाउनुहोस';\r
+$labels['lastpage'] = 'अन्तिम सेट देखाउनुहोस';\r
+$labels['groups'] = 'समूहहरु';\r
+$labels['personaladrbook'] = 'व्यक्तिगत ठेगानाहरु';\r
+$labels['settingsfor'] = 'तय';\r
+$labels['preferences'] = 'रोजाइहरु';\r
+$labels['userpreferences'] = 'यूसरका रोजाइहरु';\r
+$labels['editpreferences'] = 'यूसरका रोजाइहर सम्पादन गर्नुहोस';\r
+$labels['identities'] = 'पहिचानहरु';\r
+$labels['manageidentities'] = 'यो खाताको पहिचानहरको व्यवस्था गर्नुहोस';\r
+$labels['newidentity'] = 'नया पहिचान';\r
+$labels['newitem'] = 'नया प्रकार';\r
+$labels['edititem'] = 'प्रकार सम्पादन गर्नुहोस';\r
+$labels['setdefault'] = 'तय गर्नुहोस';\r
+$labels['language'] = 'भाषा';\r
+$labels['timezone'] = 'समय क्षेत्र';\r
+$labels['pagesize'] = 'हरेक पन्नामा यति';\r
+$labels['signature'] = 'हस्ताक्षर';\r
+$labels['dstactive'] = 'प्रकाश बचाव';\r
+$labels['htmleditor'] = 'ऐच-टी-ऐम-एल (HTML) मेल लखन गर्नुहोस';\r
+$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) हस्ताक्षर';\r
+$labels['previewpane'] = 'पूर्व दृष्य देखाउनुहोस';\r
+$labels['autosavedraft'] = 'स्वत ड्राफ्ट जोगाउनुहोस';\r
+$labels['everynminutes'] = 'प्रत्येक $n मिनटमा';\r
+$labels['never'] = 'काहिलै नहुने';\r
+$labels['folder'] = 'फोल्डर';\r
+$labels['folders'] = 'फोल्डरहरु';\r
+$labels['foldername'] = 'फोल्डरको नाम';\r
+$labels['subscribed'] = 'सबस्क्राईब गरियो';\r
+$labels['create'] = 'बनाउनुहोस';\r
+$labels['createfolder'] = 'नया फोलडर बनाउनुहोस';\r
+$labels['rename'] = 'नाम बदल्नुहोस';\r
+$labels['renamefolder'] = 'फोलडरको नाम बदल्नुहोस';\r
+$labels['deletefolder'] = 'फोलडर मेट्नुहोस';\r
+$labels['managefolders'] = 'फोलडर व्यवस्थित गर्नुहोस';\r
+$labels['sortby'] = 'यसरी तय गर्नुहोस';\r
+$labels['sortasc'] = 'पहिलो देखि अन्तिम सम्म तय गर्नुहोस';\r
+$labels['sortdesc'] = 'अन्तिम देखि पहिलो सम्म तय गर्नुहोस';\r
+\r
+?>\r
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | localization/ne/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2007, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Nepali Translation by: |\r
+ | Prasanna Singh <prasanna@bhunet.com>, <prasanna@bhunet.com> |\r
+ | RoundCubeAuthor: Thomas Bruederli <roundcube@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'लागईन हुन पाएन';\r
+$messages['cookiesdisabled'] = 'तपाईको ब्राऊसरले कुकी स्वीकार गारिरहेको छैन';\r
+$messages['sessionerror'] = 'सत्र समाप्त वा अवैद्य';\r
+$messages['imaperror'] = 'सर्वर संग सम्पर्क हुन पाएन';\r
+$messages['nomessagesfound'] = 'यो मेलबक्स मा कुनै मेल छैन';\r
+$messages['loggedout'] = 'सत्र समाप्त । नमास्कार!';\r
+$messages['mailboxempty'] = 'मेल बक्स खाली छ';\r
+$messages['loading'] = 'लोड भईरहेको छ...';\r
+$messages['loadingdata'] = 'डाटा लोड भईरहेको छै...';\r
+$messages['checkingmail'] = 'नया मेलको खोजी भईरहेको छ...';\r
+$messages['sendingmessage'] = 'मेल पठाईदै रहेको छ...';\r
+$messages['messagesent'] = 'मेल सफल्तापूर्वक पठाईयो';\r
+$messages['savingmessage'] = 'मेल जोगाईदै छ...';\r
+$messages['messagesaved'] = 'मेल ड्राफ्ट फोल्डरमा जोगाईयो';\r
+$messages['successfullysaved'] = 'सफल्तापूर्वक जोगाईयो';\r
+$messages['addedsuccessfully'] = 'सम्पर्क पुस्तिकामा सफल्तापूर्वक सम्पर्क प्रविष्ट गारियो';\r
+$messages['contactexists'] = 'यो ई-मेल पहिलै लिईसकिएको छ';\r
+$messages['blockedimages'] = 'तपाईको प्राईवेसी को लागि तथा अन्य स्पामबाट बच्नकोलागि यो मेलमा चित्रहुरु देखाईएका छैनन्।';\r
+$messages['encryptedmessage'] = 'माफ गर्नुहोसे, यो मेल ईन्क्रिफ्ट गरिएको रूपमा छ, त्यसैले देखाउन सकिदैन!';\r
+$messages['nocontactsfound'] = 'कुनै सम्पर्क भेटिएन';\r
+$messages['contactnotfound'] = 'अनुरोध गारिएको सम्पर्क भेटिएन';\r
+$messages['sendingfailed'] = 'मेल पठाउन सकिएन';\r
+$messages['errorsaving'] = 'जोगाउदा-जोगाउदै गडबड भायो';\r
+$messages['errormoving'] = 'मेल सार्न सकिएन';\r
+$messages['errordeleting'] = 'मेल मेटाउन सकिएन';\r
+$messages['deletecontactconfirm'] = 'तापाईले छान्नुभएको सम्पर्कहरु, साँचै मेट्न चहानुहुन्छ?';\r
+$messages['deletemessagesconfirm'] = 'तापाईले छान्नु भएको मेलहरु, साँचै मेट्न चहानुहुन्छ?';\r
+$messages['deletefolderconfirm'] = 'तापाईले साँचै यो फोल्डर मेट्न चहानु हुन्छ?';\r
+$messages['purgefolderconfirm'] = 'तापाईले साँचै यो फोल्डरमा भएका सबै मेलहरु मेट्न चहानुहुन्छ?';\r
+$messages['formincomplete'] = 'फर्म पूर्ण रुपमा भरिएको छैन';\r
+$messages['noemailwarning'] = 'कृपया वैद्य ई-मेल भर्नुहोस';\r
+$messages['nonamewarning'] = 'कृपया नाम भर्नुहोस';\r
+$messages['nopagesizewarning'] = 'कृपया पन्नाको नाप भर्नुहोस';\r
+$messages['norecipientwarning'] = 'कृपया कम-से-कम एउटा प्रापकको विवरण भर्नुहोस';\r
+$messages['nosubjectwarning'] = 'मेलको कुनै विषय तोकिएको छैनै। केहि तोक्न चहानुहुन्छ ?';\r
+$messages['nobodywarning'] = 'बिना केहि लेखि पठाउने?';\r
+$messages['notsentwarning'] = 'मेल पठएको छैन.. मेल रद्द गर्न चहानुहुन्छ?';\r
+$messages['noldapserver'] = 'कृपया खोजको निम्ति एउटा ऐलडाप सर्वर छान्नहोस';\r
+$messages['nocontactsreturned'] = 'कुनै सम्पर्क फेला परेनन्';\r
+$messages['nosearchname'] = 'कृपया सम्पर्कको नाम या ई-मेल भर्नुहोस';\r
+$messages['searchsuccessful'] = '$nr मेलहरु पाइयो';\r
+$messages['searchnomatch'] = 'खोज असफल रहयो';\r
+$messages['searching'] = 'खोजि भईरहेको छ...';\r
+$messages['checking'] = 'जाँच भईरहेको छ...';\r
+$messages['nospellerrors'] = 'कुनै गलत हिज्जे फेला परेनन्';\r
+$messages['folderdeleted'] = 'फोल्डर सफल्तापूर्वक मेटियो';\r
+$messages['deletedsuccessfully'] = 'सफल्तापूर्वक मेटियो';\r
+$messages['converting'] = 'मेलबाट फोर्माटिङ हटाईदै छ...';\r
+$messages['messageopenerror'] = 'सर्वरबाट मेल लोड हुन सकेन';\r
+$messages['fileuploaderror'] = 'फाईल अपलोड हुन असफल';\r
+$messages['filesizeerror'] = 'अपलोड गरिएको फाईल हद $size भन्दा ठूलो छ';\r
+$messages['copysuccess'] = 'सफल्तापूर्वक $nr ठेगानाहरु उतारियो';\r
+$messages['copyerror'] = 'कुनै पनि ठेगानाहरु उतार्न सकिएन';\r
+$messages['sourceisreadonly'] = 'यो ठेगाना को श्रोत पढ्नको लागि मात्र उपलब्ध छ';\r
+$messages['errorsavingcontact'] = 'स्मपर्कको ठेगाना जोगाउन सकिएन';\r
+\r
+?>\r
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/nl_BE/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Dennis Heeren <dennis.heeren@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1108 2008-02-17 20:08:44Z thomasb $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Welkom bij $product';
+$labels['username'] = 'Gebruikersnaam';
+$labels['password'] = 'Wachtwoord';
+$labels['server'] = 'Server';
+$labels['login'] = 'Aanmelden';
+$labels['logout'] = 'Afmelden';
+$labels['mail'] = 'Berichten';
+$labels['settings'] = 'Instellingen';
+$labels['addressbook'] = 'Contactpersonen';
+$labels['inbox'] = 'Postvak IN';
+$labels['drafts'] = 'Concepten';
+$labels['sent'] = 'Verzonden berichten';
+$labels['trash'] = 'Prullenbak';
+$labels['junk'] = 'Spam';
+$labels['subject'] = 'Onderwerp';
+$labels['from'] = 'Van';
+$labels['to'] = 'Aan';
+$labels['cc'] = 'Cc';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Antwoorden aan';
+$labels['date'] = 'Datum';
+$labels['size'] = 'Grootte';
+$labels['priority'] = 'Prioriteit';
+$labels['organization'] = 'Organisatie';
+$labels['reply-to'] = 'Antwoorden aan';
+$labels['mailboxlist'] = 'Mappen';
+$labels['messagesfromto'] = 'Berichten $from - $to van $count';
+$labels['messagenrof'] = 'Bericht $nr van $count';
+$labels['moveto'] = 'verplaats naar...';
+$labels['download'] = 'downloaden';
+$labels['filename'] = 'Bestandsnaam';
+$labels['filesize'] = 'Bestandsgrootte';
+$labels['preferhtml'] = 'Gebruik HTML-opmaak';
+$labels['htmlmessage'] = 'HTML-bericht';
+$labels['prettydate'] = 'Uitgebreide datumweergave';
+$labels['addtoaddressbook'] = 'Voeg toe aan lijst met contactpersonen';
+$labels['sun'] = 'Zo';
+$labels['mon'] = 'Ma';
+$labels['tue'] = 'Di';
+$labels['wed'] = 'Wo';
+$labels['thu'] = 'Do';
+$labels['fri'] = 'Vr';
+$labels['sat'] = 'Za';
+$labels['sunday'] = 'Zondag';
+$labels['monday'] = 'Maandag';
+$labels['tuesday'] = 'Dinsdag';
+$labels['wednesday'] = 'Woensdag';
+$labels['thursday'] = 'Donderdag';
+$labels['friday'] = 'Vrijdag';
+$labels['saturday'] = 'Zaterdag';
+$labels['today'] = 'Vandaag';
+$labels['checkmail'] = 'Controleer op nieuwe berichten';
+$labels['writenewmessage'] = 'Nieuw bericht';
+$labels['replytomessage'] = 'Beantwoorden';
+$labels['replytoallmessage'] = 'Allen beantwoorden';
+$labels['forwardmessage'] = 'Doorsturen';
+$labels['deletemessage'] = 'Dit bericht verwijderen';
+$labels['movemessagetotrash'] = 'Verplaats bericht naar verwijderde items';
+$labels['printmessage'] = 'Afdrukken';
+$labels['previousmessage'] = 'Vorig bericht';
+$labels['previousmessages'] = 'Vorige berichten';
+$labels['firstmessage'] = 'Eerste bericht';
+$labels['firstmessages'] = 'Eerste berichten';
+$labels['nextmessage'] = 'Volgende bericht';
+$labels['nextmessages'] = 'Volgende berichten';
+$labels['lastmessage'] = 'Laatste bericht';
+$labels['lastmessages'] = 'Laatste berichten';
+$labels['backtolist'] = 'Terug naar berichtenlijst';
+$labels['viewsource'] = 'Broncode bericht weergeven';
+$labels['markmessages'] = 'Markeer berichten';
+$labels['markread'] = 'Als gelezen';
+$labels['markunread'] = 'Als ongelezen';
+$labels['select'] = 'Selecteren';
+$labels['all'] = 'Alles';
+$labels['none'] = 'Geen';
+$labels['unread'] = 'Ongelezen';
+$labels['compact'] = 'Comprimeren';
+$labels['empty'] = 'Legen';
+$labels['purge'] = 'Opruimen';
+$labels['quota'] = 'Gebruikte schijfruimte';
+$labels['unknown'] = 'onbekend';
+$labels['unlimited'] = 'ongelimiteerd';
+$labels['quicksearch'] = 'Snelzoeken';
+$labels['resetsearch'] = 'Zoek opnieuw';
+$labels['compose'] = 'Nieuw bericht opstellen';
+$labels['savemessage'] = 'Bewaar als concept';
+$labels['sendmessage'] = 'Verzenden';
+$labels['addattachment'] = 'Bestand toevoegen als bijlage';
+$labels['charset'] = 'Karakterset';
+$labels['editortype'] = 'Opmaak';
+$labels['returnreceipt'] = 'Ontvangstbevestiging';
+$labels['checkspelling'] = 'Controleer spelling';
+$labels['resumeediting'] = 'Hervat bewerken';
+$labels['revertto'] = 'Ongedaan maken';
+$labels['attachments'] = 'Bijlagen';
+$labels['upload'] = 'Toevoegen';
+$labels['close'] = 'Sluiten';
+$labels['low'] = 'Laag';
+$labels['lowest'] = 'Laagste';
+$labels['normal'] = 'Normaal';
+$labels['high'] = 'Hoog';
+$labels['highest'] = 'Hoogste';
+$labels['nosubject'] = '(geen onderwerp)';
+$labels['showimages'] = 'Toon afbeeldingen';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Platte tekst';
+$labels['addcc'] = 'Cc toevoegen';
+$labels['addbcc'] = 'Bcc toevoegen';
+$labels['addreplyto'] = 'Antwoorden aan toevoegen';
+$labels['mdnrequest'] = 'De afzender heeft een ontvangstbevestiging gevraagd. Wilt u deze versturen?';
+$labels['receiptread'] = 'Ontvangstbevestiging (gelezen)';
+$labels['yourmessage'] = 'Dir is een onvangstbevestiging voor uw bericht';
+$labels['receiptnote'] = 'Opmerking: deze ontvangstbevestiging houdt enkel in dat het bericht was weergegeven bij de ontvanger. Er is geen garantie dat de ontvanger het bericht daadwerkelijk heeft gelezen en/of begrepen.';
+$labels['name'] = 'Naam';
+$labels['firstname'] = 'Voornaam';
+$labels['surname'] = 'Achternaam';
+$labels['email'] = 'E-mailadres';
+$labels['addcontact'] = 'Geselecteerde contactpersoon toevoegen';
+$labels['editcontact'] = 'Contactpersoon bewerken';
+$labels['edit'] = 'Bewerken';
+$labels['cancel'] = 'Annuleren';
+$labels['save'] = 'Opslaan';
+$labels['delete'] = 'Verwijderen';
+$labels['newcontact'] = 'Contactpersoon toevoegen';
+$labels['deletecontact'] = 'Verwijder geselecteerde contactpersonen';
+$labels['composeto'] = 'Mail sturen aan';
+$labels['contactsfromto'] = 'Contactpersonen $from - $to van $count';
+$labels['print'] = 'Afdrukken';
+$labels['export'] = 'Exporteren';
+$labels['previouspage'] = 'Toon vorige';
+$labels['firstpage'] = 'Toon eerste';
+$labels['nextpage'] = 'Toon volgende';
+$labels['lastpage'] = 'Toon laatste';
+$labels['groups'] = 'Groepen';
+$labels['personaladrbook'] = 'Personlijke adressen';
+$labels['settingsfor'] = 'Instellingen voor';
+$labels['preferences'] = 'Voorkeuren';
+$labels['userpreferences'] = 'Gebruikersvoorkeuren';
+$labels['editpreferences'] = 'Gebruikersvoorkeuren bewerken';
+$labels['identities'] = 'Identiteiten';
+$labels['manageidentities'] = 'Beheer de identiteiten voor deze gebruiker';
+$labels['newidentity'] = 'Nieuwe identiteit';
+$labels['newitem'] = 'Nieuw';
+$labels['edititem'] = 'Bewerken';
+$labels['setdefault'] = 'Als standaard instellen';
+$labels['language'] = 'Taal';
+$labels['timezone'] = 'Tijdzone';
+$labels['pagesize'] = 'Berichten per pagina';
+$labels['signature'] = 'Handtekening';
+$labels['dstactive'] = 'Zomer/wintertijd';
+$labels['htmleditor'] = 'HTML berichten opmaken';
+$labels['htmlsignature'] = 'HTML handtekening';
+$labels['previewpane'] = 'Toon voorbeeldvenster';
+$labels['autosavedraft'] = 'Automatisch als concept opslaan';
+$labels['everynminutes'] = 'elke $n minuten';
+$labels['never'] = 'nooit';
+$labels['folder'] = 'Map';
+$labels['folders'] = 'Mappen';
+$labels['foldername'] = 'Naam';
+$labels['subscribed'] = 'Gebruiken';
+$labels['messagecount'] = 'Berichten';
+$labels['create'] = 'Aanmaken';
+$labels['createfolder'] = 'Nieuwe map aanmaken';
+$labels['rename'] = 'Hernoemen';
+$labels['renamefolder'] = 'Hernoem map';
+$labels['deletefolder'] = 'Map verwijderen';
+$labels['managefolders'] = 'Mappen beheren';
+$labels['sortby'] = 'Sorteren op';
+$labels['sortasc'] = 'Oplopend sorteren';
+$labels['sortdesc'] = 'Aflopend sorteren';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/nl_BE/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Dennis Heeren <dennis.heeren@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1108 2008-02-17 20:08:44Z thomasb $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Aanmelden mislukt...';
+$messages['cookiesdisabled'] = 'Uw browser accepteert geen cookies...';
+$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!';
+$messages['mailboxempty'] = 'Mailbox is leeg...';
+$messages['loading'] = 'Bezig met ophalen gegevens...';
+$messages['loadingdata'] = 'Bezig met gegevens ophalen...';
+$messages['checkingmail'] = 'Controleer op nieuwe berichten...';
+$messages['sendingmessage'] = 'Bericht wordt verstuurd...';
+$messages['messagesent'] = 'Het bericht is verzonden...';
+$messages['savingmessage'] = 'Bericht wordt bewaard...';
+$messages['messagesaved'] = 'Bericht bewaard in Concepten';
+$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['nocontactsfound'] = 'Geen contactpersonen gevonden...';
+$messages['contactnotfound'] = 'De gevraagde contactpersoon was niet gevonden';
+$messages['sendingfailed'] = 'Kon het bericht niet versturen...';
+$messages['errorsaving'] = 'Er is een fout opgetreden bij het opslaan van het bericht...';
+$messages['errormoving'] = 'Kon het bericht niet verplaatsen...';
+$messages['errordeleting'] = 'Kon het bericht niet verwijderen...';
+$messages['deletecontactconfirm'] = 'Bent u zeker dat u de geselecteerde contactpers(o)on(en) wilt verwijderen?';
+$messages['deletemessagesconfirm'] = 'Bent u zeker dat u de geselecteerde bericht(en) wilt verwijderen?';
+$messages['deletefolderconfirm'] = 'Weet u zeker dat u deze map wilt verwijderen?';
+$messages['purgefolderconfirm'] = 'Bent u zeker dat u alle berichten in deze map wilt verwijderen?';
+$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['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?';
+$messages['noldapserver'] = 'Kies een LDAP server waarop gezocht moet worden...';
+$messages['nocontactsreturned'] = 'Geen contactpersonen gevonden';
+$messages['nosearchname'] = 'Geen een contacpersoon of e-mailadres op...';
+$messages['searchsuccessful'] = '$nr berichten gevonden';
+$messages['searchnomatch'] = 'Zoekopdracht leverde geen resultaten';
+$messages['searching'] = 'Bezig met zoeken...';
+$messages['checking'] = 'Bezig met controleren...';
+$messages['nospellerrors'] = 'Geen spelfouten gevonden';
+$messages['folderdeleted'] = 'Mappen met succes verwijderd';
+$messages['deletedsuccessfully'] = 'Succesvol verwijderd';
+$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['sourceisreadonly'] = 'Het adres kan niet worden opgeslagen';
+$messages['errorsavingcontact'] = 'Kon de contactpersoon niet bewaren';
+$messages['movingmessage'] = 'Bericht wordt verplaatst...';
+$messages['receiptsent'] = 'Ontvangstbevestiging verstuurd';
+$messages['errorsendingreceipt'] = 'Kon de ontvangstbevestigign niet versturen';
+$messages['nodeletelastidentity'] = 'U kunt dit laatste afzendadres niet verwijderen.';
+$messages['addsubfolderhint'] = 'De map wordt aangemaakt als submap van de geselecteerde map.';
+
+?>
| language/nl_NL/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Mark Moses <mark@katmoda.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 844 2007-10-02 05:33:18Z tomekp $
+ @version $Id: labels.inc 1183 2008-03-04 22:10:15Z yllar $
*/
$labels['username'] = 'Gebruikersnaam';
$labels['password'] = 'Wachtwoord';
$labels['server'] = 'Server';
-$labels['login'] = 'Login';
+$labels['login'] = 'Inloggen';
$labels['logout'] = 'Uitloggen';
$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Persoonlijke Instellingen';
$labels['subject'] = 'Onderwerp';
$labels['from'] = 'Afzender';
$labels['to'] = 'Ontvanger';
-$labels['cc'] = 'kopie';
+$labels['cc'] = 'Kopie';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Antwoord-aan';
$labels['date'] = 'Datum';
$labels['lastmessages'] = 'Toon laatste lijst met berichten';
$labels['backtolist'] = 'Terug naar berichtenoverzicht';
$labels['viewsource'] = 'Toon bron';
+$labels['markmessages'] = 'Markeer berichten';
+$labels['markread'] = 'Gelezen';
+$labels['markunread'] = 'Ongelezen';
$labels['select'] = 'Selecteer';
$labels['all'] = 'Allemaal';
$labels['none'] = 'Geen';
$labels['savemessage'] = 'Bewaar als concept';
$labels['sendmessage'] = 'Verstuur het bericht nu';
$labels['addattachment'] = 'Voeg een bijlage toe';
-$labels['charset'] = 'karakterset';
+$labels['charset'] = 'Karakterset';
$labels['editortype'] = 'Opmaak';
$labels['returnreceipt'] = 'Ontvangstbevestiging';
$labels['checkspelling'] = 'Controleer spelling';
$labels['addcc'] = 'Kopie toevoegen';
$labels['addbcc'] = 'Bcc toevoegen';
$labels['addreplyto'] = 'Antwoord-aan toevoegen';
+$labels['mdnrequest'] = 'De afzender van dit bericht heeft gevraagd of er een melding kan worden verzonden als dit bericht is ontvangen. Wilt u de een melding verzenden?';
+$labels['receiptread'] = 'Ontvangstbevestiging (gelezen)';
+$labels['yourmessage'] = 'Dit is een ontvangstbevestiging voor uw bericht';
+$labels['receiptnote'] = 'Let op: Deze bevestigt alleen dat uw bericht bij de geaddresseerde is binnen gekomen. Er is geen garantie dat de geaddresseerde het bericht daadwerkelijk heeft gelezen of de inhoud heeft begrepen.';
$labels['name'] = 'Naam';
$labels['firstname'] = 'Voornaam';
$labels['surname'] = 'Achternaam';
$labels['folders'] = 'Mappen';
$labels['foldername'] = 'Mapnaam';
$labels['subscribed'] = 'Geabonneerd';
+$labels['messagecount'] = 'Berichten';
$labels['create'] = 'Nieuw';
$labels['createfolder'] = 'Maak nieuwe map';
$labels['rename'] = 'Wijzig naam';
$labels['sortasc'] = 'Sorteer oplopend';
$labels['sortdesc'] = 'Sorteer aflopend';
-?>
\ No newline at end of file
+?>
| language/nl_NL/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Mark Moses <mark@katmoda.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 844 2007-10-02 05:33:18Z tomekp $
+ @version $Id: messages.inc 1087 2008-02-15 07:49:48Z robin $
*/
$messages['sourceisreadonly'] = 'Het adres kan niet worden opgeslagen';
$messages['errorsavingcontact'] = 'Kan het ontvanger-adres niet opslaan';
$messages['movingmessage'] = 'Bericht verplaatsen...';
-
-?>
\ No newline at end of file
+$messages['receiptsent'] = 'Ontvangstbevestiging is verstuurd';
+$messages['errorsendingreceipt'] = 'Kan de ontvangstbevestiging niet versturen';
+$messages['nodeletelastidentity'] = 'U kunt dit afzenderadres niet verwijderen';
+$messages['addsubfolderhint'] = 'Deze map zal worden aangemaakt onder de geselecteerde map';
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/nn/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Per-Stian Vatne <psv@orsta.org> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = 'Welcome to Roundcube|Mail';
+$labels['username'] = 'Brukarnamn';
+$labels['password'] = 'Passord';
+$labels['server'] = 'Tenar';
+$labels['login'] = 'Logg inn';
+
+// taskbar
+$labels['logout'] = 'Logg ut';
+$labels['mail'] = 'E-post';
+$labels['settings'] = 'Personlege innstillingar';
+$labels['addressbook'] = 'Adressebok';
+
+// mailbox names
+$labels['inbox'] = 'Innboks';
+$labels['sent'] = 'Sende element';
+$labels['trash'] = 'Sletta element';
+$labels['drafts'] = 'Kladd';
+$labels['junk'] = 'Søppel';
+
+// message listing
+$labels['subject'] = 'Emne';
+$labels['from'] = 'Sendar';
+$labels['to'] = 'Mottakar';
+$labels['cc'] = 'Kopi';
+$labels['bcc'] = 'Blindkopi';
+$labels['replyto'] = 'Svar-til';
+$labels['date'] = 'Dato';
+$labels['size'] = 'Storleik';
+$labels['priority'] = 'Prioritet';
+$labels['organization'] = 'Organisasjon';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'Katalogar';
+$labels['messagesfromto'] = 'Meldingar $from til $to av $count';
+$labels['messagenrof'] = 'Melding $nr av $count';
+
+$labels['moveto'] = 'flytt til...';
+$labels['download'] = 'last ned';
+
+$labels['filename'] = 'Filnamn';
+$labels['filesize'] = 'Filstorleik';
+
+$labels['preferhtml'] = 'Føretrekk HTML';
+$labels['htmlmessage'] = 'HTML-melding';
+$labels['prettydate'] = 'Pene datoar';
+
+$labels['addtoaddressbook'] = 'Legg til i adressebok';
+
+// weekdays short
+$labels['sun'] = 'Sun';
+$labels['mon'] = 'Mån';
+$labels['tue'] = 'Tys';
+$labels['wed'] = 'Ons';
+$labels['thu'] = 'Tor';
+$labels['fri'] = 'Fre';
+$labels['sat'] = 'Lau';
+
+// weekdays long
+$labels['sunday'] = 'Sundag';
+$labels['monday'] = 'Måndag';
+$labels['tuesday'] = 'Tysdag';
+$labels['wednesday'] = 'Onsdag';
+$labels['thursday'] = 'Torsdag';
+$labels['friday'] = 'Fredag';
+$labels['saturday'] = 'Laurdag';
+
+$labels['today'] = 'I dag';
+
+// toolbar buttons
+$labels['writenewmessage'] = 'Skriv ei ny melding';
+$labels['replytomessage'] = 'Svar på meldinga';
+$labels['forwardmessage'] = 'Vidaresend meldinga';
+$labels['deletemessage'] = 'Flytt melding til Sletta element';
+$labels['printmessage'] = 'Skriv ut meldinga';
+$labels['previousmessages'] = 'Vis føregåande side med meldingar';
+$labels['nextmessages'] = 'Vis neste side med med meldingar';
+$labels['backtolist'] = 'Tilbake til meldingslista';
+$labels['viewsource'] = 'Vis kjelde';
+
+$labels['select'] = 'Vel';
+$labels['all'] = 'Alle';
+$labels['none'] = 'Ingen';
+$labels['unread'] = 'Uleste';
+
+// message compose
+$labels['compose'] = 'Skriv ei melding';
+$labels['sendmessage'] = 'Send meldinga no';
+$labels['addattachment'] = 'Legg ved ei fil';
+
+$labels['attachments'] = 'Vedlegg';
+$labels['upload'] = 'Last opp';
+$labels['close'] = 'Steng';
+
+$labels['low'] = 'Låg';
+$labels['lowest'] = 'Lågast';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Høg';
+$labels['highest'] = 'Høgast';
+
+$labels['showimages'] = 'Vis bilete';
+
+// address book
+$labels['name'] = 'Visingsnamn';
+$labels['firstname'] = 'Førenamn';
+$labels['surname'] = 'Etternamn';
+$labels['email'] = 'E-post';
+
+$labels['addcontact'] = 'Legg til ny kontakt';
+$labels['editcontact'] = 'Redigere kontakt';
+
+$labels['edit'] = 'Redigere';
+$labels['cancel'] = 'Avbryt';
+$labels['save'] = 'Lagre';
+$labels['delete'] = 'Slette';
+
+$labels['newcontact'] = 'Opprett nytt kontaktkort';
+$labels['deletecontact'] = 'Slett valde kontaktar';
+$labels['composeto'] = 'Ny melding til';
+$labels['contactsfromto'] = 'Kontaktar $from til $to av $count';
+$labels['print'] = 'Skriv ut';
+$labels['export'] = 'Eksport';
+
+// settings
+$labels['settingsfor'] = 'Innstillingar for';
+
+$labels['preferences'] = 'Innstillingar';
+$labels['userpreferences'] = 'Brukarinnstillingar';
+$labels['editpreferences'] = 'Redigere brukarinnstillingar';
+
+$labels['identities'] = 'Identitetar';
+$labels['manageidentities'] = 'Administrere identitetar for denne kontoen';
+$labels['newidentity'] = 'Ny identitet';
+
+$labels['newitem'] = 'Nytt element';
+$labels['edititem'] = 'Redigere element';
+
+$labels['setdefault'] = 'Set som standard';
+$labels['language'] = 'Språk';
+$labels['timezone'] = 'Tidssone';
+$labels['pagesize'] = 'Rader pr side';
+
+$labels['folders'] = 'Mapper';
+$labels['foldername'] = 'Mappenamn';
+$labels['subscribed'] = 'Abonnert';
+$labels['create'] = 'Opprette';
+$labels['createfolder'] = 'Opprett ny mappe';
+$labels['deletefolder'] = 'Slett mappe';
+$labels['managefolders'] = 'Administrere mapper';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/nn/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Per-Stian Vatne <psv@orsta.org> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Feil ved innlogging';
+$messages['cookiesdisabled'] = 'Nettlesaren din tillet ikkje informasjonskapslar (cookies)';
+$messages['sessionerror'] = 'Sesjonen din er ulovleg eller har gått ut på tid';
+$messages['imaperror'] = 'Feil ved tilkopling til IMAP-tenar';
+$messages['nomessagesfound'] = 'Ingen meldingar i denne postkassa';
+$messages['loggedout'] = 'Du har avslutta sesjonen. Ha det bra!';
+$messages['mailboxempty'] = 'Postkassa er tom';
+$messages['loadingdata'] = 'Lastar inn data...';
+$messages['messagesent'] = 'Meldinga vart send';
+$messages['successfullysaved'] = 'Meldinga vart lagra';
+$messages['addedsuccessfully'] = 'Kontakta vart lagt til i adresseboka';
+$messages['contactexists'] = 'Ei kontakt med denne e-postadressa eksisterer allereie';
+$messages['blockedimages'] = 'For å ta vare på privatlivet ditt er eksterne bilete blokkert i denne meldinga.';
+$messages['encryptedmessage'] = 'Dette er ei kryptert melding og kan ikkje visast. Orsak!';
+$messages['nocontactsfound'] = 'Fann ingen kontaktar';
+$messages['sendingfailed'] = 'Kunne ikkje sende meldinga';
+$messages['errorsaving'] = 'Det skjedde ein feil ved lagring';
+$messages['errormoving'] = 'Kunne ikkje flytte meldinga';
+$messages['errordeleting'] = 'Kunne ikkje slette meldinga';
+
+?>
\ No newline at end of file
| language/pl/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Tomasz Pajor <t.pajor@kei.pl> |
- | Sławomir Cichoń <slawek.cichon@gmail.com> |
- | Janusz Zamecki <janusz@zamecki.eu> |
+ | Author: Tomasz Pajor <t.pajor@kei.pl> |
+ | Sławomir Cichoń <slawek.cichon@gmail.com> |
+ | Janusz Zamecki <janusz@zamecki.eu> |
+ | Mariusz Szulerecki <nob@force.eu.org> |
+ | Wojciech Szczepucha <donkoyote@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 819 2007-09-26 08:26:58Z tomekp $
+ @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
*/
$labels['lastmessages'] = 'Pokaż ostatnie';
$labels['backtolist'] = 'Pokaż listę wiadomości';
$labels['viewsource'] = 'Pokaż źródło';
-$labels['select'] = 'Wybierz';
-$labels['all'] = 'Zaznacz wszystkie';
-$labels['none'] = 'Anuluj zaznaczenie';
-$labels['unread'] = 'Zaznacz nieprzeczytane';
-$labels['compact'] = 'Kompaktuj';
+$labels['markmessages'] = 'Oznacz wiadomość';
+$labels['markread'] = 'Jako przeczytaną';
+$labels['markunread'] = 'Jako nieprzeczytaną';
+$labels['select'] = 'Zaznacz';
+$labels['all'] = 'Wszystkie';
+$labels['none'] = 'Anuluj';
+$labels['unread'] = 'Nieprzeczytane';
+$labels['compact'] = 'Upakuj';
$labels['empty'] = 'Opróżnij';
$labels['purge'] = 'Oczyść';
$labels['quota'] = 'Użyte miejsce';
$labels['showimages'] = 'Wyświetl obrazki';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Zwykły tekst';
-$labels['addcc'] = 'Dodaj Cc';
-$labels['addbcc'] = 'Dodaj Bcc';
+$labels['addcc'] = 'Dodaj Cc';
+$labels['addbcc'] = 'Dodaj Bcc';
$labels['addreplyto'] = 'Dodaj Reply-To';
+$labels['mdnrequest'] = 'Nadawca poprosił o potwierdzenie przeczytania tej wiadomości. Czy chcesz go powiadomić?';
+$labels['receiptread'] = 'Potwierdzenie odbioru';
+$labels['yourmessage'] = 'To jest potwierdzenie dostarczenia Twojej wiadomości';
+$labels['receiptnote'] = 'Uwaga: To potwierdzenie dostarczenia wiadomości oznacza tylko, że wiadomość została wyświetlona na komputerze adresata. Nie ma żadnej gwarancji, że odbiorca przeczytał czy też zrozumiał treść wiadomości.';
$labels['name'] = 'Nazwa';
$labels['firstname'] = 'Imię';
$labels['surname'] = 'Nazwisko';
$labels['folders'] = 'Foldery';
$labels['foldername'] = 'Nazwa folderu';
$labels['subscribed'] = 'Zasubskrybowany';
+$labels['messagecount'] = 'Wiadomości';
$labels['create'] = 'Utwórz';
$labels['createfolder'] = 'Utwórz nowy folder';
$labels['rename'] = 'Zmień nazwę';
$labels['sortasc'] = 'Rosnąco';
$labels['sortdesc'] = 'Malejąco';
-?>
\ No newline at end of file
+?>
| language/pl/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Tomasz Pajor <t.pajor@kei.pl> |
- | Author: Sławomir Cichoń <slawek.cichon@gmail.com> |
- | Janusz Zamecki <janusz@zamecki.eu> |
+ | Author: Tomasz Pajor <t.pajor@kei.pl> |
+ | Author: Sławomir Cichoń <slawek.cichon@gmail.com> |
+ | Janusz Zamecki <janusz@zamecki.eu> |
+ | Mariusz Szulerecki <nob@force.eu.org> |
+ | Wojciech Szczepucha <donkoyote@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 815 2007-09-26 08:03:07Z tomekp $
+ @version $Id: messages.inc 1086 2008-02-15 05:43:32Z tomekp $
*/
$messages['sourceisreadonly'] = 'Źródło adresu jest tylko do odczytu';
$messages['errorsavingcontact'] = 'Nie można było zapisać adresu kontaktu';
$messages['movingmessage'] = 'Przenoszenie wiadomości...';
+$messages['receiptsent'] = 'Pomyślnie wysłano potwierdzenie dostarczenia';
+$messages['errorsendingreceipt'] = 'Nie można wysłać potwierdzenia';
+$messages['nodeletelastidentity'] = 'Nie można skasować tej tożsamości, ponieważ jest ostatnią.';
+$messages['addsubfolderhint'] = 'Ten folder zostanie utworzony jako podfolder aktualnie wybranego.';
?>
\ No newline at end of file
| language/pt_BR/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Anderson S. Ferreira <anderson@cnpm.embrapa.br> |
- | Updated by: Robson F. Ramaldes <rframaldes@gmail.com> |
- | Updated by: Alessandro Lenzi <alessandro@mistymountain.com.br> |
+ | Robson F. Ramaldes <rframaldes@gmail.com> |
+ | Alessandro Lenzi <alessandro@mistymountain.com.br> |
+-----------------------------------------------------------------------+
- $Id: labels.inc 870 2007-10-16 06:50:49Z thomasb $
+ @version $Id: labels.inc 1113 2008-02-18 12:47:25Z yllar $
*/
$labels = array();
-
-// login page
-$labels['welcome'] = 'Bem Vindo ao $product';
-$labels['username'] = 'Usuário';
-$labels['password'] = 'Senha';
-$labels['server'] = 'Servidor';
-$labels['login'] = 'Entrar';
-
-// taskbar
-$labels['logout'] = 'Sair';
-$labels['mail'] = 'E-mail';
+$labels['welcome'] = 'Bem Vindo ao $product';
+$labels['username'] = 'Usuário';
+$labels['password'] = 'Senha';
+$labels['server'] = 'Servidor';
+$labels['login'] = 'Entrar';
+$labels['logout'] = 'Sair';
+$labels['mail'] = 'E-mail';
$labels['settings'] = 'Configurações pessoais';
$labels['addressbook'] = 'Catálogo de endereços';
-
-// mailbox names
-$labels['inbox'] = 'Entrada';
+$labels['inbox'] = 'Entrada';
$labels['drafts'] = 'Rascunhos';
-$labels['sent'] = 'Enviados';
-$labels['trash'] = 'Lixeira';
-$labels['junk'] = 'Junk';
-
-// message listing
+$labels['sent'] = 'Enviados';
+$labels['trash'] = 'Lixeira';
+$labels['junk'] = 'Junk';
$labels['subject'] = 'Assunto';
-$labels['from'] = 'Remetente';
-$labels['to'] = 'Para';
-$labels['cc'] = 'Cópia';
-$labels['bcc'] = 'Cópia Oculta';
+$labels['from'] = 'Remetente';
+$labels['to'] = 'Para';
+$labels['cc'] = 'Cópia';
+$labels['bcc'] = 'Cópia Oculta';
$labels['replyto'] = 'Responder para';
-$labels['date'] = 'Data';
-$labels['size'] = 'Tamanho';
+$labels['date'] = 'Data';
+$labels['size'] = 'Tamanho';
$labels['priority'] = 'Prioridade';
$labels['organization'] = 'Organização';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
+$labels['reply-to'] = 'Responder para';
$labels['mailboxlist'] = 'Pastas';
$labels['messagesfromto'] = 'Mensagens $from - $to de $count';
$labels['messagenrof'] = 'Mensagem $nr de $count';
-
-$labels['moveto'] = 'mover para...';
+$labels['moveto'] = 'mover para...';
$labels['download'] = 'download';
-
$labels['filename'] = 'Arquivo';
$labels['filesize'] = 'Tamanho';
-
$labels['preferhtml'] = 'Preferir HTML';
$labels['htmlmessage'] = 'Mensagem HTML';
$labels['prettydate'] = 'Formatar datas';
-
$labels['addtoaddressbook'] = 'Incluir no catálogo de endereços';
-
-// weekdays short
$labels['sun'] = 'Dom';
$labels['mon'] = 'Seg';
$labels['tue'] = 'Ter';
$labels['thu'] = 'Qui';
$labels['fri'] = 'Sex';
$labels['sat'] = 'Sáb';
-
-// weekdays long
-$labels['sunday'] = 'Domingo';
-$labels['monday'] = 'Segunda-feira';
-$labels['tuesday'] = 'Terça-feira';
+$labels['sunday'] = 'Domingo';
+$labels['monday'] = 'Segunda-feira';
+$labels['tuesday'] = 'Terça-feira';
$labels['wednesday'] = 'Quarta-feira';
-$labels['thursday'] = 'Quinta-feira';
-$labels['friday'] = 'Sexta-feira';
-$labels['saturday'] = 'Sábado';
-
+$labels['thursday'] = 'Quinta-feira';
+$labels['friday'] = 'Sexta-feira';
+$labels['saturday'] = 'Sábado';
$labels['today'] = 'Hoje';
-
-// toolbar buttons
-$labels['checkmail'] = 'Verificar se há novas mensagens.';
-$labels['writenewmessage'] = 'Criar nova mensagem';
-$labels['replytomessage'] = 'Responder';
+$labels['checkmail'] = 'Verificar se há novas mensagens.';
+$labels['writenewmessage'] = 'Criar nova mensagem';
+$labels['replytomessage'] = 'Responder';
$labels['replytoallmessage'] = 'Responder para todos';
-$labels['forwardmessage'] = 'Encaminhar';
-$labels['deletemessage'] = 'Excluir';
+$labels['forwardmessage'] = 'Encaminhar';
+$labels['deletemessage'] = 'Excluir';
$labels['movemessagetotrash'] = 'Mover para Lixeira';
-$labels['printmessage'] = 'Imprimir';
-$labels['previousmessage'] = 'Mensagem Anterior';
+$labels['printmessage'] = 'Imprimir';
+$labels['previousmessage'] = 'Mensagem Anterior';
$labels['previousmessages'] = 'Página Anterior';
-$labels['firstmessage'] = 'Primeira Mensagem';
-$labels['firstmessages'] = 'Primeira Página';
-$labels['nextmessage'] = 'Próxima Mensagem';
-$labels['nextmessages'] = 'Próxima Página';
-$labels['lastmessage'] = 'Ultima Mensagem';
-$labels['lastmessages'] = 'Ultima Página';
-$labels['backtolist'] = 'Voltar';
-$labels['viewsource'] = 'Exibir código fonte';
-
+$labels['firstmessage'] = 'Primeira Mensagem';
+$labels['firstmessages'] = 'Primeira Página';
+$labels['nextmessage'] = 'Próxima Mensagem';
+$labels['nextmessages'] = 'Próxima Pána';
+$labels['lastmessage'] = 'Última Mensagem';
+$labels['lastmessages'] = 'Última Página';
+$labels['backtolist'] = 'Voltar';
+$labels['viewsource'] = 'Exibir código fonte';
+$labels['markmessages'] = 'Marcar mensagens';
+$labels['markread'] = 'como lidas';
+$labels['markunread'] = 'como não lidas';
$labels['select'] = 'Selecionar';
$labels['all'] = 'Todas';
$labels['none'] = 'Nenhuma';
$labels['unread'] = 'Não lidas';
-
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Esvaziar';
$labels['purge'] = 'Apagar';
-
$labels['quota'] = 'Utilização';
-$labels['unknown'] = 'desconhecido';
-$labels['unlimited'] = 'Sem limitação';
-
+$labels['unknown'] = 'desconhecido';
+$labels['unlimited'] = 'Sem limitação';
$labels['quicksearch'] = 'Pesquisa Rápida';
$labels['resetsearch'] = 'Limpar';
-
-
-// message compose
-$labels['compose'] = 'Escrever mensagem';
-$labels['sendmessage'] = 'Enviar';
-$labels['savemessage'] = 'Salvar Rascunho';
-$labels['addattachment'] = 'Anexar';
-$labels['charset'] = 'Codificação';
-$labels['editortype'] = 'Tipo';
-$labels['returnreceipt'] = 'Receber Confirmação';
-
+$labels['compose'] = 'Escrever mensagem';
+$labels['savemessage'] = 'Salvar Rascunho';
+$labels['sendmessage'] = 'Enviar';
+$labels['addattachment'] = 'Anexar';
+$labels['charset'] = 'Codificação';
+$labels['editortype'] = 'Tipo';
+$labels['returnreceipt'] = 'Receber Confirmação';
$labels['checkspelling'] = 'Verificar Ortografia';
$labels['resumeediting'] = 'Continuar';
-$labels['revertto'] = 'Reverter para';
-
+$labels['revertto'] = 'Reverter para';
$labels['attachments'] = 'Anexos';
$labels['upload'] = 'Enviar';
-$labels['close'] = 'Fechar';
-
-$labels['low'] = 'Mais baixa';
-$labels['lowest'] = 'Baixa';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Alta';
+$labels['close'] = 'Fechar';
+$labels['low'] = 'Mais baixa';
+$labels['lowest'] = 'Baixa';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Alta';
$labels['highest'] = 'Mais alta';
-
-$labels['nosubject'] = '(Sem assunto)';
+$labels['nosubject'] = '(Sem assunto)';
$labels['showimages'] = 'Exibir imagens';
-
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto Puro';
-
$labels['addcc'] = 'Cópia';
$labels['addbcc'] = 'Cópia Oculta';
$labels['addreplyto'] = 'Responder para';
-
-
-// address boook
-$labels['name'] = 'Nome completo';
+$labels['mdnrequest'] = 'O remetente desta mensagem deseja ser notificado quando você ler esta mensagem. Você permite o envio desta notificação?';
+$labels['receiptread'] = 'Confirmacao de Leitura (Exibida)';
+$labels['yourmessage'] = 'Esta e uma confirmacao de leitura da sua mensagem.';
+$labels['receiptnote'] = 'Nota: Esta confirmacao de leitura somente informa que a mensagem foi aberta no computador do destinatario.\\n Nao ha garantia que o destinatario tenha lido ou compreendido o conteudo da mensagem.';
+$labels['name'] = 'Nome completo';
$labels['firstname'] = 'Primeiro nome';
-$labels['surname'] = 'Sobrenome';
-$labels['email'] = 'E-Mail';
-
+$labels['surname'] = 'Sobrenome';
+$labels['email'] = 'E-Mail';
$labels['addcontact'] = 'Incluir novo contato';
$labels['editcontact'] = 'Editar contato';
-
-$labels['edit'] = 'Editar';
+$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
-$labels['save'] = 'Salvar';
+$labels['save'] = 'Salvar';
$labels['delete'] = 'Apagar';
-
-$labels['newcontact'] = 'Criar novo contato';
-$labels['deletecontact'] = 'Apagar contatos selecionados';
-$labels['composeto'] = 'Escrever mensagem para';
+$labels['newcontact'] = 'Criar novo contato';
+$labels['deletecontact'] = 'Apagar contatos selecionados';
+$labels['composeto'] = 'Escrever mensagem para';
$labels['contactsfromto'] = 'Contatos de $from à $to de $count';
-$labels['print'] = 'Imprimir';
-$labels['export'] = 'Exportar';
-
-$labels['previouspage'] = 'Página Anterior';
-$labels['firstpage'] = 'Primeira Página ';
-$labels['nextpage'] = 'Próxima Página';
-$labels['lastpage'] = 'Última Página';
-
+$labels['print'] = 'Imprimir';
+$labels['export'] = 'Exportar';
+$labels['previouspage'] = 'Página Anterior';
+$labels['firstpage'] = 'Primeira Página ';
+$labels['nextpage'] = 'Próxima Página';
+$labels['lastpage'] = 'Última Página';
$labels['groups'] = 'Grupos';
$labels['personaladrbook'] = 'Endereços Pessoais';
-
-
-// settings
-$labels['settingsfor'] = 'Configurações para';
-
-$labels['preferences'] = 'Preferências';
-$labels['userpreferences'] = 'Preferências do usuário';
-$labels['editpreferences'] = 'Editar preferências do usuário';
-
-$labels['identities'] = 'Identidades';
-$labels['manageidentities'] = 'Gerenciar identidades para esta conta';
-$labels['newidentity'] = 'Nova identidade';
-
-$labels['newitem'] = 'Novo item';
-$labels['edititem'] = 'Editar item';
-
-$labels['setdefault'] = 'Padrão';
-$labels['language'] = 'Idioma';
-$labels['timezone'] = 'Fuso Horário';
-$labels['pagesize'] = 'Linhas por página';
+$labels['settingsfor'] = 'Configurações para';
+$labels['preferences'] = 'Preferências';
+$labels['userpreferences'] = 'Preferências do usuário';
+$labels['editpreferences'] = 'Editar preferências do usuário';
+$labels['identities'] = 'Identidades';
+$labels['manageidentities'] = 'Gerenciar identidades para esta conta';
+$labels['newidentity'] = 'Nova identidade';
+$labels['newitem'] = 'Novo item';
+$labels['edititem'] = 'Editar item';
+$labels['setdefault'] = 'Padrão';
+$labels['language'] = 'Idioma';
+$labels['timezone'] = 'Fuso Horário';
+$labels['pagesize'] = 'Linhas por página';
$labels['signature'] = 'Assinatura';
-$labels['dstactive'] = 'Horário de Verão';
+$labels['dstactive'] = 'Horário de Verão';
$labels['htmleditor'] = 'Criar mensagens em HTML';
$labels['htmlsignature'] = 'Assinatura em HTML';
-$labels['previewpane'] = 'Exibir Pré-Visualização';
-
-$labels['autosavedraft'] = 'Salvar Rascunho automaticamente';
-$labels['everynminutes'] = 'a cada $n minutos';
-$labels['never'] = 'nunca';
-
-$labels['folder'] = 'Pasta';
-$labels['folders'] = 'Pastas';
-$labels['foldername'] = 'Nome da pasta';
-$labels['subscribed'] = 'Assinado';
-$labels['create'] = 'Criar';
-$labels['createfolder'] = 'Criar nova pasta';
+$labels['previewpane'] = 'Exibir Pré-visualização';
+$labels['autosavedraft'] = 'Salvar Rascunho automaticamente';
+$labels['everynminutes'] = 'a cada $n minutos';
+$labels['never'] = 'nunca';
+$labels['folder'] = 'Pasta';
+$labels['folders'] = 'Pastas';
+$labels['foldername'] = 'Nome da pasta';
+$labels['subscribed'] = 'Assinado';
+$labels['messagecount'] = 'Mensagens';
+$labels['create'] = 'Criar';
+$labels['createfolder'] = 'Criar nova pasta';
$labels['rename'] = 'Renomear';
$labels['renamefolder'] = 'Renomear Pasta';
-$labels['deletefolder'] = 'Apagar pasta';
-$labels['managefolders'] = 'Gerenciar pastas';
-
+$labels['deletefolder'] = 'Apagar pasta';
+$labels['managefolders'] = 'Gerenciar pastas';
$labels['sortby'] = 'Ordenado por';
-$labels['sortasc'] = 'Ascendente';
+$labels['sortasc'] = 'Ascendente';
$labels['sortdesc'] = 'Descendente';
?>
\ No newline at end of file
| language/pt_BR/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Anderson S. Ferreira <anderson@cnpm.embrapa.br> |
- | Updated by: Robson F. Ramaldes <rframaldes@gmail.com> |
- | Updated by: Alessandro Lenzi <alessandro@mistymountain.com.br> |
+ | Robson F. Ramaldes <rframaldes@gmail.com> |
+ | Alessandro Lenzi <alessandro@mistymountain.com.br> |
+-----------------------------------------------------------------------+
- $Id: messages.inc 830 2007-09-27 04:33:46Z tomekp $
+ @version $Id: messages.inc 1113 2008-02-18 12:47:25Z yllar $
*/
$messages = array();
-$messages['loginfailed'] = 'Falha no login.';
+$messages['loginfailed'] = 'Falha no login.';
$messages['cookiesdisabled'] = 'Seu navegador não suporta cookies.';
$messages['sessionerror'] = 'A sessão do seu navegador é inválida ou expirou.';
-$messages['imaperror'] = 'A conexão com o servidor IMAP falhou.';
-$messages['nomessagesfound'] = 'Não foi encontrada nenhuma mensagem.';
+$messages['imaperror'] = 'Falha na conexão com o servidor IMAP.';
+$messages['nomessagesfound'] = 'Nenhuma mensagem foi encontrada.';
$messages['loggedout'] = 'Sua sessão foi finalizada com sucesso. Até breve!';
$messages['mailboxempty'] = 'A caixa de mensagens está vazia.';
$messages['loading'] = 'Carregando...';
$messages['encryptedmessage'] = 'Esta mensagem está criptografada e não pode ser exibida. Desculpe.';
$messages['nocontactsfound'] = 'Nenhum contato foi encontrado';
$messages['contactnotfound'] = 'O contato solicitado não foi encontrado';
-
$messages['sendingfailed'] = 'Falha no envio da mensagem';
$messages['errorsaving'] = 'Ocorreu um erro ao Salvar';
$messages['errormoving'] = 'Não foi possível mover a mensagem';
$messages['purgefolderconfirm'] = 'Deseja realmente excluir todas mensagens desta pasta?';
$messages['formincomplete'] = 'Os campos não foram completamente preenchidos.';
$messages['noemailwarning'] = 'Por favor, informe um endereço de e-mail válido.';
-$messages['nonamewarning'] = 'Por favor, informe o nome.';
+$messages['nonamewarning'] = 'Por favor, informe o nome.';
$messages['nopagesizewarning'] = 'Por favor, informe o tamanho da página.';
$messages['norecipientwarning'] = 'Por favor, informe pelo menos um destinatário.';
-$messages['nosubjectwarning'] = 'O campo assunto não foi informado. Deseja incluí-lo agora?';
+$messages['nosubjectwarning'] = 'O campo assunto não foi informado. Deseja incluí-lo agora?';
$messages['nobodywarning'] = 'Enviar a mensagem sem texto?';
$messages['notsentwarning'] = 'A mensegem não foi enviada, deseja excluí-la?';
$messages['noldapserver'] = 'Por favor, selecione um servidor LDAP para a pesquisa';
$messages['messageopenerror'] = 'Não foi possível carregar a mensagem do servidor';
$messages['fileuploaderror'] = 'Falha ao enviar o arquivo';
$messages['filesizeerror'] = 'O Arquivo enviado excede o tamanho máximo de $size';
-
-$messages['copysuccess'] = '$nr endereços copiados com sucesso';
+$messages['copysuccess'] = '$nr endereço(s) copiado(s) com sucesso';
$messages['copyerror'] = 'Não foi possível copiar quaisquer endereços';
-$messages['sourceisreadonly'] = 'Esta fonte de endereços é somente leitura';
+$messages['sourceisreadonly'] = 'Esta fonte de endereço é somente leitura';
$messages['errorsavingcontact'] = 'Não foi possível salvar o endereço de contato.';
$messages['movingmessage'] = 'Movendo mensagem...';
+$messages['receiptsent'] = 'Confirmação de Leitura enviada com sucesso.';
+$messages['errorsendingreceipt'] = 'Não foi possível enviar a confirmação de leitura.';
+$messages['nodeletelastidentity'] = 'Você não pode excluir sua única identidade.';
+$messages['addsubfolderhint'] = 'Esta pasta será criada como uma sub-pasta da que está selecionada.';
?>
\ No newline at end of file
| language/pt_PT/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Fernando Silva <fernando.silva@openquest.pt> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 873 2007-10-16 19:06:34Z yllar $
+ @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$labels['lastmessages'] = 'Última página';
$labels['backtolist'] = 'Voltar';
$labels['viewsource'] = 'Mostrar código fonte';
+$labels['markmessages'] = 'Marcar mensagens';
+$labels['markread'] = 'Como lidas';
+$labels['markunread'] = 'Como não lidas';
$labels['select'] = 'Seleccionar';
$labels['all'] = 'Todas';
$labels['none'] = 'Nenhuma';
$labels['addcc'] = 'Adicionar Cc';
$labels['addbcc'] = 'Adicionar Bcc';
$labels['addreplyto'] = 'Adicionar "Responder para"';
+$labels['mdnrequest'] = 'O remetente desta mensagem pediu para ser notificado quando esta fosse lida. Deseja enviar uma notificação?';
+$labels['receiptread'] = 'Recibo de leitura';
+$labels['yourmessage'] = 'Isto é um recibo de leitura da sua mensagem';
+$labels['receiptnote'] = 'Nota: este recibo apenas indica que a mensagem foi aberta pelo destinatário. Não garante que a mensagem foi lida ou compreendida.';
$labels['name'] = 'Nome completo';
$labels['firstname'] = 'Primeiro nome';
$labels['surname'] = 'Apelido';
$labels['folders'] = 'Pastas';
$labels['foldername'] = 'Nome da pasta';
$labels['subscribed'] = 'Subscrito';
+$labels['messagecount'] = 'Mensagens';
$labels['create'] = 'Criar';
$labels['createfolder'] = 'Criar nova pasta';
$labels['rename'] = 'Renomear';
| language/pt_PT/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| João Vale <jpvale@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 873 2007-10-16 19:06:34Z yllar $
+ @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
*/
$messages['sourceisreadonly'] = 'Esta fonte de endereços é só de leitura';
$messages['errorsavingcontact'] = 'Não foi possível guardar o endereço de contacto';
$messages['movingmessage'] = 'Movendo mensagem...';
+$messages['receiptsent'] = 'Recibo de leitura enviado';
+$messages['errorsendingreceipt'] = 'Não foi possível enviar o recibo';
+$messages['nodeletelastidentity'] = 'Esta é a última identidade, não é possível apagá-la.';
+$messages['addsubfolderhint'] = 'Esta pasta será criada como uma sub-pasta da que está seleccionada';
?>
| language/ro/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Daniel Anechitoaie - danieLs <daniels@safereaction.ro> |
+ | Author: Daniel Anechitoaie - danieLs <daniels@safereaction.ro> |
| Ispas Dorin <dorinxp2004@yahoo.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 550 2007-05-01 19:07:56Z thomasb $
+ @version $Id: labels.inc 1149 2008-02-28 19:52:09Z thomasb $
*/
$labels['replytomessage'] = 'Raspunde la mesaj';
$labels['replytoallmessage'] = 'Raspunde la toti';
$labels['forwardmessage'] = 'Trimite mesajul mai departe';
-$labels['deletemessage'] = 'Trimmite mesajul la gunoi';
+$labels['deletemessage'] = 'Trimite mesajul la gunoi';
+$labels['movemessagetotrash'] = 'Muta mesajul la gunoi';
$labels['printmessage'] = 'Listeaza mesajul';
$labels['previousmessage'] = 'Afiseaza mesajul anterior';
$labels['previousmessages'] = 'Afiseaza setul anterior de mesaje';
$labels['lastmessages'] = 'Afiseaza ultimul set de mesaje';
$labels['backtolist'] = 'Inapoi la lista cu mesaje';
$labels['viewsource'] = 'Afiseaza sursa';
+$labels['markmessages'] = 'Marcheaza mesajele';
+$labels['markread'] = 'Ca citit';
+$labels['markunread'] = 'Ca necitit';
$labels['select'] = 'Selecteaza';
$labels['all'] = 'Toate';
$labels['none'] = 'Nici unul';
$labels['quicksearch'] = 'Cautare rapida';
$labels['resetsearch'] = 'Resetare cautare';
$labels['compose'] = 'Compune mesaj';
-$labels['sendmessage'] = 'Trimite mesaj';
$labels['savemessage'] = 'Salveaza aceasta ciorna';
+$labels['sendmessage'] = 'Trimite mesaj';
$labels['addattachment'] = 'Ataseaza fisier';
$labels['charset'] = 'Set de caractere';
$labels['editortype'] = 'Tip de editor';
$labels['showimages'] = 'Afiseaza imagini';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Text simplu';
+$labels['addcc'] = 'Adauga Cc';
+$labels['addbcc'] = 'Adauga Bcc';
+$labels['addreplyto'] = 'Adauga Raspunde-La';
+$labels['mdnrequest'] = 'Expeditorul acestui mesaj a solicitat sa fie notificat la cititrea mesajului. Doriti sa notificati expeditorul?';
+$labels['receiptread'] = 'Returneaza confirmare (citit)';
+$labels['yourmessage'] = 'Aceasta este o confirmare a mesajului dumneavoastra.';
+$labels['receiptnote'] = 'Nota: Aceasta confirmare doar va informeaza ca mesajul a fost afisat pe calculatorul destinatarului. Nu este nici o garantie ca destinatarul a citit sau a inteles continutul mesajului.';
$labels['name'] = 'Nume de afisat';
$labels['firstname'] = 'Nume';
$labels['surname'] = 'Prenume';
$labels['folders'] = 'Dosare';
$labels['foldername'] = 'Nume dosar';
$labels['subscribed'] = 'Inscris';
+$labels['messagecount'] = 'Mesaje';
$labels['create'] = 'Creaza';
$labels['createfolder'] = 'Creaza dosar nou';
$labels['rename'] = 'Redenumeste';
| language/ro/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Ispas Dorin <dorinxp2004@yahoo.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 550 2007-05-01 19:07:56Z thomasb $
+ @version $Id: messages.inc 1149 2008-02-28 19:52:09Z thomasb $
*/
$messages['cookiesdisabled'] = 'Browserul dumneavoastra nu accepta cookies';
$messages['sessionerror'] = 'Sesiunea dumneavoastra este invalida sau a expirat';
$messages['imaperror'] = 'Conectarea la serverul IMAP a esuat';
-$messages['nomessagesfound'] = 'Nu a fost gasit niciun mesaj in aceasta casuta postala';
+$messages['nomessagesfound'] = 'Nu a fost gasit nici un mesaj in aceasta casuta postala';
$messages['loggedout'] = 'Sesiune incheiata cu succes. La revedere!';
$messages['mailboxempty'] = 'Casuta postala este goala';
$messages['loading'] = 'Se incarca...';
$messages['contactexists'] = 'Mai exista un contact cu aceasta adresa de e-mail';
$messages['blockedimages'] = 'Pentru a va proteja intimitatea imaginile externe au fost blocate.';
$messages['encryptedmessage'] = 'Acesta este un mesaj criptat si nu poate fi afisat. Ne pare rau.';
-$messages['nocontactsfound'] = 'Nu s-a gasit niciun contact';
+$messages['nocontactsfound'] = 'Nu s-a gasit nici un contact';
$messages['contactnotfound'] = 'Contactul solicitat nu a fost gasit.';
$messages['sendingfailed'] = 'Nu s-a reusit trimiterea mesajului';
$messages['errorsaving'] = 'A intervenit o eroare in timp ce se efectua salvarea';
$messages['nobodywarning'] = 'Trimiteti acest mesaj fara text?';
$messages['notsentwarning'] = 'Mesajul nu a fost trimis. Vreti sa renuntatati la el?';
$messages['noldapserver'] = 'Va rugam alegeti un server ldap pentru cautare';
-$messages['nocontactsreturned'] = 'Nu s-a gasit niciun contact';
+$messages['nocontactsreturned'] = 'Nu s-a gasit nici un contact';
$messages['nosearchname'] = 'Va rugam introduceti un nume de contact sau adresa de e-mail';
$messages['searchsuccessful'] = '$nr mesaje gasite';
-$messages['searchnomatch'] = 'Cautarea nu a returnat niciun rezultat';
+$messages['searchnomatch'] = 'Cautarea nu a returnat nici un rezultat';
$messages['searching'] = 'Se cauta...';
$messages['checking'] = 'Se verifica...';
$messages['nospellerrors'] = 'Nu s-a gasit nicio greseala de ortografie';
$messages['copyerror'] = 'Nu am putut copia nici o adresa';
$messages['sourceisreadonly'] = 'Sursa adrese este "read-only"(se poate doar citi)';
$messages['errorsavingcontact'] = 'Nu am putut salva adresa de contact';
+$messages['movingmessage'] = 'Mutare mesaj....';
+$messages['receiptsent'] = 'Confirmarea a fost trimisa cu succes';
+$messages['errorsendingreceipt'] = 'Confirmarea nu a putut fi trimisa';
+$messages['nodeletelastidentity'] = 'Nu putesti sterge aceasta identitate, este ultima.';
+$messages['addsubfolderhint'] = 'Acest dosar va fi creat ca subdosar al celui selectat.';
?>
\ No newline at end of file
| language/ru_RU/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Maxim Zenin <maxx@webmechanics.ru> |
| Vladimir Kulev <me@lightoze.net> |
+ | Artur Smolkin <admin@roundcube.ru> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 584 2007-05-24 03:49:19Z estadtherr $
+ @version $Id: labels.inc 1134 2008-02-22 15:05:18Z yllar $
*/
$labels['replytoallmessage'] = 'Ответить всем';
$labels['forwardmessage'] = 'Переслать';
$labels['deletemessage'] = 'В корзину';
+$labels['movemessagetotrash'] = 'Переместить сообщение в корзину';
$labels['printmessage'] = 'Печать';
$labels['previousmessage'] = 'Показать предыдущее сообщение';
$labels['previousmessages'] = 'Предыдущее';
$labels['lastmessages'] = 'Последнее сообщение';
$labels['backtolist'] = 'К списку сообщений';
$labels['viewsource'] = 'Исходный текст';
+$labels['markmessages'] = 'Отметить сообщение';
+$labels['markread'] = 'как прочитанное';
+$labels['markunread'] = 'как непрочитанное';
$labels['select'] = 'Выбрать';
$labels['all'] = 'Все';
$labels['none'] = 'Ничего';
$labels['quicksearch'] = 'Быстрый поиск';
$labels['resetsearch'] = 'Сброс';
$labels['compose'] = 'Написать сообщение';
-$labels['sendmessage'] = 'Отправить сейчас';
$labels['savemessage'] = 'Сохранить черновик';
+$labels['sendmessage'] = 'Отправить сейчас';
$labels['addattachment'] = 'Добавить вложение';
$labels['charset'] = 'Кодировка';
$labels['editortype'] = 'Редактор';
$labels['showimages'] = 'Показать изображения';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Обычный текст';
+$labels['addcc'] = 'Копия';
+$labels['addbcc'] = 'Скрытая копия';
+$labels['addreplyto'] = 'Обратный адрес';
+$labels['mdnrequest'] = 'Отправитель этого сообщения запросил уведомление о прочтении. Отправить уведомление?';
+$labels['receiptread'] = 'Уведомление о прочтении';
+$labels['yourmessage'] = 'Это уведомление о прочтении вашего сообщения';
+$labels['receiptnote'] = 'Это уведомление означает только, что сообщение было открыто получателем, и не гарантирует того, что оно было прочитано и (или) понято.';
$labels['name'] = 'Отображаемое имя';
$labels['firstname'] = 'Имя';
$labels['surname'] = 'Фамилия';
$labels['folders'] = 'Папки';
$labels['foldername'] = 'Имя папки';
$labels['subscribed'] = 'Подписан';
+$labels['messagecount'] = 'сообщения';
$labels['create'] = 'Создать';
$labels['createfolder'] = 'Создать новую папку';
$labels['rename'] = 'Переименовать';
| language/ru_RU/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Maxim Zenin <maxx@webmechanics.ru> |
| Vladimir Kulev <me@lightoze.net> |
+ | Artur Smolkin <admin@roundcube.ru> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 584 2007-05-24 03:49:19Z estadtherr $
+ @version $Id: messages.inc 1134 2008-02-22 15:05:18Z yllar $
*/
$messages['copyerror'] = 'Невозможно скопировать адреса';
$messages['sourceisreadonly'] = 'Данный источник адресов только для чтения';
$messages['errorsavingcontact'] = 'Невозможно сохранить адрес контакта';
+$messages['movingmessage'] = 'Перемещение сообщения…';
+$messages['receiptsent'] = 'Уведомление о прочтении отправлено';
+$messages['errorsendingreceipt'] = 'Уведомление о прочтении не отправлено';
+$messages['nodeletelastidentity'] = 'Вы не можете удалить этот профиль, он у вас последний';
+$messages['addsubfolderhint'] = 'Эта папка будет создана как подпапка в текущей папке';
?>
\ No newline at end of file
| language/se/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Fredrik Nygren <f.nygren@gmail.com> |
- | Andreas Henriksson <andreas@fatal.se> |
+ | Andreas Henriksson <andreas@fatal.se> |
+ | Jonas Näsholm <hostmaster@bitfuse.net> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$labels['server'] = 'Server';
$labels['login'] = 'Logga in';
$labels['logout'] = 'Logga ut';
-$labels['mail'] = 'E-post';
+$labels['mail'] = 'Meddelanden';
$labels['settings'] = 'Personliga inställningar';
$labels['addressbook'] = 'Adressbok';
$labels['inbox'] = 'Inkorg';
$labels['organization'] = 'Organisation';
$labels['reply-to'] = 'Svara till';
$labels['mailboxlist'] = 'Mappar';
-$labels['messagesfromto'] = 'Meddelanden $from till $to av $count';
+$labels['messagesfromto'] = 'Meddelande $from till $to av $count';
$labels['messagenrof'] = 'Meddelande $nr av $count';
$labels['moveto'] = 'flytta till...';
$labels['download'] = 'ladda ner';
$labels['friday'] = 'Fredag';
$labels['saturday'] = 'Lördag';
$labels['today'] = 'Idag';
-$labels['checkmail'] = 'Hämta ny e-post';
+$labels['checkmail'] = 'Hämta nya meddelanden';
$labels['writenewmessage'] = 'Skapa nytt meddelande';
-$labels['replytomessage'] = 'Svar på meddelande';
-$labels['replytoallmessage'] = 'Svar till avsändare och alla mottagare';
+$labels['replytomessage'] = 'Svara avsändaren';
+$labels['replytoallmessage'] = 'Svara avsändaren och alla mottagare';
$labels['forwardmessage'] = 'Vidarebefordra meddelande';
-$labels['deletemessage'] = 'Flytta meddelande till papperskorgen';
+$labels['deletemessage'] = 'Radera meddelande';
+$labels['movemessagetotrash'] = 'Flytta meddelande till papperskorgen';
$labels['printmessage'] = 'Skriv ut';
$labels['previousmessage'] = 'Visa föregående meddelande';
$labels['previousmessages'] = 'Visa tidigare grupp av meddelanden';
$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['select'] = 'Välj';
$labels['all'] = 'Alla';
$labels['none'] = 'Ingen';
-$labels['unread'] = 'Oläst';
+$labels['unread'] = 'Olästa';
$labels['compact'] = 'Packa';
-$labels['empty'] = 'Tom';
+$labels['empty'] = 'Töm';
$labels['purge'] = 'Rensa';
$labels['quota'] = 'Diskutrymme';
$labels['unknown'] = 'okänd';
$labels['quicksearch'] = 'Snabbsök';
$labels['resetsearch'] = 'Återställ sökning';
$labels['compose'] = 'Skapa nytt meddelande';
-$labels['sendmessage'] = 'Skicka meddelande nu';
$labels['savemessage'] = 'Spara utkast';
-$labels['addattachment'] = 'Bifoga en fil';
+$labels['sendmessage'] = 'Skicka meddelande';
+$labels['addattachment'] = 'Bifoga fil';
$labels['charset'] = 'Teckenkodning';
$labels['editortype'] = 'Typ av redigerare';
$labels['returnreceipt'] = 'Mottagarkvitto';
$labels['resumeediting'] = 'Återuppta redigering';
$labels['revertto'] = 'Återgå till';
$labels['attachments'] = 'Bilagor';
-$labels['upload'] = 'Uppladdning';
+$labels['upload'] = 'Bifoga';
$labels['close'] = 'Stäng';
$labels['low'] = 'Låg';
$labels['lowest'] = 'Lägst';
$labels['showimages'] = 'Visa bilder';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Oformaterad text';
+$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';
$labels['firstname'] = 'Förnamn';
$labels['surname'] = 'Efternamn';
-$labels['email'] = 'E-post';
+$labels['email'] = 'Meddelande';
$labels['addcontact'] = 'Lägg till ny kontakt';
$labels['editcontact'] = 'Redigera kontakt';
$labels['edit'] = 'Redigera';
$labels['delete'] = 'Radera';
$labels['newcontact'] = 'Skapa nytt kontaktkort';
$labels['deletecontact'] = 'Radera valda kontakter';
-$labels['composeto'] = 'Skriv e-post till';
+$labels['composeto'] = 'Skriv meddelande till';
$labels['contactsfromto'] = 'Kontakter $from till $to av $count';
$labels['print'] = 'Skriv ut';
$labels['export'] = 'Exportera';
$labels['folders'] = 'Mappar';
$labels['foldername'] = 'Mappnamn';
$labels['subscribed'] = 'Ansluten';
+$labels['messagecount'] = 'Meddelanden';
$labels['create'] = 'Skapa';
$labels['createfolder'] = 'Skapa ny mapp';
$labels['rename'] = 'Byt namn';
| language/se/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Fredrik Nygren <f.nygren@gmail.com> |
- | Andreas Henriksson <andreas@fatal.se> |
+ | Andreas Henriksson <andreas@fatal.se> |
+ | Jonas Näsholm <hostmaster@bitfuse.net> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$messages = array();
$messages['loginfailed'] = 'Inloggningen misslyckades';
$messages['cookiesdisabled'] = 'Din webbläsare accepterar inte cookies';
-$messages['sessionerror'] = 'Din session är felaktig eller har gått ut';
+$messages['sessionerror'] = 'Din inloggning är felaktig eller har gått ut';
$messages['imaperror'] = 'Kontakt med IMAP-servern misslyckades';
-$messages['nomessagesfound'] = 'Inga meddelanden hittades i din inkorg';
-$messages['loggedout'] = 'Du har framgångsrikt avslutat din session. Hej då!';
-$messages['mailboxempty'] = 'Postlådan är tom';
+$messages['nomessagesfound'] = 'Inga meddelanden';
+$messages['loggedout'] = 'Du är utloggad. Välkommen åter!';
+$messages['mailboxempty'] = 'Mappen är tom';
$messages['loading'] = 'Laddar...';
$messages['loadingdata'] = 'Laddar data...';
-$messages['checkingmail'] = 'Letar efter ny e-post...';
+$messages['checkingmail'] = 'Letar efter nya meddelanden...';
$messages['sendingmessage'] = 'Skickar meddelande...';
$messages['messagesent'] = 'Meddelandet har skickats';
$messages['savingmessage'] = 'Sparar meddelande...';
$messages['messagesaved'] = 'Meddelande sparades till utkast';
$messages['successfullysaved'] = 'Sparat';
$messages['addedsuccessfully'] = 'Kontakten har lagts till i adressboken';
-$messages['contactexists'] = 'En kontakt med den här e-postadressen finns redan';
+$messages['contactexists'] = 'En kontakt med den här adressen finns redan';
$messages['blockedimages'] = 'För att skydda dig är bilder blockerade.';
-$messages['encryptedmessage'] = 'Det här ett krypterat meddelande som inte kan visas. Tyvärr!';
+$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'] = 'Misslyckades med att skicka meddelandet';
-$messages['errorsaving'] = 'Ett fel uppstod vid sparandet';
+$messages['sendingfailed'] = 'Meddelandet kunde inte skickas';
+$messages['errorsaving'] = 'Ett fel uppstod när meddelandet sparades';
$messages['errormoving'] = 'Meddelandet kunde inte flyttas';
$messages['errordeleting'] = 'Meddelandet kunde inte raderas';
$messages['deletecontactconfirm'] = 'Vill du verkligen radera valda kontakter?';
$messages['deletefolderconfirm'] = 'Vill du verkligen radera den här mappen?';
$messages['purgefolderconfirm'] = 'Vill du verkligen radera alla meddelanden i den här mappen?';
$messages['formincomplete'] = 'Formuläret var inte ifyllt i sin helhet';
-$messages['noemailwarning'] = 'Vänligen ange en giltig e-postadress';
+$messages['noemailwarning'] = 'Vänligen ange en giltig adress';
$messages['nonamewarning'] = 'Vänligen ange ett namn';
$messages['nopagesizewarning'] = 'Vänligen ange en sidstorlek';
$messages['norecipientwarning'] = 'Vänligen ange minst en mottagare';
$messages['notsentwarning'] = 'Meddelande har inte skickats. Vill du avbryta meddelandet?';
$messages['noldapserver'] = 'Vänligen ange en LDAP-server att söka';
$messages['nocontactsreturned'] = 'Inga kontakter hittades';
-$messages['nosearchname'] = 'Vänligen ange ett kontaktnamn eller e-postadress';
+$messages['nosearchname'] = 'Vänligen ange ett kontaktnamn eller en adress';
$messages['searchsuccessful'] = '$nr meddelanden hittades';
$messages['searchnomatch'] = 'Sökningen returnerade inga träffar';
$messages['searching'] = 'Söker...';
$messages['copyerror'] = 'Kunde inte kopiera några adresser';
$messages['sourceisreadonly'] = 'Denna adresskälla är skrivskyddad';
$messages['errorsavingcontact'] = 'Kunde inte spara kontakt-adressen';
+$messages['movingmessage'] = 'Flyttar meddelande...';
+$messages['receiptsent'] = 'Ett läskvitto har skickats';
+$messages['errorsendingreceipt'] = 'Kunde inte skicka läskvittot';
+$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';
?>
\ No newline at end of file
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | language/si/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |
- +-----------------------------------------------------------------------+
-
-*/
-
-$labels = array();
-$labels['welcome'] = '$product ආයුබොවන්';
-$labels['username'] = 'නම';
-$labels['password'] = 'මුරපදය';
-$labels['server'] = 'පද්ධතිය';
-$labels['login'] = 'අතුල්වීම';
-$labels['logout'] = 'පිටවීම';
-$labels['mail'] = 'විද්යුත් තැපෑල';
-$labels['settings'] = 'පොද්ගලික කට්ටල අංග';
-$labels['addressbook'] = 'ලිපින පොත';
-$labels['inbox'] = 'ඇතුල්වීම්';
-$labels['drafts'] = 'කටු සටහන්';
-$labels['sent'] = 'පිටවුම්';
-$labels['trash'] = 'ලටපට';
-$labels['junk'] = 'සුන්බුන්';
-$labels['subject'] = 'මාතෘකාව';
-$labels['from'] = 'යවන්නා';
-$labels['to'] = 'ලබන්නා';
-$labels['cc'] = 'පිටපත් කිරීම්';
-$labels['bcc'] = 'අඳ පිටපත් කිරීම්';
-$labels['replyto'] = 'පිළිතුරු සඳහා';
-$labels['date'] = 'දිනය';
-$labels['size'] = 'ප්රමාණය';
-$labels['priority'] = 'ප්රමුඛතාව';
-$labels['organization'] = 'සංවිධානය';
-$labels['reply-to'] = 'පිළිතුරු සඳහා';
-$labels['mailboxlist'] = 'ෆෝල්ඩරය';
-$labels['messagesfromto'] = '$from ගෙන් $to පනිවුඩ $count';
-$labels['messagenrof'] = 'පනිවුඩය $count න් $nr ';
-$labels['moveto'] = 'ගෙනයෑම...';
-$labels['download'] = 'බාගතකිරීම';
-$labels['filename'] = 'ගොනුවේ නම';
-$labels['filesize'] = 'ගොනුවේ ප්රමාණය';
-$labels['preferhtml'] = 'HTML විදහා පෙන්වීම';
-$labels['htmlmessage'] = 'HTML පනිවුඩය';
-$labels['prettydate'] = 'සුරුබුහුටි දින';
-$labels['addtoaddressbook'] = 'ලිපින පොතට එකතු කරන්න';
-$labels['sun'] = 'ඉරිදා';
-$labels['mon'] = 'සඳුදා';
-$labels['tue'] = 'අගහ';
-$labels['wed'] = 'බදාදා';
-$labels['thu'] = 'බ්රහස්';
-$labels['fri'] = 'සිකුරා';
-$labels['sat'] = 'සෙනසු';
-$labels['sunday'] = 'ඉරිදා';
-$labels['monday'] = 'සඳුදා';
-$labels['tuesday'] = 'අගහරුවාදා';
-$labels['wednesday'] = 'බදාදා';
-$labels['thursday'] = 'බ්රහස්පතිනිදා';
-$labels['friday'] = 'සිකුරාදා';
-$labels['saturday'] = 'සෙනසුරාදා';
-$labels['today'] = 'අද';
-$labels['checkmail'] = 'අඵත් පනිවුඩ සඳහා පිරික්සීම';
-$labels['writenewmessage'] = 'අඵත් පනිවුඩක්';
-$labels['replytomessage'] = 'පනිවුඩයට පිළිතුරු';
-$labels['replytoallmessage'] = 'එවන්නාට සහ සැමට පිළිතුරු';
-$labels['forwardmessage'] = 'පනිවුඩය ඉදිරියට';
-$labels['deletemessage'] = 'පනිවුඩය ලටපට තුලට ගෙනයන්න';
-$labels['printmessage'] = 'පනිවුඩය මුද්රනය කරන්න';
-$labels['previousmessage'] = 'කලින් පනිවුඩය පෙන්නන්න';
-$labels['previousmessages'] = 'කලින් පනිවුඩ කට්ටලය පෙන්නන්න';
-$labels['firstmessage'] = 'පළමුවන පනිවුඩය පෙන්නන්න';
-$labels['firstmessages'] = 'පළමුවන පනිවුඩ කට්ටලය පෙන්නන්න';
-$labels['nextmessage'] = 'මීළඟ පනිවුඩය පෙන්නන්න';
-$labels['nextmessages'] = 'මීළඟ පනිවුඩ කට්ටලය පෙන්නන්න';
-$labels['lastmessage'] = 'අවසාන පනිවුඩය පෙන්නන්න';
-$labels['lastmessages'] = 'අවසාන පනිවුඩ කට්ටලය පෙන්නන්න';
-$labels['backtolist'] = 'නැවතත් පනිවුඩ ලැයිස්තුවට';
-$labels['viewsource'] = 'මූලාශ්රය පෙන්නන්න';
-$labels['select'] = 'තෝරාගන්න';
-$labels['all'] = 'සියලු';
-$labels['none'] = 'තෝරානොගත්';
-$labels['unread'] = 'නොකියවූ';
-$labels['compact'] = 'සංයුක්ත';
-$labels['empty'] = 'රික්ත';
-$labels['purge'] = 'විරේචන';
-$labels['quota'] = 'භාවිතය';
-$labels['unknown'] = 'නාඳුනන';
-$labels['unlimited'] = 'අසීමිත';
-$labels['quicksearch'] = 'ඉක්මන් සෙවුම';
-$labels['resetsearch'] = 'සෙවුම යලි පිහිටවීම';
-$labels['compose'] = 'පනිවුඩයක් සෑදීම';
-$labels['sendmessage'] = 'පනිවුඩය දැන් යවන්න';
-$labels['savemessage'] = 'කටු සටහනේ තැන්පත කරන්න';
-$labels['addattachment'] = 'ගොනුවක් ඇතුලත් කිරීම';
-$labels['charset'] = 'අකුරැ කට්ටලය';
-$labels['editortype'] = 'සම්පාදන ආකාරය';
-$labels['returnreceipt'] = 'නැවත ලබන්නා';
-$labels['checkspelling'] = 'වචන පරීක්ෂාව';
-$labels['resumeediting'] = 'සම්පාදන නැවත ඇරඹීම';
-$labels['revertto'] = 'ආපසු ඒම';
-$labels['attachments'] = 'ගොනු';
-$labels['upload'] = 'ඇතුල් කරීම';
-$labels['close'] = 'වැසීම';
-$labels['low'] = 'අඩු';
-$labels['lowest'] = 'අඩුම';
-$labels['normal'] = 'සමක';
-$labels['high'] = 'ඉහළ';
-$labels['highest'] = 'ඉහළම';
-$labels['nosubject'] = '(මාතෘකාව නොමැති)';
-$labels['showimages'] = 'රූප පෙන්නන්න';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'පැහැදිලි අකුරු';
-$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'] = '$from ගෙන් $to ලිපින $count';
-$labels['print'] = 'මුද්රණය';
-$labels['export'] = 'නිර්යාත';
-$labels['previouspage'] = 'කලින් කට්ටලය පෙන්නන්න';
-$labels['firstpage'] = 'පළමුවන කට්ටලය පෙන්නන්න';
-$labels['nextpage'] = 'මීළඟ කට්ටලය පෙන්නන්න';
-$labels['lastpage'] = 'අවසාන කට්ටලය පෙන්නන්න';
-$labels['groups'] = 'කණ්ඩායම්';
-$labels['personaladrbook'] = 'පොද්ගලික ලිපිනය';
-$labels['settingsfor'] = 'සඳහා කට්ටල අංග';
-$labels['preferences'] = 'අභිමතය';
-$labels['userpreferences'] = 'පරිශීලක අභිමතය';
-$labels['editpreferences'] = 'පරිශීලක අභිමතය වෙනස් කිරීම්';
-$labels['identities'] = 'අනන්නයතාව';
-$labels['manageidentities'] = 'මෙම ගිණුමෙ අනන්නයතාව හැසිරවීම';
-$labels['newidentity'] = 'අඵත් අනන්නයතාව';
-$labels['newitem'] = 'අඵත් අයිතම';
-$labels['edititem'] = 'අයිතම වෙනස් කිරීම්';
-$labels['setdefault'] = 'පළමු තත්වයට';
-$labels['language'] = 'භාෂාව';
-$labels['timezone'] = 'කාල කලාපය';
-$labels['pagesize'] = 'පිටුවකටඅ පේළි';
-$labels['signature'] = 'අත්සන';
-$labels['dstactive'] = 'දිවා එළිය ඉතිරි කිරීම';
-$labels['htmleditor'] = 'HTML පනිවුඩයක් සෑදීම';
-$labels['htmlsignature'] = 'HTML අත්සන';
-$labels['previewpane'] = 'පූර්වදර්ශන කොටස පෙන්නන්න';
-$labels['autosavedraft'] = 'ස්වයංක්රීයව කටු සටහනේ තැන්පත් කරන්න';
-$labels['everynminutes'] = 'සෑම මිනිත්තු $n';
-$labels['never'] = 'කිසි විටෙකත් නැති';
-$labels['folder'] = 'ෆෝල්ඩරය';
-$labels['folders'] = 'ෆෝල්ඩර';
-$labels['foldername'] = 'ෆෝල්ඩරයේ නම';
-$labels['subscribed'] = 'සාමාජික';
-$labels['create'] = 'සෑදීම';
-$labels['createfolder'] = 'අඵත් ෆෝල්ඩරයක් සෑදීම';
-$labels['rename'] = 'නැවත නම් කිරීම';
-$labels['renamefolder'] = 'ෆෝල්ඩරය නැවත නම් කිරීම';
-$labels['deletefolder'] = 'ෆෝල්ඩරය මකා දැමීම';
-$labels['managefolders'] = 'හැසිරවීම හැසිරවීම';
-$labels['sortby'] = 'චිසින් වර්ග කිරීම';
-$labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම';
-$labels['sortdesc'] = 'අවරෝහණ වර්ග කිරීම';
-
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/si/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = '$product ආයුබොවන්';\r
+$labels['username'] = 'නම';\r
+$labels['password'] = 'මුරපදය';\r
+$labels['server'] = 'පද්ධතිය';\r
+$labels['login'] = 'අතුල්වීම';\r
+$labels['logout'] = 'පිටවීම';\r
+$labels['mail'] = 'විද්යුත් තැපෑල';\r
+$labels['settings'] = 'පොද්ගලික කට්ටල අංග';\r
+$labels['addressbook'] = 'ලිපින පොත';\r
+$labels['inbox'] = 'ඇතුල්වීම්';\r
+$labels['drafts'] = 'කටු සටහන්';\r
+$labels['sent'] = 'පිටවුම්';\r
+$labels['trash'] = 'ලටපට';\r
+$labels['junk'] = 'සුන්බුන්';\r
+$labels['subject'] = 'මාතෘකාව';\r
+$labels['from'] = 'යවන්නා';\r
+$labels['to'] = 'ලබන්නා';\r
+$labels['cc'] = 'පිටපත් කිරීම්';\r
+$labels['bcc'] = 'අඳ පිටපත් කිරීම්';\r
+$labels['replyto'] = 'පිළිතුරු සඳහා';\r
+$labels['date'] = 'දිනය';\r
+$labels['size'] = 'ප්රමාණය';\r
+$labels['priority'] = 'ප්රමුඛතාව';\r
+$labels['organization'] = 'සංවිධානය';\r
+$labels['reply-to'] = 'පිළිතුරු සඳහා';\r
+$labels['mailboxlist'] = 'ෆෝල්ඩරය';\r
+$labels['messagesfromto'] = '$from ගෙන් $to පනිවුඩ $count';\r
+$labels['messagenrof'] = 'පනිවුඩය $count න් $nr ';\r
+$labels['moveto'] = 'ගෙනයෑම...';\r
+$labels['download'] = 'බාගතකිරීම';\r
+$labels['filename'] = 'ගොනුවේ නම';\r
+$labels['filesize'] = 'ගොනුවේ ප්රමාණය';\r
+$labels['preferhtml'] = 'HTML විදහා පෙන්වීම';\r
+$labels['htmlmessage'] = 'HTML පනිවුඩය';\r
+$labels['prettydate'] = 'සුරුබුහුටි දින';\r
+$labels['addtoaddressbook'] = 'ලිපින පොතට එකතු කරන්න';\r
+$labels['sun'] = 'ඉරිදා';\r
+$labels['mon'] = 'සඳුදා';\r
+$labels['tue'] = 'අගහ';\r
+$labels['wed'] = 'බදාදා';\r
+$labels['thu'] = 'බ්රහස්';\r
+$labels['fri'] = 'සිකුරා';\r
+$labels['sat'] = 'සෙනසු';\r
+$labels['sunday'] = 'ඉරිදා';\r
+$labels['monday'] = 'සඳුදා';\r
+$labels['tuesday'] = 'අගහරුවාදා';\r
+$labels['wednesday'] = 'බදාදා';\r
+$labels['thursday'] = 'බ්රහස්පතිනිදා';\r
+$labels['friday'] = 'සිකුරාදා';\r
+$labels['saturday'] = 'සෙනසුරාදා';\r
+$labels['today'] = 'අද';\r
+$labels['checkmail'] = 'අඵත් පනිවුඩ සඳහා පිරික්සීම';\r
+$labels['writenewmessage'] = 'අඵත් පනිවුඩක්';\r
+$labels['replytomessage'] = 'පනිවුඩයට පිළිතුරු';\r
+$labels['replytoallmessage'] = 'එවන්නාට සහ සැමට පිළිතුරු';\r
+$labels['forwardmessage'] = 'පනිවුඩය ඉදිරියට';\r
+$labels['deletemessage'] = 'පනිවුඩය ලටපට තුලට ගෙනයන්න';\r
+$labels['movemessagetotrash'] = 'පණිවුඩය ලටපට වෙත ගෙන යන්න';\r
+$labels['printmessage'] = 'පනිවුඩය මුද්රනය කරන්න';\r
+$labels['previousmessage'] = 'කලින් පනිවුඩය පෙන්නන්න';\r
+$labels['previousmessages'] = 'කලින් පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['firstmessage'] = 'පළමුවන පනිවුඩය පෙන්නන්න';\r
+$labels['firstmessages'] = 'පළමුවන පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['nextmessage'] = 'මීළඟ පනිවුඩය පෙන්නන්න';\r
+$labels['nextmessages'] = 'මීළඟ පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['lastmessage'] = 'අවසාන පනිවුඩය පෙන්නන්න';\r
+$labels['lastmessages'] = 'අවසාන පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['backtolist'] = 'නැවතත් පනිවුඩ ලැයිස්තුවට';\r
+$labels['viewsource'] = 'මූලාශ්රය පෙන්නන්න';\r
+$labels['markmessages'] = 'පණිවුඩ';\r
+$labels['markread'] = 'කියවු ලෙස සළකුණු කරන්න';\r
+$labels['markunread'] = 'නොකියවු ලෙස සළකුණු කරන්න';\r
+$labels['select'] = 'තෝරාගන්න';\r
+$labels['all'] = 'සියලු';\r
+$labels['none'] = 'තෝරානොගත්';\r
+$labels['unread'] = 'නොකියවූ';\r
+$labels['compact'] = 'සංයුක්ත';\r
+$labels['empty'] = 'රික්ත';\r
+$labels['purge'] = 'විරේචන';\r
+$labels['quota'] = 'භාවිතය';\r
+$labels['unknown'] = 'නාඳුනන';\r
+$labels['unlimited'] = 'අසීමිත';\r
+$labels['quicksearch'] = 'ඉක්මන් සෙවුම';\r
+$labels['resetsearch'] = 'සෙවුම යලි පිහිටවීම';\r
+$labels['compose'] = 'පනිවුඩයක් සෑදීම';\r
+$labels['savemessage'] = 'කටු සටහනේ තැන්පත කරන්න';\r
+$labels['sendmessage'] = 'පනිවුඩය දැන් යවන්න';\r
+$labels['addattachment'] = 'ගොනුවක් ඇතුලත් කිරීම';\r
+$labels['charset'] = 'අකුරැ කට්ටලය';\r
+$labels['editortype'] = 'සම්පාදන ආකාරය';\r
+$labels['returnreceipt'] = 'නැවත ලබන්නා';\r
+$labels['checkspelling'] = 'වචන පරීක්ෂාව';\r
+$labels['resumeediting'] = 'සම්පාදන නැවත ඇරඹීම';\r
+$labels['revertto'] = 'ආපසු ඒම';\r
+$labels['attachments'] = 'ගොනු';\r
+$labels['upload'] = 'ඇතුල් කරීම';\r
+$labels['close'] = 'වැසීම';\r
+$labels['low'] = 'අඩු';\r
+$labels['lowest'] = 'අඩුම';\r
+$labels['normal'] = 'සමක';\r
+$labels['high'] = 'ඉහළ';\r
+$labels['highest'] = 'ඉහළම';\r
+$labels['nosubject'] = '(මාතෘකාව නොමැති)';\r
+$labels['showimages'] = 'රූප පෙන්නන්න';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'පැහැදිලි අකුරු';\r
+$labels['addcc'] = 'Cc එක් කරන්න';\r
+$labels['addbcc'] = 'Bcc එක් කරන්න';\r
+$labels['addreplyto'] = '\'පිළිතුරු සඳහා\' එක් කරන්න';\r
+$labels['mdnrequest'] = 'මෙම පණිවුඩය එවන්නා ඔබ එය කියවු බව අසයි. එය දැන්වීමට ඔබ කැමතිද?';\r
+$labels['receiptread'] = 'ලැබීම් ලදුපත (කියවීම)';\r
+$labels['yourmessage'] = 'මෙය ඔබගේ පණිවුඩයේ ලැබීම් ලදුපතයි';\r
+$labels['receiptnote'] = 'සටහන: ලැබීම් ලදුපත මගින් මෙම පණිවුඩය කියවූ බව හෝ තේරුම් ගත් බව ගම්ය නොවේ. පණිවුඩය ලබන්නාට පෙන්නුම් කල බවටට සාක්ෂියක් පමණි';\r
+$labels['name'] = 'නම පෙන්නන්න';\r
+$labels['firstname'] = 'පළමු නම';\r
+$labels['surname'] = 'අවසාන නම';\r
+$labels['email'] = 'ද්යුත් තැපෑල';\r
+$labels['addcontact'] = 'ලිපින පොතට එකතු කරන්න';\r
+$labels['editcontact'] = 'ලිපිනය වෙනස් කිරීම';\r
+$labels['edit'] = 'වෙනස් කිරීම';\r
+$labels['cancel'] = 'අවලංගු කරීම';\r
+$labels['save'] = 'තැන්පත් කිරීම';\r
+$labels['delete'] = 'මකා දැමීම';\r
+$labels['newcontact'] = 'අඵත් ලිපින පතක් සෑදීම';\r
+$labels['deletecontact'] = 'තෝරාගත් ලිපින මකා දැමන්න';\r
+$labels['composeto'] = 'පනිවුඩයක් සෑදීම';\r
+$labels['contactsfromto'] = '$from ගෙන් $to ලිපින $count';\r
+$labels['print'] = 'මුද්රණය';\r
+$labels['export'] = 'නිර්යාත';\r
+$labels['previouspage'] = 'කලින් කට්ටලය පෙන්නන්න';\r
+$labels['firstpage'] = 'පළමුවන කට්ටලය පෙන්නන්න';\r
+$labels['nextpage'] = 'මීළඟ කට්ටලය පෙන්නන්න';\r
+$labels['lastpage'] = 'අවසාන කට්ටලය පෙන්නන්න';\r
+$labels['groups'] = 'කණ්ඩායම්';\r
+$labels['personaladrbook'] = 'පොද්ගලික ලිපිනය';\r
+$labels['settingsfor'] = 'සඳහා කට්ටල අංග';\r
+$labels['preferences'] = 'අභිමතය';\r
+$labels['userpreferences'] = 'පරිශීලක අභිමතය';\r
+$labels['editpreferences'] = 'පරිශීලක අභිමතය වෙනස් කිරීම්';\r
+$labels['identities'] = 'අනන්නයතාව';\r
+$labels['manageidentities'] = 'මෙම ගිණුමෙ අනන්නයතාව හැසිරවීම';\r
+$labels['newidentity'] = 'අඵත් අනන්නයතාව';\r
+$labels['newitem'] = 'අඵත් අයිතම';\r
+$labels['edititem'] = 'අයිතම වෙනස් කිරීම්';\r
+$labels['setdefault'] = 'පළමු තත්වයට';\r
+$labels['language'] = 'භාෂාව';\r
+$labels['timezone'] = 'කාල කලාපය';\r
+$labels['pagesize'] = 'පිටුවකටඅ පේළි';\r
+$labels['signature'] = 'අත්සන';\r
+$labels['dstactive'] = 'දිවා එළිය ඉතිරි කිරීම';\r
+$labels['htmleditor'] = 'HTML පනිවුඩයක් සෑදීම';\r
+$labels['htmlsignature'] = 'HTML අත්සන';\r
+$labels['previewpane'] = 'පූර්වදර්ශන කොටස පෙන්නන්න';\r
+$labels['autosavedraft'] = 'ස්වයංක්රීයව කටු සටහනේ තැන්පත් කරන්න';\r
+$labels['everynminutes'] = 'සෑම මිනිත්තු $n';\r
+$labels['never'] = 'කිසි විටෙකත් නැති';\r
+$labels['folder'] = 'ෆෝල්ඩරය';\r
+$labels['folders'] = 'ෆෝල්ඩර';\r
+$labels['foldername'] = 'ෆෝල්ඩරයේ නම';\r
+$labels['subscribed'] = 'සාමාජික';\r
+$labels['messagecount'] = 'පනිවුඩ';\r
+$labels['create'] = 'සෑදීම';\r
+$labels['createfolder'] = 'අඵත් ෆෝල්ඩරයක් සෑදීම';\r
+$labels['rename'] = 'නැවත නම් කිරීම';\r
+$labels['renamefolder'] = 'ෆෝල්ඩරය නැවත නම් කිරීම';\r
+$labels['deletefolder'] = 'ෆෝල්ඩරය මකා දැමීම';\r
+$labels['managefolders'] = 'හැසිරවීම හැසිරවීම';\r
+$labels['sortby'] = 'චිසින් වර්ග කිරීම';\r
+$labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම';\r
+$labels['sortdesc'] = 'අවරෝහණ වර්ග කිරීම';\r
+\r
?>
\ No newline at end of file
-<?
-/*
- +-----------------------------------------------------------------------+
- | language/si/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |
- +-----------------------------------------------------------------------+
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'ඇතුල්වීම අසාර්ථකයි';
-$messages['cookiesdisabled'] = 'ඔබේ බෞසරය කුකී බාර ගන්නේ නැත';
-$messages['sessionerror'] = 'ඔබේ වාරය අවලංගු හෝ කාලය ඉකුත් වී ඇත';
-$messages['imaperror'] = 'IMAP සම්බන්ධතාවය අසාර්ථකයි';
-$messages['nomessagesfound'] = 'ලියුම් පෙට්ටියේ පනිවුඩ නැත';
-$messages['loggedout'] = 'ඔබගේ වාරය සාර්ථකව අවසන් විය. අයුබොවන්!';
-$messages['mailboxempty'] = 'ලියුම් පෙට්ටිය හිස්';
-$messages['loading'] = 'පූරනය...';
-$messages['loadingdata'] = 'දත්ත පූරනය...';
-$messages['checkingmail'] = 'අලුත් පනිවුඩ පරීක්ෂා කිරීම...';
-$messages['sendingmessage'] = 'පනිවුඩය යැවීම...';
-$messages['messagesent'] = 'පනිවුඩය සාර්ථකව යවන ලදී';
-$messages['savingmessage'] = 'පනිවුඩය තැන්පත් කීරීම...';
-$messages['messagesaved'] = 'පනිවුඩය කටු සටහනේ තැන්පත් විය';
-$messages['successfullysaved'] = 'සාර්ථකව තැන්පත විය';
-$messages['addedsuccessfully'] = 'ලිපිනය සාර්ථකව ලිපින පොතට එකතු කරන ලදී';
-$messages['contactexists'] = 'ඉහත ලිපිනය සහිත විද්යුත් තැපැල් ලිපිනයක් ලිපින පොතේ ඇත';
-$messages['blockedimages'] = 'ඔබගෙ පොද්ගලිකත්වය හේතුවෙන්, දුරස්ථ රූප අවහිර කර ඇත.';
-$messages['encryptedmessage'] = 'මෙම පනිවුඩය රහස් කේතනය කර ඇති බැවින් පෙන්විය නොහැක. සමාවන්න!';
-$messages['nocontactsfound'] = 'ලිපින සොයා ගත නොහැක';
-$messages['contactnotfound'] = 'ඉල්ලූ ලිපිනය සොයාගත නොහැක';
-$messages['sendingfailed'] = 'පනිවුඩය යැවීම අසාර්ථකයි';
-$messages['errorsaving'] = 'පනිවුඩය තැන්පත් කීරීමේදී දොෂයක් සිදු විය';
-$messages['errormoving'] = 'පනිවුඩය ගෙන යාමට නොහැක';
-$messages['errordeleting'] = 'පනිවුඩය මකා දැමීමට නොහැක';
-$messages['deletecontactconfirm'] = 'තෝරා ඇති ලිපින ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';
-$messages['deletemessagesconfirm'] = 'තෝරා ඇත පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';
-$messages['deletefolderconfirm'] = 'ෆෝල්ඩරය මකා දැමීමට සැබවින්ම වුවමනාද?';
-$messages['purgefolderconfirm'] = 'මෙම ෆෝල්ඩරයේ ඇති සියලුම පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';
-$messages['formincomplete'] = 'පෝරමය සම්පූර්ණයෙන් පුරවා නොමැත';
-$messages['noemailwarning'] = 'කරුණාකර වලංගු විද්යුත් තැපැල් ලිපිනයක් ඇතුලත් කරන්න';
-$messages['nonamewarning'] = 'කරුණාකර නම ඇතුලත් කරන්න';
-$messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප්රමානය ඇතුලත් කරන්න';
-$messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න';
-$messages['nosubjectwarning'] = '"මාතෘකාව" හිස්. මාතෘකාවක් අතුලත් කිරීමට ඔබ කැමතිද?';
-$messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?';
-$messages['notsentwarning'] = 'පනිවුඩය යැවීමට නොහැකි විය. ඔබට එය බැහැර කිරීමට වුවමනාද?';
-$messages['noldapserver'] = 'සෙවුම සඳහා කරුණාකර ldap සම්බන්ධතාවයක් තෝරා ගන්න';
-$messages['nocontactsreturned'] = 'ලිපින/ය සොයා ගත නොහැක';
-$messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න';
-$messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය';
-$messages['searchnomatch'] = 'සෙවුමට අදාල ගැලපීමක් නොමැත';
-$messages['searching'] = 'සොයමින් පවතී...';
-$messages['checking'] = 'පිරික්සමින් පවතී...';
-$messages['nospellerrors'] = 'වියාකරන දොෂ නොමැත';
-$messages['folderdeleted'] = 'ෆෝල්ඩරය සාර්ථකව මකා දමන ලදී';
-$messages['deletedsuccessfully'] = 'සාර්ථකව මකා දමන ලදී';
-$messages['converting'] = 'පනිවුඩයෙන් ආකෘතීකරණය ඉවත් කිරීම';
-$messages['messageopenerror'] = 'පනිවුඩය පූරනය කිරීමට නොහැක';
-$messages['fileuploaderror'] = 'ගොනුව ඇතුලත් කිරීමට නොහැක';
-$messages['filesizeerror'] = 'ඇතුලත් කල ගොනුවෙ ප්රමාණය උපරිම අගය $size ඉක්මවා ඇත';
-$messages['copysuccess'] = '$nr ලිපිනය සාර්ථකව පිටපත් කරන ලදී';
-$messages['copyerror'] = 'කවර ලිපිනයක්වත් හෝ පිටපත් කල නොහැක';
-$messages['sourceisreadonly'] = 'මෙම ලිපින මූලාශ්රය කියවීම සඳහා පමනි';
-$messages['errorsavingcontact'] = 'ලිපිනය තැන්පත් කීරීමට නොහැක';
-
+<?\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/si/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'ඇතුල්වීම අසාර්ථකයි';\r
+$messages['cookiesdisabled'] = 'ඔබේ බෞසරය කුකී බාර ගන්නේ නැත';\r
+$messages['sessionerror'] = 'ඔබේ වාරය අවලංගු හෝ කාලය ඉකුත් වී ඇත';\r
+$messages['imaperror'] = 'IMAP සම්බන්ධතාවය අසාර්ථකයි';\r
+$messages['nomessagesfound'] = 'ලියුම් පෙට්ටියේ පනිවුඩ නැත';\r
+$messages['loggedout'] = 'ඔබගේ වාරය සාර්ථකව අවසන් විය. අයුබොවන්!';\r
+$messages['mailboxempty'] = 'ලියුම් පෙට්ටිය හිස්';\r
+$messages['loading'] = 'පූරනය...';\r
+$messages['loadingdata'] = 'දත්ත පූරනය...';\r
+$messages['checkingmail'] = 'අලුත් පනිවුඩ පරීක්ෂා කිරීම...';\r
+$messages['sendingmessage'] = 'පනිවුඩය යැවීම...';\r
+$messages['messagesent'] = 'පනිවුඩය සාර්ථකව යවන ලදී';\r
+$messages['savingmessage'] = 'පනිවුඩය තැන්පත් කීරීම...';\r
+$messages['messagesaved'] = 'පනිවුඩය කටු සටහනේ තැන්පත් විය';\r
+$messages['successfullysaved'] = 'සාර්ථකව තැන්පත විය';\r
+$messages['addedsuccessfully'] = 'ලිපිනය සාර්ථකව ලිපින පොතට එකතු කරන ලදී';\r
+$messages['contactexists'] = 'ඉහත ලිපිනය සහිත විද්යුත් තැපැල් ලිපිනයක් ලිපින පොතේ ඇත';\r
+$messages['blockedimages'] = 'ඔබගෙ පොද්ගලිකත්වය හේතුවෙන්, දුරස්ථ රූප අවහිර කර ඇත.';\r
+$messages['encryptedmessage'] = 'මෙම පනිවුඩය රහස් කේතනය කර ඇති බැවින් පෙන්විය නොහැක. සමාවන්න!';\r
+$messages['nocontactsfound'] = 'ලිපින සොයා ගත නොහැක';\r
+$messages['contactnotfound'] = 'ඉල්ලූ ලිපිනය සොයාගත නොහැක';\r
+$messages['sendingfailed'] = 'පනිවුඩය යැවීම අසාර්ථකයි';\r
+$messages['errorsaving'] = 'පනිවුඩය තැන්පත් කීරීමේදී දොෂයක් සිදු විය';\r
+$messages['errormoving'] = 'පනිවුඩය ගෙන යාමට නොහැක';\r
+$messages['errordeleting'] = 'පනිවුඩය මකා දැමීමට නොහැක';\r
+$messages['deletecontactconfirm'] = 'තෝරා ඇති ලිපින ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['deletemessagesconfirm'] = 'තෝරා ඇත පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['deletefolderconfirm'] = 'ෆෝල්ඩරය මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['purgefolderconfirm'] = 'මෙම ෆෝල්ඩරයේ ඇති සියලුම පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['formincomplete'] = 'පෝරමය සම්පූර්ණයෙන් පුරවා නොමැත';\r
+$messages['noemailwarning'] = 'කරුණාකර වලංගු විද්යුත් තැපැල් ලිපිනයක් ඇතුලත් කරන්න';\r
+$messages['nonamewarning'] = 'කරුණාකර නම ඇතුලත් කරන්න';\r
+$messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප්රමානය ඇතුලත් කරන්න';\r
+$messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න';\r
+$messages['nosubjectwarning'] = '"මාතෘකාව" හිස්. මාතෘකාවක් අතුලත් කිරීමට ඔබ කැමතිද?';\r
+$messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?';\r
+$messages['notsentwarning'] = 'පනිවුඩය යැවීමට නොහැකි විය. ඔබට එය බැහැර කිරීමට වුවමනාද?';\r
+$messages['noldapserver'] = 'සෙවුම සඳහා කරුණාකර ldap සම්බන්ධතාවයක් තෝරා ගන්න';\r
+$messages['nocontactsreturned'] = 'ලිපින/ය සොයා ගත නොහැක';\r
+$messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න';\r
+$messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය';\r
+$messages['searchnomatch'] = 'සෙවුමට අදාල ගැලපීමක් නොමැත';\r
+$messages['searching'] = 'සොයමින් පවතී...';\r
+$messages['checking'] = 'පිරික්සමින් පවතී...';\r
+$messages['nospellerrors'] = 'වියාකරන දොෂ නොමැත';\r
+$messages['folderdeleted'] = 'ෆෝල්ඩරය සාර්ථකව මකා දමන ලදී';\r
+$messages['deletedsuccessfully'] = 'සාර්ථකව මකා දමන ලදී';\r
+$messages['converting'] = 'පනිවුඩයෙන් ආකෘතීකරණය ඉවත් කිරීම';\r
+$messages['messageopenerror'] = 'පනිවුඩය පූරනය කිරීමට නොහැක';\r
+$messages['fileuploaderror'] = 'ගොනුව ඇතුලත් කිරීමට නොහැක';\r
+$messages['filesizeerror'] = 'ඇතුලත් කල ගොනුවෙ ප්රමාණය උපරිම අගය $size ඉක්මවා ඇත';\r
+$messages['copysuccess'] = '$nr ලිපිනය සාර්ථකව පිටපත් කරන ලදී';\r
+$messages['copyerror'] = 'කවර ලිපිනයක්වත් හෝ පිටපත් කල නොහැක';\r
+$messages['sourceisreadonly'] = 'මෙම ලිපින මූලාශ්රය කියවීම සඳහා පමනි';\r
+$messages['errorsavingcontact'] = 'ලිපිනය තැන්පත් කීරීමට නොහැක';\r
+$messages['movingmessage'] = 'පනිවුඩය ගෙනයමින් පවතී...';\r
+$messages['receiptsent'] = 'කියවීම් භාර ගැනීම සාර්ථකව යවන ලදී';\r
+$messages['errorsendingreceipt'] = 'කියවීම් භාර ගැනීම යැවීමට නොහැක';\r
+$messages['nodeletelastidentity'] = 'අවසාන අනන්යතාවය මකා දැමිය නොහැක';\r
+$messages['addsubfolderhint'] = 'ෆෝල්ඩරය දැනට තෝරාගෙන ඇති ෆෝල්ඩරයෙහි අනු ෆෝල්ඩරයක් ලෙස සෑදේ';\r
+\r
?>
\ No newline at end of file
| language/sk/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Lukas Kraic <lukas.kraic@truni.sk> |
- | Marek Kutnar marek19@zmail.sk> |
+ | Author: Marek Kutnar <marek19@zmail.sk> |
+ | Lukas Kraic <lukas.kraic@truni.sk> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: labels.inc 1153 2008-02-28 20:04:12Z thomasb $
*/
$labels['replytomessage'] = 'Odpovedať';
$labels['replytoallmessage'] = 'Odpovedať všetkým';
$labels['forwardmessage'] = 'Poslať ďalej';
-$labels['deletemessage'] = 'Presuň správu do koša';
+$labels['deletemessage'] = 'Zmazať správu';
+$labels['movemessagetotrash'] = 'Presunúť správu do koša';
$labels['printmessage'] = 'Vytlač správu';
$labels['previousmessage'] = 'Zobraziť predchádzajúcu správu';
$labels['previousmessages'] = 'Zobraziť predchádzajúcu stránku správ';
$labels['lastmessages'] = 'Zobraziť poslednú stránku správ';
$labels['backtolist'] = 'Späť na zoznam správ';
$labels['viewsource'] = 'Ukáž zdroj správy';
+$labels['markmessages'] = 'Označ správy';
+$labels['markread'] = 'Ako prečítané';
+$labels['markunread'] = 'Ako neprečítané';
$labels['select'] = 'Výber';
$labels['all'] = 'Všetky';
$labels['none'] = 'Žiadnu';
$labels['quicksearch'] = 'Rýchle vyhľadávanie';
$labels['resetsearch'] = 'Vyčisti vyhľadávanie';
$labels['compose'] = 'Vytvoriť správu';
-$labels['sendmessage'] = 'Odoslať správu';
$labels['savemessage'] = 'Uložiť do rozpísaných';
+$labels['sendmessage'] = 'Odoslať správu';
$labels['addattachment'] = 'Pridať prílohu';
$labels['charset'] = 'Znaková sada';
$labels['editortype'] = 'Typ editora';
$labels['showimages'] = 'Ukáž obrázky';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Čisty text';
+$labels['addcc'] = 'Pridať kópiu';
+$labels['addbcc'] = 'Pridať skrytú kopiu';
+$labels['addreplyto'] = 'Pridať odpoveď';
+$labels['mdnrequest'] = 'Odosielateľ tejto správy chce byť upozornený na to, že ste správu obdržali. Chcete potvrdiť prijatie správy?';
+$labels['receiptread'] = 'Potvrdenie o prijatí správy';
+$labels['yourmessage'] = 'Toto je potvrdenie o prijatí Vašej správy';
+$labels['receiptnote'] = 'Poznámka: Toto potvrdenie negarantuje, že správa bola príjemcom prečítaná a porozumel jej obsahu.';
$labels['name'] = 'Celé meno';
$labels['firstname'] = 'Meno';
$labels['surname'] = 'Priezvisko';
$labels['folders'] = 'Zložky';
$labels['foldername'] = 'Meno zložky';
$labels['subscribed'] = 'Podpísaný';
+$labels['messagecount'] = 'Počet správ';
$labels['create'] = 'Vytvoriť';
$labels['createfolder'] = 'Vytvor novú zložku';
$labels['rename'] = 'Premenovať';
$labels['sortasc'] = 'Triediť vzostupne';
$labels['sortdesc'] = 'Triediť zostupne';
-?>
\ No newline at end of file
+?>
| language/sk/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: Lukas Kraic <lukas.kraic@truni.sk> |
- | Marek Kutnar marek19@zmail.sk> |
+ | Author: Marek Kutnar <marek19@zmail.sk> |
+ | Lukas Kraic <lukas.kraic@truni.sk> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+ @version $Id: messages.inc 1153 2008-02-28 20:04:12Z thomasb $
*/
$messages['copyerror'] = 'Nemôžem skopírovať žiadnu adresu';
$messages['sourceisreadonly'] = 'Tento zdroj adries je len na čítanie';
$messages['errorsavingcontact'] = 'Nemôžem uložit adresu kontaktu';
+$messages['movingmessage'] = 'Presúvam správu...';
+$messages['receiptsent'] = 'Potvrdenie o prijatí správy odoslané';
+$messages['errorsendingreceipt'] = 'Potvrdenie o prijatí správy nebolo možné odoslať';
+$messages['nodeletelastidentity'] = 'Identita sa nedá odstrániť, je posledná a musí zostať.';
+$messages['addsubfolderhint'] = 'Táto zložka bude vytvorená ako podzložka aktualne zvolenej zložky';
-?>
\ No newline at end of file
+?>
/*
- +--------------------------------------------------------------------------------------+
- | language/si/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +--------------------------------------------------------------------------------------+
- | Author: Andrej Sossi <asossi@dotcom.ts.it> |
- | Andrej Mocilnik <amocilnik@dotcom.ts.it> |
- +--------------------------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| language/sl/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Andrej Sossi <asossi@dotcom.ts.it> |
+| Andrej Mocilnik <amocilnik@dotcom.ts.it> |
++-----------------------------------------------------------------------+
- @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $
+@version $Id: labels.inc 1109 2008-02-17 20:22:05Z thomasb $
*/
$labels['subject'] = 'Zadeva';
$labels['from'] = 'Pošiljatelj';
$labels['to'] = 'Prejemnik';
-$labels['cc'] = 'Kopija';
+$labels['cc'] = 'Kp';
$labels['bcc'] = 'Skp';
$labels['replyto'] = 'Odgovor na';
$labels['date'] = 'Datum';
$labels['filesize'] = 'Velikost datoteke';
$labels['preferhtml'] = 'Prednostno HTML';
$labels['htmlmessage'] = 'HTML sporočilo';
-$labels['prettydate'] = 'Čitljivejši datumi';
+$labels['prettydate'] = 'Bolj čitljivi datumi';
$labels['addtoaddressbook'] = 'Dodaj v stike';
$labels['sun'] = 'Ned';
$labels['mon'] = 'Pon';
$labels['replytoallmessage'] = 'Odgovori pošiljatelju in vsem prejemnikom';
$labels['forwardmessage'] = 'Posreduj sporočilo';
$labels['deletemessage'] = 'Premakni sporočilo v smeti';
-$labels['printmessage'] = 'Tiskaj to sporočilo';
+$labels['movemessagetotrash'] = 'Premakni v smetnjak';
+$labels['printmessage'] = 'Natisni to sporočilo';
$labels['previousmessage'] = 'Prikaži prejšnje sporočilo';
-$labels['previousmessages'] = 'Prikaži prejšni set sporočil';
+$labels['previousmessages'] = 'Prikaži prejšnja sporočila';
$labels['firstmessage'] = 'Prikaži prvo sporočilo';
-$labels['firstmessages'] = 'Prikaži prvi set sporočil';
+$labels['firstmessages'] = 'Prikaži prva sporočila';
$labels['nextmessage'] = 'Prikaži naslednjo sporočilo';
-$labels['nextmessages'] = 'Prikaži naslednji set sporočil';
+$labels['nextmessages'] = 'Prikaži naslednja sporočila';
$labels['lastmessage'] = 'Prikaži zadnjo sporočilo';
-$labels['lastmessages'] = 'Prikaži zadnji set sporočil';
+$labels['lastmessages'] = 'Prikaži zadnja sporočila';
$labels['backtolist'] = 'Nazaj na seznam sporočil';
$labels['viewsource'] = 'Prikaži izvirno kodo';
+$labels['markmessages'] = 'Označi sporočilo';
+$labels['markread'] = 'Kot prebrano';
+$labels['markunread'] = 'Kot neprebrano';
$labels['select'] = 'Izberi';
$labels['all'] = 'Vse';
$labels['none'] = 'Nobenih';
$labels['unread'] = 'Neprebrano';
-$labels['compact'] = 'Stistni';
+$labels['compact'] = 'Stisni';
$labels['empty'] = 'Izprazni';
$labels['purge'] = 'Počisti';
$labels['quota'] = 'Poraba diska';
$labels['quicksearch'] = 'Hitri iskalnik';
$labels['resetsearch'] = 'Prekliči iskanje';
$labels['compose'] = 'Sestavi sporočilo';
-$labels['sendmessage'] = 'Pošlji sporočilo zdaj';
$labels['savemessage'] = 'Shrani kot osnutek';
+$labels['sendmessage'] = 'Pošlji sporočilo zdaj';
$labels['addattachment'] = 'Pripni datoteko';
$labels['charset'] = 'Nabor znakov';
$labels['editortype'] = 'Vrsta urejevalnika';
$labels['showimages'] = 'Prikaži slike';
$labels['htmltoggle'] = 'Obogateno besedilo (HTML)';
$labels['plaintoggle'] = 'Samo besedilo';
+$labels['addcc'] = 'Dodaj Kp';
+$labels['addbcc'] = 'Dodaj Skp';
+$labels['addreplyto'] = 'Dodaj naslov za odgovor';
+$labels['mdnrequest'] = 'Pošiljatelj tega sporočila je zaprosil za portdilo, ko vi preberete to sporočilo. Hočete poslati obvestilo?';
+$labels['receiptread'] = 'Potrdilo o prebranem sporočilu';
+$labels['yourmessage'] = 'To je potrdilo, da je bilo vaše sporočilo prebrano';
+$labels['receiptnote'] = 'Pozor: to je samo potrdilo, da vaše sporočilo je bilo prikazano na prejemnikovem računalniku. To še ne pomeni, da je prejemnik prebral ali razumel vsebino vašega sporočila.';
$labels['name'] = 'Ime za prikaz';
$labels['firstname'] = 'Ime';
$labels['surname'] = 'Priimek';
$labels['folders'] = 'Mape';
$labels['foldername'] = 'Ime mape';
$labels['subscribed'] = 'Vpisan';
+$labels['messagecount'] = 'Sporočila';
$labels['create'] = 'Ustvari';
$labels['createfolder'] = 'Ustvari novo mapo';
$labels['rename'] = 'Preimenuj';
$labels['sortasc'] = 'Uredi naraščajoče';
$labels['sortdesc'] = 'Uredi padajoče';
-?>
\ No newline at end of file
+?>
/*
- +--------------------------------------------------------------------------------------+
- | language/si/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +--------------------------------------------------------------------------------------+
- | Author: Andrej Sossi <asossi@dotcom.ts.it> |
- | Andrej Mocilnik <amocilnik@dotcom.ts.it> |
- +--------------------------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| language/sl/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Andrej Sossi <asossi@dotcom.ts.it> |
+| Andrej Mocilnik <amocilnik@dotcom.ts.it> |
++-----------------------------------------------------------------------+
- @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $
+@version $Id: messages.inc 1109 2008-02-17 20:22:05Z thomasb $
*/
$messages['checkingmail'] = 'Iščem nova sporočila...';
$messages['sendingmessage'] = 'Pošiljam sporočilo...';
$messages['messagesent'] = 'Sporočilo uspešno poslano';
-$messages['savingmessage'] = 'Shrenjujem sporočilo';
+$messages['savingmessage'] = 'Shranjujem sporočilo';
$messages['messagesaved'] = 'Sporočilo shranjeno v osnutke';
$messages['successfullysaved'] = 'Uspešno shranjeno';
$messages['addedsuccessfully'] = 'Vizitka uspešno dodana';
$messages['copyerror'] = 'Ne morem prepisati nobenega naslova';
$messages['sourceisreadonly'] = 'Izvirnik naslova je samo berljiv';
$messages['errorsavingcontact'] = 'Ne morem shraniti vizitke';
+$messages['movingmessage'] = 'Premakni besedilo...';
+$messages['receiptsent'] = 'Potrdilo o prebranem sporočilu je bilo uspešno poslano';
+$messages['errorsendingreceipt'] = 'Nemogoče poslati potrdilo o prebranem sporočilu';
+$messages['nodeletelastidentity'] = 'Nemogoče zbrisati identitete. Ta je edina, ki imate.';
+$messages['addsubfolderhint'] = 'Mapa bo narejena kot podmapa trenutno izbrane mape';
-?>
\ No newline at end of file
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/sq_AL/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Dashamir Hoxha <dhoxha@albaniaonline.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Mirëseerdhe te $product';
+$labels['username'] = 'Përdoruesi';
+$labels['password'] = 'Fjalëkalimi';
+$labels['server'] = 'Serveri';
+$labels['login'] = 'Hyr';
+$labels['logout'] = 'Dil';
+$labels['mail'] = 'Mesazhet';
+$labels['settings'] = 'Konfigurimi Personal';
+$labels['addressbook'] = 'Libri i Adresave';
+$labels['inbox'] = 'Ardhjet';
+$labels['drafts'] = 'Drafte';
+$labels['sent'] = 'Dërguar';
+$labels['trash'] = 'Fshirë';
+$labels['junk'] = 'Reklama';
+$labels['subject'] = 'Tema';
+$labels['from'] = 'Dërguesi';
+$labels['to'] = 'Marrësi';
+$labels['cc'] = 'Kopje';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Reply-To';
+$labels['date'] = 'Data';
+$labels['size'] = 'Madhësia';
+$labels['priority'] = 'Përparësia';
+$labels['organization'] = 'Organizata';
+$labels['reply-to'] = 'Reply-To';
+$labels['mailboxlist'] = 'Dosjet';
+$labels['messagesfromto'] = 'Mesazhet $from në $to nga $count';
+$labels['messagenrof'] = 'Mesazhi $nr nga $count';
+$labels['moveto'] = 'ço te...';
+$labels['download'] = 'shkarko';
+$labels['filename'] = 'Emër skedari';
+$labels['filesize'] = 'Madhësi skedari';
+$labels['preferhtml'] = 'Shfaq HTML';
+$labels['htmlmessage'] = 'Mesazh HTML';
+$labels['prettydate'] = 'Data të këndshme';
+$labels['addtoaddressbook'] = 'Shto në librin e adresave';
+$labels['sun'] = 'Dje';
+$labels['mon'] = 'Hën';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mër';
+$labels['thu'] = 'Enj';
+$labels['fri'] = 'Pre';
+$labels['sat'] = 'Sht';
+$labels['sunday'] = 'e djelë';
+$labels['monday'] = 'e hënë';
+$labels['tuesday'] = 'e martë';
+$labels['wednesday'] = 'e mërkurë';
+$labels['thursday'] = 'e enjte';
+$labels['friday'] = 'e premte';
+$labels['saturday'] = 'e shtunë';
+$labels['today'] = 'sot';
+$labels['checkmail'] = 'Shiko për mesazhe të reja';
+$labels['writenewmessage'] = 'Krijo një mesazh të ri';
+$labels['replytomessage'] = 'Ktheji përgjigje mesazhit';
+$labels['replytoallmessage'] = 'Ktheji përgjigje dërguesit dhe të gjithë marrësve';
+$labels['forwardmessage'] = 'Pasoje mesazhin';
+$labels['deletemessage'] = 'Fshije mesazhin';
+$labels['movemessagetotrash'] = 'Hidhe mesazhin në kosh';
+$labels['printmessage'] = 'Shtype këtë mesazh';
+$labels['previousmessage'] = 'Shfaq mesazhin e mëparshëm';
+$labels['previousmessages'] = 'Shfaq grupin e mëparshëm të mesazheve';
+$labels['firstmessage'] = 'Shfaq mesazhin e parë';
+$labels['firstmessages'] = 'Shfaq grupin e parë të mesazheve';
+$labels['nextmessage'] = 'Shfaq mesazhin pasardhës';
+$labels['nextmessages'] = 'Shfaq grupin tjetër të mesazheve';
+$labels['lastmessage'] = 'Shfaq mesazhin e fundit';
+$labels['lastmessages'] = 'Shfaq grupin e fundit të mesazheve';
+$labels['backtolist'] = 'Kthehu te lista e mesazheve';
+$labels['viewsource'] = 'Shfaq tekstin';
+$labels['markmessages'] = 'Shëno mesazhet';
+$labels['markread'] = 'Si të lexuara';
+$labels['markunread'] = 'Si të palexuara';
+$labels['select'] = 'Zgjidh';
+$labels['all'] = 'Të gjitha';
+$labels['none'] = 'Asnjë';
+$labels['unread'] = 'Palexuar';
+$labels['compact'] = 'Zvogëlo';
+$labels['empty'] = 'Boshatis';
+$labels['purge'] = 'Pastro';
+$labels['quota'] = 'Përdorimi i diskut';
+$labels['unknown'] = 'i panjohur';
+$labels['unlimited'] = 'i pakufizuar';
+$labels['quicksearch'] = 'Kërkim i shpejtë';
+$labels['resetsearch'] = 'Pastro kërkimin';
+$labels['compose'] = 'Shkruaj një mesazh';
+$labels['savemessage'] = 'Ruaje si draft';
+$labels['sendmessage'] = 'Dërgoje mesazhin tani';
+$labels['addattachment'] = 'Bashkangjit një skedar';
+$labels['charset'] = 'Bashkësi shkronjash';
+$labels['editortype'] = 'Lloj editori';
+$labels['returnreceipt'] = 'Njoftim marrje';
+$labels['checkspelling'] = 'Kontroll gabimesh';
+$labels['resumeediting'] = 'Vazhdo editimin';
+$labels['revertto'] = 'Ktheje te';
+$labels['attachments'] = 'Bashkangjitjet';
+$labels['upload'] = 'Ngarko';
+$labels['close'] = 'Mbyll';
+$labels['low'] = 'I ulët';
+$labels['lowest'] = 'Më i ulëti';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'I lartë';
+$labels['highest'] = 'Më i larti';
+$labels['nosubject'] = '(pa subjekt)';
+$labels['showimages'] = 'Shfaq imazhet';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'TEXT';
+$labels['addcc'] = 'Shto Cc';
+$labels['addbcc'] = 'Shto Bcc';
+$labels['addreplyto'] = 'Shto Reply-To';
+$labels['mdnrequest'] = 'Dërguesi i këtij mesazhi ka kërkuar që të njoftohet kur ju të lexoni këtë mesazh. Dëshironi ta njoftoni dërguesin?';
+$labels['receiptread'] = 'Njoftim Leximi';
+$labels['yourmessage'] = 'Ky është një njoftim leximi për mesazhin tuaj';
+$labels['receiptnote'] = 'Shënim: Ky njoftim tregon vetëm që mesazhi u shfaq në kompjuterin e marrësit. Nuk ka siguri që marrësi e ka lexuar ose e ka kuptuar përmbajtjen e mesazhit.';
+$labels['name'] = 'Emri që thirret';
+$labels['firstname'] = 'Emri';
+$labels['surname'] = 'Mbiemri';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Shto një kontakt të ri';
+$labels['editcontact'] = 'Ndrysho kontaktin';
+$labels['edit'] = 'Ndrysho';
+$labels['cancel'] = 'Anullo';
+$labels['save'] = 'Ruaj';
+$labels['delete'] = 'Fshi';
+$labels['newcontact'] = 'Krijo nje kartë të re kontakti';
+$labels['deletecontact'] = 'Fshi kontaktet e zgjedhura';
+$labels['composeto'] = 'Shkruaj email për';
+$labels['contactsfromto'] = 'Kontaktet $from në $to nga $count';
+$labels['print'] = 'Shtyp';
+$labels['export'] = 'Eksporto';
+$labels['previouspage'] = 'Shfaq grupin e mëparshëm';
+$labels['firstpage'] = 'Shfaq grupin e parë';
+$labels['nextpage'] = 'Shfaq grupin tjetër';
+$labels['lastpage'] = 'Shfaq grupin e fundit';
+$labels['groups'] = 'Grupet';
+$labels['personaladrbook'] = 'Adresat Personale';
+$labels['settingsfor'] = 'Konfigurimet për';
+$labels['preferences'] = 'Preferencat';
+$labels['userpreferences'] = 'Preferencat e përdoruesit';
+$labels['editpreferences'] = 'Ndrysho preferencat e përdoruesit';
+$labels['identities'] = 'Identitetet';
+$labels['manageidentities'] = 'Manaxho identitetet per këtë llogari';
+$labels['newidentity'] = 'Identitet i ri';
+$labels['newitem'] = 'Element i ri';
+$labels['edititem'] = 'Ndrysho element';
+$labels['setdefault'] = 'Bëje identitet kryesor';
+$labels['language'] = 'Gjuha';
+$labels['timezone'] = 'Brezi orar';
+$labels['pagesize'] = 'Rreshtat për faqe';
+$labels['signature'] = 'Nënshkrim';
+$labels['dstactive'] = 'Ndryshim ore';
+$labels['htmleditor'] = 'Shkruaj mesazhe HTML';
+$labels['htmlsignature'] = 'Nënshkrimi HTML';
+$labels['previewpane'] = 'Shiko si duket';
+$labels['autosavedraft'] = 'Ruaje automatikisht si draft';
+$labels['everynminutes'] = 'çdo $n minuta';
+$labels['never'] = 'kurrë';
+$labels['folder'] = 'Kutia';
+$labels['folders'] = 'Kutitë';
+$labels['foldername'] = 'Emër kutie';
+$labels['subscribed'] = 'Regjistruar';
+$labels['messagecount'] = 'Mesazhe';
+$labels['create'] = 'Krijo';
+$labels['createfolder'] = 'Krijo kuti të re';
+$labels['rename'] = 'Riemëro';
+$labels['renamefolder'] = 'Riemëro kutinë';
+$labels['deletefolder'] = 'Fshi kutinë';
+$labels['managefolders'] = 'Sistemo kutitë';
+$labels['sortby'] = 'Rradhit sipas';
+$labels['sortasc'] = 'Rradhitje rritëse';
+$labels['sortdesc'] = 'Rradhitje zbritëse';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/sq_AL/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Dashamir Hoxha <dhoxha@albaniaonline.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Hyrja dështoi';
+$messages['cookiesdisabled'] = 'Shfletuesi juaj nuk i pranon sheqerkat';
+$messages['sessionerror'] = 'Sesioni juaj është i pavlefshëm ose i ka kaluar afati';
+$messages['imaperror'] = 'Lidhja me serverin IMAP dështoi';
+$messages['nomessagesfound'] = 'Nuk ka mesazhe në këtë kuti postare';
+$messages['loggedout'] = 'Sesionin e mbyllët me sukses. Mirupafshim!';
+$messages['mailboxempty'] = 'Kutia postare është bosh';
+$messages['loading'] = 'Po ngarkohet...';
+$messages['loadingdata'] = 'Po ngarkohen të dhëna...';
+$messages['checkingmail'] = 'Po shoh për mesazhe të reja...';
+$messages['sendingmessage'] = 'Po dërgoj mesazhin...';
+$messages['messagesent'] = 'Mesazhi u dërgua me sukses';
+$messages['savingmessage'] = 'Po ruaj mesazhin...';
+$messages['messagesaved'] = 'Mesazhi u ruajt te kutia Drafte';
+$messages['successfullysaved'] = 'U ruajt me sukses';
+$messages['addedsuccessfully'] = 'Kontakti u shtua me sukses në librin e adresave';
+$messages['contactexists'] = 'Këtë adresë e-mail e ka një kontakt tjetër';
+$messages['blockedimages'] = 'Për të mbrojtur fshehtësinë tuaj, imazhet e largëta të këtij mesazhi janë bllokuar.';
+$messages['encryptedmessage'] = 'Ky është një mesazh i koduar dhe nuk mund te shfaqet. Më vjen keq!';
+$messages['nocontactsfound'] = 'Nuk ka kontakte';
+$messages['contactnotfound'] = 'Kontakti që kërkoni nuk gjendet';
+$messages['sendingfailed'] = 'Dërgimi i mesazhit dështoi';
+$messages['errorsaving'] = 'Pati nje problem gjatë ruajtjes';
+$messages['errormoving'] = 'Nuk e lëviza dot mesazhin';
+$messages['errordeleting'] = 'Nuk e fshiva dot mesazhin';
+$messages['deletecontactconfirm'] = 'Me të vërtetë doni ti fshini kontaktet e zgjedhura?';
+$messages['deletemessagesconfirm'] = 'Me të vërtetë doni ti fshini mesazhet e zgjedhura?';
+$messages['deletefolderconfirm'] = 'Me të vërtetë doni ta fshini këtë kuti?';
+$messages['purgefolderconfirm'] = 'Me të vërtetë doni ti fshini të gjitha mesazhet në këtë kuti?';
+$messages['formincomplete'] = 'Formulari nuk ishte i gjithi i plotësuar';
+$messages['noemailwarning'] = 'Ju lutem jepni një adresë email të rregullt';
+$messages['nonamewarning'] = 'Ju lutem jepni një emër';
+$messages['nopagesizewarning'] = 'Ju lutem jepni nje madhësi për faqen';
+$messages['norecipientwarning'] = 'Ju lutem shënoni të paktën një marrës';
+$messages['nosubjectwarning'] = 'Fusha e temës është bosh. Dëshironi të shënoni një temë tani?';
+$messages['nobodywarning'] = 'Ta dërgoj mesazhin pa tekst?';
+$messages['notsentwarning'] = 'Mesazhi nuk u dërgua. Doni ta hidhni poshtë mesazhin?';
+$messages['noldapserver'] = 'Ju lutem jepni një server ldap për të kërkuar';
+$messages['nocontactsreturned'] = 'Nuk gjeta kontakte';
+$messages['nosearchname'] = 'Ju lutem jepni një adresë email ose një emër kontakti';
+$messages['searchsuccessful'] = 'U gjetën $nr mesazhe';
+$messages['searchnomatch'] = 'Kërkimi nuk gjeti gjë';
+$messages['searching'] = 'Po kërkoj...';
+$messages['checking'] = 'Po kontrolloj...';
+$messages['nospellerrors'] = 'Nuk u gjetën gabime';
+$messages['folderdeleted'] = 'Kutia u fshi me sukses';
+$messages['deletedsuccessfully'] = 'U fshi me sukses';
+$messages['converting'] = 'Po i heq formatimin mesazhit...';
+$messages['messageopenerror'] = 'Nuk marr dot mesazhe nga serveri';
+$messages['fileuploaderror'] = 'Ngarkimi i skedarit dështoi';
+$messages['filesizeerror'] = 'Skedari i ngarkuar e kalon madhësinë kufi prej $size';
+$messages['copysuccess'] = 'U kopjuan me sukses $nr adresa';
+$messages['copyerror'] = 'Nuk munda të kopjoj adresat';
+$messages['sourceisreadonly'] = 'Ky burim adrese është vetëm i lexueshëm';
+$messages['errorsavingcontact'] = 'Nuk e ruajta dot adresën e kontaktit';
+$messages['movingmessage'] = 'Po lëviz mesazhin...';
+$messages['receiptsent'] = 'U dërgua me sukses një njoftim leximi';
+$messages['errorsendingreceipt'] = 'Nuk mund të dërgohet njoftimi';
+$messages['nodeletelastidentity'] = 'Ju nuk mund ta fshini këtë identitet sepse nuk ju ka mbetur tjetër.';
+$messages['addsubfolderhint'] = 'Kjo kuti do të krijohet si një nënkuti e asaj që është e zgjedhur';
+
+?>
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/sr_cyrillic/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Branko Kokanovic <branko.kokanovic@gmail.com |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = 'Добродошли на $product';\r
+$labels['username'] = 'Корисничко име';\r
+$labels['password'] = 'Лозинка';\r
+$labels['server'] = 'Сервер';\r
+$labels['login'] = 'Пријава';\r
+$labels['logout'] = 'Одјава';\r
+$labels['mail'] = 'Сандуче';\r
+$labels['settings'] = 'Подешавања';\r
+$labels['addressbook'] = 'Именик';\r
+$labels['inbox'] = 'Примљене';\r
+$labels['drafts'] = 'Снимљене';\r
+$labels['sent'] = 'Послате';\r
+$labels['trash'] = 'Канта';\r
+$labels['junk'] = 'Смеће';\r
+$labels['subject'] = 'Наслов';\r
+$labels['from'] = 'Од';\r
+$labels['to'] = 'За';\r
+$labels['cc'] = 'Cc';\r
+$labels['bcc'] = 'Bcc';\r
+$labels['replyto'] = 'Reply-To';\r
+$labels['date'] = 'Датум';\r
+$labels['size'] = 'Величина';\r
+$labels['priority'] = 'Приоритет';\r
+$labels['organization'] = 'Организација';\r
+$labels['reply-to'] = 'Reply-To';\r
+$labels['mailboxlist'] = 'Фасцикле';\r
+$labels['messagesfromto'] = 'Поруке од $from за $to од укупно $count';\r
+$labels['messagenrof'] = 'Порука број $nr од $count';\r
+$labels['moveto'] = 'пребаци у...';\r
+$labels['download'] = 'преузми (скидање)';\r
+$labels['filename'] = 'Име датотекеe';\r
+$labels['filesize'] = 'Величина датотеке';\r
+$labels['preferhtml'] = 'Предност дај ХТМЛ формату';\r
+$labels['htmlmessage'] = 'ХТМЛ формат поруке';\r
+$labels['prettydate'] = 'Форматирани датум';\r
+$labels['addtoaddressbook'] = 'Додај у именик';\r
+$labels['sun'] = 'Нед';\r
+$labels['mon'] = 'Пон';\r
+$labels['tue'] = 'Уто';\r
+$labels['wed'] = 'Сре';\r
+$labels['thu'] = 'Чет';\r
+$labels['fri'] = 'Пет';\r
+$labels['sat'] = 'Суб';\r
+$labels['sunday'] = 'Недеља';\r
+$labels['monday'] = 'Понедељак';\r
+$labels['tuesday'] = 'Уторак';\r
+$labels['wednesday'] = 'Среда';\r
+$labels['thursday'] = 'Четвртак';\r
+$labels['friday'] = 'Петак';\r
+$labels['saturday'] = 'Субота';\r
+$labels['today'] = 'данас';\r
+$labels['checkmail'] = 'Провера нових порука';\r
+$labels['writenewmessage'] = 'Нова порука';\r
+$labels['replytomessage'] = 'Одговори на поруку';\r
+$labels['replytoallmessage'] = 'Одговори пошиљаоцу и свим примаоцима';\r
+$labels['forwardmessage'] = 'Проследи поруку';\r
+$labels['deletemessage'] = 'Извриши поруку';\r
+$labels['movemessagetotrash'] = 'Пребаци поруку у канту';\r
+$labels['printmessage'] = 'Одштампај поруку';\r
+$labels['previousmessage'] = 'Прикажи претходну поруку';\r
+$labels['previousmessages'] = 'Прикажи претходни скуп порука';\r
+$labels['firstmessage'] = 'Прикажи прву поруку';\r
+$labels['firstmessages'] = 'Прикажи први скуп порука';\r
+$labels['nextmessage'] = 'Прикажи следећу поруку';\r
+$labels['nextmessages'] = 'Прикажи следећи скуп порука';\r
+$labels['lastmessage'] = 'Прикажи последњу поруку';\r
+$labels['lastmessages'] = 'Прикажи последњи скуп порука';\r
+$labels['backtolist'] = 'Повратак на листу порука';\r
+$labels['viewsource'] = 'Прикажи поруку у изворном облику';\r
+$labels['markmessages'] = 'Обележи поруке';\r
+$labels['markread'] = 'Као прочитане';\r
+$labels['markunread'] = 'Као непрочитане';\r
+$labels['select'] = 'Означи';\r
+$labels['all'] = 'Све';\r
+$labels['none'] = 'Ниједну';\r
+$labels['unread'] = 'Непрочитане';\r
+$labels['compact'] = 'Компакција';\r
+$labels['empty'] = 'Испразни';\r
+$labels['purge'] = 'Oчисти';\r
+$labels['quota'] = 'Квота';\r
+$labels['unknown'] = 'непозната';\r
+$labels['unlimited'] = 'бесконачна';\r
+$labels['quicksearch'] = 'Брза претрага';\r
+$labels['resetsearch'] = 'Прикажи све поруке';\r
+$labels['compose'] = 'Нова порука';\r
+$labels['savemessage'] = 'Сачувај у Снимљене';\r
+$labels['sendmessage'] = 'Пошаљи поруку';\r
+$labels['addattachment'] = 'Приложи датотеку';\r
+$labels['charset'] = 'Скуп карактера';\r
+$labels['editortype'] = 'Врста едитора';\r
+$labels['returnreceipt'] = 'Потврда о приспећу';\r
+$labels['checkspelling'] = 'Провера правописа';\r
+$labels['resumeediting'] = 'Повратак у режим писања';\r
+$labels['revertto'] = 'Врати се на';\r
+$labels['attachments'] = 'Прилози ';\r
+$labels['upload'] = 'Додај';\r
+$labels['close'] = 'Затвори';\r
+$labels['low'] = 'Низак';\r
+$labels['lowest'] = 'Најнижи';\r
+$labels['normal'] = 'Средњи';\r
+$labels['high'] = 'Висок';\r
+$labels['highest'] = 'Највиши';\r
+$labels['nosubject'] = '(без наслова)';\r
+$labels['showimages'] = 'Прикажи слике';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'Обичан текст';\r
+$labels['addcc'] = 'Додај Cc';\r
+$labels['addbcc'] = 'Додај Bcc';\r
+$labels['addreplyto'] = 'Додај Reply-To';\r
+$labels['mdnrequest'] = 'Пошиљалац ове поруке је замолио да буде обавештен када прочитате ову поруку. Да ли желите да обавестите пошиљаоца?';\r
+$labels['receiptread'] = 'Обавештење о приспећу (прочитана порука)';\r
+$labels['yourmessage'] = 'Ово је обавештење о приспећу за вашу поруку';\r
+$labels['receiptnote'] = 'Пажња: Ово обавештење само потврђује да је порука приказана на рачунару примаоца. Не постоји гаранција да је прималац прочитао или разумео садржај поруке.';\r
+$labels['name'] = 'Пуно име';\r
+$labels['firstname'] = 'Име';\r
+$labels['surname'] = 'Презиме';\r
+$labels['email'] = 'Е-мејл';\r
+$labels['addcontact'] = 'Додај нови контакт';\r
+$labels['editcontact'] = 'Измени контакт';\r
+$labels['edit'] = 'Измени';\r
+$labels['cancel'] = 'Поништи';\r
+$labels['save'] = 'Сачувај';\r
+$labels['delete'] = 'Обриши';\r
+$labels['newcontact'] = 'Додај нови контакт';\r
+$labels['deletecontact'] = 'Обриши одабране контакте';\r
+$labels['composeto'] = 'Напиши поруку...';\r
+$labels['contactsfromto'] = 'Контакти од $from до $to од укупно $count';\r
+$labels['print'] = 'Штампај';\r
+$labels['export'] = 'Извези';\r
+$labels['previouspage'] = 'Прикажи претходну страну';\r
+$labels['firstpage'] = 'Прикажи први скуп';\r
+$labels['nextpage'] = 'Прикажи следећу страну';\r
+$labels['lastpage'] = 'Прикажи последњи скуп';\r
+$labels['groups'] = 'Групе';\r
+$labels['personaladrbook'] = 'Личне адресе';\r
+$labels['settingsfor'] = 'Подешавања за';\r
+$labels['preferences'] = 'Подешавања';\r
+$labels['userpreferences'] = 'Општа подешавања';\r
+$labels['editpreferences'] = 'Измена општих подешавања';\r
+$labels['identities'] = 'Идентитети';\r
+$labels['manageidentities'] = 'Подеси идентитете за овај налог';\r
+$labels['newidentity'] = 'Додај идентитет';\r
+$labels['newitem'] = 'Нова ставка';\r
+$labels['edititem'] = 'Измена ставке';\r
+$labels['setdefault'] = 'Подеси подразумевано';\r
+$labels['language'] = 'Језик';\r
+$labels['timezone'] = 'Временска зона';\r
+$labels['pagesize'] = 'Редова по страни';\r
+$labels['signature'] = 'Потпис';\r
+$labels['dstactive'] = 'Летње померање времена';\r
+$labels['htmleditor'] = 'Састави HTML поруке';\r
+$labels['htmlsignature'] = 'HTML потпис';\r
+$labels['previewpane'] = 'Прикажи панел за преглед';\r
+$labels['autosavedraft'] = 'Аутоматски чувај у Снимљене';\r
+$labels['everynminutes'] = 'сваких $n минута';\r
+$labels['never'] = 'никад';\r
+$labels['folder'] = 'Фасцикла';\r
+$labels['folders'] = 'Фасцикле';\r
+$labels['foldername'] = 'Име фасцикле';\r
+$labels['subscribed'] = 'Потписана';\r
+$labels['messagecount'] = 'Поруке';\r
+$labels['create'] = 'Креирај';\r
+$labels['createfolder'] = 'Креирај нову фасциклу';\r
+$labels['rename'] = 'Преименуј';\r
+$labels['renamefolder'] = 'Преименуј фасциклу';\r
+$labels['deletefolder'] = 'Обриши фасциклу';\r
+$labels['managefolders'] = 'Подеси фасциклу';\r
+$labels['sortby'] = 'Сортирај по';\r
+$labels['sortasc'] = 'Сортирај растуће';\r
+$labels['sortdesc'] = 'Сортирај опадајуће';\r
+\r
+?>\r
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/sr_cyrillic/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Branko Kokanovic <branko.kokanovic@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'Неуспешно пријављивање';\r
+$messages['cookiesdisabled'] = 'Ваш интернет прегледач не подржава колачиће';\r
+$messages['sessionerror'] = 'Сесија није валидна или је истекла';\r
+$messages['imaperror'] = 'Неуспешна конекција на IMAP сервер';\r
+$messages['nomessagesfound'] = 'Немате порука у сандучету';\r
+$messages['loggedout'] = 'Успешно сте се одјавили.';\r
+$messages['mailboxempty'] = 'Сандуче је празно';\r
+$messages['loading'] = 'Учитавање...';\r
+$messages['loadingdata'] = 'Учитавање података...';\r
+$messages['checkingmail'] = 'Провера нових порука у току...';\r
+$messages['sendingmessage'] = 'Порука се шаље...';\r
+$messages['messagesent'] = 'Порука је успешно послата';\r
+$messages['savingmessage'] = 'Порука се снима...';\r
+$messages['messagesaved'] = 'Порука успешно сачувана у Снимљене';\r
+$messages['successfullysaved'] = 'Снимање успешно обављено';\r
+$messages['addedsuccessfully'] = 'Контакт успешно додат у именик';\r
+$messages['contactexists'] = 'Контакт са овом е-мејл адресом већ постоји у именику';\r
+$messages['blockedimages'] = 'Због заштите приватности, слике са удаљених сервера су блокиране';\r
+$messages['encryptedmessage'] = 'Ова порука је шифрована, па се не може приказати';\r
+$messages['nocontactsfound'] = 'Није пронађен ниједан контакт';\r
+$messages['contactnotfound'] = 'Жељени контакт није нађен';\r
+$messages['sendingfailed'] = 'Грешка при слању поруке';\r
+$messages['errorsaving'] = 'Грешка при снимању поруке';\r
+$messages['errormoving'] = 'Грешка при премештању поруке';\r
+$messages['errordeleting'] = 'Грешка при брисању поруке';\r
+$messages['deletecontactconfirm'] = 'Да ли стварно желите да обришете изабране контакте?';\r
+$messages['deletemessagesconfirm'] = 'Да ли стварно желите да обришете изабране поруке?';\r
+$messages['deletefolderconfirm'] = 'Да ли заиста желите да обришете изабрану фасциклу?';\r
+$messages['purgefolderconfirm'] = 'Да ли заиста желите да обришете све поруке у фасцикли?';\r
+$messages['formincomplete'] = 'Формулар није у целости попуњен';\r
+$messages['noemailwarning'] = 'Унесите валидну е-мејл адресу';\r
+$messages['nonamewarning'] = 'Унесите име';\r
+$messages['nopagesizewarning'] = 'Унесите величину странице';\r
+$messages['norecipientwarning'] = 'Унесите примаоца/примаоце (За)';\r
+$messages['nosubjectwarning'] = 'Поље \'Наслов\' је празно. Желите ли да унесете наслов?';\r
+$messages['nobodywarning'] = 'Да ли желите да пошаљете поруку без текста?';\r
+$messages['notsentwarning'] = 'Порука није послата. Да ли желите да одбаците ову поруку?';\r
+$messages['noldapserver'] = 'Унесите LDAP сервер за претрагу';\r
+$messages['nocontactsreturned'] = 'Није пронађен ниједан контакт';\r
+$messages['nosearchname'] = 'Унесите име или е-мејл адресу';\r
+$messages['searchsuccessful'] = 'Број пронађених порука: $nr';\r
+$messages['searchnomatch'] = 'Тражена фраза није пронађена ни у једној поруци';\r
+$messages['searching'] = 'Претрага у току...';\r
+$messages['checking'] = 'Провера у току...';\r
+$messages['nospellerrors'] = 'Није пронађена ниједна правописна грешка';\r
+$messages['folderdeleted'] = 'Фасцикла успешно обрисана';\r
+$messages['deletedsuccessfully'] = 'Брисање успешно';\r
+$messages['converting'] = 'Уклањање форматирања из поруке...';\r
+$messages['messageopenerror'] = 'Порука се не може учитати са сервера';\r
+$messages['fileuploaderror'] = 'Слање датотеке неуспешно';\r
+$messages['filesizeerror'] = 'Послата датотека не може да прекорачи величину од $size';\r
+$messages['copysuccess'] = 'Успешно копирано $nr адреса';\r
+$messages['copyerror'] = 'Немогуће је ископирати иједну адресу';\r
+$messages['sourceisreadonly'] = 'Овај извор адресе је само за читање';\r
+$messages['errorsavingcontact'] = 'Неуспело снимање адресе контакта';\r
+$messages['movingmessage'] = 'Премештам поруку...';\r
+$messages['receiptsent'] = 'Успешно послато обавештење о приспећу';\r
+$messages['errorsendingreceipt'] = 'Неуспело слање обавештења о приспећу';\r
+$messages['nodeletelastidentity'] = 'Не можете обрисати овај идентитет, он Вам је последњи.';\r
+$messages['addsubfolderhint'] = 'Ова фасцикла ће бити креирана као подфасцикла тренутне';\r
+\r
+?>\r
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/sr_latin/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Viktor Varga <vile@neobee.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = 'Dobrodošli na $product';
+$labels['username'] = 'Korisničko ime';
+$labels['password'] = 'Lozinka';
+$labels['server'] = 'Server';
+$labels['login'] = 'Prijava';
+
+// taskbar
+$labels['logout'] = 'Odjava';
+$labels['mail'] = 'Sanduče';
+$labels['settings'] = 'Podešavanja';
+$labels['addressbook'] = 'Imenik';
+
+// mailbox names
+$labels['inbox'] = 'Inbox';
+$labels['drafts'] = 'Drafts';
+$labels['sent'] = 'Sent';
+$labels['trash'] = 'Trash';
+$labels['junk'] = 'Junk';
+
+// message listing
+$labels['subject'] = 'Naslov';
+$labels['from'] = 'Od';
+$labels['to'] = 'Za';
+$labels['cc'] = 'Cc';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Reply-To';
+$labels['date'] = 'Datum';
+$labels['size'] = 'Veličina';
+$labels['priority'] = 'Prioritet';
+$labels['organization'] = 'Organizacija';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'Fascikle';
+$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count';
+$labels['messagenrof'] = 'Poruka broj $nr od $count';
+
+$labels['moveto'] = 'prebaci u...';
+$labels['download'] = 'preuzmi (download)';
+
+$labels['filename'] = 'Ime datoteke';
+$labels['filesize'] = 'Veličina datoteke';
+
+$labels['preferhtml'] = 'HTML format u prednosti';
+$labels['htmlmessage'] = 'HTML format poruke';
+$labels['prettydate'] = 'Formatiran datum';
+
+$labels['addtoaddressbook'] = 'Dodaj u imenik';
+
+// weekdays short
+$labels['sun'] = 'Ned';
+$labels['mon'] = 'Pon';
+$labels['tue'] = 'Uto';
+$labels['wed'] = 'Sre';
+$labels['thu'] = 'Čet';
+$labels['fri'] = 'Pet';
+$labels['sat'] = 'Sub';
+
+// weekdays long
+$labels['sunday'] = 'Nedelja';
+$labels['monday'] = 'Ponedeljak';
+$labels['tuesday'] = 'Utorak';
+$labels['wednesday'] = 'Sreda';
+$labels['thursday'] = 'Četvrtak';
+$labels['friday'] = 'Petak';
+$labels['saturday'] = 'Subota';
+
+$labels['today'] = 'danas';
+
+// toolbar buttons
+$labels['checkmail'] = 'Provera novih poruka';
+$labels['writenewmessage'] = 'Nova poruka';
+$labels['replytomessage'] = 'Odgovori na poruku';
+$labels['replytoallmessage'] = 'Odgovori pošiljaocu i svim primaocima';
+$labels['forwardmessage'] = 'Prosledi poruku';
+$labels['deletemessage'] = 'Prebaci poruku u korpu (Trash)';
+$labels['printmessage'] = 'Odštampaj poruku';
+$labels['previousmessages'] = 'Prikaži prethodni skup poruka';
+$labels['nextmessages'] = 'Prikaži sledeći skup poruka';
+$labels['backtolist'] = 'Povratak na listu poruka';
+$labels['viewsource'] = 'Prikaži poruku u izvornom obliku';
+
+$labels['select'] = 'Obeleži';
+$labels['all'] = 'Sve';
+$labels['none'] = 'Nijednu';
+$labels['unread'] = 'Nepročitane';
+
+$labels['compact'] = 'Kompakcija';
+$labels['empty'] = 'Izprazni';
+$labels['purge'] = 'Očisti';
+
+$labels['quota'] = 'Kvota';
+$labels['unknown'] = 'nepoznato';
+$labels['unlimited'] = 'beskonačna';
+
+$labels['quicksearch'] = 'Brza pretraga';
+$labels['resetsearch'] = 'Prikaži sve poruke';
+
+// message compose
+$labels['compose'] = 'Nova poruka';
+$labels['savemessage'] = 'Sačuvaj u \'Drafts\'';
+$labels['sendmessage'] = 'Pošalji poruku';
+$labels['addattachment'] = 'Priloži datoteku';
+$labels['charset'] = 'Karakter-set';
+$labels['returnreceipt'] = 'Potvrda o prispeću poruke';
+
+$labels['checkspelling'] = 'Provera pravopisa';
+$labels['resumeediting'] = 'Povratak u režim pisanja';
+$labels['revertto'] = 'Revert to';
+
+$labels['attachments'] = 'Prilozi (Attachments)';
+$labels['upload'] = 'Dodaj';
+$labels['close'] = 'Zatvori';
+
+$labels['low'] = 'Nizak';
+$labels['lowest'] = 'Najniži';
+$labels['normal'] = 'Srednji';
+$labels['high'] = 'Visok';
+$labels['highest'] = 'Najviši';
+
+$labels['nosubject'] = '(bez naslova)';
+$labels['showimages'] = 'Prikaži slike';
+
+// address boook
+$labels['name'] = 'Puno ime';
+$labels['firstname'] = 'Ime';
+$labels['surname'] = 'Prezime';
+$labels['email'] = 'E-Mail';
+
+$labels['addcontact'] = 'Dodaj novi kontakt';
+$labels['editcontact'] = 'Izmeni kontakt';
+
+$labels['edit'] = 'Izmeni';
+$labels['cancel'] = 'Otkaži';
+$labels['save'] = 'Sačuvaj';
+$labels['delete'] = 'Obriši';
+
+$labels['newcontact'] = 'Dodaj novi kontakt';
+$labels['deletecontact'] = 'Obriši odabrane kontakte';
+$labels['composeto'] = 'Napiši mail...';
+$labels['contactsfromto'] = 'Kontakti od $from do $to od ukupno $count';
+$labels['print'] = 'Štampaj';
+$labels['export'] = 'Izvezi';
+
+$labels['previouspage'] = 'Prikaži predhodni skup';
+$labels['nextpage'] = 'Prikaži sledeći skup';
+
+// LDAP search
+$labels['ldapsearch'] = 'Pretraga LDAP imenika';
+
+$labels['ldappublicsearchname'] = 'Ime kontakta';
+$labels['ldappublicsearchtype'] = 'Potpuna fraza?';
+$labels['ldappublicserverselect'] = 'Odaberi servere';
+$labels['ldappublicsearchfield'] = 'Pretraži na';
+$labels['ldappublicsearchform'] = 'Pretraži kontakte';
+$labels['ldappublicsearch'] = 'Pretraga';
+
+// settings
+$labels['settingsfor'] = 'Podešavanja za';
+
+$labels['preferences'] = 'Podešavanja';
+$labels['userpreferences'] = 'Opšta podešavanja';
+$labels['editpreferences'] = 'Izmena opštih podešavanja';
+
+$labels['identities'] = 'Identiteti';
+$labels['manageidentities'] = 'Podesi identitete za ovaj nalog';
+$labels['newidentity'] = 'Dodaj identitet';
+
+$labels['newitem'] = 'New item';
+$labels['edititem'] = 'Edit item';
+
+$labels['setdefault'] = 'Set default';
+$labels['language'] = 'Jezik';
+$labels['timezone'] = 'Vremenska zona';
+$labels['pagesize'] = 'Redova po stranici';
+$labels['signature'] = 'Potpis';
+$labels['dstactive'] = 'Letnje pomeranje vremena';
+
+$labels['folder'] = 'Fascikla';
+$labels['folders'] = 'Fascikle';
+$labels['foldername'] = 'Ime fascikle';
+$labels['subscribed'] = 'Subscribed';
+$labels['create'] = 'Kreiraj';
+$labels['createfolder'] = 'Kreiraj novu fasciklu';
+$labels['rename'] = 'Preimenuj';
+$labels['renamefolder'] = 'Preimenuj Fasciklu';
+$labels['deletefolder'] = 'Obriši Fasciklu';
+$labels['managefolders'] = 'Podesi Fasciklu';
+
+$labels['sortby'] = 'Sortiraj po';
+$labels['sortasc'] = 'Sortiraj rastućim nizom';
+$labels['sortdesc'] = 'Sortiraj opadajućim nizom';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/sr_latin/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Viktor Varga <vile@neobee.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Prijava neuspešna';
+$messages['cookiesdisabled'] = 'Vaš pretraživač ne podržava kolačiće (cookies)';
+$messages['sessionerror'] = 'Sesija je nije validna ili je istekla';
+$messages['imaperror'] = 'Neuspešna konekcija na IMAP server';
+$messages['nomessagesfound'] = 'Nema poruka u sandučetu';
+$messages['loggedout'] = 'Uspešno ste se odjavili.';
+$messages['mailboxempty'] = 'Sanduše je prazno';
+$messages['loading'] = 'Učitavanje...';
+$messages['loadingdata'] = 'Učitavanje podataka...';
+$messages['checkingmail'] = 'Provera novih poruka u toku...';
+$messages['sendingmessage'] = 'Poruka se šalje...';
+$messages['messagesent'] = 'Poruka je uspešno poslana';
+$messages['savingmessage'] = 'Poruka se snima...';
+$messages['messagesaved'] = 'Poruka uspešno sačuvana u \'Drafts\'';
+$messages['successfullysaved'] = 'Snimanje uspešno obavljeno';
+$messages['addedsuccessfully'] = 'Kontakt uspešno dodat u imenik';
+$messages['contactexists'] = 'Kontakt sa ovom e-mail adresom već postoji u imeniku';
+$messages['blockedimages'] = 'Zbog zaštite privatnosti, slike sa udaljenih servera su blokirane.';
+$messages['encryptedmessage'] = 'Ova poruka je šifrovana pa se ne može prikazati';
+$messages['nocontactsfound'] = 'Imenik je prazan';
+$messages['sendingfailed'] = 'Greška pri slanju poruke';
+$messages['errorsaving'] = 'Greška pri snimanju';
+$messages['errormoving'] = 'Greška pri premeštanju poruke';
+$messages['errordeleting'] = 'Greška pri brisanju poruke';
+$messages['deletecontactconfirm'] = 'Da li želite da obrišete izabrane kontakte?';
+$messages['deletefolderconfirm'] = 'Da li zaista želite da obrišete ovu fasciklu?';
+$messages['purgefolderconfirm'] = 'Da li zaista želite da obrišete sve poruke u fascilli?';
+$messages['formincomplete'] = 'Forma nije u celosti popunjena';
+$messages['noemailwarning'] = 'Unesite validnu e-mail adresu';
+$messages['nonamewarning'] = 'Unesite ime';
+$messages['nopagesizewarning'] = 'Unesite veličinu stranice';
+$messages['norecipientwarning'] = 'Unesite primaoca / primaoce (ZA)';
+$messages['nosubjectwarning'] = 'Polje \'Naslov\' je prazno. Želite li da unesete naslov?';
+$messages['nobodywarning'] = 'Da li želite da pošaljete poruku bez teksta?';
+$messages['notsentwarning'] = 'Poruka nije poslana. Da li želite da odbacite ovu poruku?';
+$messages['noldapserver'] = 'Unesite LDAP server za pretragu';
+$messages['nocontactsreturned'] = 'Nije pronađen ni jedan kontakt';
+$messages['nosearchname'] = 'Unesite ime ili e-mail adresu';
+$messages['searchsuccessful'] = 'Broj pronađenih poruka: $nr';
+$messages['searchnomatch'] = 'Tražena fraza nije pronađena ni u jednoj poruci';
+$messages['searching'] = 'Pretraga u toku...';
+$messages['checking'] = 'Provera u toku...';
+$messages['nospellerrors'] = 'Nije pronađena ni jedna pravopisna greška';
+$messages['folderdeleted'] = 'Fascikla uspešno obrisana';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/th_TH/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Wiraphan Treeratphan <webmaster@modoeye.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'ยินดีต้อนรับสู่ $product';
+$labels['username'] = 'บัญชีผู้ใช้';
+$labels['password'] = 'รหัสผ่าน';
+$labels['server'] = 'เซิร์ฟเวอร์';
+$labels['login'] = 'เข้าสู่ระบบ';
+$labels['logout'] = 'ออกจากระบบ';
+$labels['mail'] = 'อีเมล์';
+$labels['settings'] = 'ปรับแต่งค่าส่วนตัว';
+$labels['addressbook'] = 'สมุดรายชื่อ';
+$labels['inbox'] = 'กล่องขาเข้า';
+$labels['drafts'] = 'กล่องจดหมายร่าง';
+$labels['sent'] = 'กล่องขาออก';
+$labels['trash'] = 'ถังขยะ';
+$labels['junk'] = 'กล่องจดหมายขยะ';
+$labels['spam'] = 'กล่องจดหมายขยะ';
+$labels['subject'] = 'หัวจดหมาย';
+$labels['from'] = 'ผู้ส่ง';
+$labels['to'] = 'ผู้รับ';
+$labels['cc'] = 'คัดลอก';
+$labels['bcc'] = 'แอบสำเนาถึง';
+$labels['replyto'] = 'ตอบกลับ';
+$labels['date'] = 'วันที่';
+$labels['size'] = 'ขนาด';
+$labels['priority'] = 'ระดับความสำคัญ';
+$labels['organization'] = 'องค์กร';
+$labels['reply-to'] = 'ตอบกลับ';
+$labels['mailboxlist'] = 'กล่องจดหมาย';
+$labels['messagesfromto'] = 'จดหมายจาก $from ถึง $to จำนวน $count ฉบับ';
+$labels['messagenrof'] = 'จดหมายฉบับที่ $nr จาก $count ฉบับ';
+$labels['moveto'] = 'ย้ายไป...';
+$labels['download'] = 'ดาวน์โหลด';
+$labels['filename'] = 'ชื่อไฟล์';
+$labels['filesize'] = 'ขนาดไฟล์';
+$labels['preferhtml'] = 'อ่านแบบ HTML';
+$labels['htmlmessage'] = 'จดหมาย HTML';
+$labels['prettydate'] = 'แสดงวันที่แบบย่อ';
+$labels['addtoaddressbook'] = 'บันทึกในสมุดรายชื่อ';
+$labels['sun'] = 'อ';
+$labels['mon'] = 'จ';
+$labels['tue'] = 'อ';
+$labels['wed'] = 'พ';
+$labels['thu'] = 'พฤ';
+$labels['fri'] = 'ศ';
+$labels['sat'] = 'ส';
+$labels['sunday'] = 'วันอาทิตย์';
+$labels['monday'] = 'วันจันทร์';
+$labels['tuesday'] = 'วันอังคาร';
+$labels['wednesday'] = 'วันพุธ';
+$labels['thursday'] = 'วันพฤหัสบดี';
+$labels['friday'] = 'วันศุกร์';
+$labels['saturday'] = 'วันเสาร์';
+$labels['today'] = 'วันนี้';
+$labels['checkmail'] = 'ตรวจสอบจดหมายใหม่';
+$labels['writenewmessage'] = 'สร้างจดหมายใหม่';
+$labels['replytomessage'] = 'ตอบกลับจดหมาย';
+$labels['replytoallmessage'] = 'ตอบกลับถึงทุกคนในจดหมาย';
+$labels['forwardmessage'] = 'ส่งต่อจดหมาย';
+$labels['deletemessage'] = 'ลบจดหมาย';
+$labels['printmessage'] = 'พิมพ์จดหมาย';
+$labels['previousmessage'] = 'แสดงจดหมายฉบับที่แล้ว';
+$labels['previousmessages'] = 'จดหมายฉบับก่อนหน้า';
+$labels['firstmessage'] = 'แสดงจดหมายฉบับแรก';
+$labels['nextmessage'] = 'แสดงจดหมายฉบับต่อไป';
+$labels['nextmessages'] = 'จดหมายฉบับถัดไป';
+$labels['lastmessage'] = 'แสดงจดหมายฉบับล่าสุด';
+$labels['backtolist'] = 'กลับไปยังรายการจดหมาย';
+$labels['viewsource'] = 'แสดง source';
+$labels['select'] = 'เลือก';
+$labels['all'] = 'ทั้งหมด';
+$labels['none'] = 'ไม่เลือก';
+$labels['unread'] = 'จดหมายที่ไม่ได้อ่าน';
+$labels['compact'] = 'แบบย่อ';
+$labels['empty'] = 'ว่างเปล่า';
+$labels['purge'] = 'ลบทั้งหมด';
+$labels['quota'] = 'พื้นที่ใช้งาน';
+$labels['unknown'] = 'ไม่ทราบ';
+$labels['unlimited'] = 'ไม่จำกัด';
+$labels['quicksearch'] = 'ค้นหาแบบด่วน';
+$labels['resetsearch'] = 'ล้างการค้นหา';
+$labels['compose'] = 'เขียนจดหมายใหม่';
+$labels['savemessage'] = 'บันทึกฉบับร่าง';
+$labels['sendmessage'] = 'ส่งจดหมาย';
+$labels['addattachment'] = 'แนบไฟล์';
+$labels['charset'] = 'Charset';
+$labels['returnreceipt'] = 'ตอบกลับผู้รับ';
+$labels['checkspelling'] = 'ตรวจสอบคำผิด';
+$labels['resumeediting'] = 'แก้ไขต่อ';
+$labels['revertto'] = 'ย้นกลับไปยัง';
+$labels['attachments'] = 'ไฟล์แนบ';
+$labels['upload'] = 'อัพโหลด';
+$labels['close'] = 'ปิด';
+$labels['low'] = 'ต่ำ';
+$labels['lowest'] = 'ต่ำสุด';
+$labels['normal'] = 'ปกติ';
+$labels['high'] = 'สูง';
+$labels['highest'] = 'สูงสุด';
+$labels['nosubject'] = '(ไม่มีหัวข้อ)';
+$labels['showimages'] = 'แสดงรูป';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Plain text';
+$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'] = 'รายชื่อ $from ถึง $to จำนวน $count';
+$labels['print'] = 'พิมพ์';
+$labels['export'] = 'ส่งออก';
+$labels['previouspage'] = 'หน้าที่แล้ว';
+$labels['nextpage'] = 'หน้าถัดไป';
+$labels['settingsfor'] = 'ตั้งค่าสำหรับ';
+$labels['preferences'] = 'ปรับแต่ง';
+$labels['userpreferences'] = 'ข้อมูลส่วนตัว';
+$labels['editpreferences'] = 'แก้ไขข้อมูลส่วนตัว';
+$labels['identities'] = 'ชื่อแสดงตัว';
+$labels['manageidentities'] = 'จัดการชื่อแสดงตัวสำหรับรายชื่อนี้';
+$labels['newidentity'] = 'ชื่อแสดงตัวใหม่';
+$labels['newitem'] = 'New item';
+$labels['edititem'] = 'Edit item';
+$labels['setdefault'] = 'ตั้งเป็นค่าใช้งาน';
+$labels['language'] = 'ภาษา';
+$labels['timezone'] = 'เขตเวลา';
+$labels['pagesize'] = 'จำนวนจดหมายต่อหน้า';
+$labels['signature'] = 'ลายมือชื่อ';
+$labels['dstactive'] = 'Daylight savings';
+$labels['htmleditor'] = 'เขียนจดหมายแบบ HTML';
+$labels['htmlsignature'] = 'ลายมือชื่อแบบ HTML';
+$labels['previewpane'] = 'แสดงหน้าต่างตัวอย่างแสดงผล';
+$labels['autosavedraft'] = 'บันทึกเป็นจดหมายร่างอัตโนมัติ';
+$labels['everynminutes'] = 'ทุกๆ $n นาที';
+$labels['never'] = 'ไม่ใช้';
+$labels['folder'] = 'กล่องจดหมาย';
+$labels['folders'] = 'กล่องจดหมาย';
+$labels['foldername'] = 'ชื่อกล่องจดหมาย';
+$labels['subscribed'] = 'ลงชื่อ';
+$labels['create'] = 'สร้าง';
+$labels['createfolder'] = 'สร้างกล่องจดหมาย';
+$labels['rename'] = 'เปลื่ยนชื่อ';
+$labels['renamefolder'] = 'เปลี่ยนชื่อกล่องจดหมาย';
+$labels['deletefolder'] = 'ลบกล่องจดหมาย';
+$labels['managefolders'] = 'จัดการกล่องจดหมาย';
+$labels['sortby'] = 'เรียงตาม';
+$labels['sortasc'] = 'เรียงจากหน้าไปหลัง';
+$labels['sortdesc'] = 'เรียงจากหลังไปหน้า';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/th_TH/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Wiraphan Treeratphan <webmaster@modoeye.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 543 2007-04-28 18:07:12Z thomasb $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'ไม่สามารถเข้าสู่ระบบได้';
+$messages['cookiesdisabled'] = 'Browser ของคุณไม่ได้เปิดการใช้งาน Cookie ไว้';
+$messages['sessionerror'] = 'Your session is invalid or expired';
+$messages['imaperror'] = 'ไม่สามารถติดต่อ IMAP Server ได้';
+$messages['nomessagesfound'] = 'ไม่มีจดหมายในกล่องจดหมายนี้';
+$messages['loggedout'] = 'ทำการออกจากระบบเรียบร้อย';
+$messages['mailboxempty'] = 'กล่องจดหมายนี้ว่างเปล่า';
+$messages['loading'] = 'Loading...';
+$messages['loadingdata'] = 'กำลังโหลดข้อมูล...';
+$messages['checkingmail'] = 'กำลังเช็คจดหมายใหม่...';
+$messages['sendingmessage'] = 'กำลังส่งจดหมาย...';
+$messages['messagesent'] = 'จดหมายถูกส่งเรียบร้อยแล้ว';
+$messages['savingmessage'] = 'กำลังบันทึกจดหมาย...';
+$messages['messagesaved'] = 'จดหมายถูกบันทึกเป็นจดหมายร่าง';
+$messages['successfullysaved'] = 'บันทึกเรียบร้อยแล้ว';
+$messages['addedsuccessfully'] = 'รายชื่อถูกบันทึกเรียบร้อยแล้ว';
+$messages['contactexists'] = 'อีเมล์นี้มีอยู่แล้ว';
+$messages['blockedimages'] = 'เพื่อปกป้องความส่วนตัว รูปจากภายนอกในจดหมายนี้จะถูกปิดบังไว้';
+$messages['encryptedmessage'] = 'จดหมายถูกเข้ารหัสไม่สามารถแสดงผลได้';
+$messages['nocontactsfound'] = 'ไม่พบรายชื่อที่ค้นหา';
+$messages['contactnotfound'] = 'ไม่พบรายชื่อที่ค้นหา';
+
+$messages['sendingfailed'] = 'การส่งจดหมายล้มเหลว';
+$messages['errorsaving'] = 'เกิดข้อผิดพลาดระหว่างการบันทึก';
+$messages['errormoving'] = 'ไม่สามารถย้ายจดหมายได้';
+$messages['errordeleting'] = 'ไม่สามารถลบจดหมายได้';
+$messages['deletecontactconfirm'] = 'คุณมั่นใจที่ต้องการลบรายชื่อที่เลือกใช่หรือไม่?';
+$messages['deletemessagesconfirm'] = 'คุณมั่นใจที่ต้องการลบจดหมายที่เลือกใช่หรือไม่?';
+$messages['deletefolderconfirm'] = 'คุณมั่นใจที่ต้องการลบแฟ้มนี้หรือไม่?';
+$messages['purgefolderconfirm'] = 'คุณมั่นใจที่ต้องการลบจดหมายทั้งหมดในแฟ้มนี้ใช่หรือไม่?';
+$messages['formincomplete'] = 'ฟอร์มยังไม่ครบถ้วนสมบูรณ์';
+$messages['noemailwarning'] = 'โปรดใส่อีเมล์ให้ถูกต้อง';
+$messages['nonamewarning'] = 'โปรดใส่ชื่อ';
+$messages['nopagesizewarning'] = 'โปรดใส่จำนวนหน้า';
+$messages['norecipientwarning'] = 'โปรดใส่ผู้รับอย่างน้อย 1 ชื่อ';
+$messages['nosubjectwarning'] = 'หัวจดหมายว่างเปล่า คุณต้องการใส่หัวจดหมายเดี๋ยวนี้หรือไม่?';
+$messages['nobodywarning'] = 'คุณต้องการส่งจดหมายโดยไม่มีข้อความใช่หรือไม่?';
+$messages['notsentwarning'] = 'จดหมายยังไม่ถูกส่ง คุณต้องการยกเลิกหรือไม่?';
+$messages['noldapserver'] = 'โปรดเลือก LDAP Server เพื่อค้นหา';
+$messages['nocontactsreturned'] = 'ไม่พบรายชื่อ';
+$messages['nosearchname'] = 'โปรดใสชื่อหรืออีเมล์';
+$messages['searchsuccessful'] = 'พบจดหมายจำนวน $nr ฉบับ';
+$messages['searchnomatch'] = 'การค้นหาไม่พบ';
+$messages['searching'] = 'กำลังค้นหา...';
+$messages['checking'] = 'กำลังตรวจสอบ...';
+$messages['nospellerrors'] = 'ไม่พบคำที่สะกดผิด';
+$messages['folderdeleted'] = 'ลบแฟ้มเสร็จสมบูรณ์';
+$messages['deletedsuccessfully'] = "ลบเสร็จสมบูรณ์";
+$messages['converting'] = 'นำเอาหารจัดรูปแบบในจดหมายออก...';
+$messages['messageopenerror'] = 'ไม่สามารถอ่านจดหมายจาก Server ได้';
+$messages['fileuploaderror'] = 'การอัพโหลดล้มเหลว';
+$messages['filesizeerror'] = 'ไฟล์มีขนาดใหญ่เกิน $size';
+
+$messages['copysuccess'] = 'คัดลอกจดหมายจำนวน $nr ฉบับเรียบร้อย';
+$messages['copyerror'] = 'ไม่สามารถคัดลอกได้';
+$messages['sourceisreadonly'] = 'จดหมายนี้เป็นแบบอ่านอย่างเดียว';
+$messages['errorsavingcontact'] = 'ไม่สามารถบันทึกรายชื่อได้';
+
+?>
\ No newline at end of file
| language/tr/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Hasan Cansız <hasancansiz@yahoo.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 837 2007-09-27 13:31:57Z thomasb $
+ @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
*/
| language/tr/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Hasan Cansız <hasancansiz@yahoo.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 837 2007-09-27 13:31:57Z thomasb $
+ @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
*/
| language/uk/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Natali Stasyuk <natali@onlineua.net> |
+-----------------------------------------------------------------------+
+ @version $Id$
+
*/
$labels = array();
-
-// login page
$labels['welcome'] = 'Ласкаво просимо в $product!';
$labels['username'] = 'Ім`я користувача';
$labels['password'] = 'Пароль';
$labels['server'] = 'Сервер';
$labels['login'] = 'Увійти';
-
-// taskbar
$labels['logout'] = 'Вийти';
$labels['mail'] = 'Пошта';
$labels['settings'] = 'Налаштування';
$labels['addressbook'] = 'Контакти';
-
-// mailbox names
$labels['inbox'] = 'Вхідні';
$labels['drafts'] = 'Чернетки';
$labels['sent'] = 'Відправлені';
$labels['trash'] = 'Смітник';
-$labels['spam'] = 'Спам';
-
-// message listing
+$labels['junk'] = 'Спам';
$labels['subject'] = 'Тема';
$labels['from'] = 'Від';
$labels['to'] = 'Кому';
$labels['size'] = 'Розмір';
$labels['priority'] = 'Пріоритет';
$labels['organization'] = 'Організація';
-
-// aliases
$labels['reply-to'] = 'Зворотня адреса';
$labels['mailboxlist'] = 'Теки';
$labels['messagesfromto'] = 'Повідомлення з $from по $to із $count';
$labels['htmlmessage'] = 'Повідомлення HTML';
$labels['prettydate'] = 'Красиві дати';
$labels['addtoaddressbook'] = 'Додати до контактів';
-
-// weekdays short
$labels['sun'] = 'Нд';
$labels['mon'] = 'Пн';
$labels['tue'] = 'Вт';
$labels['thu'] = 'Чт';
$labels['fri'] = 'Пт';
$labels['sat'] = 'Сб';
-
-// weekdays long
$labels['sunday'] = 'Неділя';
$labels['monday'] = 'Понеділок';
$labels['tuesday'] = 'Вівторок';
$labels['thursday'] = 'Четвер';
$labels['friday'] = 'П`ятниця';
$labels['saturday'] = 'Субота';
-
$labels['today'] = 'Сьогодні';
-
-// toolbar buttons
$labels['checkmail'] = 'Перевірити пошту';
$labels['writenewmessage'] = 'Нове повідомлення';
$labels['replytomessage'] = 'Відповісти';
$labels['replytoallmessage'] = 'Відповісти усім';
$labels['forwardmessage'] = 'Переслати';
$labels['deletemessage'] = 'У смітник';
+$labels['movemessagetotrash'] = 'Перемістити повідомлення у смітник';
$labels['printmessage'] = 'Друкувати';
$labels['previousmessage'] = 'Показати попереднє повідомлення';
$labels['previousmessages'] = 'Попередня сторінка повідомлень';
$labels['unlimited'] = 'без обмеження';
$labels['quicksearch'] = 'Швидкий пошук';
$labels['resetsearch'] = 'Очистити пошук';
-
-// message compose
$labels['compose'] = 'Написати повідомлення';
-$labels['sendmessage'] = 'Відіслати зараз';
$labels['savemessage'] = 'Зберегти чернетку';
+$labels['sendmessage'] = 'Відіслати зараз';
$labels['addattachment'] = 'Додати вкладення';
$labels['charset'] = 'Набір символів';
$labels['editortype'] = 'Редактор';
$labels['showimages'] = 'Показати зображення';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Звичайний текст';
-
-// address boook
+$labels['addcc'] = 'Додати Cc';
+$labels['addbcc'] = 'Додати Bcc';
+$labels['addreplyto'] = 'Додати Reply-To';
$labels['name'] = 'Відображуване ім`я';
$labels['firstname'] = 'Ім`я';
$labels['surname'] = 'Прізвище';
$labels['lastpage'] = 'Показати останній';
$labels['groups'] = 'Групи';
$labels['personaladrbook'] = 'Персональні адреси';
-
-// settings
$labels['settingsfor'] = 'Налаштування для';
$labels['preferences'] = 'Уподобання';
$labels['userpreferences'] = 'Уподобання користувача';
| language/uk/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Author: Natali Stasyuk <natali@onlineua.net> |
+-----------------------------------------------------------------------+
+ @version $Id$
+
*/
$messages = array();
$messages['copyerror'] = 'Неможливо скопіювати адресу';
$messages['sourceisreadonly'] = 'Дане джерело адрес лише для читання';
$messages['errorsavingcontact'] = 'Неможливо зберегти адресу контакта';
+$messages['movingmessage'] = 'Переміщую повідомлення...';
?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/vn/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Vinh Bui <bqvinh@buivinh.info> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+\r
+// login page\r
+$labels['welcome'] = 'Xin mời sử dụng $product';\r
+$labels['username'] = 'Tên người dùng';\r
+$labels['password'] = 'Mật khẩu';\r
+$labels['server'] = 'Máy chủ?';\r
+$labels['login'] = 'Đăng nhập';\r
+\r
+// taskbar\r
+$labels['logout'] = 'Đăng xuất';\r
+$labels['mail'] = 'E-Mail';\r
+$labels['settings'] = 'Thiết lập';\r
+$labels['addressbook'] = 'Sổ địa chỉ';\r
+\r
+// mailbox names\r
+$labels['inbox'] = 'Inbox';\r
+$labels['drafts'] = 'Drafts';\r
+$labels['sent'] = 'Sent';\r
+$labels['trash'] = 'Trash';\r
+$labels['junk'] = 'Junk';\r
+\r
+// message listing\r
+$labels['subject'] = 'Tiêu đề';\r
+$labels['from'] = 'Người gửi';\r
+$labels['to'] = 'Người nhận';\r
+$labels['cc'] = 'Đồng nhận';\r
+$labels['bcc'] = 'Đồng nhận (2)';\r
+$labels['replyto'] = 'Trả lời vào';\r
+$labels['date'] = 'Ngày';\r
+$labels['size'] = 'D.Lượng';\r
+$labels['priority'] = 'Ưu tiên';\r
+$labels['organization'] = 'Cơ quan';\r
+\r
+// aliases\r
+$labels['reply-to'] = $labels['replyto'];\r
+\r
+$labels['mailboxlist'] = 'Thư mục';\r
+$labels['messagesfromto'] = 'Thư $from - $to / $count';\r
+$labels['messagenrof'] = 'Thư $nr / $count';\r
+\r
+$labels['moveto'] = 'chuyển đến...';\r
+$labels['download'] = 'tải xuống';\r
+\r
+$labels['filename'] = 'Tên file';\r
+$labels['filesize'] = 'Dung lượng';\r
+\r
+$labels['preferhtml'] = 'Dùng HTML';\r
+$labels['htmlmessage'] = 'Thư kiểu HTML';\r
+$labels['prettydate'] = 'Hiển thị ngày đầy đủ';\r
+\r
+$labels['addtoaddressbook'] = 'Thêm và sổ địa chỉ';\r
+\r
+// weekdays short\r
+$labels['sun'] = 'CN';\r
+$labels['mon'] = 'T2';\r
+$labels['tue'] = 'T3';\r
+$labels['wed'] = 'T4';\r
+$labels['thu'] = 'T5';\r
+$labels['fri'] = 'T6';\r
+$labels['sat'] = 'T7';\r
+\r
+// weekdays long\r
+$labels['sunday'] = 'Chủ nhật';\r
+$labels['monday'] = 'Thứ hai';\r
+$labels['tuesday'] = 'Thứ ba';\r
+$labels['wednesday'] = 'Thứ tư';\r
+$labels['thursday'] = 'Thứ năm';\r
+$labels['friday'] = 'Thứ sáu';\r
+$labels['saturday'] = 'Thứ bẩy';\r
+\r
+$labels['today'] = 'Hôm nay';\r
+\r
+// toolbar buttons\r
+$labels['checkmail'] = 'Kiểm tra thư mới';\r
+$labels['writenewmessage'] = 'Soạn thư mới';\r
+$labels['replytomessage'] = 'Trả lời thư';\r
+$labels['replytoallmessage'] = 'Trả lời tất cả';\r
+$labels['forwardmessage'] = 'Chuyển thư';\r
+$labels['deletemessage'] = 'Xóa thư';\r
+$labels['printmessage'] = 'In thư';\r
+$labels['previousmessages'] = 'Hiển thị các thư trước';\r
+$labels['nextmessages'] = 'Hiển thị các thư sau';\r
+$labels['backtolist'] = 'Trở về danh sách thư';\r
+$labels['viewsource'] = 'Hiển thị mã nguồn';\r
+\r
+$labels['select'] = 'Chọn';\r
+$labels['all'] = 'Toàn bộ';\r
+$labels['none'] = 'Bỏ chọn';\r
+$labels['unread'] = 'Chưa đọc';\r
+\r
+$labels['compact'] = 'Rút gọn';\r
+$labels['empty'] = 'Xóa rỗng';\r
+$labels['purge'] = 'Tối giản';\r
+\r
+$labels['quota'] = 'Hạn mức';\r
+$labels['unknown'] = 'không rõ';\r
+$labels['unlimited'] = 'không hạn chế';\r
+\r
+$labels['quicksearch'] = 'Tìm nhanh';\r
+$labels['resetsearch'] = 'Xóa bỏ tìm kiếm';\r
+\r
+// message compose\r
+$labels['compose'] = 'Soạn thư';\r
+$labels['savemessage'] = 'Lưu thư đang soạn';\r
+$labels['sendmessage'] = 'Gửi thư';\r
+$labels['addattachment'] = 'Gửi kèm';\r
+$labels['charset'] = 'Bộ ký tự';\r
+$labels['returnreceipt'] = 'Báo nhận';\r
+\r
+$labels['checkspelling'] = 'Kiểm tra chính tả';\r
+$labels['resumeediting'] = 'Soạn thảo';\r
+$labels['revertto'] = 'Chuyển về';\r
+\r
+$labels['attachments'] = 'Gửi kèm';\r
+$labels['upload'] = 'Tải lên';\r
+$labels['close'] = 'Đóng';\r
+\r
+$labels['low'] = 'Thấp';\r
+$labels['lowest'] = 'Thấp nhất';\r
+$labels['normal'] = 'Bình thường';\r
+$labels['high'] = 'Khẩn';\r
+$labels['highest'] = 'Thượng khẩn';\r
+\r
+$labels['nosubject'] = '(no subject)';\r
+$labels['showimages'] = 'Hiển thị ảnh';\r
+\r
+// address boook\r
+$labels['name'] = 'Tên hiển thị';\r
+$labels['firstname'] = 'Tên';\r
+$labels['surname'] = 'Họ';\r
+$labels['email'] = 'E-Mail';\r
+\r
+$labels['addcontact'] = 'Thêm mới địa chỉ';\r
+$labels['editcontact'] = 'Sửa địa chỉ cũ';\r
+\r
+$labels['edit'] = 'Sửa đổi';\r
+$labels['cancel'] = 'Ngưng';\r
+$labels['save'] = 'Lưu';\r
+$labels['delete'] = 'Xóa';\r
+\r
+$labels['newcontact'] = 'Thêm mới địa chỉ liên hệ';\r
+$labels['deletecontact'] = 'Xóa địa chỉ được chọn';\r
+$labels['composeto'] = 'Soạn thư cho';\r
+$labels['contactsfromto'] = 'Địa chỉ từ $from - $to / $count';\r
+$labels['print'] = 'In thư';\r
+$labels['export'] = 'Export';\r
+\r
+$labels['previouspage'] = 'Trang trước';\r
+$labels['nextpage'] = 'Trang tiếp';\r
+\r
+// LDAP search\r
+$labels['ldapsearch'] = 'LDAP directory search';\r
+\r
+$labels['ldappublicsearchname'] = 'Tên địa chỉ';\r
+$labels['ldappublicsearchtype'] = 'Khớp toàn bộ?';\r
+$labels['ldappublicserverselect'] = 'Chọn máy chủ';\r
+$labels['ldappublicsearchfield'] = 'Tìm trên';\r
+$labels['ldappublicsearchform'] = 'Tìm địa chỉ liên hệ';\r
+$labels['ldappublicsearch'] = 'Tìm kiếm';\r
+\r
+// settings\r
+$labels['settingsfor'] = 'Thiết lập cho';\r
+\r
+$labels['preferences'] = 'Tham số';\r
+$labels['userpreferences'] = 'Tham số người dùng';\r
+$labels['editpreferences'] = 'Sửa đổi';\r
+\r
+$labels['identities'] = 'Người dùng';\r
+$labels['manageidentities'] = 'Quản trị người dùng';\r
+$labels['newidentity'] = 'Người dùng mới';\r
+\r
+$labels['newitem'] = 'Thêm mới';\r
+$labels['edititem'] = 'Sửa đổi';\r
+\r
+$labels['setdefault'] = 'Thiết lập mặc định';\r
+$labels['language'] = 'Ngôn ngữ';\r
+$labels['timezone'] = 'Múi giờ';\r
+$labels['pagesize'] = 'Số dòng trên trang';\r
+$labels['signature'] = 'Chữ ký';\r
+$labels['dstactive'] = 'Giờ mùa hè';\r
+\r
+$labels['folder'] = 'Thư mục';\r
+$labels['folders'] = 'Thư mục';\r
+$labels['foldername'] = 'Tên thư mục';\r
+$labels['subscribed'] = 'Cho sử dụng';\r
+$labels['create'] = 'Tạo';\r
+$labels['createfolder'] = 'Tạo thư mục mới';\r
+$labels['rename'] = 'Đổi tên';\r
+$labels['renamefolder'] = 'Đổi tên thư mục';\r
+$labels['deletefolder'] = 'Xóa thư mục';\r
+$labels['managefolders'] = 'Quản trị thư mục';\r
+\r
+$labels['sortby'] = 'Sắp xếp';\r
+$labels['sortasc'] = 'Xếp tăng dần';\r
+$labels['sortdesc'] = 'Xếp giảm dần';\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/vn/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Vinh Bui <bqvinh@buivinh.info> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'Không đăng nhập được';\r
+$messages['cookiesdisabled'] = 'Trình duyệt không hỗ trợ cookies';\r
+$messages['sessionerror'] = 'Phiên làm việc không hợp lệ hoặc đã hết hạn';\r
+$messages['imaperror'] = 'Không kết nối được với máy chủ IMAP';\r
+$messages['nomessagesfound'] = 'Không có thư trong hòm thư này';\r
+$messages['loggedout'] = 'Phiên làm việc đã kết thúc. Hẹn gặp lại!';\r
+$messages['mailboxempty'] = 'Hộp thư rỗng';\r
+$messages['loading'] = 'Vui lòng chờ trong giây lát...';\r
+$messages['loadingdata'] = 'Đang nạp dữ liệu...';\r
+$messages['checkingmail'] = 'Kiểm tra thư mới...';\r
+$messages['sendingmessage'] = 'Đang gửi thư...';\r
+$messages['messagesent'] = 'Thư đã được gửi';\r
+$messages['savingmessage'] = 'Đang lưu thư...';\r
+$messages['messagesaved'] = 'Thư đã được gửi vào ngăn Drafts';\r
+$messages['successfullysaved'] = 'Đã lưu thành công';\r
+$messages['addedsuccessfully'] = 'Địa chỉ liên hệ đã được lưu';\r
+$messages['contactexists'] = 'Địa chỉ liên hệ với e-mail này đã được lưu trước đây';\r
+$messages['blockedimages'] = 'Để bảo vệ tính riêng tư, chức năng hiện ảnh từ xa bị cấm trong thư này.';\r
+$messages['encryptedmessage'] = 'Thư này được mã hóa, không thể xem. Rất tiếc!';\r
+$messages['nocontactsfound'] = 'Không tìm thấy địa chỉ liên hệ';\r
+$messages['sendingfailed'] = 'Không gửi được thư';\r
+$messages['errorsaving'] = 'Lỗi khi lưu';\r
+$messages['errormoving'] = 'Không thể chuyển được thư';\r
+$messages['errordeleting'] = 'Không thể xóa được thư';\r
+$messages['deletecontactconfirm'] = 'Xóa bỏ các địa chỉ được chọn?';\r
+$messages['deletefolderconfirm'] = 'Xóa bỏ thư mục này?';\r
+$messages['purgefolderconfirm'] = 'Xóa toàn bộ thư trong thư mục nào?';\r
+$messages['formincomplete'] = 'Mẫu chưa được điền xong';\r
+$messages['noemailwarning'] = 'Nhập địa chỉ email';\r
+$messages['nonamewarning'] = 'Nhập tên';\r
+$messages['nopagesizewarning'] = 'Nhập kích cỡ của trang';\r
+$messages['norecipientwarning'] = 'Thư cần có it nhất 1 người nhận';\r
+$messages['nosubjectwarning'] = 'Mục "Tiêu đề" chưa có. Điền tiêu đề ?';\r
+$messages['nobodywarning'] = 'Thư không nội dung, vẫn tiếp tục gửi?';\r
+$messages['notsentwarning'] = 'Thư chưa được gửi. Bỏ qua thư đang soạn?';\r
+$messages['noldapserver'] = 'Chọn máy chủ ldap server để tìm';\r
+$messages['nocontactsreturned'] = 'Không tìm thấy địa chỉ';\r
+$messages['nosearchname'] = 'Nhập địa chỉ hoặc email';\r
+$messages['searchsuccessful'] = '$nr messages found';\r
+$messages['searchnomatch'] = 'Không tìm thấy';\r
+$messages['searching'] = 'Tìm kiếm...';\r
+$messages['checking'] = 'Kiểm tra...';\r
+$messages['nospellerrors'] = 'Không có lỗi chính tả';\r
+$messages['folderdeleted'] = 'Thư mục đã được xóa';\r
+\r
+?>
\ No newline at end of file
| localization/zh_CN/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: kourge <kourge@gmail.com> |
- | Xue zhong sheng <xue.zhongsheng@gmail.com> |
+ | Author: Xue zhong sheng <xue.zhongsheng@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 672 2007-08-10 14:46:53Z thomasb $
+ @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$labels['sortasc'] = '递增排序';
$labels['sortdesc'] = '递减排序';
-?>
\ No newline at end of file
+?>
| localization/zh_CN/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
- | Author: kourge <kourge@gmail.com> |
- | Xue zhong sheng <xue.zhongsheng@gmail.com> |
+ | Author: Xue zhong sheng <xue.zhongsheng@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 672 2007-08-10 14:46:53Z thomasb $
+ @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
*/
$messages['sourceisreadonly'] = '源地址为只读';
$messages['errorsavingcontact'] = '无法保存联系人的地址';
-?>
\ No newline at end of file
+?>
| localization/tw/labels.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Ting-Hung Chiu <earrl@mmlab.cse.yzu.edu.tw> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 584 2007-05-24 03:49:19Z estadtherr $
+ @version $Id: labels.inc 1086 2008-02-15 05:43:32Z tomekp $
*/
$labels['organization'] = '組織';
$labels['reply-to'] = '回覆至';
$labels['mailboxlist'] = '資料夾';
-$labels['messagesfromto'] = '郵件 $from 至 $to,共有 $count 郵件';
+$labels['messagesfromto'] = '郵件 $from 至 $to,共有 $count 封郵件';
$labels['messagenrof'] = '第 $nr 封郵件,共有 $count 封';
$labels['moveto'] = '移至...';
$labels['download'] = '下載';
$labels['replytomessage'] = '回覆';
$labels['replytoallmessage'] = '全部回覆';
$labels['forwardmessage'] = '轉寄';
-$labels['deletemessage'] = '移至垃圾郵件';
+$labels['deletemessage'] = '刪除郵件';
+$labels['movemessagetotrash'] = '移動郵件至垃圾桶';
$labels['printmessage'] = '列印此郵件';
$labels['previousmessage'] = '顯示上一封郵件';
$labels['previousmessages'] = '顯示上一頁';
$labels['lastmessages'] = '顯示最後一頁';
$labels['backtolist'] = '回到郵件清單';
$labels['viewsource'] = '顯示原始郵件';
+$labels['markmessages'] = '標記郵件為';
+$labels['markread'] = '已讀';
+$labels['markunread'] = '未讀';
$labels['select'] = '選擇';
$labels['all'] = '全部';
$labels['none'] = '無';
$labels['purge'] = '清除';
$labels['quota'] = '磁碟使用量';
$labels['unknown'] = '未知';
-$labels['unlimited'] = '沒有限制';
+$labels['unlimited'] = '無限制';
$labels['quicksearch'] = '快速搜尋';
$labels['resetsearch'] = '重設搜尋';
$labels['compose'] = '撰寫新郵件';
-$labels['sendmessage'] = '立即寄出';
$labels['savemessage'] = '存至草稿匣';
+$labels['sendmessage'] = '立即寄出';
$labels['addattachment'] = '增加附件檔案';
$labels['charset'] = '字元集';
$labels['editortype'] = '編輯器類型';
$labels['showimages'] = '顯示圖片';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = '純文字';
+$labels['addcc'] = '新增副本';
+$labels['addbcc'] = '新增密件副本';
+$labels['addreplyto'] = '新增回覆地址';
+$labels['mdnrequest'] = '此郵件的寄件者希望在你閱讀此郵件時受到通知。你想要通知寄件者嗎?';
+$labels['receiptread'] = '郵件回條(已閱讀)';
+$labels['yourmessage'] = '這是你郵件的郵件回條';
+$labels['receiptnote'] = '注意:此回條只能確認收件者的電腦顯示了郵件,並不能保證收件者已閱讀或了解郵件的內容。';
$labels['name'] = '顯示名稱';
$labels['firstname'] = '名稱';
$labels['surname'] = '姓氏';
$labels['save'] = '儲存';
$labels['delete'] = '刪除';
$labels['newcontact'] = '建立新聯絡人卡片';
-$labels['deletecontact'] = '刪除所選擇之聯絡人';
+$labels['deletecontact'] = '刪除所選擇的聯絡人';
$labels['composeto'] = '寄信至';
$labels['contactsfromto'] = '聯絡人 $from 至 $to,共有 $count 人';
$labels['print'] = '列印';
$labels['userpreferences'] = '個人設定';
$labels['editpreferences'] = '編輯個人設定';
$labels['identities'] = '身份資訊';
-$labels['manageidentities'] = '管理此帳號之身分資訊';
+$labels['manageidentities'] = '管理此帳號的身份資訊';
$labels['newidentity'] = '新增身份資訊';
$labels['newitem'] = '新增項目';
$labels['edititem'] = '編輯項目';
$labels['folders'] = '資料夾';
$labels['foldername'] = '資料夾名稱';
$labels['subscribed'] = '已訂閱';
+$labels['messagecount'] = '個郵件';
$labels['create'] = '建立';
$labels['createfolder'] = '建立新資料夾';
$labels['rename'] = '重新命名';
| localization/tw/messages.inc |
| |
| Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Ting-Hung Chiu <earrl@mmlab.cse.yzu.edu.tw> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 584 2007-05-24 03:49:19Z estadtherr $
+ @version $Id: messages.inc 1086 2008-02-15 05:43:32Z tomekp $
*/
$messages['nocontactsfound'] = '沒有找到任何聯絡人';
$messages['contactnotfound'] = '找不到要求的聯絡人';
$messages['sendingfailed'] = '郵件寄出失敗';
-$messages['errorsaving'] = '儲存過程當中發生錯誤';
+$messages['errorsaving'] = '儲存時發生錯誤';
$messages['errormoving'] = '無法移動此郵件';
$messages['errordeleting'] = '無法刪除此郵件';
$messages['deletecontactconfirm'] = '你確定要刪除已選擇的聯絡人?';
$messages['copyerror'] = '無法複製任何位址';
$messages['sourceisreadonly'] = '此來源位址是唯讀的';
$messages['errorsavingcontact'] = '無法儲存連絡人的位址';
+$messages['movingmessage'] = '移動郵件中...';
+$messages['receiptsent'] = '閱讀回條傳送成功';
+$messages['errorsendingreceipt'] = '無法傳送回條';
+$messages['nodeletelastidentity'] = '你不能刪除此身份,因為只剩一個身份。';
+$messages['addsubfolderhint'] = '此資料夾會成為目前所選資料夾的子資料夾';
?>
\ No newline at end of file
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: func.inc 582 2007-05-18 14:38:11Z thomasb $
+ $Id: func.inc 930 2007-11-25 17:34:19Z thomasb $
*/
// set list properties and session vars
if (!empty($_GET['_page']))
- {
- $CONTACTS->set_page(intval($_GET['_page']));
- $_SESSION['page'] = $_GET['_page'];
- }
+ $CONTACTS->set_page(($_SESSION['page'] = intval($_GET['_page'])));
else
$CONTACTS->set_page(isset($_SESSION['page']) ?$_SESSION['page'] : 1);
{
if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE))
{
- $count = $IMAP->messagecount(NULL, 'ALL', TRUE);
+ // refresh saved search set
+ if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set)
+ $_SESSION['search'][$search_request] = $IMAP->refresh_search();
+
+ $count_all = $IMAP->messagecount(NULL, 'ALL', TRUE);
$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
- $OUTPUT->set_env('messagecount', $count);
- $OUTPUT->command('set_unread_count', $mbox_name, $unread_count, true);
+ $OUTPUT->set_env('messagecount', $IMAP->messagecount());
+ $OUTPUT->command('set_unread_count', $mbox_name, $unread_count, ($mbox_name == 'INBOX'));
$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
$OUTPUT->command('set_quota', $IMAP->get_quota());
// add new message headers to list
$a_headers = array();
- for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
+ 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;
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: compose.inc 892 2007-10-20 21:47:11Z thomasb $
+ $Id: compose.inc 1039 2008-02-11 17:39:31Z till $
*/
// remove an attachment
if ($_action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_POST['_file'], $regs))
- {
+{
$id = $regs[1];
if (is_array($_SESSION['compose']['attachments'][$id]))
- {
+ {
@unlink($_SESSION['compose']['attachments'][$id]['path']);
$_SESSION['compose']['attachments'][$id] = NULL;
$OUTPUT->command('remove_from_attachment_list', "rcmfile$id");
$OUTPUT->send();
exit;
- }
}
+}
+if ($_action=='display-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs))
+{
+ $id = $regs[1];
+ if (is_array($_SESSION['compose']['attachments'][$id]))
+ {
+ $apath = $_SESSION['compose']['attachments'][$id]['path'];
+ header('Content-Type: ' . $_SESSION['compose']['attachments'][$id]['mimetype']);
+ header('Content-Length: ' . filesize($apath));
+ readfile($apath);
+ }
+ exit;
+}
$MESSAGE_FORM = NULL;
$MESSAGE = NULL;
// compose when a "new/forward/reply/draft" is called - otherwise the old session attachments will appear
if (!is_array($_SESSION['compose']) || $_SESSION['compose']['id'] != get_input_value('_id', RCUBE_INPUT_GET))
- {
+{
rcmail_compose_cleanup();
$_SESSION['compose'] = array('id' => uniqid(rand()));
- }
+}
// add some labels to client
rcube_add_label('nosubject', 'norecipientwarning', 'nosubjectwarning', 'nobodywarning', 'notsentwarning', 'savingmessage', 'sendingmessage', 'messagesaved', 'converting');
// add config parameter to client script
$OUTPUT->set_env('draft_autosave', !empty($CONFIG['drafts_mbox']) ? $CONFIG['draft_autosave'] : 0);
-// no html editor if globally disabled
-if (!$CONFIG['enable_htmleditor'])
- $CONFIG['htmleditor'] = false;
// get reference message and set compose mode
if ($msg_uid = get_input_value('_reply_uid', RCUBE_INPUT_GET))
if (!empty($msg_uid))
- {
+{
// similar as in program/steps/mail/show.inc
$MESSAGE = array('UID' => $msg_uid);
$MESSAGE['headers'] = &$IMAP->get_headers($msg_uid);
$MESSAGE['parts'] = $IMAP->get_mime_numbers($MESSAGE['structure']);
if ($compose_mode == RCUBE_COMPOSE_REPLY)
- {
+ {
$_SESSION['compose']['reply_uid'] = $msg_uid;
$_SESSION['compose']['reply_msgid'] = $MESSAGE['headers']->messageID;
- $_SESSION['compose']['references'] = $MESSAGE['headers']->reference;
- $_SESSION['compose']['references'] .= !empty($MESSAGE['headers']->reference) ? ' ' : '';
- $_SESSION['compose']['references'] .= $MESSAGE['headers']->messageID;
+ $_SESSION['compose']['references'] = trim($MESSAGE['headers']->references . " " . $MESSAGE['headers']->messageID);
if (!empty($_GET['_all']))
$MESSAGE['reply_all'] = 1;
- }
+ }
else if ($compose_mode == RCUBE_COMPOSE_FORWARD)
- {
+ {
$_SESSION['compose']['forward_uid'] = $msg_uid;
- }
+ }
else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
- {
+ {
$_SESSION['compose']['draft_uid'] = $msg_uid;
- }
-
}
+}
/****** compose mode functions ********/
function rcmail_compose_headers($attrib)
- {
+{
global $IMAP, $MESSAGE, $DB, $compose_mode;
static $sa_recipients = array();
$part = strtolower($attrib['part']);
switch ($part)
- {
+ {
case 'from':
return rcmail_compose_header_from($attrib);
case 'cc':
if (!$fname)
- {
+ {
$fname = '_cc';
$header = 'cc';
- }
+ }
case 'bcc':
if (!$fname)
- {
+ {
$fname = '_bcc';
$header = 'bcc';
- }
+ }
$allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'tabindex');
$field_type = 'textarea';
$fname = '_replyto';
$allow_attrib = array('id', 'class', 'style', 'size', 'tabindex');
$field_type = 'textfield';
- break;
-
- }
+ break;
+ }
if ($fname && !empty($_POST[$fname]))
$fvalue = get_input_value($fname, RCUBE_INPUT_POST, TRUE);
else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY)
- {
+ {
// get recipent address(es) out of the message headers
if ($header=='to' && !empty($MESSAGE['headers']->replyto))
$fvalue = $MESSAGE['headers']->replyto;
// add recipent of original message if reply to all
else if ($header=='cc' && !empty($MESSAGE['reply_all']))
- {
+ {
if ($v = $MESSAGE['headers']->to)
$fvalue .= $v;
if ($v = $MESSAGE['headers']->cc)
$fvalue .= (!empty($fvalue) ? ', ' : '') . $v;
- }
+ }
// split recipients and put them back together in a unique way
if (!empty($fvalue))
- {
+ {
$to_addresses = $IMAP->decode_address_list($fvalue);
$fvalue = '';
foreach ($to_addresses as $addr_part)
- {
+ {
if (!empty($addr_part['mailto']) && !in_array($addr_part['mailto'], $sa_recipients) && (!$MESSAGE['FROM'] || !in_array($addr_part['mailto'], $MESSAGE['FROM'])))
- {
+ {
$fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string'];
$sa_recipients[] = $addr_part['mailto'];
- }
}
}
}
+ }
else if ($header && $compose_mode == RCUBE_COMPOSE_DRAFT)
- {
+ {
// get drafted headers
if ($header=='to' && !empty($MESSAGE['headers']->to))
$fvalue = $IMAP->decode_header($MESSAGE['headers']->to);
if ($header=='bcc' && !empty($MESSAGE['headers']->bcc))
$fvalue = $IMAP->decode_header($MESSAGE['headers']->bcc);
- }
+ }
if ($fname && $field_type)
- {
+ {
// pass the following attributes to the form class
$field_attrib = array('name' => $fname);
foreach ($attrib as $attr => $value)
// create teaxtarea object
$input = new $field_type($field_attrib);
$out = $input->show($fvalue);
- }
+ }
if ($form_start)
$out = $form_start.$out;
return $out;
- }
+}
function rcmail_compose_header_from($attrib)
- {
- global $IMAP, $MESSAGE, $DB, $OUTPUT, $compose_mode;
+{
+ global $IMAP, $MESSAGE, $DB, $USER, $OUTPUT, $compose_mode;
// pass the following attributes to the form class
$field_attrib = array('name' => '_from');
// extract all recipients of the reply-message
$a_recipients = array();
if ($compose_mode == RCUBE_COMPOSE_REPLY && is_object($MESSAGE['headers']))
- {
+ {
$MESSAGE['FROM'] = array();
$a_to = $IMAP->decode_address_list($MESSAGE['headers']->to);
foreach ($a_to as $addr)
- {
+ {
if (!empty($addr['mailto']))
$a_recipients[] = $addr['mailto'];
- }
+ }
if (!empty($MESSAGE['headers']->cc))
- {
+ {
$a_cc = $IMAP->decode_address_list($MESSAGE['headers']->cc);
foreach ($a_cc as $addr)
- {
+ {
if (!empty($addr['mailto']))
$a_recipients[] = $addr['mailto'];
- }
}
}
+ }
// get this user's identities
- $sql_result = $DB->query("SELECT identity_id, name, email, signature, html_signature
- FROM ".get_table_name('identities')."
- WHERE user_id=?
- AND del<>1
- ORDER BY ".$DB->quoteIdentifier('standard')." DESC, name ASC",
- $_SESSION['user_id']);
+ $sql_result = $USER->list_identities();
if ($DB->num_rows($sql_result))
- {
+ {
$from_id = 0;
$a_signatures = array();
$select_from = new select($field_attrib);
while ($sql_arr = $DB->fetch_assoc($sql_result))
- {
+ {
$identity_id = $sql_arr['identity_id'];
$select_from->add(format_email_recipient($sql_arr['email'], $sql_arr['name']), $identity_id);
// add signature to array
if (!empty($sql_arr['signature']))
- {
+ {
$a_signatures[$identity_id]['text'] = $sql_arr['signature'];
$a_signatures[$identity_id]['is_html'] = ($sql_arr['html_signature'] == 1) ? true : false;
if ($a_signatures[$identity_id]['is_html'])
- {
+ {
$h2t = new html2text($a_signatures[$identity_id]['text'], false, false);
$plainTextPart = $h2t->get_text();
$a_signatures[$identity_id]['plain_text'] = trim($plainTextPart);
- }
}
+ }
// set identity if it's one of the reply-message recipients
if (in_array($sql_arr['email'], $a_recipients))
if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE['headers']->from, $sql_arr['email']))
$from_id = $sql_arr['identity_id'];
- }
+ }
// overwrite identity selection with post parameter
if (isset($_POST['_from']))
// add signatures to client
$OUTPUT->set_env('signatures', $a_signatures);
- }
+ }
else
- {
+ {
$input_from = new textfield($field_attrib);
$out = $input_from->show($_POST['_from']);
- }
+ }
if ($form_start)
$out = $form_start.$out;
return $out;
- }
+}
-
function rcmail_compose_body($attrib)
- {
+{
global $CONFIG, $OUTPUT, $MESSAGE, $compose_mode;
list($form_start, $form_end) = get_form_tags($attrib);
$body = rcmail_create_draft_body($body, $isHtml);
}
- if ($CONFIG['enable_htmleditor'])
- {
- $OUTPUT->include_script('tiny_mce/tiny_mce.js');
- $OUTPUT->include_script("editor.js");
- $OUTPUT->add_script('rcmail_editor_init("$__skin_path");');
- }
+ $OUTPUT->include_script('tiny_mce/tiny_mce.js');
+ $OUTPUT->include_script("editor.js");
+ $OUTPUT->add_script('rcmail_editor_init("$__skin_path");');
$out = $form_start ? "$form_start\n" : '';
$out .= "\n".'<iframe name="savetarget" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>';
return $out;
- }
+}
function rcmail_create_reply_body($body, $bodyIsHtml)
- {
+{
global $IMAP, $MESSAGE;
if (! $bodyIsHtml)
// add > to each line
for($n=0; $n<sizeof($a_lines); $n++)
- {
+ {
if (strpos($a_lines[$n], '>')===0)
$a_lines[$n] = '>'.$a_lines[$n];
else
$a_lines[$n] = '> '.$a_lines[$n];
- }
+ }
$body = join("\n", $a_lines);
}
else
{
- $prefix = sprintf("<br><br>On %s, %s wrote:<br><blockquote type=\"cite\" " .
- "style=\"padding-left: 5px; border-left: #1010ff 2px solid; " .
- "margin-left: 5px; width: 100%%\">",
- $MESSAGE['headers']->date,
- $IMAP->decode_header($MESSAGE['headers']->from));
+ $prefix = sprintf("<br><br>On %s, %s wrote:<br><blockquote type=\"cite\" " .
+ "style=\"padding-left: 5px; border-left: #1010ff 2px solid; " .
+ "margin-left: 5px; width: 100%%\">",
+ $MESSAGE['headers']->date,
+ $IMAP->decode_header($MESSAGE['headers']->from));
- $suffix = "</blockquote>";
+ $suffix = "</blockquote>";
}
return $prefix.$body.$suffix;
- }
+}
function rcmail_create_forward_body($body, $bodyIsHtml)
- {
+{
global $IMAP, $MESSAGE;
if (! $bodyIsHtml)
}
else
{
- $prefix = sprintf(
+ $prefix = sprintf(
"<br><br>-------- Original Message --------" .
"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody>" .
"<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Subject: </th><td>%s</td></tr>" .
rcmail_write_compose_attachments($MESSAGE);
return $prefix.$body;
- }
+}
function rcmail_create_draft_body($body, $bodyIsHtml)
- {
+{
global $IMAP, $MESSAGE;
-
- // add attachments
- if (!isset($_SESSION['compose']['forward_attachments']) &&
- is_array($MESSAGE['parts']) && sizeof($MESSAGE['parts'])>1)
+
+ /**
+ * add attachments
+ * sizeof($MESSAGE['parts'] can be 1 - e.g. attachment, but no text!
+ */
+ if (!isset($_SESSION['compose']['forward_attachments'])
+ && is_array($MESSAGE['parts'])
+ && count($MESSAGE['parts']) > 0)
rcmail_write_compose_attachments($MESSAGE);
return $body;
- }
+}
function rcmail_write_compose_attachments(&$message)
- {
+{
global $IMAP, $CONFIG;
$temp_dir = unslashify($CONFIG['temp_dir']);
$_SESSION['compose']['attachments'] = array();
foreach ($message['parts'] as $pid => $part)
- {
- if ($part->ctype_primary != 'message' && $part->ctype_primary != 'text' &&
+ {
+ if ($part->ctype_primary != 'message' &&
($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id'] ||
(empty($part->disposition) && $part->filename)))
- {
+ {
$tmp_path = tempnam($temp_dir, 'rcmAttmnt');
if ($fp = fopen($tmp_path, 'w'))
- {
+ {
fwrite($fp, $IMAP->get_message_part($message['UID'], $pid, $part->encoding));
fclose($fp);
'name' => $part->filename,
'path' => $tmp_path
);
- }
}
}
+ }
$_SESSION['compose']['forward_attachments'] = TRUE;
- }
+}
function rcmail_compose_subject($attrib)
- {
+{
global $CONFIG, $MESSAGE, $compose_mode;
list($form_start, $form_end) = get_form_tags($attrib);
// create a reply-subject
else if ($compose_mode == RCUBE_COMPOSE_REPLY)
- {
+ {
if (eregi('^re:', $MESSAGE['subject']))
$subject = $MESSAGE['subject'];
else
$subject = 'Re: '.$MESSAGE['subject'];
- }
+ }
// create a forward-subject
else if ($compose_mode == RCUBE_COMPOSE_FORWARD)
- {
+ {
if (eregi('^fwd:', $MESSAGE['subject']))
$subject = $MESSAGE['subject'];
else
$subject = 'Fwd: '.$MESSAGE['subject'];
- }
+ }
// creeate a draft-subject
else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
$out .= $form_end ? "\n$form_end" : '';
return $out;
- }
+}
function rcmail_compose_attachment_list($attrib)
- {
+{
global $OUTPUT, $CONFIG;
// add ID if not given
$out = '<ul'. $attrib_str . ">\n";
if (is_array($_SESSION['compose']['attachments']))
- {
+ {
if ($attrib['deleteicon'])
$button = sprintf('<img src="%s%s" alt="%s" border="0" style="padding-right:2px;vertical-align:middle" />',
$CONFIG['skin_path'],
Q(rcube_label('delete')),
$button,
Q($a_prop['name']));
- }
+ }
$OUTPUT->add_gui_object('attachmentlist', $attrib['id']);
$out .= '</ul>';
return $out;
- }
-
+}
function rcmail_compose_attachment_form($attrib)
- {
+{
global $OUTPUT, $SESS_HIDDEN_FIELD;
// add ID if not given
$OUTPUT->add_gui_object('uploadbox', $attrib['id']);
return $out;
- }
+}
function rcmail_compose_attachment_field($attrib)
- {
+{
// allow the following attributes to be added to the <input> tag
$attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'size'));
$out = '<input type="file" name="_attachments[]"'. $attrib_str . " />";
return $out;
- }
+}
function rcmail_priority_selector($attrib)
- {
+{
+ global $MESSAGE;
+
list($form_start, $form_end) = get_form_tags($attrib);
unset($attrib['form']);
rcube_label('highest')),
array(5, 4, 0, 2, 1));
- $sel = isset($_POST['_priority']) ? $_POST['_priority'] : 0;
+ $sel = isset($_POST['_priority']) ? $_POST['_priority'] : intval($MESSAGE['headers']->priority);
$out = $form_start ? "$form_start\n" : '';
$out .= $selector->show($sel);
$out .= $form_end ? "\n$form_end" : '';
return $out;
- }
+}
function rcmail_receipt_checkbox($attrib)
- {
+{
+ global $MESSAGE;
+
list($form_start, $form_end) = get_form_tags($attrib);
unset($attrib['form']);
$checkbox = new checkbox($attrib);
$out = $form_start ? "$form_start\n" : '';
- $out .= $checkbox->show(0);
+ $out .= $checkbox->show($MESSAGE['headers']->mdn_to ? 1 : 0);
$out .= $form_end ? "\n$form_end" : '';
return $out;
- }
+}
function rcmail_editor_selector($attrib)
{
global $CONFIG, $MESSAGE, $compose_mode;
-
- if (!$CONFIG['enable_htmleditor'])
- return '';
$choices = array(
'html' => 'htmltoggle',
if ($compose_mode == RCUBE_COMPOSE_REPLY ||
$compose_mode == RCUBE_COMPOSE_FORWARD ||
$compose_mode == RCUBE_COMPOSE_DRAFT)
- {
+ {
$hasHtml = rcmail_has_html_part($MESSAGE['parts']);
$useHtml = ($hasHtml && $CONFIG['htmleditor']);
- }
+ }
$selector = '';
$attrib['name'] = '_editorSelect';
$attrib['onchange'] = 'return rcmail_toggle_editor(this)';
foreach ($choices as $value => $text)
- {
+ {
$checked = '';
if ((($value == 'html') && $useHtml) ||
(($value != 'html') && !$useHtml))
$rb->show($value),
$attrib['id'],
rcube_label($text));
- }
+ }
return $selector;
}
function get_form_tags($attrib)
- {
+{
global $CONFIG, $OUTPUT, $MESSAGE_FORM, $SESS_HIDDEN_FIELD;
$form_start = '';
if (!strlen($MESSAGE_FORM))
- {
+ {
$hiddenfields = new hiddenfield(array('name' => '_task', 'value' => $GLOBALS['_task']));
$hiddenfields->add(array('name' => '_action', 'value' => 'send'));
$form_start = empty($attrib['form']) ? '<form name="form" action="./" method="post">' : '';
$form_start .= "\n$SESS_HIDDEN_FIELD\n";
$form_start .= $hiddenfields->show();
- }
+ }
$form_end = (strlen($MESSAGE_FORM) && !strlen($attrib['form'])) ? '</form>' : '';
$form_name = !empty($attrib['form']) ? $attrib['form'] : 'form';
$MESSAGE_FORM = $form_name;
return array($form_start, $form_end);
- }
+}
// register UI objects
'receiptcheckbox' => 'rcmail_receipt_checkbox',
));
-
/****** get contacts for this user and add them to client scripts ********/
require_once('include/rcube_contacts.inc');
+require_once('include/rcube_ldap.inc');
-$CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']);
+$CONTACTS = new rcube_contacts($DB, $USER->ID);
$CONTACTS->set_pagesize(1000);
+
+$a_contacts = array();
if ($result = $CONTACTS->list_records())
- {
- $a_contacts = array();
+ {
while ($sql_arr = $result->iterate())
if ($sql_arr['email'])
$a_contacts[] = format_email_recipient($sql_arr['email'], JQ($sql_arr['name']));
+ }
+if (isset($CONFIG['ldap_public']))
+ {
+ /* LDAP autocompletion */
+ foreach ($CONFIG['ldap_public'] as $ldapserv_config)
+ {
+ if ($ldapserv_config['fuzzy_search'] != 1)
+ {
+ continue;
+ }
+
+ $LDAP = new rcube_ldap($ldapserv_config);
+ $LDAP->connect();
+ $LDAP->set_pagesize(1000);
- $OUTPUT->set_env('contacts', $a_contacts);
+ $results = $LDAP->search($ldapserv_config['mail_field'], "");
+
+ for ($i = 0; $i < $results->count; $i++)
+ {
+ if ($results->records[$i]['email'] != '')
+ {
+ $email = $results->records[$i]['email'];
+ $name = $results->records[$i]['name'];
+
+ $a_contacts[] = format_email_recipient($email, JQ($name));
+ }
+ }
+ $LDAP->close();
+ }
}
-
-
+if ($a_contacts)
+ {
+ $OUTPUT->set_env('contacts', $a_contacts);
+ }
parse_template('compose');
-?>
+?>
\ No newline at end of file
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: folders.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: folders.inc 1020 2008-02-05 22:56:29Z thomasb $
*/
$mbox_name = $IMAP->get_mailbox_name();
// clear mailbox
else if ($_action=='purge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST)))
{
- $success = $IMAP->clear_mailbox($mbox);
-
- if ($success && !empty($_REQUEST['_reload']))
+ // we should only be purging trash and junk
+ if($mbox == $CONFIG['trash_mbox'] || $mbox == $CONFIG['junk_mbox'])
{
- $OUTPUT->set_env('messagecount', 0);
- $OUTPUT->set_env('pagecount', 0);
- $OUTPUT->command('message_list.clear');
- $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
- $OUTPUT->command('set_unread_count', $mbox_name, 0);
+ $success = $IMAP->clear_mailbox($mbox);
+
+ if ($success && !empty($_REQUEST['_reload']))
+ {
+ $OUTPUT->set_env('messagecount', 0);
+ $OUTPUT->set_env('pagecount', 0);
+ $OUTPUT->command('message_list.clear');
+ $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
+ $OUTPUT->command('set_unread_count', $mbox_name, 0);
+ }
+ else
+ $commands = "// purged: $success";
}
- else
- $commands = "// purged: $success";
}
$OUTPUT->send($commands);
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: func.inc 875 2007-10-17 06:50:28Z thomasb $
+ $Id: func.inc 1125 2008-02-20 22:47:06Z thomasb $
*/
require_once('lib/html2text.inc');
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';
// set imap properties and session vars
if ($mbox = get_input_value('_mbox', RCUBE_INPUT_GPC))
- {
- $IMAP->set_mailbox($mbox);
- $_SESSION['mbox'] = $mbox;
- }
+ $IMAP->set_mailbox(($_SESSION['mbox'] = $mbox));
if (!empty($_GET['_page']))
- {
- $IMAP->set_page((int)$_GET['_page']);
- $_SESSION['page'] = (int)$_GET['_page'];
- }
+ $IMAP->set_page(($_SESSION['page'] = intval($_GET['_page'])));
// set mailbox to INBOX if not set
if (empty($_SESSION['mbox']))
// set message set for search result
if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']]))
+ {
$IMAP->set_search_set($_SESSION['search'][$_REQUEST['_search']]);
+ $OUTPUT->set_env('search_request', $_REQUEST['_search']);
+ $OUTPUT->set_env('search_text', $_SESSION['last_text_search']);
+ }
// define url for getting message parts
// set page title
if (empty($_action) || $_action == 'list')
- $OUTPUT->set_pagetitle(rcube_charset_convert($IMAP->get_mailbox_name(), 'UTF-7'));
+ $OUTPUT->set_pagetitle(rcmail_localize_foldername($IMAP->get_mailbox_name()));
$OUTPUT->set_env('attachmenticon', $skin_path . $attrib['attachmenticon']);
$OUTPUT->set_env('messages', $a_js_message_arr);
+ $OUTPUT->set_env('coltypes', $a_show_cols);
$OUTPUT->include_script('list.js');
}
+/* Stolen from Squirrelmail */
+function sq_deent(&$attvalue, $regex, $hex=false)
+ {
+ $ret_match = false;
+ preg_match_all($regex, $attvalue, $matches);
+ if (is_array($matches) && sizeof($matches[0]) > 0)
+ {
+ $repl = Array();
+ for ($i = 0; $i < sizeof($matches[0]); $i++)
+ {
+ $numval = $matches[1][$i];
+ if ($hex)
+ $numval = hexdec($numval);
+ $repl{$matches[0][$i]} = chr($numval);
+ }
+ $attvalue = strtr($attvalue, $repl);
+ return true;
+ }
+ else
+ return false;
+ }
+
+
+/* Stolen verbatim from Squirrelmail */
+function sq_defang(&$attvalue)
+ {
+ /* Skip this if there aren't ampersands or backslashes. */
+ if ((strpos($attvalue, '&') === false) &&
+ (strpos($attvalue, '\\') === false))
+ return;
+ $m = false;
+ do
+ {
+ $m = false;
+ $m = $m || sq_deent($attvalue, '/\�*(\d+);*/s');
+ $m = $m || sq_deent($attvalue, '/\�*((\d|[a-f])+);*/si', true);
+ $m = $m || sq_deent($attvalue, '/\\\\(\d+)/s', true);
+ } while ($m == true);
+ $attvalue = stripslashes($attvalue);
+ }
+
+
+function rcmail_html_filter($html)
+ {
+ preg_match_all('/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|\'.*?\'|[^\'">\s]+))?)+\s*|\s*)\/?>/', $html, $tags);
+
+ /* From Squirrelmail: Translate all dangerous Unicode or Shift_JIS characters which are accepted by
+ * IE as regular characters. */
+ $replace = array(array('ʟ', 'ʟ', /* L UNICODE IPA Extension */
+ 'ʀ', 'ʀ', /* R UNICODE IPA Extension */
+ 'ɴ', 'ɴ', /* N UNICODE IPA Extension */
+ 'E', 'E', /* Unicode FULLWIDTH LATIN CAPITAL LETTER E */
+ 'e', 'e', /* Unicode FULLWIDTH LATIN SMALL LETTER E */
+ 'X', 'X', /* Unicode FULLWIDTH LATIN CAPITAL LETTER X */
+ 'x', 'x', /* Unicode FULLWIDTH LATIN SMALL LETTER X */
+ 'P', 'P', /* Unicode FULLWIDTH LATIN CAPITAL LETTER P */
+ 'p', 'p', /* Unicode FULLWIDTH LATIN SMALL LETTER P */
+ 'R', 'R', /* Unicode FULLWIDTH LATIN CAPITAL LETTER R */
+ 'r', 'r', /* Unicode FULLWIDTH LATIN SMALL LETTER R */
+ 'S', 'S', /* Unicode FULLWIDTH LATIN CAPITAL LETTER S */
+ 's', 's', /* Unicode FULLWIDTH LATIN SMALL LETTER S */
+ 'I', 'I', /* Unicode FULLWIDTH LATIN CAPITAL LETTER I */
+ 'i', 'i', /* Unicode FULLWIDTH LATIN SMALL LETTER I */
+ 'O', 'O', /* Unicode FULLWIDTH LATIN CAPITAL LETTER O */
+ 'o', 'o', /* Unicode FULLWIDTH LATIN SMALL LETTER O */
+ 'N', 'N', /* Unicode FULLWIDTH LATIN CAPITAL LETTER N */
+ 'n', 'n', /* Unicode FULLWIDTH LATIN SMALL LETTER N */
+ 'L', 'L', /* Unicode FULLWIDTH LATIN CAPITAL LETTER L */
+ 'l', 'l', /* Unicode FULLWIDTH LATIN SMALL LETTER L */
+ 'U', 'U', /* Unicode FULLWIDTH LATIN CAPITAL LETTER U */
+ 'u', 'u', /* Unicode FULLWIDTH LATIN SMALL LETTER U */
+ 'ⁿ', 'ⁿ' , /* Unicode SUPERSCRIPT LATIN SMALL LETTER N */
+ "\xEF\xBC\xA5", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER E */
+ /* in unicode this is some Chinese char range */
+ "\xEF\xBD\x85", /* Shift JIS FULLWIDTH LATIN SMALL LETTER E */
+ "\xEF\xBC\xB8", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER X */
+ "\xEF\xBD\x98", /* Shift JIS FULLWIDTH LATIN SMALL LETTER X */
+ "\xEF\xBC\xB0", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER P */
+ "\xEF\xBD\x90", /* Shift JIS FULLWIDTH LATIN SMALL LETTER P */
+ "\xEF\xBC\xB2", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER R */
+ "\xEF\xBD\x92", /* Shift JIS FULLWIDTH LATIN SMALL LETTER R */
+ "\xEF\xBC\xB3", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER S */
+ "\xEF\xBD\x93", /* Shift JIS FULLWIDTH LATIN SMALL LETTER S */
+ "\xEF\xBC\xA9", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER I */
+ "\xEF\xBD\x89", /* Shift JIS FULLWIDTH LATIN SMALL LETTER I */
+ "\xEF\xBC\xAF", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER O */
+ "\xEF\xBD\x8F", /* Shift JIS FULLWIDTH LATIN SMALL LETTER O */
+ "\xEF\xBC\xAE", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER N */
+ "\xEF\xBD\x8E", /* Shift JIS FULLWIDTH LATIN SMALL LETTER N */
+ "\xEF\xBC\xAC", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER L */
+ "\xEF\xBD\x8C", /* Shift JIS FULLWIDTH LATIN SMALL LETTER L */
+ "\xEF\xBC\xB5", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER U */
+ "\xEF\xBD\x95", /* Shift JIS FULLWIDTH LATIN SMALL LETTER U */
+ "\xE2\x81\xBF", /* Shift JIS FULLWIDTH SUPERSCRIPT N */
+ "\xCA\x9F", /* L UNICODE IPA Extension */
+ "\xCA\x80", /* R UNICODE IPA Extension */
+ "\xC9\xB4"), /* N UNICODE IPA Extension */
+ array('l', 'l', 'r', 'r', 'n', 'n', 'E', 'E', 'e', 'e', 'X', 'X', 'x', 'x',
+ 'P', 'P', 'p', 'p', 'R', 'R', 'r', 'r', 'S', 'S', 's', 's', 'I', 'I',
+ 'i', 'i', 'O', 'O', 'o', 'o', 'N', 'N', 'n', 'n', 'L', 'L', 'l', 'l',
+ 'U', 'U', 'u', 'u', 'n', 'n', 'E', 'e', 'X', 'x', 'P', 'p', 'R', 'r',
+ 'S', 's', 'I', 'i', 'O', 'o', 'N', 'n', 'L', 'l', 'U', 'u', 'n', 'l', 'r', 'n'));
+ if ((count($tags)>3) && (count($tags[3])>0))
+ foreach ($tags[3] as $nr=>$value)
+ {
+ /* Remove comments */
+ $newvalue = preg_replace('/(\/\*.*\*\/)/','$2',$value);
+ /* Translate dangerous characters */
+ $newvalue = str_replace($replace[0], $replace[1], $newvalue);
+ sq_defang($newvalue);
+ /* Rename dangerous CSS */
+ $newvalue = preg_replace('/expression/i', 'idiocy', $newvalue);
+ $newvalue = preg_replace('/url/i', 'idiocy', $newvalue);
+ $newattrs = preg_replace('/'.preg_quote($value, '/').'$/', $newvalue, $tags[1][$nr]);
+ $newtag = preg_replace('/'.preg_quote($tags[1][$nr], '/').'/', $newattrs, $tags[0][$nr]);
+ $html = preg_replace('/'.preg_quote($tags[0][$nr], '/').'/', $newtag, $html);
+ }
+ return $html;
+ }
+
+
function rcmail_print_body($part, $safe=FALSE, $plain=FALSE)
{
global $IMAP, $REMOTE_OBJECTS;
$body = preg_replace($remote_patterns, $remote_replaces, $body);
}
- return Q($body, 'show', FALSE);
+ return Q(rcmail_html_filter($body), 'show', FALSE);
}
// text/enriched
$structure->type = 'content';
$a_return_parts[] = &$structure;
}
-
+
// message contains alternative parts
else if ($message_ctype_primary=='multipart' && $message_ctype_secondary=='alternative' && is_array($structure->parts))
{
// part text/[plain|html] OR message/delivery-status
else if (($primary_type=='text' && ($secondary_type=='plain' || $secondary_type=='html') && $mail_part->disposition!='attachment') ||
- ($primary_type=='message' && $secondary_type=='delivery-status'))
+ ($primary_type=='message' && ($secondary_type=='delivery-status' || $secondary_type=='disposition-notification')))
{
$mail_part->type = 'content';
$a_return_parts[] = $mail_part;
$a_return_parts = array_merge($a_return_parts, $parts);
$a_attachments = array_merge($a_attachments, $attachmnts);
}
+
+ // ignore "virtual" protocol parts
+ else if ($primary_type=='protocol')
+ continue;
// part is file/attachment
else if ($mail_part->disposition=='attachment' || $mail_part->disposition=='inline' || $mail_part->headers['content-id'] ||
else
{
if (!$mail_part->filename)
- $mail_part->filename = 'file_'.$mail_part->mime_id;
+ $mail_part->filename = 'Part '.$mail_part->mime_id;
$a_attachments[] = $mail_part;
}
}
if (!$attrib['id'])
$attrib['id'] = 'rcmailMsgBody';
- $safe_mode = (bool)$_GET['_safe'];
+ $safe_mode = $MESSAGE['is_safe'] || intval($_GET['_safe']);
$attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
$out = '<div '. $attrib_str . ">\n";
// remove SCRIPT tags
foreach (array('script', 'applet', 'object', 'embed', 'iframe') as $tag)
{
- while (($pos = strpos($body_lc, '<'.$tag)) && ($pos2 = strpos($body_lc, '</'.$tag.'>', $pos)))
+ while (($pos = strpos($body_lc, '<'.$tag)) && (($pos2 = strpos($body_lc, '</'.$tag.'>', $pos)) || ($pos3 = strpos($body_lc, '>', $pos))))
{
- $pos2 += strlen('</'.$tag.'>');
- $body = substr($body, 0, $pos) . substr($body, $pos2, strlen($body)-$pos2);
+ $end = $pos2 ? $pos2 + strlen('</'.$tag.'>') : $pos3 + 1;
+ $body = substr($body, 0, $pos) . substr($body, $end, strlen($body)-$end);
$body_lc = strtolower($body);
}
}
while ($body != $prev_body)
{
$prev_body = $body;
- $body = preg_replace('/(<[^!][^>]*\s)(on[^=>]+)=([^>]+>)/im', '$1__removed=$3', $body);
+ $body = preg_replace('/(<[^!][^>]*\s)on(?:load|unload|click|dblclick|mousedown|mouseup|mouseover|mousemove|mouseout|focus|blur|keypress|keydown|keyup|submit|reset|select|change)=([^>]+>)/im', '$1__removed=$2', $body);
$body = preg_replace('/(<[^!][^>]*\shref=["\']?)(javascript:)([^>]*?>)/im', '$1null:$3', $body);
}
{
global $CONFIG, $IMAP, $MESSAGE;
- if (!is_array($MESSAGE) || !is_array($MESSAGE['parts']) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE['parts'][$_GET['_part']])
+ $part = asciiwords(get_input_value('_part', RCUBE_INPUT_GPC));
+ if (!is_array($MESSAGE) || !is_array($MESSAGE['parts']) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE['parts'][$part])
return '';
- $part = &$MESSAGE['parts'][$_GET['_part']];
-
+ $part = $MESSAGE['parts'][$part];
$attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'cellspacing', 'cellpadding', 'border', 'summary'));
$out = '<table '. $attrib_str . ">\n";
- if ($filename)
+ if ($part->filename)
{
$out .= sprintf('<tr><td class="title">%s</td><td>%s</td><td>[<a href="./?%s">%s</a>]</tr>'."\n",
Q(rcube_label('filename')),
{
global $MESSAGE;
- $part = $MESSAGE['parts'][$_GET['_part']];
+ $part = $MESSAGE['parts'][asciiwords(get_input_value('_part', RCUBE_INPUT_GPC))];
$ctype_primary = strtolower($part->ctype_primary);
$attrib['src'] = Q('./?'.str_replace('_frame=', ($ctype_primary=='text' ? '_show=' : '_preload='), $_SERVER['QUERY_STRING']));
unset($_SESSION['compose']);
}
+
+
+/**
+ * Send the given message compose object using the configured method
+ */
+function rcmail_deliver_message(&$message, $from, $mailto)
+{
+ global $CONFIG;
+
+ $headers = $message->headers();
+ $msg_body = $message->get();
+
+ // send thru SMTP server using custom SMTP library
+ if ($CONFIG['smtp_server'])
+ {
+ // generate list of recipients
+ $a_recipients = array($mailto);
+
+ if (strlen($headers['Cc']))
+ $a_recipients[] = $headers['Cc'];
+ if (strlen($headers['Bcc']))
+ $a_recipients[] = $headers['Bcc'];
+
+ // clean Bcc from header for recipients
+ $send_headers = $headers;
+ unset($send_headers['Bcc']);
+
+ // send message
+ $smtp_response = array();
+ $sent = smtp_mail($from, $a_recipients, ($foo = $message->txtHeaders($send_headers)), $msg_body, $smtp_response);
+
+ // log error
+ if (!$sent)
+ raise_error(array('code' => 800, 'type' => 'smtp', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => "SMTP error: ".join("\n", $smtp_response)), TRUE, FALSE);
+ }
+
+ // send mail using PHP's mail() function
+ else
+ {
+ // unset some headers because they will be added by the mail() function
+ $headers_enc = $message->headers($headers);
+ $headers_php = $message->_headers;
+ unset($headers_php['To'], $headers_php['Subject']);
+
+ // reset stored headers and overwrite
+ $message->_headers = array();
+ $header_str = $message->txtHeaders($headers_php);
+
+ if (ini_get('safe_mode'))
+ $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str);
+ else
+ $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str, "-f$from");
+ }
+
+ if ($sent) // remove MDN headers after sending
+ unset($headers['Return-Receipt-To'], $headers['Disposition-Notification-To']);
+
+ $message->_headers = array();
+ $message->headers($headers);
+
+ return $sent;
+}
+
+
+function rcmail_send_mdn($uid)
+{
+ global $CONFIG, $USER, $IMAP;
+
+ $message = array('UID' => $uid);
+ $message['headers'] = $IMAP->get_headers($message['UID']);
+ $message['subject'] = rcube_imap::decode_mime_string($message['headers']->subject, $message['headers']->charset);
+
+ if ($message['headers']->mdn_to && !$message['headers']->mdn_sent)
+ {
+ $identity = $USER->get_identity();
+ $sender = format_email_recipient($identity['email'], $identity['name']);
+ $recipient = array_shift($IMAP->decode_address_list($message['headers']->mdn_to));
+ $mailto = $recipient['mailto'];
+
+ $compose = new rc_mail_mime(rcmail_header_delm());
+ $compose->setParam(array(
+ 'text_encoding' => 'quoted-printable',
+ 'html_encoding' => 'quoted-printable',
+ 'head_encoding' => 'quoted-printable',
+ 'head_charset' => RCMAIL_CHARSET,
+ 'html_charset' => RCMAIL_CHARSET,
+ 'text_charset' => RCMAIL_CHARSET,
+ ));
+
+ // compose headers array
+ $headers = array(
+ 'Date' => date('r'),
+ 'From' => $sender,
+ 'To' => $message['headers']->mdn_to,
+ 'Subject' => rcube_label('receiptread') . ': ' . $message['subject'],
+ 'Message-ID' => sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host'])),
+ 'X-Sender' => $identity['email'],
+ 'Content-Type' => 'multipart/report; report-type=disposition-notification',
+ );
+
+ if (!empty($CONFIG['useragent']))
+ $headers['User-Agent'] = $CONFIG['useragent'];
+
+ $body = rcube_label("yourmessage") . "\r\n\r\n" .
+ "\t" . rcube_label("to") . ': ' . rcube_imap::decode_mime_string($message['headers']->to, $message['headers']->charset) . "\r\n" .
+ "\t" . rcube_label("subject") . ': ' . $message['subject'] . "\r\n" .
+ "\t" . rcube_label("sent") . ': ' . format_date(strtotime($message['headers']->date), $CONFIG['date_long']) . "\r\n" .
+ "\r\n" . rcube_label("receiptnote") . "\r\n";
+
+ $ua = !empty($CONFIG['useragent']) ? $CONFIG['useragent'] : "RoundCube Webmail (Version ".RCMAIL_VERSION.")";
+ $report = "Reporting-UA: $ua\r\n";
+
+ if ($message['headers']->to)
+ $report .= "Original-Recipient: {$message['headers']->to}\r\n";
+
+ $report .= "Final-Recipient: rfc822; {$identity['email']}\r\n" .
+ "Original-Message-ID: {$message['headers']->messageID}\r\n" .
+ "Disposition: manual-action/MDN-sent-manually; displayed\r\n";
+
+ $compose->headers($headers, true);
+ $compose->setTXTBody($body);
+ $compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline');
+
+ $sent = rcmail_deliver_message($compose, $identity['email'], $mailto);
+
+ if ($sent)
+ {
+ $IMAP->set_flag($message['UID'], 'MDNSENT');
+ return true;
+ }
+ }
+
+ return false;
+}
// register UI objects
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: get.inc 884 2007-10-18 09:10:35Z thomasb $
+ $Id: get.inc 1026 2008-02-07 07:50:37Z thomasb $
*/
// we have to analyze the whole structure again to find inline objects
list($new_parts, $new_attachments) =
rcmail_parse_message($MESSAGE['structure'],
- array('safe' => (bool)$_GET['_safe'],
+ array('safe' => intval($_GET['_safe']),
'prefer_html' => TRUE,
'get_url' => $GET_URL.'&_part=%s'));
$part->body = $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part);
$OUTPUT = new rcube_html_page();
- $OUTPUT->write(rcmail_print_body($part, (bool)$_GET['_safe']));
+ $OUTPUT->write(rcmail_print_body($part, intval($_GET['_safe'])));
}
else
{
header(sprintf('Content-Disposition: %s; filename="%s";',
$_GET['_download'] ? 'attachment' : 'inline',
- $part->filename ? $part->filename : "roundcube.$ctype_secondary"));
+ $part->filename ? abbreviate_string($part->filename, 55) : "roundcube.$ctype_secondary"));
// turn off output buffering and print part content
- $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part->encoding, true);
+ $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part, true);
}
exit;
$cont = '';
list($MESSAGE['parts']) = rcmail_parse_message($MESSAGE['structure'],
- array('safe' => (bool)$_GET['_safe'],
+ array('safe' => intval($_GET['_safe']),
'get_url' => $GET_URL.'&_part=%s'));
$cont = "<html>\n<head><title></title>\n</head>\n<body>";
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: getunread.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: getunread.inc 1019 2008-02-05 21:39:08Z thomasb $
*/
if (!empty($a_folders))
{
foreach ($a_folders as $mbox_row)
- $OUTPUT->command('set_unread_count', $mbox_row, $IMAP->messagecount($mbox_row, 'UNSEEN'));
+ $OUTPUT->command('set_unread_count', $mbox_row, $IMAP->messagecount($mbox_row, 'UNSEEN'), ($IMAP->get_mailbox_name() == 'INBOX' && $mbox_row == 'INBOX'));
}
$OUTPUT->send();
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: list.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: list.inc 1019 2008-02-05 21:39:08Z thomasb $
*/
$mbox_name = $IMAP->get_mailbox_name();
// fetch message headers
-if ($count = $IMAP->messagecount($mbox_name, 'ALL', !empty($_REQUEST['_refresh'])))
+if ($IMAP->messagecount($mbox_name, 'ALL', !empty($_REQUEST['_refresh'])))
$a_headers = $IMAP->list_headers($mbox_name, NULL, $sort_col, $sort_order);
+$count = $IMAP->messagecount($mbox_name);
$unseen = $IMAP->messagecount($mbox_name, 'UNSEEN', !empty($_REQUEST['_refresh']));
// update message count display
$OUTPUT->set_env('pagecount', $pages);
$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($count));
-// update mailboxlist
-$OUTPUT->command('set_unread_count', $mbox_name, $unseen);
-
// add message rows
if (isset($a_headers) && count($a_headers))
else
$OUTPUT->show_message('nomessagesfound', 'notice');
+// update mailboxlist
+$OUTPUT->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX'));
+
// send response
$OUTPUT->send();
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: mark.inc 573 2007-05-18 11:29:25Z thomasb $
+ $Id: mark.inc 1019 2008-02-05 21:39:08Z thomasb $
*/
if ($marked != -1)
{
$mbox_name = $IMAP->get_mailbox_name();
- $OUTPUT->command('set_unread_count', $mbox_name, $IMAP->messagecount($mbox_name, 'UNSEEN'));
+ $OUTPUT->command('set_unread_count', $mbox_name, $IMAP->messagecount($mbox_name, 'UNSEEN'), ($mbox_name == 'INBOX'));
$OUTPUT->send();
}
}
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: move_del.inc 848 2007-10-02 08:42:18Z thomasb $
+ $Id: move_del.inc 1019 2008-02-05 21:39:08Z thomasb $
*/
else
exit;
-// refresh saved seach set after moving some messages
+// refresh saved search set after moving some messages
if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set)
$_SESSION['search'][$search_request] = $IMAP->refresh_search();
// update mailboxlist
$mbox = $IMAP->get_mailbox_name();
-$OUTPUT->command('set_unread_count', $mbox, $IMAP->messagecount($mbox, 'UNSEEN'));
+$OUTPUT->command('set_unread_count', $mbox, $IMAP->messagecount($mbox, 'UNSEEN'), ($mbox == 'INBOX'));
if ($_action=='moveto' && $target)
$OUTPUT->command('set_unread_count', $target, $IMAP->messagecount($target, 'UNSEEN'));
| Author: Sjon Hortensius <sjon@hortensius.net> |
+-----------------------------------------------------------------------+
- $Id: rss.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: rss.inc 931 2007-11-25 19:45:38Z thomasb $
*/
// Check if the user wants to override the default sortingmethode
if (isset($_GET['_sort']))
- list($sort_col, $sort_order) = explode('_', $_GET['_sort']);
+ list($sort_col, $sort_order) = explode('_', get_input_value('_sort', RCUBE_INPUT_GET));
// Add message to output
if ($messagecount > 0)
// search in subject and sender by default
else
{
- $subject = array("HEADER SUBJECT", "HEADER FROM");
+ $from = ($mbox == $CONFIG['sent_mbox'] || $mbox == $CONFIG['drafts_mbox']) ? "TO" : "FROM";
+ $subject = array("HEADER SUBJECT", "HEADER $from");
$search = trim($str);
}
if ($result_h != NULL)
{
$_SESSION['search'][$search_request] = $IMAP->get_search_set();
+ $_SESSION['last_text_search'] = $str;
rcmail_js_message_list($result_h);
$OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $count));
}
$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($count, 1));
$OUTPUT->send();
-?>
\ No newline at end of file
+?>
| |
| PURPOSE: |
| Compose a new mail message with all headers and attachments |
- | and send it using IlohaMail's SMTP methods or with PHP mail() |
+ | and send it using the PEAR::Net_SMTP class or with PHP mail() |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: sendmail.inc 816 2007-09-26 08:13:21Z thomasb $
+ $Id: sendmail.inc 1120 2008-02-19 23:59:38Z thomasb $
*/
//require_once('lib/smtp.inc');
-require_once('include/rcube_smtp.inc');
require_once('lib/html2text.inc');
require_once('lib/rc_mail_mime.inc');
/****** message sending functions ********/
+// get identity record
function rcmail_get_identity($id)
{
- global $DB, $OUTPUT;
+ global $USER, $OUTPUT;
- // get identity record
- $sql_result = $DB->query("SELECT *, email AS mailto
- FROM ".get_table_name('identities')."
- WHERE identity_id=?
- AND user_id=?
- AND del<>1",
- $id,$_SESSION['user_id']);
-
- if ($DB->num_rows($sql_result))
+ if ($sql_arr = $USER->get_identity($id))
{
- $sql_arr = $DB->fetch_assoc($sql_result);
$out = $sql_arr;
+ $out['mailto'] = $sql_arr['email'];
$name = strpos($sql_arr['name'], ",") ? '"'.$sql_arr['name'].'"' : $sql_arr['name'];
$out['string'] = sprintf('%s <%s>',
rcube_charset_convert($name, RCMAIL_CHARSET, $OUTPUT->get_charset()),
- $sql_arr['mailto']);
+ $sql_arr['email']);
return $out;
}
/****** check submission and compose message ********/
-if (!$savedraft && empty($_POST['_to']) && empty($_POST['_subject']) && $_POST['_message'])
+if (!$savedraft && empty($_POST['_to']) && empty($_POST['_cc']) && empty($_POST['_bcc']) && empty($_POST['_subject']) && $_POST['_message'])
{
$OUTPUT->show_message("sendingfailed", 'error');
$OUTPUT->send('iframe');
// replace new lines and strip ending ', '
$mailto = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset));
+$mailcc = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset));
+$mailbcc = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset));
-// decode address strings
-$to_address_arr = $IMAP->decode_address_list($mailto);
-$identity_arr = rcmail_get_identity(get_input_value('_from', RCUBE_INPUT_POST));
+if (empty($mailto) && !empty($mailcc)) {
+ $mailto = $mailcc;
+ $mailcc = null;
+}
+else if (empty($mailto))
+ $mailto = 'undisclosed-recipients:;';
+// get sender name and address
+$identity_arr = rcmail_get_identity(get_input_value('_from', RCUBE_INPUT_POST));
$from = $identity_arr['mailto'];
-$first_to = is_array($to_address_arr[0]) ? $to_address_arr[0]['mailto'] : $mailto;
if (empty($identity_arr['string']))
$identity_arr['string'] = $from;
// compose headers array
-$headers = array('Date' => date('D, j M Y H:i:s O'),
+$headers = array('Date' => date('r'),
'From' => rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset),
'To' => $mailto);
// additional recipients
-if (!empty($_POST['_cc']))
- $headers['Cc'] = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset));
+if (!empty($mailcc))
+ $headers['Cc'] = $mailcc;
-if (!empty($_POST['_bcc']))
- $headers['Bcc'] = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset));
+if (!empty($mailbcc))
+ $headers['Bcc'] = $mailbcc;
if (!empty($identity_arr['bcc']))
$headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc'];
if (!empty($_POST['_priority']))
{
- $priority = (int)$_POST['_priority'];
+ $priority = intval($_POST['_priority']);
$a_priorities = array(1=>'highest', 2=>'high', 4=>'low', 5=>'lowest');
if ($str_priority = $a_priorities[$priority])
$headers['X-Priority'] = sprintf("%d (%s)", $priority, ucfirst($str_priority));
// additional headers
$headers['Message-ID'] = $message_id;
$headers['X-Sender'] = $from;
+$headers['Received'] = wordwrap('from ' .
+ (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ?
+ gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']).' ['.$_SERVER['HTTP_X_FORWARDED_FOR'].'] via ' : '') .
+ gethostbyaddr($_SERVER['REMOTE_ADDR']).' ['.$_SERVER['REMOTE_ADDR'].'] with ' .
+ $_SERVER['SERVER_PROTOCOL'].' ('.$_SERVER['REQUEST_METHOD'].'); ' . date('r'),
+ 69, rcmail_header_delm() . "\t");
if (!empty($CONFIG['useragent']))
$headers['User-Agent'] = $CONFIG['useragent'];
if (!$savedraft && !empty($CONFIG['generic_message_footer']) && ($footer = file_get_contents(realpath($CONFIG['generic_message_footer']))))
$message_body .= "\r\n" . rcube_charset_convert($footer, 'UTF-8', $message_charset);
-// try to autodetect operating system and use the correct line endings
-// use the configured delimiter for headers
-if (!empty($CONFIG['mail_header_delimiter']))
- $header_delm = $CONFIG['mail_header_delimiter'];
-else if (strtolower(substr(PHP_OS, 0, 3)=='win'))
- $header_delm = "\r\n";
-else if (strtolower(substr(PHP_OS, 0, 3)=='mac'))
- $header_delm = "\r\n";
-else
- $header_delm = "\n";
-
-
$isHtmlVal = strtolower(get_input_value('_is_html', RCUBE_INPUT_POST));
$isHtml = ($isHtmlVal == "1");
// create extended PEAR::Mail_mime instance
-$MAIL_MIME = new rc_mail_mime($header_delm);
+$MAIL_MIME = new rc_mail_mime(rcmail_header_delm());
// For HTML-formatted messages, construct the MIME message with both
// the HTML part and the plain-text part
// add a plain text version of the e-mail as an alternative part.
$h2t = new html2text($message_body);
$plainTextPart = wordwrap($h2t->get_text(), 998, "\r\n", true);
- $MAIL_MIME->setTXTBody($plainTextPart);
+ $MAIL_MIME->setTXTBody(html_entity_decode($plainTextPart, ENT_COMPAT, 'utf-8'));
// look for "emoticon" images from TinyMCE and copy into message as attachments
rcmail_attach_emoticons($MAIL_MIME);
// add stored attachments, if any
if (is_array($_SESSION['compose']['attachments']))
- foreach ($_SESSION['compose']['attachments'] as $attachment)
- $MAIL_MIME->addAttachment($attachment['path'], $attachment['mimetype'], $attachment['name'], true, 'base64', 'attachment', $message_charset);
+ foreach ($_SESSION['compose']['attachments'] as $id => $attachment)
+ {
+ $dispurl = '/\ssrc\s*=\s*[\'"]?\S+display-attachment\S+file=rcmfile' . $id . '[\'"]?/';
+ $match = preg_match($dispurl, $message_body);
+ if ($isHtml && ($match > 0))
+ {
+ $message_body = preg_replace($dispurl, ' src="'.$attachment['name'].'"', $message_body);
+ $MAIL_MIME->setHTMLBody($message_body);
+ $MAIL_MIME->addHTMLImage($attachment['path'], $attachment['mimetype'], $attachment['name']);
+ }
+ else
+ {
+ /*
+ We need to replace mime_content_type in a later release because the function
+ is deprecated in favour of File_Info
+ */
+ $MAIL_MIME->addAttachment($attachment['path'],
+ rc_mime_content_type($attachment['path'], $attachment['mimetype']),
+ $attachment['name'], true, 'base64',
+ 'attachment', $message_charset);
+ }
+ }
// add submitted attachments
if (is_array($_FILES['_attachments']['tmp_name']))
$transfer_encoding = in_array(strtoupper($message_charset), $charset_7bit) ? '7bit' : '8bit';
// encoding settings for mail composing
-$message_param = array(
+$MAIL_MIME->setParam(array(
'text_encoding' => $transfer_encoding,
'html_encoding' => 'quoted-printable',
'head_encoding' => 'quoted-printable',
'head_charset' => $message_charset,
'html_charset' => $message_charset,
'text_charset' => $message_charset,
-);
-
-// compose message body and get headers
-$msg_body = $MAIL_MIME->get($message_param);
-// unset to save memory.
-unset($MAIL_MIME->_parts);
+));
// encoding subject header with mb_encode provides better results with asian characters
if ($MBSTRING && function_exists("mb_encode_mimeheader"))
{
mb_internal_encoding($message_charset);
- $mb_subject = mb_encode_mimeheader($headers['Subject'], $message_charset, 'Q');
+ $headers['Subject'] = mb_encode_mimeheader($headers['Subject'], $message_charset, 'Q');
mb_internal_encoding(RCMAIL_CHARSET);
}
-// Begin SMTP Delivery Block
-if (!$savedraft) {
+// pass headers to message object
+$MAIL_MIME->headers($headers);
- // send thru SMTP server using custom SMTP library
- if ($CONFIG['smtp_server'])
- {
- // generate list of recipients
- $a_recipients = array($mailto);
-
- if (strlen($headers['Cc']))
- $a_recipients[] = $headers['Cc'];
- if (strlen($headers['Bcc']))
- $a_recipients[] = $headers['Bcc'];
-
- // clean Bcc from header for recipients
- $send_headers = $headers;
- unset($send_headers['Bcc']);
-
- if (!empty($mb_subject))
- $send_headers['Subject'] = $mb_subject;
-
- // send message
- $smtp_response = array();
- $sent = smtp_mail($from, $a_recipients, ($foo = $MAIL_MIME->txtHeaders($send_headers)), $msg_body, $smtp_response);
-
- // log error
- if (!$sent)
- raise_error(array('code' => 800, 'type' => 'smtp', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => "SMTP error: ".join("\n", $smtp_response)), TRUE, FALSE);
- }
-
- // send mail using PHP's mail() function
- else
- {
- // unset some headers because they will be added by the mail() function
- $headers_enc = $MAIL_MIME->headers($headers);
- $headers_php = $MAIL_MIME->_headers;
- unset($headers_php['To'], $headers_php['Subject']);
-
- if (!empty($mb_subject))
- $headers_enc['Subject'] = $mb_subject;
-
- // reset stored headers and overwrite
- $MAIL_MIME->_headers = array();
- $header_str = $MAIL_MIME->txtHeaders($headers_php);
-
- if (ini_get('safe_mode'))
- $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str);
- else
- $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str, "-f$from");
- }
-
+// Begin SMTP Delivery Block
+if (!$savedraft)
+{
+ $sent = rcmail_deliver_message($MAIL_MIME, $from, $mailto);
// return to compose page if sending failed
if (!$sent)
return;
}
-
// set repliead flag
if ($_SESSION['compose']['reply_uid'])
$IMAP->set_flag($_SESSION['compose']['reply_uid'], 'ANSWERED');
if ($CONFIG[$store_target])
{
- // create string of complete message headers
- $header_str = $MAIL_MIME->txtHeaders($headers);
-
// check if mailbox exists
if (!in_array_nocase($CONFIG[$store_target], $IMAP->list_mailboxes()))
$store_folder = $IMAP->create_mailbox($CONFIG[$store_target], TRUE);
else
$store_folder = TRUE;
- // add headers to message body
- $msg_body = $header_str."\r\n".$msg_body;
-
// append message to sent box
if ($store_folder)
- $saved = $IMAP->save_message($CONFIG[$store_target], $msg_body);
+ $saved = $IMAP->save_message($CONFIG[$store_target], $MAIL_MIME->getMessage());
// raise error if saving failed
if (!$saved)
$OUTPUT->send('iframe');
}
-
?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/mail/sendmdn.inc |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Send a message disposition notification for a specific mail |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: sendmail.inc 930 2007-11-25 17:34:19Z thomasb $
+
+*/
+
+require_once('lib/rc_mail_mime.inc');
+
+
+if (!empty($_POST['_uid'])) {
+ $sent = rcmail_send_mdn(get_input_value('_uid', RCUBE_INPUT_POST));
+}
+
+// show either confirm or error message
+if ($sent) {
+ $OUTPUT->set_env('mdn_request', false);
+ $OUTPUT->show_message('receiptsent', 'confirmation');
+}
+else {
+ $OUTPUT->show_message('errorsendingreceipt', 'error');
+}
+
+$OUTPUT->send();
+
+?>
\ No newline at end of file
| program/steps/mail/show.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: show.inc 668 2007-08-10 08:27:40Z thomasb $
+ $Id: show.inc 1046 2008-02-11 23:07:44Z thomasb $
*/
require_once('Mail/mimeDecode.php');
+require_once('lib/rc_mail_mime.inc');
$PRINT_MODE = $_action=='print' ? TRUE : FALSE;
return;
}
}
+
+ // check if safe flag is set
+ if ($MESSAGE['is_safe'] = intval($_GET['_safe']))
+ $_SESSION['safe_messages'][$MESSAGE['UID']] = true;
+ else if ($_SESSION['safe_messages'][$MESSAGE['UID']])
+ $MESSAGE['is_safe'] = 1;
// calculate Etag for this request
- $etag = md5($MESSAGE['UID'].$IMAP->get_mailbox_name().session_id().($PRINT_MODE?1:0));
+ $etag = md5($MESSAGE['UID'].$IMAP->get_mailbox_name().session_id().intval($MESSAGE['headers']->mdn_sent).intval($MESSAGE['is_safe']).intval($PRINT_MODE));
// allow caching, unless remote images are present
- if ((bool)get_input_value('_safe', RCUBE_INPUT_GET))
+ if ((bool)$MESSAGE['is_safe'])
send_nocacheing_headers();
else if (empty($CONFIG['devel_mode']))
send_modified_header($_SESSION['login_time'], $etag);
if ($MESSAGE['structure'] = $IMAP->get_structure($MESSAGE['UID']))
list($MESSAGE['parts'], $MESSAGE['attachments']) = rcmail_parse_message(
$MESSAGE['structure'],
- array('safe' => (bool)$_GET['_safe'],
+ array('safe' => $MESSAGE['is_safe'],
'prefer_html' => $CONFIG['prefer_html'],
'get_url' => $GET_URL.'&_part=%s')
);
// give message uid to the client
$OUTPUT->set_env('uid', $MESSAGE['UID']);
- $OUTPUT->set_env('safemode', (bool)$_GET['_safe']);
+ $OUTPUT->set_env('safemode', $MESSAGE['is_safe']);
+
+ // check for unset disposition notification
+ if ($MESSAGE['headers']->mdn_to && !$MESSAGE['headers']->mdn_sent && $IMAP->get_mailbox_name() != $CONFIG['drafts_mbox'])
+ {
+ if (intval($CONFIG['mdn_requests']) === 1)
+ {
+ if (rcmail_send_mdn($MESSAGE['UID']))
+ $OUTPUT->show_message('receiptsent', 'confirmation');
+ }
+ else if (empty($CONFIG['mdn_requests']))
+ {
+ rcube_add_label('mdnrequest');
+ $OUTPUT->set_env('mdn_request', true);
+ }
+ }
+
- $next = $prev = -1;
+ $next = $prev = $first = $last = -1;
// get previous, first, next and last message UID
- if (!($_SESSION['sort_col'] == 'date' && $_SESSION['sort_order'] == 'DESC') &&
- $IMAP->get_capability('sort'))
+ if ((!($_SESSION['sort_col'] == 'date' && $_SESSION['sort_order'] == 'DESC') &&
+ $IMAP->get_capability('sort')) || !empty($_REQUEST['_search']))
{
// Only if we use custom sorting
$a_msg_index = $IMAP->message_index(NULL, $_SESSION['sort_col'], $_SESSION['sort_order']);
parse_template('messagepreview');
else
parse_template('message');
-?>
\ No newline at end of file
+?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: upload.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: upload.inc 1085 2008-02-14 23:49:30Z till $
*/
$response = '';
-foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath)
+if (is_array($_FILES['_attachments']['tmp_name']))
{
- $tmpfname = tempnam($temp_dir, 'rcmAttmnt');
- if (move_uploaded_file($filepath, $tmpfname))
+ foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath)
{
- $id = count($_SESSION['compose']['attachments']);
- $_SESSION['compose']['attachments'][] = array('name' => $_FILES['_attachments']['name'][$i],
+ $tmpfname = tempnam($temp_dir, 'rcmAttmnt');
+ if (move_uploaded_file($filepath, $tmpfname))
+ {
+ $id = count($_SESSION['compose']['attachments']);
+ $_SESSION['compose']['attachments'][] = array('name' => $_FILES['_attachments']['name'][$i],
'mimetype' => $_FILES['_attachments']['type'][$i],
'path' => $tmpfname);
- if (is_file($CONFIG['skin_path'] . '/images/icons/remove-attachment.png'))
- $button = sprintf(
- '<img src="%s/images/icons/remove-attachment.png" alt="%s" border="0" style="padding-right:2px;vertical-align:middle" />',
- $CONFIG['skin_path'],
- Q(rcube_label('delete')));
- else
- $button = Q(rcube_label('delete'));
-
- $content = sprintf(
- '<a href="#delete" onclick="return %s.command(\'remove-attachment\', \'rcmfile%d\', this)" title="%s">%s</a>%s',
- JS_OBJECT_NAME,
- $id,
- Q(rcube_label('delete')),
- $button,
- Q($_FILES['_attachments']['name'][$i]));
-
- $OUTPUT->command('add2attachment_list', "rcmfile$id", $content);
- }
- else // upload failed
- {
- $err = $_FILES['_attachments']['error'][$i];
- if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE)
- $msg = rcube_label(array('name' => 'filesizeerror', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize'))))));
- else
- $msg = rcube_label('fileuploaderror');
+ if (is_file($CONFIG['skin_path'] . '/images/icons/remove-attachment.png'))
+ $button = sprintf(
+ '<img src="%s/images/icons/remove-attachment.png" alt="%s" border="0" style="padding-right:2px;vertical-align:middle" />',
+ $CONFIG['skin_path'],
+ Q(rcube_label('delete')));
+ else
+ $button = Q(rcube_label('delete'));
+
+ $content = sprintf(
+ '<a href="#delete" onclick="return %s.command(\'remove-attachment\', \'rcmfile%d\', this)" title="%s">%s</a>%s',
+ JS_OBJECT_NAME,
+ $id,
+ Q(rcube_label('delete')),
+ $button,
+ Q($_FILES['_attachments']['name'][$i]));
+
+ $OUTPUT->command('add2attachment_list', "rcmfile$id", $content);
+ }
+ else // upload failed
+ {
+ $err = $_FILES['_attachments']['error'][$i];
+ if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE)
+ $msg = rcube_label(array('name' => 'filesizeerror', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize'))))));
+ else
+ $msg = rcube_label('fileuploaderror');
- $OUTPUT->command('display_message', $msg, 'error');
+ $OUTPUT->command('display_message', $msg, 'error');
+ }
}
}
-
// send html page with JS calls as response
$OUTPUT->command('show_attachment_form', false);
$OUTPUT->command('auto_save_start', false);
$OUTPUT->send('iframe');
-?>
+?>
\ No newline at end of file
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: delete_identity.inc 543 2007-04-28 18:07:12Z thomasb $
+ $Id: delete_identity.inc 1035 2008-02-10 17:08:40Z till $
*/
if (($ids = get_input_value('_iid', RCUBE_INPUT_GET)) && preg_match('/^[0-9]+(,[0-9]+)*$/', $ids))
{
- $DB->query(
- "UPDATE ".get_table_name('identities')."
- SET del=1
- WHERE user_id=?
- AND identity_id IN (".$ids.")",
- $_SESSION['user_id']);
-
- $count = $DB->affected_rows();
- if ($count)
- $OUTPUT->show_message('deletedsuccessfully', 'confirmation');
+ if ($USER->delete_identity($ids))
+ {
+ $OUTPUT->show_message('deletedsuccessfully', 'confirmation');
+ }
+ else
+ {
+ $OUTPUT->show_message('nodeletelastidentity', 'error');
+ }
// send response
if ($OUTPUT->ajax_call)
$OUTPUT->send();
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: edit_identity.inc 543 2007-04-28 18:07:12Z thomasb $
+ $Id: edit_identity.inc 940 2007-12-11 04:20:01Z estadtherr $
*/
if (($_GET['_iid'] || $_POST['_iid']) && $_action=='edit-identity')
{
- $DB->query("SELECT * FROM ".get_table_name('identities')."
- WHERE identity_id=?
- AND user_id=?
- AND del<>1",
- get_input_value('_iid', RCUBE_INPUT_GPC),
- $_SESSION['user_id']);
-
- $IDENTITY_RECORD = $DB->fetch_assoc();
+ $IDENTITY_RECORD = $USER->get_identity(get_input_value('_iid', RCUBE_INPUT_GPC));
if (is_array($IDENTITY_RECORD))
$OUTPUT->set_env('iid', $IDENTITY_RECORD['identity_id']);
$OUTPUT->add_script("tinyMCE.init({ mode : 'specific_textareas'," .
"apply_source_formatting : true," .
"content_css : '\$__skin_path' + '/editor_content.css'," .
- "popups_css : '\$__skin_path' + '/editor_popups.css'," .
"editor_css : '\$__skin_path' + '/editor_ui.css'," .
"theme : 'advanced'," .
"theme_advanced_toolbar_location : 'top'," .
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: func.inc 892 2007-10-20 21:47:11Z thomasb $
+ $Id: func.inc 1176 2008-03-03 21:47:59Z thomasb $
*/
-// get user record
-$sql_result = $DB->query("SELECT username, mail_host FROM ".get_table_name('users')."
- WHERE user_id=?",
- $_SESSION['user_id']);
-
-if ($USER_DATA = $DB->fetch_assoc($sql_result))
-{
- $username = $USER_DATA['username'] . (!strpos($USER_DATA['username'], '@') ? '@'.$USER_DATA['mail_host'] : '');
- $OUTPUT->set_pagetitle(sprintf('%s %s', rcube_label('settingsfor'), $username));
-}
+if ($USER->ID)
+ $OUTPUT->set_pagetitle(rcube_label('settingsfor') . " ". $USER->get_username());
{
global $DB, $CONFIG, $sess_user_lang;
- $no_override = !empty($CONFIG['dont_override']) ? array_flip((array)$CONFIG['dont_override']) : array('preview_pane'=>true);
+ $no_override = is_array($CONFIG['dont_override']) ? array_flip($CONFIG['dont_override']) : array();
// add some labels to client
rcube_add_label('nopagesizewarning');
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('timezone')),
- $select_timezone->show($CONFIG['timezone']));
+ $select_timezone->show((string)$CONFIG['timezone']));
}
// daylight savings
}
// Show checkbox for HTML Editor
- if (!isset($no_override['htmleditor']) && $CONFIG['enable_htmleditor'])
+ if (!isset($no_override['htmleditor']))
{
$field_id = 'rcmfd_htmleditor';
$input_htmleditor = new checkbox(array('name' => '_htmleditor', 'id' => $field_id, 'value' => 1));
function rcmail_identities_list($attrib)
{
- global $DB, $CONFIG, $OUTPUT;
-
-
- // get contacts from DB
- $sql_result = $DB->query("SELECT * FROM ".get_table_name('identities')."
- WHERE del<>1
- AND user_id=?
- ORDER BY standard DESC, name ASC",
- $_SESSION['user_id']);
-
+ global $OUTPUT, $USER;
// add id to message list table if not specified
if (!strlen($attrib['id']))
$a_show_cols = array('name', 'email', 'organization', 'reply-to');
// create XHTML table
- $out = rcube_table_output($attrib, $sql_result, $a_show_cols, 'identity_id');
+ $out = rcube_table_output($attrib, $USER->list_identities(), $a_show_cols, 'identity_id');
// set client env
$OUTPUT->add_gui_object('identitieslist', $attrib['id']);
// register UI objects
$OUTPUT->add_handlers(array(
'userprefs' => 'rcmail_user_prefs_form',
- 'itentitieslist' => 'rcmail_identities_list'
+ 'identitieslist' => 'rcmail_identities_list',
+ 'itentitieslist' => 'rcmail_identities_list' // keep this for backward compatibility
));
| program/steps/settings/manage_folders.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: manage_folders.inc 887 2007-10-19 12:24:04Z robin $
+ $Id: manage_folders.inc 1159 2008-02-29 11:49:09Z thomasb $
*/
$display_rename = str_repeat(' ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7');
$OUTPUT->command('replace_folder_row', $oldname, $rename, $display_rename);
foreach ($a_mboxes as $mbox)
- if (preg_match('/^'.preg_quote($oldname.$delimiter).'/', $mbox))
+ if (preg_match('/^'.preg_quote($oldname . $delimiter, '/').'/', $mbox))
{
- $c_rename = preg_replace('/^'.preg_quote($oldname).'/', $rename, $mbox);
+ $c_rename = preg_replace('/^'.preg_quote($oldname, '/').'/', $rename, $mbox);
$foldersplit = explode($delimiter, $c_rename);
$level = count($foldersplit) - 1;
$display_rename = str_repeat(' ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7');
{
$OUTPUT->command('remove_folder_row', get_input_value('_mboxes', RCUBE_INPUT_POST));
foreach ($a_mboxes as $mbox)
- if (preg_match('/^'.preg_quote(get_input_value('_mboxes', RCUBE_INPUT_POST).$delimiter).'/', $mbox))
+ {
+ $regex = get_input_value('_mboxes', RCUBE_INPUT_POST) . $delimiter;
+ $regex = preg_quote($regex, '/');
+ if (preg_match('/^'. $regex .'/', $mbox))
+ {
$OUTPUT->command('remove_folder_row', $mbox);
+ }
+ }
$OUTPUT->show_message('folderdeleted', 'confirmation');
$OUTPUT->send();
}
// add table header
$out .= "<thead><tr>\n";
- $out .= sprintf('<td class="name">%s</td><td class="subscribed">%s</td>'.
+ $out .= sprintf('<td class="name">%s</td><td class="msgcount">%s</td><td class="subscribed">%s</td>'.
'<td class="rename"> </td><td class="delete"> </td>',
- rcube_label('foldername'), rcube_label('subscribed'));
+ rcube_label('foldername'), rcube_label('messagecount'), rcube_label('subscribed'));
$out .= "\n</tr></thead>\n<tbody>\n";
$foldersplit = explode($delimiter, $folder);
$level = count($foldersplit) - 1;
$display_folder = str_repeat(' ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7');
- $folder_html = $CONFIG['protect_default_folders'] && in_array($folder, $CONFIG['default_imap_folders']) ? rcube_label(strtolower($folder)) : $display_folder;
+ $folder_html = $CONFIG['protect_default_folders'] && in_array($folder, $CONFIG['default_imap_folders']) ? rcmail_localize_foldername($folder) : $display_folder;
if (!$protected)
$a_js_folders['rcmrow'.($i+1)] = array($folder, rcube_charset_convert($folder, 'UTF-7'));
- $out .= sprintf('<tr id="rcmrow%d" class="%s"><td>%s</td>',
+ $out .= sprintf('<tr id="rcmrow%d" class="%s"><td class="name">%s</td><td class="msgcount">%d</td>',
$i+1,
$zebra_class,
- Q($folder_html));
+ Q($folder_html),
+ $IMAP->messagecount($folder));
if ($protected)
- $out .= '<td> '.($subscribed ? '•' : '-').'</td>';
+ $out .= '<td class="subscribed"> '.($subscribed ? '•' : '-').'</td>';
else
- $out .= '<td>'.$checkbox_subscribe->show($subscribed?$folder:'', array('value' => $folder)).'</td>';
+ $out .= '<td class="subscribed">'.$checkbox_subscribe->show($subscribed?$folder:'', array('value' => $folder)).'</td>';
// add rename and delete buttons
if (!$protected)
- $out .= sprintf('<td><a href="#rename" title="%s">%s</a>'.
- '<td><a href="#delete" title="%s">%s</a></td>',
+ $out .= sprintf('<td class="rename"><a href="#rename" title="%s">%s</a>'.
+ '<td class="delete"><a href="#delete" title="%s">%s</a></td>',
rcube_label('renamefolder'),
$edit_button,
rcube_label('deletefolder'),
function rcube_create_folder_form($attrib)
{
+ global $OUTPUT;
+
list($form_start, $form_end) = get_form_tags($attrib, 'create-folder');
unset($attrib['form']);
+ if ($attrib['hintbox'])
+ $OUTPUT->add_gui_object('createfolderhint', $attrib['hintbox']);
// return the complete edit form as table
$out = "$form_start\n";
}
$out .= "\n$form_end";
-
+
return $out;
}
));
// add some labels to client
-rcube_add_label('deletefolderconfirm');
+rcube_add_label('deletefolderconfirm','addsubfolderhint');
$OUTPUT->send('managefolders');
?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: save_identity.inc 543 2007-04-28 18:07:12Z thomasb $
+ $Id: save_identity.inc 938 2007-12-10 15:27:19Z thomasb $
*/
}
-// update an existing contact
-if ($_POST['_iid'])
- {
- $a_write_sql = array();
+$save_data = array();
+foreach ($a_save_cols as $col)
+{
+ $fname = '_'.$col;
+ if (isset($_POST[$fname]))
+ $save_data[$col] = get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols));
+}
- foreach ($a_save_cols as $col)
- {
- $fname = '_'.$col;
- if (isset($_POST[$fname]))
- $a_write_sql[] = sprintf("%s=%s",
- $DB->quoteIdentifier($col),
- $DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols))));
- }
+// set "off" values for checkboxes that were not checked, and therefore
+// not included in the POST body.
+foreach ($a_boolean_cols as $col)
+{
+ $fname = '_' . $col;
+ if (!isset($_POST[$fname]))
+ $save_data[$col] = 0;
+}
- // set "off" values for checkboxes that were not checked, and therefore
- // not included in the POST body.
- foreach ($a_boolean_cols as $col)
- {
- $fname = '_' . $col;
- if (!isset($_POST[$fname]))
- $a_write_sql[] = sprintf("%s=0", $DB->quoteIdentifier($col));
- }
- if (sizeof($a_write_sql))
- {
- $DB->query(
- "UPDATE ".get_table_name('identities')."
- SET ".join(', ', $a_write_sql)."
- WHERE identity_id=?
- AND user_id=?
- AND del<>1",
- get_input_value('_iid', RCUBE_INPUT_POST),
- $_SESSION['user_id']);
-
- $updated = $DB->affected_rows();
- }
-
- if ($updated)
- {
+// update an existing contact
+if ($_POST['_iid'])
+{
+ if ($updated = $USER->update_identity(get_input_value('_iid', RCUBE_INPUT_POST), $save_data))
+ {
$OUTPUT->show_message('successfullysaved', 'confirmation');
if (!empty($_POST['_standard']))
$default_id = get_input_value('_iid', RCUBE_INPUT_POST);
if ($_POST['_framed'])
- {
+ {
// update the changed col in list
// ...
- }
}
+ }
else if ($DB->is_error())
- {
+ {
// show error message
$OUTPUT->show_message('errorsaving', 'error');
rcmail_overwrite_action('edit-identitiy');
return;
- }
}
+}
// insert a new contact
else
+{
+ if ($insert_id = $USER->insert_identity($save_data))
{
- $a_insert_cols = $a_insert_values = array();
-
- foreach ($a_save_cols as $col)
- {
- $fname = '_'.$col;
- if (!isset($_POST[$fname]))
- continue;
-
- $a_insert_cols[] = $DB->quoteIdentifier($col);
- $a_insert_values[] = $DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols)));
- }
-
- if (sizeof($a_insert_cols))
- {
- $DB->query("INSERT INTO ".get_table_name('identities')."
- (user_id, ".join(', ', $a_insert_cols).")
- VALUES (?, ".join(', ', $a_insert_values).")",
- $_SESSION['user_id']);
-
- $insert_id = $DB->insert_id(get_sequence_name('identities'));
- }
-
- if ($insert_id)
- {
$_GET['_iid'] = $insert_id;
if (!empty($_POST['_standard']))
$default_id = $insert_id;
if ($_POST['_framed'])
- {
+ {
// add contact row or jump to the page where it should appear
// ....
- }
}
+ }
else
- {
+ {
// show error message
$OUTPUT->show_message('errorsaving', 'error');
rcmail_overwrite_action('edit-identity');
return;
- }
}
+}
// mark all other identities as 'not-default'
if ($default_id)
- $DB->query(
- "UPDATE ".get_table_name('identities')."
- SET ".$DB->quoteIdentifier('standard')."='0'
- WHERE user_id=?
- AND identity_id<>?
- AND del<>1",
- $_SESSION['user_id'],
- $default_id);
+ $USER->set_default($default_id);
// go to next step
rcmail_overwrite_action($_framed ? 'edit-identity' : 'identities');
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: save_prefs.inc 768 2007-09-01 14:55:10Z till $
+ $Id: save_prefs.inc 938 2007-12-10 15:27:19Z thomasb $
*/
// force min size
if ($a_user_prefs['pagesize'] < 1)
- {
$a_user_prefs['pagesize'] = 10;
- }
+
if (isset($CONFIG['max_pagesize']) && ($a_user_prefs['pagesize'] > $CONFIG['max_pagesize']))
- {
$a_user_prefs['pagesize'] = (int) $CONFIG['max_pagesize'];
- }
-if (rcmail_save_user_prefs($a_user_prefs))
+if ($USER->save_prefs($a_user_prefs))
$OUTPUT->show_message('successfullysaved', 'confirmation');
body.iframe
{
margin: 0px;
+ background-color: #FFF;
}
body.extwin
font-size: 11px;
}
+.hint
+{
+ color: #666;
+ font-size: 11px;
+}
/** common user interface objects */
\r
body, td, pre {\r
font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 10px;\r
+ font-size: 12px;\r
}\r
\r
body {\r
- background-color: #FFFFFF;\r
+ background-color: #FFFFFF;
+ margin-left: 4px;
+ margin-right: 4px;
+ margin-top: 2px;
}\r
\r
.mceVisualAid {\r
+++ /dev/null
-/* This file contains the CSS data for all popups in TinyMCE */\r
-\r
-body {\r
- background-color: #F0F0EE;\r
- font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 11px;\r
- scrollbar-3dlight-color: #F0F0EE;\r
- scrollbar-arrow-color: #676662;\r
- scrollbar-base-color: #F0F0EE;\r
- scrollbar-darkshadow-color: #DDDDDD;\r
- scrollbar-face-color: #E0E0DD;\r
- scrollbar-highlight-color: #F0F0EE;\r
- scrollbar-shadow-color: #F0F0EE;\r
- scrollbar-track-color: #F5F5F5;\r
- margin: 8px;\r
-}\r
-\r
-td {\r
- font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 11px;\r
-}\r
-\r
-input {\r
- background: #FFFFFF;\r
- border: 1px solid #cccccc;\r
-}\r
-\r
-td, input, select, textarea {\r
- font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 10px;\r
-}\r
-\r
-input, select, textarea {\r
- border: 1px solid #808080;\r
-}\r
-\r
-.input_noborder {\r
- border: 0;\r
-}\r
-\r
-#insert, .updateButton {\r
- font-weight: bold;\r
- width: 90px;\r
- height: 21px;\r
- border: 0;\r
- background-image: url('../images/insert_button_bg.gif');\r
- cursor: pointer;\r
-}\r
-\r
-#cancel {\r
- font-weight: bold;\r
- width: 90px;\r
- height: 21px;\r
- border: 0;\r
- background-image: url('../images/cancel_button_bg.gif');\r
- cursor: pointer;\r
-}\r
-\r
-/* Mozilla only style */\r
-html>body #insert, html>body #cancel {\r
- padding-bottom: 2px;\r
-}\r
-\r
-.title {\r
- font-size: 12px;\r
- font-weight: bold;\r
- color: #2B6FB6;\r
-}\r
-\r
-table.charmap {\r
- border-style: solid;\r
- border-width: 1px;\r
- border-color: #AAAAAA;\r
-}\r
-\r
-td.charmap, td.charmapOver {\r
- color: #000000;\r
- border-color: #AAAAAA;\r
- border-style: solid;\r
- border-width: 1px;\r
- text-align: center;\r
- font-size: 12px;\r
-}\r
-\r
-td.charmapOver {\r
- background-color: #CCCCCC;\r
- cursor: default;\r
-}\r
-\r
-a.charmap {\r
- color: #000000;\r
- text-decoration: none\r
-}\r
-\r
-.wordWrapCode {\r
- vertical-align: middle;\r
- border: 1px none #000000;\r
- background-color: transparent;\r
-}\r
-\r
-input.radio {\r
- border: 1px none #000000;\r
- background-color: transparent;\r
- vertical-align: middle;\r
-}\r
-\r
-input.checkbox {\r
- border: 1px none #000000;\r
- background-color: transparent;\r
- vertical-align: middle;\r
-}\r
-\r
-.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected {\r
- margin-left: 1px;\r
-}\r
-\r
-.mceButtonNormal {\r
- border-top: 1px solid;\r
- border-left: 1px solid;\r
- border-bottom: 1px solid;\r
- border-right: 1px solid;\r
- border-color: #F0F0EE;\r
- cursor: default;\r
-}\r
-\r
-.mceButtonOver {\r
- border: 1px solid #0A246A;\r
- cursor: default;\r
- background-color: #B6BDD2;\r
-}\r
-\r
-.mceButtonDown {\r
- cursor: default;\r
- border: 1px solid #0A246A;\r
- background-color: #8592B5;\r
-}\r
-\r
-.mceButtonDisabled {\r
- filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);\r
- -moz-opacity:0.3;\r
- opacity: 0.3;\r
- border-top: 1px solid;\r
- border-left: 1px solid;\r
- border-bottom: 1px solid;\r
- border-right: 1px solid;\r
- border-color: #F0F0EE;\r
- cursor: default;\r
-}\r
-\r
-.mceActionPanel {\r
- margin-top: 5px;\r
-}\r
-\r
-/* Tabs classes */\r
-\r
-.tabs {\r
- float: left;\r
- width: 100%;\r
- line-height: normal;\r
- background-image: url("../images/xp/tabs_bg.gif");\r
-}\r
-\r
-.tabs ul {\r
- margin: 0;\r
- padding: 0 0 0;\r
- list-style: none;\r
-}\r
-\r
-.tabs li {\r
- float: left;\r
- background: url("../images/xp/tab_bg.gif") no-repeat left top;\r
- margin: 0;\r
- margin-left: 0;\r
- margin-right: 2px;\r
- padding: 0 0 0 10px;\r
- line-height: 18px;\r
-}\r
-\r
-.tabs li.current {\r
- background: url("../images/xp/tab_sel_bg.gif") no-repeat left top;\r
- margin-right: 2px;\r
-}\r
-\r
-.tabs span {\r
- float: left;\r
- display: block;\r
- background: url("../images/xp/tab_end.gif") no-repeat right top;\r
- padding: 0px 10px 0 0;\r
-}\r
-\r
-.tabs .current span {\r
- background: url("../images/xp/tab_sel_end.gif") no-repeat right top;\r
-}\r
-\r
-.tabs a {\r
- text-decoration: none;\r
- font-family: Verdana, Arial;\r
- font-size: 10px;\r
-}\r
-\r
-.tabs a:link, .tabs a:visited, .tabs a:hover {\r
- color: black;\r
-}\r
-\r
-.tabs a:hover {\r
-}\r
-\r
-.tabs .current {\r
-}\r
-\r
-.tabs .current a, .tabs .current a:link, .tabs .current a:visited {\r
-}\r
-\r
-.panel_wrapper div.panel {\r
- display: none;\r
-}\r
-\r
-.panel_wrapper div.current {\r
- display: block;\r
- width: 100%;\r
- height: 300px;\r
- overflow: visible; /* Should be auto but that breaks Safari */\r
-}\r
-\r
-.panel_wrapper {\r
- border: 1px solid #919B9C;\r
- border-top: 0px;\r
- padding: 10px;\r
- padding-top: 5px;\r
- clear: both;\r
- background-color: white;\r
-}\r
-\r
-fieldset {\r
- border: 1px solid #919B9C;\r
- font-family: Verdana, Arial;\r
- font-size: 10px;\r
- padding: 0;\r
- margin: 0;\r
- padding: 4px;\r
-}\r
-\r
-legend {\r
- color: #2B6FB6;\r
- font-weight: bold;\r
-}\r
-\r
-.properties {\r
- width: 100%;\r
-}\r
-\r
-.properties .column1 {\r
-}\r
-\r
-.properties .column2 {\r
- text-align: left;\r
-}\r
-\r
-a:link, a:visited {\r
- color: black;\r
-}\r
-\r
-a:hover {\r
- color: #2B6FB6;\r
-}\r
-\r
-#plugintable thead {\r
- font-weight: bold;\r
- background-color: #DDDDDD;\r
-}\r
-\r
-#plugintable, #about #plugintable td {\r
- border: 1px solid #919B9C;\r
-}\r
-\r
-#plugintable {\r
- width: 99%;\r
- margin-top: 10px;\r
-}\r
-\r
-#pluginscontainer {\r
- height: 290px;\r
- overflow: auto;\r
-}\r
-\r
-/* MSIE Specific styles */\r
-\r
-* html .panel_wrapper {\r
- width: 100%;\r
-}\r
-\r
-.column {\r
- float: left;\r
-}\r
-\r
-h1, h2, h3, h4 {\r
- color: #2B6FB6;\r
- margin: 0;\r
- padding: 0;\r
- padding-top: 5px;\r
-}\r
-\r
-h3 {\r
- font-size: 14px;\r
-}\r
-\r
-#link .panel_wrapper, #link div.current {\r
- height: 125px;\r
-}\r
-\r
-#image .panel_wrapper, #image div.current {\r
- height: 190px;\r
-}\r
-\r
-label.msg { display: none; }\r
-label.invalid { color: #EE0000; display: inline; }\r
-input.invalid { border: 1px solid #EE0000; }\r
-\r
-/* Disables the advanced tab in the table plugin. */\r
-/*\r
-#table #advanced_tab {\r
- display: none;\r
-}\r
-*/\r
-\r
-/* Disables the border input field and label in the table plugin. */\r
-/*\r
-#table #border, #table #borderlabel {\r
- display: none;\r
-}\r
-*/\r
padding-left: 2px;
}
+#markmessagemenu
+{
+ position: absolute;
+ top: 32px;
+ left: 90px;
+ width: auto;
+ visibility: hidden;
+ background-color: #F9F9F9;
+ border: 1px solid #CCC;
+ padding: 1px;
+ opacity: 0.9;
+ z-index: 240;
+}
+
+ul.toolbarmenu
+{
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+ul.toolbarmenu li
+{
+ font-size: 11px;
+ white-space: nowrap;
+ min-width: 130px;
+ width: auto !important;
+ width: 130px;
+}
+
+ul.toolbarmenu li a
+{
+ display: block;
+ color: #a0a0a0;
+ padding: 2px 8px 3px 12px;
+ text-decoration: none;
+}
+
+ul.toolbarmenu li a.active:hover
+{
+ background-color: #ddd;
+}
+
#listcontrols
{
position: absolute;
#mailboxcontrols a.active,
#mailboxcontrols a.active:active,
#mailboxcontrols a.active:visited,
+ul.toolbarmenu li a.active,
+ul.toolbarmenu li a.active:active,
+ul.toolbarmenu li a.active:visited,
td.formlinks a,
td.formlinks a:visited
{
#messagepartframe
{
- position: absolute;
- top: 0px;
- left: 0px;
- right: 0px;
- bottom: 0px;
- width: auto;
- height: auto;
+ width: 100%;
+ height: 100%;
border: 1px solid #999999;
background-color: #F9F9F9;
+ /* css hack for IE */
+ height: expression(parseInt(document.getElementById('messagepartcontainer').offsetHeight)+'px');
}
{
display: block;
height: 12px;
+ margin: 0;
padding: 3px 10px 4px 10px;
background-color: #EBEBEB;
background-image: url(images/listheader_aqua.gif);
#mailboxlist li
{
- /* height: 18px; */
font-size: 11px;
background: url(images/icons/folder-closed.png) no-repeat;
background-position: 10px 1px;
border-bottom: 1px solid #EBEBEB;
-/* IE 5.5 margin-left: -16px; */
}
#mailboxlist li.inbox
text-decoration: none;
}
-#mailboxlist li, #mailboxlist li.unread
-{
- /* background-image: url(images/mailbox_list.gif); */
-}
-
#mailboxlist li.unread
{
font-weight: bold;
background-color: #929292;
}
-#mailboxlist li.selected a
+#mailboxlist li.selected > a,
+#mailboxlist li.droptarget li.selected a
{
color: #FFF;
font-weight: bold;
padding: 0;
margin:0;
border-top: 1px solid #EBEBEB;
-}
-
-#mailboxlist ul li {
padding-left: 15px;
background-position: 25px 1px;
-}
-
-#mailboxlist li.selected li,
-#mailboxlist li.droptarget li {
background-color: #F9F9F9;
-}
-
-#mailboxlist li.unread li {
- font-weight: normal;
-}
-
-#mailboxlist li.unread li.unread {
- font-weight: bold;
-}
-
-#mailboxlist li.selected li a{
- color: black;
+ color: blue;
font-weight: normal;
}
width: expression(parseInt(document.getElementById('mailcontframe').clientWidth)+'px');
}
+/* safari hack \*/
+html>body*#messagelist[id$="messagelist"]:not([class="none"]) { table-layout: auto; }
+/**/
+
#messagelist thead tr td
{
height: 20px;
{
position:relative;
min-height: 300px;
- padding-top: 10px;
padding-bottom: 10px;
background-color: #FFFFFF;
}
div.message-part
{
- padding: 8px;
- padding-top: 10px;
- overflow: hidden;
+ padding: 10px 8px;
+ border-top: 1px solid #ccc;
+/* overflow: hidden; */
+}
+
+#messagebody div:first-child
+{
+ border-top: 0;
}
div.message-part a
#folder-manager
{
- width: 500px;
- bottom: 120px;
+ width: 540px;
+ bottom: 140px;
overflow: auto;
border: 1px solid #999999;
- height: expression((parseInt(document.documentElement.clientHeight)-215)+'px');
+ height: expression((parseInt(document.documentElement.clientHeight)-235)+'px');
}
#folder-manager.droptarget
#identity-details
{
margin-top: 30px;
- width: 500px;
+ width: 600px;
border: 1px solid #999999;
}
#bottomboxes
{
position: absolute;
- width: 500px;
- height: 100px;
+ width: 540px;
+ height: 120px;
left: 20px;
bottom: 20px;
}
div.settingsbox
{
- width: 500px;
+ width: 540px;
margin-top: 20px;
margin-bottom: 20px;
border: 1px solid #999999;
#subscription-table
{
width: 100%;
- table-layout: fixed;
}
#subscription-table tbody td
{
+ height: 16px;
padding-left: 6px;
- padding-right: 20px;
+ padding-right: 10px;
white-space: nowrap;
border-bottom: 1px solid #EBEBEB;
background-color: #F9F9F9;
background-color: #FFFFA6;
}
-#subscription-table td.name
+#subscription-table thead td.name
+{
+ width: 240px;
+}
+
+#subscription-table thead td.msgcount
+{
+ width: 70px;
+}
+
+#subscription-table thead td.subscribed
+{
+ width: 60px;
+}
+
+#subscription-table tbody td.msgcount,
+#subscription-table tbody td.subscribed
{
- width: 280px;
+ padding-left: 18px;
}
-#subscription-table td.subscribed
+#subscription-table thead td.rename,
+#subscription-table thead td.delete
{
- width: 80px;
+ width: 20px;
+ text-align: center;
}
this.id = attrib.id ? attrib.id : this.p1id + '_' + this.p2id + '_splitter';
this.orientation = attrib.orientation;
this.horizontal = (this.orientation == 'horizontal' || this.orientation == 'h');
- this.offset_1 = bw.ie ? 0 : (bw.safari ? 2 : -1);
- this.offset_2 = bw.ie ? -2 : (bw.safari ? -2 : 1);
+ this.offset_1 = bw.ie ? 0 : -1;
+ this.offset_2 = bw.ie ? -2 : 1;
this.pos = 0;
this.init = function()
<div id="identities-list">
-<roundcube:object name="itentitiesList" id="identities-table" class="records-table" cellspacing="0" summary="Identities list" editIcon="" />
+<roundcube:object name="identitiesList" id="identities-table" class="records-table" cellspacing="0" summary="Identities list" editIcon="" />
<p><roundcube:button command="add" type="input" label="newidentity" class="button" /></p>
<roundcube:button type="input" command="list" class="button" label="cancel" />
</td>
<td align="right">
- <roundcube:if condition="config:enable_htmleditor" />
- <roundcube:label name="editortype" />:
- <span class="radios-left"><roundcube:object name="editorSelector" tabindex="9" /></span>
- <roundcube:endif />
+ <roundcube:label name="editortype" />:
+ <span class="radios-left"><roundcube:object name="editorSelector" tabindex="9" /></span>
</td>
</tr>
</tbody></table>
<div id="identities-list">
-<roundcube:object name="itentitiesList" id="identities-table" class="records-table" cellspacing="0" summary="Identities list" editIcon="" />
+<roundcube:object name="identitiesList" id="identities-table" class="records-table" cellspacing="0" summary="Identities list" editIcon="" />
<p><roundcube:button command="add" type="input" label="newidentity" class="button" /></p>
<roundcube:include file="/includes/settingstabs.html" />
<div id="identities-list">
-<roundcube:object name="itentitiesList" id="identities-table" class="records-table" cellspacing="0" summary="Identities list" editIcon="" />
+<roundcube:object name="identitiesList" id="identities-table" class="records-table" cellspacing="0" summary="Identities list" editIcon="" />
<p><roundcube:button command="add" type="input" label="newidentity" class="button" /></p>
</div>
</head>
<body>
-<img src="/images/roundcube_logo.png" width="165" height="55" border="0" alt="<roundcube:object name='productname' />" hspace="10" />
+<img src="/images/roundcube_logo.png" width="165" height="55" border="0" alt="<roundcube:object name='productname' />" hspace="12" vspace="2"/>
<roundcube:object name="message" id="message" />
<roundcube:include file="/includes/links.html" />
<link rel="stylesheet" type="text/css" href="/mail.css" />
<script type="text/javascript" src="/splitter.js"></script>
+<script type="text/javascript">
+
+function rcube_mail_ui()
+{
+ this.markmenu = new rcube_layer('markmessagemenu');
+}
+
+rcube_mail_ui.prototype = {
+
+show_markmenu: function(show)
+{
+ if (typeof show == 'undefined')
+ show = this.markmenu.visible ? false : true;
+
+ var ref = rcube_find_object('markreadbutton');
+ if (show && ref)
+ this.markmenu.move(ref.offsetLeft, ref.offsetTop + ref.offsetHeight);
+
+ this.markmenu.show(show);
+},
+
+body_mouseup: function(evt, p)
+{
+ if (this.markmenu && this.markmenu.visible)
+ this.show_markmenu(false);
+},
+
+body_keypress: function(evt, p)
+{
+ if (rcube_event.get_keycode(evt) == 27 && this.markmenu && this.markmenu.visible)
+ this.show_markmenu(false);
+}
+
+};
+
+</script>
</head>
<body>
<roundcube:include file="/includes/taskbar.html" />
<roundcube:include file="/includes/header.html" />
-<div id="messagetoolbar">
-<roundcube:button command="checkmail" imageSel="/images/buttons/inbox_sel.png" imageAct="/images/buttons/inbox_act.png" imagePas="/images/buttons/inbox_pas.png" width="32" height="32" title="checkmail" />
-<roundcube:button command="compose" imageSel="/images/buttons/compose_sel.png" imageAct="/images/buttons/compose_act.png" imagePas="/images/buttons/compose_pas.png" width="32" height="32" title="writenewmessage" />
-<roundcube:button command="reply" imageSel="/images/buttons/reply_sel.png" imageAct="/images/buttons/reply_act.png" imagePas="/images/buttons/reply_pas.png" width="32" height="32" title="replytomessage" />
-<roundcube:button command="reply-all" imageSel="/images/buttons/replyall_sel.png" imageAct="/images/buttons/replyall_act.png" imagePas="/images/buttons/replyall_pas.png" width="32" height="32" title="replytoallmessage" />
-<roundcube:button command="forward" imageSel="/images/buttons/forward_sel.png" imageAct="/images/buttons/forward_act.png" imagePas="/images/buttons/forward_pas.png" width="32" height="32" title="forwardmessage" />
-<roundcube:button command="delete" imageSel="/images/buttons/delete_sel.png" imageAct="/images/buttons/delete_act.png" imagePas="/images/buttons/delete_pas.png" width="32" height="32" title="deletemessage" />
-<roundcube:button command="print" imageSel="/images/buttons/print_sel.png" imageAct="/images/buttons/print_act.png" imagePas="/images/buttons/print_pas.png" width="32" height="32" title="printmessage" />
-</div>
-
-<div id="quicksearchbar">
-<roundcube:object name="searchform" type="search" results="5" id="quicksearchbox" /><roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
-</div>
-
-<div id="messagecountbar">
-<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessages" />
-<roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" />
- <roundcube:object name="messageCountDisplay" />
-<roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" />
-<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessages" />
-</div>
-
<div id="mailboxlist-container">
-<div id="mailboxlist-header"><roundcube:label name="mailboxlist" /></div>
+<h3 id="mailboxlist-header"><roundcube:label name="mailboxlist" /></h3>
<roundcube:object name="mailboxlist" id="mailboxlist" maxlength="16" />
</div>
<roundcube:endif />
</div>
+<div id="messagetoolbar">
+<roundcube:button command="checkmail" imageSel="/images/buttons/inbox_sel.png" imageAct="/images/buttons/inbox_act.png" imagePas="/images/buttons/inbox_pas.png" width="32" height="32" title="checkmail" />
+<roundcube:button command="compose" imageSel="/images/buttons/compose_sel.png" imageAct="/images/buttons/compose_act.png" imagePas="/images/buttons/compose_pas.png" width="32" height="32" title="writenewmessage" />
+<roundcube:button id="markreadbutton" image="/images/buttons/markread_act.png" width="32" height="32" title="markmessages" onclick="rcmailUI.show_markmenu();return false" />
+<roundcube:button command="reply" imageSel="/images/buttons/reply_sel.png" imageAct="/images/buttons/reply_act.png" imagePas="/images/buttons/reply_pas.png" width="32" height="32" title="replytomessage" />
+<roundcube:button command="reply-all" imageSel="/images/buttons/replyall_sel.png" imageAct="/images/buttons/replyall_act.png" imagePas="/images/buttons/replyall_pas.png" width="32" height="32" title="replytoallmessage" />
+<roundcube:button command="forward" imageSel="/images/buttons/forward_sel.png" imageAct="/images/buttons/forward_act.png" imagePas="/images/buttons/forward_pas.png" width="32" height="32" title="forwardmessage" />
+<roundcube:button command="delete" imageSel="/images/buttons/delete_sel.png" imageAct="/images/buttons/delete_act.png" imagePas="/images/buttons/delete_pas.png" width="32" height="32" title="deletemessage" />
+<roundcube:button command="print" imageSel="/images/buttons/print_sel.png" imageAct="/images/buttons/print_act.png" imagePas="/images/buttons/print_pas.png" width="32" height="32" title="printmessage" />
+
+<div id="markmessagemenu">
+ <ul class="toolbarmenu">
+ <li><roundcube:button command="mark" prop="read" label="markread" classAct="active" /></li>
+ <li><roundcube:button command="mark" prop="unread" label="markunread" classAct="active" /></li>
+ </ul>
+</div>
+</div>
+
+<div id="quicksearchbar">
+<roundcube:object name="searchform" type="search" results="5" id="quicksearchbox" /><roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
+</div>
+
+<div id="messagecountbar">
+<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessages" />
+<roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" />
+ <roundcube:object name="messageCountDisplay" />
+<roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" />
+<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessages" />
+</div>
+
+<script type="text/javascript">
+
+var rcmailUI = new rcube_mail_ui();
+rcube_event.add_listener({ object:rcmailUI, method:'body_mouseup', event:'mouseup' });
+rcube_event.add_listener({ object:rcmailUI, method:'body_keypress', event:'keypress' });
+
+</script>
</body>
</html>
<roundcube:object name="foldersubscription" form="subscriptionform" id="subscription-table"
cellpadding="1" cellspacing="0" summary="Folder subscription table"
deleteIcon="/images/icons/folder-trash.png"
- renameIcon="/images/icons/edit.png" />
+ renameIcon="/images/icons/rename.png" />
</div>
<div id="bottomboxes">
<div class="settingspart">
<roundcube:label name="foldername" />:
-<roundcube:object name="createfolder" form="subscriptionform" />
+<roundcube:object name="createfolder" form="subscriptionform" hintbox="rcmailaddfolderhint" />
<roundcube:button command="create-folder" type="input" class="button" label="create" />
+<div id="rcmailaddfolderhint" class="hint" style="margin-top:1em; height:16px"></div>
</div>
</div>
<div id="messagepartcontainer">
-<roundcube:object name="messagePartFrame" id="messagepartframe" width="100%" height="85%" />
+<roundcube:object name="messagePartFrame" id="messagepartframe" width="100%" height="100%" />
</div>
</body>